操作系统原理和实践-考前最后一练

局部题目:建议理解全部概念再来看题目

操作系统原理和实践-考前最后一背_神迹小卒的博客-CSDN博客操作系统第二章 进程管理 - 幕布2.1 前趋图和程序执行2.2 进程的描述2.3 进程控制https://mubu.com/doc/nsZaqt3GlF操作系统第三章 处理机调度与死锁 - 幕布3.1 处理机调度的层次和调度算法的目标3.2 作业和作业调度3.3 进程调度 https://mubu.com/doc/9YwQAHsuTF操作系统第四章 存储器管理 - 幕布https://mubu.com/doc/p5DXy7gnd9操作系统第五章 输入输出系统 - 幕布https://mubu.com/dohttps://blog.csdn.net/aiqq136/article/details/125151948

成绩构成

期末考试占70%

考勤和作业占10%

中期考试占10%

实验占10%

课程构成

第一章       操作系统引论        

第二章       进程管理            

第三章       处理器调度与死锁    

第四章       存储器管理

第五章     输入输出系统

第六章        文件及文件系统

第七章     UNIX/Linux系统入门

第八章     文件操作与权限管理         

第九章     进程运行与监控

第十章     Shell的交互功能与Shell程序设计

第十一章  操作系统接口与应用开发       

第十二章  线程与线程控制   

第一章 操作系统引论

单道多道

第二章 进程管理-融合第9章与12章

 2.1.1   前趋图

 p1->p2

 程序的并发执行

 si s2并

 2.程序并发执行时的特征

 n值不确定

 2.利用信号量实现前趋关系

 wait(S) = P(S)        signal(S) =V(S)

整型信号量

整型信号量被定义为一个用于表示资源数目的整型量S,wait和signal操作可描述为:

1

2

3

4

5

6

7

wait(S){

    while (S<=0);

    S=S-1;

}

signal(S){

    S=S+1;

}

p1( ){ S1signalasignalb}

p2( ){ wait(a); S2signalc);signald; }

p3( ){ waitbS3signale);}

p4( ){ waitcS4signalf}

p5( ){ waitdS5signalg}

p6( ){ waite);waitf);waitg);S6}

void main( ){

    semaphore a,b,c,d,e,f,g;

    a.value=b.value=c.value=0;

    d.value=e.value=f.value=g.value=0;

    cobegin

         p1( ); p2( ); p3( ); p4( ); p5( ); p6( );

    coend;

}

1.利用记录型信号量解决生产者一消费者问题

互斥,满,空        三变量

 

2.利用AND信号量解决生产者消费者问题

AND型信号量和记录型信号量原理大致相同
想较与记录型信号量,AND型信号量主要做了以下改动:
 用Swait(empty,mutex)来代替wait(empty)和wait(mutex);
• 用Ssignal(mutex,full)来代替signal(mutex)和signal(full);
• 用Swait(full,mutex)代替wait(full)和wait(mutex);
• 用Ssignal(mutex,empty)代替Signal(mutex)和Signal(empty)。
 

1.利用记录型信号量解决哲学家进餐问题

左右手

 2.利用AND信号量解决哲学家进餐问题

 左右手

2.5.3 读者 写者问题

1.利用记录型信号量解决读者写者问题

由于只要有一个Pr在读,便不允许Pw去写。所以,仅当readcount=0,表示尚无Pr在读时,Pr才需要执行wait(wmutex)操作,若wait(wmutex)操作成功,Pr便可去读,相应地,做readcount+1操作

semaphore rmutex=1, wmutex = 1;

    int readcount = 0;

 

1.直接通信方式        例:解决生产—消费问题

    这是指发送进程利用OS所提供的发送命令,直接把消息发送给目标进程。

n 系统提供下述两条通信命令(原语):

     Send  Receiver,  message);

     ReceiveSender,  message);

第三章 处理机调度与死锁

FCFS算法举例:下表列出了ABCD四个作业分别到达系统的时间、要求服务的时间、开始执行的时间及各自的完成时间,并计算出各自的周转时间和带权周转时间。

