操作系统-进程管理

操作系统-进程管理
操作系统-进程管理

操作系统----进程管理

引言:

处理机管理是操作系统的基本管理功能之一,它所关心的是处理机的分配问题。也就是说把CPU (中央处理机)的使用权分给某个程序,通常把这个正准备进入内存的程序称为作业,当这个作业进入内存后我们把它称为进程。处理机管理分为作业管理和进程管理两个阶段去实现处理机的分配,常常又把直接实行处理机时间分配的进程调度工作作为处理机管理的主要内容。

进程通常具有三种状态:运行状态(正在使用CPU)、阻塞状态(等待输入/输出)和就绪状态(等待分配CPU)。

进程的引入:

1,程序的顺序执行

(1)顺序性

(2)封闭性

程序执行得到的最终结果由给定的初始条件决定,不受外界因素影响;

(3)可再现性

2,资源共享

3,程序的并发执行及其特性

(1)什么是并发执行

尽管多道程序的并发执行在宏观上是同时进行的,但在微观上仍是顺序执行的。第二种并发执行是在某到程序的几个程序段中,包含着一部分可以同时执行或顺序颠倒执行的代码。

所谓并发执行,是为了增强计算机系统的处理能力和提高资源利用率所采取的一种同时操作技术。

程序的并发执行总结为:一组在逻辑上互相独立的程序或程序段在执行过程中,其执行时间在客观上互相重叠,即是一个程序段的执行尚未结束,另一个程序段的执行已经开始的这种执行方式。

3.1.2进程的定义

需要一个能描述程序的执行过程且能用来共享资源的基本单位,这个基本单位被称为进程。

可以这样定义进程:并发执行的程序在执行过程中分配和管理资源的基本单位。

进程和程序是两个既有联系又有区别的概念,它们的区别和联系可简述如下:

(1)进程是一个动态的概念,而程序是一个静态概念。程序时指令的有序集合,没有任何执行的含义。而进程则强调执行过程,它动态地被创建,并被调度执行后消亡;

(2)进程具有并发特征,而程序没有。

(3)进程是竞争计算机系统资源的基本单位,从而其并发性受到系统自己的制约。

(4)不同的进程可以包含同一程序,只要该程序所对应的数据集不同。

进程与程序的区别和相互关系:

(1)动态性和静态性。

(2)从结构上看每个进程的实体都是由程序段和相应的数据段两部分构成的,这一特征与程序的含义相近。

(3)一个进程可以涉及到一个或几个程序的执行;反之一程序可以对应多个进程,即同一程序段可在不同数据集合上运行,可构成不同的进程。

(4)并发性。

(5)进程具有创建其他进程的功能。

(6)操作系统中的每一个程序都是在一个进程现场中运行的。

3.2进程的描述

一个进程是一个程序对某个数据集描述,是分配资源的基本单位。

进程的静态描述由三个部分组成:

进程控制块PCB、有关程序段、该程序段对其进行操作的数据结构集;

PCB包含一个进程的描述信息、控制信息及资源信息;

进程的程序部分描述进程所要完成的功能;

数据结构集是程序在执行时必不可少的工作区和操作对象;

进程控制块的作用:

进程控制块是进程存在的标志,当系统或父进程创建一个进程时,实际上就是为其建立一个进程控制块。

进程控制块既能标识进程的存在,又能刻画出进程的动态特征,它是一个进程仅有的被系统真正感知的部分。对操作系统而言,所有进程控制块将构成并发执行控制和维护系统工作的依据。

3.3进程状态及其转换

3.3.1进程状态

在进程的生命周期内,一个进程至少具有5中基本状态,它们是:

初始态、执行状态、等待状态、就绪状态、终止状态;

(1)运行状态:进程正在处理机上运行的状态,该进程已获得必要的资源,也获得了处理机,用户程序正在处理机上运行。

(2)阻塞状态:进程等待某种事件完成(例如,等待输入/输出操作的完成)而暂时不能运行的状态,处于该状态的进程不能参加竞争处理机,此时,即使分配给它处理机,它也不能运行。(3)就绪状态:该进程运行所需的一切条件都得到满足,但因处理机资源个数少于进程个数,所以该进程不能运行,而必须等待分配处理机资源,一旦获得处理机就立即投入运行。

在单CPU系统中,任一时刻处于执行状态的进程只能有一个。只有处于就绪状态的进程经调度选中之后才可以进入执行状态;

状态变化:

(1)就绪状态变化到运行状态。

(2)运行状态变化到就绪状态。

(3)运行状态变化到阻塞状态。

(4)阻塞状态变化到就绪状态。

3.4进程控制

进程控制:就是系统使用一些具有特定功能的程序段来创建、撤销进程以及完成进程各个状态的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的;

原语:把系统状态下执行的某些具有特定功能的程序段称为原语;

原语分为两类:

一类是机器指令级的,其特点是执行期间不允许中断,它是一个不可分割的单位;

另一类是功能级的,其特点是作为原语的程序段不允许并发执行;

通常把进程控制用程序做成原语:

用于进程控制的原语有:创建原语、撤销原语、阻塞原语、唤醒原语;

3.7进程通信

3.7.1 临界资源和临界区

把不允许多个并发进程交叉执行的一段程序称为临界部分或临界区

临界区是由属于不同并发进程的程序段共享公用数据或共用变量而引起的。

因此,临界区也可以被称为访问公用数据(临界资源)的那段程序。

3.7.2 进程的通信方式之一——同步与互斥

互斥:一组并发进程中的一个或多个程序段,因共享某一公有资源而导致他们必须以一个不允许交叉的单位执行,也就是说,不允许两个以上的共享资源的并发进程同时进入临界区称为互斥;

一组并发进程互斥执行时必须满足如下四条准则:

(1)不能假设各并发进程的相对执行速度;

(2)并发进程中的某个进程不在临界区是,它不阻止其他进程进入临界区;

(3)并发进程中的若干个进程申请进入临界区时,只能允许一个进程进入;

(4)并发进程中的某个进程申请进入临界区时开始,应在有限时间内得以进入临界区;

一、互斥的加锁实现

对临界区加锁以实现互斥,当某个进程进入临界区之后,它将锁上临界区,直到它退出临界区为止;

二、信号量和P、V原语

1,信号量管理相应临界区的公有资源,它代表可用资源实体;

在操作系统中,信号量sem是一整数,在sem大于等于零时代表可供并发进程使用的资源实体数,但sem小于零时表示正在等待使用临界区的进程数;

