操作系统理论 第六章(输入输出系统)—第六节(用户层的I/O软件)

写在前面:

  1. 本系列笔记主要以《计算机操作系统(汤小丹...)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
  2. 视频链接:操作系统(汤小丹等第四版)_哔哩哔哩_bilibili

一、系统调用与库函数

1、系统调用

一方面,为使诸进程能有条不紊地使用I/O设备,且能保护设备的安全性,不允许运行在用户态的应用进程去直接调用运行在核心态(系统态)的OS过程;但另一方面,应用进程在运行时,又必须取得OS所提供的服务,否则应用程序几乎无法运行。为了解决此矛盾,OS在用户层中引入了一个中介过程------系统调用,应用程序可以通过它间接调用OS中的I/O过程,对I/O设备进行操作。

系统中会有许多系统调用,它们的实现方法是基本相同的。当应用程序需要执行某种I/O操作时,在应用程序中必须使用相应的系统调用当OS捕获到应用程序中的该系统调用后,便将CPU的状态从用户态转换到核心态,然后转向操作系统中相应过程,由该过程完成所需的I/O操作;执行完成后,系统又将CPU状态从核心态转换到用户态,返回到应用程序继续执行。

2、库函数

事实上,由OS向用户提供的所有功能,用户进程都必须通过系统调用来获取,或者说,系统调用是应用程序取得OS所有服务的唯一途径。在早期的操作中,系统调用是以汇编语言形式提供的,所以只有在用汇编语言编写的程序中,才能直接使用系统调用,这对用户是非常不方便的,后来在C语言中,首先提供了与系统调用相对应的库函数。

在C语言以及UNIX系统中,系统调用与各系统调用所使用的库函数之间几乎是一一对应的,用户程序通过调用对应的库函数使用系统调用,这些库函数与调用程序连接在一起,被嵌入在运行时装入内存的二进制程序中。

在C语言中提供了多种类型的库函数,对于I/O方面,主要是对文件和设备进行读写的库函数,以及控制/检查设备状态的库函数,显然这些库函数的集合也应是I/O系统的组成部分。可以这样来看待内核和库函数之间的关系:内核提供了OS的基本功能,而库函数扩展了OS内核,使用户能方便取得操作系统的服务。在许多现代OS中,系统调用本身已经采用C语言编写,并以函数形式提供,所以在使用C语言编写的用户程序中,可以直接使用这些系统调用。

另外,操作系统在用户层中还提供了一些非常有用的程序,如下面将要介绍的假脱机系统,它们是运行在内核之外的程序,但它们仍属于I/O系统。

二、假脱机(Spooling)系统

1、假脱机技术

为了缓和CPU的高速性与I/O设备低速性间的矛盾,引入了脱机输入、脱机输出技术,该技术是利用专门的外围控制机,先将低速I/O设备上的数据传送到高速磁盘上,或者相反,这样,当处理机需要输入数据时便可以直接从磁盘中读取数据,极大地提高了输入速度,反之,在处理机需要输出数据时,也可以很快的速度把数据先输出到磁盘上,处理机便可去做自己的事情。

当系统中引入了多道程序技术后,完全可以利用其中的一道程序来模拟脱机输入时的外围控制机功能,把低速I/O设备上的数据传送到高速磁盘上,再用另一道程序模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上,这样便可在主机的直接控制下实现脱机输入、输出功能,此时的外围操作与CPU对数据的处理同时进行。这种在联机情况下实现的同时外围操作的技术称为SPOOLing技术,或称为假脱机技术。

2、SPOOLing系统的组成

(1)输入井和输出井。这是在磁盘上开辟出来的两个存储区域。输入井模拟脱机输入时的磁盘,用于收容I/O设备输入的数据;输出井模拟脱机输出时的磁盘,用于收容用户程序的输出数据。

(2)输入缓冲区和输出缓冲区。这是在内存中开辟的两个缓冲区,用于缓和CPU和磁盘之间速度不匹配的矛盾。输入缓冲区用于暂存由输入设备传送的数据,之后再传送到输入井;输出缓冲区用于暂存从输出井传送的数据,之后再传送到输出设备。

(3)输入进程和输出进程。输入进程也称为预输入进程,用于模拟脱机输入时的外围控制机,将用户要求的数据从输入设备传送到输入缓冲区,再存放到输入井,当CPU需要输入设备时,直接从输入井读入内存;输出进程也称为缓输出进程,用于模拟脱机输出时的外围控制机,把用户要求输入的数据从内存传送并存放到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区输出至输出设备上。

(4)井管理程序。用于控制作业与磁盘井之间信息的交换,当作业执行过程中向某台设备发出启动输入或输出操作请求时,由操作系统调用井管理程序,由其控制从输入井读取信息或将信息输出至输出井。

3、SPOOLing系统的特点

(1)提高了I/O的速度。这里对数据所执行的I/O操作,已从对低速I/O设备执行的I/O操作演变为对磁盘缓冲区中数据的存取,如同脱机输入输出一样,提高了I/O速度,缓和了CPU与低速I/O设备之间速度不匹配的矛盾。

(2)将独占设备改造为共享设备。因为在假脱机打印机系统中,实际上并没为任何进程分配设备,而只是在磁盘缓冲区中为进程分配一个空闲盘块和建立一张I/O请求表,这样,便把独占设备改造为共享设备。

(3)实现了虚拟设备功能。宏观上,虽然是多个进程在同时使用一台独占设备,而对于每一个进程而言,它们都会认为自己是独占了一个设备。

4、假脱机打印机系统

打印机是独占设备,利用SPOOLing技术将其改造成共享设备。

每当用户进程发出打印输出请求时,假脱机打印机系统并不是立即把打印机分配给该用户进程,而是由假脱机管理进程完成两项工作:

①在磁盘缓冲区中为之申请一个空闲盘块,并将要打印的数据送入其中暂存。

②为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中,再将该表挂到假脱机文件队列上。

真正的打印输出是假脱机打印进程负责的,当打印机空闲时,该进程首先从假脱机文件队列的队首摘取一张请求打印表,然后根据表中的要求将要打印的数据由输出并传送到内存缓冲区,再交付打印机进行打印。一个打印任务完成后,假脱机打印进程将再次查看假脱机文件队列,若队列非空,则重复上述的工作,直至队列为空,此后,假脱机打印进程将自己阻塞起来,仅当再次有打印请求时,才被重新唤醒运行。

相关推荐
qq_437896435 小时前
动态内存分配算法对比:最先适应、最优适应、最坏适应与邻近适应
操作系统
别说我什么都不会5 小时前
鸿蒙轻内核M核源码分析系列十一 (2)信号量Semaphore
操作系统·harmonyos
别说我什么都不会12 小时前
鸿蒙轻内核M核源码分析系列十 软件定时器Swtmr
操作系统·harmonyos
别说我什么都不会1 天前
鸿蒙轻内核M核源码分析系列九 互斥锁Mutex
操作系统·harmonyos
别说我什么都不会1 天前
鸿蒙轻内核M核源码分析系列七 动态内存Dynamic Memory
操作系统·harmonyos
别说我什么都不会2 天前
鸿蒙轻内核M核源码分析系列六 任务及任务调度(3)任务调度模块
操作系统·harmonyos
徐徐同学2 天前
【操作系统】操作系统概述
操作系统·计算机系统
守望时空333 天前
Linux内核升级指南
linux·操作系统
塞尔维亚大汉3 天前
OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【用户态内存调测】
操作系统·harmonyos
别说我什么都不会3 天前
鸿蒙轻内核M核源码分析系列五 时间管理
操作系统·harmonyos