操作系统进程同步

目录

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) 生产者进程和消费者进程是有时序上制约关系,先生产,后消费,共同完成任务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

灌区闸门自动化控制系统-精准渠道量测水-灌区现代化建设

项目背景 本项目聚焦于黑龙江某一灌区的现代化改造工程&#xff0c;该灌区覆盖广阔&#xff0c;灌溉面积高达7.5万亩&#xff0c;地域上跨越6个乡镇及涵盖17个村庄。项目核心在于通过全面的信息化建设&#xff0c;强力推动节水灌溉措施的实施&#xff0c;旨在显著提升农业用水的…

3.flask蓝图使用

构建一个目录结构 user_oper.py from flask import Blueprint, request, session, redirect, render_template import functools # 创建蓝图 user Blueprint(xkj, __name__)DATA_DICT {1: {"name": "张三", "age": 22, "gender": …

vue3学习日记1 - Pinia

最近发现职场前端用的框架大多为vue&#xff0c;所以最近也跟着黑马程序员vue3的课程进行学习&#xff0c;以下是我的学习记录 视频网址&#xff1a; Day2-02.Pinia-counter基础使用_哔哩哔哩_bilibili 学习日记&#xff1a; vue3学习日记1 - 环境搭建-CSDN博客 vue3学习日…

IP 地址与蜜罐技术

基于IP的地址的蜜罐技术是一种主动防御策略&#xff0c;它能够通过在网络上布置的一些看似正常没问题的IP地址来吸引恶意者的注意&#xff0c;将恶意者引导到预先布置好的伪装的目标之中。 如何实现蜜罐技术 当恶意攻击者在网络中四处扫描&#xff0c;寻找可入侵的目标时&…

Leetocde516. 最长回文子序列 动态规划

原题链接&#xff1a;Leetocde516. 最长回文子序列 class Solution { public:int longestPalindromeSubseq(string s) {int n s.size();vector<vector<int>> dp(n, vector<int>(n, 1));for (int i 0; i < n; i) {dp[i][i] 1;if (i 1 < n &&…

Linux物理地址到虚拟地址的映射

相关理论&#xff1a; Linux中用户空间是无法直操作寄存器的&#xff0c;需要先将寄存器对应的物理地址通过转换成虚拟地址然后在进行操作。 高性能处理器一般会提供一个内存管理单元&#xff08;MMU&#xff09;,该单元辅助操作系统进行内存管理&#xff0c;提供虚拟地址和物理…

openCvSharp 计算机视觉图片找茬

一、安装包 <PackageReference Include"OpenCvSharp4" Version"4.10.0.20241108" /> <PackageReference Include"OpenCvSharp4.runtime.win" Version"4.10.0.20241108" /> 二、准备两张图片 三、编写代码 using OpenCv…

数字孪生助力智慧机场全方位管理

智慧机场利用图扑可视化技术&#xff0c;实现航班动态、乘客流量和行李追踪的实时监控与分析&#xff0c;优化资源配置&#xff0c;提高运营效率&#xff0c;为旅客提供更加便捷的出行体验。

景联文科技提供高质量多模态数据处理服务,驱动AI新时代

在当今快速发展的AI时代&#xff0c;多模态数据标注成为推动人工智能技术进步的关键环节。景联文科技作为行业领先的AI数据服务提供商&#xff0c;专注于为客户提供高质量、高精度的多模态数据标注服务&#xff0c;涵盖图像、语音、文本、视频及3D点云等多种类型的数据。通过专…

【Docker】入门教程

目录 一、Docker的安装 二、Docker的命令 Docker命令实验 1.下载镜像 2.启动容器 3.修改页面 4.保存镜像 5.分享社区 三、Docker存储 1.目录挂载 2.卷映射 四、Docker网络 1.容器间相互访问 2.Redis主从同步集群 3.启动MySQL 五、Docker Compose 1.命令式安装 …

vscode使用Marscode编程助手

下载 vscode 在插件里下载Marscode编程助手 插件完成 在这里点击安装&#xff0c;点击后这里出现AI编程插件。

使用网页版Jupyter Notebook和VScode打开.ipynb文件

目录 正文 1、网页版Jupyter Notebook查看 2、VScode查看 因为总是忘记查看文件的网址&#xff0c;收藏了但分类众多每次都找不到……当个记录吧&#xff08;/捂脸哭&#xff09;&#xff01; 正文 此处以gitub中的某个仓库为例&#xff1a; https://github.com/INM-6/mu…

腾讯云AI代码助手编程挑战赛-知识百科AI

作品简介 知识百科AI这一编程主要用于对于小朋友的探索力的开发&#xff0c;让小朋友在一开始就对学习具有探索精神。在信息化时代下&#xff0c;会主动去学习自己认知以外的知识&#xff0c;同时丰富了眼界&#xff0c;开拓了新的知识。同时催生了在大数据时代下的信息共享化…

Flutter项目适配鸿蒙

Flutter项目适配鸿蒙 前言Flutter项目适配鸿蒙新工程直接支持ohos构建新项目编译运行 适配已有的Flutter项目 前言 目前市面上使用Flutter技术站的app不在少数&#xff0c;对于Flutter的项目&#xff0c;可能更多的是想直接兼容Harmonyos&#xff0c;而不是直接在重新开发一个…

我的128天创作之路:回顾与展望

大家好呀&#xff01;今天来和你们分享一下我的创作历程&#x1f601;。 一、机缘 最开始创作呢&#xff0c;是因为在学习 C 的 STL 时&#xff0c;像 string、list、vector 这些模板可把我折腾得够呛&#xff0c;但也让我学到了超多东西&#xff01;我就想&#xff0c;要是把我…

AI刷题-数列推进计算任务、数组中的幸运数问题

目录 一、数列推进计算任务 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 优化思路 最终代码&#xff1a; 运行结果&#xff1a; 二、数组中的幸运数问题 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步…

Helm部署activemq

1.helm create activemq 创建helm文件目录 2.修改values.yaml 修改image和port 3. helm template activemq 渲染并输出 4. helm install activemq activemq/ -n chemical-park // 安装 5.启动成功

Windows 下Mamba2 / Vim / Vmamba 环境安装问题记录及解决方法终极版(无需绕过triton)

导航 安装教程导航 Mamba 及 Vim 安装问题参看本人博客&#xff1a;Mamba 环境安装踩坑问题汇总及解决方法&#xff08;初版&#xff09;Linux 下Mamba 及 Vim 安装问题参看本人博客&#xff1a;Mamba 环境安装踩坑问题汇总及解决方法&#xff08;重置版&#xff09;Windows …

力扣25. K个一组反转链表

给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 示例 1&#xff1a; 输入&#xff…

动态规划练习五(子序列问题)

一、解题心得 首先子序列是不连续的&#xff0c;所以一定不会在 i - 1 位置去推 i 位置的 dp 值了&#xff0c;所以一般子序列问题是 O(n^2) 复杂度。但是可以通过哈希表等方式降成 O(n)。 以我带来的例题其实子序列问题可以分成两种&#xff1a; 1、以 i 位置为结尾&#x…