计算机操作系统(伍)
本文章是关于计算机操作系统的学习笔记,笔记主要来自王道的操作系统课程,总共有五个章节:
- 第一章:计算机操作系统(壹)
- 第二章:计算机操作系统(贰)
- 第三章:计算机操作系统(叁)
- 第四章:计算机操作系统(肆)
- 第五章:计算机操作系统(伍)
一、IO设备的概念和分类
1、什么是I/O设备
将数据输入/输出,计算机外部设备
2、按使用特性分类
-
人机交互的外部设备
-
存储设备
-
网络通信设备
3、按传输速率分类
-
低俗设备
-
中速设备
-
高速设备
4、按信息交换的单位分类
-
块设备(传输快,可寻址)
-
字符设备(传输慢、不可寻址,常采用中断驱动方式)
二、I/O控制器
1、概念
I/O设备分为机械部件和电子部件:
-
机械部件:鼠标、键盘等,主要用来执行具体的I/O操作
-
电子部件:通常是一块插入主板扩充槽的印刷电路板
CPU无法直接控制I/O设备机械部件,因此需要一个电子部件作为“中介”,实现CPU对设备的控制,而这个电子部件就是I/O控制器,又称设备控制器
2、功能
(1)接受和识别CPU发出的命令
I/O控制器有相应的控制寄存器存放命令和参数
(2)向CPU报告设备的状态
I/O控制器有相应的状态寄存器记录I/O设备当前状态
(3)数据交换
I/O控制器有相应的数据寄存器,暂存CPU发来的数据
(4)地址识别
I/O控制器通过CPU提供的“地址”判断CPU读/写的是哪个寄存器
3、组成

4、两种寄存器编址方式
-
内存映射IO:控制器中的寄存器与内存统一编址,可采用对内存进行操作的指令对控制器进行操作
-
寄存器独立编制:控制器的寄存器独立编址,需要设置专门的指令操作控制器
三、I/O控制方式
I/O控制方式分为4种,需要注意的问题:
- 完成一次读写操作的流程
- CPU干预频率:干预频繁
- 数据传送的单位
- 数据流向
- 优缺点
1、程序直接控制方式
-
完成一次读/写操作的流程:轮询
-
CPU干预频繁
-
传输单位:每次读写一个字
-
数据流向:
-
读:I/O设备->CPU->内存
-
写:内存->CPU->I/O设备
-
-
优点:实现简单
-
缺点:会使CPU忙等

2、中断驱动方式
与第一种方式不同的是,等待I/O设备时,会先中断等待I/O的进程,CPU可以干别的事情。等设备准备好了发出中断信号,CPU就会恢复该I/O进程执行。而不是轮询检查等待。
-
完成一次读/写操作的流程:中断
-
CPU干预频率:每次I/O操作开始前、完成后需要CPU介入,而CPU等待过程中可以做其它事
-
传输单位:每次读写一个字
-
数据流向:
-
读:I/O设备->CPU->内存
-
写:内存->CPU->I/O设备
-
-
优点:CPU不必轮询检查,CPU与I/O设备可并行工作,CPU利用率提升
-
缺点:频繁的中断处理会消耗较多CPU时间
3、DMA方式:直接存储器存取
相比中断驱动方式,DMA方式改进如下:① 数据传送单位是“块”;② 数据流向从设备直接放入内存,或者反过来,而不需要经过CPU; ③ CPU干预频率降低。
每次读写时,CPU给DMA模块(I/O模块)发出命令,之后CPU可以做其他事情,等DMA完成CPU的命令时(完成一个或多个数据块读写),才发出中断信号,而不是每次传输时都发出中断信号。
- 完成一次读/写操作的流程:见上面描述
- CPU干预频率:仅在传输一个或多个数据块开始和结束时,需要CPU干预
- 数据单位:一个或多个块(必须是连续的多个块,如果是离散的需要CPU发出多条指令)
- 数据流向:
-
读:I/O设备->内存
-
写:内存->I/O设备
-
- 优点:传输以“块”为单位,CPU介入频率进一步降低,数据传输效率和CPU与I/O设备的并行性提升
- 缺点:CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块(离散数据的需要多次中断)

