I/O设备的概念和分类
I/O设备:输入/输出设备
I/O设备按使用特性分类: 1.人机交互类外部设备——数据传输速度慢 2.存储设备——数据传输速度快 3.网络通信设备——数据传输速度介于上述二者之间
I/O设备按信息交换的单位分类: 1.块设备:传输速率较高,可寻址,即对它可随机地读/写任一块 2.字符设备:传输速率较慢,不可寻址,在输入输出时常采用中断驱动方式
I/O控制器
CPU无法直接控制I/o设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对设备的控制。 这个电子部件就是I/O控制器,又称设备控制器。CPU可控制I/O控制器,又由I/O控制器来控制设备的机械部件。
值得注意的小细节: ①一个I/O控制器可能会对应多个设备; ②数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址。
I/O控制方式
程序直接控制方式
中断驱动方式
DMA方式
通道控制方式
难点理解: 通道 = 弱鸡版CPU 通道程序 = 任务清单
I/O软件层次结构
用户层软件
设备独立性软件(设备无关性软件):与设备的硬件特性无关的功能几乎都在这一层实现
主要实现的功能: ①向上层提供统一的调用接口(如 read/write系统调用) ②设备的保护 原理类似与文件保护。设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样。 ③差错处理 设备独立性软件需要对一些设备的错误进行处理 ④设备的分配与回收 ⑤数据缓冲区管理 可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异 ⑥建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序 设备独立性软件需要通过“逻辑设备表(LUT,Logical UnitTable)”来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序
操作系统系统可以采用两种方式管理逻辑设备表(LUT): 第一种方式,整个系统只设置一张LUT,这就意味着所有用户不能使用相同的逻辑设备名,因此这种方式只适用于单用户操作系统。 第二种方式,为每个用户设置一张LUT,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统。系统会在用户登录时为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中。
设备驱动程序
主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化成特定设备“能听得懂”的一系列操作。包括设置设备寄存器;检查设备状态等
为何不同的设备需要不同的设备驱动程序? 不同的I/O设备有不同的硬件特性,具体细节只有设备的厂家才知道。因此厂家需要根据设备的硬件特性设计并提供相应的驱动程序。CPU执行驱动程序的指令序列,来完成设置设备寄存器,检查设备状态等工作。
注:驱动程序一般会以一个独立进程的方式存在。
中断处理程序
当I/O任务完成时,I/O控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。 中断处理程序的处理流程如下:
I/O核心子系统(I/O系统):设备独立性软件、设备驱动程序、中断处理程序
注:假脱机技术(SPOOLing技术)需要请求“磁盘设备”的设备独立性软件的服务,因此一般来说假脱机技术是在用户层软件实现的。但是408大纲又将假脱机技术归为“I/O核心子系统”的功能,因此考试时还是以大纲为准。
I/O调度
I/O调度:用某种算法确定一个好的顺序来处理各个I/O请求。
设备保护
操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)。 在UNIx系统中,设备被看做是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问某个设备时,系统根据FCB中记录的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能。(参考“文件保护”小节)
假脱机技术(SPOOLing)
“脱机”——脱离主机的控制进行的输入/输出操作。 假脱机技术:用软件的方式模拟脱机技术。
SPOOLing系统组成: “输入井”模拟脱机输入时的磁带,用于收容I/O设备输入的数据 “输出井”模拟脱机输出时的磁带;用于收容用户进程输出的数据 要实现SPOOLing技术,必须要有多道程序技术的支持。系统会建立“输入进程”和“输出进程”。
共享打印机原理分析
独占式设备——只允许各个进程串行使用的设备。一段时间内只能满足一个进程的请求。 共享设备——允许多个进程“同时”使用的设备(宏观上同时使用,微观上可能是交替使用)。可以同时满足多个进程的使用请求。
打印机是种“独占式设备”,但是可以用SPOOLing技术改造成“共享设备” 独占式设备的例子:若进程1正在使用打印机,则进程2靖求使用打印机时必然阻塞等待 虽然系统中只有一个台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现对打印机的共享。 SPOOLing技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备。
设备的分配与回收
设备分配时应考虑的因素:设备的固有属性、设备分配算法、设备分配中的安全性
设备的固有属性可分为三种:独占设备、共享设备、虚拟设备。 独占设备:一个时段只能分配给一个进程(如打印机)。 共享设备:可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用。 虚拟设备:采用SPOOLing技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用。 设备的分配算法: 先来先服务、优先级高者优先、短任务优先… 设备分配中的安全性:
静态分配与动态分配
静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源 破坏了“请求和保持”条件,不会发生死锁 动态分配:进程运行过程中动态申请设备资源
设备分配管理中的数据结构
设备控制表(DCT):系统为每个设备配置一张DCT,用于记录设备情况 控制器控制表(COCT):每个设备控制器都会对应一张COCT。操作系统根据COCT的信息对控制器进行操作和管理。 通道控制表(CHCT):每个通道都会对应一张CHCT。操作系统根据CHCT的信息对通道进行操作和管理。 系统设备表(SDT):记录了系统中全部设备的情况,每个设备对应一个表目。
设备分配的步骤
注∶只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送
缺点: ①用户编程时必须使用“物理设备名”,底层细节对用户不透明,不方便编程 ②若换了一个物理设备,则程序无法运行 ③若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待
设备分配步骤的改进方法
改进方法:建立逻辑设备名与物理设备名的映射机制,用户编程时只需提供逻辑设备名
逻辑设备表(LUT)建立了逻辑设备名与物理设备名之间的映射关系。 某用户进程第一次使用设备时使用逻辑设备名向操作系统发出请求,操作系统根据用户进程指定的设备类型(逻辑设备名)查找系统设备表,找到一个空闲设备分配给进程,并在LUT中增加相应表项。 如果之后用户进程再次通过相同的逻辑设备名请求使用设备,则操作系统通过LUT表即可知道用户进程实际要使用的是哪个物理设备了,并且也能知道该设备的驱动程序入口地址。
逻辑设备表的设置问题: 整个系统只有一张LUT:各用户所用的逻辑设备名不允许重复,适用于单用户操作系统 每个用户一张LUT:不同用户的逻辑设备名可重复,适用于多用户操作系统
缓冲区管理
缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。
使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本) 一般情况下,更多的是利用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区
缓冲区有什么作用?
1.缓和CPU与I/O设备之间速度不匹配的矛盾 2.减少对CPU的中断频率,放宽对CPU中断相应时间的限制 3.解决数据粒度不匹配的问题(如:输出进程每次可以生成一块数据,但I/O设备每次只能输出一个字符) 4.提高CPU与I/O设备之间的并行性
单缓冲
假设某用户进程请求某种块设备读入若干块的数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)。 注意:当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。
结论:采用单缓冲策略,处理一块数据平均耗时Max(C,T)+M
双缓冲
假设某用户进程请求某种块设备读入若干块的数据。若采用双缓冲的策略,操作系统会在主存中为其分配两个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块) 双缓冲题目中,假设初始状态为:工作区空,其中一个缓冲区满,另一个缓冲区空
结论:采用双缓冲策略,处理一个数据块的平均耗时Max(T,C+M)
使用单/双缓冲在通信时的区别
循环缓冲区
缓冲池
完结撒花~ 这个五天自学只是为了入门操作系统,对操作系统有个大体的了解,之后就开始正经学习了。
|