操作系统第三章---IO子系统
总结:io子系统两大问题
1.死锁的发生原理 死锁的检测 银行家算法 是否理解执行进程
2.磁盘臂柱调度算法–先到先服务、最短作业优先、电梯算法、循环扫描算法
其他问题 --IO四层结构问题
另外,io设备主要分为两种,第一种块设备也就是我们常说硬盘、移动u盘等实体存储介质。另外一种,是字符设备就是从网络流等流中获取的IO数据。
第一大问题
死锁
产生死锁的四个条件
1.互斥使用:每个资源只能被一个进程使用(资源独占)
2.保持和等待:不拿到资源就一直保持和等待
3.不可剥夺:不剥夺正在使用资源的进程的资源
4.环路等待:顺序执行
(这四个条件只有全部满足,才会产生死锁,所以我们通过解决一个问题就能解决死锁问题)
解决死锁
1.忽略死锁的发生
鸵鸟算法—把头埋到沙子里,假装事情没有发生。
2.检测死锁并回复
如果存在环路,杀掉一个或者多个进程,打掉环路
是否超时,超时就杀掉进程。
3.谨慎对资源的动态分配,避免死锁!!
银行家算法-对应解决第三条(银行家的两个作用,第一检测系统是否处于安全状态。第二检测,进程的需求是否能及时得到相应)
4.通过破坏死锁的四个条件,直接预防死锁。
死锁预防的定义——资源分配算法。
破坏请求和保持条件(一次性申请一次性分配!)
破坏不可剥夺(等待状态的进程,必须释放其他进程正在请求的资源)
安全状态
存在安全序列
如果存在一个由系统中所有的进程构成的安全序列,则系统
空闲的进程多不安全状态,不安全状态不一定导致死锁,死锁一定是不安全状态
安全算法
银行家算法
银行家算法涉及到的
基本的单词
MAX ------- 一个进程需要的所有资源最大量
Aollcation----已经获得资源的数目
Need----------还需要的资源
Available—某一时刻可用的资源
Work—可用资源量 最开始等于Available 后面等于 work+Aollcation(就是满足完一个进程后,归还的资源)
Request–请求资源量
请求的资源小于所有资源
银行家算法—一共三步
-应用于进程能否立即响应—
(银行家的两个作用,第一检测某一时刻系统是否处于安全状态,进而产生安全序列。(当前的available))–安全监测算法
(第二检测,某一时刻进程的需求(request)是否能及时得到相应)—资源请求算法
及时响应算法的步骤
1.首先检测request是否小于进程最大需要量 need,是否小于可用资源量 Available,如果都小于我们就尝试把他请求的request分配给他。
2.当分配给他的完以后,我们先修改ava可用资源的数量,修改刚才进程的状态量包括 aollcation占用资源量(本身加上request)
need等MAX-Aollocation(变小) work=最初可用资源量-request=当前可用资源量 然后继续用银行家算法求解
继续生产安全队列。比如说work此时230,那么观察能满足哪个进程现在所需要的need,给他以后把占用的全部归还回来,work值重新更新–这个强调一点,当我们满足了其中一个进程的request之后,不必继续满足他,剩下的ava可以给别的继续用。
死锁检测算法
有别于银行家算法两点
1.银行家是避免死锁产生的,死锁检测算法可以允许有死锁,如果出现死锁再回滚。
死锁检测算法是在某一时刻保证没有死锁就可以。而银行家算法是整个一个时间段内。
预防 避免 检测(忽略的减去)
第二部分 IO磁臂柱移动算法
寻道时间概念:磁头臂柱移动道相应的柱面所需的时间
移动跃进点*每段时间
当每段前进时间由硬件限制以后我们如果想减少寻道时间,必须从减少移动次数来控制优化,寻道时间。
以下4种算法
1.先到先服务算法
此种算法公平性很好,但是难以优化寻道时间,当我们文件的散布性较大的时候,需要花费较大的时间来寻找文件。
2.最短寻道算法
此种算法,每次总是选择距离磁头臂柱最近的算法,在先到先服务基础上时间缩短了一半,但是对于一直距离磁臂较远的文件公平性太差,容易出现饥饿情况。
3.电梯算法
当磁臂开始移动的时候,一直朝一个方向移动,当到达这个方向的最远点,再开始反方向移动,读取文件。此种算法较电梯算法提高了公平性。但是不利于距离磁头较远文件的访问。
4.循环扫描算法
look、c-scan、s-look
look算法在电梯算法的基础上优化,使得磁头不一定到达最远点才返回,二是到达最远请求文件后立即返回。
另外C-scan和 C-LOOK算法都是在scan和look上进行优化,当磁盘返回的过程中,不读取文件,直接到达最远点或者最远请求点。
其他问题—io层结构问题
1.用户级别IO :提供直接能够调用使用的IO接口
2.设备无关软件(设备独立软件):属于系统自身软件—用于对设备驱动传递命令至用户进程,发出请求到设备驱动程序。
3.设备驱动程序:与中断处理器对接,建立设备寄存器,检查状态。
4.中断处理器:当IO结束的时候,唤醒驱动。