I/O系统层次结构与功能实现,足够详细了

I/O系统层次结构与功能实现

  • 层次结构图
    • 功能介绍
    • 请求与访问顺序
    • 层次功能实现
    • 假脱机技术
    • 设备的分配与回收
      • 设备分配管理中的数据结构:
      • 设备分配的步骤
      • 缺点
    • 缓冲区管理
      • 单缓冲与双缓冲
      • 缓冲池

层次结构图

I/O系统层次结构与功能实现,足够详细了_第1张图片

功能介绍

用户层软件:用于实现用户与I/O设备交互;
设备独立性软件:用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护,以及设备分配与释放等;
设备驱动程序:与硬件直接有关,用来具体实现系统对设备发出的操作指令,驱动I/O设备工作;
中断处理程序:用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完后恢复现场,并返回到被中断的进程;
硬件:I/O设备。

请求与访问顺序

I/O请求:用户层软件–>设备独立性软件–>设备驱动程序–>中断处理程序–>硬件
I/O应答:硬件–>中断处理程序–>设备驱动程序–>设备独立性软件–>用户层软件

层次功能实现

用户层软件:假脱机技术
设备独立性软件:I/O调度,设备保护,设备分配与回收,缓冲区管理

假脱机技术

SPOOLING系统 是对脱机输入/输出工作的模拟,它必须有大容量的且可随机存取的存储器
的支持。
主要思想:在联机的条件下,进行两个方向的操作,在数据输入时,将数据从输入设备传送到磁盘或磁带(块设备),然后把这些块设备与主机相连;反过来,在数据输出时,将输出数据传送到磁盘或磁带上,再从磁盘或磁带传送到输出设备。这样,可以将一台独占的物理设备虚拟为并行使用的多态逻辑设备,从而使该物理设备被多个进程共享。
I/O系统层次结构与功能实现,足够详细了_第2张图片

设备的分配与回收

设备分配时应考虑的因素:

  1. 设备的固有属性
    设备的固有属性可分为三种:独占式设备、共享式设备、虚拟设备。
    独占式设备:一个时间段只能分配给一个进程
    共享式设备:可同时分配给多个进程使用,各个进程往往是宏观上同时共享使用设备,微观上交替使用。
    虚拟设备:采用假脱机技术将独占式设备改造成虚拟共享设备,可同时分配给多个进程使用。
  2. 设备的分配算法
    先来先服务算法、短作业优先算法,优先级高优先算法等。
  3. 设备分配中的安全性
    从进程运行的安全性上考虑,设备分配有两种方式:
    安全分配方式:为进程分配一个设备后就将进程阻塞,本次IO完成后才将这个进程唤醒。这种方式是安全的破坏了“请求和保持条件”,不会发生死锁。但是对于进程来说,CPU和IO设备只能串行工作。
    不安全分配方式:进程发出IO请求后,系统为其分配IO设备,进程可以继续执行,之后还可以发出新的IO请求。只有某个IO请求得不到满足的情况下才将进程阻塞。
    静态分配与动态分配:
    静态分配:进程运行前,为其分配全部所需资源,运行结束后归还资源。
    动态分配:进程运行过程中,动态的申请设备资源。

设备分配管理中的数据结构:

设备与控制器通道之间的关系:一个通道可以有多个控制器,一个控制器又能控制多台 设备。所以他们三者之间是一对多的关系,也就可以用树状结构来描述。

  1. 设备控制表(DCT)
    统会为每个设备配置一个设备控制表(DCT),用来记录设备情况。
    这个设备控制表中包含有一下字段:设备类型(扫描仪/键盘),设备标识符(系统中每个设备的唯一ID),设备状态,指向控制表的指针(因为每个设备都有对应的控制器控制,所以这个指针就是用来指向控制它的控制器),重复执行次数或时间(当IO操作多次仍然不成功,才认为此次IO失败),设备队列的队首指针(这个指针指向一个队列,这个队列里面是PCB,这些PCB是正在等待该设备的)

  2. 控制器控制表(COCT)
    每个设备控制器都会对应一张COCT。
    控制器控制表中的属性有:控制器标识符(各个控制器的唯一ID),控制器状态(忙碌,空闲,故障),指向通道的指针(每个控制器都有对应的通道,该指针用来找到对应的通道),控制器队列的队首指针,控制器队列的队尾指针(指向正在等待该控制器的阻塞队列(由PCB组成的队列))

  3. 通道控制表(CHCT)
    每个通道都会对应一张CHCT。操作系统根据CHCT信息对通道进行操作和管理。
    通道控制表中含有的属性:
    通道标识符:各个通道的唯一ID
    通道状态
    与通道连接的控制器表首地址
    通道队列队首指针,通道队列队尾指针

  4. 系统设备表(SDT)
    记录系统中全部设备的情况,每个设备对应一个表目录。

设备分配的步骤

  1. 按照进程请求的物理设备名查找SDT
  2. 根据系统设备表找到DCT(设备控制表),若设备忙碌则将进程挂到设备等待队列中,不忙碌则将设备分配给进程。
  3. 根据设备控制表找到COCT(控制器控制表),若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。
  4. 根据COCT找到CHCT(通道控制表),若通道忙碌则将PCB挂到通达等待队列中,不忙碌则将通道分配给进程。
  5. 备注:只有设备。控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可以启动IO设备进行数据传送

缺点

缓冲区管理

  1. 用户编程时必须使用物理设备名,底层细节对用户不透明,不方便编程
  2. 若换了一个物理设备,则程序无法执行
  3. 若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待缓冲的引入
      引入缓冲区的原因有很多,可归结为以下几点:
      (1) 缓和CPU与I/O设备间速度不匹配的矛盾。
      (2) 减少对CPU的中断频率,放宽对CPU中断响应时间的限制。
      (3) 解决数据粒度不匹配的问题。
      (4) 提高CPU和I/O设备之间的并行性。

单缓冲与双缓冲

  1. 单缓冲
    过程:设备)—T----缓冲区—(M)—工作区----(C)—处理
    处理一块数据平均耗时 Max(C,T)+M
    分析问题的初始状态:工作区满,缓冲区空
  2. 双缓冲
    过程:设备)—T----缓冲区—(M)—工作区----(C)—处理
    处理一块数据平均耗时 Max(T,C+M)
    分析问题的初始状态:工作区空,缓冲区满,另一个缓冲区空

缓冲池

三个队列:空缓冲队列,输入队列,输出队列。
四种工作缓冲区

  1. 用于收容输入数据的工作缓冲区
  2. 用于提取输入数据的工作缓冲区
  3. 用于收容输出数据的工作缓冲区
  4. 用于提取输入数据的工作缓冲区
    I/O系统层次结构与功能实现,足够详细了_第3张图片

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