计算机操作系统(伍)

目录

目录

本文章是关于计算机操作系统的学习笔记,笔记主要来自王道的操作系统课程,总共有五个章节:

一、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、组成

image-20260111175052259

4、两种寄存器编址方式

  • 内存映射IO:控制器中的寄存器与内存统一编址,可采用对内存进行操作的指令对控制器进行操作

  • 寄存器独立编制:控制器的寄存器独立编址,需要设置专门的指令操作控制器

三、I/O控制方式

I/O控制方式分为4种,需要注意的问题:

  • 完成一次读写操作的流程
  • CPU干预频率:干预频繁
  • 数据传送的单位
  • 数据流向
  • 优缺点

1、程序直接控制方式

  • 完成一次读/写操作的流程:轮询

  • CPU干预频繁

  • 传输单位:每次读写一个

  • 数据流向:

    • 读:I/O设备->CPU->内存

    • 写:内存->CPU->I/O设备

  • 优点:实现简单

  • 缺点:会使CPU忙等

image-20260111180141960

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指令,只能读/写一个或多个连续的数据块(离散数据的需要多次中断)

image-20260111181659419

  • 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设备可并行工作,资源利用率高
  • 缺点:实现复杂,需要专门的通道硬件支持

image-20260111183226880

四、I/O软件层次结构

1、用户层软件

实现与用户交互的接口,向上提供方便易用的库函数

2、设备独立性软件(设备无关性软件)

  • 向上层提供统一的调用接口(read/write)

  • 设备的保护

  • 差错处理:对设备的错误进行处理

  • 设备的分配与回收

  • 数据缓冲区管理:通过缓冲技术屏蔽设备间数据交换的单位大小和传输速度差异

  • 建立逻辑设备名到物理设备名的映射关系(逻辑设备表)

  • 根据设备类型选择调用相应的驱动程序

3、设备驱动程序(比如打印机驱动)

负责对硬件设备的具体控制,将上层发出的一系列命令转换为特定设备能听懂的一系列操作,如设置设备寄存器、检查设备状态等

4、中断处理程序

I/O任务完成时,I/O控制器会发送一个中断信号,CPU会进行中断处理(之前章节讲过)

5、硬件

用于执行IO操作,由机械部件、电子部件组成

image-20260111185035963

五、输入输出应用程序接口 & 设备驱动程序接口

输入输出应用程序接口:

  • 字符设备接口

  • 块设备接口

  • 网络设备接口

  • 概念:

    • 阻塞IO:应用程序发出I/O系统调用,进程需转为阻塞态等待
    • 非阻塞IO:应用程序发出I/O系统调用,系统调用可迅速返回,进程无需阻塞等待

设备驱动程序接口:

不同操作系统,对设备驱动程序接口的标准各不相同,操作系统规定好设备驱动程序的接口标准,各厂商必须按照要求开发设备驱动程序。

六、I/O核心子系统

I/O软件层次结构中,设备独立性软件、设备驱动程序、中断处理程序三者属于操作系统的内核部分,即“I/O系统”,又称 “I/O核心子系统”

重点理解和掌握:

  • 用户层软件:假脱机技术(SPOOLing技术)
  • 设备独立性软件:I/O调度、设备保护、设备分配与回收、缓冲区管理(缓冲与高速缓存)

七、假脱机技术

1、什么是脱机技术

脱机技术:脱离主机的控制进行输入/输出操作

image-20260111225858116

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

image-20260112174822654

4、双缓冲

与单缓冲不同的是,在内存中分配两块缓冲区

处理一块时间:max(T,C+M)

image-20260112175053158

5、循环缓冲

多个大小相等的缓冲区链接成一个循环队列,in指针指向下一个可以冲入数据的空缓冲区out指针指向下一个可以取出数据的满缓冲区

6、缓冲池

缓冲池由系统中共用的缓冲区组成。这些缓冲区可以分为:空缓冲队列、装满输入数据的缓冲队列、装满输出数据的缓冲队列

十、磁盘的结构

1、磁盘、磁道、扇区的概念

磁盘:磁盘的表面由一些磁性物质组成,可以用这些磁性物质记录二进制数据

磁道:磁盘的盘面会划分为一个个磁道,一个“圈”就是一个磁道

扇区:一个磁道又会划分为一个个扇区,每个扇区就是一个“磁盘块”,各个扇区存放的数据量相同

image-20260112175647683

2、如何在磁盘中读写数据

先把磁头移动到想要读写的扇区所在磁道,然后磁盘转动,让目标扇区从磁头下面划过,完成对扇区的读写。

3、盘片、盘面、柱面的概念

磁盘是由很多个盘面/盘片组成,每个盘片可能会有两个盘面,其中每个盘面对应一个磁头,所有磁头连在同一个磁臂上。所有盘面中相对位置相同的磁道组成柱面

image-20260112215842650

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)

按照访问磁盘的先后顺序进行依次调度

image-20260112213903781

  • 最短寻找时间优先(SSTF)

优先处理此时离磁头最近的磁道,可能会产生饥饿现象

image-20260112215759124

  • 扫描算法(SCAN)

只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动,磁头移动方式很像电梯,因此也叫电梯算法。简单来说就是有方向性,每次只能往一个方向移动,到头了再折返。

该算法有两个缺点:① 必须到最边上才能回头; ② 各个位置磁道的响应频率不均。

image-20260112221833858

  • 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

image-20260112223520446