Spooling的原理

脱机技术

程序猿先用纸带机把自己的程序数据输入到磁带中,这个输入的过程是由一台专门的外围控制机实现的。之后CPU直接从快速的磁带中读取想要的这些输入数据。输出也类似。

假脱机技术(Spooling技术)

即用软件的方式来模拟脱机技术。要实现Splooling技术必须要有多道程序技术的支持,系统会建立“输入进程”和“输出进程”
Spooling的原理_第1张图片

  • 输入井:模拟脱机输入时的磁带,用于收容I/O设备输入的数据
  • 输出井:模拟脱机输出时的磁带,用于收容用户进程输出的数据
  • 输入进程:用软件的方式模拟脱机输入时的外围控制机(将要输入的数据放到磁盘中模拟输入磁带的输入井中)
  • 输出进程:用软件的方式模拟脱机输出时的外围控制机(从磁盘中模拟输出磁带的输出井取出数据输出到设备上)
  • 输入缓冲区:在输入进程的控制下,输入缓冲区用于暂存从输入设备输入的数据,之后再转存到输入井中
  • 输出缓冲区:在输出进程的控制下,输出缓冲区用于暂存从输出井送来的数据,之后再传送到输出设备上

举个例子:共享打印机

Spooling的原理_第2张图片

当多个用户进程提出输出打印的请求时,系统会答应它们的请求,但并不是真正把打印机分配给它们,而是由假脱机管理进程为每个进程做两件事:

  1. 在磁盘的输出井中为进程申请一个空闲缓冲区,并将要打印的数据送入其中
  2. 为用户进程申请一张空白的打印请求表,并将用户的打印请求填入表中(其实就是用来说明用户的打印数据存放位置等信息的),再将该表挂到假脱机文件队列上

当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到输出缓冲区,再输出到打印机进行打印。

因为每个进程提出打印请求时,系统都会在输出井中为其分配一个存储区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现对打印机的共享

采用Spooling技术的计算机系统,其实并不需要外围控制机,因为它实际上是建立输入进程来模拟脱机输入时的外围控制机,建立输出进程来模拟脱机输出时的外围控制机的。并不是物理上的外围控制机,而是用软件模拟实现的

你可能感兴趣的:(操作系统,操作系统)