【操作系统】IO核心子系统原理讲解

1. 前言

上篇文章了解了操作系统IO软件层次结构。本篇文章将继续深入,了解这些IO软件的实现方式。

在这里插入图片描述

2. 假脱机技术(SPOOLing技术)

要明白脱机技术,首先要了解什么是联机技术。在最开始的计算机中,程序员要先手动完成输入后,再由CPU开始进行运算,这就是联机技术的思路。

而脱机技术是程序员先手动通过外围机进行输入,外围机再将输入内容发送至磁带中供CPU运算使用。由于磁带的读取速度明显由于手工输入,使得效率得到了提升。

在这里插入图片描述

假脱机技术也是使用了这个思想,输入输出设备通过输入/出进程,先将数据存储在内存中,而后再传输至磁盘的输入/出井中,交由CPU完成运算。

在这里插入图片描述

3. 设备分配与回收

3.1 设备分配应考虑的因素

针对不同设备,在不同情况下可能需要考虑多种因素。比如:固有属性(独占?共享?)、分配算法(调度算法等)、安全性(何时阻塞?)。

3.2 静态分配与动态分配

静态分配与动态分配的区别主要在于进程运行前是分配所有资源,还是运行中动态的申请资源。

3.3 设备管理中的数据结构

操作系统中存在一些了IO相关的表来进行IO设备管理。具体结构如下:

在这里插入图片描述
通道设备在计算机中数量不多,为了充分的利用通道,通常多个IO设备可以共享通道。如果对通道不了解,可以前往IO管理方式

3.4 设备分配步骤

结合上图:设备管理中的数据结构,设备分配步骤大致有以下几步:

  • 根据物理设备名查SDT;(由于进程不一定知道物理设备名,因此针对这个问题,通常会通过逻辑设备名来查询SDT)
  • 查DCT,尝试分配给进程;
  • 查COCT,尝试分配给进程;
  • 查CHCT,尝试分配给进程;

3.5 设备的回收步骤

所谓的设备回收步骤,其实就是设备分配步骤的逆操作,逐步释放资源。

4. 缓冲区管理

为了缓解CPU和I/O设备间速度不匹配的矛盾,建立了临时的存储区域,即缓冲区。缓冲区的优势有以下几点:

  • 缓和CPU和I/O设备速度不匹配的矛盾;
  • 减少CPU中断的频率,放款对CPU相应时间的限制;
  • 解决数据粒度不匹配的问题;
  • 提高CPU与I/O设备的并行性;

根据缓冲区的数量,可以分为:单缓冲、双缓冲、循环缓冲、缓冲池。

4.1 单缓冲

顾名思义,单缓冲就是只有一个缓冲区,且该缓冲区的大小为一个盘块的大小。其具有以下两个特点(包括其他几种缓冲类型都具有这个特点!!!):

  • 非空不写(如果缓冲区不是空的,那么不会将数据冲入缓冲区);
  • 未满不读(如果缓冲区没有刷满数据,则不读取);

在这里插入图片描述

4.2 双缓冲

双缓冲具有两个缓冲区。由于单缓冲区的情况下当缓冲区未满时需要等待其刷满才能进行处理,导致CPU的等待,因此在双缓冲区的模式下,当一个缓冲区刷满后CPU开始处理,同时第二个缓冲区也已经开始刷入数据,可以交替进行,减少了CPU的等待时间,提高了效率。

在这里插入图片描述

4.3 循环缓冲

循环缓冲进一步增加了缓冲区的数量,将一组缓冲区首位链接起来。

循环缓冲增加了两个指针:

  • in指针:指向下一个可以冲入数据的空缓冲区;
  • out指针:指向下一个可以取出数据的满缓冲区;

在这里插入图片描述

4.4 缓冲池

利用池化的思想,根据缓冲区的不同状态进行分组,每组通过队列来进行保存。缓冲区具有下面几种状态:

  • 空缓冲:还未刷入数据;
  • 满缓冲:已经刷满数据;
    • 满输入缓冲:刷入的数据用于输入;
    • 满输出缓冲:刷入的数据用于输出;

因此缓冲队列便对应以下几种:

在这里插入图片描述

无论是输入刷入数据到缓冲区还是输出数据到缓冲区,都要从空队列的对位获取空缓冲区;
当用户进程向IO设备进行输出时,从空队列获取空缓冲区并刷入数据,刷满后添加到输出队列;
当IO设备向用户进程进行输入时,从空队列获取空缓冲区并刷入数据,刷满后添加到输入队列;


专栏推荐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Honey Ro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值