操作系统进程同步

目录

1 进程同步的基本概念

1.1 进程同步概念的引入

1.1.1 两种形式的制约关系

1.1.2  临界资源

1.2 临界区问题

2 信号量机制

2.1 信号量机制介绍

2.1.1 整型信号量

2.1.2 记录型信号量

2.1.3 AND 型信号量

2.1.4 信号量集

2.2 信号量的应用

3 管程机制

3.1 管程的定义

3.2 管程的特点

3.3 条件变量

4 经典的进程同步问题

5 相关例题 

选择题

填空题

简答题 

综合题


1 进程同步的基本概念

1.1 进程同步概念的引入

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

具有同步关系的一组并发进程称为协作进程。

1.1.1 两种形式的制约关系

(1)间接相互制约关系(互斥关系)。

多个程序在并发执行时,由于共享系统资源,如CPU、I/O设备等,这些并发执行的程序之

间会形成相互制约的关系。对于像打印机、磁带机这样的系统资源,必须保证多个进程对其只

能进行互斥访问,由此在这些进程间,形成了源于对该类资源共享的所谓间接相互制约关系,

也可称之为互斥关系。

(2)直接相互制约关系(同步关系)。

某些应用程序为了完成某项任务,会建立两个或多个进程。这些进程会为了完成同一任

务而相互合作。进程间的直接制约关系就是源于它们之间的相互合作,该关系也可称为同步关

系。

1.1.2  临界资源

许多硬件资源如打印机、磁带机等,进程在使用它们时都需要采用互斥方式,这样的资源被称为临界资源(critical resource)。

临界资源既可以是硬件资源,也可以是软件资源,如共享变量、文件等。

1.2 临界区问题

每个进程中访问临界资源的代码称为临界区(critical section)。

若能保证各进程互斥地进入自己的临界区,便可实现各进程对临界资源的互斥访问。

解决临界区问题的同步机制遵循: 

(1)空闲让进。当无进程处于临界区时,表明临界资源处于空闲状态,应允许1个请求进

入临界区的进程立即进入自己的临界区,以有效地利用临界资源。

(2)忙则等待。当已有进程进入临界区时,表明临界资源正在被访问,因而其他试图进入

临界区的进程必须等待,以保证对临界资源的互斥访问。

(3)有限等待。对于要求访问临界资源的进程,应保证其在有限时间内能进入自己的临界

区,以免陷入“死等”状态。

(4)让权等待(原则上应遵循,但非必须)。当进程不能进入自己的临界区时,应立即释

放处理机,以免进程陷入“忙等”状态。

2 信号量机制

2.1 信号量机制介绍

2.1.1 整型信号量

整型信号量:用于表示资源数目的整型量S,它仅能通过两个标准的原子操作(atomic operation)来访问,即wait(S)和signal(S)操作。分别称为P操作和V操作。

wait(S)和signal(S)是两个原子操作,因此,它们在执行时是不可中断的。亦即,当一个进程

在修改某信号量时,没有其他进程可同时对该信号量进行修改。此外,在wait(S)操作中,对S值

进行测试和做S:=S-1操作时都不可中断。

整型信号量的wait操作,只要是信号量S<=0,就会不断的测试,让进程处于一种“忙等”的状态,没有遵循让权等待的原则。

把信号量的初值置为1,表示只允许一个进程访问临界资源,此时的信号量就可以转换为互斥信号量,用于完成进程的互斥。

2.1.2 记录型信号量

S.value > 0时, S.value为系统中可用资源的数量;

S.value = 0时,可用资源量正好用完;

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

2.1.3 AND 型信号量

AND型信号量机制的基本思想是:将进程在整个运行过程中需要的所有资源,一次性全部

分配给进程,待进程使用完后再一起释放。只要尚有一个资源未能分配给进程,其他所有可能

为之分配的资源,也不分配给它。

2.1.4 信号量集

在前述记录型信号量机制中,wait(S)或signal(S)操作仅能对信号量施以加1或减1操作,这意

