操作系统--进程的互斥与同步

进程互斥

进程互斥:在多个程序中,有两个进程不可以同时进行(例如读,写操作)。

竞争资源(临界资源)

  • 当并发进程竞争使用同一资源时,他们之间就会发生冲突。如果操作系统将资源分配给其中的某一个进程使用,另一个进程就必须等待,直到申请的资源可用时,由操作系统分配给他们。
  • 如果竞争资源的进程太多,这些进程还必须等待在一个队列中,如就绪队列,阻塞队列等。
  • 一种极端的情况是,被阻塞进程永远得不到申请的资源,而死锁。

采用互斥方式,使用临界资源

资源的互斥,进程使用上述这类资源的时候,只能有一个进程对资源进行处理。下面是临界区的使用图和注解。

                            

进程同步

多个进程常常需要共同修改某些共享变量,表格,文件数据库等,协作完成一些功能。这个时候,就需要用到进程之间的同步。

我们把异步环境下的一组并发进程因直接制约而互相发送消息、进行互相合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步。

进程同步和互斥的解决方法

互斥与同步的解决方法--软件方法

控制p0,p1互斥的进入临界区。

while循环为进入区应该做的事情。当不符合条件的时候,进行do{nothing}操作。

使用软件解决方法,有一个公认的比较好的算法,为Dekker算法。下面是Dekker算法介绍。

Dekker算法介绍:

       

上面是Dekker算法的伪代码,还有p0进程的执行流程图。

互斥与同步的解决方法--硬件方法

硬件方法包括屏蔽中断和专用机器指令。

屏蔽中断:

由于进程切换需要依赖中断来实现,如果屏蔽中断,则不会出现进程切换。

因此,为了实现对临界资源的互斥使用,可以在进程进入临界区之前,屏蔽中断。当进程退出临界区时,打开系统中断。这样就实现了同步和互斥的问题的解决。

专用机器指令:

(指令系统是计算机硬件的语言系统,也叫机器语言)

利用一些专用机器指令也能实现互斥,机器指令在一个指令周期内执行,不会受到其他指令的干扰,也不会被中断。

下面就是一个使用机器指令的例子:

             

(左边为机器指令方法,右边为实现代码)

互斥与同步的解决方法--信号量

信号量方法,就是用一个信号量来控制进程之间的使用。(就像是交通中的红路灯(信号量)与汽车之间的关系和作用)

?信号量的类型(count):

?     互斥信号量:用于申请或者释放资源的使用权,常初始化为1.

?    ? 资源信号量:用于申请或者归还资源,可以初始化为大于1的正整数,表示系统中可用资源的个数。(比如说,我有多个显示屏,那么就可以使用count表示显示屏的个数。)

信号量的操作:wait和signal(操作系统中,用系统调用的形式来提供wait和signal原语)

s.conut为为信号量

wait为申请资源   (优先于signal)

signal为释放资源 (滞后于wait)

下面是wait,signal操作的伪代码

        

信号量的使用例子:


 

根据上面的信号量,我们可以总结出信号量的物理意义

互斥与同步的解决方法--管程

管程是一种在程序设计级控制进程互斥与同步的机制,具有信号量的功能,且更容易使用和控制。

管城只要用于面向对象程序设计。

互斥与同步的解决方法--通讯机制

消息一般格式:

 

消息传递同步操作原语

两个进程之间的通讯,需要一些操作。我们使用操作系统提供的原语来完成这些操作。

send原语:发送消息

receive原语:接受消息,如果没有消息可以接受,那么则等待。

常用的进程通讯

  1. 基于共享存储区的方法
  2. 邮箱的方式

分别介绍:

基于共享存储区的方式:

通讯的双方是基于共享存储区来通讯的。这个共享数据区属于每个相互通讯的进程的组成部分。然后通讯之间向里面存储数据,提取数据。

邮箱方式:

只要保证邮箱中,只有一个消息,那么就可以实现消息之间的互斥这样,就保证了进程之间的互斥。

时间: 2024-12-20 01:09:14

操作系统--进程的互斥与同步的相关文章

进程、join方法、守护进程、互斥锁

操作系统发展史 发展史1. 1946年第一台计算机诞生--20世纪50年代中期,计算机工作还在采用手工操作方式.此时还没有操作系统的概念.2. 20世纪50年代后期,出现人机矛盾:手工操作的慢速度和计算机的高速度之间形成了尖锐矛盾,手工操作方式已严重损害了系统资源的利用率(使资源利用率降为百分之几,甚至更低),不能容忍.3. ?唯一的解决办法:只有摆脱人的手工操作,实现作业的自动过渡.这样就出现了成批处理.?? 批处理联机批处理系统(即作业的输入/输出由CPU来处理,例如 通过磁带)脱机批处理系

<<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步(1)

