操作系统第五章——输入输出管理(中)

提示:若我会见到你,事隔经年,我如何向你招呼,以眼泪,以沉默


5.2.1 IO核心子系统

知识总览

请添加图片描述

功能要在那个层次实现

请添加图片描述
i/o调度:用某种算法确定一个好的顺序来处理各个i/o请求
如:磁盘调度(先来先服务算法、最短寻道优先算法、SCAN算法、C-SCAN算法、LOOK算法 ,C-LOOK算法)。当多个磁盘I/o请求到来时,用某种调度算法确定满足I/o请求的顺序。
同理,打印机等设备也可以用先来先服务算法、优先级算法、短作业优先等算法来确定I/o调度顺序。
设备保护:操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)。
在UNIK系统中,设备被看做是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问某个设备时,系统根据FCB中记录的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能。(参考“文件保护”小节)

一般来说SPOOLing技术是在用户层实现的,一般来说假脱机技术都需要使用到磁盘这种设备的设备独立性软件服务(SPOOLing需要这个缓冲区管理),所以假脱机技术都是在用户层软件实现的,

5.2.2 假脱机技术(SPOOLing)

知识总览

请添加图片描述
假脱机技术其实是用软件的方式实现了脱机技术

什么是脱机技术

请添加图片描述
请添加图片描述

假脱机技术——输入井和输出井

请添加图片描述

请添加图片描述

请添加图片描述
显然这个输入进程和输出进行只有和用户进程并发的执行,才能完成这种模拟脱机输入和脱机输出的过程,所以必须需要多道程序技术的支持(为什么需要并发?,若是单道程序一个进程的结束之后才能到下一个进程,那么使用Spooing的缓解两者速度差异的目的也就不能实现)。
请添加图片描述

请添加图片描述
注意这个输入缓冲区和输出缓冲区是作为一个中转站的形式,

共享打印机原理分析

请添加图片描述
请添加图片描述
虽然系统中只有一台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现对打印机的共享。SPOOLing技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备,但是相信聪明如你肯定也知道不是所有的独占设备都能用SPOOLing技术改成共享设备,
(为什么一种空间换取时间的策略?)
磁盘是一种高速设备,在与内存交换数据的速度上优于打印机、键盘、鼠标等中低速设备。试想一下,若没有SPOOLing 技术,CPU 要向打印机输出要打印的数据,打印机的打印速度比较慢,CPU就必须迁就打印机,在打印机把数据打印完后才能继续做其他的工作,浪费了CPU的不少时间。在 SPOOLing 技术下,CPU 要打印机打印的数据可以先输出到磁盘的输出井中(这个过程由假脱机进程控制),然后做其他的事情。若打印机此时被占用,则SPOOLing 系统就会把这个打印请求挂到等待队列上,待打印机有空时再把数据打印出来。向磁盘输出数据的速度比向打印机输出数据的速度快,因此就节省了时间

知识总览

请添加图片描述

5.2.3 设备的分配与回收

知识总览

请添加图片描述

设备分配时应考虑的因素

请添加图片描述
请添加图片描述
设备分配的安全性是指设备分配中应防止发生进程死锁
l)安全分配方式。每当进程发出IO请求后便进入阻塞态,直到其IO操作完成时才被唤醒。这样,一旦进程已经获得某种设备后便阻塞,不能再请求任何资源,而在它阻塞时也不保持任何资源。其优点是设备分配安全,缺点是CPU和 I/O设备是串行工作的。
2)不安全分配方式。进程在发出IO请求后仍继续运行,需要时又发出第二个、第三个IO请求等。仅当进程所请求的设备已被另一进程占用时,才进入阻塞态。优点是一个进程可同时操作多个设备,使进程推进迅速;缺点是有可能造成死锁。