2,P、V原语

p原语的主要动作:

(1)sem减1;

(2)若sem减1后仍大于或等于零,则P原语返回,该进程继续执行;

(3)若sem减1后小于零,则该进程被阻塞后加入到与该信号相应的队列中,然后转进程调度;v原语的主要动作:

(1)sem加1;

(2)若相加结果大于零(表示没有等待调用的进程),v原语停止执行,该进程返回调用处,继续执行;

(3)若相加结果小于或等于零,则从信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度;

注意:P,V操作都必须以原语实现,且在P,V原语执行期间不允许中断发生;

例题解析:

问:使用p,v原语和加锁法都可以实现并发进程的互斥

(1)p,v原语和加锁法实现互斥有何异同?

加锁法实现互斥是这样的:当某个进程进入临界区之后,它将锁上临界区,直到它退出临界区为止。并发进程在申请进入临界区时,首先测试该临界区是否是上锁的,如果该临界区已经被锁住,则该进程要等待该临界区开锁之后才有可能获得临界区。

而p,v原语实现互斥是这样的:为临界资源设置一初值为1的信号量,该信号量只能由p,v 原语操作改变。并发进程在申请进入临界区时,首先执行p操作,如果临界区已经被占用,则进程阻塞等待被一个v操作唤醒;否则允许进入进入临界区。在退出临界区时,则执行v操作,若有其他进程等待使用该临界资源,则唤醒队首的进程;

加锁操作与p,v原语实现互斥的不同主要有:

1)加锁操作咋临界资源已经被占用的情况下,仍要循环测试锁的状态,这将耗费大量的CPU时间

2)加锁操作部将等待临界资源的进程按申请次序排队,故有可能造成不公平的现象;

(2)使用加锁法实现互斥时,有可能在进程使用临界区时造成不公平现象(即是某个进程一直占有临界区,其他进程永远无法使用)是找出一个不公平现象的例子,并分析产生不公平现象的原语;

例子如下:如果有P1进程已通过加锁操作进入临界区内执行,则当p2进程申请进入对应的临界区时,将因临界区已上锁而处于忙等状态,即p2并不会阻塞排队。当p1退出临界区时,它只需将临界区解锁,并不像v操作那样按次序唤醒等待进程;而且系统也不一定要立即进程调度;如果p1进程继续运行并再次申请进入临界区,则因临界区已解锁,它又可顺利进入临界区。这将是p1进程一直占用临界区,而p2进程则长期等待,从而造成不公平的现象;

习题:

设有n个进程共享一个资源,对于如下两种:

(1)如果每次只允许一个进程使用该资源;

