操作系统——输入/输出(I/O)管理

一、I/O设备概述

I/O设备

“I/O”就是“输入/输出”( Input/Output)。l/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。

l/O设备的机械部件主要用来执行具体l/O操作。如我们看得见摸得着的鼠标/键盘的按钮,显示器的LED屏,移动硬盘的磁臂、磁盘盘面。

l/O设备的电子部件通常是一块插入主板扩充槽的印刷电路板。

按使用特性分类

人机交互类外部设备 :鼠标、键盘、打印机等,用于人机交互。数据传输速度慢。

存储设备 : 移动硬盘、光盘等,用于数据存储。数据传输速度快。

网络通信设备 : 网络通信设备:调制解调器等,用于网络通信。数据传输速度介于上述二者之间。

按传输速率分类

低速设备 : 鼠标、键盘等,传输速率为每秒几个到几百字节。

中速设备 : 如激光打印机等,传输速率为每秒数千至上万个字节。

高速设备 : 如磁盘等,传输速率为每秒数千字节至千兆字节的设备。

按信息交换的单位分类

块设备 : 如磁盘等,数据传输的基本单位是“块”,传输速率较高,可寻址,即对它可随机地读/写任一块。

字符设备 : 鼠标、键盘等,数据传输的基本单位是字符。传输速率较慢,不可寻址,在输入/输出时常采用中断驱动方式

I/O控制方式

I/O控制器

在这里插入图片描述
在这里插入图片描述

一个I/O控制器可能会对应多个设备

数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O。另一些计算机则采用I/O专用地址,即寄存器独立编址。

在这里插入图片描述

程序直接控制方式

在这里插入图片描述
中断驱动方式

引入中断机制。由于I/O设备速度很慢,因此在CPu发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。当I/O完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。

处理中断的过程中,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存。接着,CPU恢复等待进程的运行环境,然后继续执行。

注意:CPU会在每个指令周期的末尾检查中断
中断处理过程中需要保存、恢复进程的运行环境,这个过程是需要一定时间开销的。中断过多也会降低系统开销。

在这里插入图片描述

DMA方式

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
通道控制方式

在这里插入图片描述
在这里插入图片描述

I/O子系统的层次结构

用户层I/O软件

用户层软件实现了与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作。(比如:printf(“hello, world!”);)

用户层软件将用户请求翻译成格式化的I/O请求,并通过系统调用请求操作系统内核的服务。

printf(“hello, world!”);会被翻译成等价的write系统调用,当然,用户层软件也会在系统调用时填入相应参数。

设备独立性软件

设备独立性软件,又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现

主要实现功能:

  • 向上层提供统一的调用接口(如read,write系统调用)
  • 设备保护,原理类似与文件保护。设备被看做是一种特殊的文件,对设备的访问权限也不一样。
  • 差错控制,设备独立性软件需要对一些设备的错误进行处理
  • 设备的分配与回收
  • 数据缓冲区管理,可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异
  • 建立逻辑设备名到物理设备名的映射关系

需要通过逻辑设备表(LUT,Logical UnitTable)来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序。

在这里插入图片描述

设备驱动软件

主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化成特定设备“能听得懂”的一系列操作。包括设置设备寄存器,检查设备状态等。

不同的I/O设备有不同的硬件特性,具体细节只有设备的厂家才知道。因此厂家需要根据设备的硬件特性设计并提供相应的驱动程序。

驱动软件一般以独立的进程存在。

中断处理软件

在这里插入图片描述
总览
在这里插入图片描述
在这里插入图片描述

二、 I/O核心子系统

高速缓存与缓冲区

概念

缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。

使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本)。

一般情况下,更多的是利用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区。

在这里插入图片描述
单缓冲

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
双缓冲

在这里插入图片描述
在这里插入图片描述采用双缓冲策略,处理一个数据块的平均耗时为Max(T,C+M)

使用单/双缓存在通信时的区别

在这里插入图片描述

在这里插入图片描述
循环缓冲区

在这里插入图片描述

缓冲池

在这里插入图片描述
在这里插入图片描述

从空缓冲队列中取出块作为收容输入数据的工作缓冲区(hin) 。冲满数据后将缓冲区挂到输入队列队尾。

从输入队列中取得一块冲满输入数据的缓冲区作为思取入数据的工作缓冲区(sin)。缓冲区读空后挂到空缓冲区队列。

从空缓冲队列中取出一块作为收容输出数据的工作缓冲区(hout)。数据冲满后将缓冲区挂到输出队列队尾。

从输出队列中取得一块冲两输出数据的缓冲区作为提取输出数据的工作缓冲区(sout)。缓冲区读空后挂到空缓冲区队列。

设备的分配与回收

概述

独占式设备 : 只允许各个进程串行使用的设备。一段时间内只能满足一个进程的请求。

共享设备 : 允许多个进程“同时”使用的设备(宏观上同时使用,微观上可能是交替使用)。可以同时满足多个进程的使用请求。

以SPOOLing方式使用外部设备 :SPOOLing技术即假脱机I/O设备。将独占式设备改造为虚拟的共享设备。

设备分配的安全性

安全分配方式 : 为进程分配一个设备后就将进程阻塞,本次l/O完成后才将进程唤醒。

一个时段内每个进程只能使用一个设备
优点 : 破坏了“请求和保持”条件,不会死锁
缺点 : 对于一个进程来说,CPU和I/O设备只能串行工作

不安全分配方式:进程发出I/O请求后,系统为其分配设备,进程可继续执行,之后还可以发出新的I/O请求。只有某个I/O请求得不到满足时才将进程阻塞。

一个进程可以同时使用多个设备
优点 : 进程的计算任务和/o任务可以并行处理,使进程迅速推进
缺点 : 有可能发生死锁

设备分配中的数据结构

在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述设备分配的策略

原则 : 根据设备特性,用户要求,系统配置等情况。总原则:既要充分发挥设备的使用效率,又要避免造成进程死锁,还要将用户程序和具体设备隔离开。

静态分配 : 进程运行前为其分配全部所需资源,运行结束后归还资源。(破坏了请求和保持条件,不会发生死锁)。

动态分配 :进程运行过程中动态申请设备资源。

对于独占设备,既可以采用动态也可以采用静态分配方式,但往往采用静态分配。

设备分配步骤

在这里插入图片描述

缺点:
①用户编程时必须使用“物理设备名”,底层细节对用户不透明,不方便编程
②若换了一个物理设备,则程序无法运行
③若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待

在这里插入图片描述在这里插入图片描述

SPOOLing技术(假脱机技术)

在这里插入图片描述
输入井和输出井
在这里插入图片描述输入缓冲区和输出缓冲区

在这里插入图片描述

输入进程和输出进程
在这里插入图片描述

共享打印机原理分析

在这里插入图片描述
虽然系统中只有一个台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现对打印机的共享。

SPOOLing技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值