2.4进程同步

2.4.1进程同步基本概念——进程之间制约关系

一 进程同步介绍

进程同步的主要任务是对多个相关进程在执行次序上进行协调,以便并发执行的进程之间能有效的共享资源相互合作,从而使得程序的执行具有可在现性。

二 进程之间两种制约关系

1. 间接相互制约(互斥)

2. 直接相互制约关系(合作)

2.4.1 进程同步基本概念——临界资源

系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源互斥资源共享变量,在共享临界资源是,应采用互斥方式。
生产者-消费者案例是典型的进程同步现象(参考教材)

2.4.1 进程同步基本概念——临界区

不论硬件临界资源还是软件临界资源,多个进程必须互斥的进行访问。现在每个进程访问临界资源的那段代码称为临界区
若能保证进程互斥的进入自己的临界区,便可实现进程对临界资源的互斥访问
每个进程进入临界区前,应对欲访问的临界资源进性检查

  • 如果此刻临界资源未被访问,进程便可进入临界区对该资源进行访问,并设置它正被访问的标志
  • 如果此刻该临界资源正被某进程访问,则本进程不能进入临界区
    进入区:在临界区前面增加一段用于进行上述代码的检查
    退出区:在临界区后面加上一段代码,用于将临界区正被访问的标志恢复为未被访问的标志。
    剩余区:进程中除进入区、临界区及退出区之外的其他部分代码

2.4.2同步机制

一 同步机制遵循的规则

四大规则
空闲让进
忙则等待
有限等待
让权等待

  • 空闲让进:
    当无进程在临界区,表明临界资源处于空闲状态,任何有权使用互斥区的进程可进入
  • 忙则等待:
    当已有进程进入临界区时表明临界资源正在被访问,其他必须等待,只能一个使用
  • 有限等待
    对要求访问临界资源的进程应保证在有限时间内能进入自己的临界区,避免死等状态。
  • 让权等待
    当进程不能进入临界区,立即释放处理机,避免进程陷入忙等状态

二 硬件同步机制

1. 关中断

关中断是实现互斥的最简单的方法之一。在进入锁测试之前关闭中断,直到完成锁测试并上锁之后才能打开中断,这样,进程在临界区之行期间,计算机系统不响应中断,从而不会引发调度,也就不会发生进程或线程切换。

2. 利用Test-and-Set指令实现互斥

借助指令测试并建立来实现互斥的放大,许多计算机都提供这种指令。

3. 利用Swap指令实现进程互斥

称为对换指令,在Intel 80x86中又称为XCHG指令,用于交换两个字的内容

2.4.3信号量机制

一 整型信号量

最初由Dijkstra把整型信号量定义为一个表示资源数目的整型量S,除初始化外,仅能通过两个标准的原子操作wait(S)和signal(S)来访问S,这两个操作简称为P,V操作
可描述为

wait(S):  while S<=0 do  no-op;
              S:=S-1;
              signal(S): S:=S+1;

二 记录型信号量

在整型信号量机制中的wait操作,只要信号量 S <= 0,就会不断的测试,因此,该机制并未遵循让权等待的规则,而是进程处于忙等状态,而记录型信号量机制则不存在。
为了避免多个进程等待访问同一临界资源的情况,在此,信号量机制中,除了需要宇哥用于代表资源数目的整型变量value外,还应增加一个进程链表指针list,用于链接上述所有进程。

  • wait(S)操作过程如下
procedure wait(S)
                 var S: semaphore;
                      begin
                      S.value:=S.value-1;
                      if S.value<0 then block(S.L);
                      end
  • signal(S)操作过程如下
procedure signal(S)
                 var S:semaphore;
                      begin;
                      S.value:=S.value+1;
                      if S.value<=0 then wakeup(S.L);
                      end

你可能感兴趣的:(2.4进程同步)