味着每次只能对某类临界资源进行一个单位的申请或释放。

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

优点:简单、易行且安全

缺点:1.资源被严重浪费,严重的恶化了资源的利用率;2.使进程经常会发生饥饿现象

2.2 信号量的应用

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

为使多个进程能互斥地访问某临界资源,只须为该资源设置一个互斥型信号量mutex,并设

其初值为1,然后将各进程访问该资源的临界区置于wait(mutex)和signal(mutex)操作之间即可。

这样,每个欲访问该临界资源的进程,在进入临界区之前,都要先对mutex执行wait操作。若该

资源此刻未被访问,则本次wait操作必然成功,进程便可进入自己的临界区,这时若再有其他进

程也欲进入自己的临界区,则由于对mutex执行wait操作定会失败,因而该进程阻塞,从而保证

了该临界资源能被互斥地访问。当访问临界资源的进程退出临界区后,又应对mutex执行signal

操作,以便释放该临界资源。

2.利用信号量实现进程同步

协作进程间除了互斥地访问临界资源外,还需要相互制约和传递信息,以同步它们之间的

运行,利用信号量同样可以达到这一目的。

3 管程机制

3.1 管程的定义

一个管程定义了一个数据结构和能被并发进程 (在该数据结构上)所执行的一组操作,这组操作能同步进程和改变管程中的数据。

3.2 管程的特点

管程是由一个或多个过程、一个初始化序列和局部数据组成的软件模块.

  1. ·局部数据变量只能被管程的过程访问,任何外部过程都不能访问。
  2. ·一个进程通过调用管程的一个过程进入管程。
  3. ·在任何时候,只能有一个进程在管程中执行,调用管程的任何其他进程都被阻塞,以等待管程可用。

3.3 条件变量

x.wait:正在调用管程的进程因x条件需要被阻塞或挂起,则调用x.wait将自己插入到x条件的等待队列中,并释放管程,直至x条件发生变化。

x.signal:正在调用管程的进程因为x条件发生了变化(资源使用完,归还),则调用x.signal,重新启动一个因x条件而阻塞或挂起的进程,如果存在多个,则选择其中的一个,如果没有,继续执行原进程,不产生任何唤醒操作。

4 经典的进程同步问题

参考文章:经典的进程同步问题-----生产者-消费者问题详解_进程同步生产者消费者问题-CSDN博客 

经典的进程同步问题-----读者-写者问题详解_读者-写者进程同步-CSDN博客

经典的进程同步问题-----哲学家进餐问题详解-CSDN博客

5 相关例题 

选择题

进程间的基本关系为( B )。
A 、相互独立与相互制约 B 、同步与互斥
C 、并行执行与资源共享 D 、 信息传递与信息缓冲
进程间的同步与互斥,分别表示了各进程间的( B)。
A 、相互独立与相互制约
B 、协调与竞争
C 、不同状态
D 、 动态性与独立性
两个进程合作完成一个任务,在并发执行中,一个进程要等待其合作伙伴发来信息, 或者建立某个条件后再向前执行, 这种关系是进程间的 ( A )关系。
A 、同步
B 、互斥
C 、竞争
D 、合作
PV 操作是( A )。
A 、两条低级进程通信原语
B 、两组不同的机器指令
C 、两条系统调用命令
D 、两条高级进程通信原语
信号量 S 的初值为 8 ,在 S 上执行了 10 P 操作, 6 V 操作后, S 的值为(  D )。
A 10
B 8
C 6
D 4
利用 PV 操作可以( A )。
A 、实现进程同步
B 、检测死锁
C 、解除死锁
D 、防止死锁

填空题

