操作系统进程管理-同步和互斥

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

进程管理

一、进程互斥

由于进程具有独立性和异步性等并发特征,计算机的资源有限,导致了进程之间的资源竞争和共享,也导致了对进程执行过程的制约。

1.临界区相关概念:
临界资源:也就是一次只允许一个进程操作使用的计算机资源,这里的资源可以是物理资源,也可以是你逻辑上的变量等。
临界区:把不允许多个并发进程交叉执行的一段程序称为临界区(critical region)或临界部分(critical section)。
当一个进程使用该临界资源时,其他需要访问该资源的进程必须阻塞,直到占用者释放该资源。

2、间接制约
把这种由于共享某一公有资源而引起的在临界区内不允许并发进程交叉执行的现象,称为由共享公有资源而造成的对并发进程执行速度的间接制约。这里的“间接”二字主要是指各并发进程的速度受公有资源的制约,而非进程之间的直接制约。

3.进程互斥
在并发进程中,一个或多个进程要对公用资源进行访问时,必须确保该资源处于空闲状态,也就是说,在并发进程中,临界区只允许一个进程进入,而其他进程阻塞,等待该共享临界资源释放。

4.并发进程之间必须满足一下特征:

  • 平等竞争:即各并发进程享有平等地、独立地竞争共有资源的权利,且在不采取任何措施的条件下,在临界区内任意指令结束时,其他并发进程可以进入临界区。
  • 互斥使用:当并发进程中的 多个进程同时申请进入临界区时,它只允许一个进程进入临界区。
  • 不可独占:当进程不在临界区后,它不能阻止其他进程进入临界区。
  • 有限等待:也就是在就绪队列中的进程等待资源时间必须是有限的。并发进程中的某个进程从申请进入临界区时开始,应在有限时间内得以进入临界区。

二、互斥的实现

2.1、互斥的加锁实现:
对互斥的临界区进行加锁处理,即当一个进程进入了 临界区之后,对此临界区进行加锁,直到该进程退出临界区为止。而其他并发进程在申请进入临界区之前,必须测试该临界区是否加锁,如果是,则阻塞等待!
加锁实现是系统的原语:lock(key[S])和Unlock(key([S]))均保持原子操作。系统实现时锁定位key[S]总是设置在公有资源所对应的数据结构中的。

2.2、互斥加锁实现的缺点:
1.在进行锁测试和定位中将耗费CPU资源
2、进程加锁实现可能对进程不公平,例如:

进程A:
lock(key[S])
<S>
unlock(key[S])
Goto A进程B:
lock(key[S])
<S>
unlock(key[S])
Goto B

如上面所示,进程A和B之间的一个进程运行到Goto之后,会使得另一个进程无法得到处理机资源运行。而处于永久饥饿状态(starvation)。

分析可以知道,一个进程能否进入临界区取决于进程自己调用lock过程去测试相应的锁定位。也就是说,每个进程能否进入临界区是依靠进程自己的测试判断。这样,没有获得执行机会的进程当然无法判断,从而出现不公平现象。

那么是否有办法解决这个问题呢?当然,很明显,办法是有的,我们可以为临界区设置一个管理员,由这个管理员来管理相应临界区的公有资源,它代表可用资源的实体,这个管理员就是信号量

3、信号量和P、V操作
信号量和P、V原语是荷兰科学家E. W. Dijkstra提出来的。
P原语:*P是荷兰语Proberen(测试*)的首字母。为阻塞原语,负责把当前进程由运行状态转换为阻塞状态,直到另外一个进程唤醒它。操作为:申请一个空闲资源(把信号量减1),若成功,则退出;若失败,则该进程被阻塞;

V原语:V是荷兰语Verhogen(增加)的首字母。为唤醒原语,负责把一个被阻塞的进程唤醒,它有一个参数表,存放着等待被唤醒的进程信息。操作为:释放一个被占用的资源(把信号量加1),如果发现有被阻塞的进程,则选择一个唤醒之。

【信号量semaphore】 在操作系统中,信号量sem是一个整数。

  • sem >= 0时,代表可供并发进程使用的资源实体数;
  • sem < 0时,表示正在等待使用临界区的进程数。

显然,用于互斥的信号量sem的初值应该大于0,而建立一个信号量必须说明所建信号量代表的意义,赋初值,以及建立相应的数据结构,以便指向那些等待使用该临界区的进程。sem初值为1。