(2)如果每次允许m个进程(m

解析:两种情况下所采用的互斥信号量的初值不同,在前一种情况下,信号量的初值应设置为1,

互斥信号量的实现与资源的使用有关,这种情况是一次只能一个进程使用该临界资源;

此时信号量的变化范围是:[1-n,1];

后一种情况是,信号量的初值应设置为m,而信号量的变化范围为【m—n,m】

感悟:因此进程间的互斥关键在于公有信号量的设计上,这与进程同步不一样,在进程同步中是进程间的协作关系,这时我们考虑的是各个私有进程间的通信问题,此时设置的信号量是私有的;

因此在对并发程序的设计时,对于公有变量(即是公有数据)一定要加锁实现,以期实现进程的互斥操作

进程同步:

异步环境下的一组并发进程,因直接制约而相互发送消息而进行互相合作,互相等待,使得各进程按一定的速度执行的过程称为进程间的同步;

具有同步关系的一组并发进程称为合作进程,合作进程间互相发送的信号称为消息或事件;

描述进程同步的实现方法:

wait(消息名)表示进程等待合作进程发来的消息

signal(消息名)表示向合作进程发送消息;

例题:试从物理观念上来说明记录性信号量wait与signal操作?

从物理观念上来看,一个记录型信号量S可以用来表示一类临界资源的使用情况,S.value的初值表示系统中该类资源的总数;在使用过程中,若S.value>0,则表示系统中还有S.value个该类资源处于空闲状态。对它每次wait操作,意味着进程请求一个单位的该类资源,因此描述为S.value--;当S.value<0表示资源已经分配完毕,因此进程应将自己插入S.L队列中,并调用block 原语将自己阻塞,此时S.value的绝对值表示因申请该种资源而被阻塞的进程的个数。对信号量的每次signal操作,表示执行进程释放一个单位的资源,因此要执行S.value++操作将资源数目加一;若果加1后仍是S.value<=0,则表示仍有等待资源的进程处于阻塞状态,故应调用wakeup 原语唤醒S.L队列中的一个进程;

私用信号量

一般来说,也可以把各进程之间发送的消息作为信号量看待。

这里的信号量只与制约进程及被制约进程有关而不是与整组并发进程有关;因此,称该信号量为私有信号量。

一个进程Pi的私用信号量semi是从制约进程发送来的进程pi的执行条件所需要的消息;

分析问题的步骤:

1、分析问题:取数进程在缓冲区队列全部为空时不能开始运行;而送数进程在缓冲区全部满时也不能运行。因此这是一个典型的同步问题。

2、信号量设计:同步问题的信号量个数与进程个数相关,由于有两类进程互相合作,故设计S1表示空缓冲区给P1使用,初值为n,设计S2表示满缓冲区给P2使用,初值为0。

-------------------------------------------------------------------------------------------------------------------------------

技术解析:

对于并发进程要考虑进程间的互斥问题,其一般使用公有信号量;

对异步的并发进程要考虑进程间的同步问题;其一般使用私有信号量;

进程间的同步和互斥最重要的是进程间是如何进行通信的,这也是设计并发进程同步和互斥的关键问题所在,进程执行前首先要申请临界区资源,之后再做必要地操作,这些都考虑到了并发程序的互斥问题,再者:程序执行完毕后,要通知其最近的合作进程,任务已经完成,合作进程可以执行;

因此在设计程序时,只要考虑上面两个问题之后,只要能分析清楚,各个进程间的协作关系,问题便可迎刃而解了;

必须充分认识到进程并发的关键性;

问题的总结:在考虑这类问题时,综合考虑进程互斥,进程同步,进程间的死锁问题,而进程的死锁问题是最值得深入考虑的,在哲学家的问题中,对进程的死锁提出几种解决方法,有值得研究的价值;

-------------------------------------------------------------------------------------------------------------------------------

3.7.3 两个经典的同步/互斥问题

生产者与消费者问题:

把并发进程的同步和互斥问题一般化,可以得到哦一个抽象的一般模型,即是生产者-消费者问题。

由于有界缓冲区是临界资源,因此,各生产者进程和各消费者进程必须是互斥执行;

信号量的设置:

(1)公用信号量mutex:初值为1,表示有界缓冲区的个数,用于实现临界区互斥(保证生产者进程和消费者进程之间的互斥)。

(2)生产者私用信号量empty:初值为n,指示空缓冲块数目。

(3)消费者私用信号量full:初值为0,指示满缓冲块数目;

deposit(data):生产者模块

b egin

p(empty)

p(mutex)获取临界资源,这里是先申请有界缓冲区,在申请临界资源,两者的顺序不能颠倒;一般说来对公用信号原语必须紧临临界区;对于临界资源要设置公有信号量;

送数据到缓冲区某单元

v(full)

v(mutex)释放临界资源

end

remove(data)

begin

p(full)

p(mutex)

取缓冲区中某数据单元

v(empty)

v(mutex)

End

注意:p,v原语的操作此需要非常小心,一般说来,由于v原语是释放资源的,所以可以一任意次序出现,但P原语则不然,如果次序混乱,将会造成进程之间的死锁。

-----------------------------------------------------------------------------------------------------------------------------------------

习题解答:

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

解析:要用p,v操作实现上述进程的同步,可设置两个信号量;

Empt 对应空闲的缓冲区,初值为1;

Full 对应满缓冲区,初值为0;

在进程同步中,一定要先找到同步的进程,根据缓冲区的个数设置相应的私有信号量;

collect (){

while(1){

collect data;

P(empty); //申请资源,此是缓冲区只能做输入数据操作;

add data to buffer;

V(full); //此是为了实现进程间的通信,full增加表示有新的数据进入}

}

computer(){

while(1){

P(full); //从数据数据缓冲区中去走数据

remove data from buffer;

V(empty)

compute;

}

}

感悟:进程的同步其实是两个进程间的相互通信过程,这个通信的依托就是各自的私有信号量,在上面的例子中,前一个进程先要申请缓冲区,再进行相应的操作,最后释放缓冲区时,告知合作进程数据进入缓冲区v(full)

相应的另一个进程也是以这种方式来占据缓冲区,并告知其合作进程的;

例题:有3个并发进程R、M、P,他们共享同一缓冲区。进程R负责从输入设备读信息,每读入一个记录后,就把它放进缓冲区中;进程M在缓冲区中加工读入的数据;进程p把加工后的技术打印输出。读入的记录进过加工输出后,缓冲区又可以存放下一个记录;

解析:此题实际上是生产者和消费者的变形问题。这实际上是三个合作进程间的通信问题;

根据以上的结论,对于进程同步的问题,找出合作进程的个数,并分别设置相应的私有信号量;Empty 对应进程R,其开始要检测空闲缓冲区,初值为1;

Full 对应进程M ,代表待加工的数据记录个数,初值为0;

Full2 对应进程P,对应缓冲区已经加工的数据,(即是待打印的数据记录个数),初值为0;

R:

while(1){

P(empty)

从输入设备读记录到缓冲区中;

v(full);通知M进程已有记录进入到缓冲区中;

}

M:

while(2){

P(full);

在缓冲区中加工记录;

V(full2);通知P进程,数据已经加工完毕;

}

P:

while(1){

P(full2)

加工后的数据记录打印输出;

V(empty);通知R进程数据已经取出并打印

}

感悟:进程同步的操作,在操作前先要申请资源,即是利用P操作实现;在进行必要地操作后,要通知合作进程任务已完成,这是就执行v操作,以实现进程间的通信;

例题:哲学家就餐变型问题(主要解决的问题是如何解决进程间的死锁问题)

哲学家甲请哲学家乙、丙、丁到某处讨论问题,约定全体到齐后开始讨论;在讨论的间隙四位哲学家进餐,没人进餐时都必须使用刀、叉各一把,餐桌上的布置如果所示,请用信号量及P,v操作说明这四位哲学家的同步、互斥过程;

解析:进程互斥:刀和叉都是临界资源,需要为他们设置对应的公有信号量knife1,knife2、fork1.,fork2;初值都为1;

只有当哲学家到齐后,才可以开始讨论问题,故需设置另外4个初值为0的信号量a,b,c,d;这个题目的关键是公用资源的抢夺问题:四个进程都涉及到对临界资源的抢夺问题,显而易见,两符刀、叉只能同时供两个哲学家就餐,为了不发生进程间的死锁,必须做好适当的互斥操作。因此我们可以先设计:

(1)哲学家就餐必须先取得刀,才能再去争夺叉;

(2)就餐完毕先释放刀,在释放叉;

--------------------------------------------------------------------------------------------------------------------------------------------

3.7.4 结构化的同步/互斥机制——管程

3.7.5 进程的通信方式之二——消息缓冲

死锁问题:

3.8.1 死锁产生的原因和必要条件

所谓死锁,是指各并发进程彼此互相等待对方所拥有的资源,且这些并发进程在得到对方资源之前不会释放自己所拥有的资源;

死锁的起因是并发进程的资源竞争。产生死锁的根本原因在于系统提供的资源个数少于并发进程所要求的该类资源数;

产生死锁有四个必要条件:

(1)互斥条件。

(2)不剥夺条件。

(3)请求和保持条件。

(4)环路等待条件。

3.8.2 预防死锁

1.破坏“请求与保持条件”

2.破坏环路条件

3.资源受控动态分配

3.8.3 发现死锁

3.8.4 解除死锁

1.资源剥夺法

(1)还原算法。即恢复计算结果和状态。

(2)建立检查点主要是用来恢复分配前的状态。2.撤消进程法

(1)程序的优先数,即被撤消进程的优先数。(2)作业类的外部代价

(3)运行代价

计算机操作系统进程调度实验研究报告

计算机操作系统进程调度实验研究报告

————————————————————————————————作者:————————————————————————————————日期:

操作系统实验题:设计一若干并发进程的进程调度程序 一、实验目的 无论是批处理系统、分时系统还是实时系统,用户进程数一般都大于处理机数,这将导致用户进程互相争夺处理机。这就要求进程调度程序按一定的策略,动态地把处理及分配给处于就绪队列中的某一进程,以使之执行。进程调度是处理机管理的核心内容。本实验要求采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念。并体会了优先数和先来先服务调度算法的具体实施办法。 二、实验要求 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 三、实验内容 进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法(将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理)。 每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。 四、实验算法流程

操作系统实验-进程控制

实验一、进程控制实验 1.1 实验目的 加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux 系统中进程创建与控制有关的系统调用的编程和调试技术。 1.2 实验说明 1)与进程创建、执行有关的系统调用说明进程可以通过系统调用fork()创建子进程并和其子进程并发执行.子进程初始的执行映像是父进程的一个复本.子进程可以通过exec()系统调用族装入一个新的执行程序。父进程可以使用wait()或waitpid()系统调用等待子进程的结束并负责收集和清理子进程的退出状态。 fork()系统调用语法: #include pid_t fork(void); fork 成功创建子进程后将返回子进程的进程号,不成功会返回-1. exec 系统调用有一组6 个函数,其中示例实验中引用了execve 系统调用语法: #include int execve(const char *path, const char *argv[], const char * envp[]); path 要装入 的新的执行文件的绝对路径名字符串. argv[] 要传递给新执行程序的完整的命令参数列表(可以为空). envp[] 要传递给新执行程序的完整的环境变量参数列表(可以为空).

Exec 执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再返回到调用进程了。如果exec 调用失败,它会返回-1。 wait() 系统调用语法: #include #include pid_t wait(int *status); pid_t waitpid(pid_t pid,int *status,int option); status 用 于保留子进程的退出状态 pid 可以为以下可能值: -1 等待所有PGID 等于PID 的绝对值的子进程 1 等待所有子进程 0 等待所有PGID 等于调用进程的子进程 >0 等待PID 等于pid 的子进程option 规 定了调用waitpid 进程的行为: WNOHANG 没有子进程时立即返回 WUNTRACED 没有报告状态的进程时返回 wait 和waitpid 执行成功将返回终止的子进程的进程号,不成功返回-1。 getpid()系统调用语法: #include #include pid_t getpid(void); pid_t getppid(void); getpid 返回当前进程的进程号,getppid 返回当前进程父进程的进程号 2)与进程控制有关的系统调用说明可以通过信号向一个进程发送消息以控制进程的 行为。信号是由中断或异常事件引发的,如:键盘中断、定时器中断、非法内存引

操作系统实验报告--实验一--进程管理

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2、系统资源(r1…r w),共有w类,每类数目为r1…r w。随机产生n进程P i(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图

2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0;

第二章 操作系统进程(练习题标准答案)

第二章操作系统进程(练习题答案)

————————————————————————————————作者:————————————————————————————————日期: 2

第二章进程管理 1.操作系统主要是对计算机系统全部 (1) 进行管理,以方便用户、提高计算机使 用效率的一种系统软件。它的主要功能有:处理机管理、存储管理、文件管理、 (2) 管 理和设备管理等。Windows和Unix是最常用的两类操作系统。前者是一个具有图形界面的 窗口式的 (3) 系统软件,后者是一个基本上采用 (4) 语言编制而成的 的系统软件。在 (5) 操作系统控制下,计算机能及时处理由过程控制反馈的信息 并作出响应。 供选答案: (1): A. 应用软件 B. 系统软硬件 C. 资源 D. 设备 (2): A. 数据 B. 作业 C. 中断 D. I/O (3): A. 分时 B. 多任务 C. 多用户 D. 实时 (4): A. PASCAL B. 宏 C. 汇编 D. C (5): A. 网络 B. 分时 C. 批处理 D. 实时 答案:CBBDD 2.操作系统是对计算机资源进行的 (1) 系统软件,是 (2) 的接口。 在处理机管理中,进程是一个重要的概念,它由程序块、 (3) 和数据块三部 分组成,它有3种基本状态,不可能发生的状态转换是 (4) 。 虚拟存储器的作用是允许程序直接访问比内存更大的地址空间,它通常使用 (5) 作为它的一个主要组成部分。 供选答案: (1): A. 输入和输出 B. 键盘操作 C. 管理和控制 D. 汇编和执行 (2): A. 软件和硬件 B. 主机和外设 C. 高级语言和机器语言 D. 用户和计算机 (3): A. 进程控制块 B. 作业控制块 C. 文件控制块 D. 设备控制块 (4): A. 运行态转换为就绪态 B. 就绪态转换为运行态 C. 运行态转换为等待态 D. 等待态转换为运行态 (5): A. 软盘 B. 硬盘 C. CDROM D. 寄存器 答案:CDADB 3.在计算机系统中,允许多个程序同时进入内存并运行,这种方法称为 D。 A. Spodling技术 B. 虚拟存储技术 C. 缓冲技术 D. 多道程序设计技术 4.分时系统追求的目标是 C。 A. 高吞吐率 B. 充分利用内存 C. 快速响应 D. 减少系统开销 5.引入多道程序的目的是 D。

操作系统期末试题及答案

《操作系统》期末试卷 姓名 一、选择题(15*2分=30分) 1、在操作系统中,JCB是指(A ) A.作业控制块B.进程控制块C.文件控制块D.程序控制块 2、并发进程之间(D) A.彼此无关 B.必须同步 C.必须互斥 D.可能需要同步或互斥 3 A 4 ?A 5、(D A 6 A 7 A. 8 A. C. 9、设有。 A.2 10 A. 11 A 12、() A C 13 A 14、(B A.固定分区 B.分段 C.分页 D.可变分区 15、在进程管理中,当()时,进程从阻塞状态变为就绪状态。 A.进程被进程调度程序选中B.等待某一事件C.等待的事件发生D.时间片用完 二、填空题(20*1分=20分) 1、在单用户环境下,用户独占全机,此时程序的执行具有_封闭性______和_可再现性_。 2、对于信号量,在执行一次P操作时信号量-1_;当其值为__<0__时,进程应阻塞。在执行V操作时信号量的值应当_信号量+1_; 当其值为__<=0__时,应唤醒阻塞队列中的进程。 3、进程的三种基本状态分别是、进程的三种基本状态分别是__运行______,_就绪_和__阻塞(等待)__。 4、多道程序环境下的各道程序,宏观上它们是_并行__运行,微观上是_串行_运行。 5、在单CPU系统中有(n>1)个进程,在任一时刻处于就绪的进程最多是__n-1__个,最少是___0____个。

6、分区管理方案不能实现虚存的原因是_作业地址空间不能大于存储空间_。 7、段页式存储管理中,是将作业分_段__,__段_____内分___页____。分配以__页_____为单位。在不考虑使用联想存储器快表 的情况下,每条访问内存的指令需要____3___访问内存。其中第_2___次是查作业的页表。 三、简答题(4*5分=20分) (2) ????????????进程A???????????????????????????????进程B ???????????...??????????????????????????????????... ????????P(mutex);????????????????????????????P(mutex);

第二章-操作系统进程(练习题答案)

第二章进程管理 1.操作系统主要是对计算机系统全部 (1) 进行管理,以方便用户、提高计算机使 用效率的一种系统软件。它的主要功能有:处理机管理、存储管理、文件管理、 (2) 管 理和设备管理等。Windows和Unix是最常用的两类操作系统。前者是一个具有图形界面的 窗口式的 (3) 系统软件,后者是一个基本上采用 (4) 语言编制而成的 的系统软件。在 (5) 操作系统控制下,计算机能及时处理由过程控制反馈的信息 并作出响应。 供选答案: (1): A. 应用软件 B. 系统软硬件 C. 资源 D. 设备 (2): A. 数据 B. 作业 C. 中断 D. I/O (3): A. 分时 B. 多任务 C. 多用户 D. 实时 (4): A. PASCAL B. 宏 C. 汇编 D. C (5): A. 网络 B. 分时 C. 批处理 D. 实时 答案:CBBDD 2.操作系统是对计算机资源进行的 (1) 系统软件,是 (2) 的接口。 在处理机管理中,进程是一个重要的概念,它由程序块、 (3) 和数据块三部 分组成,它有3种基本状态,不可能发生的状态转换是 (4) 。 虚拟存储器的作用是允许程序直接访问比内存更大的地址空间,它通常使用 (5) 作为它的一个主要组成部分。 供选答案: (1): A. 输入和输出 B. 键盘操作 C. 管理和控制 D. 汇编和执行 (2): A. 软件和硬件 B. 主机和外设 C. 高级语言和机器语言 D. 用户和计算机 (3): A. 进程控制块 B. 作业控制块 C. 文件控制块 D. 设备控制块 (4): A. 运行态转换为就绪态 B. 就绪态转换为运行态 C. 运行态转换为等待态 D. 等待态转换为运行态 (5): A. 软盘 B. 硬盘 C. CDROM D. 寄存器 答案:CDADB 3.在计算机系统中,允许多个程序同时进入内存并运行,这种方法称为 D。 A. Spodling技术 B. 虚拟存储技术 C. 缓冲技术 D. 多道程序设计技术 4.分时系统追求的目标是 C。 A. 高吞吐率 B. 充分利用内存 C. 快速响应 D. 减少系统开销 5.引入多道程序的目的是 D。

操作系统-进程管理实验报告

实验一进程管理 1.实验目的: (1)加深对进程概念的理解,明确进程和程序的区别; (2)进一步认识并发执行的实质; (3)分析进程争用资源的现象,学习解决进程互斥的方法; (4)了解Linux系统中进程通信的基本原理。 2.实验预备内容 (1)阅读Linux的sched.h源码文件,加深对进程管理概念的理解; (2)阅读Linux的fork()源码文件,分析进程的创建过程。 3.实验内容 (1)进程的创建: 编写一段程序,使用系统调用fork() 创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。 源代码如下: #include #include #include #include #include int main(int argc,char* argv[]) { pid_t pid1,pid2; pid1 = fork(); if(pid1<0){ fprintf(stderr,"childprocess1 failed"); exit(-1); } else if(pid1 == 0){ printf("b\n"); } 1/11

else{ pid2 = fork(); if(pid2<0){ fprintf(stderr,"childprocess1 failed"); exit(-1); } else if(pid2 == 0){ printf("c\n"); } else{ printf("a\n"); sleep(2); exit(0); } } return 0; } 结果如下: 分析原因: pid=fork(); 操作系统创建一个新的进程(子进程),并且在进程表中相应为它建立一个新的表项。新进程和原有进程的可执行程序是同一个程序;上下文和数据,绝大部分就是原进程(父进程)的拷贝,但它们是两个相互独立的进程!因此,这三个进程哪个先执行,哪个后执行,完全取决于操作系统的调度,没有固定的顺序。 (2)进程的控制 修改已经编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。 将父进程的输出改为father process completed 2/11

操作系统复习-进程管理

2.1 进程与线程 进程是指令的集合(错,程序是指令的集合,进程是程序的一次执行过程) 优先级是进程调度的重要依据,一旦确定就不能改变(错) 在单CPU的系统中,任意时刻都有一个进程处于运行状态(错,可以空转) 进程申请CPU得不到满足时,其状态变为阻塞(错!等待CPU的进程处于就绪状态) 进程获得CPU运行是通过调度得到的(对) 线程是一种特殊的进程(对) 进程是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的独立单位(对)进程是PCB结构、程序和数据的集合(对) 撤销父进程时,应同时撤销子进程(错!进程撤销可采用两种策略,一种是只撤销指定进程,另一种是撤销指定进程和其子孙进程) 线程的切换,可能会引起进程的切换(对) 引入线程后,处理机只在线程中切换(错!!) 线程是比进程更小的能独立运行的基本单位(错,这句话的成立需要一定的前提条件) 线程的引入增加了程序执行的时空开销(错,应为减少) 一个进程一定包含多个线程(错) 一个进程创建的若干线程共享该进程的程序段和数据段,但是它们有各自的运行栈区(对)中断是进程切换的必要条件,而不是充分条件。(对) 进程的基本特点:动态性,并发性,独立性,异步性,结构性。 在多道程序设计环境下,操作系统分配资源以进程为基本单位 在引入线程的操作系统中,资源分配的基本单位是进程,CPU分配的基本单位是线程。 在引入线程的操作系统中,进程是资源分配的基本单位,线程是调度的基本单位 从运行状态到就绪状态是由于时间片用完或出现了比现在进程优先级更高的进程(调度程序决定) 从就绪状态到运行状态是调度程序决定的 从阻塞状态到就绪状态是协作程序决定的 从运行状态到阻塞状态是进程自身决定的(只有这个是主动的) 对进程的管理和控制使用原语。(原语包括创建原语,撤销原语,阻塞原语,唤醒原语等)一个进程被唤醒意味着进程变为就绪状态(该进程可能重新占用CPU)。(唤醒原语的功能是将被被唤醒进程从阻塞队列中移到就绪队列中) 降低进程优先级的合理时机是进程的时间片用完。 进程调度主要负责选一个进程占有CPU。 建立多线程的主要目的是提高CPU的利用率。 进程调度的方式有抢占式,非抢占式两种。 (?)以下 C 不会引起进程创建。A.用户登录 B.作业调度 C.设备分配 D.应用请求 进程与程序的联系与区别: 联系:进程是程序的一次执行过程,没有程序就没有进程 区别: 1.进程是程序的执行,所以进程属于动态概念,程序是一组指令的有序集合,是静态的概念 2.进程的存在是暂时的,程序的存在是永久的(相对而言)

操作系统实验二

操作系统实验实验二进程管理 学号 1215108019 姓名克帆 学院信息学院 班级 12电子2

实验目的 1、理解进程的概念,明确进程和程序的区别。 2、理解并发执行的实质。 3、掌握进程的创建、睡眠、撤销等进程控制方法。 实验容与要求 基本要求:用C语言编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;杀死进程等功能。 实验报告容 1、进程、进程控制块等的基本原理。 进程是现代操作系统中的一个最基本也是最重要的概念,掌握这个概念对于理解操作系统实质,分析、设计操作系统都有其非常重要的意义。为了强调进程的并发性和动态性,可以给进程作如下定义:进程是可并发执行的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。 进程又就绪、执行、阻塞三种基本状态,三者的变迁图如下: 由于多个程序并发执行,各程序需要轮流使用CPU,当某程序不在CPU上运行时,必须保留其被中断的程序的现场,包括:断点地址、程序状态字、通用寄存器的容、堆栈容、程序当前状态、程序的大小、运行时间等信息,以便程序再次获得CPU时,能够正确执行。为了保存这些容,需要建立—个专用数据结构,我们称这个数据结构为进程控制块PCB (Process Control Block)。 进程控制块是进程存在的惟一标志,它跟踪程序执行的情况,表明了进程在当前时刻的状态以及与其它进程和资源的关系。当创建一个进程时,实际上就是为其建立一个进程控制块。 在通常的操作系统中,PCB应包含如下一些信息: ①进程标识信息。为了标识系统中的各个进程,每个进程必须有惟一的标识名或标 识数。 ②位置信息。指出进程的程序和数据部分在存或外存中的物理位置。 ③状态信息。指出进程当前所处的状态,作为进程调度、分配CPU的依据。 ④进程的优先级。一般根据进程的轻重缓急其它信息。 这里给出的只是一般操作系统中PCB所应具有的容,不同操作系统的PCB结构是不同的,我们将在2.8节介绍Linux系统的PCB结构。

操作系统实验二(进程管理)

操作系统进程管理实验 实验题目: (1)进程的创建编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。 (2)进程的控制修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕上出现的现象,并分析原因。 (3)编制一段程序,使其实现进程的软中断通信。要求:使用系统调用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按Del键);当捕捉到中断信号后,父进程调用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:Child process 1 is killed by parent! Child process 2 is killed by parent! 父进程等待两个子进程终止后,输出如下的信息后终止:Parent process is killed! 在上面的程序中增加语句signal(SIGINT, SIG_IGN)和signal(SIGQUIT, SIG_IGN),观察执行结果,并分析原因。 (4)进程的管道通信编制一段程序,实现进程的管道通信。使用系统调用pipe( )建立一条管道线;两个进程P1和P2分别向管道各写一句话:Child 1 is sending a message! Child 2 is sending a message! 而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。 实验源程序及报告: (1)、进程的创建 #include int main(int argc, char *argv[]) { int pid1,pid2; /*fork first child process*/ if ( ( pid1=fork() ) < 0 ) { printf( "ProcessCreate Failed!"); exit(-1); }

操作系统习题集------进程管理

习题集 - 2 - 进程管理 1. 在优先级调度中,__________类进程可能被“饿死”,即长时间得不到调度。 A.短进程 B.长进程 C.低优先级进程 D.大内存进程 解: C。优先级调度算法(PRI)的基本思想是:内核为每个进程赋予一个优先级,进程按照优先级的大小顺序在就绪队列中排队,内核将CPU分配给就绪队列头部的第一个进程——优先级最大的进程。因此,进程的优先级越低,在就绪队列中的排队位置就越靠近队列尾,获得运行之前的等待时间就越长。低优先级的进程必须等待所有高优先级进程运行结束后才会被调度运行。如果不断有高优先级的进程加入就绪队列,那么低优先级进程就会一直等待下去。这就是所谓的“饿死”现象。 2. 在下面的系统调用中,__________不会导致进程阻塞。 A.读/写文件 B.获得进程PID C.申请内存 D.发送消息 解: B。当正在执行的进程需要使用某种资源或等待某个事件时,如果资源已被其他进程占用或事件尚未出现,该进程不能获得所需的资源而无法继续运行,于是,进程将被阻塞。进程在阻塞状态中等待资源被释放,或等待事件的发生。所以,进程在执行系统调用时,如果需要使用某种资源,就可能导致进程阻塞。“读/写文件”需要使用设备和文件缓冲区;“申请内存”需要分配内存资源;“发送消息”需要使用消息缓冲区。 3. 下面关于临界区的叙述中,正确的是__________ A.临界区可以允许规定数目的多个进程同时执行 B.临界区只包含一个程序段 C.临界区是必须互斥地执行的程序段 D.临界区的执行不能被中断 解: C。临界段(临界区)的概念包括两个部分:①临界资源:必须互斥访问的资源。例如,需要独占使用的硬件资源,多个进程共享的变量、结构、队列、栈、文件等软件资源。②临界区:访问临界资源的、必须互斥地执行的程序段。即,当一个进程在某个临界段中执行时,其他进程不能进入相同临界资源的任何临界段。

操作系统期末试卷(含答案)1

一、选择题 1、在现代操作系统中引入了(),从而使并发和共享成为可能。 A.单道程序 B. 磁盘 C. 对象 D.多道程序 2、( )操作系统允许在一台主机上同时连接多台终端,多个用户可以通过各自的终端同时交互地使用计算机。 A.网络 B.分布式 C.分时 D.实时 3、从用户的观点看,操作系统是()。 A. 用户与计算机硬件之间的接口 B.控制和管理计算机资源的软件 C. 合理组织计算机工作流程的软件 D.计算机资源的的管理者 4、当CPU处于管态时,它可以执行的指令是()。 A. 计算机系统中的全部指令 B. 仅限于非特权指令 C. 仅限于访管指令 D. 仅限于特权指令 5、用户在程序中试图读取某文件的第100个逻辑块时,使用操作系统提供的()接口。 A. 系统调用 B.图形用户接口 C.原语 D.键盘命令 6、下列几种关于进程的叙述,()最不符合操作系统对进程的理解? A.进程是在多程序并行环境中的完整的程序。 B.进程可以由程序、数据和进程控制块描述。 C.线程是一种特殊的进程。 D.进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。 7、当一个进程处于()状态时,称其为等待(或阻塞)状态。 A. 它正等待中央处理机 B. 它正等待合作进程的一个消息 C. 它正等待分给它一个时间片 D. 它正等待进入内存 8、一个进程释放一种资源将有可能导致一个或几个进程()。 A.由就绪变运行 B.由运行变就绪 C.由阻塞变运行 D.由阻塞变就绪 9、下面关于线程的叙述中,正确的是()。 A.不论是系统支持线程还是用户级线程,其切换都需要内核的支持。 B.线程是资源的分配单位,进程是调度和分配的单位。 C.不管系统中是否有线程,进程都是拥有资源的独立单位。 D.在引入线程的系统中,进程仍是资源分配和调度分派的基本单位。 10、设有3个作业,它们同时到达,运行时间分别为T1、T2和T3,且T1≤T2≤T3,若它们在单处理机系统中按单道运行,采用短作业优先调度算法,则平均周转时间为()。 A. T1+T2+T3 B. (T1+T2+T3)/3 C. T1+T2/3+2*T3/3 D.T3/3+2*T2/3+T1 11、在下面的I/O控制方式中,需要CPU干预最少的方式是()。 A.程序I/O方式B.中断驱动I/O控制方式C.直接存储器访问DMA控制方式D.I/O通道控制方式 12、有m个进程共享同一临界资源,若使用信号量机制实现对一临界资源的互斥访问,则

操作系统实验3答案

实验三操作系统进程管理 一、实验目的 1) 掌握系统进程的概念,加深对Linux / UNIX进程管理的理解。 2) 学会使用ps命令和选项。 3) 列出当前shell中的进程。 4) 列出运行在系统中的所有进程。 5) 根据命令名搜索特定的进程。 6) 使用kill命令终止进程。 7) 根据用户名查找和终止进程。 二、实验内容和相应的答案截图,三、实验结果分析 步骤1:创建一个普通用户(参见实验二),以普通用户身份登录进入GNOME。 步骤2:打开一个“终端”窗口(参见实验二)。 步骤3:回顾系统进程概念,完成以下填空: 1) Linux系统中,几乎每一个启动的进程,都会由内核分配一个唯一的__PID__进程标识符,用于跟踪从进程启动到进程结束。 2) 当启动新进程的时候,内核也给它们分配系统资源,如__内存_和__CPU_。 3) 永远不向父进程返回输出的进程叫做__僵进程__。 4) 由父进程派生出来的进程叫做____子___进程。 5) ___父_进程是一个派生另一个进程的进程。 6) 运行用于提供服务的Linux系统进程是_______________。 7) 如果父进程在子进程之前结束,它创建了一个______________进程。 步骤4:回顾ps命令和信息。基本的ps命令显示当前shell中的进程信息,用户只能够查看当前终端窗口中初始化的进程。输入ps命令,将结果填入表3-3中。 表3-3 实验记录 下面,在当前终端窗口中,练习使用给出的每个选项的ps命令。