(阻塞IO与非阻塞IO的区别
阻塞IO,指的是需要内核IO操作彻底完成后,才返回到用户空间执行用户的操作。阻塞是指用户空间的执行状态。
非阻塞IO,指的是用户空间的程序不需要等待内核IO操作彻底完成,可以立即返回用户空间执行用户操作,即处于非阻塞IO状态,内核空间会立即返回给用户一个状态值。
阻塞IO:调用线程一直在等待,不能干别的事情。
非阻塞IO:调用线程拿到内核返回的状态值后,IO操作能继续干就干,不能就干别的事情。)
请添加图片描述
这个进程将数据丢给打印机之后,它就不会再管打印机的打印输出过程,甚至在还可以申请其他的设备

静态分配和动态分配

①静态分配主要用于对独占设备的分配,它在用户作业开始执行前,由系统一次性分配该作业所要求的全部设备、控制器。一旦分配,这些设备、控制器就一直为该作业所占用,直到该作业被撤销。静态分配方式不会出现死锁,但设备的使用效率低。②动态分配在进程执行过程中根据执行需要进行。当进程需要设备时,通过系统调用命令向系统提出设备请求,由系统按某种策略给进程分配所需要的设备、控制器,一旦用完,便立即释放。这种方式有利于提高设备利用率,但若分配算法使用不当,则有可能造成进程死锁。
请添加图片描述

设备分配算法

设备分配算法。常用的动态设备分配算法有先请求先分配、优先级高者优先等。对于独占设备,既可以采用动态分配方式,又可以采用静态分配方式,但往往采用静态分配方式。共享设备可被多个进程所共享,一般采用动态分配方式,但在每个IO传输的单位时间内只被一个进程所占有,通常采用先请求先分配和优先级高者优先的分配算法。

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

设备分配依据的主要数据结构有设备控制表(DCT)、控制器控制表(COCT)、通道控制表(CHCT)和系统设备表(SDT),各数据结构功能如下。
请添加图片描述
每一个设备一定有一个他所从属的控制器,每一个控制器也一定有一个他所从属的通道,一个系统中可能存在多个通道,要控制一个设备一定要找到控制器,要操作控制器自然也需要找到通道,所以设备分配管理的数据结构中需要体现出这种从属的关系,
请添加图片描述
设备控制表(DCT):一个设备控制表就表征一个设备,而这个控制表中的表项就是设备的各个属性。凡因请求本设备而未得到满足的进程,应将其PCB 按某种策略排成一个设备请求队列,设备队列的队首指针指向该请求队列队首PCB。
请添加图片描述
设备控制器控制设备与内存交换数据,而设备控制器又需要请求通道为它服务,因此每个COCT 有一个表项存放指向相应通道控制表(CHCT)的指针,而一个通道可为多个设备控制器服务,因此CHCT中必定有一个指针,指向一个表,这个表上的信息表达的是CHCT提供服务的那几个设备控制器。CHCT与 COCT的关系是一对多的关系。
请添加图片描述
系统设备表(SDT):整个系统只有一张 SDT。它记录已连接到系统中的所有物理设备的情况,每个物理设备占一个表目
请添加图片描述
当用户使用某一个设备名请求某一个设备的时候,操作系统是可以通过这个系统设备表来找到用户需要的设备的
在多道程序系统中,进程数多于资源数,因此要有一套合理的分配原则,主要考虑的因素有:IO设备的固有属性、IO设备的分配算法、IO设备分配的安全性以及IO设备的独立性。

设备分配的步骤

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

设备分配步骤的改进

请添加图片描述
由操作系统来完成由逻辑设备名到物理设备名的转化,
为了提高设备分配的灵活性和设备的利用率,方便实现IO重定向,引入了设备独立性。设备独立性是指应用程序独立于具体使用的物理设备。为了实现设备独立性,在应用程序中使用逻辑设备名来请求使用某类设备,在系统中设置一张逻辑设备表(Logical Unit Table,LUT),用于将逻辑设备名映射为物理设备名。LUT表项包括逻辑设备名、物理设备名和设备驱动程序入口地址

请添加图片描述

请添加图片描述

知识总览

请添加图片描述

5.2.4 缓冲区管理

磁盘高速缓存

