设备驱动程序实现.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
13.3.2 设备驱动程序的实现 1.块设备 块设备主要包括硬盘、软盘等存储设备,前面已经提到过,块设备驱动程序有一部分是相同的,不同的主要是真正的I/O操作的那部分。 设备驱动程序一共可能有6种操作: OPEN: 验证设备是否可用; CLOSE:确保把采用延迟写方式处理的数据真正写到设备上; READ: 将数据从设备读到调用进程所在的内存区域; WRITE:与READ执行的操作相反; IOCTL:负责对I/O设备的操作参数进行检查和修改; SCATTERED_IO:允许执行同时读写多个块的操作。 13.3.2 设备驱动程序的实现 ① 块设备驱动程序软件。 MINIX在头文件driver.h中定义了块设备驱动程序需要用到的结构定义,它们包括: driver结构:保存各驱动程序执行I/O操作所需调用函数的地址; device结构:以字节为单位保存基地址、长度等与分区相关的主要信息。 13.3.2 设备驱动程序的实现 ② 驱动程序库 可移植性是在MINIX中得到了相当的重视,MINIX的目标是当它被移植到一台机器上时,应该能够使用这台机器上原先运行的操作系统采用的分区表格式。 在IBM兼容机上,硬盘分区的标准由MS-DOS的fdisk命令确定。 MINIX包含了支持IBM兼容机分区的源代码,为了方便移植,这些与平台有关但是与具体硬件无关的代码没有被放在driver.c文件中,而是单独的放在drvlib.h和drvlib.c文件中。 13.3.2 设备驱动程序的实现 ③ RAM盘 在MINIX中存在一个RAM盘的概念,简而言之就是保留一部分内存作为磁盘来使用,对于用户来说,它就像一个磁盘一样。 RAM盘的驱动程序实际上由四个紧密联系的部分组成,也就是具有以下四个次设备: 0:/dev/ram:真正的RAM盘,它的大小和基址在MINIX启动时由FS确定; 1:/dev/mem:用于读写物理内存,通常读出的是起始于内存零地址的内容,写操作则会改写中断向量; 2:/dev/kmem:用于读写内核内存,与1的功能类似; 3:/dev/null:负责接收数据并把数据抛弃掉。 13.3.2 设备驱动程序的实现 2.MINIX的系统任务 MINIX中将文件管理和内存管理摒弃在内核之外,禁止它们把信息写入内核.所以,如果内存管理系统想把消息通知给内核时,就需要借助于一个第三者——对内核表拥有存取权的内核任务——的帮助,这个任务一般被称之为系统任务。 系统任务和I/O任务十分类似,它们都实现了一个接口,具有相同的权限,都被链入内核中,所不同的仅仅是系统任务不控制具体I/O设备,它所服务的对象是系统中大部分的内部组件。 13.3.2 设备驱动程序的实现 13.4 内存管理 13.4.1内存管理概述 由于MINIX是专门设计在IBM兼容机等微型机上运行的操作系统,因此它的内存管理(MM)是比较简单的,不分页,也不交换: MM保存一张按照地址顺序排列的空闲地址列表,当系统调用FORK和EXEC请求内存时,MM利用首次适配算法找到一块足够大的空闲内存分配给程序使用。 而一旦程序装入内存则一直在原位置运行到结束。 可以说,内存管理的主要工作就是操作进程表和空闲地址列表这两张表格,以及处理系统调用FORK和EXEC。 13.4.1内存管理概述 1.内存的消息处理 和I/O相仿,MM在系统初始化以后进入自己的主循环,等待消息,一旦收到消息就进行处理并发送应答消息。 13.4.1内存管理概述 13.4.1内存管理概述 2.系统调用 下面我们来看看系统调用FORK、EXEC和BRK的处理过程。 ① FORK。 执行FORK的过程很简单,收到FORK调用的请求后,MM就检查进程表中是否存在空闲位置,如果存在,就尝试为新建立的子进程分配内存,随后就将内存地址等信息填入一个空闲的进程表项,最后发出通知公布建立了一个新进程。 进程的终止则更复杂一些,当进程自己退出(或被信号杀死)并且被父进程通过WAIT调用观察到以后,该进程才会真正被删除,如果第二个条件没有满足,子进程就会被挂起,这种状态在MINIX中称为“僵死”。 13.4.1内存管理概述 ② EXEC。这个调用负责内存映像的更新,包括设置新堆栈,它也是MINIX中最复杂的系统调用。EXEC的复杂主要是由两个方面的因素决定的: 次数众多的检测:EXEC执行时十分谨慎,为了保证有足够内存容纳新映像,必须进行检测。 设置初始堆栈:我们通常用库函数execve来调用EXEC,这个函数包含三个参数:被执行文件名的地址指针;一个指针数组的地址指针,数组中的元素分别指向一个参数;第三个参数同样是一个指针数组的地址指针。 13.4.1内存管理概述 ③ BRK。BRK调用可以调整数据段的上限。有两个过程都可以调

文档评论(0)

wq640326 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档