2.短作业优先调度算法(short job first

RR

采用基于时间片轮转调度算法调度上例的5个进程(A,B,C,DE),运行时间分别为43424,并分别按照两种时间片大小轮转调度(1个单位时间和4和单位时间),分析该算法的性能。

首先按照进程到达的先后顺序组织就绪队列,即ABCDE

从队首开始调度,首先调度A,执行一个时间片,强行中断AA回到就绪队列队尾排队;

切换到B,执行一个时间片,强行中断BB回到就绪队列队尾排队(排在A之后)

多级反馈队列调度算法

最早截止时间优先EDF(Earliest Deadline First) 算法

1) EDF算法用于非抢占调度的调度方式

前一个任务完成时,选择到达时间最近的任务开始   

    该算法要求在系统中保持一个实时任务就绪队列,该队列按各任务截止时间的早晚排序;具有最早截止时间的任务排在队列的最前面。调度程序总是选择就绪队列中的第一个任务,为之分配处理机,使之投入运行。

3-9示出了将该算法用于非抢占调度方式之例。该例中具有四个非周期任务,它们先后到达。

系统首先调度任务1 执行,在任务1执行期间,任务23 又先后到达。

由于任务3 的开始截止时间早于任务2,故系统在任务1 后将调度任务3执行。

在此期间又到达作业4,其开始截止时间仍是早于任务2 的,故在任务3执行完后,系统又调度任务4 执行,最后才调度任务2 执行。

2) 抢占式调度方式用于周期实时任务

3-7 示出了将最早截止时间优先算法用于抢占调度方式之例。在该例中有两个周期性任务,任务A的周期时间为20 ms,每个周期的处理时间为10 ms;任务B 的周期时间为50 ms,每个周期的处理时间为25 ms。图中的第一行示出了两个任务的到达时间、最后期限和执行时间图。其中任务A的到达时间为02040;任务A的最后期限为204060;任务B的到达时间为050100;任务B的最后期限为50100150…(注:单位皆为ms)

为了说明通常的优先级调度不能适用于实时系统,该图特增加了第二和第三行。在第二行中假定任务A具有较高的优先级,所以在t = 0 ms 时,先调度A1 执行,在A1 完成后(t = 10 ms)才调度B1执行;在t = 20 ms 时,调度A2 执行;在t = 30 ms 时,A2 完成,又调度B1执行;在t = 40 ms 时,调度A3 执行;在t = 50 ms 时,虽然A3 已完成,但B1已错过了它的最后期,这说明了利用通常的优先级调度已经失败。第三行与第二行类似,只是假定任务B具有较高的优先级。

第四行是采用最早截止时间优先算法的时间图。在t = 0 时,A1 B1 同时到达,由于A1 的截止时间比B1 早,故调度A1 执行;在t = 10 时,A1 完成,又调度B1 执行;在t = 20时,A2 到达,由于A2 的截止时间比B1 早,B1 被中断而调度A2 执行;在t = 30 时,A2完成,又重新调度B1执行;在t = 40 时,A3 又到达,但B1 的截止时间要比A3 早,仍应让B1 继续执行直到完成(t = 45),然后再调度A3 执行;在t = 55 时,A3 完成,又调度B2执行。在该例中利用最早截止时间优先算法可以满足系统的要求。

 1.竞争资源引起进程死锁

例如:S1S2S3是临时性资源,由进程P1P2P3产生的消息。如果消息通信处理顺序不当也会发生死锁。

n 正确的顺序
¨ P1

    Release(S1)Request(S3)

            

¨ P2

    Release(S2)Request(S1)

            

¨ P3

   Release(S3)Request(S2)

            

n 错误顺序
¨ P1 …Request(S3) Release(S1)
¨ P2 …Request(S1) Release(S2)
¨ P3 …Request(S2) Release(S3)

。图3-14 示出了在进程之间通信时形成死锁的情况。

图中S1S2S3是临时性资源。进程P1产生消息S1,又要求从P3接收消息S3

进程P3产生消息S3,又要求从进程P2接收其所产生的消S2

