1,叙述进程和程序的主要区别。

解:进程和程序是两个既有联系又有区别的两个概念,它们的主要区别如下:

(1)程序是指令的有序集合,其本身没有任何运行的含义,它是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。

(2)程序的存在是永久的。而进程是有生命期的,它因创建而产生,因调度而执行,因得不到资源而暂停,因撤消而消亡。

(3)程序仅是指令的有序集合。而进程则由程序,数据和进程数据块组成。

(4)进程与程序之间不是一一对应的,即同一个程序同时运行与若干不同的数据集合上,它将属于若干个不同的进程;而一个进程可以执行多个程序。

2,在测量控制系统中,数据采集任务把所采集的数据送入一单缓冲区;计算任务从该单缓冲区中取出数据进行计算。试写出利用信号量机制实现两者共享单缓冲区的同步算法。

解:在本题中,应设置两个信号量SF SE ,信号量SF表示缓存区中是否有可供打印的计算结果,其初值为0;信号量SE 用于表示缓冲区有无空位置存放新的信息,其初值为1。

本题的同步描述如下:

  semaphore se=;
semaphore sf=;
main()
{
cobegin
get();
compute();
coend
}
get()
{
while(采集工作未完成)
{
采集一个数据;
p(se);
将数据送入缓冲区中;
v(sf)
}
}
compute()
{
while(计算工作未完成)
{
p(sf)
从缓冲区中取出数据;
v(se);
进行数据计算;
}
}

伪代码

3、下图给出了四个进程合作完成某一任务的前趋图,试说明这四个进程间的同步关系,并用p,v操作作描述它。

解:图说明任务启动后S1先执行。当S1结束后,S2,S3可以开始执行。S2,S3完成后,S4才能开始执行。为了确保这一执行顺利,设3个同步信号量b2,b3,b4分别表示进程S2,S3,S4是否可以开始执行,其初值均为0。这四个进程的同步描述如下:

 semaphore b2=
semaphore b3=
semaphore b4=
Main()
{
Cobegin
S1();
S2();
S3();
S4();
Coend
}
S1()
{
V(b2);
V(b3);
} S2()
{
P(b2); .
V(b4)
}
S3()
{
P(b3) .
V(b4)
}
S4()
{
P(b4);
P(b4);
}

伪代码

4.某系统的进程状态转换图如下图所示,请说明:

(1) 引起各种状态转换的典型事件有哪些?

(2) 当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作一次状态转换,在什么情况下,当一个进程发生转换3时能立即引起另一个进程发生转换1?

(3) 试说明是否会发生下述因果转换:

2---->1

3---->2

4---->1

解:(1)在本题所给的进程状态图中,存在四种状态转换.

当进程调度程序从就绪队列中选取一个进程投入运行引起转换, 1;

正在执行的进程如因时间片用完而被暂停执行就会引起转换2;

正在执行的进程因等待的事件尚未发生而无法执行(如进程请求完成I/O)则会引起转换3;

当进程等待的事件发生时(如I/O完成)则会引起转换4.

(2) 如果就绪队列非空,则一个进程的转换3会立即引起另一个进程的转换1.这是因为一个进程发生转换3意味着正在执行的进程由执行状态变为阻塞状态1.这时处理机空闲,进程调度程序必然会从就绪队列选取一个进程并将他投入运行,因此只要就绪队列非空,一个进程的转换3能立即引起另一个进程的转换1.

(3)所谓因果转换指的是有两个转换,一个转换的发生会引起另一个转换的发生,前一个转换称为因,后一个称为国,这两个转换称为因果转换,当然这种因果关系并不是什么时候都能发生,而是在一定条件下才会发生.

2---->1当进程发生转换2时,就必然引起另一进程的转换1.因为当发生转换2时,正在执行的进程从执行状态转变为就绪状态,进程调度程序必然会从就绪队列选取一个进程投入运行,即发生转换1.

3---->2某个进程的转换3决不可能引起另一进程发生转换2,这是因为当前执行进程从执行状态变为阻塞状态,不可能又从执行状态转变为就绪状态,

4---->1当处理机空闲且就绪队列为空是,某一进程的转换4就会引起该进程的转换1,因为此时从阻塞状态变为就绪状态,因而调度程序就会将就绪队列中的此进程投入运行

5 在单处理机的分时系统中,分配给进程P的时间片用完后,系统进行切换,结果调度到的仍然是进程P,有可能出现上述情形吗?如果可能请说明理由?

解,有可能出现上述情况。例如,若在进程P时间片用完后,被追回到就绪队列时,就绪队列为空,这样进程P 就是就绪队列中唯一的一个进程,于是调度程序选种的进程必然是进程P,

又如在按优先级调度的系统中,就绪队列按进程优先级排列,在进程P时间片用完后回到就绪队列时,若其优先级高于当前就绪队列中的其它进程,则它排在就绪队列之首,从而再次被调度程序选种并投入运行。

