软考89-上午题-【操作系统】-同步与互斥

一、进程间的通信

        在多道程序环境的系统中存在多个可以并发执行的进程,故进程间必然存在资源共享(互斥)和相互合作(同步)的问题。进程通信是指各个进程交换信息的过程。

同步是合作进程间的直接制约问题,互斥是申请临界资源进程间的间接制约问题.

1-1、同步

在计算机系统中,多个进程可以并发执行,每个进程都以各自独立的、不可预知的速度向前推进,即,异步执行。

但是需要在某些确定点上协调相互合作进程间的工作。例如,进程 A 向缓冲区送数据,进程 B 从缓冲区取数据加工,当进程 B 要取数据加工时,必须是进程 A 完成了向缓冲区送数据的操作,否则进程 B 必须停下来等待进程 A 的操作结束。

可见,所谓进程间的同步是指在系统中一些需要相互合作,协同工作的进程,这样的相互联系称为进程的同步。

1-2、互斥

进程的互斥是指系统中多个进程因争用临界资源而互斥执行。

在多道程序系统环境中,各进程可以共享各类资源,但有些资源一次只能供一个进程使用,称为临界资源 (CriticalResource,CR),如:打印机、共享变量和表格等。

1-3、临界资源管理的原则

临界区,是进程中对临界资源实施操作的那段程序。

对互斥临界区管理的 4 条原则如下:

(1)有空即进

        当无进程处于临界区时,允许进程进入临界区,并且只能在临界区运行有限的时间。(不能一直占用资源不放)

(2) 无空则等

        当有一个进程在临界区时,其他欲进入临界区的进程必须等待,以保证进程互斥地访问临界资源。

(3)有限等待

        对于要求访问临界资源的进程,应保证进程能在有限的时间进入临界区以免陷入“饥饿”状态。

(4) 让权等待

        当进程不能进入自己的临界区时,应立即释放处理机(CPU),以免进程陷入忙等状态。

忙等状态:

当一个进程因某个事件(如等待某个资源或条件成立)而无法继续执行时,它仍然占用着CPU。任何试图进入其临界区的进程都必须等待,进入忙等状态。

忙等状态的主要缺点是它会浪费CPU的时间,因为进程在等待期间仍然占据着CPU资源,不能进行其他有用的工作。

1-4、信号量机制  

信号量机制,是一种有效的进程同步、互斥工具。

1-4-1、整型信号量

信号量是一个整型变量,根据控制对象的不同被赋予不同的值。

信号量分为如下两类:

(1) 公用信号量。实现进程间的互斥,初值为 1 或资源的数目。

(2) 私用信号量。实现进程间的同步,初值为 0 或某个正整数。

信号量 S 的物理意义:

  • S>=0 表示某资源的可用数
  • S<0,则其绝对值表示阻塞队列中等待该资源的进程数

S=-1,即:阻塞队列中有一个资源在等待。

1-5、PV操作

对于系统中的每个进程,其工作的正确与否不仅取决于它自身的正确性,而且与它在执行中能否与其他相关进程正确地实施同步、互斥有关。

PV 操作是实现进程同步、互斥的常用方法。

P 操作和 V 操作是低级通信原语,在执行期间不可分割。其中,P 操作:表示申请一个资源,V操作:表示释放一个资源。

P操作和V操作:成对出现。

1-5-1、P操作(申请一个资源)

P 操作的定义: S:=S-1

若 S>=0,则执行 P 操作的进程继续执行;

若 S<0,则置该进程为阻塞状态/等待队列(因为无可用资源),并将其插入阻塞队列

1-5-2、V操作(释放一个资源)

V操作定义:S:=S+1

若 S>0,则执行V操作的进程继续执行;

若 S<0,则从阻塞队列唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续。

S+1<0,说明有进程在阻塞队列中等待资源,如:P2。此时,有资源被释放,则将资源给P2,将P2插入就绪队列。

1-5-3、真题

真题1:

真题2:

真题3:

真题4: 

真题5:

1-6、利用PV操作实现进程的互斥

令信号量 mutex 的初值为 1,当进入临界区时执行P操作,退出临界区时执行V操作。

这样,利用 PV操作实现进程互斥的代码段如下:

P(mutex)

    临界区

V(mutex)

示例:

1-7、利用PV操作实现进程的同步

进程的同步是由于进程间合作引起的相互制约的问题,要实现进程的同步可用一个信号量与消息联系起来,当信号量的值为0时,表示希望的消息未产生,当信号量的值为非0时,表示希望的消息已经存在。

假定用信号量S表示某条消息,进程可以通过调用P操作测试消息是否到达,调用V操作通知消息已准备好。