【P、V原语】
信号量的数值仅能由P、V原语操作改变。采用P、V原语,可以把类名为S的临界区描述为:When S do P(sem) 临界区 V(sem) od。

  • 一次P原语操作使信号量sem减1
  • 一次V原语操作使信号量sem加1

P原语操作:

sem减1;
若sem减1后仍大于或等于0,则P原语返回,该进程继续执行;
若sem减1后小于0,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。

V原语操作:

sem加1;
若相加结果大于0,V原语停止执行,该进程返回调用处,继续执行;
若相加结果小于或等于0,则从该信号的等待队列中唤醒一个等待进程,然后再返回原进程继续执行或转进程调度。


这里给出一个使用加锁法的软件实现方法来实现P、V原语:

P(sem):begin封锁中断;lock(lockbit)val[sem]=val[sem]-1if val[sem]<0保护当前进程CPU现场当前进程状态置为“等待”将当前进程插入信号sem等待队列转进程调度fiunlock(lockbit);开放中断end
V(sem):begin封锁中断;lock(lockbit)val[sem]=val[sem]+1if val[sem]<=0local k从sem等待队列中选取一个等待进程,将其指针置入k中将k插入就绪队列进程状态置位“就绪”fiunlock(lockbit);开放中断end

2.3用P、V原语实现进程互斥
设信号量sem是用于互斥的信号量,且其初始值为1表示没有并发进程使用该临界区。显然,由前面论述可知,只要把临界区置于P(sem)和V(sem)之间,即可实现进程之间的互斥。

用信号量实现两个并发进程PA和PB互斥的描述如下:
(1)设sem为互斥信号量,其取值范围为(1,0,-1)。其中sem=1表示进程PA和PB都未进入类名为S的临界区,sem=0表示进程PA或PB已进入类名为S的临界区,sem=-1表示进程PA和PB中,一个进程已进入临界区,而另一个进程等待进入该临界区。
(2)实现过程:

Pa:P(sem)<S>V(sem)...
Pb:P(sem)<S>V(sem)...

三、进程同步

【进程间的直接制约】:一组在异步环境下的并发进程,各自的执行结果互为对方的执行条件,从而限制各进程的执行速度的过程称为并发进程间的直接制约。这里的异步环境主要是指各并发进程的执行起始时间的随机性和执行速度的独立性。

【进程间的同步】:把异步环境下的一组并发进程因直接制约而互相发送消息而进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。具有同步关系的一组并发进程称为合作进程,合作进程间相互发送的信号称为消息或事件。
用消息实现进程同步:

用
wait(消息名)
表示进程等待合作进程发来的消息。用
signal(消息名)
表示向合作进程发送消息。过程wait的功能是等待到消息名为true的进程继续执行,而signal的功能则是向合作进程发送合作进程所需要的消息名,并将其值置为true。

【进程互斥和进程同步】
进程同步不同于进程互斥,进程互斥时它们的执行顺序可以是任意的。一般来说,也可以把个进程之间发送的消息作为信号量看待。与进程互斥时不同的是,这里的信号量只与制约进程及被制约进程有关,而不是与整租并发进程有关。因此,称该信号量为私用信号量(private semaphore)。一个进程Pi的私用信号量semi是从制约进程发送来的进程Pi的执行条件所需要的信息。与私用信号量相对应,称互斥时使用的信号量为公用信号量。

用P、V原语实现进程同步】:
首先为各并发进程设置私用信号量,然后为私用信号量赋初值,最后利用P、V原语和私用信号量规定各进程的执行顺序。