6  桌上有一个空盘,允许存放一只水果。爸爸可向盘中放苹果,也可以向盘中放橘子,儿子专等吃盘中的橘子,女儿专等吃盘中的苹果。规定当盘空时只能放一只水果供吃着取用,请用p,v原语实现爸爸,儿子,女儿三个并发进程的同步。

解,在本题中,应设置三个信号量S,SO,Sa,信号量S表示盘子是否为空,

信号量So表示盘子是否有橘子,信号量Sa表示盘子是否有苹果,其初值为0。同步描述如下:

 semaphore s=;
semaphore sa=;
semaphore so=;
main()
{
cobegin
father();
son();
daughter();
coend
}
father()
{
while()
{
p(S)
将水果放入盘中:
if(放入的是橘子) v(So);
else
v(Sa);
}
}
son()
{
while()
{
p(So)
从盘子中取出橘子;
v(s);
吃橘子;
}
}
daughter()
{
while()
{
p(Sa)
从盘子中取出橘子;
v(s);
吃苹果;
}
}

伪代码

7  (上海交通大学1996年试题)哲学家甲请哲学家乙,丙,丁到某处讨论问题,约定全体到齐后开始讨论;在讨论的间隙四位哲学家进餐,每位进餐是都需要使用刀,叉各一把,餐桌上的布置如图2.9所示。请用信号量及p,v原语操作说明四位哲学家的同步,互斥过程。

解,在本题中,应设置四个信号量fork1,fork2,knife1,knife2,其初值均为1,分别表示叉1,叉2,刀1,刀2是否可用。同步描述如下:(注意和5位哲学家就餐问题的区分,同时注意每次都是先拿刀后拿叉)

 semaphore fork1=;
semaphore fork2=;
semaphore knife1=;
semaphore knife2=;
main()
{
cobegin
Pa();
Pb();
Pc();
Pd();
coend
}
Pa()
{
while()
{
p(knife1);
P(fork1);
进餐;
V(knife1);
V(fork1);
讨论问题;
}
}
Pb()
{
while()
{
p(knife2);
P(fork1);
进餐;
V(knife2);
V(fork1);
讨论问题
}
}
Pc()
{
while()
{
p(knife2);
P(fork2);
进餐;
V(knife2);
V(fork2);
讨论问题;
}
}
Pd()
{
while()
{
p(knife1);
P(fork2);
进餐;
V(knife1);
V(fork2);
讨论问题
}
}

伪代码

8.某数据库有一个写进程,多个读进程,他们之间读,写操作的互斥要求是:写进程正在写该数据库时不能有其他进程读该数据库,读进程之间不互斥,可以同时读该数据库.请用信号量P.V操作描述这一组进程的工作进程.

解:在本题中,允许读进程同时读数据库,但写进程正在写数据库时不允许其他进程读数据库,也不允许其他进程写该数据库.为了解决读,写进程之间的同步,应设置两个信号量和一个共享变量:读互斥信号量rmutex,用于使读进程互斥地访问共享变量count,其初值为1;写互斥信号量wmutex,用于实现写进程与读进程的互斥及写进程与写进程的互斥,其初值为1;共享变量count,用于纪录当前正在读数据库的读进程数目,初值为0.其工作、过程如下:

 semaphore rmutex=;
semaphore wmutex=;
int count=;
main()
{
cobegin
reader();
writer();
coend;
}
reader()
{
while()
{
p(rmutex);
if (count==) p(wmutex);
count++;
v(rmutex);
读数据库;
p(rmutex);
count--;
if (count==) v(wmutex);
v(rmutex);
}
} writer()
{
while ()
{
p(wmutex);
写数据库;
v(wmutex);
}
}

伪代码

在本题中,要注意对信号量rmutex意义的理解.rmutex是一个互斥信号量,用于使读进程互斥地访问共享变量count,该信号量并不表示读进程的数目,表示读进程的数目的是共享变量count.当一个读进程要读数据库时,应将读进程计数count加1;如果此前数据库无读进程,还应对写进程互斥信号量wmutex做p操作,这样,若数据库中无写进程,则通过p操作阻止写进程写,若数据库有无写进程,则通过p 操作让读进程等待.

9  (华中理工大学1999年试题)设公共汽车上,司机和售票员的活动分别表示是:

司机的活动:启动车辆;

正常行车;

到站停车;

售票员的活动:

在汽车不断的到站,停车,行使过程中,这两个活动有什么 同步关系?用信号量及p,v操作实现它们的同步。

解,在汽车行使过程中,司机活动和售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开始信号后开始启动车辆,在汽车正常行使工程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客上下车。因此司机启动车辆的动作必须与售票员关车取得同步,售票员开车门的动作也必须与司机停车的动作取得同步,

在本题中,应设置两个信号量,S1,S2,S1表示是否允许司机启动车辆,其初值为0,S2表示是否允许售票员开门,其初值为0。用p,v原语描述如下:

 semaphore S1=;
semaphore S2=;
main()
{
cobegin
driver();
busman();
coend
} driver()
{
while()
{
p(S1);
启动车辆;
正常行车;
到站停车;
V(s2);
}
}
busman()
{
while()
{ 关车门;
v(s1);
售票;
p(s2);
开车门;
上下乘客;
}
}

