type
status
date
slug
summary
tags
category
icon
password
能力模型
能力分类
省赛
全球总决赛
学习进度
中国总决赛
I/O管理基础
1 I/O设备
I/O设备是指可以将数据输入计算机的外部设备,或者可以接收计算机输出的外部设备。
1.1 I/O设备的分类
(1)按信息交换的单位分类
- 块设备:传输速率较高,可寻址,如磁盘、磁带等。
- 字符设备:传输速率低,不可寻址,时常采用中方式,如交互式终端机、打印机等
(2)按设备的传输速率分类
设备类型 | 说明 |
低速设备 | 传输速率仅为每秒钟几个字节至数百个字节,例如键盘、鼠标器 |
中速设备 | 传输速率在每秒钟数千个字节至数十万个字节,例如行式打印机、激光打印机等 |
高速设备 | 传输速率在数十万字节至千兆字节,例如磁带机、磁盘机、光盘机等 |
- 低速设备:键盘、鼠标。
- 中速设备:激光打印机。
- 高速设备:磁盘机、光盘机。
(3)按设备的使用特性分类
- 存储设备:可写入性、可读出性、可保存性
- 输入输出设备
- 交互式设备
(4)按设备的共享属性分类
- 独占设备
- 共享设备:指一段时间内允许多个进程同时访问的设备,可寻址也可随机访问,不会引起进程死锁。
- 虚拟设备:通过SPOOLing技术将独占设备改为共享设备,将一个物理设备变为多个逻辑设备,克服了独占设备速度慢、利用率低的特点。
1.2 I/O管理目标和功能
IO设备管理的主要目标有以下三个方面。
- 方便使用:方便用户使用外部设备,控制设备工作完成用户的输入输出要求。
- 提高效率:提高系统的并行工作能力,提高设备的使用效率。
- 方便控制:提高外围设备和系统的可靠性和安全性,以使系统能正常工作。
IO设备管理的功能是按照输入输出子系统的结构和设备类型制定分配和使用设备的策略,主要包括:
- 设备的分配和回收。
- 外围设备的启动。
- 对磁盘的驱动调度。
- 外部设备中断处理。
- 虚拟设备的实现。
1.3 I/O接口
I/O接口(又称设备控制器)是CPU和设备之间的接口,以实现设备和计算机之间的数据交换。
CPU 无法直接控制 I/O 设备的机械部件,因此 I/O 设备还要有一个电子部件作为 CPU 和 I/O 设备机械部件之间的“中介”,用于实现 CPU 对设备的控制。这个电子部件就是 I/O 控制器,又称设备控制器,通常是一块插入主板扩充槽的印刷电路板。CPU 可控制 I/O 控制器,又由 I/O 控制器来控制设备的机械部件。
(2)设备控制器
设备控制器的主要功能是控制一个或多个 I/O 设备,以实现 I/O 设备和计算机之间的数据交换。它接收从 CPU 发来的命令,去控制 I/O 设备工作。设备控制器是一个可编址的设备,当它仅控制一个设备时只有一个唯一的设备地址,若控制器可连接多个设备则含有多个设备地址,每一个设备地址对应一个设备。可把设备控制器分成两类:一类是用于控制字符设备的控制器,另一类是用于控制块设备的控制器。
功能 | 说明 |
接收和识别命令 | 接收并识别处理机发来的多种命令,利用控制寄存器存放接收的命令和参数,并对所接收的命令进行译码 |
数据交换 | 实现 CPU 与控制器之间、控制器与设备之间的数据交换,前者通过数据总线,后者是通过数据寄存器 |
标识和报告设备的状态 | 控制器应记下设备的状态供 CPU 了解,在控制器中应设置状态寄存器,用其中的一位反映设备的状态 |
地址识别 | 系统中的每一个设备都有一个地址,设备控制器必须能够识别其所控制的每个设备的地址,应配置地址译码器 |
数据缓冲区 | 由于 I/O 设备的速率较低,而 CPU 和内存的速率却很高,故在控制器中必须设置缓冲区 |
差错控制 | 对于由 I/O 设备传送来的数据,若发现传送中出现了错误,通常是将差错检测码置位并向 CPU 报告 |
(2)设备控制器的组成
- 设备控制器与处理机(CPU)的接口
- 实现CPU与设备控制器之间的通信
通常设备并不是直接与 CPU 进行通信,而是与设备控制器通信,因此在 I/O 设备中应含有与设备控制器间的接口。
在该接口中有三种类型的信号,各对应一条信号线。
信号线 | 说明 |
数据信号线 | 在设备和设备控制器之间传送数据信号 |
控制信号线 | 由设备控制器向 I/O 设备发送控制信号时的通路,信号规定了设备将要执行的操作,如读操作、写操作或执行磁头移动等操作 |
状态信号线 | 该信号线用于传送指示设备当前状态的信号,状态有正在读(或写)、设备已读(写)完成 |
- 设备控制器与设备的接口
- 用于实现CPU和设备控制器之间的通信,在该接口中共有三类信号线,分别为数据线、状态线和控制线。
- I/O逻辑
- 实现对设备的控制
- CPU利用该逻辑向控制器发送I/O命令
- 命令、地址译码
(3)I/O接口的分类
- 字符设备接口:数据的存取和传输是以字符为单位的设备。
- 块设备接口:数据的存取和传输是以数据块为单位的设备。
- 网络设备接口:许多操作系统提供的网络I/O接口为网络套接字接口。
(4)阻塞I/O和非阻塞I/O
- 阻塞I/O:当用户进程调用I/O操作时,进程就被阻塞,并移到阻塞队列,待I/O操作完成后进程被重新唤醒,移动到就绪队列。
- eg:字符设备接口从键盘读一个字符get
- 非阻塞I/O:当用户进程调用I/O操作时,不阻塞该进程,但进程需要不断询问I/O操作是否完成,在I/O执行阶段,进程还可以做其他事情。
- eg:块设备接口往磁盘写数据write
1.4 I/O端口
I/O端口是指设备控制器中可被CU直接访问的寄存器,主要有以下三类:
- 数据寄存器
- 状态寄存器
- 控制寄存器
I/O端口想要能够被CPU访问,就要对各个端口进行编址,每个端口对应一个端口地址。
(1)独立编址
这种方式又称为存储器映射编址方式。它将I/O端口作为内存单元对待,由CPU统一分配地址。通 常在CPU的地址空间中划出一部分作为输入输出系统的端口地址范围,不再作为内存地址使用。
- 优点:访问I/O端口和访问内存单元一样,所有访问内存的指令都可以访问I/O端口,不用设置专门 的I/O指令;也不需要专用的I/O端口控制信号,简化了系统总线。
- 利用数据传送指令就可以实现 CPU 与 I/O 端口的数据交换;
- 用测试指令可以测试端口的状态位,了解外设的状态,判断输入输出操作的执行情况。
- 缺点:占用一部分CPU地址空间。划出的端口地址范围,不能再作为内存地址使用 ,所以减少了内存地址空间。
(2)统一编址
CPU给I/O端口分配一个独立的地址空间,提供专用的控制信号。I/O端口地址空间与内存地址空间隔离。
- 优点:
不占用内存空间,而且I/O端口地址线根数少,译码电路简单。
- 缺点:
需要专用的控制信号和专用的I/O指令。
2 I/O控制方式
2.1 程序直接控制方式
读取数据时,CPU从设备控制器的状态寄存器中查询设备是否可用,如果不可用就一直轮询查询,直到可用为止。如果可用就发送读取信号,然后轮询查询数据是否准备号,如果准备好就从数据寄存器中读取数据到CPU中,然后将数据从CPU转移到内存中。
写数据时,CPU也是轮询查看设备是否可用,如果可用就将数据从CPU写入到数据寄存器中。
缺点: 程序查询方式,CPU需要不断的查询,白白浪费了CPU资源,CPU利用率低。
2.2 中断驱动方式
中断驱动是对程序查询的改进,中断的意思就是CPU是可以被打断的,硬件可以向CPU发送中断命令,然后CPU会执行对应的中断程序。
当CPU请求IO时,就直接发送IO读取的相关命令。如果当前设备正被占用,就排队,然后IO设备器会对依次对队列中的进行处理,处理完成后就发出中断命令,打断CPU原本的操作,转而去执行中断程序,比如将数据从数据寄存器转到CPU,然后从CPU转到内存中。
优点: 在IO的时候,CPU可以处理其他线程的工作,CPU的利用效率提高了
缺点: 在IO完成后,还是需要CPU将数据转移到内存中,还是会占用一定的CPU。
2.3 DMA方式
DMA全称为Direct Memory Access,也叫做直接存储器访问。DMA是一种不经过CPU而直接从主存存取数据的数据交换模式,它在I/O设备和主存之间建立了一条直接数据通路,如磁盘。当然,这条数据通路只是逻辑上的,实际并未直接建立一条物理线路,而通常是通过总线进行的。
相较于中断驱动,DMA有了以下改进:
1、以块为单位进行传送
2、内存和IO设备可以直接传递,不需要CPU的中转。
3、CPU只需要在开始的时候发出CPU指令,在结束的时候DMA会发出中断,CPU执行相关的中断程序就行了。
优点: CPU只需要在开始的时候,指定从内存和IO设备中的哪些位置进行读写,进一步增加了CPU的利用率。
缺点: DMA可以一次性读取多个块,但是在内存和IO设备中必须是连续的。
如果牵扯到读写离散的块,CPU必须发出多个IO指令。
DMA的传送过程
- 预处理:CPU初始化DMA控制器中的有关寄存器、设置传送方向、测试并启动设备。
- 数据传送:完全由DMA控制,DMA控制器接管系统总线。
- 后处理:DMA控制器向COU发送中断请求,CPU执行中断服务程序做DMA结束处理。
2.4 通道控制方式
通道是一种硬件,自己就可以执行IO命令,相当于一个削弱版的小CPU,执行的指令单一。
通道可以执行IO指令,CPU只需要将相关的IO指令发送给通道控制器就可以了,通道会执行IO指令,完成对应的传输。
相较于DMA,DMA实现固定的数据传送,而通道拥有着自己的指令和程序,具有更强的IO处理能力。
2.5 总结
3 I/O软件层次结构
为使复杂的I/O软件能具有清晰的结构、良好的可移植性和易适应性,目前普遍采用层次式结构的I/O软件。设备的独立性主要是指用户设备的透明性,即使用户程序和实际使用的物理设备无关。
(1)用户层软件
- 实现了与用户交互的接口
(2)设备独立性软件
- 设备独立性又称设备无关性,其含义是指应用程序所用的设备不局限于某个具体的物理设备。
- 主要实现的功能
- 向上层(用户层或文件层)提供统一的调用接口
- 执行所有设备的共有操作
- 使用逻辑设备名
(3)设备驱动程序
- 与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序。
- 设备驱动程序是I/O系统高层与设备控制器之间的通信程序。
(4)中断处理程序
- 用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完毕再恢复被中断进程的现场后,返回到被中断进程。
(5)设备控制器
控制寄存器和状态寄存器分别用于接受上层发来的命令并存放设备状态信号,是设备控制器与上层的接口。
控制命令是由CPU发出的,用来控制设备控制器,但控制命令是由设备控制器提供的,每种设备控制器都对应一组相应的控制命令。
- 接口:传输信号。
- I/O逻辑:即设备控制器,用来实现对设备的控制。
设备独立软件
1 高速缓存与缓存区
1.1 磁盘高速缓存
Cache(缓存)是系统两端处理速度不匹配时的一种折衷策略。因为CPU和memory之间的速度差异越来越大,所以人们充分利用数据的局部性(locality)特征,通过使用存储系统分级(memory hierarchy)的策略来减小这种差异带来的影响.因此,操作系统中使用磁盘高速缓存技术来提高磁盘的 IO 速度,对高速缓存复制的访问要比原始数据访问更为高效。
磁盘高速缓存技术「不同于」通常意义下的介于 CPU 与内存之间的小容量高速存储器,而是指利用内存中的存储空问来暂存从磁盘中读出的一系列盘块中的信息。因此,磁盘高速缓存逻辑上属于磁盘,物理上则是驻留在「内存」中的盘块。
高速缓存在内存中分为两种形式
- 一种是在内存中开辟一个单独的存储空间作为磁盘高速缓存,大小固定。
- 另一种是把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘 IO 时共享。
1.2 缓冲区
Buffer(缓冲区)是系统两端处理速度平衡(从长时间尺度上看)时使用的。它的引入是为了减小短期内突发I/O的影响,起到流量整形的作用。把突发的大数量较小规模的 I/O 整理成平稳的小数量较大规模的 I/O,以减少响应次数。比如生产者——消费者问题,他们产生和消耗资源的速度大体接近,加一个buffer可以抵消掉资源刚产生/消耗时的突然变化。
目的:
- 缓和 CPU 与 IO 设备间速度不匹配的矛盾
- 减少对 CPU 的中断频率,放宽对 CPU 中断响应时间的限制
- 解决基本数据单元大小(即数据粒度) 不匹配的问题
- 提高 CPU 和 IO 设备之间的并行性
实现方式:
- 采用硬件缓冲器,但由于成本太高,除一些关键部位外,一般不采用硬件缓冲器
- 采用缓冲区(位于内存区域)
相同点
无论缓存还是缓冲,其实本质上解决的都是读写速度不匹配的问题,从这个角度,他们非常相似。
不同点
个人认为他们最直观的区别在于cache是随机访问,buffer往往是顺序访问。虽然这样说并没有直击本质,不过我们可以待分析完毕之后再来讨论真正的本质。
为了说明这个问题,让我将他们分开来说:read cache(读缓存),read buffer(读缓冲),write cache(写缓存),write buffer(写缓冲)。
无论缓存还是缓冲,其实本质上解决的都是读写速度不匹配的问题,从这个角度,他们非常相似。
(1)单缓冲
- 实现
- 操作系统会在主存中为其分配一个缓冲区。
- 当缓冲区数据满时,不能往缓冲区冲入数据,只能从缓冲区把数据传出。
- 当缓冲区数据空时,不能把数据传出,只能等待缓冲区满。
- 处理每块数据的时间
- T>C:T+M
- T<C:C+M
- 平均时间:Max(C,T)+M
- 特点
- T 过程和 M 过程不能并行,C 过程和 M 过程不能并行。
- 缓冲区互斥
(2)双缓冲
- 实现
- 双缓冲区机制(Double Buffer)也称缓冲对换(Buffer Swapping)。
- 在设备输入时先将数据送入第一缓冲区,装满后便转向第二缓冲区。此时操作系统可以从第一缓冲区中移出数据,并送入用户进程,接着由 CPU 对数据进行计。
- 处理每块数据的时间
- T>C+M:T
- T<C+M:C+M
- 平均时间:Max(C+M,T)
- 特点
- T 过程和 M 过程可以并行,C 过程和 M 过程不能并行。
- 输入T可以一直不间断进行
(3)循环缓冲
- 实现
- 将多个大小相等的缓冲区链接成一个循环队列。
- in 指针:指向下一个可以冲入数据的空缓冲区。
- out 指针:指向下一个可以取出数据的满缓冲区。
- 特点
- 这样就可能出现下 in 指针追赶上 out 指针,这意味着输入进程输入数据的速度大于计算进程处理数据的速度。
- 也有可能出现 out 指针追赶上 in 指针,这意味着输入数据的速度低于计算进程处理数据的速度。
(4)缓冲池
- 实现
- 收容输入:输入进程请求输入数据;
- 提取输入:计算进程想要取得一块输入数据;
- 收容输出:计算进程想要将准备好的数据冲入缓冲区;
- 提取输出:输出进程请求输出数据。
1.3 小结
高速缓存是可以保存数据拷贝的高速存储器,访问高速缓存比访问原始数据更高效速度更快。
缓冲区类型 | 适用条件 |
单缓冲 | ㅤ |
双缓冲 | 支持双向传送的设备 |
循环缓冲 | ㅤ |
缓冲池 | 多个并发进程有效地进行输入输出 |
注:缓冲区是一种临界资源,所以在使用缓冲区时都有一个资源申请和释放的问题需要考虑。
在系统内存中设置磁盘缓冲区的主要目的是减少磁盘I/O次数。
2 设备分配与回收
2.1 设备分配概述
设备分配是指根据用户的I/O请求分配所需的设备。
分配的总原则是充分发挥设备的使用效率,尽可能地让设备忙碌,又要避免由于不合理的分配方法造成进程死锁。
2.2 设备分配的数据结构
(1)系统为实现对独占设备的分配,必须在系统中配置相应的数据结构,记录了对设备或控制器进行控制所需的信息。系统为每一个设备都配置了一张设备控制表 DCT,用于记录设备的情况。
字段 | 说明 |
设备队列队首指针 | 凡因请求本设备而未得到满足的进程,应将其 PCB 按照一定的策略排成一个设备请求队列 |
忙/闲标志 | 用于表示当前设备的状态是忙或闲 |
与设备连接的控制器表指针 | 指向该设备所连接的控制器的控制表 |
重复执行次数 | 设备在工作中发生错误时应重复执行的次数 |
(2)系统为每一个控制器都设置了用于记录控制器情况的控制器控制表 COCT。
(3)每个通道都有一张通道控制表 CHCT。
(4)系统设备表 SDT 是系统范围的数据结构,记录了系统中全部设备的情况,每个设备占一个表目,其中包括有设备类型、设备标识符、设备控制表及设备驱动程序的入口等项。
(5)小结
控制是由上到下的,分配是由下到上的。
数据结构 | 描述 |
系统设备表(SDT) | 记录了系统中全部设备的情况,每个设备对应一个表目。每个表目存有 DCT(设备控制表)的指针,以及设备类型(即逻辑设备名) |
设备控制表(DCT) | 系统为每个设备配置一张 DCT,用于记录设备情况。每个表目存有 COCT(控制器控制表)的指针 |
控制器控制表(COCT) | 每个设备控制器(即 I/O 接口)都会对应一张 COCT,操作系统根据 COCT 的信息对控制器进行操作和管理。每个表目存有 CHCT(通道控制表)的指针 |
通道控制表(CHCT) | 每个通道都会对应一张 CHCT,操作系统根据 CHCT 的信息对通道进行操作和管理 |
2.3 设备分配时应考虑的因素
(1)设备的固有属性
设备的固有属性可分成三种,对它们应采取不同的分配策略:
固有属性 | 说明 |
独占设备的分配策略 | 将一个设备分配给某进程后,便由该进程独占 |
共享设备的分配策略 | 对于共享设备,可同时分配给多个进程使用 |
虚拟设备的分配策略 | 虚拟设备属于可共享的设备 |
(2)设备分配算法
对设备分配的算法,通常只采用以下两种分配算法:
分配算法 | 说明 |
先来先服务 | 根据诸进程对某设备提出请求的先后次序,将这些进程排成一个设备请求队列 |
优先级高者优先 | 将优先级高的进程排在设备队列前面,而对于优先级相同的 I/O 请求,则按先来先服务原则排队 |
(3)设备分配中的安全性
从进程运行的安全性上考虑,设备分配有以下两种方式:
分配方式 | 说明 |
安全分配方式 | 为进程分配一个设备后就将进程阻塞,本次 I/O 完成后才将进程唤醒 |
不安全分配方式 | 进程发出 I/O 请求后,系统为其分配 I/O 设备,之后还可以发出新的 I/O 请求 |
2.4 设备分配的步骤
只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动 I/O 设备进行数据传送。
- 根据进程请求的物理设备名查找 SDT;
- 分配设备,根据 SDT 找到 DCT,若设备忙碌则将进程PCB挂到设备等待队列中,不忙碌则将设备分配给进程;
- 分配控制器,根据 DCT 找到 COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程;
- 分配通道,根据 COCT 找到 CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程。
为获得设备的独立性,进程应使用逻辑设备名请求 I/O。这样系统首先从 SDT 中找出第一个该类设备的 DCT,若该设备忙又查找第二个该类设备的 DCT,仅当所有该类设备都忙时,才把进程挂在该类设备的等待队列上。
【注】如果之后用户进程再次通过相同的逻辑设备名请求使用设备,则操作系统通过 LUT 即可知道用户进程实际要使用的是哪个物理设备了,并且也能知道该设备的驱动程序入口地址。
2.5 逻辑设备名到物理设备名的映射
- 物理设备名(绝对号):进程请求分配设备时提供的参数。
- 逻辑设备名:用户编程时提供的逻辑设备名其实就是“设备类型”。建立逻辑设备名与物理设备名的映射机制,用户编程时只需提供逻辑设备名。
- 逻辑设备表(LUT):建立了逻辑设备名与物理设备名之间的映射关系。每个表目记录了逻辑设备名对应的物理设备名和驱动程序入口地址。
【注】若整个系统只有一张 LUT,则各用户所用的逻辑设备名不允许重复,适用于单用户操作系统;若每个用户一张 LUT,则不同用户的逻辑设备名可重复,适用于多用户操作系统。
3 SPOOLing假脱机技术
3.1 概念
- 为了缓和CPU的高速性与I/O设备低速性之间的矛盾而引入了脱机输入/输出技术。
- 该技术是利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上;或者相反。
- SPOOLing的意思是外部设备同时联机操作,又称为假脱机输入/输出操作,是操作系统中釆用的一项可以把物理设备虚拟成逻辑上的多台设备,将独占设备改造成共享设备的技术。
3.2 SPOOLing技术的组成
SPOOLing 技术系统由预输入程序、井管理程序(本质上可以理解成目录)和缓输出程序组成。预输入程序、井管理程序和缓输出程序合起来也叫守护进程。(无需外围计算机的支持)
SPOOLing系统主要包含三个部分,即输入井和输出井、输入缓冲区和输出缓冲区以及输入进程和输出进程。这三部分由与输入程序、井管理程序和缓输出程序管理,以保证系统正常运行。
- 输入输出井——磁盘空间
它们是在磁盘上开辟的两大存储区。输入井是模拟脱机输入时的磁盘,用于收容输入设备输入的数据;输出井是模拟脱机输出时的磁盘,用于收容用户程序的输出数据。
- 输入缓冲区和输出缓冲区——内存空间
它们是在主存中开辟的两个缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井;输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。
- 输入进程和输出进程
输入进程模拟脱机输入时的外围控制机,将用户要求的数据从输入设备,通过输入缓冲区送到输入井。当CPU需要数据时,直接从输入井读入主存;输出进程模拟脱机输出时的外围控制机,把用户要求输出的数据,先从主存送到输出井,待输出设备空闲时,再将输出井中的数据,经过输出缓冲区送到输出设备上。
- 请求打印队列
由若干张请求打印表所形成的队列,系统为每个请求打印的进程建立一张请求打印表。
3.3 SPOOLing技术的技术原理
它在输入和输出之间增加了“输入井”和“输出井”的排队转储环节,以消除用户的“联机”等待时间。在系统输入模块收到作业输入请求信号后,输入管理模块中的读过程负责将信息从输入装置中读入输入井缓冲区。当缓冲区满时,由写过程将信息从缓冲区写到外存的输入井中,读过程和写过程反复循环,直到一个作业输入完毕。当读过程读到一个硬件结束标志之后,系统再次驱动写过程把最后一批信息写入外存输入井并调用中断处理程序结束该次输入。然后,系统为该作业建立作业控制块,从而使输入井中的作业进入作业等待队列,等待作业调度程序选中后进入内存运行。系统在管理输入井过程中可以“不断”读入输入的作业,直到输入结束或输入井满而暂停。
以打印机为例:若系统的某台打印机采用了虚拟设备技术,那么若有进程要求对它打印输出时,SPOOLing系统并不是将这台打印机直接分配给进程,而是在共享设备(磁盘)上的输出,SPOOLing存储区中为其分配一块存储空间,进程的输出数据以文件形式此。各进程的数据输出文件形成了一个输出队列,由输出POOLing系统控制这台打印机进程,依次将队列中的输出文件实际打印输出。在SPOOLing系统中,实际上并没有为任何进程分配,而只是在输入井和输出井中,为进程分配一存储区和建立一章I/O请求表。这样,便把独占设备改造为共享设备。
3.4 SPOOLing技术的特点
(1)提高了输入输出速度
SPOOLing技术提高了I/O速度.从对低速I/O设备进行的I/O操作变为对输入井或输出井的操作,如同脱机操作一样,提高了I/O速度,缓和了CPU与低速I/O设备速度不匹配的矛盾。
(2)将独占设备改造为共享设备
由于SPOOLing技术把所有用户进程的输出都送入输出井,然后再由输出进程完成打印工作,而输出井在磁盘上,为共享设备。这样,SPOOLing技术就把打印机等独占设备改造成立共享设备。
(3)实现了虚拟设备功能
由于SPOOLing技术实现了多个用户进程共同使用打印机这种独占设备的情况,从而实现了把一个设备当成多个设备来使用,即虚拟设备的功能。
外存管理
1 磁盘
磁盘是可共享设备(分时共享),是指某段时间内可以有多个用户进行访问。但某一时刻只能有一个作业可以访问。
磁盘是一种大容量低成本的存储设备,其支持随机存取。机械硬盘的物理结构如下所示:
如图所示,磁盘由多个盘片和读写磁头臂组成。盘面被分为多个同心圆,称为磁道;每个磁道又被划分为多个独立的逻辑区域,被称为扇区,扇区容量一般是512byte,有些较大为4Kbyte。每个磁道上扇区的数量可能相同也可能不相同,由于外圈长度比较大,为了提高密度可以划分更多的扇区。
磁盘在设计时根据磁头是否在磁道之间移动可大致分为以下两种:
1. 固定头磁盘,每条磁道都有读写磁头,磁头被安装在刚性磁臂上,可并行读写磁道
2. 移动头磁盘,每个盘面只有一个磁头,磁头需要能在不同磁道之间移动,读写速度较慢
磁盘调度主要是针对移动头磁盘的读写时间优化。
磁盘的地址结构(柱面号,磁头号,扇区号)
2 磁盘管理
2.1 磁盘初始化
- 进行低级格式化(物理格式化),将磁盘的各个磁道划分为扇区。一个扇区通常可分为头、数据区域(如512B大小)、尾三个部分组成。管理扇区所需要的各种数据结构一般存放在头、尾两个部分,包括扇区校验码。
- 将磁盘分区,每个分区由若干柱面组成(即分为我们熟悉的C盘、D盘、E盘)。
- 进行高级格式化(逻辑格式化),创建文件系统。包括创建文件系统的根目录、初始化存储空间管理所用的数据结构(如位示图、空闲分区表)。
2.2 引导块
- 计算机开机时需要进行一系列初始化的工作,这些初始化工作是通过执行初始化程序(自举程序)完成的。
- 完整的自举程序放在磁盘的启动块(即引导块/启动分区)上,启动块位于磁盘的固定位置。拥有引导块的盘称为启动磁盘或系统磁盘(C:盘)。
- 开机时计算机先运行ROM上的“自举装入程序”,通过执行该程序就可找到引导块,并将完整的“自举程序”读入内存,完成初始化。
2.3 坏块的管理
- 坏了、无法正常使用的扇区就是“坏块”。这属于硬件故障,操作系统是无法修复的。应该将坏块标记来,以免错误地使用到它。
- 对于简单的磁盘,可以在逻辑格式化时(建立文件系统时)对整个磁盘进行坏块检查,标明哪些扇区是坏扇区,比如:在FAT表上标明。(在这种方式中,坏块对操作系统不透明)。
- 对于复杂的磁盘,磁盘控制器(磁盘设备内部的一个硬件部件)会维护一个坏块链表。
- 在磁盘出厂前进行低级格式化(物理格式化)时就将坏块链进行初始化。会保留一些“备用扇区”,用于替换坏块。这种方案称为扇区备用。且这种处理方式中,坏块对操作系统透明。
3 磁盘调度算法
3.1 磁盘的存取时间
磁盘在读写的时候主要经历如下过程:启动磁臂->移动磁头到指定磁道->扇区移动到磁头下方->读取数据。因此磁盘访问时间主要如下几部分组成:
1. 寻道时间
Ts
,Ts=m*n"+s
,s
为启动磁臂时间,n
为跨越磁道数,m
为一常数,和具体磁盘有关。——移动磁头的时间。
2. 旋转延迟时间Tr
,指扇区移动到磁头下花费的时间。
3. 传输时间Tt
,为数据读写所花费的时间,如果每次读写字节数为b
,旋转速度为r,磁道字节数为N
,则Tt=b/(rN)
。从上述可得出整个读写期间共花费
Ta=Ts+Tr+Tt
,其中前两项一般与读取的数据量无关,且是整个时间中的大头。3.2 磁盘调度算法
(1)先来先服务算法FCFS
- 算法思想:按访问请求到达的先后次序服务。
- 优点:简单,公平。
- 缺点:效率不高,相邻两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。
那按照这个序列的话:
98,183,37,122,14,124,65,67
那么,磁盘的写入顺序是从左到右,如下图:
先来先服务算法总共移动了
640
个磁道的距离,这么一看这种算法,比较简单粗暴,但是如果大量进程竞争使用磁盘,请求访问的磁道可能会很分散,那先来先服务算法在性能上就会显得很差,因为寻道时间过长。(2)最短寻道时间优先算法SSTF
- 算法思想:优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先。
- 优点:改善了磁盘平均服务时间。
- 缺点:不能保证平均寻找时间最小,造成某些访问请求长期等待得不到服务(饥饿)。
还是以这个序列为例子:
98,183,37,122,14,124,65,67
那么,那么根据距离磁头( 53 位置)最近的请求的算法,具体的请求则会是下列从左到右的顺序:
65,67,37,14,98,122,124,183
磁头移动的总距离是
236
磁道,相比先来先服务性能提高了不少。但这个算法可能存在某些请求的饥饿,因为本次例子我们是静态的序列,看不出问题,假设是一个动态的请求,如果后续来的请求都是小于 183 磁道的,那么 183 磁道可能永远不会被响应,于是就产生了饥饿现象,这里产生饥饿的原因是磁头在一小块区域来回移动。(3)扫描算法SCAN,电梯算法
- 算法思想:当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;否则改变移动方向,并为经过的访问请求服务,如此反复
- 优点:克服了最短寻道优先的缺点,既考虑了距离,同时又考虑了方向,可避免饥饿现象。
- 缺点:不利于远离磁头一端的访问请求。
还是以这个序列为例子,磁头的初始位置是 53:
98,183,37,122,14,124,65,67
那么,假设扫描调度算先朝磁道号减少的方向移动,具体请求则会是下列从左到右的顺序:
37,14,0,65,67,98,122,124,183
磁头先响应左边的请求,直到到达最左端( 0 磁道)后,才开始反向移动,响应右边的请求。
扫描调度算法性能较好,不会产生饥饿现象,但是存在这样的问题,中间部分的磁道会比较占便宜,中间部分相比其他部分响应的频率会比较多,也就是说每个磁道的响应频率存在差异。
(4)循环扫描算法CSCAN
- 在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求。
还是以这个序列为例子,磁头的初始位置是 53:
98,183,37,122,14,124,65,67
那么,假设循环扫描调度算先朝磁道增加的方向移动,具体请求会是下列从左到右的顺序:
65,67,98,122,124,183,
199
,0
,14,37磁头先响应了右边的请求,直到碰到了最右端的磁道 199,就立即回到磁盘的开始处(磁道 0),但这个返回的途中是不响应任何请求的,直到到达最开始的磁道后,才继续顺序响应右边的请求。
循环扫描算法相比于扫描算法,对于各个位置磁道响应频率相对比较平均。
3.3 减少延迟时间的方法
- 延迟时间:磁头读入一个扇区数据后需要一小段时间处理,如果逻辑上相邻的扇区在物理上也相邻,则读入几个连续的逻辑扇区,可能需要很长的“延迟时间”。
- 交替编号:即让逻辑上相邻的扇区在物理上有一定的间隔,可以使读取连续的逻辑扇区所需要的延迟时间更小。
- 错位命名:让相邻盘面的扇区编号"错位",原理同交替编号。
- 磁盘地址结构的设计:为什么磁盘的物理地址是(柱面号,盘面号,扇区号)而不是(盘面号,柱面号,扇区号):
- 读取地址连续的磁盘块时,采用(柱面号,盘面号,扇区号)的地址结构可以减少磁头移动消耗的时间。
3.4 提高磁盘I/O速度的方法
1)采用磁盘高速缓存。
2)调整磁盘请求顺序。即上面介绍的各种磁盘调度算法。
3)提前读。在读磁盘当前块时,将下一磁盘块也读入内存缓冲区。
4)延迟写。仅在缓冲区首部设置延迟写标志,然后释放此缓冲区并将其链入空闲缓冲区链 表的尾部,当其他进程申请到此缓冲区时,才真正将缓冲区信息写入磁盘块。
5)优化物理块的分布。除了上面介绍的扇区编号优化,当文件采用链接方式和索引方式组 织时,应尽量将同一个文件的盘块安排在一个磁道上或相邻的磁道上,以减少寻道时间。 另外,将若干盘块组成簇,按簇对文件进行分配,也可减少磁头的平均移动距离。eg:为文件分配连续的簇。
6)虚拟盘。是指用内存空间去仿真磁盘,又叫RAM盘。常用于存放临时文件。
7)采用磁盘阵列RAID。由于可采用并行交叉存取,因此能大幅提高磁盘I/O速度。(RAID 属于计算机组成原理存储介质部分内容)
4 固态硬盘
4.1 固态硬盘特性
固态硬盘(Solid State Disk,SSD)是一种基于闪存技术的存储器。
它与U盘并无本质差别, 只是容量更大,存取性能更好。一个SSD由一个或多个闪存芯片和闪存翻译层组成,
比起传统磁盘,SSD有很多优点:
- 它由半导体存储器构成,没有移动的部件,因此随机访问速度比机械磁盘要快很多
- 也没有任何机械噪声和震动,能耗更低、抗震性好、安全性高等。
- 随着技术的不断发展,价格也不断下降,SSD有望逐步取代传统机械硬盘。
4.2 磨损均衡(Wear Leveling)
固态硬盘也有缺点,闪存的擦写寿命是有限的,一般是几百次到几千次。
如果直接用普通闪存组装SSD,那么实际的寿命表现可能非常令人失望——读/写数据时会集中在SSD的一部分闪 存,这部分闪存的寿命会损耗得特别快。一旦这部分闪存损坏,整块SSD也就损坏了。
这种磨损不均衡的情况,可能会导致一块256GB的SSD只因数兆空间的闪存损坏而整块损坏。
为了弥补SSD的寿命缺陷,引入了磨损均衡。SSD磨损均衡技术大致分为两种:
1)动态磨损均衡。写入数据时,自动选择较新的闪存块。老的闪存块先歇一歇。
2)静态磨损均衡。这种技术更为先进,就算没有数据写入,SSD也会监测并自动进行数据 分配,让老的闪存块承担无须写数据的存储任务,同时让较新的闪存块腾出空间,平常的读/写操作在较新的闪存块中进行。如此一来,各闪存块的寿命损耗就都差不多。
📎 参考文章
有关问题,欢迎您在底部评论区留言,一起交流~
- Author:Koreyoshi
- URL:https://Koreyoshi1216.com/article/130c7b13-c6a7-808a-8cf5-ce3b4e55dc71
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!