最典型的同步问题是单缓冲区的生产者和消费者的同步问题。

1-7-1、生产者、消费者问题

  • 生产者进程P1:不断地生产产品送入缓冲区;
  • 消费者进程P2,不断地从缓冲区中取产品消费。

1、单缓冲区

缓冲区可以存放1件产品。

为了实现P1与P2,进程间的同步问题,需要设置两个信号量S1、S2方案:

信号量S1,初值为1,表示缓冲区空,可以将产品送入缓冲区;

生产者可以往缓冲区中可以放几个产品

信号量S2,的初值为0,表示缓冲区有产品。

消费者可以往缓冲区中取几个产品。

【回顾】:

P 操作的定义: S:=S-1

  • 若 S>=0,则执行 P 操作的进程继续执行;
  • 若 S<0,则置该进程为阻塞状态/等待队列(因为无可用资源),并将其插入阻塞队列

V操作定义:S:=S+1

  • 若 S>0,则执行V操作的进程继续执行;
  • 若 S<0,则从阻塞队列唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续。

2、多缓冲区

缓冲区可以存放n件产品。 

生产者不断地生产产品,消费者不断地消费产品,为了实现P1与P2,进程间的同步问题,需要设置三个信号量:S、S1、S2:

S1:初值=n,是否可以将产品放入缓冲区;

生产者可以往缓冲区中可以放几个产品

S2:初值=0,缓冲区是否存有产品;

消费者可以往缓冲区中取几个产品。

S:互斥信号量初值=1,因为缓冲区是一个互斥资源,所以要进行互斥控制。

3、真题

真题1:

S1,S2是同步信号量;

S是互斥信号量。

真题2:

真题3:

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

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

相关文章

LeetCode 21 / 100

目录 矩阵矩阵置零螺旋矩阵旋转图像搜索二维矩阵 II LeetCode 73. 矩阵置零 LeetCode 54. 螺旋矩阵 LeetCode 48. 旋转图像 LeetCode 240. 搜索二维矩阵 II 矩阵 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为…

关于UDP协议

UDP协议是基于非连接的发送数据就是把数据包简单封装一下&#xff0c;然后从网卡发出去就可以&#xff0c;数据包之间没有状态上的联系&#xff0c;UDP处理方式简单&#xff0c;所以性能损耗非常少&#xff0c;对于CPU、内存资源的占用远小于TCP&#xff0c;但是对于网络传输过…

【OJ比赛日历】快周末了,不来一场比赛吗? #03.23-03.29 #16场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2024-03-23&#xff08;周六&#xff09; #7场比赛2024-03-24…

74CMS人才系统 CVE-2024-2561 RCE复现

Fofa语法 app"骑士-74CMS" 复现步骤 前期准备 主页长这样 需要先会员注册&#xff0c;注册为招聘者 复现 将poc贴入修改登录的Cookie信息和Token 访问查看 微信公众号 扫一扫关注CatalyzeSec公众号 我们一起来从零开始学习网络安全 加入我们的星球&#xff0c;…

zabbix企业微信的告警媒介配置

简介&#xff1a; Zabbix企业微信告警媒介可用于向特定群组成员发送提醒通知。 前提条件&#xff1a; 完成Zabbix告警平台的搭建后&#xff0c;需将群机器人添加至告警提醒群中。 企业微信群聊——右上角三个点——添加群机器人 保存好产生的webhook地址&#xff08;注意&…

2024.3.20 使用maven打包jar文件和保存到本地仓库

2024.3.20 使用maven打包jar文件和保存到本地仓库 使用maven可以很方便地打包jar文件和导入jar文件&#xff0c;同时还可以将该文件保存在本地仓库重复调用。 使用maven打包jar文件和保存到本地仓库 package打包文件。 install导入本地仓库。 使用maven导入jar文件 点击“…

CVE-2023-49442 jeecg-formdemocontroller JNDI代码执行漏洞分析

漏洞描述 JEECG(J2EE Code Generation) 是开源的代码生成平台&#xff0c;目前官方已停止维护。JEECG 4.0及之前版本中&#xff0c;由于 /api 接口鉴权时未过滤路径遍历&#xff0c;攻击者可构造包含 ../ 的url绕过鉴权。攻击者可构造恶意请求利用 jeecgFormDemoController.do…

P1596 [USACO10OCT] Lake Counting S(找连通块数量)

题目描述 Due to recent rains, water has pooled in various places in Farmer Johns field, which is represented by a rectangle of N x M (1 < N < 100; 1 < M < 100) squares. Each square contains either water (W) or dry land (.). Farmer John would l…

基于springboot的反诈宣传平台