输入ps -f 命令,显示运行在系统中的某个进程的完全信息,填入表3-4中。 表3-4 实验记录 步骤5:列出系统中运行的所有进程。 输入ps -ef 命令,显示运行在系统中的各个进程的完全信息。执行该命令,并与ps –f 命令的输出结果对照,一致吗?有何不同? 答:不一致,后者显示了所有进程的完全可用信息,多了很多。 分析当前终端窗口中的输出结果,记录下来用于写实验报告。 a. 显示了多少个进程?答:59 b. 进程ID的PID是什么? c. 启动进程的命令(CMD) 是什么?答:sched d. 请观察,什么命令的PID号是1?答:init[5] e. 执行ps –ef >aaa命令,将ps命令的输出送到文本文件aaa。再次运行cat aaa | wc命令,计算进程的数目。其中,cat是显示文本文件命令。“|”是管道命令,就是将前一个命令的输出作为后一个命令的输入。wc 命令用来计算文本的行数,第一个数字显示的是行的数目,可以用来计算进程的数目。计算出进程数目并做记录。 执行man ps命令,可以打开Linux用户命令手册。了解ps命令的用法。输入wq命令可退出用户手册的阅读。man命令可以执行吗?结果如何? 答:Man ps时出现

操作系统进程管理

作业题: 1.有一个充分大的池子,两个人分别向池中扔球,甲扔红球,乙扔蓝球,一次扔一个,开始时池中有红、蓝球各一个,要求池中球满足条件: 红球数 1≤———≤ 2 蓝球数 用P、V操作描述两个进程。 Semaphore red =1; Semaphore blue =0; Void p1 ( ) { While(true) { Semwait (red ); 扔入一个红球; Semsignal(blue); } } Void p2( ) { While(true) { Semwait(blue); 扔入一个蓝球; Semsignal(red); Semsignal(red); } } Void main() {parbegin(p1(),p2());} 2.有三个进程,进程get从输入设备上不断读数据,并存入buffer1;进程copy不断将buffer1的内容复制到缓冲区buffer2,进程put则不断将buffer2的内容在打印机上输出。三个进程并发执行,协调工作。写出该三个进程并发执行的同步模型。 Semaphore empty1=empty2=1; Semaphore full1 =full2= 0; Void get( ) { While(true) {

Semwait(empty1); 将数据存入buffer1; Semsignal(full1); } } Void copy( ) { While(true) { Semwait(full1); 从buffer1里面读数据; Semsignal(empty1); Semwait(empty2); 把数据存入buffer2; Semsignal(full2); } } Void put( ) { While(true) { Semwait(full2); 从buffer2读数据;Semsignal(empty2); } } Void main( ) { Parbegin(get(),copy(),put()); }

