进程之间的关系

在多道程序环境下,系统内同时运行的并发进程通常有多个,在这多个进程间必定存在以下两种情况:

  • 相互独立的进程:这种进程既不影响系统中其它进程的执行,也不受其它进程的影响,它们各自是独立的。

  • 彼此有关的进程:这种进程的执行依赖于其它进程的进展情况,或者说,它们之间存在着相互制约关系。

进程间执行时的相互制约关系又可分为两种:

  • 间接制约关系:共享系统资源
  • 直接制约关系:相互合作

并发执行的进程间存在这样的制约关系,以及进程在并发执行时具有异步性会给系统造成混乱。

解决的方法:

(1)保证多个进程采用互斥的方式访问临界资源;

(2)其次要协调相互合作的各个进程的执行次序。

进程同步

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

一、进程同步的基本概念

1、临界资源

在一段时间内只允许一个进程访问的资源,称为是临界资源,对于临界资源应采用互斥的访问方式。

2、临界区

临界区:

进程中访问临界资源时要执行的代码段。

repeat
  entry section;      进入区 
  critical section;    临界区
  exit section;      退出区
  remainder section;   剩余区
until false;

临界区的作用:

只有进程进入到临界区才能访问临界资源,也即临界区就是为了让进程以互斥的方式访问临界资源而设置的。

3、同步机制应遵循的规则

  • 空闲让进:当临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入临界区。
  • 忙则等待:进程正在访问某临界资源则不允许其它的进程再进入到临界区去访问这个临界资源,而是让它等待。
  • 有限等待:进程在等待进入临界区访问临界资源时,应该限制这个等待的时间。
  • 让权等待:权是指处理机的使用权。

二、信号量机制

1、整型信号量

  • 信号量S:表示系统某类资源可用的个数。
  • 原子操作wait(S):进程申请一个资源; P操作
  • 原子操作signal(S):进程释放一个资源。V操作

在进程对某类临界资源进行访问时必须执行而且只能执行这两个原子操作才能对资源进行访问。

wait和signal操作可描述为:

wait(S):         while S≤0 do no-op                  S≤0表示系统中没有此类资源
                     S:=S-1;                              若系统还有这类资源,则允许进程访问,并且在进程访问时将该类资源的个数减少一个。
                                                                      —————申请资源的操作/P操作

signal(S):      S:=S+1;                              进程在访问完资源后要释放此类资源,系统中的这类资源就增加一个,因此要将信号量S做加一操作
                                                                      —————释放资源的操作/V操作

P、V操作的性质:

具有原子性,进程只有通过 P操作 或是 V操作 才可以对信号量S进行修改,其它的进程不能同时对信号量S进行修改的。

利用 P、V操作 实现进程对资源的互斥访问。

利用P、V操作实现对临界资源的互斥访问

例如:系统中有两个进程A和B竞争进入临界区,用信号量S表示临界区这种资源的个数,并设S的初始值为1,那么描述如下:
进程A           进程B
……           ……
P(S);          P(S);
临界区操作;         临界区操作;
V(S);          V(S);

利用P、V操作实现进程间的简单同步。

例如:设S是信号量,表示缓冲区的所存放的信息资源个数,在这里我们让这一个缓冲区中只能存放一个信息,且初始值为0:

进程A         进程B
……           ……
将信息送到缓冲区;    P(S);
V(S);       把信息从缓冲区取走;

型号量机制注意事项

  • 如果只有wait操作而没有signal操作,那么会出现只申请资源而不释放资源,使得别的进程由于申请不到该类资源而处于阻塞状态并且有可能一直处于阻塞状态。
  • 如果只有signal操作而没有wait操作,那么说明任何一个进程都可以修改信号量的值,从而不能保证进程对临界资源的互斥访问。
  • 这两个操作是必须成对出现的,但是可以不在一个进程中同时出现,如用P、V操作实现进程同步的例子。

整型信号量的缺点

违反同步机制中 “让权等待” 的规则

2、记录型信号量

在信号量机制中,除了一个用于代表资源数目的整型变量value外,还应增加一个进程链表L,用于链接那些由于申请不到某类临界资源而暂时等待的所有进程。它所包含的上述两个数据项可描述为:
type semaphore=record
  value: integer ;
  L: list of process ;
end

wait和signal操作可描述为:

