进程同步与死锁

1.同步和异步的区别,什么是进程互斥?

 解答:

 操作系统中的进程都是各自独立并以不可预知的速度向前推进,也就是一个进程相对于另一个进程的执行速度是无法确定的,即他们具有异步性。

 同步是进程间的直接制约关系,这种制约主要源于进程间的合作。进程同步的主要任务就是使并啊执行的个进程之间能有效地共享资源和相互合作,从而在执行时间,执行次序上相互制约,按照一定的协议协调执行,使程序的执行具有可再现性。

 进程互斥是进程间的间接制约关系,当多个进程需要使用相同的资源,而此类资源在任一时刻却只能供一个进程使用,获得资源的进程可以继续执行,没有获得资源的进程必须等待,进程的运行具有时间次序的特征,谁先从系统获得共享资源,谁就先运行,这种对共享资源的排它性使用所造成的进程间的间接制约关系称为进程互斥。互斥是一种特殊的同步方式。

2.信号量机制(P、V原语)生产者与消费者的问题。。

解答:

void wait(int S)//P操作

{

  while(S<=0);//小于等于0时,做空操作

 S=S-1;

}

void signal()//V操作

{

 S=S+1;

}3.什么是管程,管程和进程的区别

解答:

  管程由过程,变量及数据结构组成,它们共同构成了一个特殊的模块或软件包。

1)虽然两者都定义了数据结构,但进程定义的是私有数据结构PCB(进程控制块:为管理进程而专门设置的一个数据结构),而管程定义的是公共数据结构,如条件变量。

2)二者都存在对各自数据结构的操作,但进程是顺序执行,而管程则是进行同步操作和初始化操作;

3)进程是为了保证系统并发而设计的,管程是为了解决共享资源的互斥;

4)进程通过调用莞城中的过程来进行共享数据结构的操作,该过程就表现为进程的子程序,因此进程是主动的,管程是被动的。

5)进程间可并发,管程作为子程序不能与其调用者并发;

6)进程具有动态性和生命周期,而管程知识一个资源管理模块,供进程调用。

4.进程通信的方式

 解答:

 低级通信方式有:信号量和管程。

 高级通信方式有:共享存储器系统,消息传递系统(send和receive原语)和管道通信系统(共享文件)。

5.死锁、死锁避免策略及死锁的检测

 死锁相关概念:

 一:什么是死锁?

  举一个例子:资源1,2都是不可剥夺的资源,现在进程C已经申请资源1,进程D已经申请资源2, 接下来的操作时,进程C要用到资源2,进程D恰好也要用到资源1,这就会引发了死锁(这里的资源包括了软资源(代码块)和硬资源(如扫描仪),资源可分为 可剥夺和不可剥夺两种,可剥夺资源引起的死锁可以由系统重新分配资源来解决,一般来说,死锁都是指由不可剥夺的资源引起的)。

二:死锁的必要条件

  1).互斥条件:资源不能被共享,只能由一个进程使用

  2).请求与保持条件:如上述的例子所提到的,进程C和D都已经分别得到资源1,2.但是可以再次申请新的资源(进程C又申请资源2,进程D又申请资源1)

  3).非剥夺条件:某进程已经分配的资源不能被强制剥夺(例如进程C分配到的资源1不能被进程D强制剥夺)

  4).循环等待:系统中若干进程组成环路,该环路中每个进程都在等待相邻的进程正占用的资源(进程C在等待进程D拥有的资源2,进程D又在等待进程C拥有的资源1)。

三:处理死锁的策略

  1).忽略该问题(鸵鸟算法,原理可以用掩耳盗铃来解释)

  2).检测死锁并恢复

  3).仔细地对资源进行动态分配,以避免死锁。

  4).通过破除死锁四个必要条件之一,来防止死锁。

死锁避免策略(银行家算法):

在银行家算法中,若出现下述资源分配情况:

