中山大学操作系统期末复习-吴峻峰.pdfVIP

  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文档。上传文档
查看更多
期末复习 一、I/O 设备缓冲机制 1 引入缓冲的原因 ① 缓和CPU 和IO 设备间的速度不匹配矛盾 计算时输出(输入)设备等待CPU,输出(输入)时CPU 等待打印机(输入) ② 减少CPU 中断频率,放宽对CPU 中断响应时间的限制 如果从远地终端发来的数据仅用一位缓冲接收,则每次收到一位数据便中断一次 CPU,即段时间就要中断CPU,CPU 也必须在同样的短时间内作出相应否则数据就被冲 掉。因此需要设置多位缓冲。 ③ 解决数据粒度不匹配问题 若生产者生产的数据粒度比消费者消费的数据粒度小,生产者可以产生多个数据单 元数据,直到总和达到消费者进程要求的数据单元大小,消费者再从缓冲区中取出消费; 反之,若生产者生产的数据粒度比消费者消费的数据粒度大,对于生产者每次生产的数 据,消费者可分几次从缓冲区取出消费。 ④ 提高CPU 与IO 设备的并行性 生产者在生产一批数据并将其放入缓冲区后,便可立即进行下一次生产,同时,消 费者可以从缓冲区取出数据消费,CPU 与打印机可以实现并行工作。 2 缓冲区管理 2.1 单缓冲 在单缓冲情况下,每当用户进程发出一I/O 请求时,操作系统便在主存中为之分配 一缓冲区,如图a 所示。在块设备输入时,假定从磁盘把一块数据输入到缓冲区的时间 为 T , OS 将该缓冲区中的数据传送到用户区的时间为 M,而CPU 对这一块数据处理 (计算)的时间为C,由于T 和C 是可以并行的,当TC 时,系统对每一块数据的处理 时间为M+T;反之则为M+C,故可把系统对每一块数据的处理时间表示为Max(C, T) + M。 在字符设备输入时,缓冲区用于暂存用户输入的一行数据,在输入期间,用户进程 被挂起以等待数据输入完毕;在输出时,用户进程将一行数据输入到缓冲区后继续进行 处理,当用户进程已有第二行数据输出时,如果第一行数据尚未被提起完毕,则此时用 户进程应阻塞。 2.2 双缓冲 为了加快输入和输出速度,提高设备利用率,人们又引入了双缓冲区机制,也称为 缓冲兑换。在设备输入时,先将数据送入第一缓冲区,装满后便转向第二缓冲区。此时 操作系统可以从第一缓冲区中移出数据,并送入用户进程(如图a) 。接着由CPU 对数据 进行计算。在双缓冲时,系统处理一块数据的时间可以粗略地认为是Max(C,T),如果CT, 可使块设备连续输入;如果CT,则可使CPU 不必等待设备输入。对于字符设备,若采 用行输入方式,则采用双缓冲通常能消除用户的等待时间,即用户在输入完第一行后, 在CPU 执行第一行中的命令时,用户可继续向第二缓冲区输入下一行数据。 2.3 环形缓冲 环形缓冲区的组织 (1) 多个缓冲区。在环形缓冲中包括多个缓冲区,其中每个缓冲区的大小相同。作为 输入的多缓冲区可分为三种类型:用于装输入数据的空缓冲区R、已装满数据的缓冲区 G 以及计算进程正在使用的现行工作缓冲区C,如图所示 (2) 多个指针。作为输入的缓冲区可设置三个指针:用于指示计算进程下一个可用缓 冲区G 的指针Nextg、指示输入进程下次可用的空缓冲区R的指针Nexti,以及用于指示 计算进程正在使用的缓冲区C的指针Current 。 环形缓冲区的使用 (1) Getbuf过程。当计算进程要使用缓冲区中的数据时,可调用Getbuf过程。该过程将 由指针Nextg所指示的缓冲区提供给进程使用,相应的,须把它改为现行工作缓冲区, 并令Current指针指向该缓冲区的第一个单元,同时将Nextg移向下一个G缓冲区。类似 地,每当输入进程要使用空缓冲区来装入数据时,也调用Getbuf过程,由该过程将指 针Nexti所指示的缓冲区提供给输入进程使用,同时将Nexti指针移向下一个R缓冲区。 (2) Releasebuf过程。当计算进程把C缓冲区中的数据提取完毕时,便调用Releasebuf过 程,将缓冲区C释放。此时,把该缓冲区由当前工作缓冲区C改成空缓冲区R。类似 的,当输入进程把缓冲区装满时,也应调用Releasebuf过程,将该缓冲区释放,并改为 G缓冲区。 进程之间的同步问题 (1) Nexti指针追赶上Nextg指针。这意味着输入进程输入数据的速度大于计算机进程处 理数据的速度,已把全部可用的空缓冲区

文档评论(0)

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

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

1亿VIP精品文档

相关文档