1、 每执行一次 V 操作,信号量的数值 S 加 1 。若 __S>=0______ ,则该进程继续执行;否则,从对应的___就绪 _____ 队列中移出一个进程并将 _执行___ 状态赋予该进程。
2 、 利用信号量实现进程的 _ 互斥与同步 _ ,应为临界区设置一个信号量 MUTEX,其初值为 1,表示该资源尚未使用,临界区应置于 _P(mutex)_ 和 ____V(mutex)____原语之间。
3 、 操作系统中信号量的值与 _ 相应资源 _ 的使用情况有关,它的值仅能由_P V 操作 _ 来改变。
4 、 _PV操作 _ 能够实现临界区的管理要求。
5、 PV操作由 ___P 操作 __ __V 操作 __ 组成,是对 __ 资源 __ 进行操作。
6、 P 操作信号的值 __S =S-1__ ,若结果小于 0 ,则该进程值为 __ 等待 __状态。 V 操作将信号量的值 __ S =S+1___ ,若结果 _ 大于 0__ ,则释放一个等待信号量的进程。
7 、 当并发进程存在竞争关系时必须排它地使用资源;当并发进程存在协作关系时必须 _ 共享资源 _ 。分别称为 __ 进程的互斥 __ _ 进程的同步 _
8 、 __互斥 __ 是指当有若干个进程都要使用某一共享资源时,任何时刻最多只允许 ___ _____ 个进程去使用,其他要只用该资料的进程必须_等待 _ ,直到占用资源者 __ 释放 __ 该资源。
9 、 进程的同步是指并发进程之间的一种 __直接的协同工作 __ 关系,一个进程的执行依赖另一个进程的 __信息或信号 ___ ,当一个进程没有得到它时应__ 等待 __ ,直到被 ___ 唤醒 _____
10 、 用 PV 操作是实现 ___ 同步 __ __ 互斥 __ 的有效工具,但若使用不当 则不仅 __ 会出现与时间相关的错误 __ 而且会 ___ 产生死锁 ____
11 、 并发进程之间通过 ___ 信号量 _____ 交换的是少量的信息, 这是一种 _ 低级_ 通信方式;而大量信息的传递要 __消息传递 __ 来实现,这是一种 __ 高级 __的通信方式,称为 ___ 消息传递机制 ___
12 、 实际上, _ 进程互斥 _ 是进程同步的一种特例。
13 、 目前常用的高级通信方式有共享存储器、 _消息传递通信机制 _ 、管道通信 _ 等。

简答题 

1、一个进程进入临界区的调度原则是什么?
答:进程进入临界区的调度原则是:
①如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。
②任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。
③进入临界区的进程要在有限时间内退出, 以便其它进程能及时进入自己的临界区。
④如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。
2、 假设 PV 操作用信号量管理某个共享资源,请问当S>0, S=0 S<0 时,它们的物理意义是什么?
答:S>0时,S表示可使用的资源数;或表示可使用资源的进程数;

       S=0时,表示无资源可供使用;或表示不允许进程再进入临界区;

       S<0时,-S表示等待使用资源的进程个数;或表示等待进入临界区的进程个数;

       当S>0时,调用P(S)的进程不会等待;调用V(S)后使可用资源数加1或使可用资            源的进程数加1;

        当S<0时,调用P(S)的进程必须等待;调用V(S)后将释放一个等待使用资源者或           释放一个等待进入临界区者。

3、 在一个单 CPU 的多道程序设计系统中, 若在某一时刻有 N 个进程同时存在,那么处于运行态、 等待态和就绪态进程的最小和最大值分别可能是多少?
答:状态      最大值     最小值
      运行态          1             1
      等待态        N-1           0
      就绪态        N-1           0
4 、 为什么并发进程执行时可能会产生与时间有关的错误,如何避免?
答:由于进程运行时会随时被中断(包括时间片到、申请资源等),不仅断点不固定,而且中断多长时间也不固定, 即进程是走走停停且它向前推进的相对速度无法由自身控制。有交往的并发进程可能会同时使用共享资源,如果对这种情况不加控制,由于进程占用处理器的时间、 执行的速度和外界的影响等, 就会引起与时间有关的错误。 只要使若干并发进程的相关临界区互斥执行,
就可避免造成这类错误。
5 、 什么是 PV 操作,它有什么作用?
答: PV 操作能够实现对临界区的管理要求。它由P 操作原语和 V 操作原语组成,对信号量进行操作,具体定义如下:
P S ):①将信号量 S 的值减 1 ,即 S=S-1
                 ②如果 S 0 ,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V S ):①将信号量 S 的值加 1 ,即 S=S+1
                 ②如果 S>0 ,则该进程继续执行;否则释放队列中第一个等待信号量的进程。