技术&#xff1a;springbootmysqlvue 一、系统背景 反欺诈平台可以对公交信息进行集中管理&#xff0c;可以真正避免传统管理的缺陷。反欺诈平台是一款运用软件开发技术设计实现的应用系统&#xff0c;在信息处理上可以达到快速的目的&#xff0c;不管是针对数据添加&#xff…

Vue3 进阶

Vue 进阶 前言 Vue3 入门文章地址&#xff1a;Vue3 入门 任务一 创建 Vite Vue3 单页应用 Vue 3 是一个流行的 JavaScript 前端框架&#xff0c;用于构建单页应用程序&#xff08;SPA&#xff09;。 下面是一些创建 Vue 3 单页应用程序的方式&#xff1a; Vue CLI&#…

NCV12711ADNR2G芯片PWM控制器中文资料规格书PDF数据手册引脚图图片价格功能

产品概述&#xff1a; NCV12711是一款固定频率、峰值电流模式PWM控制器&#xff0c;具有实施单端功率转换器拓扑结构所需的必要性能。这款器件工作电压范围4V至45V&#xff0c;无需辅助绕组&#xff0c;且位于热性能范围内。这款控制器包含一个可编程振荡器&#xff0c;能够在…

elasticsearch安装部署

elasticsearch部署 安装elasticsearch1.部署单点es1.1.创建网络1.2.加载镜像1.3.运行 2.部署kibana2.1.部署2.2.DevTools 3.安装IK分词器3.1.在线安装ik插件&#xff08;较慢&#xff09;3.2.离线安装ik插件&#xff08;推荐&#xff09;3.3 扩展词词典3.4 停用词词典 4.部署es…

Jmeter接口登录获取参数token报错问题解决方案

Jmeter接口登录时获取到的参数token一直在变的问题&#xff0c;导致运行时总是报错 解决方法如下&#xff1a; 1.新建一个GET的HTTP请求 2.添加正则表达式提取器 记得name"_token" value"(.?) 中间有一个空格&#xff0c;“_token”和value中间的空格&#xf…

Linux第81步_使用“互斥体”实现“互斥访问”共享资源

1、创建MyMutexLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home/zgq/linux/Linux_Drivers/”目录 输入“mkdir MyMutexLED回车”&#xff0c;创建“MyMutexLED”目录 输入“ls回车”查看“/home/zgq/linux/Linux_Drivers/”目录下的文件和文件夹 2、…

机器学习-可解释性机器学习:支持向量机与fastshap的可视化模型解析

一、引言 支持向量机(Support Vector Machine, SVM)作为一种经典的监督学习方法&#xff0c;在分类和回归问题中表现出色。其优点之一是生成的模型具有较好的泛化能力和可解释性&#xff0c;能够清晰地展示特征对于分类的重要性。 fastshap是一种用于快速计算SHAP值&#xff08…

进程创建,程序加载运行,以及进程终止,什么是僵尸进程,什么是孤儿进程

进程控制 创建进程&#xff0c;撤销进程&#xff0c;实现进程转换&#xff08;必须一气呵成&#xff0c;使用原语&#xff09; 原语不被中断是因为有关中断指令 创建进程 撤销进程 进程创建fork fork&#xff08;&#xff09;函数会创建一个子进程&#xff0c;子进程会返…

Uibot6.0 (RPA财务机器人师资培训第2天 )采购付款——网银付款机器人案例实战

训练网站&#xff1a;泓江科技 (lessonplan.cn)https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981(本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~&#xff0…

网络编程day7

学生管理系统系统 #include <myhead.h> int do_add(sqlite3 *ppDb) {int add_numb0;char add_name[20]"";double add_score0;printf("请输入学号&#xff1a;");scanf("%d", &add_numb);printf("请输入姓名&#xff1a;");…

你要的个性化生信分析服务今天正式开启啦!定制你的专属解决方案!全程1v1答疑!

之前在 干货满满 | 给生信小白的入门小建议 | 掏心掏肺版 中有提到&#xff0c;如果小伙伴们真的想学好生信&#xff0c;那编程能力是必须要有的&#xff01;但是可能有些小伙伴们并没有那么多的时间从头开始学习编程&#xff0c;又或是希望有人指导或者协助完成生信分析工作&a…

vue-admin-template极简的 vue admin 管理后台的动态路由实现方法

项目源码地址&#xff1a;GitHub - PanJiaChen/vue-admin-template: a vue2.0 minimal admin template 注意&#xff1a;项目中的路由均写在 src\router\index.js 中&#xff0c;其中默认包含 constantRoutes 数组&#xff0c;这是固定路由&#xff0c;无论用户是什么角色&…