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)

文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24992 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!