操作系统-实验三-进程管理-实验报告

计算机与信息工程学院实验报告 一、实验内容 1.练习在shell环境下编译执行程序 (注意:①在vi编辑器中编写名为sample.c的c语言源程序 ②用linux自带的编译器gcc编译程序,例如:gcc –o test sample.c ③编译后生成名为test.out的可执行文件; ④最后执行分析结果;命令为:./test) 注意:linux自带的编译程序gcc的语法是:gcc –o 目标程序名源程序名,例如:gcc –o sample1 sample1.c,然后利用命令:./sample 来执行。如果仅用“gcc 源程序名”,将会把任何名字的源程序都编译成名为a.out的目标程序,这样新编译的程序会覆盖原来的程序,所以最好给每个源程序都起个新目标程序名。 2.进程的创建 仿照例子自己编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示“a”,子进程分别显示字符“b”和“c”。观察记录屏幕上的显示结果,并分析原因。 3.分析程序 实验内容要在给出的例子程序基础上,根据要求进行修改,对执行结果进行分析。二、

实验步骤 1. 利用fork()创建一个小程序 (1)编写程序 #include main () { int i=5; pid_t pid; pid=fork(); for(;i>0;i--) { if (pid < 0) printf("error in fork!"); else if (pid == 0) printf("i am the child process, my process id is %d and i=%d\n",getpid(),i); else printf("i am the parent process, my process id is %d and i=%d\n",getpid(),i); } for(i=5;i>0;i--) { if (pid < 0) printf("error in fork!"); else if (pid == 0) printf("the child process, my process id is %d and i=%d\n",getpid(),i); else printf("the parent process, my process id is %d and