综合题

1、五个哲学家围坐在一个圆桌周围,每个哲学家面前都有一只碗,各碗之间分别有一根筷子。哲学家的生活包括两种活动:即吃面条和思考。当哲学家觉得饿时,他就分两次去取他左边和右边的筷子,每次拿一根(不能强行从邻座手中抢过筷子),如果成功,他就开始吃面条,吃完后把筷子放回原处继续思考。为了保证不产生死锁,最多只允许4个哲学家同时进餐。请用P、V操作,以实现操作过程中的互斥与同步。算法描述如下:

    semaphore chopstick [5] =           ;  //五根筷子互斥信号量

    semaphoret count=           ;    //用于控制就餐人数

cobegin

哲学家进程i:

    While (TRUE)

{   

Think;

                   ;

                 ;

                 ;

        Eat

                 ;

                 ;

                 ;

}

coend

(1) {1,1,1,1,1};

(2)4;

(3)P(count);

(4)p(chopstick[i]);

(5)p(chopstick[i+1mod 5]);

(6)v(chopstick[i]);

(7)v(chopstick[i+1mod 5]);

(8)v(count);

2、有个山洞对面有洞口可以穿出,两面都可以入与出,但是每次仅允许一个人出入。描述这个活动,用P/V(或wait/signal)操作约束活动控制。

设互斥信号量mutex;

begin

     mutex=                ;//设置互斥信号量初始值;

     cobegin

左面洞口的人过山洞进程;

begin

          人员到左洞口

         (1)                

           穿山洞;

         (2)                

          其他活动

End

右面洞口的人过山洞进程;

begin

               人员到右洞口   

(3)                

                穿山洞;

              (4)                

                 其他活动

end

 coend

     end

这两个进程之间是           关系(同步还是互斥)

p(mutex)v(mutex)p(mutex)v(mutex)、互斥

3、某家旅行社门票购买系统支持多个用户同时访问(系统数据库)。当有多个用户查询景区门票时,规定有用户在查询时,其他用户不能订门票;当用户正在进行购买门票时,不可以有其他用户使用数据库。试用P、V原语描述查询者和购票者的同步执行程序。设查询者互斥信号量为Xmutex, 购票者购票互斥信号量为Ymutex,查询者人数为count.

Semaphore  Xmutex=           , Ymutex=           ;

Int count=0;

chaxunzhe()

{

While(true)

{

                     ;

  If(count==0)                       ;

   count=count+1;

                     ;

 查票;

                         ;

count=count-1;

if(count==0)                                 ;

                        ;

}

}

goupiaozhe()

{

    While(true)

    {

                              ;

     购票;

                               ;

}

}

p(Xmutex)、p(Ymutex)、v(Xmutex)、p(Xmutex)、v(Ymutex)、v(Xmutex)、p(Ymutex)、v(Ymutex)

4、有一个生产者进程和消费者进程,它们共享一个单缓冲区,生产者进程不断地生产产品并将其放入单缓冲区中,消费者进程则负责从单缓冲区中取出每个产品进行消费,请用P、V操作实现生产者进程和消费者进程。

算法描述如下:

semaphore  full =           ;  //满缓冲区个数

semaphore  empty=           ;    //空缓冲区个数

producer()  //生产者进程

{

        While (TRUE)

{   

Produce next product;

                   ;

把生产好的产品放入缓冲区;

                 ;

       }

}

Consumer ()  //消费者进程

{

While (TRUE)

{                      ;

从缓冲区中取走产品;

                 ;

consume the product;

       }

}

   试说明生产者进程和消费者进程是             关系,解释该关系              

(1)0;

(2)1;

(3)P(empty)

(4)v(full)

(5)p(full)

(6)v(empty)

(7)同步;

