IO管理和磁盘调度解析
虚拟化存储的IO优化与调度策略(五)

虚拟化存储的IO优化与调度策略随着科技的快速发展和数据量的急剧增加,虚拟化存储已成为现代计算机系统中不可或缺的一个组成部分。
然而,虚拟化存储所面临的IO优化与调度策略的挑战也日益凸显。
在本文中,我们将探讨虚拟化存储的IO优化和调度策略的重要性,并从不同角度剖析其最佳实践方法。
首先,虚拟化存储的IO优化至关重要。
传统物理服务器的磁盘系统通常是直接连接到主机,因此可以通过硬件升级或更换更快的磁盘来实现IO性能的提升。
然而,在虚拟化环境中,多个虚拟机共享相同的物理磁盘,这就使得IO优化变得更为复杂。
为了充分利用虚拟化环境的优势,我们需要采取一些策略来改善其IO性能。
一种常见的策略是使用缓存技术。
虚拟化存储的缓存技术可以提供更快的IO响应时间,并减少磁盘IOPS(Input/Output Operations Per Second)的负载。
例如,将存储数据缓存在主机内存中,可以大大减少对磁盘的频繁访问,从而提升虚拟机的IO性能。
此外,使用缓存还可以提高磁盘的数据局部性,减少随机IO操作,进而提升整个系统的IO吞吐量。
另一种常用的IO优化方法是采用冗余数据删除技术。
在虚拟化存储中,由于存在大量的冗余数据,存储占用率往往非常高。
为了提高存储的利用效率,我们可以使用数据去重技术,通过识别并移除重复的数据块,从而减少存储空间的占用。
此外,冗余数据删除还可以降低IO负载,提高虚拟机的IO性能。
除了IO优化,虚拟化存储的调度策略也是至关重要的。
在实际的虚拟化环境中,经常会遇到多个虚拟机同时请求IO资源的情况。
如果没有合适的调度策略,IO请求可能会出现争用,从而导致性能下降。
因此,为了更好地管理IO资源,我们需要采取一些调度策略以实现公平和高效的资源分配。
一种常见的调度策略是基于权重的调度。
每个虚拟机可以被分配一个权重,根据其重要性和资源需求的不同来调度IO请求。
较高权重的虚拟机将优先获得IO资源,并获得更快的IO响应时间。
linux 磁盘调度策略

linux 磁盘调度策略Linux磁盘调度策略磁盘调度策略是操作系统中的一个重要组成部分,它负责管理和调度磁盘上的IO请求,以提高磁盘的性能和效率。
Linux操作系统提供了几种不同的磁盘调度策略,如CFQ、Deadline、NOOP等,本文将详细介绍这些策略的原理和特点。
1. CFQ调度策略CFQ(Completely Fair Queuing)是Linux内核默认的磁盘调度策略。
CFQ调度策略基于时间片算法,将磁盘IO请求划分为多个队列,并按照IO请求到达的时间顺序进行调度。
每个队列都有一个时间片,当一个队列的时间片用完后,会切换到其他队列进行调度,以保证每个队列都能得到公平的服务。
CFQ调度策略适用于大多数情况下的磁盘访问,能够提供较好的性能和响应时间。
2. Deadline调度策略Deadline调度策略是一种基于截止时间的调度算法。
它将磁盘IO 请求划分为两个队列:读队列和写队列。
对于读请求,Deadline调度策略将其放入读队列,并按照截止时间进行调度;对于写请求,Deadline调度策略将其放入写队列,并按照截止时间进行调度。
Deadline调度策略的优点是能够提供较好的响应时间,适用于对响应时间要求较高的应用场景。
3. NOOP调度策略NOOP调度策略是一种简单的FIFO调度算法。
它不对IO请求进行任何排序或调度,只是按照IO请求到达的顺序进行处理。
NOOP 调度策略适用于低负载情况下的磁盘访问,能够提供较低的延迟和较高的吞吐量。
除了上述三种常用的磁盘调度策略外,Linux操作系统还提供了其他一些调度策略,如Anticipatory、AS、BFQ等。
这些调度策略在特定的应用场景下可能会有更好的性能表现,但通常不作为默认的调度策略。
在实际应用中,选择适合的磁盘调度策略对于提高系统的性能和效率非常重要。
不同的应用场景可能需要不同的调度策略。
例如,对于对响应时间要求较高的交互式应用,可以选择Deadline调度策略;对于需要提高吞吐量的批处理应用,可以选择CFQ调度策略。
IO管理

