进程的同步与通信

同步关系(直接制约):为了完成一个共同任务,相互协作的几个进程需要在某些确定点上协调他们的工作,等待来自其它进程的信息,以调整它们的推进速度,方可顺利执行完毕。

互斥关系(间接制约):把并发进程间存在的因相互竞争使用独占资源(共享资源)而产生的制约关系。

   例如:打印机,共享内存;

 

 

临界资源:一次仅允许一个进程使用的硬件或软件资源。

注意:对于临界资源,必须互斥访问,否则会导致执行结果的不确定性。

临界段(区):指在进程中访问临界资源的那段代码。

访问过程:

1)在进入临界段之前,写一段代码以检查可否进入临界段,通常把这段代码称为进入区(申请,判断)。

2)在退出临界段后,必须有一段代码来清除“正在访问临界段”标志,或发出本进程已经退出临界段的信息,把这段代码称为退出区(释放)。

 

同步机构:指能实现进程同步的机制,该机制能把其它进程需要的信息发送出去,也能测试自己需要的信息是否到达。

同步机构应遵循4个准则:

  1. 空闲让进;2、忙则等待;3、有限等待;4、让权等待;

 

 

实现临界段的硬件方法(低级方法)(了解)

  1. 屏蔽中断法,如进程1的程序:

disableInterrupt();// 不准中断

balance=balance+amount;  //执行指令

enableInterrupt(); //允许中断

  1. “Test_and_Set”指令

 如果机器支持Test_and_Set,可用下列方法解决:(lock=false)

do

{   while(Test_and_Set(&lock));      //进入区

        critical section;    //临界区

        lock=false;              //退出区

        non critical section;   //其它部分

}while(1);

3、“Swap”指令

该指令功能描述为:

void Swap(boolean &a, boolean &b){

 boolean temp=a;

    a = b;

    b = temp;

}

信号量(重点)

 

PV操作的实现

1. 信号量定义

   typedef struct{

      int:value;  一个数值型变量

       struct process *L;一个PCB队列

       } Semaphore

Semaphore S;

2. P操作

   P(S):   S.Value=S.value-1;

              if S.value<0 then 保存现场,

              将本进程挂入S.L队列,等待重新调度。

3. V操作

   V(S):   S.value:=value+1

                  if S.value≤0 then 从S.L队列

                  取一进程,挂入就绪队列。

 

4. P,V操作的优点:同步能力强

5. P,V操作的缺点:程序结构差,易产生死锁。

 

信号量的物理意义

P(s)操作:

 ①请求分配一个S代表的资源,执行S.value-1;

 ②若S.value<0,表示系统已无该类资源,申请者阻塞。此时,|S.value|表示该信号量上阻塞的进程数;

V(s)操作:

①进程释放一个S代表的资源,执行S.value+1;

②若S.value<=0,表示尚有进程因等待S代表的资源而处于阻塞状态,所以应唤醒其中之一。

 

使用PV 操作的几个经典案例,比如哲学家就餐问题

 

 

进程间的通信方式:https://blog.csdn.net/b9x__/article/details/80300224

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务