用p,v操作来控制现实生活中的操作流程是一类常见的试题。这类试题要求解题者能将生活中的控制流程用形式化的方式表达出来。

11.设有一个发送者进程,其流程图如图2.10  所示. S 是用于实现进程同步的信号量,MUTEX 用于实现进程互斥的信号量.试问流程图中的  A B  C  D 四框中应填写什么?假定缓冲区有无限多个, S 和 MUTEX  的初值应为多少?

解:由上述分析可知, A B  C  D 四框应分别填入:

A框       P(MUTEX)

B框       V(MUTEX)

C框       P(S)

D框       P(MUTEX)

开始时,消息链上没有可供接收的信息,所以 S 的初值为0 ;互斥信号量 MUTEX  的初值应为1.

OS——进程简答题(1)的更多相关文章

  1. 『Python题库 - 简答题』 Python中的基本概念 (121道)

    ## 『Python题库 - 简答题』 Python中的基本概念 1. Python和Java.PHP.C.C#.C++等其他语言的对比? 2. 简述解释型和编译型编程语言? 3. 代码中要修改不可变 ...

  2. 他答对一半(打一字)asp.net开源简答题项目

    先出个字谜: 他答对一半(打一字) 你猜出来了没? 可以到这个网址答题:http://m.hovertree.com/miyu/bjae/4fpmm2td.htm 看你的答案是否正确. 这是ASP.N ...

  3. 《web前端设计基础——HTML5、CSS3、JavaScript》 张树明版 简答题简单整理

    web前端设计基础——HTML5.CSS3.JavaScript 简答题整理 第一章 (1)解释一下名词的含义:IP地址.URL.域名   iP定义了如何连入因特网,以及数据如何在主机间传输的标准. ...

  4. [OS] 进程相关知识点

    进程概念: 1.程序在执行中 2.一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程,是系统进行资源分配和调度的独立单位. 进程与程序的差别: ·进程----动态, 程序----静态 ·进程 ...

  5. Hibernate简答题

    简单题目 1.持久化对象的三种状态,代表含义. 自由状态(transient): 不曾进行持久化,未与任何Session相关联 持久化状态(persistent): 仅与一个Session相关联 游离 ...

  6. [OS] 进程互斥

    对互斥的正确软件实现算法(面包店算法)是非常耗时的,现代的计算机系统都会提供简单的硬件指令,使用这些指令能够有效地解决临界区问题. 硬件提供一个TestAndSet指令,来实现原子指令的功能: boo ...

  7. .net笔试题一(简答题)

    1. 简述 private. protected. public. internal 修饰符的访问权限答:private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该类 ...

  8. Linux系统运维常见面试简答题(36题)

    1.请描述下linux 系统的开机启动过程开机加电BIOS自检———–>MBR引导———–>grub引导菜单———–>加载内核———–>启动init进程———–>读取in ...

  9. 自制 os 极简教程1:写一个操作系统有多难

    为什么叫极简教程呢?听我慢慢说 不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了 ...

随机推荐

  1. Json格式转化为string格式

    今天在学习Jsonp的时候,想通过服务端返回一段json数据,因为使用的服务端是NodeJs,那么就需要在js文件中实现返回json.(这里不懂的同学,可以先了解一下NodeJs的基础概念,在这里,我 ...

  2. 常用JS汇总

    01. 取文档url参数值 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + &q ...

  3. 简单验证码实现(Ajax)

    前端页面: <!--验证码输入框 --> <input type="text" class="entry" value="" ...

  4. HDU 1540 Tunnel Warfare(线段树+区间合并)

    http://acm.hdu.edu.cn/showproblem.php?pid=1540 题目大意:抗日战争期间进行地道战,存在n个村庄用地道连接,输入D表示破坏某个村庄(摧毁与其相连的地道, 包 ...

  5. Oracle Database常用补丁集Patch号及各版本PSU

    Oracle Database常用补丁集Patch号及各版本PSU------------------------------------------------------------------- ...

  6. 简单介绍智能DNS解析+双线路接入

    导读:在讨论这个问题,其中群友老孤同志也提供了不少非常有参考价值的资料,所以我们再把这些资料再整理一次,从比较底层的技术原理上重新进行一次分析.   我们知道,因为南电信北网通现象的存在,我们的服务器 ...

  7. angualrjs

    $rootScope是angularJS中最接近全局作用域的对象.在$rootScope上附加太多业务逻辑并不是好主意,这与污染JavaScript的全局作用域是一样的. $scope对象就是一个普通 ...

  8. Til the Cows Come Home

    Description Bessie is out in the field and wants to get back to the barn to get as much sleep as pos ...

  9. asp.net 文件批量移动重命名

    最近闲时写了个批量移动重命名文件的工具 点击下载工具

  10. Java将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

    java.io 类 BufferedWriter java.lang.Object java.io.Writer java.io.BufferedWriter BufferedWriter publi ...