王道操作系统 5.2 设备独立性软件
5.2 设备独立性软件
设备独立性是指用户编程时使用的设备与实际使用的设备无关
IO核心子系统

核心子系统在开机时就调入了内存的内核区

磁盘IO也属于IO调度问题
5.2.1 与设备无关的软件
与设备无关的软件是I/O系统的最高层软件,它的下层是设备驱动程序。
- 设备保护:
- 操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)
- 在UNIX系统中,设备被看做是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问某个设备时,系统根据FCB中记录的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能。
5.2.2 高速缓存与缓冲区
引入高速缓冲的主要目的是改善CPU与设备速度不匹配的问题
缓冲区一般都开在内存
缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可以利用内存实现

磁盘高速缓存(Disk Cache)
操作系统中使用磁盘高速缓存技术来提高磁盘的I/O速度,对访问高速缓存要比访问原始磁盘数据更为高效。
磁盘高速缓存技术不同于通常意义下的介于CPU与内存之间的小容量高速存储器,而是指利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息。因此,磁盘高速缓存逻辑上属于磁盘,物理上则是驻留在内存中的盘块。
- 高速缓存在内存中分为两种形式:
- 一种是在内存中开辟一个单独的空间作为磁盘高速缓存,大小固定
- 另一种是把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘I/O时共享。
在内存中设置磁盘缓冲区的主要目的是减少磁盘IO次数
- 高速缓存在内存中分为两种形式:
缓冲区(Buffer)
概念:缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。


单缓冲



这句话的意思应该是读缓冲区和写缓冲区都是加了PV的,是互斥的,写要一口气写满,读要一口气读完
结论:故单缓冲区处理每块数据的用时为$max(C,T)+M$。
若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输。
双缓冲
若采用双缓冲的策略,操作系统会在主存中为其分配两个缓冲区。


结论:采用双缓冲策略,处理一个数据块的平均耗时为$Max(T,C+M)$
使用单双缓冲区在通信时的区别

若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输。
若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输。
循环缓冲

缓冲池(这个还是看看视频的动画吧,不然太难记了)
缓冲池由系统中共用的缓冲区组成。

工作过程:
① 输入进程请求输入数据
从空缓冲队列中取出一块作为收容输入数据的工作缓冲区(hin)。冲满数据后将缓冲区挂到输入队列队尾

② 计算进程想要取得一块输入数据
从输入队列中取得一块冲满输入数据的缓冲区作为“提取输入数据的工作缓冲区(sin)”。缓冲区读空后挂到空缓冲区队列

③ 计算进程想要将准备好的数据冲入缓冲区
从空缓冲队列中取出一块作为“收容输出数据的工作缓冲区(hout)”,数据冲满后将缓冲区挂到输出队列队尾

- ④ 输出进程请求输出数据
从输出队列中取得一块冲满输出数据的缓冲区作为“提取输出数据的工作缓冲区(sout)”。缓冲区读空后挂到空缓冲区队列

书上有关于高速缓存和缓冲池的对比,可以看看
5.2.3 设备的分配与回收

设备分配时应考虑的因素

设备分配常用的算法:1、先来先服务算法 2、最高优先级算法
设备分配概述
设备分配是指根据用户的I/O请求分配所需的设备。分配的总原则是充分发挥设备的使用效率,尽可能地让设备忙碌,又要避免由于不合理的分配方法造成进程死锁。

设备分配的数据结构
设备、控制器、通道之间的关系
设备分配依据的主要数据结构有设备控制表(DCT)、控制器控制表(COCT)、通道控制表 (CHCT)和系统设备表(SDT),各数据结构功能如下。
设备分配的策略
设备分配原则。设备分配应根据设备特性、用户要求和系统配置情况。既要充分发挥设备的使用效率,又要避免造成进程死锁,还要将用户程序和具体设备隔离开。
设备分配方式。设备分配方式有静态分配和动态分配两种。

