第五章 输入输出系统 5.6 用户层的I/O软件

发布时间 2023-05-06 20:20:36作者: 一只朋克小狗

一、系统调用与库函数

大部分I/O软件都在操作系统内部,只有一小部分在用户层,包括与用户程序链接在一起的库函数,以及完全运行于内核以外的假脱机系统等。

二、假脱机技术(SPOOLing)

  1.虚拟性是OS的四大特征之一

    多道程序技术将一台物理CPU虚拟为多台逻辑CPU,从而允许多个用户共享一台主机 ;

    SPOOLing技术将一台物理I/O设备虚拟为多台逻辑I/O设备,同样允许多个用户共享一台物理I/O设备。

  2.假脱机技术

    ①SPOOLing技术是对脱机输入/输出系统的模拟,在主机的直接控制下,实现脱机输入输出功能:

  • 利用一道程序模拟脱机输入时的外围控制机功能,把低速外设上的数据传送到高速磁盘上;
  • 利用另一道程序模拟脱机输出时的外围控制机功能,把数据传送到低速外设上。

    ②SPOOLing系统的组成  

  • 输入井和输出井(在磁盘上的两个存储空间):输入井模拟脱机输入,暂存输入数据;输出井模拟脱机输出,暂存输出数据
  • 输入缓冲区和输出缓冲区(内存中) :用来缓和CPU与磁盘之间的速度的矛盾 
  • 输入进程SPi和输出进程SPo :模拟脱机I/O时的外围控制机
  • 井管理程序:用来控制作业与磁盘井之间的信息交换 

  3.SPOOLing系统的处理过程 

    ①输入:

    应用进程n请求—> SPi为进程n在输入井中分配空间—>备数据由输入缓冲区输入井 —>生成输入请求表挂输入请求队列 —>当CPU空闲时,取请求表中的任务,送进程缓冲区

对外设来说,将数据送到输入井即完成输入任务,实际上数据此时还未到请求数据的进程的缓冲区。    

②输出:(打印)

    应用进程n请求 —>SPo为进程n在输出井中分配空间 —>将数据由进程缓冲区转到输出井 —>生成一打印请求表挂打印请求队列 —>当打印机空闲时,查打印请求表中的任务 —> 取输出井中对应的数据 —>输出缓冲区—>打印 

对用户进程来说,打印请求表挂在打印请求队列上后,其打印请求即得到满足,虽然此时没有进行任何实际的打印输出。