OS-5.1 I/O核心子系统
==IO==核心子系统

用户层软件
假脱机技术Spooling

脱机技术
批处理阶段引入了脱机技术(用磁带完成)

==假脱机技术==(SPOOLing技术)
==以高速磁盘为缓冲,用软件模拟脱机技术。==
需要使用磁盘空间(输入井和输出井),内存空间(输入和输出缓冲区)。
不需要外围计算机的支持!
==“假”==:以多道程序技术和磁盘空间替代外围机。【以空间换时间】
将一台物理独占设备,**==虚拟成多台逻辑设备==,实现设备共享**。

具体应用:假脱机技术实现共享打印机
把一台物理设备 虚拟成逻辑上的多台设备。


回顾

设备独立性软件
IO调度
用某种算法确定一个好的顺序来处理各个IO请求。

设备保护
把设备看成一种特殊的文件。

回顾

设备的分配与回收

设备分配时应考虑的因素
- 设备的固有属性:独占设备,共享设备,虚拟设备。
- 设备分配算法(常用):先来先服务。最高优先级优先。
- 设备分配中的安全性:
- ①安全分配方式:进程分配给一个设备后,就将进程阻塞,本次IO完成后才将进程唤醒。【不会有死锁,此时CPU和IO设备只能串行工作】
- ②不安全分配方式:进程分配给一个设备后,进程可继续执行,之后还可以发出新的IO请求。只有某一个IO请求得不到满足才将进程阻塞。【可能有死锁,不过进程的计算任务和IO任务可以并行处理】
- 设备分配方式:
- 静态分配:进程运行前就为其分配全部所需资源,运行结束后归还资源。【破坏了“请求和保存”条件,不会发送死锁】
- 动态分配: 进程运行过程中动态申请设备资源。
设备分配管理中的数据结构

设备控制表(DCT)
系统为每个设备都配置一张DCT,用于记录设备使用情况

控制器控制表(COCT)
每个设备都对应一张COCT。OS根据COCT的信息对控制器进行操作和管理。

通道控制表(CHCT)
每个通道都对应一张CHCT。OS根据CHCT的信息对通道进行操作和管理。

系统设备表(SDT)
记录系统中全部设备的情况,每个设备对于一个表目。

设备分配的具体步骤
- 分配设备 → 分配控制器 → 分配通道。

设备分配步骤的改进
建立逻辑设备名与物理设备名的映射机制,==用户编程只需提供逻辑设备名。==


逻辑设备表LUT

回顾

缓冲区管理

缓冲区
==一般在内存中开辟缓冲区==。(硬件做缓冲区成本高,容量小)
(缓冲区根本上是一种临界资源,所以也要考虑进程访问缓冲区的同步问题的)
缓冲区 VS 高速缓存
高速缓存:for提高重复访问的效率。
缓冲区:for提高数据传输的效率和并行性。
Q:单用户计算机上的操作,需要使用缓冲技术的是ABCD
A:图形界面下使用鼠标
B:多任务操作系统下的磁盘驱动器
C:包含用户文件的磁盘驱动器
D:使用存储器映射IO,直接和总线相连的图形卡
缓冲区的作用
- ①缓和CPU和IO设备之间速度不匹配的矛盾(IO比CPU慢太多了!)
- ②减少对CPU的中断频率,放宽对CPU中断相应时间的限制
- ③解决数据粒度不匹配的问题(如输出进程每次可以生成一块数据,但是IO设备每次只能输出一个字符)
- ④提高CPU和IO设备之间的并行性

==缓冲区一个小特点==:

单缓冲
IF用户进程请求某种块设备读入若干块的数据,若采用单缓冲的策略:
OS在主存为其分配一个缓冲区(缓冲区大小等于一个块)
CPU处理一块数据时间C,数据从缓冲区送到用户工作区的时间M,IO设备将一块数据送到缓冲区时间T。
==结论:单缓冲处理每块数据所需时间是 Max(T,C)+ M==




双缓冲
假设用户进程请求某种块设备读入若干块的数据,采用双缓冲的策略。
OS在主存分配两个缓冲区
==结论:双缓冲处理每块数据所需时间是 Max(T,C+M)==
Note:如果是少数个数据块(不是多数取均值),时间得自己画图,会有出入的!


单 / 双缓冲在通信时的区别


(实现双工通信)
循环缓冲
将多个大小相等的缓冲区链接成一个循环队列

缓冲池
由一系列缓冲区组成。
支持多进程==共享使用==。




回顾

IO操作实例

中断服务历程执行结束后,所输入的数据的存放位置是:**==内核缓冲区==** 【前者由设备驱动程序完成】
当系统调用结束时,所输入的数据才被送到:**==用户缓冲区==** 【后者由与设备无关的IO软件层完成】
Other
单机系统中,最关键的是CPU资源,而不是内存和IO设备的问题
- 所以提高单机资源利用率最关键是:多道程序设计技术。而不是SPOOLing技术。

