- 1、本文档共120页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图10-7 驱动程序接口 10.3.3 与设备无关的I/O软件 设备驱动程序与操作系统其余部分之间的接口是这一问题的一个方面。图10-7 a)所示为这样一种情形:每个设备驱动程序有不同的与操作系统的接口。这意味着,可供系统调用的驱动程序函数随驱动程序的不同而不同。这可能还意味着,驱动程序所需要的内核函数也是随驱动程序的不同而不同的。综合起来看,这意味着为每个新的驱动程序提供接口都需要大量全新的编程工作。 10.3.3 与设备无关的I/O软件 相反,图10-7 b)所示为一种不同的设计,在这种设计中所有驱动程序具有相同的接口。这样一来倘若符合驱动程序接口,那么添加一个新的驱动程序就变得容易多了。这还意味着驱动程序的编写人员知道驱动程序的接口应该是什么样子的。实际上,虽然并非所有的设备都是绝对一样的,但是通常只存在少数设备类型,而它们的确大体上是相同的。 10.3.3 与设备无关的I/O软件 这种设计的工作方式是:对于每一种设备类型,例如磁盘或打印机,操作系统定义一组驱动程序必须支持的函数。对于磁盘而言,这些函数自然地包含读和写,除此之外还包含开启和关闭电源、格式化以及其他与磁盘有关的事情。驱动程序通常包含一张表格,这张表格具有针对这些函数指向驱动程序自身的指针。当驱动程序装载时,操作系统记录下这张函数指针表的地址,所以当操作系统需要调用一个函数时,它可以通过这张表格发出间接调用。这张函数指针表定义了驱动程序与操作系统其余部分之间的接口。给定类型(磁盘、打印机等)的所有设备都必须服从这一要求。 10.3.3 与设备无关的I/O软件 另一方面是如何给I/O设备命名。与设备无关的软件要负责把符号化的设备名映射到适当的驱动程序上。例如,在UNIX系统中,像/dev/disk0这样的设备名唯一确定了一个特殊文件的i节点,这个i节点包含了主设备号,主设备号用于定位相应的驱动程序。i节点还包含次设备号,次设备号作为参数传递给驱动程序,用来确定要读或写的具体单元。所有设备都具有主设备号和次设备号,并且所有驱动程序都是通过使用主设备号来选择驱动程序而得到访问。 10.3.3 与设备无关的I/O软件 与设备命名密切相关的是设备保护,防止无权访问设备的用户越权访问。在UNIX和Windows中,设备是作为命名对象出现在文件系统中的,这意味着针对文件的常规的保护规则也适用于I/O设备。系统管理员可以为每一个设备设置适当的访问权限。 10.3.3 与设备无关的I/O软件 (2)缓冲 无论对于块设备还是对于字符设备,缓冲也是一个重要的问题。作为例子,我们考虑一个想要从调制解调器读入数据的进程。让用户进程执行read系统调用并阻塞自己以等待字符的到来,这是对到来的字符进行处理的一种可能的策略。每个字符的到来都将引起中断,中断服务过程负责将字符递交给用户进程并且将其解除阻塞。用户进程把字符放到某个地方之后可以对另一个字符执行读操作并且再次阻塞。这种处理方式的问题在于:对于每个到来的字符,都必须启动用户进程。对于短暂的数据流量让一个进程运行许多次效率会很低,所以这不是一个良好的设计。 10.3.3 与设备无关的I/O软件 一种改进措施是,用户进程在用户空间中提供一个包含n个字符的缓冲区,并且执行读入n个字符的读操作。中断服务过程负责将到来的字符放入该缓冲区中直到缓冲区填满,然后唤醒用户进程。这一方案比前一种方案的效率要高很多,但是它也有一个缺点:当一个字符到来时,如果缓冲区被分页而调出了内存就会出现问题?解决方法是将缓冲区锁定在内存中,但是如果许多进程都在内存中锁定页面,那么可用页面池就会收缩并且系统性能将下降。 10.3.3 与设备无关的I/O软件 另一种方法是在内核空间中创建一个缓冲区并且让中断处理程序将字符放到这个缓冲区中。当该缓冲区被填满的时候,将包含用户缓冲区的页面调入内存(如果需要的话),并且在一次操作中将内核缓冲区的内容复制到用户缓冲区中。这一方法的效率要高很多。 10.3.3 与设备无关的I/O软件 然而,即使这种方案也面临一个问题:正当包含用户缓冲区的页面从磁盘调入内存的时候有新的字符到来。因为缓冲区已满,所以没有地方放置这些新来的字符。一种解决问题的方法是使用第二个内核缓冲区。第一个缓冲区填满之后,在它被清空之前,使用第二个缓冲区。当第二个缓冲区填满时,就可以将它复制给用户(假设用户已经请求它)。当第二个缓冲区正在复制到用户空间的时候,第一个缓冲区可以用来接收新的字符。以这样的方法,两个缓冲区轮流使用:当一个缓冲区正在被复制到用户空间的时候,另一个缓冲区正在收集新的输入。像这样的缓冲模式称为双缓冲。 10.3.3 与设备无关的I/O软件 广泛使用的另一种形式是循环缓冲区。它由一个内存区域和两个指针组成。一个指针指向下一个
您可能关注的文档
- 程序设计基础 Java语言 教学课件 作者 余先锋experiment experiment1_07.doc
- 仓储与配送管理 第3版 教学课件 作者 李永生 等主编 第九章 仓储费与.ppt
- 常用工具软件实用教程电子教案 第10章 动画制作与屏幕保护.PPT
- 程序设计基础 Java语言 教学课件 作者 余先锋experiment experiment1_08.doc
- 操作系统基础 教学课件 作者 邓胜兰 第7章 设备管理.ppt
- 程序设计基础 Java语言 教学课件 作者 余先锋experiment experiment1_09.doc
- 常用工具软件实用教程电子教案 第11章 光盘工具.PPT
- 程序设计基础 Java语言 教学课件 作者 余先锋experiment experiment1_10.doc
- 程序设计基础 Java语言 教学课件 作者 余先锋experiment experiment1_11.doc
- 操作系统基础 教学课件 作者 邓胜兰 第8章 文件系统.ppt
文档评论(0)