操作系统之——进程管理:同步进程和进程互斥相关推荐

  1. Linux进程管理(一)进程数据结构

    Linux进程管理 Linux进程管理(一)进程数据结构 Linux进程管理(二)进程调度 Linux进程管理(三)进程调度之主动调度 Linux进程管理(四)进程调度之抢占式调度 Linux进程管理 ...

  2. 操作系统 进程管理(一)——进程的含义与状态

    目录 程序的执行特征 程序的顺序执行及其特征 程序并发执行的特征 进程的基本概念 进程的含义与特征 (一) 进程的定义 (二)进程的结构 (三) 进程与程序的区别与联系 (四) 进程的特征 (五) 进 ...

  3. 操作系统之进程管理:3、进程控制(进程状态转化的实现)、原语、进程通信(共享、管道、消息)

    3.进程控制 进程控制 思维导图 进程控制相关的原语 创建原语 撤销原语 阻塞原语.唤醒原语 切换原语 原语要做的几件事 进程通信 思维导图 进程通信方式 数据共享 管道通信 消息传递 进程控制 1. ...

  4. 操作系统 进程管理(三)——进程同步方法简述

    目录 进程同步的基本概念 1)两种形式的制约关系 2)Critical section(临界区) 3)Mutual exclusion(互斥) 4)Dead lock(死锁) 5)Starvation ...

  5. php-frm进程管理,PHP内核探索-进程管理

    进程管理方式 首先我们了解一下php的三种不同的进程管理方式: static:静态管理进程.在启动时,master按照pm.max_children配置fork出对应数量的work进程,即work的进 ...

  6. tp5 queue.php,tp5(think-queue)消息队列+supervisor进程管理实现队列常驻进程

    前言 传统的程序执行流程一般是 即时|同步|串行的,在某些场景下,会存在并发低,吞吐量低,响应时间长等问题.在大型系统中,一般会引入消息队列的组件,将流程中部分任务抽离出来放入消息队列,并由专门的消费 ...

  7. linux下进程管理的原理,Linux进程管理:supervisor和nohup原理及使用

    原理 守护进程(daemon) 守护进程是一类在后台运行的特殊进程,用于执行特定的系统任务.他独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.Linux系统的大多数服务器就是通过守护进 ...

  8. linux内核——3_(进程管理)系统的进程管理

    作者:GWD 时间:2019.7.28 一.系统的进程的运转方式 1.系统时间:(jiffies系统滴答):CPU内部有一个RTC,会在上电的时候调用mktime函数算出从1970年1月1日0时开始到 ...

  9. 二、进程管理(一)进程与线程

    目录 1.1 进程的概念 1.1.1 进程的作用和组织 1.1.2 进程的状态与转换 1.1.3 进程控制 1.1.4 进程的通信 1.2 线程的概念 1.2.1线程的概念 1.2.2用户级线程和内核 ...

  10. windows进程管理器_软件进程自动重启一遍又一遍……你需要这款自动杀进程的小公举ProcessKO...

    [PConline 应用]用Windows系统最烦的一件事,就是各种乱七八糟的进程.我们知道软件要运行,就会在后台唤起进程,但这些进程有时候并不那么听话,某些软件会不断唤起进程,对此Windows自带 ...

最新文章

  1. java基础--相等
  2. http文件服务器和ftp文件服务器,http和ftp文件服务器
  3. PresentViewController详解
  4. Recordset.State 属性
  5. 将Excle数据导入到数据库
  6. 通过从全局和类内部重载operator new /delete来获取内存管理权
  7. leetcode 121
  8. 5kb大小的云洗衣机HTML源码 朋友圈在线洗衣服
  9. 生产者消费者代码c语言_由生产者消费者模型引出的线程同步问题
  10. 教你把gps服务器修改为中国加速搜星,Android的GPS加速搜星的原理和方法
  11. 介绍电子计算机的英文简介,写介绍电脑的英语作文
  12. 弯管机编程软件电脑版_乐高Wedo2.0电脑版下载
  13. mantis Linux安装教程,CentOS Linux安装mantis
  14. iOS总结-Runtime篇之黑魔法Method Swizzling的滥用会有危险吗
  15. 常见漏洞知识库(原理/场景/修复)
  16. list中移除元素:用remove(i)方法遇到的坑以及替代方法
  17. Linux虚拟机如何修改mysql的数据目录位置
  18. Storyboard 解析
  19. 【学习笔记】斯坦福SCI写作课 Unit 1
  20. 喜欢一个讨厌的人_为什么我们喜欢讨厌漫画无人

热门文章

  1. 网络工程师2017上半年上午试题答案
  2. 电脑基础常识:CPU、GPU、内存、主板、电源
  3. Java解决杨辉三角问题(这里提供了两种方法)
  4. Office噩梦公式远程代码执行漏洞
  5. java Mail使用SSl,端口465加密发送邮件配置
  6. forEach、for…in、 for…of 的区别
  7. HTML+CSS 绘制太阳系各个行星运行轨迹
  8. 怎么在手机上取消双重认证_用手机在淘宝上怎么开网店?流程步骤详解
  9. 谷歌科学家:目标优化不好使?今天聊聊泛化这件事儿
  10. 计算机基础为什么要学word,计算机基础中word教学探讨