-
DR:数据寄存器,暂存从设备到内存,从内存到设备的数据
-
MAR:内存地址寄存器,存放了数据应该放到内存中的什么位置
-
DC:数据计数器,表示剩余读写的字节数
-
CR:命令/状态寄存器,存放CPU发来的I/O命令或设备的状态信息
4、通道控制方式
算是DMA的改进,CPU发送I/O命令给通道,指明通道程序在内存中的位置,操作哪个I/O设备,然后让通道处理IO操作就行了,CPU可以干其他事。等处理完了,向CPU发送中断信号。
通道:一种硬件,可理解为“弱鸡版CPU”,通道可以识别并执行一系列通道指令
通道程序:任务清单,就是通道指令的集合
- 完成一次读/写操作的流程:见上面描述
- CPU干预频率:频率极低,只有完成一组数据块的读/写后才需要发出中断信号请求CPU干预。
- 数据单位:一组数据块
- 数据流向:(在通道控制下进行)
-
读:I/O设备->内存
-
写:内存->I/O设备
-
- 优点:CPU、通道、I/O设备可并行工作,资源利用率高
- 缺点:实现复杂,需要专门的通道硬件支持

四、I/O软件层次结构
1、用户层软件
实现与用户交互的接口,向上提供方便易用的库函数
2、设备独立性软件(设备无关性软件)
-
向上层提供统一的调用接口(read/write)
-
设备的保护
-
差错处理:对设备的错误进行处理
-
设备的分配与回收
-
数据缓冲区管理:通过缓冲技术屏蔽设备间数据交换的单位大小和传输速度差异
-
建立逻辑设备名到物理设备名的映射关系(逻辑设备表)
-
根据设备类型选择调用相应的驱动程序
3、设备驱动程序(比如打印机驱动)
负责对硬件设备的具体控制,将上层发出的一系列命令转换为特定设备能听懂的一系列操作,如设置设备寄存器、检查设备状态等
4、中断处理程序
I/O任务完成时,I/O控制器会发送一个中断信号,CPU会进行中断处理(之前章节讲过)
5、硬件
用于执行IO操作,由机械部件、电子部件组成

五、输入输出应用程序接口 & 设备驱动程序接口
输入输出应用程序接口:
-
字符设备接口
-
块设备接口
-
网络设备接口
-
概念:
- 阻塞IO:应用程序发出I/O系统调用,进程需转为阻塞态等待
- 非阻塞IO:应用程序发出I/O系统调用,系统调用可迅速返回,进程无需阻塞等待
设备驱动程序接口:
不同操作系统,对设备驱动程序接口的标准各不相同,操作系统规定好设备驱动程序的接口标准,各厂商必须按照要求开发设备驱动程序。
六、I/O核心子系统
I/O软件层次结构中,设备独立性软件、设备驱动程序、中断处理程序三者属于操作系统的内核部分,即“I/O系统”,又称 “I/O核心子系统”。
重点理解和掌握:
- 用户层软件:假脱机技术(SPOOLing技术)
- 设备独立性软件:I/O调度、设备保护、设备分配与回收、缓冲区管理(缓冲与高速缓存)
七、假脱机技术
1、什么是脱机技术
脱机技术:脱离主机的控制进行输入/输出操作