procedure wait(S)
  var S:semaphore;
  begin
    S.value:=S.value-1;
    if S.value<0 then block(S.L)
  end

procedure signal(S)
  var S:semaphore;
  begin
    S.value:=S.value+1;
    if S.value≤0 then wakeup(S.L);
  end

P操作的功能描述

V操作的功能描述

记录型信号量的物理意义

  • S.value > 0时, S.value为系统中可用资源的数量;
  • S.value = 0时,可用资源量正好用完;
  • S.value < 0时,| S.value |为系统中等待使用该资源的队列长度,即 (在信号量上等待的进程数)。

3、AND型信号量

AND同步机制的基本思想

将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程,等进程使用完后再一起将这些资源释放。
因此可以在wait操作中通过增加一个“AND”条件来实现同时申请操作,即Swait操作, Swait定义如下:

Swait (S1,S2,…,Sn)
  if S1≥1 and … and Sn≥1 then
    for i:﹦1 to n do
      Si:﹦Si﹣1;
    endfor
  else
    place the process in the waiting queue associated with
    the first Si found with Si<1, and set the program count of
    this process to the beginning of Swait operation
  endif

Ssignal (S1,S2,…,Sn)
  for i:﹦1 to n do
    Si:﹦Si﹢1;
    remove all the process waiting in the queue
    associated with Si into the ready queue
  endfor;

4、信号量集

对AND信号量机制加以扩充,对进程所申请的所有资源以及每类资源不同的资源需求量,在一次P、V原语操作中完成申请或释放。

其中

  • Si:资源信号量,系统目前有的资源数;
  • ti:某资源分配的下限;
  • di:进程对某资源的需求量。

Swait (S1,t1,d1,…,Sn,tn,dn)
  if S1≥t1 and … and Sn≥tn then
    for i:﹦1 to n do
      Si:﹦Si﹣di;
    endfor
  else
    Place the process in the waiting queue of the first Si with Si<ti and set its program
    counter to the beginning of the Swait Operation
  endif
Ssignal (S1,d1,…,Sn,dn)
  for i:﹦1 to n do
    Si:﹦Si﹢di;
    Remove all the process waiting in the queue associated with Si into the ready queue
  endfor;

在信号量集机制中对于Swait操作有以下几种特殊情况:

(1)Swait ( S, d, d )

  此时在信号量集中只有一个信号量S,但允许它每次申请d个资源,当现有资源数少于d时,不予分配。

(2)Swait ( S, 1, 1 )

  此时的信号量集已蜕化为一般的记录型信号量(S>1时)或互斥信号量(S=1时)。

(3)Swait ( S, 1, 0 )

  这是一种很特殊且很有用的信号量操作。当S≥1时,允许多个进程进入某特定区;当S变为0后,将阻止任何进程进入特定区。换言之,它相当于一个可控开关。

5、信号量的作用

(1)利用信号量实现进程互斥

(2)利用信号量实现前驱关系

  例:设有两个并发执行的进程P1和P2。 P1中有语句S1;P2中有语句S2。要求实现S1先于S2执行。
  分析:进程P1和P2两者之间的关系。
  解决:设置公用信号量S,初始值为0。

  在进程P1中:
    ……
    执行S1;
    signal(S);
    ……

  在进程P2中:
    ……
    wait(S);
    执行S2;
    ……

转载于:https://www.cnblogs.com/weiyalin/p/10802930.html