t
磁头总共移动632个磁道,平均寻道长度79
示例:假定开始磁头位于168号磁道,有如下的 请求序列:201,288,140,225,117,227,168,170
117 140 168 170 201 225 227 288
t
公平、简单,但是平均寻道时间较长
最短寻道时间优先SSTF 优先选择请求队列中柱面离磁头最 近的请求,使每次寻道时间最短。
输入输出(I/O)管理
操作系统原理
主要内容
I/O控制方式
高速缓存与缓冲区
假脱机技术(spooling) 磁盘组织与管理
I/O控制方式
1. 程序I/O方式
处理机向控制器发出一条I/O指令启动输入设备输入数据 时,同时把状态寄存器中的忙/闲标志busy臵为1,然后便不 断地循环测试busy。 当busy=1时,表示输入机尚未输完一个字(符),处理机 应继续对该标志进行测试,直至busy=0,表明输入机已将输 入数据送入控制器的数据寄存器中。于是处理机将数据寄存 器中的数据取出,送入内存指定单元中,这样便完成了一个 字(符)的I/O。接着再去启动读下一个数据,并臵busy=1。
示例:假定开始磁头位于168号磁道,有如下的请 求序列:201,288,140,225,117,227,168,170
117 140 168 170 201 225 227 288
t
磁头总共移动226个磁道,平均寻道长度28.3
示例:假定开始磁头位于168号磁道,有如下的请 求序列:201,288,140,225,117,227,168,170
在I/O设备输入每个数据的过程中,由于无需CPU干预, 因而可使CPU与I/O设备并行工作。仅当输完一个数据时,才 需CPU花费极短的时间去做些中断处理。可见,这样可使CPU 和I/O设备都处于忙碌状态,从而提高了整个系统的资源利 用率及吞吐量。
磁盘调度算法简述

磁盘调度算法简述⼀⼂意义:良好的调度算法,能减少IO读取时间(磁盘读取(最慢)+读取+传输)磁盘访问时间=寻道时间+旋转延迟时间+数据传输时间,磁盘读写顺序:由上直下(柱⾯磁道),由外到⾥(柱⾯排序,外磁道速度最快),依次访问对应扇区(512bytes)计算机中,各存储区域访问速度为寄存器约等号≈cache>内存>>磁盘>其他外接物理设备系统每进⾏⼀次IO中断,进⾏数据读写,⾸先要进⾏命中测试,若不在register,cache,memory中,则进⾏磁盘读取,先寻址,再进⾏io读⼊内存,读⼊后才能被cpu使⽤。
由磁盘中读写数据占⽤时间公式可知,其最主要的是寻道时间,旋转延迟时间,良好的磁盘调度算法,能减少IO读写时间,从⽽减少进程等待io时间,增加cpu利⽤率,防⽌磁臂黏着现象的发⽣。
⼆⼂名词解释:1)磁臂粘着--------程序对某些磁道频繁访问,如多次访问同⼀磁道,则io队列中,多次对同⼀磁道进⾏频繁的读取,导致其他磁道的请求被搁置,即为磁臂黏着现象(类似于进程饿死)2)寻道时间:移动磁臂到对应磁道(⼀般全部磁臂同时移动,部分可以分别移动),最慢3)旋转延迟时间:磁盘旋转到对应扇区,对应磁柱进⾏读写4)数据传输时间:读取数据,使⽤IO总线传⼊内存供cpu使⽤三⼂算法简述1.先来先服务算法(FCFS)----FirstComeFirstServer可使⽤链表(若有数量上限则单设头结点记录请求数,超出则拒绝)和数组(数组长度限制为请求数量,防⽌越界),依据请求时间先后,对io请求进⾏队列排列,依次出队优劣:公平、简单;平均寻道时间可能较长2.最短寻道算法(SSTF)其访问规则为距离当前磁头最近的io请求进⾏服务,由“最近”⼀词和磁盘读写顺序可知,其可能会返回对⼀个柱⾯的磁道进⾏多次读写,造成磁盘黏着现象基本实现:动态处理IO请求,可使⽤链表(双向链表,避免越界和前置判空操作)或者数组(内存允许则最好⽤数组,减少寻址时间)实现,使⽤插⼊排序算法,对IO请求进⾏动态排序,指针p指向磁头的当前磁道和扇区对应的线形距离数字,对前置后驱元素进⾏判定,以距离较短者作为下次磁盘访问对象。
Linux IO调度深入分析---cmt

