王道OS-输入输出(I/O)系统

1 I/O设备的基本概念和分类

UNIX系统将外部设备抽象为一种特殊的文件,用户可以使用与文件操作相同的方式对外部设备进行操作
Write操作:向外部设备写出数据
Read操作:从外部设备读入数据

1.2 I/O设备的分类

1.2.1 按使用特性

  • 中速设备

1.2.3 按信息交换的单位分类

  • 块设备——传输速率较高,可寻址,即对它可随机地读/写任意一块

2 I/O控制器

细节

1.一个I/O控制器可能会对应多个设备
2.数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄出去你占用内存地址的一部分,称为;另一些计算机采用I/O专用地址,即

2.3.3 内存映像I/O和寄存器独立编址

内存映像I/O

控制器的寄存器使用单独的地址
:需要设置专门的指令来实现对控制器的操作,不仅要指明寄存器的地址,还要指明控制器的编

3 I/O设备的控制方式

步骤

1.CPU向控制器发出读指令。于是设备启动,并且状态寄存器设为1(未就绪)
2.轮询检查控制器的状态(其实就是在不断地执行循环的过程,若状态位一直是1,说明设备还没准备好要输入的数据,于是CPU会不断地轮询)
3.输入设备准备好数据后将数据传给控制器,并 告自身状态
4.控制器将输入的数据放到数据寄存器中,并将状态改为0(已就绪)
5.CPU发现设备已就绪,即可将数据寄存器中的内容读入CPU的寄存器中,再把CPU寄存器中的内容放入内存
6.若还要继续读入数据,则CPU继续发出读指令

CPU干预的频率

很频繁,I/O操作开始之前、完成之后需要CPU介入,并且

数据传送的单位

每次读写

数据的流向

读操作(数据输入):I/O设备→CPU→内存
写操作(数据输出):内存→CPU→I/O设备
每个字的读/写都需要CPU的帮助

优点:实现简单。在读/写指令之后,加上实现循环检查的一系列指令即可(因此才称为“程序直接控制方式”)
缺点:CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低

3.2 使用中断的可编程I/O方式

1.CPU向通道发出I/O指令。指明通道程序在内存中的位置,并指明要操作的是哪个I/O设备。之后CPU就切换到其他进程执行了
2.通道执行内存中的通道程序(其中指明了要读入/写出多少数据,读/写的数据应该放在内存的什么位置等信息)
3.通道执行完规定的任务后,向CPU发出的中断信 ,之后CPU对中断进行处理

流程图

4.1 用户层软件

操作系统可以采用管理逻辑设备表(LUT)

第一种方式,,这就意味着所有用户不能使用相同的逻辑设备名,因此这种方式只适用于单用户操作系统

第二种方式,,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统。系统会在用户登录时为其建立一个用户进程管理,而LUT就存放在用户管理基础的PCB中

4.3 设备驱动程序

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

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

注:驱动程序一般会以一个独立进程的方式存在

4.4 中断处理程序

当I/O任务完成时,I/O控制器会发送一个中断信 ,系统会根据中断信 类型找到相应的中断处理程序并执行。中断处理程序的处理流程如下:

6.1 什么是脱机技术

批处理阶段引入了(用磁带完成):

引入脱机技术后,缓解了CPU与慢速I/O设备的速度矛盾。另一方面,即使CPU在忙碌,也可以提前将数据输入到磁带;即使慢速的输出设备正在忙碌,也可以提前将数据输出到磁带

“输入井”模拟脱机输入时的磁带,用于收容I/O设备输入的数据
“输出井”模拟脱机输出时的磁带,用于收容用户进程输出的数据
输入缓冲区:在输入进程的控制下,“输入缓冲区”用于暂存从输入设备输入的数据,之后再转存到输入井中
输出缓冲区:在输出进程的控制下,“输出缓冲区”用于暂存从输出井送来的数据,之后再传送到输出设备上
注:输入和输出缓冲区是在内存中的缓冲区

要实现SPOOLing技术,。系统会建立“输入进程”和“输出进程”

6.3 共享打印机原理分析

独占式设备——。一段时间内只能满足一个进程的请求

共享设备——(宏观上同时使用,微观上可能是交替使用)。可以同时满足多个进程的使用需求

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

1.设备的固有属性

设备的固有属性可分为三种:独占式设备、共享设备、虚拟设备
:一个时段只能分配给一个进程(如打印机)
:可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用
:采用SPOOLing技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用SPOOLing技术实现的共享打印机)

2.设备分配算法

通常是以下两种算法:
1.FCFS算法
2.最高优先级优先算法

3.设备分配中的安全性
从进程运行的安全性上考虑,设备分配有两种方式:

:为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒(eg:考虑进程请求打印机打印输出的例子)
一个时间段内每个进程只能使用一个设备
:破坏了“请求和保持”条件,不会死锁
:对于一个进程来说,CPU和I/O设备只能串行工作

:进程发出I/O请求后,系统为其分配I/O设备,进程可继续执行,之后还可以发出新的I/O请求。只有某个I/O请求得不到满足时才将进程阻塞
一个进程可以同时使用多个设备
:进程的计算任务和I/O任务可以并行处理,使进程迅速推进
:有可能发生死锁(死锁避免、死锁的检测和解除)

7.2 静态分配和动态分配

静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源

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

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

“设备、控制器、通道”之间的关系:

:每个设备控制器都会对应一张COCT。操作系统根据COCT的信息对控制器进行操作和管理

:记录了的情况,每个设备对应一个表目

2.根据SDT找到DCT。若忙碌则将进程PCB挂到中,不忙碌则将分配给进程

4.根据COCT找到CHCT。若忙碌则将进程PCB挂到中,不忙碌则将分配给进程

某用户进程第一次使用设备时使用逻辑设备名想操作系统发出请求,操作系统根据用户指定的设备类型(逻辑设备名)查找系统设备表,找到一个空闲设备分配给该进程,并在LUT中增加相应表项

逻辑设备表的设置问题:
整个系统只有一张LUT:各用户所使用的,适用于单用户操作系统
每个用户一张LUT:,适用于多用户操作系统

8 缓冲区管理

显然,若两个相互通信的机器只设置单缓冲区,在任意时刻只能实现数据的单向传输

双缓冲区:

8.6 缓冲池

由系统中共用的缓冲区组成。这些缓冲区按使用状况可分为:空缓冲队列、输入队列、输出队列

另外,根据一个缓冲区在实际运算中扮演的功能不同,又设置了四种工作缓冲区:用于收容输入数据的缓冲区(hin)、用于提取输入数据的工作缓冲区(sin)、用户收容输出数据的工作缓冲区(hout)、用于提取输出数据的工作缓冲区(sout)

王道OS-输入输出(I/O)系统

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24992 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年5月18日
下一篇 2022年5月18日

相关推荐