OS——进程简答题(1)
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)的更多相关文章
- 『Python题库 - 简答题』 Python中的基本概念 (121道)
		## 『Python题库 - 简答题』 Python中的基本概念 1. Python和Java.PHP.C.C#.C++等其他语言的对比? 2. 简述解释型和编译型编程语言? 3. 代码中要修改不可变 ... 
- 他答对一半(打一字)asp.net开源简答题项目
		先出个字谜: 他答对一半(打一字) 你猜出来了没? 可以到这个网址答题:http://m.hovertree.com/miyu/bjae/4fpmm2td.htm 看你的答案是否正确. 这是ASP.N ... 
- 《web前端设计基础——HTML5、CSS3、JavaScript》 张树明版 简答题简单整理
		web前端设计基础——HTML5.CSS3.JavaScript 简答题整理 第一章 (1)解释一下名词的含义:IP地址.URL.域名 iP定义了如何连入因特网,以及数据如何在主机间传输的标准. ... 
- [OS] 进程相关知识点
		进程概念: 1.程序在执行中 2.一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程,是系统进行资源分配和调度的独立单位. 进程与程序的差别: ·进程----动态, 程序----静态 ·进程 ... 
- Hibernate简答题
		简单题目 1.持久化对象的三种状态,代表含义. 自由状态(transient): 不曾进行持久化,未与任何Session相关联 持久化状态(persistent): 仅与一个Session相关联 游离 ... 
- [OS] 进程互斥
		对互斥的正确软件实现算法(面包店算法)是非常耗时的,现代的计算机系统都会提供简单的硬件指令,使用这些指令能够有效地解决临界区问题. 硬件提供一个TestAndSet指令,来实现原子指令的功能: boo ... 
- .net笔试题一(简答题)
		1. 简述 private. protected. public. internal 修饰符的访问权限答:private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该类 ... 
- Linux系统运维常见面试简答题(36题)
		1.请描述下linux 系统的开机启动过程开机加电BIOS自检———–>MBR引导———–>grub引导菜单———–>加载内核———–>启动init进程———–>读取in ... 
- 自制 os 极简教程1:写一个操作系统有多难
		为什么叫极简教程呢?听我慢慢说 不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了 ... 
随机推荐
- windows 系统下 Firefox hostadmin插件无法修改Host
			firefox hostAdmin插件无法修改Host了,提示“ write hosts file failed check permissions”,肯定是权限出现了问题??? 使用管理员权限打开c ... 
- oracle中rownum和rowid的区别
			rownum和rowid的区别总括: rownum和rowid都是伪列,但是两者的根本是不同的. rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownu ... 
- redis密码管理
			redis 默认密码是空,在应用中,通常需要设置redis的连接密码,可通过命名方式进行密码管理: 1.连接redis: [redis@hadooptest Downloads]$ cd redis- ... 
- POJ 1228 - Grandpa's Estate 稳定凸包
			稳定凸包问题 要求每条边上至少有三个点,且对凸包上点数为1,2时要特判 巨坑无比,调了很长时间= = //POJ 1228 //稳定凸包问题,等价于每条边上至少有三个点,但对m = 1(点)和m = ... 
- java基础:熟悉3种内部类的写法,重点匿名内部类的使用
			一.内部类定义 内部类(nested classes),面向对象程序设计中,可以在一个类的内部定义另一个类.嵌套类分为两种,即静态嵌套类和非静态嵌套类.静态嵌套类使用很少,最重要的是非静态嵌套类,也即 ... 
- jQuery2
			一.类型选择器 jQuery的类型选择器 选择器 说明 :button 选择所有按钮 :checkbox 选择所有复选框 :file 选择所有文件上传输入框 :header 选择所有标题元素(h1,h ... 
- 设置mysql 数据集为utf-8
			To set the default to UTF-8, you want to add the following to my.cnf [client] default-character-set= ... 
- 获取wifi信息
			最近有个项目需要获取手机附近wifi列表,查了许多资料发现,现在只能查到wifi的SSID,并且用到的是私有api,无法通过app store审核,这里记录一下,方便学习,新手勿喷,欢迎大神指教(wi ... 
- JavaScript-setInterval-周期性行定时器-倒计时
			<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ... 
- android中 EditTex t的 inputType 属性
			//文本类型,多为大写.小写和数字符号 android:inputType="none" android:inputType="text" a ... 
