进程管理

进程:进程是正在执行的程序,即在并发环境下一个程序在一个数据集合上的一次执行过程。

进程控制块:进程控制块是由操作系统维护,用来记录进程相关信息的数据结构。进程的组成中,程序段和数据段是进程存在的物质基础,是进程的实体,进程控制块是进程存在的唯一标志。

上下文切换:在多进程并发执行中,将CPU切换到另一个进程需要保存原来进程的关联状态并装入新进程的关联状态。这一任务称为上下文切换(context switch)。

原语:原语(primitive)是机器指令的延伸,是由若干条机器指令构成的,用以完成特定功能的一段程序。原语在执行过程中不能被分割。

临界资源:临界资源是指在一段时间内仅允许一个进程使用资源。如打印机、输入机、磁带机和指针等,临界资源可以互斥共享。

共享资源:是指允许多个进程同时访问的资源。如CPU、内存和硬盘等。

临界区:每个进程访问临界资源的那段程序从概念上分离出来,称之为临界区。

超时:由于用完时间片或高优先级进程就绪等原因导致进程暂停运行。

事件:

进程同步:进程同步是指两个或两个以上进程要协作完成一个任务,他们之间就要互相配合与协调,即一个进程的某些动作与协作进程的某些动作之间在时序上要有一定的制约关系。

进程的互斥:多个进程访问临界资源时在操作时间上相互排斥,这种相互排斥关系叫做进程的互斥

wait操作:执行一次wait操作,意味着申请一个单位的资源,定义如下:

①s.value减一;

②若s.value>=0,则进程继续运行;

③若s.value<0,则该进程被阻塞,并将它插入该信号量的等待队列WQ[r]中。

signal操作:执行一次signal操作,意味着释放一个单位的资源,定义如下:

①s.value加一;

②若s.value>0,则进程继续运行;

③若s.value<=0,则从该信号量等待队列WQ[r]中唤醒队首进程。

信号量:信号量是仅能由P操作、V操作改变的结构体变量。信号量的值大于等于零时代表一类可用资源个数,其值小于零时其绝对值代表被阻塞进程的个数。

管程:关于共享资源的数据结构以及一组针对该资源的操作过程所构成的软件模块。一个管程就是一个基本程序单位,可以单独编译。


试说明进程和程序的区别与联系?

⑴程序是有序代码的集合,是一个静态的概念。进程是程序的一次执行过程,是一个动态概念。进程不可以在计算机之间迁移,而程序通常对应着文件,可以复制。

⑵进程是一个状态变化的过程,是有生命期的。而程序是永久的,可以长久保存。

⑶进程与程序的组成不同。进程由程序段、数据段和进程控制块组成,而程序仅是代码的有序集合。

⑷进程与程序是密切相关的。通过多次执行,一个程序可对应多个进程。但进程与它本身所执行的程序只能是一对一的关系。

⑸进程更能真实地描述并发,而程序不能。

⑹进程可创建其他进程,而程序并不能形成新的程序。

⒉引入进程,对操作系统产生那些影响?

进程是正在执行的程序,即在并发环境下一个程序在一个数据集合上的一次执行过程。

由于多个程序并发执行产生了一系列新特征,为了准确地描述并发程序的执行,必须引入进程的概念。

操作系统引入进程,可以实现多个进程的并发执行,提高了系统资源的利用率,提高了系统的吞吐量。但由于每个进程配备进程控制块PCB,增加了内存的空间开销。进程之间的切换、同步等需付出时间开销,引入进程会带来额外的时空开销,增加了操作系统的复杂性。

⒊为什么PCB是进程存在的唯一标志?

PCB是由操作系统维护,用来记录进程相关信息的数据结构。它的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。

进程块随着进程的创建而创建,即创建一个进程,就是为进程配备一个PCB;操作系统是根据进程控制块来对并发执行的进程进行控制和管理的;PCB随着进程的撤消而撤消,即撤消一个进程,就是撤消进程的PCB,。在进程的生命期中操作系统是通过PCB对进程进行管理和控制,系统使根据进程的进程控制块而不是任何别的什么来感知到该进程的存在的,所以说进程控制块PCB是进程存在的唯一标志。

⒋在单机系统中,如果系统中有N个进程,运行状态的进程最多几个?最少几个?就绪状态的进程最多几个?最少几个?等待状态的进程最多几个?最少几个?

    运行状态的进程最多有1个,最少0个。就绪状态的进程最多有N个,最少0个,等待状态的进程最多N个,最少0个。

⒌进程的状态有没有这样的状态转换,等待状态→运行状态,就绪状态→等待状态。为什么?

没有这样的状态转换。

