考点一般分布在以下几个部分,考分在3~5分左右。
产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。
产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
有序资源分配法和银行家算法都是可以避免死锁的算法。
有序资源分配法:
将资源按某种规则系统中的所有资源统一编号(例如打印机为1、磁带机为2、磁盘为3、等等),申请时必须以上升的次序。
系统要求申请进程:
1、对它所必须使用的而且属于同一类的所有资源,必须一次申请完;
2、在申请不同类资源时,必须按各类设备的编号依次申请。
例如:进程PA,使用资源的顺序是R1,R2;进程PB,使用资源的顺序是R2,R1;若采用动态分配有可能形成环路条件,造成死锁。
采用有序资源分配法:R1的编号为1,R2的编号为2;
PA:申请次序应是:R1,R2
PB:申请次序应是:R1,R2
这样就破坏了环路条件,避免了死锁的发生。
银行家算法:
以银行借贷系统的分配策略为基础,判断并保证系统的安全运行,只分配给能够立即执行完并返还资源的进程。
如下,分配资源给那些能够完成任务的进程,当任务完成后立即回收其所有资源(包括之前已分配的资源)
页式存储,是离散存储方式的一种,每页的大小是相同的。逻辑地址由页号+页内地址组成,物理地址由块号&块内地址组成。页的大小和块的大小是相同的,所谓的页内地址和块内地址其实就是相对本页或本块的偏移地址,与逻辑地址对应的物理地址,其偏移量也必须相同。
给出一个逻辑地址、页大小和页表,就可以计算出相对应的物理地址:根据页大小将逻辑地址分成页号和页内地址两部分(页大小其实就是页内地址的大小),然后查页表,根据页号查到对应的物理块号,再将物理块号&页内地址(等同于块内地址)即是对应的物理地址。
段式存储与页式存储的区别是,段式存储的段长是不固定的,它是按程序的结构来分段的。段内地址表示相对基址的偏移地址。
逻辑地址由段号&段内地址组成,物理地址由基址+段内地址组成。给出一个逻辑地址、段大小和段表,就可以计算出相对应的物理地址,计算过程与页式基本相同,但需要注意的是,通过段号找到基址后,基址本身是一个完整的地址,是直接加上段内地址得出物理地址,而不同于页式的拼接。
段页式存储,会增加一个快表,一般将其存储在调整存储器中,是按内容进行存取的。
逻辑地址分为三部分:段号、段内页号、页内地址,物理地址由块号&页内地址组成,先根据段号和段内页号找到对应的块号,再由块号&页内地址即是物理地址。
一般是13个索引结点,从0开始
注意图中,越下面的方式,效率越高。程序控制方式又叫程序查询方式,就是轮询方式;程序中断方式,当传输完毕后会主动发送一个中断通知;DMA方式有一个DMA控制器。
Spooling技术:开辟一个缓冲区进行排队
微内核是把用户态的部分从内核中剥离,只保留最为核心的部分作为微内核,这样用户态的部分出现问题不影响内核的稳定,可用于分布式系统。
嵌入式操作系统:
Flynn分类法: 注意MISD是不实际的。
先出现的是复杂指令集,那时候计算机都是定制的;精简指令集是发展通用CPU使用的。现在的x86体系使用cisc是历史遗留问题,表面上接受 cisc 指令,然后通过译码器转化成 risc,底层运行的都是 risc 指令。