进程P2产生消息S2,又需要接收进程P1所产生的消息S1。如果消息通信按下述顺序进行:

P1…Release(S1)Reqaest(S3)

P2…Release(S2)Request(S1)

P3…Release(S3)Request(S2)

并不可能发生死锁,但若改成下述的运行顺序:

P1…Request(S3)Release(S1)

P2…Request(S1)Release(S2)

P3…Request(S2)Release(S3)

则可能发生死锁。

2.安全状态之例

  假定系统中有三个进程P1P2P3,共有12台磁带机。进程P1总共要求10台磁带机,P2P3分别要求4台和9台。假设在T0 时刻进程P1P2P3已分别获得5台、2台和2台磁带机,尚有3台空闲未分配,在T0时刻系统是否安全?

T0时刻系统是安全的,因为这时存在一个安全序列〈P2P1P3〉,即只要系统按此进程序列分配资源,就能使每个进程都顺利完成。例如,将剩余的磁带机取2台分配给P2,使之继续运行,待P2完成,便可释放出4 台磁带机,于是可用资源增至5台;以后再将这些全部分配给进程P1,使之运行,待P1完成后,将释放出10 台磁带机,P3便能获得足够的资源,从而使P1P2P3每个进程都能顺利完成。

 <P2,P1,P3>

4.银行家算法之例

假定系统中有五个进程{P0P1P2P3P4} 和三类资源{ A, B, C },各种资源的数量分别为1057,在T0 时刻的资源分配情况

 work=max全部需要的

need=need需要的

allocation=拥有的

finish =true 或者 false

2.死锁定理

 nS为死锁状态的充分条件是:当且仅当S状态的资源分配图是不可完全简化的。该充分条件被称为死锁定理

第一步:先看R1资源,它有三个箭头是向外的,因此它一共给进程分配了3个资源,此时,R1没有空闲的资源剩余。

第二步:再看R2资源,它有一个箭头是向外的,因此它给进程分配了1个资源,此时,R2还剩余一个空闲的资源没分配。

第三步:看完资源,再来看进程,先看进程P2,它只申请一个R1资源,但此时R1资源已经用光了,所以,进程P2进入阻塞状态,因此,进程P2暂时不能化成孤立的点。

第四步:再看进程P1,它只申请一个R2资源,此时,系统还剩余一个R2资源没分配,因此,可以满足P1的申请。这样,进程P1便得到了它的全部所需资源,所以它不会进入阻塞状态,可以一直运行,等它运行完后,我们再把它的所有的资源释放。相当于:可以把P1的所有的边去掉,变成一个孤立的点,如下图所示:

第五步:进程P1运行完后,释放其所占有的资源(2个R1资源和1个R2资源),系统回收这些资源后,空闲的资源便变成2个R1资源和1个R2资源,由于进程P2一直在申请一个R1资源,所以此时,系统能满足它的申请。这样,进程P2便得到了它的全部所需资源,所以它不会进入阻塞状态,可以一直运行,等它运行完后,我们再把它的所有的资源释放。相当于:可以把P2的所有的边都去掉,化成一个孤立的点,变成下图: 

由于这个资源分配图可完全简化,因此,不会产生死锁。 

而如果资源分配图中的点,最终不能够化成孤立的点,则进程资源图不能够完全简化,从而会发生死锁。

 第四章 存储器管理

Ø静态重定位

 动态运行时装入方式

静态链接: 

 装入时动态链接(Load-Time Dynamic Linking)

运行时动态链接

单一连续分配

4.3.2   固定分区分配

 4.3.3 动态分区分配

假定系统初始化时规定把存储空间划分为 8个分区。在下图(a)用问号(?)来表示它们。

在系统运行一段时间后,已有192K存储空间分配给7 个作业,剩下64K还未分配,如下图(b)所示。

现在,又有两个作业 PQ准备调入,它们每个需要32K存储空间。

显然,我们有足够的存储空间。却没有足够数的存储区域(目前只有一个可用)