Process Allocation    Need       Available

P0      0 0 3 2     0 0 1 2       1 6 2 2

P1      1 0 0 0     1 7 5 0

P2      1 3 5 4     2 3 5 6

P3      0 0 3 2     0 6 5 2

P4      0 0 1 4     0 6 5 6

试问:

① 该状态是否安全?

② 若进程 P2 提出请求 Request( 1, 2, 2, 2 )后,系统能否将资源分配给它?

解:

现在对该时刻的状态进行安全分析:

    由于Available向量为(1,6,2,2),所以Work向量初始化为(1,6,2,2)该时刻的安全性检查表如下:

Work

Need

Allocation

Work+Allocation

Finish

A

B

C

D

A

B

C

D

A

B

C

D

A

B

C

D

P0

1

6

2

2

0

0

1

2

0

0

3

2

1

6

5

4

True

P3

1

6

5

4

0

6

5

2

0

0

3

2

1

6

8

6

True

P4

1

6

8

6

0

6

5

6

0

0

1

4

1

6

9

10

True

P2

1

6

9

10

2

3

5

6

1

3

5

4

2

9

14

14

True

P1

2

9

14

14

1

7

5

0

1

0

0

0

3

9

14

14

True

    如表所示,存在安全序列<P0,P3,P4,P2,P1>,所以该时刻处于安全状态。

    由于Request2(1,2,2,2)<Available(1,6,2,2)且Request2(1,2,2,2)<Need2(2,3,5,6),所以先试着把P2所申请的资源分配给它,Available变为(0,4,0,0)得到系统状态如下表所示:

Allocation

Need

Available

A

B

C

D

A

B

C

D

A

B

C

D

P0

0

0

3

2

0

0

1

2

0

4

0

0

P1

1

0

0

0

1

7

5

0

P2

2

5

7

6

1

1

3

4

P3

0

0

3

2

0

6

5

2

P4

0

0

1

4

0

6

5

6

    然后进行安全性检测,此时Available为(0,4,0,0),所以Work初始化为(0,4,0,0)。

    此时的Work小于任意的Need[i]向量,所以系统处于不安全状态,即认为不能分配资源(1,2,2,2)给P2。

死锁的检测:

某系统中有A、B、C、D四类资源,且其总数量都是8个。某时刻系统中有5个进程,判断下列资源状态是否安全?若进程P2申请资源(1,1,1,1),能否为其分配?

进程

Need

A  B  C  D

Allocation

A  B  C  D

P0

0  0  4  3

0  0  2  2

P1

2  6  3  0

1  1  0  0

P2

3  2  1  5

2  1  0  3

P3

4  0  2  0

2  0  0  0

P4

0  5  5  4

0  2  2  2

解:

现在对该时刻的状态进行安全分析:

    由于Available向量为(3,4,4,1),所以Work向量初始化为(3,4,4,1)

此时的Work小于任意的Need[i]向量,所以系统处于不安全状态

    由于Request2(1,1,1,1)<Available(3,4,4,1)且Request2(1,1,1,1)<Need2(1,1,1,2)

    所以先试着把P2所申请的资源分配给它,Available变为(2,3,3,0)得到系统状态如下表所示:

Allocation

Need

Available

A

B

C

D

A

B

C

D

A

B

C

D

P0

0

0

2

2

0

0

4

3

2

3

3

0

P1

1

1

0

0

2

6

3

0

P2

3

2

1

4

2

1

0

4

P3

2

0

0

0

4

0

2

0

P4

0

2

2

2

0

5

5

4

然后进行安全性检测:

此时Available向量为(2,3,3,0),所以Work向量初始化为(2,3,3,0),此时的Work小于任意的Need[i]向量,所以系统处于不安全状态,所以不可以为P2分配资源。

作者:wj704    出处:http://www.cnblogs.com/wj204/   
原文地址:https://www.cnblogs.com/wj204/p/3351908.html