2、假脱机技术的实现原理
- 输入井和输出井——模拟脱机输入/输出的磁带
- 输入进程和输出进程——模拟脱机输入/输出的外围控制机
- 输入缓冲区和输出缓冲区——内存中的缓冲区,输入、输出的”中转站“
3、共享打印机的原理分析
独占式设备:只允许各个进程串行使用的设备。
共享设备:允许多个进程“同时”使用的设备
打印机是独占式设备,但是可以通过SPOOLing技术改造成“共享设备”,原理直白点说就是每个进程请求打印时,会将打印任务添加进队列中,然后依次打印,但是用户进程感觉自己像是独占打印机。
八、设备的分配与回收
1、设备分配时应考虑的因素
-
设备的固有属性:独占设备、共享设备、虚拟设备
-
设备分配算法:先来先服务、优先级高优先、短任务优先
-
设备分配中的安全性:
- 安全分配方式:为进程分配一个设备后就将进程阻塞,本次IO完成后才将进程唤醒
- 不安全分配方式:进程发出IO请求后,系统为其分配IO设备,进程可继续执行,并且之后可以发出新的IO请求,只有某个IO请求得不到满足时才将进程阻塞(可能会死锁)
2、静态分配与动态分配
-
静态分配:进程运行前为其分配全部所需资源、运行结束后归还资源(破环“请求和保持”条件,不会发生死锁)
-
动态分配:进程运行中动态申请设备资源
3、设备分配管理中的数据结构
一个系统可能有多个通道,一个通道可以有多个控制器,一个控制器可以有多个设备,就是树型数据结构。
系统设备表SDT:记录系统中全部设备的情况,每个设备对应一个表目:(设备类型、设备标识符、DCT、驱动程序入口)
设备控制表DCT(设备类型、设备标识符、设备状态、指向控制器表的指针、重复执行次数或事件、设备队列的队首指针)
控制器控制表COCT(控制器标识符、控制器状态、指向通道表的指针设备队列的队首指针、控制器队列的队尾指针)
通道控制表CHCT(通道标识符、通道状态、与通道连接的控制器表首址、通道队列的队首指针、通道队列的队尾指针)
4、设备分配的步骤
根据进程请求的物理设备名 -> 设备控制表 -> 控制器控制表 -> 通道
5、设备分配步骤的改进
之前方式的缺点:
用户编程时必须用“物理设备名”,若换了一个物理设备,则程序无法运行。若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待。
改进:用户编程时使用逻辑设备名申请设备,建立逻辑设备名到物理设备名的映射(LUT表)
九、缓冲区管理
1、什么是缓冲区?
缓冲区是一个存储区域,可以由专门硬件寄存器组成,也可利用内存作为缓冲区。
2、缓冲区作用
-
缓和CPU与IO设备之间速度不匹配的矛盾
-
减少对CPU的中断频率
-
解决数据粒度不匹配的问题
-
提高CPU与IO设备之间的并行性
3、单缓冲
概念:假设用户进程请求某个块设备读入若干块数据,则该策略在主存中分配一个缓冲区(若题目无特殊说明,一个缓冲区大小就是一个块)。
注意:当缓冲区数据非空,不能冲入数据,只能传出数据;当缓冲区为空,可以冲入数据,但必须充满缓冲区才可以传出数据。
处理一块时间:max(C,T)+M

4、双缓冲
与单缓冲不同的是,在内存中分配两块缓冲区
处理一块时间:max(T,C+M)

5、循环缓冲
多个大小相等的缓冲区链接成一个循环队列,in指针指向下一个可以冲入数据的空缓冲区,out指针指向下一个可以取出数据的满缓冲区
6、缓冲池
缓冲池由系统中共用的缓冲区组成。这些缓冲区可以分为:空缓冲队列、装满输入数据的缓冲队列、装满输出数据的缓冲队列
十、磁盘的结构
1、磁盘、磁道、扇区的概念
磁盘:磁盘的表面由一些磁性物质组成,可以用这些磁性物质记录二进制数据
磁道:磁盘的盘面会划分为一个个磁道,一个“圈”就是一个磁道
扇区:一个磁道又会划分为一个个扇区,每个扇区就是一个“磁盘块”,各个扇区存放的数据量相同

2、如何在磁盘中读写数据
先把磁头移动到想要读写的扇区所在磁道,然后磁盘转动,让目标扇区从磁头下面划过,完成对扇区的读写。
3、盘片、盘面、柱面的概念
磁盘是由很多个盘面/盘片组成,每个盘片可能会有两个盘面,其中每个盘面对应一个磁头,所有磁头连在同一个磁臂上。所有盘面中相对位置相同的磁道组成柱面

