1.解释并发与并行,并说明两者关系。
并发是指多个事件在同一时间段内交替执行
并行是指多个事件同时执行
并行在多处理器系统中存在,而并发可以在单处理器和多处理器系统中都存在,二者区别在于事件是否同时执行
2.进程间有哪几种关系?分别要采取什么策略?
进程间存在竞争关系和协作关系,竞争关系可能会引发死锁和饥饿问题。解决饥饿问题最简单的策略是FCFS资源分配策略,这样,进程可以依次排队占用资源.。由于资源竞争引发的两个控制问题,需要向并发进程提供锁机制,在使用共享资源之前表达互斥要求,即对进程之间抢占资源进行规划竞争制约。
3.为什么说进程的互斥也是一种同步?
进程互斥是指若干进程因相互争夺独占型资源而产生的竞争制约关系。进程同步是指为完成共同任务的并发进程基于某个条件来协调其活动。因为进程的互斥是存在着制约关系来控制进程协调完成任务的,所以互斥也算是一种同步
4.解释死锁与“饥饿”,并说明两者关系。
死锁:一组进程因增夺资源陷入永远等待的状态
饥饿:由于其他进程总优先于某一进程,导致该进程长时间无法获取资源来进行调度,被无限期的拖延。
饥饿是因为优先级太低,其他进程一直在你之前抢夺资源,而死锁是两个或者多个进程,相互等待对方占有的资源,而又不能释放自己的资源,所以这些进程都进入死锁状态。
5.什么叫做临界区?如何解决进程对临界资源的访问冲突?
并发进程中与共享变量有关的程序段称为临界区
(1)一次至多只有一个进程进入临界区内执行
(2)如果已有进程在临界区中,试图进入此临界区的其他进程应等待
(3)进入临界区内的进程应在有限时间内退出,以便让等待队列中的一个进程进入。
6.信号量的物理意义是什么?
信号量表示物力资源的实体,是一个与队列有关的整型变量,主要用于封锁临界区、进程同步即维护资源计数。
7.理解五个哲学家吃面问题,并能盲写出伪代码。
semaphore fork[5];
for( int i=0 ; i<5 ; i++) fork[i] =1 ; cobegin process philosoper_i(){ while(true){ think(); P(fork[i]); P(fork[(i+1)%5]) ; eat() ; V(fork[i]) ; V(fork[(i+1)%5]) ; } } coend