操作系统第二章作业答案

第二章作业 1.操作系统中为什么要引入进程的概念为了实现并发进程中的合作和协调,以及保证系统的安全,操作系统在进程管理方面要做哪些工作 答:为了从变化角度动态地分析研究可以并发执行的程序,真实的反应系统的独立性、并发性、动态性和相互制约,操作系统中不得不引入进程的概念。 为了防止操作系统及其关键的数据结构如:PCB等,受到用户程序破坏,将处理机分为核心态和用户态。对进程进行创建、撤销以及在某些进程状态之间的转换控制。 2.试描述当前正在运行的进程状态改变时,操作系统进行进程切换的步骤。答:分为两种情况: (1):运行状态就绪状态:根据进程的自身的情况插入到就绪队列的适当位置,系统收回处理及转入进程调度程序重新进行调度。 (2):运行状态→阻塞状态:系统会调用进程调度程序重新选择一个进程投入运行。 3.现代操作系统一般都提供多任务的环境,是回答以下问题。 为支持多进程的并发执行,系统必须建立哪些关于进程的数据结构 答:系统必须建立PCB。 为支持进程的状态变迁,系统至少应该供哪些进程控制原语 答:阻塞、唤醒、挂起和激活原语。 当进程的状态变迁时,相应的数据结构发生变化吗 答:会根据状态的变迁发生相应的变化。例如:将进程PCB中进程的状态从阻塞状态改为就绪状态,并将进程从阻塞队列摘下,投入到就绪队列中。 4.什么是进程控制块从进程管理、中断处理、进程通信、文件管理、设备管理及存储管理的角度设计进程控制块应该包含的内容。 答:PCB:描述进程本身的特征、状态、调度信息以及对资源占有情况等的数据结构,是进程存在的唯一标识。 进程控制块所包含的内容: ①进程信息描述;②CPU信息状态;③进程调度信息;④进程控制和资源占用信息。 5.假设系统就绪队列中有10个进程,这10个进程轮换执行,每隔300ms轮换一次,CPU在进程切换时所花费的时间是10ms,试问系统化在进程切换上的开销占系统整个时间的比例是多少 解:P=(10*10)/[(300+10)*10]=% 6.试述线程的特点及其与进程之间的关系。 答:线程的特点:是被独立分派和调度的基本单位。线程与进程的关系:线程是进程的一部分,是进程内的一个实体;一个进程可以有多个线程,但至少必须有一个线程。