(8) 生产者进程和消费者进程是有时序上制约关系,先生产,后消费,共同完成任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AWS云计算概览(自用留存,整理中)

目录 一、云概念概览 &#xff08;1&#xff09;云计算简介 &#xff08;2&#xff09;云计算6大优势 &#xff08;3&#xff09;web服务 &#xff08;4&#xff09;AWS云采用框架&#xff08;AWS CAF&#xff09; 二、云经济学 & 账单 &#xff08;1&#xff09;定…

【江协STM32】10-4/5 I2C通信外设、硬件I2C读写MPU6050

1. I2C外设简介 STM32内部集成了硬件I2C收发电路&#xff0c;可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能&#xff0c;减轻CPU的负担支持多主机模型支持7位/10位地址模式支持不同的通讯速度&#xff0c;标准速度(高达100 kHz)&#xff0c;快速…

Web开发中页面出现乱码的解决(Java Web学习笔记:需在编译时用 -encoding utf-8)

目录 1 引言2 乱码表现、原因分析及解决2.1 乱码表现2.2 原因分析2.3 解决 3 总结 1 引言 Web开发的页面出现了乱码&#xff0c;一直不愿写出来&#xff0c;因为网上的解决方案太多了。但本文的所说的页面乱码问题&#xff0c;则是与网上的大多数解决方案不一样&#xff0c;使…

分类模型为什么使用交叉熵作为损失函数

推导过程 让推理更有体感&#xff0c;进行下面假设&#xff1a; 假设要对猫、狗进行图片识别分类假设模型输出 y y y&#xff0c;是一个几率&#xff0c;表示是猫的概率 训练资料如下&#xff1a; x n x^n xn类别 y ^ n \widehat{y}^n y ​n x 1 x^1 x1猫1 x 2 x^2 x2猫1 x …

【AUTOSAR 基础软件】软件组件的建立与使用(“代理”SWC)

基础软件往往需要建立一些“代理”SWC来完成一些驱动的抽象工作&#xff08;Complex_Device_Driver_Sw或者Ecu_Abstraction_Sw等&#xff09;&#xff0c;或建立Application Sw Component来补齐基础软件需要提供的功能实现。当面对具体的项目时&#xff0c;基础软件开发人员还可…

【Linux】sed编辑器二

一、处理多行命令 sed编辑器有3种可用于处理多行文本的特殊命令。 N&#xff1a;加入数据流中的下一行&#xff0c;创建一个多行组进行处理&#xff1b;D&#xff1a;删除多行组中的一行&#xff1b;P&#xff1a;打印多行组中的一行。 1、next命令&#xff1a;N 单行next命…

HTML5 网站模板

HTML5 网站模板 参考 HTML5 Website Templates

数据链路层-STP

生成树协议STP&#xff08;Spanning Tree Protocol&#xff09; 它的实现目标是&#xff1a;在包含有物理环路的网络中&#xff0c;构建出一个能够连通全网各节点的树型无环逻辑拓扑。 选举根交换机&#xff1a; 选举根端口&#xff1a; 选举指定端口&#xff1a; 端口名字&…

前端学习-事件流,事件捕获,事件冒泡以及阻止冒泡以及相应案例(二十八)

目录 前言 事件流与两个阶段说明 说明 事件捕获 目标 说明 事件冒泡 目标 事件冒泡概念 简单理解 阻止冒泡 目标 语法 注意 综合示例代码 总结 前言 梳洗罢&#xff0c;独倚望江楼。过尽千帆皆不是&#xff0c;斜晖脉脉水悠悠。肠断白蘋洲 事件流与两个阶段说明…

Cognitive architecture 又是个什么东东?

自Langchain&#xff1a; https://blog.langchain.dev/what-is-a-cognitive-architecture/ https://en.wikipedia.org/wiki/Cognitive_architecture 定义 A cognitive architecture refers to both a theory about the structure of the human mind and to a computational…

CVE-2025-22777 (CVSS 9.8):WordPress | GiveWP 插件的严重漏洞