①静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源。主要用于对独占设备的分配,它在用户作业开始执行前,由系统一次性分配该作业所要求的全部设备、控制器。
静态分配方式不会出现死锁,但设备的使用效率低。
②动态分配:进程运行过程中动态申请设备资源。在进程执行过程中根据执行需要进行。
这种方式有利于提高设备利用率,但若分配算法使用不当,则有可能造成进程死锁。
设备分配算法。常用的动态设备分配算法有先请求先分配、优先级高者优先等。
设备分配的安全性
设备分配的安全性是指设备分配中应防止发生进程死锁。
安全分配方式。
- 为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒。一个时段内每个进程只能使用一个设备。
- 优点:破坏了“请求和保持”条件,不会死锁
- 缺点:对于一个进程来说,CPU和I/O设备只能串行工作
不安全分配方式。
进程发出I/O请求后,系统为其分配I/O设备,进程可继续执行,之后还可以发出新的I/O请求。只有某个I/O请求得不到满足时才将进程阻塞。一个进程可以同时使用多个设备。
- 优点:进程的计算任务和I/O任务可以并行处理,使进程迅速推进
- 缺点:有可能发生死锁(死锁避免、死锁的检测和解除)
设备分配的步骤
步骤

缺点

设备分配步骤的改进
改进方法:建立逻辑设备名与物理设备名的映射机制,用户编程时只需提供逻辑设备名。
这是为了实现
设备的独立性:用户在编程时使用的设备与实际设备无关。步骤

逻辑设备表(LUT)

5.2.4 SPOOLing技术(假脱机技术)

概念
SPOOLing系统主要包含三部分,即输入井输出井、输出缓冲区输出缓冲区、输入进程和输出进程。这三部分由预输入程序、井管理程序、缓输出程序管理
在SPOOLing技术中,用户进程实际分配到的是外存区,即虚拟设备
SPOOLing不会让进程阻塞,因为进程只需要往输出井里面输出数据就行,而设备(比如打印机),也不用空闲等待进程的输出,只需要从输出井里面拿数据然后输出,然后再拿下一个数据即可,这样就提高了设备的效率。
输出进程可以根据输出井中的数据流和优先级安排打印顺序,从而平衡各个进程的等待时间和响应时间,这样就提高了系统的性能。
输出进程可以减少对打印机的切换次数,从而减少系统开销,进而提高打印机的利用率
SPOOLing技术是空间换时间的技术


SPOOLing技术:“假脱机技术”,又称“SPOOLing技术”,用软件的方式模拟脱机技术。
要实现SPOOLing技术,必须要有多道程序技术的支持。系统会建立“输入进程”和“输出进程”
原理
输入井和输出井
- 在磁盘上开辟出两个存储区域一一“输入井”和“输出井”
- ”输入井”模拟脱机输入时的磁带,用于收容I/O设备输入的数据
- “输出井”模拟脱机输出时的磁带,用于收容用户进程输出的数据
输入进程和输出进程


输入缓冲区和输出缓冲区

预读和滞后写
预读(提前读):
如果采用的顺序访问方式对文件进行访问,便可预知下一次要读的盘块。此时可采用预读策略,即在读当前块的同时,也将下一个盘块提前读入内存缓冲区,这样在访问下一个盘块时就不需要再启动磁盘,从而提升磁盘I/O速度。
滞后写(延迟写)
滞后写是指缓冲区A中的数据本应立即写回磁盘,但考虑到其中的数据在不久之后有可能再次被访问,因此并不会立即把A中的数据写回磁盘,而是将缓冲区A挂到空闲缓冲区队列。如果有别的进程申请使用该缓冲区时,才把A中的数据写回磁盘。这样做的好处是,只要缓冲区A仍在队列中,任何访问该数据的进程,都可以直接读出其中的数据而不必访问磁盘。因而这种方式也可以减少磁盘I/O次数,改善性能。
共享打印机的原理分析
SPOOLing技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备。


虽然系统中只有一个台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现对打印机的共享。
5.2.5 IO操作举例
用户要求使用打印机打印文件的时候,是由操作系统的文件系统和设备管理程序实现的。
通过文件系统访问磁盘上的数据,然后通过设备管理程序来控制打印机的输出。打印机启动程序只能初始化打印机,不能直接访问磁盘上的数据




