用户层的 I/O 软件
目录
参考资料:
一般而言,大部分的 I/O 软件都放在操作系统内部,但仍有一小部分在用户层,其中包括与用户程序链接在一起的库函数,以及完全运行于内核之外的假脱机系统等。
1 系统调用与库函数
1.1 什么是系统调用?
系统为保护设备的安全性,不允许运行在用户态的进程直接调用运行在核心态的 OS 过程,而是在用户层中引入了一个中介过程一一系统调用,应用程序可以通过它间接的调用 OS 中的 I/O 过程,对 I/O 设备进行操作。
事实上,由 OS 向用户提供的所有功能,用户进程都必须通过系统调用来获取。系统调用是应用程序取得 OS 所有服务的唯一途径。
1.2 什么是库函数?
内核和库函数之间的关系:内核提供了 OS 的基本能,而库函数扩展了 OS 内核,使用户能方便取得操作系统的服务。
库函数是开放给用户使用的 API,通过 API 可以直接访问 OS 内核
在许多现代 OS 中,系统调用本身已经采用 C 语言编写,并以函数形式提供,所以在使用 C 语言编写的用户程序中,可以直接使用这些系统调用。
早期都使用汇编语言
2 假脱机(Spooling)系统
通过多道程序技术可将一台物理 CPU 虚拟为多台逻辑 CPU,从而允许多个用户共享一台主机。
虚拟技术
通过假脱机技术,则可将一台物理 I/O 设备虚拟为多台逻辑 I/O 设备,这样也就允许多个用户共享一台物理 I/O 设备。
I/O设备,包括磁盘、打印机、显示器等,都是可以假脱机的
2.1 什么是假脱机技术?
当系统中引入了多道程序技术后,利用其中一道程序,模拟脱机输入时的外围控制机功能,把低速 I/O 设备上的数据传送到高速磁盘上。再用另一道程序模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上。这样,便可在主机的直接控制下,实现以前的脱机输入、输出功能。
同时启动多个进程对 I/O 设备进行操作
此时的外围操作与 CPU 对数据的处理同时进行,我们把这种技术称为假脱机技术。SPOOLing(Simultaneaus PeriphernalOperating OnLine)
2.2 假脱机系统的工作原理
假脱机技术是对脱机输入/输出系统的模拟,它建立在通道技术和多道程序技术的基础上。
2.3 假脱机系统的组成
- 输入井和输出井
这是在磁盘上开辟出来的两个存储区域。输入井模拟脱机输入时的磁盘,用于收容 I/O 设备输入的数据。输出井模拟脱机输出时的磁盘,用于收容用户程序的输出数据。输入/输出井中的数据一般以文件的形式组织管理,我们把这些文件称为井文件。一个文件仅存放一个进程的输入或输出数据,所有进程的数据输入或输出文件链接成为一个输入或输出队列。
- 输入缓冲区和输出缓冲区
这是在内存中开辟的两个缓冲区,用于缓和 CPU 和磁盘之间速度不匹配的矛盾。输入缓冲区用于暂存由输入设备传送的数据,之后再传送到输入井。输出缓冲区用于暂存从输出井传送的数据,之后再传送到输出设备。
- 输入进程和输出进程
输入进程用于模拟脱机输入时的外围控制机,将用户要求的数据从输入设备传送到输入缓冲区,再存放到输入井。当 CPU 需要输入设备时,直接从输入井读入内存。输出进程用于模拟脱机输出时的外围控制机,把用户要求输入的数据从内存传送并存放到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区输出至输出设备上。
- 井管理程序
用于控制作业与磁盘井之间信息的交换。当作业执行过程中向设备发出启动输入或输出操作请求时,由操作系统调用井管理程序,由其控制从输入井读取信息或将信息输出至输出井。
2.4 使用守护进程(daemon)
思想:事实上,凡是需要将独占设备改造为可供多个进程共享的设备时,都要为该设备配置一个守护进程和一个假脱机文件队列(目录)。
如打印机守护进程、服务器守护进程、网络守护进程等。
同样,守护进程是允许使用该独设备的唯一进程,所有其它进程都不能直接使用该设备,只能将对该设备的使用要求写入一份文件中,放在假脱机目录中。由守护进程按照目录中的文件依次来完成诸进程对该设备的请求,这样就把一台独占设备改造为可为多个进程共享的设备。