操作系统思考题答案

更新时间:2023-12-05 09:29:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

操作系统部分思考题及简答题

【思考题】 1.如果系统中有N个进程,运行的进程最多几个,最少几个;就绪进程最多几个最少几个;等待进程最多几个,最少几个? 解:我们考虑在微机的操作系统中:

系统的调度管理进程至少是在运行状态。当有N个用户进程启动后,那么我们可以说用户的进程最多有一个在运行状态,最少有0个? 有了这个条件,我们不难推出就绪进程和等待进程可能的数量。

如果我们讨论的多CPU平台的使用的操作系统,就是另外一种情况了。 所以我想题目应该给出一个系统的运行环境。

2. 有没有这样的状态转换,为什么? 等待—运行; 就绪—等待 解:

进程状态转换:

在进程运行过程中,由于进程自身进展情况及外界环境的变化, 这三种基本状态可以依据一定的条件相互转换 就绪—运行 调度程序选择一个新的进程运行

运行—就绪 运行进程用完了时间片,运行进程被中断,因一高优先级进程处于就绪状态 运行—等待 当一进程必须等待时

? OS尚未完成服务

? 对一资源的访问尚不能进行 ? 初始化I/O 且必须等待结果 ? 等待某一进程提供输入 (IPC)

等待—就绪 当所等待的事件发生时 观察下面答案就明确了――>

运行 ? ? ? 就绪 ? 等待 进程的状态及其转换

1

操作系统部分思考题及简答题

3. 一个状态转换的发生,是否一定导致另一个转换发生,列出所有的可能

解:一般情况下,当一个状态发生转换,系统调度会将当前进程置入相应状态队列,再从相应的队列中唤醒相关进程…

4. 举3个日常生活中类似进程的例子 医院看病的过程:

等待医院开门――挂号――看病――划价――付钱――医院关门

5.要不要对缓冲区(临界资源)进行互斥操作?

解:对于是“只读”的临界资源,我们可以认为不需要互斥操作。但,一定有一个对“只读”临界资源进行维护的“写”操作,那么必须要考虑 缓冲区 的互斥操作。

2

操作系统部分思考题及简答题

6 . 用P.V操作解决下图之同步问题:

get copy put f

s t g get

复制一个记录: Cobegin get; copy; put; Coend

f s t g

初始状态 3,4,...,m 2 2 (1,2) g,c,p 4,5,...,m 3 3 (1,2,3) ?

设信息长度为m

3

操作系统部分思考题及简答题

f[1..m] of array

Smutex,Sempty,Sfull:=1,1,0; //(f,s,t,g均为单缓冲区,不需要互斥量Smutex,Tmutex) Tmutex,Tempty,Tfull:=1,1,0 Int x,y =1,1;

//设有m个记录长度,一次get一个记录 Process get {。。。

wait(Sempty); wait (f);

wait(Smutex); //wait(s); 和copy互斥 get 过程,f[x]? s (x号记录) ; x++;

signal(Smutex); //signal(s); signal(f); signal(Sfull); 。。。 }

process copy {…

wait(Sfull); wait(Tempty);

wait(Smutex); //和get 互斥 wait(Tmutex); //和 put 互斥

copy 过程, s?t (y号记录) y++;

signal(Tmutex); signal(Smutex); signal (Tfull); signal (Sempty); …}

process put {…

wait (Tfull); wait (g);

wait(Tmutex); //和 copy 互斥

put 过程 t?g[y] (y号记录); signal (Tmutex); signal (g);

signal (Tempty); …}

4

操作系统部分思考题及简答题

解决下面的问题,首先你要掌握P(wait)、V(signal)操作和互斥信号量的概念。

【作业】

1. 推广例子中的消息缓冲问题。

消息缓冲区为k个,有1个发送进程, n个接收进程,每个接收进程对发送来的消息都必须取一次,若有m个发送进程呢? 解: :)这是一个典型的题目,在我们设计网络上的“聊天室”时所必须要解决的问题。 为了便于理解,我们也可以把这个问题先类比成一个读者优先的“读者写者”问题,即: 先考虑只有一个消息缓冲区(单缓冲区)

1. 当消息缓冲区空时,n个读者(接收进程)等待,一个写者(发送进程)允许写入 2.当消息缓冲区满时,n个读者进行阅读(接收),此时和写者进程 互斥,直到所有读者

阅读完毕。

释放 读写互斥量 和 缓冲区。

『注意』这里我们不能简单的按照例子中的那样,将readcount 简单的计数。可以用下

面的方法:为了保证n个读者(接收进程)都必须读一次,我们可以用n bit 二进制位来作为 n个读者(接收进程)是否接收的标志(0-未读,1-已读),直到所有的位翻转成1后,释放 读写互斥量(Wmutex) 和 缓冲区。

在具体写代码时,我们可以使用一个数组readcount[n] 来表示n bit

array readcount[1..n] ={0,…,0} //n个接收进程 已读标志 Wmutex = 1; // 允许发送进程写数据到 临界缓冲区 Rmutex = 1; // 允许接收进程 修改 已读标志

读者i(接收进程i): while (true) { P(Rmutex);

For(int j:=1;j<=n ;j++)

{ if (readcount[j] = = 1) break; }

if (j>n) P (RWmutex); //n bit全0,第一个读者(接收进程)启动,禁止接收 readcount [i]=1; V(Rmutex); 读(接收) P(Rmutex);

For(j:=1;j<=n ;j++)

{ if (readcount[j] = = 0) break; }

if (j>n) V (RWmutex); // n bit全1,所有读者(接收进程)都读过了,

// 释放写互斥信号量

V(Rmutex); };

5

本文来源:https://www.bwwdw.com/article/y8at.html

Top