linux io调度深入分析一)I/O调度程序的总结:1)当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成.2)每个块设备都有它自己的队列.3)I/O调度程序负责维护这些队列的顺序,以更有效地利用介质.I/O调度程序将无序的I/O操作变为有序的I/O操作.4)内核必须首先确定队列中一共有多少个请求,然后才开始进行调度.二)I/O调度的4种算法1)CFQ(完全公平排队I/O调度程序)特点:在最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器也是最好的选择.CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿死并实现较低的延迟,是deadline和as调度器的折中.CFQ对于多媒体应用(video,audio)和桌面系统是最好的选择.CFQ赋予I/O请求一个优先级,而I/O优先级请求独立于进程优先级,高优先级的进程的读写不能自动地继承高的I/O优先级.工作原理:CFQ为每个进程/线程,单独创建一个队列来管理该进程所产生的请求,也就是说每个进程一个队列,各队列之间的调度使用时间片来调度,以此来保证每个进程都能被很好的分配到I/O带宽.I/O调度器每次执行一个进程的4次请求.2)NOOP(电梯式调度程序)特点:在Linux2.4或更早的版本的调度程序,那时只有这一种I/O调度算法.NOOP实现了一个简单的FIFO队列,它像电梯的工作主法一样对I/O请求进行组织,当有一个新的请求到来时,它将请求合并到最近的请求之后,以此来保证请求同一介质.NOOP倾向饿死读而利于写.NOOP对于闪存设备,RAM,嵌入式系统是最好的选择.电梯算法饿死读请求的解释:因为写请求比读请求更容易.写请求通过文件系统cache,不需要等一次写完成,就可以开始下一次写操作,写请求通过合并,堆积到I/O队列中.读请求需要等到它前面所有的读操作完成,才能进行下一次读操作.在读操作之间有几毫秒时间,而写请求在这之间就到来,饿死了后面的读请求.3)Deadline(截止时间调度程序)特点:通过时间以及硬盘区域进行分类,这个分类和合并要求类似于noop的调度程序. Deadline确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限.这样就防止了写操作因为不能被读取而饿死的现象. Deadline对数据库环境(ORACLE RAC,MYSQL等)是最好的选择.4)AS(预料I/O调度程序)特点:本质上与Deadline一样,但在最后一次读操作后,要等待6ms,才能继续进行对其它I/O请求进行调度.可以从应用程序中预订一个新的读请求,改进读操作的执行,但以一些写操作为代价.它会在每个6ms中插入新的I/O操作,而会将一些小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.AS适合于写入较多的环境,比如文件服务器AS对数据库环境表现很差.三)I/O调度方法的查看与设置1)查看当前系统的I/O调度方法:[root@test1 tmp]# cat /sys/block/sda/queue/schedulernoop anticipatory deadline [cfq]2)临地更改I/O调度方法:例如:想更改到noop电梯调度算法:echo noop > /sys/block/sda/queue/scheduler3)想永久的更改I/O调度方法:修改内核引导参数,加入elevator=调度程序名[root@test1 tmp]# vi /boot/grub/menu.lst更改到如下内容:kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet重启之后,查看调度方法:[root@test1 ~]# cat /sys/block/sda/queue/schedulernoop anticipatory [deadline] cfq已经是deadline了四)I/O调度程序的测试本次测试分为只读,只写,读写同时进行.分别对单个文件600MB,每次读写2M,共读写300次.1)测试磁盘读:[root@test1 tmp]# echo deadline > /sys/block/sda/queue/scheduler [root@test1 tmp]# time dd if=/dev/sda1 f=/dev/null bs=2M count=300 300+0 records in300+0 records out629145600 bytes (629 MB) copied, 6.81189 seconds, 92.4 MB/sreal 0m6.833suser 0m0.001ssys 0m4.556s[root@test1 tmp]# echo noop > /sys/block/sda/queue/scheduler[root@test1 tmp]# time dd if=/dev/sda1 f=/dev/null bs=2M count=300 300+0 records in300+0 records out629145600 bytes (629 MB) copied, 6.61902 seconds, 95.1 MB/sreal 0m6.645suser 0m0.002ssys 0m4.540s[root@test1 tmp]# echo anticipatory > /sys/block/sda/queue/scheduler [root@test1 tmp]# time dd if=/dev/sda1 f=/dev/null bs=2M count=300 300+0 records in300+0 records out629145600 bytes (629 MB) copied, 8.00389 seconds, 78.6 MB/sreal 0m8.021suser 0m0.002ssys 0m4.586s[root@test1 tmp]# echo cfq > /sys/block/sda/queue/scheduler[root@test1 tmp]# time dd if=/dev/sda1 f=/dev/null bs=2M count=300 300+0 records in300+0 records out629145600 bytes (629 MB) copied, 29.8 seconds, 21.1 MB/sreal 0m29.826suser 0m0.002ssys 0m28.606s结果:第一 noop:用了6.61902秒,速度为95.1MB/s第二 deadline:用了6.81189秒,速度为92.4MB/s第三 anticipatory:用了8.00389秒,速度为78.6MB/s第四 cfq:用了29.8秒,速度为21.1MB/s2)测试写磁盘:[root@test1 tmp]# echo cfq > /sys/block/sda/queue/scheduler[root@test1 tmp]# time dd if=/dev/zero f=/tmp/test bs=2M count=300 300+0 records in300+0 records out629145600 bytes (629 MB) copied, 6.93058 seconds, 90.8 MB/sreal 0m7.002suser 0m0.001ssys 0m3.525s[root@test1 tmp]# echo anticipatory > /sys/block/sda/queue/scheduler [root@test1 tmp]# time dd if=/dev/zero f=/tmp/test bs=2M count=300 300+0 records in300+0 records out629145600 bytes (629 MB) copied, 6.79441 seconds, 92.6 MB/sreal 0m6.964suser 0m0.003ssys 0m3.489s[root@test1 tmp]# echo noop > /sys/block/sda/queue/scheduler[root@test1 tmp]# time dd if=/dev/zero f=/tmp/test bs=2M count=300 300+0 records in300+0 records out629145600 bytes (629 MB) copied, 9.49418 seconds, 66.3 MB/sreal 0m9.855suser 0m0.002ssys 0m4.075s[root@test1 tmp]# echo deadline > /sys/block/sda/queue/scheduler [root@test1 tmp]# time dd if=/dev/zero f=/tmp/test bs=2M count=300300+0 records in300+0 records out629145600 bytes (629 MB) copied, 6.84128 seconds, 92.0 MB/sreal 0m6.937suser 0m0.002ssys 0m3.447s测试结果:第一 anticipatory,用了6.79441秒,速度为92.6MB/s第二 deadline,用了6.84128秒,速度为92.0MB/s第三 cfq,用了6.93058秒,速度为90.8MB/s第四 noop,用了9.49418秒,速度为66.3MB/s3)测试同时读/写[root@test1 tmp]# echo deadline > /sys/block/sda/queue/scheduler [root@test1 tmp]# dd if=/dev/sda1 f=/tmp/test bs=2M count=300300+0 records in300+0 records out629145600 bytes (629 MB) copied, 15.1331 seconds, 41.6 MB/s[root@test1 tmp]# echo cfq > /sys/block/sda/queue/scheduler[root@test1 tmp]# dd if=/dev/sda1 f=/tmp/test bs=2M count=300300+0 records in300+0 records out629145600 bytes (629 MB) copied, 36.9544 seconds, 17.0 MB/s[root@test1 tmp]# echo anticipatory > /sys/block/sda/queue/scheduler [root@test1 tmp]# dd if=/dev/sda1 f=/tmp/test bs=2M count=300300+0 records in300+0 records out629145600 bytes (629 MB) copied, 23.3617 seconds, 26.9 MB/s[root@test1 tmp]# echo noop > /sys/block/sda/queue/scheduler[root@test1 tmp]# dd if=/dev/sda1 f=/tmp/test bs=2M count=300300+0 records in300+0 records out629145600 bytes (629 MB) copied, 17.508 seconds, 35.9 MB/s测试结果:第一 deadline,用了15.1331秒,速度为41.6MB/s第二 noop,用了17.508秒,速度为35.9MB/s第三 anticipatory,用了23.3617秒,速度为26.9MS/s第四 cfq,用了36.9544秒,速度为17.0MB/s五)ioniceionice可以更改任务的类型和优先级,不过只有cfq调度程序可以用ionice. 有三个例子说明ionice的功能:采用cfq的实时调度,优先级为7ionice -c1 -n7 -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300& 采用缺省的磁盘I/O调度,优先级为3ionice -c2 -n3 -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300& 采用空闲的磁盘调度,优先级为0ionice -c3 -n0 -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300&ionice的三种调度方法,实时调度最高,其次是缺省的I/O调度,最后是空闲的磁盘调度.ionice的磁盘调度优先级有8种,最高是0,最低是7.注意,磁盘调度的优先级与进程nice的优先级没有关系.一个是针对进程I/O的优先级,一个是针对进程CPU的优先级.。
麒麟磁盘io调度算法