<<操作系统精髓与设计原理>>读书笔记(一) 并发性:互斥与同步 并发问题是所有问题的基础,也是操作系统设计的基础.并发包括很多设计问题,其中有进程间通信,资源共享与竞争,多个进程活动的同步以及分配给进程的处理器时间的. 和并发相关的关键术语:原子操作: 一个或多个指令的序列,对外是不可分的:即没有其他进程可以看到其中间状态或者中断此操作. 并发中,为了确保并发下的数据完整性,我们有一系列的同步方法,其实这些就是为了实现互斥性!对临界区程序的互斥性.有三种方法: 1.软件方法,但是

进程互斥与同步

一.进程互斥 首先我们要知道,为了保证程序执行最终结果的正确性,必须对并发执行的各进程进行制约,以控制它们的执行速度和对资源的竞争.需要回到一个问题,需要对程序哪些部分进行制约才能保证其执行结果的正确性?如:进程PA 和PB共享内存 MS,进程PA 和PB 各执行两条语句时,可能按以下顺序执行:当进程PA执行完第一条语句,开始执行进程PB,再接着执行进程PA 的第二条语句.这样会导致错误.如何保证正确性了?我们可以将各自的两条语句抽象为两个各以一个动作完成的顺序执行单位,这样执行结果的正确性就可

操作系统中的进程/线程互斥

在操作系统中,不同的进程和线程之间涉及到一个重要的问题就是互斥,即保证对共享数据的正确修改. 基本的思想就是避免多余一个进程或线程(后面统一用进程来代替)同时读写共享数据. 为了解决这个问题,有很多的想法,为了方便说明各自的问题,按照<现代操作系统>中的思路来叙述. 首先是想到的控制进程的执行顺序,提出了两个方法:一个是严格轮转法,一个是Peterson算法. 严格轮转法就是让进程挨个按序执行,进程0做完了让给进程1,依次下去:缺点就是有忙等待,而且进程0可能会被不在临界区的进程1阻塞(因为两

【Java】线程并发、互斥与同步

网络上对于线程的解析总是天花龙凤的,给你灌输一大堆概念,考研.本科的操作系统必修课尤甚,让你就算仔细看完一大堆文章都不知道干什么. 下面不取网站复制粘贴,在讲解自己的Java线程并发.互斥与同步之前先给大家解构操作系统书中那些给出书者为了出书者而写的废话到底是什么意思. 大神们如果只想看程序,可以自行跳过,反正我的文章从来新手向,不喜勿看. 一.线程的基本概念 其实线程的概念非常简单,多一个线程,就多了一个做事情的人. 比如搬东西,搬10箱货物,这就是所谓的一个进程,一个人,就是所谓的一个线程,

操作系统--进程管理(Processing management)

一.进程的组成 进程通常由程序.数据和进程控制块(Process Control Block,PCB)组成. 二. 进程的状态以及状态切换 进程执行时的间断性决定了进程可能具有多种状态,最基本的三种状态如下 ① 就绪状态,当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,就可以立即运行,进程这时的状态称为就绪状态.在一个系统中可能多个进程处于就绪状态,通常将它们排成一个队列,称为就绪队列. ② 执行状态,进程已获得CPU,其程序正在执行.在单处理机系统中,只有一个进程处于执行状态,在

进程之间的线程同步

Mutex类.Event类.SemaphoreSlim类和ReaderWriterLockSlim类等提供了多个进程之间的线程同步. 1.WaitHandle 基类 WaitHandle抽象类,用于等待一个信号的设置.可以根据其派生类的不同,等待不同的信号.异步委托的BeginInvoke()方法返回一个实现了IAsycResult接口的对象.使用IAsycResult接口可以用AsycWaitHandle属性访问WaitHandle基类.在调用WaitOne()方法时,线程会等待接收一个和等待

操作系統-進程管理2(進程的互斥與同步)

操作系统-进程管理2(进程的同步与互斥) 进程的同步与互斥 两个或两个以上的进程不能同时使用的资源称为临界资源.临界资源的存在带来了进程之间的互斥访问的问题. 进程互斥:逻辑上完全独立.毫无关系的两个进程因为竞争同一块资源而相互制约,称为进程互斥. 进程同步:有协作关系的进程不断调整它们之间的相对速度或执行过程,以保证临界资源的合理利用和进程的顺利执行.一般借由中间媒体实现:如信号量操作.加锁操作等.同步机制应遵循的规则: 空闲让进 忙则等待 有限等待:进程等待进入临界区的时间必须是有限的,避免

互斥与同步

一.竞争条件 1.什么是竞争条件? 两个或者多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序,称为竞争条件. 2.怎样避免竞争条件? 要避免这种错误,关键是找出某种途径来阻止多个进程同时读写共享的数据.换言之,我们需要互斥!即以某种手段确保当一个进程在使用一个共享变量或者文件时,其他进程不能做同样的操作. 3.什么叫临界区? 我们把对共享内存进行访问的程序片段称作临界区域或者临界区.使得两个进程不可能同时处于临界区中,就能够避免竞争条件. 4.一个好的避免出现竞争条件的解决方案,需