因此,只能允许一个作业(如:P)被调入,如下图(c)所示。

    为了减少存储区域的内零头,进一步提高主存的利用率,使存储空间的划分更加适应不同的作业组合,设计了动态(可变)式分区方案。

    动态分区分配是指根据进程的实际需要,动态地为之分配连续的内存空间。即分区的边界可以移动,分区的大小是可变的。

   动态分区又有两种不同选择

1. 分区的数目固定大小是可变的,
2. 允许分区的数目和大小都是可变的。

 第二种方案(分区数目可变):最初,没有建立任何分区,整个可用的存储空间用一个问号来表示;

之后,发生上述所说在系统运行一段时间后,已有192K存储空间分配给7 个作业,剩下64K还未分配的情况,如图(b)

现在,我们在剩下的64K存储空间中,可以创建两个分区,分别装入作业PQ,如图(c)。显

然,此方案比第一个方案更灵活,内存利用率更高。

 分区分配算法

1.最佳适应算法(Best fit: BF)

就是为一作业选择分区时总是寻找其大小最接近作业所要求的存储区域。即:把作业放入这样的分区后剩下的零头最小。

     优点:如果存储空间中具有正好是所要求大小的存储空白区,则必然被选中;如果不存在这样的空白区,也只对比要求稍大的空白区进行划分,而绝不会去划分一个更大的空白区。因此,其后遇到大作业到来时,作业要求的存储区域就比较容易得到满足

     为了加快查找速度,应将存储空间中所有的空白区按其大小递增的顺序链接起来,组成一空白区链(Free  List)。   

        缺点:在每次分配时,总是产生最小的空白区。因此,经过一段时期后,存储空间中可能留许多这样的空白区,由于其太小而无法使用。

为了改善这种情况,在该算法中设置一参数G,用它来确定最小分区的大小。当选择一个分区时,如果选中的空白区与要求的大小之差小于G,则不再对它划分,而把整个这个空白区分配给申请的作业。

        最佳适应算法的另一缺点是:在回收一个分区时,为了把它插入到空白区链中合适的位置上也颇为费时。所以,这种算法乍看起来是最佳的,其实则不然。

2.最坏适应算法(Worst fit: WF)

在为作业选择存储区域时,总是寻找最大的空白区。在划分后剩下的空白区也是最大的,因而对以后的分配很可能仍然是有用的,这是该算法的一个优点。但是,由于最大的空白块总是首先被分配而进行划分,当有大的作业时,其存储空间的申请往往得不到满足,这是该算法的一个缺点。       

3.首次适应算法(First Fit: FF)

Ø 每个空白区按其在存储空间中 地址递增 的顺序链在一起,即每个后继空白区的起始地址总是比前者的大。在为作业分配存储区域时,从这个空白区链的始端开始查找, 选择第一个足以满足请求的空白块 ,而不管它究竟有多大。
Ø 选择的空白区被分成两部分。一部分与请求的大小相等,分配给作业;剩下的部分留在空白区链中。

显然,这个算法倾向于优先利用存储空间中低址部分的空白区。

        主要优点:算法简单,查找速度快;留在高址部分的大的空白区被划分的机会较少,因而在大作业到来时也比较容易得到满足。

        主要缺点:这种算法常常利用一个大的空白区适应小作业的请求,从而留下一些较小的无法用的空白区,存储空间利用率不高;而且,由于所有的请求都是从空白区链的始端开始查找,因而这些小而无用的空白区集中在这个链的前端,相应地,一些较大空白区在链的尾端才能发现,这种情况将使找到合适空白区的速度降低

4.下次适应算法(Next fit: NF)

l 是首次适应算法的一种变形,故也被称为带旋转指针的首次适应算法 (Next Fit with Roving Pointer)
l 把存储空间中空白区构成一个循环链。每次为存储请求查找合适的分区时,总是 从上次查找结束的地方开始 ,只要找到一个足够大的空白区,就将它划分后分配出去。
l 显然,采用这一策略后, 存储空间的利用更加均衡 ,而不至于使小的空白区集中于存储器的一端。但是,在存储器的另一端也不可能保留大的空白块,因此,当需要获得相当大的空白区时,能满足的可能性减少了。