漏洞描述 GiveWP 插件中发现了一个严重漏洞&#xff0c;该插件是 WordPress 最广泛使用的在线捐赠和筹款工具之一。该漏洞的编号为 CVE-2025-22777&#xff0c;CVSS 评分为 9.8&#xff0c;表明其严重性。 GiveWP 插件拥有超过 100,000 个活跃安装&#xff0c;为全球无数捐赠平…

【Linux】网络层

目录 IP协议 协议头格式 网段划分 2中网段划分的方式 为什么要进行网段划分 特殊的IP地址 IP地址的数量限制 私有IP地址和公有IP地址 路由 IP协议 在通信时&#xff0c;主机B要把数据要给主机C&#xff0c;一定要经过一条路径选择&#xff0c;为什么经过路由器G后&…

HarmonyOS:@LocalBuilder装饰器: 维持组件父子关系

一、前言 当开发者使用Builder做引用数据传递时&#xff0c;会考虑组件的父子关系&#xff0c;使用了bind(this)之后&#xff0c;组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题&#xff0c;引入LocalBuilder装饰器。…

Elasticsearch—索引库操作(增删查改)

Elasticsearch中Index就相当于MySQL中的数据库表 Mapping映射就类似表的结构。 因此我们想要向Elasticsearch中存储数据,必须先创建Index和Mapping 1. Mapping映射属性 Mapping是对索引库中文档的约束&#xff0c;常见的Mapping属性包括&#xff1a; type&#xff1a;字段数据类…

MySQL进阶突击系列(05)突击MVCC核心原理 | 左右护法ReadView视图和undoLog版本链强强联合

2024小结&#xff1a;在写作分享上&#xff0c;这里特别感谢CSDN社区提供平台&#xff0c;支持大家持续学习分享交流&#xff0c;共同进步。社区诚意满满的干货&#xff0c;让大家收获满满。 对我而言&#xff0c;珍惜每一篇投稿分享&#xff0c;每一篇内容字数大概6000字左右&…

金融项目实战 02|接口测试分析、设计以及实现

目录 ⼀、接口相关理论 二、接口测试 1、待测接口&#xff1a;投资业务 2、接口测试流程 3、设计用例理论 1️⃣设计方法 2️⃣工具 4、测试点提取 5、测试用例&#xff08;只涉及了必测的&#xff09; 1️⃣注册图⽚验证码、注册短信验证码 2️⃣注册 3️⃣登录 …

指令的修饰符

指令的修饰符 参考文献&#xff1a; Vue的快速上手 Vue指令上 Vue指令下 Vue指令的综合案例 文章目录 指令的修饰符指令修饰符 结语 博客主页: He guolin-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&…

[DO374] Ansible 配置文件

[DO374] Ansible 配置文件 1. 配置文件位置2. 配置文件3. Ansible 配置4. Ansible的Ad-hoc5. Ansible 模块6. playbook段落7. 任务执行后续8. Ansible 变量8.1 ansible 变量的定义8.1.1 主机变量8.1.2 主机组变量 8.2 vars的循环 9. Ansible Collection10. Ansible-galaxy 安装…

STM32如何测量运行的时钟频率

前言 环境&#xff1a; 芯片&#xff1a;STM32F103C8T6 Keil&#xff1a;V5.24.2.0 一、简介STM32F103C8T6的时钟源 ①HSI 内部高速时钟,RC振荡器&#xff0c;频率为8MHz&#xff0c;精度不高。②HSE 外部高速时钟,可接石英/陶瓷谐振器&#xff0c;频率范围为4MHz~16MHz&…

【Web安全】SQL 注入攻击技巧详解:UNION 注入(UNION SQL Injection)

【Web安全】SQL 注入攻击技巧详解&#xff1a;UNION 注入&#xff08;UNION SQL Injection&#xff09; 引言 UNION注入是一种利用SQL的UNION操作符进行注入攻击的技术。攻击者通过合并两个或多个SELECT语句的结果集&#xff0c;可以获取数据库中未授权的数据。这种注入技术要…