等待状态的进程是在运行过程中,因等待某一事件而暂时无法执行,或者说进程的运行受到了阻塞。当进程等待的事件发生时,进程只能从等待状态转变为就绪状态,在就绪状态下,通过处理机调度。进程才有可能进入运行状态。

在就绪状态下,通过处理机调度。进程只能进入运行状态。在运行过程中,因等待某一事件而暂时无法执行,进程才有可能进入等待状态。

⒍同步机构应遵循的四条准则是什么?为什么要同时满足这四条准则,如违背了其中的基本准则,其后果是什么?

⑴空闲让进。当无进程处于临界区时,允许一个申请进入临界区的进程进入临界区。以有效的利用临界资源。

⑵忙则等待。当一个进程进入临界区时,其他申请进入临界区的进程必须等待。以保证诸进程互斥地访问临界资源。

⑶有限等待。进程在临界区内仅停留有限的时间,对要求进入临界区的进程,应能在有限的时间内进入临界区。以避免陷入“死等”状态。

⑷让权等待。处于等待状态的进程应放弃占用CPU,以使其他进程有机会得到CPU的使用权。以避免进程陷入“忙等”和浪费处理机资源。

多个进程无法同步,产生同步错误。或使系统“死等”、忙等”和浪费处理机资源。

⒎例举一些日常生活中类似进程的例子?

⒏在进程概念中体现出的两个独立且无关的属性是什么?

    传统进程具有两个属性,即操作系统进行资源分配的基本单位和CPU调度或执行程序的基本单位。

⒐试说明什么是进程的同步与互斥?

    进程同步是指两个或两个以上进程要协作完成一个任务,他们之间就要互相配合与协调,即一个进程的某些动作与协作进程的某些动作之间在时序上要有一定的制约关系。

    多个进程访问临界资源时在操作时间上相互排斥,这种相互排斥关系叫做进程的互斥

10.如何进行进程之间的上下文切换?

    在多进程并发执行中,将CPU切换到另一个进程需要保存原来进程的关联状态并装入新进程的关联状态。这一任务称为上下文切换(context switch)。进程关联状态的保存是由PCB完成的,保存关联状态包括CPU寄存器的值、进程状态和内存管理信息等。当发生上下文切换时,内核会将旧进程的关联状态保存在其PCB中,然后装入经调度要运行的新进程的已保存的关联状态。上下文切换时间是系统额外开销,因为切换时系统并不能执行进程的指令,无法使进程向前推进。

11.在多进程并发环境中,试论述进程与进程之间、进程与资源之间关系?

   (1)进程之间的关系:系统中多个进程并发执行,由于资源共享及进程间合作而产生进程之间的相互制约,进程间的相互制约有间接相互制约和直接相互制约两种不同的方式。1)间接制约关系 这种制约主要源于资源共享,这是不相关的进程由于共享同一资源而引起的,即共享某类资源的进程之间由操作系统协调与控制使用该资源的次序而产生相互制约。这种制约是进程---资源---进程之间存在的约束,故称为间接制约。2)直接制约关系 这是相关进程之间为完成同一任务,进程某种操作之间在次序上存在制约关系。如果协作进程的某个操作没有完成,那么进程就会在工作到某些点上等待这个动作的完成,之后才能继续执行下去。称这些并发执行的进程间存在着制约关系。这种制约是进程与进程之间因共同目的而存在的直接约束,故称为直接制约。总之,进程之间的这种相互依赖又相互制约 相互合作又相互竞争的关系,需要进程之间存在某种形式的通信。

(2)进程是系统的工作单元,资源是计算机系统的基本结构元素,资源是为进程服务的,进程的执行需要资源的支持。进程和资源之间关系的操作系统的重要关系,操作系统的主要研究和处理进程和资源之间的关系。

12.在结构体型信号机制中,试描述wait、signal操作的数据结构?并说明wait、signal操作的物理意义?

信号量的描述如下:

struct semaphore{

int  value;

ProcessQueue  *WQ[r];

      };

wait操作描述和定义如下:

void wait(semaphores){

--s.value;

if(s.value<0) block(s.WQ[r]);/*阻塞该进程*/

}

signal操作描述和定义如下:

void signal(semaphores){

++s.value;

if (s.value<=0)  wakeup(s.WQ[r]);/*唤醒阻塞队列的对首进程*/

     }

wait操作和signal操作的物理意义总结如下:

①执行一次wait操作,意味着申请一个单位的资源,因此s.value减一。

②执行一次signal操作,意味着释放一个单位的资源,因此s.value加一。

③当s.value>=0时,表示该类可用资源的数量。

④当s.value<0时,表示该类可用资源已经没有资源可以分配,s.value的绝对值表示信号量阻塞队列中被阻塞进程的数量。

13.在生产者和消费者过程中,为什么说signal操作的顺序无关紧要,而wait操作的顺序不可颠倒?

