操作系统2011年3班期中小测验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统2011年3班期中小测验

1. 综合(25')

请简述计算机系统启动,直到运行第一个用户应用程序,然后派生出第二个线程的整个过程中的可能的步骤,并分析每一个步骤的代价(大/中/小),说明理由。

2. 进程与线程(25')

假设线程有运行(running)、就绪(ready)、等待(waiting)和休眠(suspended)四种状态。请分别说明什么时候会发生以下状态转换:

a) 运行==> 等待(4')

b) 就绪==> 运行(4')

c) 等待==> 就绪(4')

d) 等待==> 休眠(4')

e) 请证明SJF调度策略在非抢占(non-preemptive)情况下是最优的(9')。

3. 进程间同步与死锁(30')

现有四个进程P0, P1, P2, P3,三类资源A, B, C,各有7、5、5个。资源分配矩阵如下:

A B C

P0 0 1 0

P1 2 0 0

P2 3 0 3

P3 2 2 2

资源请求矩阵如下:

A B C

P0 0 0 0

P1 2 0 2

P2 0 0 0

P3 1 0 0

可用资源向量为:

A B C

0 2 0

a) 请问:目前是否存在死锁?如果不存在死锁,请给出一个能够让所有进程执行完的序列(8')

假设有一个科学计算进程scicomp,它每次从任务队列中获得一个计算任务,然后进行计算:void scicomp ()

{

while (true)

{

get_task ();

comp ();

}

}

任务队列中的任务数存放在全局变量m中:

int m;

当任务队列为空时,它唤醒另一个进程taskassign,分配一些计算任务,放在队列中:

void taskassign ()

{

while (true)

{

m = put_task ();

}

}

其中,put_task ()返回的是放入队列的任务个数。

假设scicomp在队列为空时不能执行get_task(),而taskassign只能在队列为空时执行,队列的大小没有限制。要求:

b) 使用信号量,并修改以上scicomp和taskassign代码,使得程序能够满足以上条件(8');

c) 说明为什么你的程序是对的(4')

d) 请使用二元信号量(binary semaphore,即值只能为0或1的信号量)实现计数信号量(counting semaphore,取值可为任意整数)(10')。

4. 内存管理(20')

a) 请简述采用TLB和2级页表时,内存访问的步骤(10');

b) 请比较反向页表(inverted page table)和散列页表(hashed page table)的优缺点(10')。

相关文档
最新文档