操作系统实验报告----进程管理

实验内容:进程管理 一、实验目的 1、掌握Linux中进程的创建方法及执行情况; 2、加深对进程、进程树等概念的理解; 3、掌握Linux中如何加载子进程自己的程序; 4、掌握父进程通过创建子进程完成某项任务的方法; 5.、掌握系统调用exit()和_exit()调用的使用。 6、分析进程竞争资源的现象,学习解决进程互斥的方法;进一步认识并发执行的实质 二、实验内容 (一)进程的创建 1、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中 有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符。 #include main() { int p,x; p=fork(); if(p>0) { x=fork(); if(x>0) printf("father\n"); else printf("child2"); } else printf("child1"); } 输出结果: child1 child2 father 2、运行以下程序,分析程序执行过程中产生的进程情况。 #include main() { int p,x; p=fork(); if (p>0) fork(); else{ fork();

fork(); } sleep(15); } 实验步骤: 编译连接 gcc –o forktree forktree.c 后台运行 ./forktree & 使用 pstree –h 查看进程树 运行结果: ├─gnom e-terminal─┬─bash─┬─forktree─┬─forktree─┬─forktr ee───forktree ││││└─forktree │││└─forktree ││└─pstree 分析:程序运行,系统首先创建一个进程forktree,执行到p=fork()创建一个子进程forktree,子进程获得处理机优先执行,父进程等待;执行else,当执行到第一个fork()函数时,子进程创建了一个进程forktree,称之为孙进程,孙进程获得处理机往下执行,子进程等待;执行到第二个fork()函数时,孙进程又创建一个进程forktree,称之为重孙进程,重孙进程很快执行完,将处理机还给孙进程,孙进程很快执行完,将处理机还给子进程;子进程继续往下执行,执行到第二个fork()函数,又创建一个进程forktree,称之为第二孙进程,并获得处理机执行,此进程很快执行完,将处理机还给子进程,子进程也很快执行完,将处理机还给父进程,父进程P>0执行if语句,运行fork()函数,又创建一个进程forktree,称之为第二子进程,此进程获得处理机执行很快运行完,将处理机还给父进程,父进程运行sleep(15)语句,休眠15秒,用pstree命令查询进程树。 3、运行程序,分析运行结果。 #include main() { int p,x,ppid,pid; x=0; p=fork(); if(p>0) { printf("parent output x=%d\n",++x); ppid=getpid(); printf("Thi id number of parent is:ppid=%d\n",ppid); } else { printf("child output x=%d\n",++x); pid=getpid(); printf("Thi id number of child is:pid=%d\n",pid);

相关文档
最新文档