




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录摘要11 引言11.1 研究背景11.2 研究目的和意义21.3 主要研究工作22 MINIX硬盘驱动程序22.1 MINIX硬盘驱动程序原理22.2 MINIX硬盘驱动程序实现42.2.1 主要数据结构分析42.2.2主要操作实现53 总结7致谢8参考文献88MINIX磁盘驱动程序研究摘要本文对I/O设备及驱动程序进行了分析,主要研究了MINIX硬盘驱动程序的基本原理,通过阅读代码,分析了MINIX硬盘驱动程序所用的主要数据结构及主要函数的实现。关键词:MINIX,I/O设备,磁盘驱动程序1 引言1.1 研究背景I/O设备作为计算机的一个重要组成部分占据整个操作系统的相当部分,对计算机的整体性能有很大影响。操作系统的主要功能之一是控制所有输入输出设备,它必须向设备发出命令,捕获中断并进行错误处理,还必须提供一个设备与系统其余部分之间的简单易用的接口。设备管理的一个基本特征是设备处理的抽象性,即所有硬件设备都被看成普通文件,可以通过与操纵普通文件相同的系统调用来打开、关闭、读取和写入设备。图1表示了设备访问的层次关系。图1 设备访问层次图I/O设备大致可以分为两类:块设备和字符设备。块设备将信息存储在固定大小的块中,每个块都有自己的地址。块设备的基本特征是每个块都能够独立于其他块而读写。磁盘是最常见的块设备。 块设备和字符设备的模型具有足够的一般性,可以作为使处理不同I/O设备的操作系统软件具有设备无关性的基础。例如,文件系统仅仅控制抽象的块设备,而把与设备有关的部分留给较低层软件,即设备驱动程序去处理。设备驱动程序是操作系统内核和机器硬件之间的接口,设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作,设备驱动程序是内核的一部分,它完成以下的功能:对设备初始化和释放;数据从内核传送到硬件和从硬件读取数据;读取应用程序传送给设备文件的数据和回送应用程序请求的数据;检测和处理设备出现的错误。1.2 研究目的和意义计算机CPU的处理速度越来越快,内存和硬盘的容量也越来越大,但是相对于CPU处理速度的增长,硬盘的读写速度增长缓慢,计算机的I/O速度成了计算机系统性能提高的瓶颈。本文主要研究MINIX操作系统的硬盘驱动程序,通过分析MINIX的驱动程序,了解MINIX硬盘驱动的基本原理和设计模式,掌握MINIX的硬盘驱动的实现,加深了对操作系统的理解。1.3 主要研究工作本文主要研究了MINIX硬盘驱动程序的基本原理,并对MINIX硬盘驱动程序的实现进行了分析。2 MINIX硬盘驱动程序2.1 MINIX硬盘驱动程序原理不同计算机家族成员使用的处理器不同,而且基本硬件也有很大区别。比较老的奔腾系列使用16位的AT总线,而最新的设计仅仅提供PCI总线。对每一类总线,都有一个与之对应的I/O适配器系列,为了达到这样的可伸缩性,操作系统不应限制只能够使用一种适配器。与总线设计同时配套的还有BIOS中的固件。为了更好地利用以前的硬件,同时使MINIX能够运行在以前老版本的硬件环境下,则存在至少四种基本类型的硬盘控制器最初的8位XT类型控制器、16位AT类型控制器,以及IBM PS/2系列计算机中两种不同类型的控制器。MINIX主要采用这一方法:在内核中编译几个不同的硬盘驱动程序,提供一种方法使用户决定使用哪一个。这样MINIX引导监控程序允许在启动时读各种引导参数,可以手工输入这些参数,也可以将其永久存放于磁盘上。在启动时如果发现引导参数格式为label = AT则在MINIX启动时强制使用IDE硬盘驱动程序(at_wini)。这依赖于at_wini驱动程序分配了这个标号。标号在引导映像编译阶段被分配。为了减少支持多个硬盘驱动程序所导致的问题,MINIX还做了其他两件事。第一是提供了一个支持在MINIX和ROM BIOS硬盘之间接口的驱动程序,这个驱动程序几乎可以保证在所有的系统下都可以工作,通过使用引导参数label = BIOS来选择,不过一般这是可求助的最后一种办法。MINIX处理驱动程序的另一策略是尽可能推迟初始化工作。这样,如果在某些硬件配置中没有硬盘驱动程序可用,则仍然可以从软盘启动,以完成一些有用的工作,只要不访问硬盘,MINIX就不会有任何问题。硬盘任务的主循环可以执行9种标准请求。因为在硬盘上总有分区和子分区,所以DEV_OPEN请求需要执行大量的工作。当打开设备时,必须首先读入这些代码。每一个DEV_READ请求、DEV_WRITE请求、DEV_GATHER请求和DEV_SCATTER请求都分成两个阶段来处理:准备和传输。对于硬盘,DEV_CANCEL请求和DEV_SELECT请求被忽略。硬盘驱动程序自己不进行调度算法,该项工作是由文件系统完成的,它将集中/分散I/O请求组合起来成为请求队列。来自文件系统缓存的诸如DEV_GATHER以及DEV_SCATTER的请求申请多个块,但驱动程序也能够处理大小为扇区尺寸任意倍的请求。所有硬盘驱动程序的主循环将把一个单独块数据的请求转换为请求向量中的一个元素。请求队列中的元素都针对连续的磁盘扇区,并且文件系统在将队列交给驱动程序之前会对其进行排序,故对一个完整的请求队列而言,能够在磁盘上指出最开始的请求位置就足够了。2.2 MINIX硬盘驱动程序实现2.2.1 主要数据结构分析MINIX中AT风格的驱动程序在at_wini.c中,这是一个面向高级设备的复杂驱动程序,有好几页宏定义了控制器寄存器、状态位和命令、数据结构和原型。1. 宏定义用宏定义了温侧斯特磁盘控制器用到的寄存器,有读写寄存器,只读寄存器和只写寄存器。2. command这是用来描述驱动器向温侧斯特硬盘控制器发送命令的数据结构。其中包括了请求数据的大小count,读写的扇区号 sector,读写的磁道号cyl_lo等必须的参数。3. wini这是用来描述硬盘设备驱动器的数据结构,每个驱动器对应一个这样的数据结构。其中包括了该驱动器相应的状态 state,中断请求号irq,柱面的逻辑号lcylinders,磁头的逻辑号 lheads等信息。4. trans这是用来描述传输请求的数据结构,该结构包含描述此次传输所属的I/O请求 iop,传输的扇区号block,传输数据的大小 count 以及传输数据所在的物理地址 phys。在w_finish() 函数中用到了这个数据结构,w_finish()的功能是完成聚集的I/O请求。5. w_dtab这是每个块设备驱动程序都有的一个数据结构。w_tab被初始化为指向实际完成这项工作的函数指针。这些指针大多数定义在at_wini.c中,由于硬盘不需要特殊的清除操作,所以dr_cleanup指向了普通的在driver.c中的nop_cleaanup,和其他不需要特殊清除操作的设备驱动程序共享了该函数。该结构采用了操作系统、文件系统惯用的方式,在一个结构中定义变量名、函数指针。该结构中包含设备名 w_name,这是一个变量,打开设备操作的函数指针w_do_open,以及其他几个操作的函数指针。2.2.2 主要操作实现硬盘驱动的主流程为:入口函数调用初始化参数的函数init_params()初始化驱动器的各项参数,然后调用driver_task(&w_dtab)主循环接受来自文件系统的消息,再调用相应的函数完成文件系统的请求。1. void at_winchester_task()这个函数是硬盘驱动器的入口函数,只有两行代码。该函数调用一个由硬件决定的初始化过程init_params(),然后调用driver.c中的主循环driver_task(&w_dtab)。这个循环永远运行,把调用分派到 driver表中指向的各种函数。2. init_params()因为硬盘是机械电子存储设备,所以要做一定量的工作来初始化硬盘驱动器。有关硬盘的各种参数保存于数组wini中,作为推迟初始化策略的一部分,由于在必须使用设备以前对设备初始化可能会失败,所以在内核初始化时调用的init_params并不做任何访问磁盘的工作。它做的主要工作是把有关磁盘的逻辑配置信息拷贝到wini数组中。这些信息是ROM BIOS从CMOS存储器中提取的。3. driver_task(&w_dtab)这个是驱动器的主循环,接收来自文件系统进程的消息,调用相应的函数处理。函数的具体过程如图2所示。图2 Drive_task 过程4. w_do_open(dp, m_ptr)w_do_open调用w_prepare来 确定请求的设备是否合法,然后调用w_identify来确定设备的类型,并初始化在数组wini 中的其他一些参数。最后,使用在数组wini中的计数器检测从MINIX启动以来是否第一次打 开设备。检测完毕后,计数器加1。如果是第一次DEV_OPEN操作,就调用partition函数。5. int w_schedule(proc_nr, iop)在SCATTERED_IO请求中指示的可选数据传输位在向控制器传输的操作中复位,但是注意该位还被保留在iorequest_s结构的io_request域中。对于硬盘,驱动程序将试图满足所有的请求,但是就象我们看到的那样,如果出错的话,驱动程序可能会决定不这样做。如果有等待的请求(通过测试w_count大于零来检测)而且如果下一个要读的扇区和上一个请求的扇区是不连续的,则调用w_finish函数来结束前一个操作。否则,更新w_nextblock变量,在这个变量中存放的是下一个扇区号。6. w_finish()这个函数执行前一次请求,结束前一次操作。在进入主循环以前,通过预先设置变量r为出错来实施强制重新复位控制器。如果对函数w_specify的调用成功地完成了command结构中的命令,就初始化cdm来执行数据传输。7. com_out(cmd)如果控制器没有准备好或者在预先设置的时间范围内没有准备好,那么调用com_out可能会失败。在这种情况下,出错计数加1。如果出错计数到达了MAX_ERRORS,则放弃初始化工作,否则con tinue语句使循环重新执行。8. w_do_close()对常规的硬盘几乎不作任何工作。当支持的设备为CD_ROM或其 他可移动的设备时,这个例程需要扩展为产生一个命令以打开驱动器或弹出CD,具体如何执行取决于硬件支持。3 总结本文主要研究了MINIX硬盘驱动程序的基本原理,分析了MINIX硬盘驱动程序所用的主要数据结构及主要函数的实现。硬盘作为计算机的一个主要块设备,操作系统需要通过调用相应的硬盘驱动程序才能与硬盘交互。MINIX3支持4种类型的硬盘驱动,默认启动的是AT盘,如果要启动其它类型的硬盘驱动程序可以在启动的时候通过参数指定,这种设计模式既简化了系统的启动又保证了系统支持的硬盘类型多样性。致谢参考文献1. Andrew S. Tanenbaum, A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电影获奖发言稿
- 中班认识苗族课件
- 人体发育学课件
- 2025版房产中介公司知识产权保护合作协议
- 二零二五年毛石石材批发市场合作协议
- 二零二五年度新能源设备维修保养与能源管理协议
- 二零二五年度汽车后市场零部件代理合同
- 二零二五年度专业舞台灯光音响租赁合同样本
- 二零二五年度锻件制造企业节能减排技术改造合同
- 2025版智能家居家居装修工程绿色施工安全协议
- 2023年福建省泉州市初中化学学科教学研训讲座-明晰目标要求优化行动策略
- 山西人文知识竞赛考试题库及答案(500题)
- 医疗器械操作规程
- 小学科学仪器室建设标准(二类)
- 5S管理知识之现场改善培训课件
- 人行道及附属工程监理细则
- 产科手术病人的护理-胎头吸引术(妇产科护理课件)
- 辅警考试公安基础知识考试真题库附答案
- 32式太极剑剑谱
- 高等教育新论复习提纲-czy
- GB/T 5118-2012热强钢焊条
评论
0/150
提交评论