OS十一、I/O管理和磁盘调度

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/N1neDing/article/details/82927452

程序控制I/O:处理器代表一个进程给I/O模块发送一个I/O命令,该进程进入忙等待,直到操作完成才可继续
中断驱动I/O:处理器代表进程向I/O模块发送一个I/O命令,
如果该进程的I/O命令是非阻塞的,那么处理器继续执行I/O命令的后续指令;如果是阻塞的,则将当前进程设置为阻塞态并调度其它进程
当I/O执行完后向处理器发送一个中断,再继续执行之前的指令
直接存储器访问(DMA):一个DMA模块控制内存和I/O模块1之间的数据交互,为传送一块数据,处理器给DMA模块发请求,当整个数据块传送结束后,处理器才被中断
三者的区别与联系在于:程序控制I/O是处理器控制实现I/O与内存之间传送的无中断的,中断驱动I/O是处理器控制的I/O与内存之间传送的有中断的,DMA是I/O与内存间直接传送的不需经过处理器的有中断的I/O
DMA技术工作流程如下:当处理器想读或者写一块数据时,向DMA模块发送命令,然后继续执行其他任务,即已经将I/O操作委托给DMA模块。DMA模块直接向存储器中读或写整块数据,一次传送一个字,数据不再通过处理器,传送结束后,DMA给处理器发送一个中断信号,只有传送开始和结束时才会用到处理器。
缓冲:输入请求发出前就开始执行输入传送,输出请求发出一段时间之后才开始执行输出传送
面向块的I/O设备:将信息保存在块中,块的大小通常是固定的,传送过程中一次传送一块,可以通过块号访问数据。
磁盘和USB卡是面向块的设备的代表
面向流的I/O设备:以字节流的方式输入、输出数据。
终端、打印机、通信端口、鼠标和其他只是设备和其他大多数的非辅存设备,都属于面向流的设备
单缓冲:当用户进程发出I/O请求时,操作系统给该操作分配一个位于内存中系统部分的缓冲区。输入传送的数据被放到系统缓冲区中,当传送完成时,进程会把该块一道用户空间,并立即请求另一块。称为预读或预先输入。用户进程在下一数据块读取的同时,处理已读入的数据块
双缓冲:分配两个系统缓冲区,当一个进程往一个缓冲区中传送数据的同时,操作系统正在清空另一个缓冲区,当两次输入之间的计算时间大于输入时间时,则可以保证进程不需要等待IO
循环缓冲:当使用两个以上的缓冲区时,每一个缓冲区是循环缓冲区的一个单元
寻道时间:将磁头臂移到指定磁道所需要的时间
旋转延迟:一旦选择好磁道,磁盘控制器就开始等待,直到待访问低值区域的扇区旋转到磁头处,磁头到达扇区开始位置的时间称为旋转延迟
存取时间:到达读或写位置所需要的时间,为寻道时间和旋转延迟的总和
传输时间:一旦磁头定位完成,磁头就通过下面旋转的扇区,开始执行读操作或写操作,操作的数据传送部分所需时间,T=b/rN,b表示要传送的字节数,N表示一个磁道中的字节数,r表示旋转速度
总的平均存取时间:T=平均寻道时间+1/2r+b/rN,r为旋转速度,单位为转/秒,1/2r表示平均旋转延迟,b/rN表示传输时间
FIFO:按照接收到的磁道顺序进行处理
最短服务时间优先(SSTF):是磁头臂从当前位置开始移动最少的磁盘I/O请求,即先向当前距离较短的一边移动到末尾,然后反向到另外一边末尾
SCAN:类似于SSTF,也叫电梯算法,当沿着一边到达末尾时,再返回另一边到达末尾
CSCAN:沿着一边到达最后一个磁道时,然后到另一边末尾,在从末尾向中间移动
FSCAN:当扫描开始时,使用一个队列保持老的请求,将新到达的请求放到一个新的队列中,将老的请求队列处理完之后再处理新的队列
N-step-SCAN:将磁盘请求队列分成长度为N的子队列,每次SCAN处理一个子队列,当处理一个子队列时,新请求必须添加到其他队列中。当N非常大时,接近于SCAN,当N=1时,为FIFO
目的:1提高磁盘存储器性能,通过多个磁盘,多个独立的I/O请求可以并行地进行处理,2通过通过增加冗余度来提高可靠性
RAID0:无冗余,没有冗余数据来提高性能或提供数据保护,数据成条状分布在所有可用磁盘种,每个磁盘被划分成多个条带,一个条带可以是一个物理块、扇区等。在n磁盘阵列中,最初的n个逻辑条带被保存在n个磁盘中每个磁盘的第一个条带中,接下来的n个逻辑条带被保存在n个磁盘每个中的第二个条带中
优点:请求可以并行处理,大大较少了I/O传输时间
RAID1:镜像,同2-6的区别:2-6是使用某种形式的奇偶计算来实现冗余的,而RAID1是通过临时复制所有数据来实现冗余的
定义:每个阵列的每个磁盘都有一个包含相同数据的镜像磁盘
缺点:成本问题,需要两倍于所支持的逻辑磁盘的空间
优点:1.可用于保存重要文件,因为可以提供备份2.对于读操作可以提高I/O请求速度,可以提升2倍
RAID2:汉明码冗余,错误校正使用汉明码,对每个数据磁盘中相应数据都计算一个错误校验码,并且这个码保存在多个奇偶校验磁盘中相应的文件
对于磁盘错误较多的环境是一种有效的选择,但如果可靠性很高,则会矫枉过正,不切实际
RAID3:交错位奇偶校验,不论磁盘阵列多大,RAID3只需要一个冗余磁盘,为所有数据磁盘中同一位置的位的集合计算一个简单的奇偶校验位,而不是错误校验码。
RAID4:块奇偶校验,每个数据磁盘中相应的条带计算一个逐位奇偶校验,奇偶校验位保存在奇偶校验磁盘响应的条带中,每次写操作发生时,不仅需要更新阵列用户数据,还要更新相应的奇偶校验位,且奇偶校验磁盘可能成为瓶颈,因为每次写操作都必须包含奇偶校验磁盘
RAID5:块分布奇偶校验,不同于4之处在于,将奇偶校验条带分布在所有磁盘中,可以避免奇偶校验磁盘潜在的I/O瓶颈问题
RAID6:双重冗余,采用了两种不同的奇偶校验计算,并保存在不同磁盘的不同块中,所以即使两个包含用户数据的磁盘发生错误,也可以重新生成数据
优点:提供了极高的数据可用性,必须同时又三个磁盘发生失效,数据才会丢失
缺点:导致了严重的写性能损失,每次写操作都会影响两个校验快
磁盘高速缓存:比内存小且比内存快的存储器,位于内存和处理器之间
目的:通过局部性原理,减少平均存储器存取时间
当出现一个请求某一特定扇区的I/O请求,首先检测该扇区是否在磁盘高速缓存中。如果在,通过高速缓存满足;如果不在,则把被请求的扇区从磁盘读到磁盘高速缓存中。
由于局部性原理,当一块数据被取入高速缓存以满足一个I/O请求时,很可能将来还会访问这一块数据
LRU最近最少使用算法:置换在高速缓存中未被访问的时间最长的块
LFU最不常使用页面置换算法:置换集合中被访问次数最少的块,通过关联一个计数器并改变数字实现
因为受局部性影响,如果某一段时间内重复访问多次使得数值极高,但这个间隔过去之后,它的极高的数值可能使人误解,因为接下来不会很快访问到它
基于频率的置换算法,目的:为克服LFU的缺点
当高速缓存发生一次未命中时,一个新块被取入一个新区,计数器为1;
只要停留在新区,计数器便保持为1;
如果不在新区且出现高速缓存命中时,计数器数值便增加1;
如果这个块的年龄超出了新区,它的计数器值仍为1,所以下一次置换因为其不在新区且数字较小,则会被置换

猜你喜欢

转载自blog.csdn.net/N1neDing/article/details/82927452