操作系统(八)进程管理——进程同步相关推荐

  1. 【操作系统】进程管理(五)—— 信号量机制

    [操作系统]进程管理(五)-- 信号量机制 前言 一.信号量机制 信号量机制--整型信号量 信号量机制--记录型信号量 二.用信号量机制实现进程互斥.同步.前驱关系 信号量机制实现进程互斥 信号量机制 ...

  2. 【操作系统】进程管理(二)

    [操作系统]进程管理(二) 一.前言 二.进程的基本概念 2.1 程序的顺序执行 2.2 程序的并发执行 2.3 进程的特征 2.4 进程的状态 2.5 进程控制块 三.进程控制 3.1 进程的创建 ...

  3. 操作系统之——进程管理:同步进程和进程互斥

    操作系统进程管理-同步和互斥 在看了操作系统关于进程管理中的同步互斥机制章节之后,甚是困惑,今天通过视频.网上博客资料学习之后,整理一下相关知识点. 进程管理 一.进程互斥 由于进程具有独立性和异步性 ...

  4. 操作系统笔记——进程管理

    操作系统笔记--进程管理 2. 进程管理 2.1 进程与线程 2.1.1 进程的引入 前趋图 程序的顺序执行 程序的并发执行 2.1.2 进程的定义及描述 进程的定义 进程的特征 进程和程序的关系 进 ...

  5. 操作系统之进程管理-翟一鸣-专题视频课程

    操作系统之进程管理-192人已学习 课程介绍         主要内容是程序的并发执行及进程的概念,进程的状态及其转换,进程的同步与互斥,进程通信与调度,进程死锁的概念及解决死锁的方法,线程的概念及其 ...

  6. 视频教程-操作系统之进程管理-操作系统

    操作系统之进程管理 1979年出生于甘肃省兰州市,2001年7月本科毕业于西北师范大学计算机科学与技术专业,同年于烟台大学计算机学院任教至今:期间于2006年获得上海交通大学软件工程硕士学位,现为学院 ...

  7. 操作系统之进程管理相关总结

    第三章 进程管理 1.1进程的概念 1.1.1为什么要引入进程 程序并发执行具有如下特征 间断性 失去封闭性 不可再现性 程序的并发可以总结为:一组在逻辑上相互独立的程序或程序段在执行过程中,其执行时 ...

  8. 操作系统基本原理---进程管理

    处理机:计算机系统中存储程序和数据,并按照程序规定的步骤执行指令的部件.程序是描述处理机完成某项任务的指令序列.指令则是处理机能直接解释.执行的信息单位.处理机包括中央处理器,主存储器,输入-输出接口 ...

  9. 操作系统之进程管理_上(汤子瀛版)

    为什么80%的码农都做不了架构师?>>>    2.1 进程的基本概念 1. 程序的顺序执行及其特征 特征:顺序性.封闭性.可再现性 2. 程序的并发执行及其特征 (1)特征:间断性 ...

  10. 操作系统之进程管理(上),研究再多高并发,都不如啃一下操作系统进程!!!...

    目录: 进程管理 程序运行过程 进程实体的组成 进程的组织 进程的状态与转换 进程控制 为什么需要原语? 原语的实现? 中断机制 进程通信 共享内存 管道通信 消息传递 小结 线程 三种线程模型 多对 ...

最新文章

  1. 1个多月就能看到效果的减肥大法 - 生活至上,美容至尚!
  2. chrome88 android,Chrome 88 的新特性
  3. java spring框架 注解_详解Java的Spring框架中的注解的用法
  4. python最长回文子串leetcode_Python版LeetCode5. 最长回文子串
  5. 网址被微信拦截怎么办 微信屏蔽的域名如何正常访问
  6. jQuery下table操作示例(附案例源码)
  7. spring webscoket服务端使用记录
  8. 使用PagedDataSource给Repeater、DataList增加分页
  9. 手机上有哪些不错的c语言编程软件?
  10. Windows7旗舰版SP1_32位2018.10(办公版)
  11. 山寨机java游戏下载_Q版水浒-山寨英雄
  12. Web安全-ReDos正则表达式的拒绝服务攻击
  13. 保洁阿姨看完都会了!熬夜肝完这份Framework笔记,吐血整理
  14. 如何压缩图片大小但不失真
  15. python 中文转带音调的拼音
  16. Git LFS 入门指南
  17. 读取身份证信息系统的程序编写
  18. 小程序中image标签的mode属性,防止图片调整宽高而导致拉伸的问题
  19. H5 VUE实现手机签名功能
  20. 误差理论与数据处理实验报告

热门文章

  1. Unity3d 札记-Let's try shooting 知识点汇总
  2. C/C++02: Josephus问题
  3. 【dp】CF17C. Balance
  4. ASP.NET数据库访问系列教程01-概述篇 创建数据访问层(中)
  5. MAC 设置$PATH 关闭terminal后就失效 解决方案
  6. regini.exe使用方法
  7. java mysql 回滚_Java 中对数据库操作时的 回滚
  8. python问题解决方案_Python安装、遇到的问题及解决方案,python,和,方法
  9. densenet网络结构_FC-DENSENET用于图像分割学习笔记
  10. html5+、ReactNative、Weex、Ionic之间的区别、(配置java、python、Android环境)、ReactNative(react-native-cli)、yarn、Weex