第三章作业

发布 2022-07-14 02:02:28 阅读 8467

1、什么是临界区?试举一个临界区的例子。

答:不允许多个并发进程交叉执行的一段程序称为临界区。例如,几个进程要对某一共享变量进行修改,则修改共享变量的那段**就是临界区。

2、 什么是进程的互斥?什么是进程的同步?

答:不允许两个以上的共享资源的并发进程同时进入临界区称为互斥。

并发进程因为直接制约而互相合作,互相等待,使得各进程按一定速度执行的过程称为进行间的同步。

3、比较程序、进程和线程这三个概念。

答:程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体,以文件的形式存在。

进程是程序在某个数据集上的一次执行。进程是一个动态的实体,它有自己的生命周期。它通过创建而产生,被调度到才执行,因等待资源或事件会转到等待状态,在完成任务后被撤消。

线程是进程中可以单独被调度执行的单位,一个进程可以拥有多个线程。

对于单线程的进程而言,进程既是分配资源的基本单位,也是调度执行的基本单位。对于多线程的进程,资源仍以进程为单位进行分配,但调度执行则是以线程为单位。

4、使用多线程有什么好处?举例说明。

答:引入多线程的好处:

1)、使用多线程,进程可以同时做几项工作。例如一个线程进行编辑,另一个线程统计单词的个数。或者一个线程进行计算处理,另一个线程负责响应用户的请求。

2)、对于有输入、计算和输入混合任务的进程,使用多线程可以提高效率。

3)、对于有多个核的cpu,多线程可以提高资源的利用效率。

4)、一般说来,**程之间进行切换比在进程间切换所要做的工作更少,因此对资源的要求也较少。

5)、同一进程的多个线程可共享同一进程的地址空间。线程间的通信比较简单。

例子如p2p**软件,一个**任务可以分由多个**线程完成。

5、什么是死锁?产生死锁的原因是什么?产生死锁有哪些必要条件?如何处理死锁?

答:死锁是由于并发进程(或线程)互相等待对方所拥有的资源,且在得到对方的资源之前不释放自己所拥有的资源,从而造成各并发进程(或线程)都不能继续推进的状态。

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

产生死锁有四个必要条件,分别是:

1) 互斥条件。

2) 不剥夺条件。

3) 部分分配。

4) 环路条件。

处理死锁的方法主有三种,分别是:

1) 预防。

2) 避免。

3) 检测与恢复。

6、进程间的通信方式有哪些?

答:在单机系统中,进程间的通信方式主要有:主从式,会话式,消息或者邮箱机制,共享存储区方式。网络上的通信主要采用socket方式。

7、什么是原语? p/v操作的三个功能分别是什么?

答:原语是一种特殊的程序段,它的执行过程是不可以中断的。

p/v操作涉及到对信号量的访问,由于可能有多个进程都要对信号量访问,为了保证这些进程对信号量的访问是互斥进行的,所以p/v操作要用原语的方式来实现。

p操作的三个功能是:

1) 将信号量的值减1;

2) 如果信号量的值大于等于零,则进程继续,否则该进程被阻塞,加入到此信号量的等待队列;

3) p操作以原语的方式实现,保证了对信号量的访问是互斥的。

v操作的三个功能是:

1) 将信号量的值加1;

2) 如果信号量的值大于零,则进程继续,否则唤醒此信号量的等待队列中的一个进程;

3) v操作以原语的方式实现,保证了对信号量的访问是互斥的。

8、在教材中描述生产者/消费者问题中,如果交换两个p操作的顺序,在什么情况下会出现死锁?

答:如果交换两个p操作的顺序,则在两种情况下会出现死锁。

第一种情况是当生产的产品放满缓冲区后,如果先来了一个生产者,则该生产者在执行p(mutex)时,成功,mutex的值变为0。但当它执行p(empty)时,由于没有空闲的缓冲区,所以它被阻塞。此后,不管是生产者还是消费者,都会因为执行p(mutex)而被阻塞,从而导致生产者不能生产,消费者不能消费,产生死锁。

第二种情况是当缓冲区中的产品被消费完后,如果先来了一个消费者,则该消费者在执行p(mutex)时,成功,mutex的值变为0。但当它执行p(full)时,由于没有产品可供消费,所以它被阻塞。此后,不管是生产者还是消费者,都会因为执行p(mutex)而被阻塞,从而导致生产者不能生产,消费者不能消费,产生死锁。

9、用p/v操作解决哲学家问题,要求不会出现死锁。

定义一个信号量数组chopstick[0..4],用来对筷子互斥使用,初值均设为1。给五个哲学家分别编号为0,1,2,3,4。

规定奇数号的哲学家先拿左边的筷子,再拿右边的,而偶数号的哲学家则先拿右边的,再拿左边的。

void philosopher (int i)

while (true)

think( )

if ( i mod 2 ) 0 )

else eat( )

v( chopstick[ i ]

v( chopstick[ (i + 1 ) mod 5]);

用p/v操作解决睡觉的理发师问题。

定义信号量 cuthair,用来记录理发师是否能够理发(或者可以睡觉),初值为0;

定义信号量 waiting,用来表示顾客是否需要等待,初值为1;

定义变量count,用来记录等待理发的顾客个数,初值为0;

定义信号量 countmutex,用来对变量count进行互斥访问,初值为1;设n把椅子。

void barber()

while( true )

void customer()

p( countmutex );

if ( count ==n + 1 ) exit( )没位离开。

count = count + 1;

if ( count > 1 ) count > 1已经有顾客。

else v( countmutex );

v( cuthair );

receivehaircut( )

p( countmutex );修改顾客人数。

count = count - 1;

if ( count > 0 ) 如果还有人在等。

v(waiting);

v(countmutex);

第三章作业

v s 顺序执行下述两个动作 1.s值加1,即s s 1 2.如果s 0,则该进程继续运行 3.如果s 0,则唤醒等待信号量s阻塞队列中的头一个进程 把阻塞态改为就绪态 执行v操作的进程继续运行。procedure s var s semaphore begin s s 1 if s 0 then ...

第三章作业

1 顺序栈空 栈满条件2 链栈栈空 栈满条件。3 循环队列队空 队满条件,如何表示队列中数据元素的个数4 链队列队空 队满条件。5 以下运算实现在顺序栈上的进栈,请在 处用适当的语句予以填充。int push sqstacktp sq,datatype x if sp top sqstack max...

第三章作业

1.论述各类绿地的环境特点和树种的选择。一 高层建筑中的狭窄街巷绿地绿地内的环境特点 直射辐射量少,日照时间短 夏季气温偏低,冬季因受周围建筑物热辐射的影响,气温偏高 风速一般偏低,但有时会产生狭管效应,使风速增大。这些地方裸露土面极少,多为水泥铺装,严重阻碍了土壤与大气的水 气交换,且存在一定程度...