假脱机技术(SPOOLing)是什么?

671 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第34天,点击查看活动详情

假脱机技术(SPOOLing)

  • 脱机

    • 脱离主机的控制进行输入输出
    • 缓解了设备与CPU的速度矛盾,实现预输入,缓输出

    image-20220831223011034

  • 假脱机

    • 由软件来模拟实现脱机技术
    • 需要多道程序技术支持
  • 组成

    image-20220831223027957

    • 输入井、输出井(磁盘)

      • 模拟磁带,收容IO设备输入的/用户输出的数据
    • 输入进程、输出进程

      • 由操作系统控制,对用户透明,模拟外围控制机
    • 输入缓冲区、输出缓冲区(内存)

      • 中转站
  • 管理程序

    • 预输入程序
    • 井管理程序
    • 缓输出程序
  • 数据流向

    • 输入数据

      • 输入设备-输入缓存区-输入井
      • 设备-内存-磁盘
    • 输出数据

      • 输出井-输出缓冲区-输出设备
      • 磁盘-内存-设备
  • 应用:共享打印机的实现

    • 宏观上允许多个进程使用

    • 将独占式设备改造为共享设备

      • 独占设备:只允许各个进程串行使用,一段时间满足一个设备
      • 共享设备:允许多个进程同时使用设备(宏观上同时,微观上交替)

      image-20220831223107518

      • 当多个用户进程提出输出打印的请求时,系统会答应它们的请求,但是并不是真正把打印机分配给他们,而是由假脱机管理进程为每个进程做两件事: (1)在磁盘输出井中为进程申请一个空闲缓冲区(也就是说,这个缓冲区是在磁盘上的),并将要打印的数据送入其中; (2)为用户进程申请一张空白的打印请求表,并将用户的打印请求填入表中(其实就是用来说明用户的打印数据存放位置等信息的),再将该表挂到假脱机文件队列上。
      • 当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到输出缓冲区,再输出到打印机进行打印。用这种方式可依次处理完全部的打印任务
      • 虽然系统中只有一个台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现对打印机的共享。
      • SPOOLing 技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备。