- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
floppysetupr初flpy软盘DMA
floppysetupr初flpy软盘DMA通道2.置软盘中断指针dofloppy为rwinterr
为:首先系统指明控制器在执行命令结束而引发的中断过程中应该调用的C函数,然后向块设备控制器发送读、写
的分区结构如下:4/15与代码联系较紧密的是主引导记录的分区表,内核中partition结构完全对应
块设备驱动程序介绍
--------------------- 者:
----------------------日-期:
1 / 15
了分区表的字段。5/156/15硬盘参数及类型(Linux0.11
了分区表的字段。5/156/15硬盘参数及类型(Linux0.11只支持最多两个硬盘)hdinfoh
amdisk)与缓冲管理之间的接口程序,主要功能是为块设备创建块设备读写请求项,并插入到指定块设备请
st函数,hd.c中其余函数均为其服务。以下为dohdrequest流程8/15详见p137解释和p
备表项的currentrequest指向当前需要处理的请求项数组中的请求项,在请求项数组中的请求项之
../小牛文件夹/已上传 baidu/.shu./
块设备驱动程序
Linux0.11 内核包含 3 个块设备的驱动: ramdisk ,硬盘,软盘。
首先需要注意的块设备的操作方式:在系统(内核)与硬盘进行IO 操作时,需要 考虑三个对象之间的交互作用。它们是系统、控制器和驱动器(例如硬盘或软盘驱 动器)。
系统可以直接向控制器发送命令或等待控制器发出中断请求:控制器在接 受到命令后就会控制驱动器的操作,读/ 写数据或者进行其他操作。因此我们可以 把这里控制器发出的中断信号看作是这三者之间的同步操作信号,所经历的操作步 骤为:
首先系统指明控制器在执行命令结束而引发的中断过程中应该调用的C 函 数,然后向块设备控制器发送读、写、复位或其他操作命令。当控制器完成了指定 的命令,会发出中断请求信号,引发系统执行块设备的中断处理过程, 并在其中调 用指定的 C 函数对读/ 写或其他命令进行命令结束后的处理工作。
块设备表项和请求项数组构成的数据结构是块设备部分的核心数据结构。
请求队列数组与块设备结构为如下关系
2 / 15
ppy为seekinterrupt中断设置驱动器参数设置驱动器传输速率执行寻道操作seekinter
ppy为seekinterrupt中断设置驱动器参数设置驱动器传输速率执行寻道操作seekinter
.若不需要寻道,执行setuprwfloppy,否则发送磁头寻道命令及参数并置软盘中断指针doflo
st函数,hd.c中其余函数均为其服务。以下为dohdrequest流程8/15详见p137解释和p
断中被调用,所以该函数被反复调用,用来处理硬盘复位、重校、读、写的请求。下面分三部分对该函数拆解:9
请求项数组存放所有系统中对块设备的请求,原因估计是块设备一般都是低速外 设,所以处理时间较长,来不及的请求先存储起来。每个块设备表项的 current_request 指向当前需要处理的请求项数组中的请求项,在请求项数组中的 请求项之间用指针相,这样就构成了对某一设备的请求队列。
下面分析 ll_rw_blk.c 程序,它是块设备(软硬盘, ramdisk )与缓冲管理之间的 接口程序,主要功能是为块设备创建块设备读写请求项,并插入到指定块设备请求 队列中。实际的读写操作由请求项处理函数 request_fn 完成。 request_fn 通过 blk.h 的宏定义映射到实际设备的操作( do_hd_request ,do_fd_request , do_rd_request )
ll_rw_block 调用序列
3 / 15
断中被调用,所以该函数被反复调用,用来处理硬盘复位、重校、读、写的请求。下面分三部分对该函数拆解:9lrwblock调用序列
断中被调用,所以该函数被反复调用,用来处理硬盘复位、重校、读、写的请求。下面分三部分对该函数拆解:9
lrwblock调用序列3/15如上图,llrwblock程序为左半边图,作用是往请求项链表中插入请
ppy.c,其主流程同样是dofdrequest,dofdrequest错误处理流程与硬盘驱动最大的
,每次处理读、写请求都可能会经历,是保证操作成功的必要步骤。中断过程是由硬盘控制器触发的中断引起的,
如上图, ll_rw_block 程序为左半边图,作用是往请求项链表中插入请求项,插完 后调用 request_fn() 会引发中断逐个处理某设备的所有请求项。插入请求项是利 用电梯算法插入到对应某个设备的请求链表中。
对于硬盘,首先涉及的是硬
原创力文档


文档评论(0)