每个程序中的多个wait操作顺序不能颠倒,应先执行对资源信号量的wait操作,然后再执行对互斥信号量的wait操作,否则可能引起死锁。

14.因修路使A地到B地的多路并行车道变为单车道,请问在此问题中,什么是临界资源?什么是临界区?

临界资源是单行道,从A地到B地的行车过程为临界区。

15.在公共汽车上,司机的活动:启动汽车、行车、到站停车。售票员的活动:关车门、售票、开车门。请写出司机与售票员之间的同步算法。

为了安全起见,显然要求:罐车门后才能启动车辆;到站停车后才能开车门。所以司机和售票员在到站、开门、关门、启动车辆这几个活动之间存在着同步关系。用两个信号量S1、S2分别表示可以开车和可以开门,S1的初值为1,S2的初值为0。用PV操作实现司机进程和售票员进程同步的算法描述如下:

semaphore s1=1,s2=0;

void main(){

parbegin(driver(),conductor());

}

void driver(){

do{

wait(s1);

Starts theautomobile;

Driving;

Parking;

signal(s2);

}while(true);

}

void conductor(){

do{

Sell ticket;

wait(s2);

Opening the door;

Closing the door;

signal(s1);

}while(true);

}

16.有一阅览室,读者进入时必须先在一张登记表中进行登记,该表为每一座位列一表目,包括座号和读者姓名,读者离开时要消掉登记信息,阅览室中共有100个座位,试问:

⑴为了描述读者的动作,应设置几个进程?

⑵试用C语言,利用wait操作和signal操作写出这些进程间的同步算法。

为了描述读者的动作,应设置2个同步进程,一个是登记信息进程,一个是消掉登记信息进程。

设三个信号量:座位信号量s1=100,读者数量s2=0, 登记表是临界资源,互斥信号量mutex=1。

semaphore s1=100,s2=0, mutex=1;

void main(){

parbegin(register(),register_off());

}

void register(){

do{

wait(s1);

wait(mutex);

register;

signal(mutex);

signal(s2);

enter into the reading room;

}while(true);

void register_off(){

do{

wait(s2);

wait(mutex);

register off;

signal(mutex);

signal(s1);

leave the reading room;

}while(true);

}

17.引入管程机制的好处是什么?

由于管程的良好封装特征,因此可增强模块的独立性。按资源管理的观点,可把系统分解成若干模块,用数据表示抽象系统资源;同时利用共享资源和专用资源在管理上的差别,按不同的管理方式定义模块的类型和结构,使同步操作相对集中,从而增加了模块的相对独立性。

引入管程可提高代码的可读性,便于修改和维护,正确性易于保证。由于采用集中式同步机制,一个操作系统或并发程序由若干个这样的模块所构成,一个模块通常较短,模块之间关系清晰,有利于正确性的保证。

18.试用管程机制解决读者与写者问题?

19.试用管程机制解决哲学家进餐问题?

#define N 5 /* 哲学家人数*/

#define LEFT (i-1+N)%N /* i的左邻号码 */

#define RIGHT (i+1)%N /* i的右邻号码 */

typedef enum { THINKING, HUNGRY, EATING }phil_state; /*哲学家状态*/

monitor dp /*管程*/

{

phil_state state[N];

semaphore mutex =1;

semaphore s[N]; /*每个哲学家一个信号量,初始值为0*/

void test(int i)

{

if ( state[i] == HUNGRY &&state[LEFT(i)]!= EATING &&

state[RIGHT(i)] != EATING )

{

state[i] = EATING;

V(s[i]);

}

}

void get_forks(int i)

{

P(mutex);

state[i] = HUNGRY;

test(i); /*试图得到两支筷子*/

V(mutex);

P(s[i]); /*得不到筷子则阻塞*/

}

void put_forks(int i)

{

P(mutex);

state[i]= THINKING;

test(LEFT(i)); /*看左邻是否进餐*/

test(RIGHT(i)); /*看右邻是否进餐*/

V(mutex);

}

}

哲学家进程如下:

void philosopher(int process)

{

while(true)

{

think();

get_forks(process);

eat();

put_forks(process);

}

}

20.进程通信类型有几种方式?写出用于进程通信的原语格式?那种方式适合计算机网络通信?

①共享存储器方式。②管道通信方式。③消息传递的通信方式。

消息传递的通信方式适合计算机网络通信。

通信方式通信原语一般应用格式如下:

客户机端:send(server-socket,&m1)

receive(client-port,&m2)

服务器端:receive(server-port,&m1)

send(m1.source-socket,&m2)

其中:

&m1、&m2:请求包和应答包的地址;

server-socket:服务器的套接字;

server-port: 服务器的端口;

client-port:客户机的端口;

m1.source-socket客户机的套接字。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值