答: ( 1)安全,因为存在安全序列 {P0,P3,P4,P1,P2}
(2 )系统能分配资源,分析如下。 ① Request(1,2,2,2) <=Need2(2,3,5,6);
② Request(1,2,2,2) <=Available2(1,3,5,4) 改成 Available2(1,6,2,2) ;
③系统先假定可为 P2 分配资源,并修改 Available2 , Allocation2 和 Need2 向量, 由此形成的资源变化情况如下图所示:
④ 再利用安全性算法检查此时系统是否安全。如下图
由此进行的安全性检查得知,可以找到一个安全序列 {P2,P0,P1,P3,P4} 。
第四章
1.为什么要配置层次式存储器?
答:设置多个存储器可以使存储器两端的硬件能并行工作;采用多级存储系统,特别是 Cache 技术,是减轻存储器带宽对系统性能影响的最佳结构方案;在微处理机内部设置各 种缓冲存储器, 减轻对存储器存取的压力。 增加 CPU 中寄存器数量大大缓解对存储器压力。 2.可采用哪几种方式将程序装入内存?它们分别适用于何种场合? 答: ( 1)绝对装入方式,只适用于单道程序环境。 (2 )可重定位装入方式,适用于多道程序环境。
(3 )动态运行时装入方式,用于多道程序环境;不允许程序运行时在内存中移位置。 3.何谓静态链接?何谓装入时动态链接和运行时的动态链接?
P120
答:静态链接是指在程序运行前, 先将各目标模块及它们所需的库函数, 链接成一个完整的
装配模块,以后不再拆开的链接方式。
装入时动态链接是指将用户源程序编译后得到的一组目标模块,在装入内存时采用边装入边链接的链接方式。
运行时动态链接是指对某些目标模块的链接,是在程序执行中需要该目标模块时,才对它进行的链接。
4.在进行程序链接时,应完成哪些工作?
答:由链接程序 Linker 将编译后形成的一组目标模块, 以及它们需要的库函数链接在一起,形成一个完整的装入模块 Load Module 。主要工作是修改程序内的相对地址和修改目标程
序中的外部调用标号。
5.在动态分区分配方式中,应如何将各空闲分区链接成空闲分区链? 答:在每个分区的起始部分, 设置一些控制分区分配的信息,
以及用于链接各分区所用的前
向指针; 在分区尾部设置一个后向指针, 通过前后向链接指针, 将所有空闲分区链成一个双向链。当分区分配出去后,把状态位由 “0 改” 为 “1 。”
6.为什么要引入动态重定位?如何实现?
答:在程序执行过程中, 每当访问指令或数据时, 将要访问的程序或数据的逻辑地址转换成物理地址,引入了动态重定位;
具体实现方法是在系统中增加一个重定位寄存器,用来装入程序在内存中的起始地址, 程序执行时, 真正访问的内存地址是相对地址与重定位寄存器中的地址相加之和, 动态重定位。
7.在采用首次适应算法回收内存时,可能出现哪几种情况?应怎样处理这些情况? 答:在采用首次适应算法回收内存时可能出现
4 种情况:
从而实现
(1 )回收区前邻空闲区。 将回收区与前邻空闲区合并, 将前邻空闲区大小修改为两者之和。 (2 )回收区后邻空闲区。 将两区合并, 改后邻空闲区始址为回收区始址,
大小为两者之和。
(3 )回收区前后均邻空闲区。将三个分区合并,修改前邻空闲区大小为三者之和。 (4 )回收区前后均不邻空闲区。为回收区设置空闲区表项,填入回收区始址和大小并插入空闲区队列。
8.令 表示大小为 、地址为 x 的块的伙伴系统地址,试写出的通用表达式。答: 当 时, ;当 时 ,