麒麟磁盘IO调度算法简介麒麟磁盘IO调度算法是一种用于管理磁盘IO请求的调度算法。
它的目标是通过合理的调度磁盘IO请求,最大化系统的性能和吞吐量。
这种调度算法被广泛应用于操作系统中,特别是在现代操作系统中,对于提高系统性能和响应时间非常重要。
磁盘IO调度算法的主要作用是在多个磁盘IO请求之间进行有效的调度,以最小化磁盘头移动的数量,并提高系统的磁盘IO性能。
麒麟磁盘IO调度算法是一种基于扫描算法的调度算法,它会沿着磁盘的柱面进行移动,以便合并相邻的IO请求,从而减少磁盘头的移动距离。
算法原理麒麟磁盘IO调度算法基于以下原理:1.扫描算法:麒麟磁盘IO调度算法是一种基于扫描算法的调度算法。
它的思想是沿着磁盘的柱面进行移动,以便合并相邻的IO请求。
这样可以减少磁盘头的移动距离,提高系统的磁盘IO性能。
2.公平性:麒麟磁盘IO调度算法是一种公平的调度算法,它会对所有的IO请求进行公平的调度,避免某些IO请求长时间得不到满足。
3.响应时间优先:麒麟磁盘IO调度算法注重提高系统的响应时间。
它会将响应时间较短的IO请求优先调度,以便尽快完成。
4.高吞吐量:麒麟磁盘IO调度算法也考虑了系统的吞吐量。
它会尽量合并相邻的IO请求,以提高系统的吞吐量。
算法过程麒麟磁盘IO调度算法的具体过程如下:1.初始化:将所有的IO请求按照到达时间进行排序,并将磁盘头的初始位置设置为IO请求队列中的第一个请求所在的柱面。
2.执行调度:从磁盘头当前位置开始沿着磁盘的柱面进行移动,判断当前位置是否有待处理的IO请求。
如果有,则进行处理;如果没有,则继续沿着磁盘柱面移动。
3.IO请求处理:对于每个待处理的IO请求,根据算法的特定规则进行处理。
通常情况下,麒麟磁盘IO调度算法会将相邻的IO请求合并,以减少磁盘头的移动距离。
4.完成调度:当所有的IO请求处理完毕后,调度算法完成。
算法优化为了进一步提高系统的性能和吞吐量,麒麟磁盘IO调度算法可以进行以下优化:1.调度策略调整:根据系统的具体需求和特点,可以调整调度算法的策略。
磁盘io使用率 iops -回复

