IO软件层结构
| 层名 | 解释 |
|---|---|
| 用户层软件 | 大部分IO软件包含在操作系统中、仍然一部分是由与用户程序链接在一起的库函数甚至运行于内核之外的程序构成的通常的系统调用包括IO系统调用是由库函数实现的。 |
| 设备独立性软件 | 应实现的功能包括设备驱动程序的统一接口、设备命名、设备保护、提供与设备无关的逻辑块、缓冲存储设备的块分配、独占设备逻辑虚拟化的分配和回收、差错控制,缓冲等。I/O重定向:指用于IO操作的设备可以更换,而不必改变应用程序。例如,我们在调试一个应用程序时,可将程序的所有输出送往屏幕显示;而在程序调试完后,如需正式将程序的运行结果打印出来,此时便需将I/O重定向的数据结构LUT中的显示终端改为打印机,而不必修改应用程序。 |
| 设备驱动程序 | 常以进程的形式存在。IO进程与设备控制器之间的通信程序。其主要任务是接收上层软件发来的抽象IO要求,如read或write命令,转换为具体要求后发送给设备控制器,启动设备去执行;此外,它也将从设备控制器发来的信号传送给上层软件。每一类设备配置一种驱动程序,也可为非常类似的两类设备配置一个驱动程序。 |
| 中断系统 | 最底层,也可以不认为是软件层 |
设备的逻辑和分配
当进程以物理设备名称请求使用,如果该设备已分配或正在检修,而此时其它的相同设备正在空闲,该进程却仍阻塞。但若进程以逻辑设备名称来请求,系统可立即将该类设备中的任一台分配给进程,仅当所有此类设备已全部分配完毕时,进程才会阻塞。
独享分配:进程完成释放后才能再分配
静态分配方式:临界资源的安全分配
动态分配方式:临界资源的安全分配,可能造成死锁
共享分配:同时分配给多个进程使用,提高利用率,需要合理调度
虚拟分配:虚拟技术让一个独占设备在逻辑上成为了共享设备,如打印机
在主存中维护的一些数据结构:
设备控制表
DCT:记录设备状态和设备控制器连接情况设备控制器控制表
COCT:记录控制器使用状态和通道连接情况通道控制表
CHCT:反应通道状态系统设备表
SDT:系统只有一张SDT,记录已连接所有物理设备的情况,每个表目包括设备类型,设备课表支付、DCT指针,驱动程序入口等。
Buffer
可以解除传输两者的制约关系,缓和CPU与设备之间速度不匹配的矛盾,提高了设备和CPU的并行操作程度,提高了设备利用率和系统吞吐量。降低和设备对CPU的中断频率。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区 。 设备和处理器对buffer的操作是串行的。
不同缓冲区个数:单缓冲,双缓冲,循环缓冲,缓冲池
全缓冲:只有在缓冲区被填满之后才会进行IO操作;最典型的全缓冲就是对磁盘文件的读写。
行缓冲:只有在输入或者是输出中遇到换行符的时候才会进行I/O操作;这忠允许我们一次写一个字符,但是只有在写完一行之后才做I/O操作。一般来说,标准输入流(stdin)和标准输出流(stdout)是行缓冲。
无缓冲:标准I/O不缓存字符;其中表现最明显的就是标准错误输出流(stderr),这使得出错信息尽快的返回给用户。
对缓冲区操作的函数:printf、puts、putchar(标准输出函数)、scanf、gets、getchar(标准输入函数)、fopen、fwrite、fread、fseek(IO_FILE)、fflush(清除缓冲区中的内容)
SPooling
同时外设联机操作,(假脱机输入、输出操作)。是一种低速IO设备与主机交换的一种技术,核心思想是联机的方式得到脱机的效果,
组成:输入井和输出井、输入缓冲区和输出缓冲区、输入进程和输出进程、井管理程序