- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OS5_2
Review 循环缓冲: 属于专用的缓冲(如:用于生产者/消费者),服务于特定进程之间的通信。 每个缓冲区只能存放一种类型的数据:输入数据、或输出数据。 当循环缓冲过多时,缓冲区利用率低。 缓冲池: 池中全部缓冲区为各种类型的进程共享。 即可用于输入、又可用于输出。 (1)Getbuf过程。当计算进程要使用缓冲区中的数据时,调用Getbuf过程。该过程将由指针Nextg所指示的缓冲区提供给进程使用,相应地,须把它改为现行工作缓冲区,并令Current指针指向该缓冲区的第一个单元,同时将Nextg移向下一个G缓冲区。类似地,每当输入进程要使用空缓冲区来装入数据时,也调用Getbuf过程,由该过程将指针Nexti所指示的缓冲区提供给输入进程使用,同时将Nexti指针移向下一个R缓冲区。 (2)Releasebuf过程。当计算进程把C缓冲区中的数据提取完毕时,便调用Releasebuf过程,将缓冲区C释放。此时,把该缓冲区当前(现行)工作缓冲区C改为空缓冲区R,类似地,当输入进程把缓冲区装满时,也应调用Releasebuf过程,将该缓冲区释放,并改为G缓冲区。 (1)Nexti指针追赶上Nextg指针。这意味着输入进程输入数据的速度大于计算进程处理数据的速度,已把全部可用的空缓冲区装满,无缓冲区可用。此时,输入进程应阻塞,直到计算进程把某个缓冲区中的数据全部提取完,使之成为空缓冲区R,并调用Releasebuf过程将它释放时,才将输入进程唤醒。——系统受计算限制 (2)Nextg指针追赶上Nexti指针。这意味着输入数据的速度低于计算进程处理数据的速度,使全部装有输入数据的缓冲区都被抽空,再无装有数据的缓冲区供计算进程提取数据。这时,计算进程只能阻塞,直至输入进程又装满某个缓冲区,并调用Releasebuf过程将它释放时,才去唤醒计算进程。——系统受I/O限制。 MS(type) 互斥信号量 type可以是emq、inq、outq RS(type) 资源信号量 type可以是emq、inq、outq (1)RS(inq)初值为0 (2)RS(outq)初值为0 (3)RS(emq)初值为缓冲池的容量。 同步、互斥实现、以及工作方式(P176) 输入进程需要输入 → 调用getbuf(emq)过程 → 从emq队列取出一个buffer → 用hin指向该buffer → CH输入的数据送入该buffer,buffer满 → 调用Putbuf(inq,hin)过程 → 把载有输入数据的buffer送入inq队列队尾; 计算进程需要处理输入的数据 → 调用Getbuf(inq)过程 → 从inq队列取出一个buffer → 用Sin指向该buffer → 计算进程取用该buffer中的数据处理 → 用完,调用Putbuf(emq,Sin)过程 → 把空buffer送入emq队列队尾; 5.4 I/O软件 2、缓冲池工作方式 计算进程把处理的结果交给输出进程的输出的工作过程类似,自己分析。 收容输出~提取输出过程 计算者申请一个空闲buffer 作为收容输出工作区 用完送outq队列 输出进程从outq队列取buffer 作为提取输出工作区 用完把buffer送emq队列 Procedure Getbuf(type, i) Begin Wait(RS(type)); Wait(MS(type) ); i:=Takebuf(type) ; Signal(MS(type)); End Procedure Putbuf(type, i) Begin Wait(MS(type)); Addbuf(type, i); Signal(MS(type)); Signal(RS(type)); End type 可以为: emq、inq、outq 3、同步、互斥实现 可作为四个工作区之一 用完的工作区送入相应队列 如果想从inq队列中取一个buffer,用完送回emq队列,则: Procedure Getbuf(inq , i) Begin Wait(RS(inq)); Wait(MS(inq) ); i:=Takebuf(inq) ; Signal(MS(inq)); End Procedure Putbuf(emq, i) Begin Wait(MS(emq)); Addbuf(emq, i); Signal(MS(emq)); Signal(RS(emq)); End 第五章 设备管理 5.0 引言(补充) 5.1 I/O系统 5.2 I/O控制方式 5.3 缓冲管理 5.4 I/O软件 5.5 设备分配 5.6 磁盘存储器的管理 I/O软件的设计
原创力文档


文档评论(0)