磁盘io使用率iops -回复什么是磁盘IO使用率和IOPS?磁盘IO使用率和IOPS是衡量计算机系统磁盘性能的两个重要指标。
磁盘IO使用率指的是磁盘在特定时间内处理IO请求的能力,通常用百分比表示,越高表示磁盘负载越重,处理IO请求的效率越低。
IOPS(Input/Output Operations Per Second)则是衡量磁盘每秒处理的IO 请求的数量,是一个更具体的指标。
为何关注磁盘IO使用率和IOPS?磁盘IO使用率和IOPS是评估计算机系统磁盘性能的关键指标,我们需要关注它们的原因有以下几点。
首先,磁盘IO使用率和IOPS的高低影响计算机系统的整体性能。
当磁盘的IO使用率高或者IOPS低时,系统的繁忙程度越高,可能导致系统响应变慢甚至无响应。
因此,通过监测和优化磁盘IO使用率和IOPS,可以提高系统的响应速度和性能。
其次,磁盘IO使用率和IOPS的高低与系统的稳定性和可靠性密切相关。
当磁盘的IO使用率过高或IOPS过低时,可能导致磁盘过热、响应延迟增加、数据丢失等问题。
因此,关注磁盘IO使用率和IOPS可以帮助我们及时发现和解决磁盘性能问题,提高系统的稳定性和可靠性。
最后,磁盘IO使用率和IOPS的优化可以降低系统的能耗。
当磁盘的IO 使用率和IOPS较高时,磁盘处于高负载状态,需要消耗更多的能量。
通过降低磁盘IO使用率和IOPS,可以减少系统的能耗,提高能源利用效率。
如何监测磁盘IO使用率和IOPS?要监测磁盘IO使用率和IOPS,我们可以使用多种工具和方法。
首先,可以使用操作系统自带的性能监测工具来监测磁盘IO使用率和IOPS。
不同的操作系统可能有不同的工具,例如在Windows系统中可以使用PerfMon、Resource Monitor等工具,而在Linux系统中可以使用iostat、sar等工具。
这些工具可以提供实时监测和历史数据查询的功能,帮助我们了解系统磁盘IO的使用情况。
操作系统精髓与设计原理-第11章-IO管理和磁盘调度-第12章-文件管理