4、磁盘的物理地址
可用 (柱面号、盘面号、扇区号) 定位任意一个磁盘块
5、磁盘的分类
按磁头分类:活动头磁盘、固定头磁盘
按盘片更换分类:可换盘磁盘、固定盘磁盘
十一、磁盘调度算法
1、一次磁盘读/写操作需要的时间
- 寻找时间(寻道)Ts:在读写数据前,将磁头移动到指定磁道所花的时间。
- 启动磁头臂时间s,假设移动磁头匀速,每跨越一个磁道耗时m,总共n条磁道
- 则寻道时间=s+m*n
- 延迟时间Tr:旋转磁盘,使磁头定位到目标扇区所需时间
- 设磁盘转速r(转/秒 或 转/分),则1/r就是转一圈需要的时间
- 则平均延迟时间=(1/2)*(1/r) = 1/2r
- 传输时间Tt:从磁盘读出或写入数据所经历的时间
- 假设磁盘转速为r,此次读/写字节数为b,每个磁道上字节数为N,则需要读取b/N个磁道
- 则传输时间=(1/r) * (b/N) = b/(rN)
其中延迟时间和传输时间都是磁盘硬件的固有属性,因此操作系统无法优化这两个,只能通过磁盘调度算法优化寻道时间。
2、磁盘调度算法
- 先来先服务(FCFS)
按照访问磁盘的先后顺序进行依次调度

- 最短寻找时间优先(SSTF)
优先处理此时离磁头最近的磁道,可能会产生饥饿现象

- 扫描算法(SCAN)
只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动,磁头移动方式很像电梯,因此也叫电梯算法。简单来说就是有方向性,每次只能往一个方向移动,到头了再折返。
该算法有两个缺点:① 必须到最边上才能回头; ② 各个位置磁道的响应频率不均。

- LOOK调度算法
对扫描算法第一个缺点的改进:如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。
边移动边观察,因此叫LOOK
- 循环扫描算法(C-SCAN)
对扫描算法第二个缺点的改进:规定只有磁头朝某个特定方向移动时才处理磁道的访问请求,而返回时直接快速移动至起始端而不处理任何请求(如向右移动时处理请求,向左回到起始端不处理请求)
当然该算法也可以像LOOK算法那样改进,叫C-LOOK。不必到达最边上才改变方向,如前进时,若磁头移动方向上已经没有别的请求,就可以立即回头;回头时,只需要返回到离边缘最近的需要访问的磁道即可,不必返回到0。
十二、减少磁盘延迟时间的方法
-
寻找时间(寻道时间):启动磁臂、移动磁头所花的时间
-
延迟时间:将目标扇区转到磁头下面所化的时间
-
传输时间:读/写 数据花费的时间
假设读取磁盘连续区域2、3、4扇区,三者相邻排列,此时当磁头读取完2号扇区时,需要一小段时间处理,而盘片又在不停旋转,因此必须等下次3号扇区再次划过磁头才能继续读入该扇区。即延迟时间很长
减少延迟时间的方案:
- 交替编号:让逻辑上相邻的扇区在物理上有一定间隔,如2和3号扇区中间隔一个扇区。
- 错位命名:不同盘面的扇区编号是错开的,如该0号盘面的0号扇区,对应1号盘面的就不是0号扇区了
十三、磁盘管理
1、磁盘初始化
- 低级格式化/物理分区,将各个磁道划分为扇区
- 磁盘分区
- 逻辑格式化,创建文件系统
2、引导块
计算机开机时需要进行一系列初始化工作,通过执行初始化程序(自举程序)完成。
初始化程序放在ROM中,ROM不可修改,因此现在的ROM中只存放很小的“自举装入程序”,完整的自举程序放在磁盘的启动块上,该磁盘称为启动磁盘或系统磁盘(C盘)
3、坏块的管理
坏块:坏了,无法使用的扇区。
管理:
-
对于简单的磁盘,可以在逻辑格式化时,对整个磁盘进行坏块检查,标明坏扇区,如在FAT表上标明(坏块对操作系统不透明)
-
对于复杂的磁盘,磁盘控制器(硬盘内部硬件)会维护一个坏块链表,磁盘出厂前进行低级格式化(物理格式化),将坏块链表进行初始化。会保留一些“备用扇区”,用于替换坏块,这种方案称为**“扇区备用”**。(坏块对操作系统透明,操作系统不知道)
十四、固态硬盘SSD