4.快速适应算法(Quik fit:QF)

l 将空闲分区根据其容量大小进行分类,对于每一类具有相同容量的所有空闲分区,单独设立一个空闲分区链表。
l 这样,系统中存在 多个空闲分区链表
l 同时,在内存中设立一张管理分区类型,并记录了该类型空闲分区链表表头的 索引表 ,该表的每一个表项记录了对应类型空闲分区链表表头的指针。
l 分配过程: 根据进程的长度,寻找到能容纳它的最小空闲分区链表,并取下第一块进行分配即可

优点:

1. 查找效率高。
2. 该算法在进行空闲分区分配时,不会对任何分区产生分割,所以能保留大的分区,满足对大空间的需求,也不会产生内存碎片。

缺点:

1. 在分区归还主存时算法复杂,系统开销较大。
2. 该算法在分配空闲分区时是以进程为单位,一个分区只属于一个进程,因此在为进程所分配的一个分区中,或多或少地存在一定的浪费。空闲分区划分越细,浪费则越严重

例子1

例子2

2有作业序列:作业A要求18K;作业B要求25K,作业C要求30K。系统中空闲区按三种算法组成的空闲区队列,哪种算法能满足作业系列的需求?

 首次x

最佳v

最坏v

分页存储管理的基本方法

页面与物理块 

u例如:一个作业的地址空间有m页。那么,只要分配给它m个页框,每一页分别装入一个页框内即可。这里,并不要求这些页框是连续的。

说明:

0 开始编制页号,页内地址是相对于 0 编址;
在进程调度时,必须把它的所有页一次装入到主存的页框内;如果当时页框数不足,则该进程必须等待,系统再调度另外的进程。 (纯分页方式)

地址结构

 分页存储管理的逻辑地址表示

 

分页存储管理的系统

1某采用分页存储管理的系统中,物理地址占20位,逻辑地址中页号占6位,页面大小为1KB,问:

     ⑴该系统的内存空间大小为多少?每个存储块的大小为多少?逻辑地址共几位?每个作业的最大长度为多少?

     ⑵若第012页分别放在第379存储块中,则逻辑地址0420H对应的物理地址是多少?

内存空间大小=2^20

每个存储块的大小=页面大小

逻辑地址=页号6+位移量10       

每个作业的最大长度=2^逻辑地址

某采用分页存储管理的系统中,物理地址占20位,逻辑地址中页号占6位,页面大小为1KB,问:    

⑵若第012页分别放在第379存储块中,则逻辑地址0420H对应的物理地址是多少? 

逻辑地址化为十进制,通过页面大小判断在哪一页,偏移量多少,哪一存储块,物理地址=存储块数*页面大小+偏移量

2

2:在分页存储系统中地址结构的长度为20位,页面大小为2K,作业地址空间为8K,该作业各页依次存放在1367号物理块中,相对地址4000处有一条指令  Store  l2500,请给出该作业的页表,并分别指出该指令所在页号和对应的物理单元及数据存放所在的页号和物理单元。

4页        4000        1号页        3块        1952偏移量        3*2k+1952

 

3

 页面大小2048=2^11=2K        4K<4865<6K        2号         4865-4096=769        6*2K+769=13057

 

 4.4.3 访问内存的有效时间EAT

例:设访问主存时间为200ns,访问联想存器为40ns命中率为90%,则平均存取时间为多少?

 EAT=0.9*(200+40)+0.1*(400+40)

 多级页表结构

对于64位的机器,采用两级页表结构是否合适?

分段存储管理

 (ED代码+用户数*1K)*数据区域

 l采用信息共享(ED可共享)后占用的内存空间?

ED代码+用户数*1K*数据区域

不同程序编写方法的局部性特征

物理块数

 平均分配算法

按比例分配算法 

第六章        文件系统

 一个文件系统中,一个盘块大小为512B,采用一级目录。  

假定文件目录中有256个目录项,一个FCB64B,其中文件名占8B。如果采用i结点方式,则i结点编号占2B

试比较引入索引节点前后,为查找一个目录项,平均需要启动磁盘多少次?

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值