5.2.6 本节小结
1)当处理机和外部设备的速度差距较大时,有什么办法可以解决问题?
可采用缓冲技术来缓解CPU与外设速度上的矛盾,即在某个地方(一般为主存)设立一片缓冲区,外设与CPU的输入/输出都经过缓冲区,这样外设和CPU就都不用互相等待。
2)什么是设备的独立性?引入设备的独立性有什么好处?
设备独立性是指用户在编程序时使用的设备与实际设备无关。一个程序应独立于分配给它的某类设备的具体设备,即在用户程序中只指明IO使用的设备类型即可。
设备独立性有以下优点:①方便用户编程。②使程序运行不受具体机器环境的限制。③便于程序移植。
错题总结或需要多加注意的点
1.因为CPU速度比IO设备高很多,缓冲技术的缓冲区缓冲池通常在主存中建立
2.单双缓冲通信时都可以实现数据的双向传输,只是单不能在同一时刻而双可以
3.如果IO比CPU快很多,那么缓冲区就没必要设置
4.缓冲区管理者着重需要考虑的问题是实现进程访问缓冲区的同步,因为缓冲区是一种临界资源,要互斥的进行访问
5.设备分配程序为进程分配设备的过程是:先分配设备,再分配设备控制器,最后分配通道
6.单机中最重要的是CPU资源,要提高单机资源利用率优先提高CPU资源利用率。
7.SPOOLing技术主要目的是提高独占设备的利用率
8.SPOOLing技术需要内存空间和磁盘空间,不需要外围计算机支持
9.SPOOLing包含的三部分:
1.输入井输出井,由预输入程序管理
2.输入和输出缓冲区,由井管理程序管理
3.输入进程和输出进程,由缓输出程序管理
10.独享设备采用静态分配,共享设备采用动态分配
11.向设备寄存器写命令是设备驱动程序完成的
12.驱动程序仅有一部分是汇编语言编写,剩下的都是高级语言
13.对IO设备传回的数据的分析或缓冲是由操作系统或者进程完成的不是设备驱动程序
14.设备驱动程序的处理过程:
1.将抽象要求转化为具体要求
2.对服务请求进行校验
3.检查设备的状态
4.传送必要的参数
5.启动IO设备
15.SPOOLing技术是以多道程序设计技术的支持
16.更换物理设备后不用必须修改访问该设备的应用程序,而是只需要修改驱动程序即可
17.初始化设备是由驱动程序控制完成的
18.设备分配需要考虑:
1.设备的类型
2.设备的访问权限
3.设备的占用状态
4.逻辑设备与物理设备的映射关系
19.为了让多个并发进程能有效地进行输入和输出,最好采用缓冲池(其他三个是专属缓冲,而缓冲池是共享的)
| 特性 | 单缓冲 / 双缓冲 / 循环缓冲 | 缓冲池 |
|---|---|---|
| 管理方式 | 专属缓冲:通常为一个进程或一次固定的I/O操作预先分配和专用 | 共享缓冲:系统级公用资源,所有进程按需申请和释放 |
| 缓冲区数量 | 固定(1个、2个或构成循环队列的多个) | 动态管理的多个缓冲区集合 |
| 资源利用率 | 较低,缓冲区在闲置时也无法被其他进程使用 | 高,缓冲区在池中动态循环使用,避免空闲 |
| 并行性 | 适用于特定进程内的I/O与计算并行 | 支持多进程并发I/O操作,实现CPU与I/O设备更高程度的并行 |
| 适用场景 | 简单的、低速的或特定的I/O任务 | 高并发、多类型I/O的复杂系统,如数据库、网络服务器 |
- 单缓冲、双缓冲、循环缓冲就像是给特定任务分配的“专车”,简单直接,但资源利用率有限。
- 缓冲池则像一个“共享汽车平台”或“出租车队”,它统一管理所有车辆(缓冲区),哪个用户(进程)有需要就分配给谁,用完即还,实现了资源的高效共享。
20.将二进制整数转换成ASCII吗格式打印是IO库函数完成的,属于用户层软件
