第十一章 I/O管理和磁盘调度复习题11.1列出并简单定义执行I/O的三种技术。
·可编程I/O:处理器代表进程给I/O模块发送给一个I/O命令,该进程进入忙等待,等待操作的完成,然后才可以继续执行。
·中断驱动I/O:处理器代表进程向I/O模块发送一个I/O命令,然后继续执行后续指令,当I/O模块完成工作后,处理器被该模块中断。
如果该进程不需要等待I/O完成,则后续指令可以仍是该进程中的指令,否则,该进程在这个中断上被挂起,处理器执行其他工作。
·直接存储器访问(DMA):一个DMA模块控制主存和I/O模块之间的数据交换。
为传送一块数据,处理器给DMA模块发送请求,只有当整个数据块传送完成后,处理器才被中断。
11.2逻辑I/O和设备I/O有什么区别?·逻辑I/O:逻辑I/O模块把设备当作一个逻辑资源来处理,它并不关心实际控制设备的细节。
逻辑I/O模块代表用户进程管理的一般I/O功能,允许它们根据设备标识符以及诸如打开、关闭、读、写之类的简单命令与设备打交道。
·设备I/O:请求的操作和数据(缓冲的数据、记录等)被转换成适当的I/O指令序列、通道命令和控制器命令。
可以使用缓冲技术,以提高使用率。
11.3面向块的设备和面向流的设备有什么区别?请举例说明。
面向块的设备将信息保存在块中,块的大小通常是固定的,传输过程中一次传送一块。
通常可以通过块号访问数据。
磁盘和磁带都是面向块的设备。
面向流的设备以字节流的方式输入输出数据,其末使用块结构。
终端、打印机通信端口、鼠标和其他指示设备以及大多数非辅存的其他设备,都属于面向流的设备。
11.4为什么希望用双缓冲区而不是单缓冲区来提高I/O的性能?双缓冲允许两个操作并行处理,而不是依次处理。
典型的,在一个进程往一个缓冲区中传送数据(从这个缓冲区中取数据)的同时,操作系统正在清空(或者填充)另一个缓冲区。
11.5在磁盘读或写时有哪些延迟因素?寻道时间,旋转延迟,传送时间11.6简单定义图11.7中描述的磁盘调度策略。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
I/O 设备的差别
控制的复杂度 传送单位
数据可以按照字节流或者字符流的形式传送(如终端 I/O),也可以按照大块传送(如磁盘I/O) 数据编码方案,包括字符代码和奇偶约定的差异 错误的本质、报告的方式、后果以及响应随设备的不 同而不同
数据表示
错误条件
I/O功能的组织
常见的三种I/O控制技术: 程序控制 I/O
缓存cache和缓冲buffer的异同
相同之处:都是为了弥补速度差异,都位于相对较快的设 备上,容量相对较小 不同之处: Cache要考虑局部性,重复使用 Buffer有写“化零为整”和预读的作用(write sequencing and read prefetching) Cache中的内容在低速设备中一定还有一份,从而要考虑 同步,相对的Buffer要考虑flush
负荷不均匀问题
缓存cache和缓冲buffer的异同
缓存(cache)是把读取过的数据 保存起来,重新读取 时若命中(找到需要的数据)就不要去读硬盘了,若没 有命中就读硬盘。其中的数据会根据读取频率进行组织 ,把最频繁读取的内容放在最容易找到的位置,把不再 读的内容不断往后排,直至从中删除。 缓冲(buffer)当存储速度快的设备与存储速度慢 的设 备进行通信时,存储慢的设备先把数据存放到buffer, 达到一定程度后,存储快的设备再读取buffer的数据, 在此期间存储快的设备CPU可以干其他 的事情。
中断驱动 I/O
直接存储器存取 (DMA)
DMA 模块控制主存和 I/O模块之间的数据交 换 为传送一块数据,处理器给DMA模块发请求, 只有当整个数据块传送结束后,处理器才被 中断
输入输出功能的发展
I/O功能的发展阶段: 处理器直接控制外围设备 程序控制I/O方式 :增加了控制器或 I/O 模块
输入输出功能的发展
I/O通道控制方式
I/O 模块被增强成一个单独的处理器,又专门为I/O 设计的指令集 I/O 模块有自己的局部存储器
I/O 模块本身就是一个计算机 也称作I/O处理器
特点:是DMA方式的发展,它可进一步减少CPU的干预, 即把对一个数据块的 读(或写)为单位的干预,减 少为对一组数据块的读(或写)及有关的控制和管理 为单位的干预。同时,又可实现CPU、通道和I/O设备 三者的并行工作,从而更有效的提高了整个系统的资 源利用率。
DMA机制的配置方法
周期挪用技术导致处理器执行得更慢 通过DMA和I/O功能集成起来,可以大大 的减少所需要的总线周期的数目 DMA 模块和一个或多个I/O模块之间除了 系统总线还存在着路径
DMA
DMA
DMA
操作系统设计问题
Efficiency(效率)
与主存和处理器相比,大多数 I/O 设备都是 非常慢速的 使用多道程序设计,可以允许一些进程在等 待I/O操作时另一些进程正在执行 交换技术用于将额外的就绪进程加载到内存, 使得处理器保持忙状态,但交换本身是一个 I/O操作 I/O 设计的主要任务是提供I/O的效率
一种I/O 组织的 模型
I/O 缓冲
速度的差异问题
计算机系统中的各种设备(包括中央处理机)的运行速 度差异甚大, CPU的运行速度是以纳秒计,而设备的 运行速度则是以毫秒甚至以秒计; 有时处理机进行大量的计算工作,没有 I/O操作,有 时又会进行大量的 I/O 操作,这两个极端都会造成系 统中的一些设备过于繁忙,一部分设备过于空闲,严 重地影响CPU与外设的并行工作。
I/O 管理 和磁盘调度
Chapter 11
主要内容
教学目标与要求
理解I/O控制方式。 掌握I/O缓冲技术 掌握磁盘存储器的管理
教学重点与难点
缓冲技术,磁盘调度
I/O 设备的种类
1、人可读的
适合与计算机用户通信,如:打印机,终端( 显示 器 ,键盘 , 鼠标 ) 适合与电子设备通信,如磁盘驱动器, 传感器, 控 制器, 执行器 适合与远程设备通信,如数字线路驱动器, 调制解 调器
直接存储器访问DMA
取代处理器控制系统,在系统总线上从存储器 中或者往存储器中传送数据 周期挪用技术用于在总线上传送数据
为了使数据能够传送,挂起一个指令周期,即CPU 暂停一个总线周期 不需要保存进程上下文
整块数据传送过程中没有中断发生
DMA
DMA工作流程
请求读/写操作的信 号 相关的I来自O设备地址 内存起始地址 读/写的字节数
2、机器可读
3、通信
设备的分类
按传输速率分 低速设备:每秒几个到数百字节。如调制 解调器 中速设备:每秒数千到数万字节。如打印 机 高速设备:每秒数百 K 到数兆。如磁盘、 磁带
I/O 设备的差别
数据率
数据传送率可能会差别几个数量级
I/O 设备的差别
应用
用于文件操作的磁盘需要文件管理软件的支 持 在虚拟存储方案中,磁盘用作页面调度的后 备存储器,取决于虚存硬件和软件的使用 终端被普通用户使用和系统管理员使用可能 具有不同的特权级别,从而在OS中有不同的 优先级
处理器使用没有中断的程序控制I/O 处理器不需要处理外部设备接口的具体细节 又称忙--等待方式
输入输出功能的发展
中断驱动I/O :控制器或 I/O 模块采用了中断 处理器不再需要花费时间等待执行一个 I/O操 作
DMA控制方式 :I/O模块通过DMA直接控制存储 器
从主存中移出或往主存移入一块数据,不需要处理器 参与 仅仅在传送开始和结束时需要用到处理器
处理器代表进程给I/O模块发送一个I/O命令,该进程 进入忙等待,等待操作的完成,然后才可以继续执行 处理器代表进程发送一个I/O命令,然后继续执行后续 指令,当I/O模块完成工作后,处理器被该模块中断。 如果该进程不需等待I/O完成,后续指令可以是该进 程中的指令 否则,这个进程在这个中断上被挂起,处理器执行其 他工作
操作系统设计问题
Generality(通用性)
为了简单性和避免错误,往往希望能用一种 统一的方式处理所有的设备 使用一种层次化的、模块化的方法设计I/O功 能,在低层例程中隐藏大部分设备I/O的细节, 使得用户进程和操作系统高层可以通过一些 通用的功能,如read, write, open, close, lock, unlock等来查看I/O设备