第7章 设备管理试卷.ppt

循环缓冲 当输入、输出的速度基本相匹配时,可使用双缓冲,但若两者的速度相差甚远时,双缓冲的效果就不太理想,因此可有多缓冲。典型的即生产者和消费者问题。 缓冲池 以上的缓冲只能用于某一进程,他们属于专用缓冲。为了提高缓冲区的利用率,可采用公用缓冲池。 三个缓冲区链组成的队列: 空缓冲区队列emq 输入队列inq 输出队列outq 缓冲池 四种工作缓冲区: 用于收容输入数据的工作缓冲区hin 用于提取输入数据的工作缓冲区sin 用于收容输出数据的工作缓冲区hout 用于提取输出数据的工作缓冲区sout 缓冲池管理的两个过程GetBuf和PutBuf Procedure Putbuf(type,number) { wait(MS(type)); Addbuf(type,number); Signal(MS(type)); Signal(RS(type)); } Procedure Getbuf(type) { wait(RS(type)); //同步信号灯 wait(MS(type)); //互斥信号灯B(number)=Takebuf(type); //从队列中摘取一缓冲区 Signal(MS(type)); } ?对三个队列的操作是类似的,主要有两个操作: ? AddBuf(Type,number):将由number指向的缓冲区挂在某个队列Type ? TakeBuf(Type):从Type指示的某个队列上,摘下一个缓冲区。 ?实现互斥和同步,系统设置两个过程:GetBuf和PutBuf。 缓冲池管理的工作方式 ?收容输入:输入进程需要输入数据时,调用GetBuf(emq) 从emq队列摘下一空缓冲区,作为收容输入工作缓冲区hin。把数据输入其中,之后调用PutBuf(inq,hin),将缓冲区挂在输入队列inq上。 ?提取输入:计算进程需要输入数据时,调用GetBuf(inq)从输入队列inq中取下一缓冲区作为提取输入工作缓冲区sin,计算进程提取数据后调用PutBuf(emq,sin),将缓冲区挂在空缓冲队列emq。 ?收容输出:当计算进程需要输出数据时,调用GetBuf(emq)从emq中取下一空缓冲区作为收容输出的工作缓冲区hout,当装满数据后,调PutBuf(outq,hout),将该缓冲区挂在输出缓冲队列outq ?提取输出:当输出进程工作时,调用GetBuf(outq)过程,从输出队列outq中取下一个装满输出数据的缓冲区作为提取输出工作缓冲区sout,在数据取完后,再调用PutBuf(emq,sout)过程,将该缓冲区挂在空缓冲队列emq的队尾。 磁盘高速缓存 ?磁盘高速缓存的形式:(磁盘的速度比内存低4~6数量级) 内存单独开辟一存储空间。 内存空间变成缓冲池,供请页系统和磁盘I/O(高速缓存)共享。 ?数据交付: 是指将磁盘高速缓存中的数据传送给请求者进程,当有一进程请求访问某个盘块中的数据时,由核心先去查看缓存,若其中有进程所需访问的盘块数据的拷贝,便直接读出。 数据交付方式 数据交付 指针交付 ?置换算法:在设计置换算法时,除考虑“最近最久未使用”这一原则,还考虑: 访问频率 可预见性 数据的一致性 将高速缓存中的所有盘块拉成LRU链。链头放严重影响数据一致性的盘块和很久不用的数据,优先写回磁盘。以减少数据不一致的概率和腾出高速缓存的空间。 ?周期性地写磁盘: 在UNIX中,后台运行一个系统调用SYNC,该调用的功能是强制性地将所有在高速缓存中已修改的盘块数据写回磁盘。 在MS-DOS中,只要高速缓存中的某盘块数据被修改,便立即将它写回磁盘,并将这种高速缓存称为“写穿透高速缓存”。 缓存内容的置换和写回 提高磁盘I/O速度的其他方法 提前读 延迟写 虚拟盘 * * 为了解决人机矛盾及CPU和I/O设备之间速度不匹配的矛盾,20世纪50年代末出现了脱机输入/输出(Off-Line I/O)技术。该技术是事先将装有用户程序和数据的纸带(或卡片)装入纸带输入机(或卡片机),在一台外围机的控制下,把纸带(卡片)上的数据(程序)输入到磁带上。当CPU需要这些程序和数据时,再从磁带上将其高速地调入内存。 类似地,当CPU需要输出时,可由CPU直接高速地把数据从内存送到磁带上,然后再在另一台外围机的控制下,将磁带上的结果通过相应的输出设备输出。图1-3示出了脱机输入/输出过程。由于程序和数据的输入和输出都是在外围机的控制下完成的,或者说,它们是在脱离主机的情况下进行的,故称为脱机输入/输出方式;反之,在主机的直接控制下进行输入/输出的方式称为联机 。   输入/输出(On-Line I/O)方式。这种脱机I/O方式的主要优点如下:   (1) 减少了CPU的空闲

文档评论(0)

1亿VIP精品文档

相关文档