操作系统中使用磁盘高速缓存技术来提高磁盘的IO速度,对访问高速缓存要比访问原始磁盘数据更为高效。例如,正在运行进程的数据既存储在磁盘上,又存储在物理内存上,也被复制到CPU 的二级和一级高速缓存中。不过,磁盘高速缓存技术不同于通常意义下的介于CPU与内存之间的小容量高速存储器,而是指利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息。因此,磁盘高速缓存逻辑上属于磁盘,物理上则是驻留在内存中的盘块
高速缓存在内存中分为两种形式:一种是在内存中开辟一个单独的空间作为磁盘高速缓存,大小固定;另一种是把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘IO时共享

知识总览

请添加图片描述

什么是缓冲区?有什么作用?

请添加图片描述
快表就是存放于联想寄存器,一种使用硬件的缓冲区,本节所说的主要还是围绕内存作为缓冲区,

缓存区有什么作用?

请添加图片描述
这是一种提高字符型设备的方式,之前字符型设备也是不能使用DMA方式或者通道方式。
根据系统设置缓冲器的个数,缓冲计数可进行如下划分。

单缓冲区

请添加图片描述
其实我们从键盘输入的数据是要传入内存空间的,所以说数据被传入到缓冲区还不够,还需要把数据传递到用户进程的工作区中,我们默认用户进程的工作区也是可以放得到一块的数据的,然后用户进程就可以对这个数据进行处理,

请添加图片描述
根据我们的假设工作区满,缓冲区空,所以刚开始我们就可以往缓冲区冲入数据,同时CPU也可以处理工作区中的数据,这两个可以并行的进行,这里假设T>C,所以处理完数据的时候,缓冲区依然没有被充满,所以必须等缓冲区充满,并且将缓冲区中的数据传入到工作区才能供CPU处理,在经历了T+M的时间之后,就再一次回到我们假设的状态,
请添加图片描述
这里假设T<C 也就是在CPU没有处理完工作区中的数据,设备就已经把缓冲区充满了,工作区有数据也是不能往里面传数据的,所以需要等CPU完成工作,然后再传数据到工作区,也就是需要C+M 重新回到了工作区满,缓冲区空的状态,
请添加图片描述

双缓冲策略

请添加图片描述
若是双缓冲,开始情况CPU可以直接处理工作区中的数据,并且设备同时也可以向缓冲区2冲入数据,这里假设T>C+M也就意味着处理完缓冲区中数据的时候,缓冲区2依然没有被充满,等到缓冲区2充满时候,此时经过了一个T的时间,此时也就是和初始状态一样,所以处理完一块需要的时间是T
请添加图片描述这个不好分析,需要看具体时间,俺嘞建议是把到时候画图分析

单/双缓冲在通信时的区别

请添加图片描述
请添加图片描述

循环缓冲区

包含多个大小相等的缓冲区,每个缓冲区中有一个链接指针指向下一个缓冲区,最后一个缓冲区指针指向第一个缓冲区,多个缓冲区构成一个环形。
循环缓冲用于输入/输出时,还需要有两个指针in和 out。对输入而言,首先要从设备接收数据到缓冲区中,in指针指向可以输入数据的第一个空缓冲区;当运行进程需要数据时,从循环缓冲区中取一个装满数据的缓冲区,并从此缓冲区中提取数据,out指针指向可以提取数据的第一个满缓冲区。输出则正好相反。
请添加图片描述

缓冲池

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
若是需要一个空的则从空格字队列中取出一个,然后根据所处的位置看看放在哪个已经充满数据的队列中,数据用完之后,放在空格子队列,注意这个箭头方向理解起来就还行。首先缓冲池的目的是为了缓解速度匹配的问题的,我们从键盘输入也就会在缓冲池中取得一个空白的块(也就是先拿一个块用于收容输入),填充满之后将其挂在输入队列上,用户进程要用的时候从输入队列中取得一块作为提取输入的工作缓冲区,用完之后放在空块队列上,当计算出结果也是拿一个空闲的块来先进行存放用作收容输出数据的工作缓冲区放在输出队列中,输出进程再从输出队列中取得一块作为提取输出数据的工作缓冲区

知识回顾

请添加图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值