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

news2024/7/31 20:23:19

操作系统入门 – 进程的同步与互斥

在之前的文章中,我们了解了进程是如何被调度的。但在调度之前,进程需要获得资源。而获得这些资源则可能让进程之间陷入冲突。为了高效且平等地调度线程,需要引入同步功能。


1.临界资源

1.1 临界资源的描述

在操作系统中进程占用的最小资源(线程仅访问所在进程的资源,因此线程并不占资源)。但某些资源在同一时刻只能被一个进程占用,类似这样的进程为临界资源。例如打印机、存在内存或硬盘中被多个进程共享的一些变量或数据等。

1.2 临界资源的性质

对临界资源访问的方式为互斥,即当一个进程持有该资源时,其他进程无法访问,只有当该持有资源的进程释放后才能被其他进程访问。其访问方式如下

  • 进入区:查看临界区是否可以访问,若可以则进行下一步,否则为阻塞。
  • 临界区:在临界区操作。
  • 退出区:清除临界区被占用的标志。
  • 剩余区:进程与临界区不相关部分的代码。

2.同步与互斥

2.1进程同步

进程同步是进程之间的制约关系,其目的是为了完成某个任务而建立的两个或多个线程。这些线程将会在某些位置上协调进程之间的工作次序、传递信息。

  • 例子:如图所示,进程B需要在缓冲区读取到进程A产生的信息才能执行,否则将处于阻塞状态。

alt text

2.2进程互斥

同理,互斥也是进程间的一种制约关系。当存在两个进程需要请求临界资源时,得到临界资源的进程将开始执行,另一个为得到临界资源的进程进入阻塞。只有当前一个进程释放资源后,后一个进程才能解除阻塞。

  • 例子:如图所示,A、B两个进程都要请求打印机资源,此时A先获得打印机资源,因此A执行,B阻塞。当A执行完毕后再执行B

alt text


3.实现临界区互斥的基本方法

3.1 软件方法

Dekker算法和peterson算法

3.2 硬件方法

通过硬件实现临界区的办法就是使用CPU中断。CPU进程切换是通过中断实现的,当把中断屏蔽后,当前进程就可以顺利将临界区代码执行完毕,从而实现互斥。具体步骤为:屏蔽中断->执行临界区->开中断。但这样运行的缺点是大大限制了处理器交替执行任务的能力。接下来将讲解另一种实现方法。

3.3 信号量实现

在上述硬件实现临界区互斥的方法可以了解到效率并不高,因此可以设置一个表示资源个数的信号量S,通过S的P(占有)和V(释放)操作实现。其中P、V操作为系统原语,意味着这两个操作为原子操作(原子操作指的是由多步操作组成的一个操作。如果该操作不能原子地执行,则要么执行完所有步骤,要么一步也不执行,不可能只执行所有步骤的一个子集)。


P操作首先减少信号量,表示有一个进程将占用或等待资源,之后检查S是否小于0,若小于0则阻塞,大于0则占有资源执行。


V操作与P操作相反,首先增加信号量,表示占用或等待资源的进程减少了1个,然后检测S是否小于0,如果小于0则唤醒等待使用S资源的其它进程。

4.利用信号量实现同步的经典问题

4.1 生产者-消费者问题

在该作业中,要求设计在同一个进程地址空间内执行的两个线程。生产者线程生产物品,并放置在一个空的缓冲区供消费者线程使用。消费者线程从缓冲区中获得物品,并释放缓冲区。当缓冲区再无可用空间时,生产者线程会开始等待,当消费者线程释放缓冲区后,生产者线程才会继续生产。当缓冲区为空时,消费者线程也会进入阻塞状态,直到生产者线程产生物品。


这里生产者和消费者是既同步又互斥的关系,首先只有生产者生产了,消费着才能消费,这里是同步的关系。但他们对于临界区的访问又是互斥的关系。

4.2 读者-写者问题

问题描述:一个数据文件或记录,统称数据对象,可被多个进程共享,其中有些进程只要求读称为”读者”,而另一些进程要求写或修改称为”写者”。


规定:允许多个读者同时读一个共享对象,但禁止读者、写者同时访问一个共享对象,也禁止多个写者访问一个共享对象,否则将违反Bernstein并发执行条件。


从上述题目中可以了解到,读者和写者是互斥的,不同写者之间也是互斥的。因此我们可以设置3个变量,一个用来统计读者的数量,另外两个分别用于对读者数量读写的互斥,读者和读者写者和写者的互斥。

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

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

相关文章

用友YonSuite打通招银云直联,让企业收付款更便利

在当今数智化浪潮席卷全球的背景下,企业对于高效、便捷的管理系统需求日益增加。作为全球领先的企业云服务与软件提供商,用友始终站在技术前沿,致力于为成长型企业提供全方位的数智化解决方案。 用友网络与招商银行通过联通双方系统&#xf…

Elasticsearch如何聚合查询多个统计值,如何嵌套聚合?并相互引用,统计索引中某一个字段的空值率?语法是怎么样的

文章目录 Elasticsearch聚合查询说明空值率查询DSL Elasticsearch聚合基础知识扩展Elasticsearch聚合概念Script 用法Elasticsearch聚合查询语法指标聚合(Metric Aggregations)桶聚合(Bucket Aggregations)矩阵聚合(Ma…

《昇思25天学习打卡营第1天 | 认识MindScope AI框架和昇思大模型平台》

活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp 昇思MindSpore学习笔记:探索AI的无限可能 嗨,AI爱好者们!今天,我要带你们深入了解一个强大的全场景深度学习框架——昇思MindSpore。 准备好了吗…

信创数据库沙龙 | 全国预告

#数据库沙龙 #国产数据库 #信创数据库

领课教育本地部署教程

一.本地运行环境准备 因node版本需大于18.0所以推荐使用win10及以上系统 1.1MySQL,版本:8.0.x 安装完成导入sql脚本 1.2Redis,版本:3.2,推荐使用最新版本 下载地址:https://github.com/tporadowski/red…

KVB投资安全小知识:如何识别一个货币是避险货币还是风险货币?

摘要 在全球经济不断变化的今天,理解货币的避险属性和风险特征对投资者至关重要。本文将详细探讨如何准确识别一个货币是避险货币还是风险货币,并结合具体的货币案例分析它们的本质差异。通过深入分析不同因素对货币走势的影响,帮助读者在金…

数字孪生技术及其广泛应用场景探讨

通过将实际物理世界中的物体或系统建模、模拟和分析,数字孪生技术可以提供更精确、更可靠、更高效的解决方案。数字孪生技术在智能制造、城市建设、智慧物流等众多领域中得到了广泛的应用。 通过将数据可视化呈现在虚拟环境中,我们可以更清晰地观察和理…

国产数据库中读写分离实现机制

在数据库高可用架构下会存在1主多备的部署,备节点可以根据业务场景分发一部分流量以充分利用资源,并减轻主库的压力,因此在数据库的功能上需要读写分离来实现。 充分利用备节点的资源,提升业务的吞吐量;防止运维等非业…

C++回溯算法(2)

棋盘问题 #include<bits/stdc.h> using namespace std; void func(int,int); bool tf(int,int); void c(); int n,k; char a[110][110]; int cnt20; int main() {cin>>n>>k;for(int i0;i<n;i){for(int j0;j<n;j){cin>>a[i][j];}}func(0,0);cout…

win10远程桌面端口,win10操作系统怎么修改远程桌面端口和共享端口号

在Win10操作系统中&#xff0c;远程桌面端口和共享端口号的修改是两项重要的网络配置任务&#xff0c;它们对于提升系统的安全性和灵活性具有重要意义。以下将分别介绍如何在Win10中修改这两个端口号。 一、Win10操作系统远程桌面端口的修改 远程桌面端口的修改主要涉及到注册…

13.1.资源清单的管理工具-helm

目录 一、helm的介绍 1.helm的价值概述 2.helm的关键名词 二、安装部署helm 1.解压安装包并设置全局命令 2.添加命令补全 三、使用helm部署服务管理 1.使用helm创建chart 1.1创建工作目录 1.2.helm创建chart 2.响应式创建名称空间 3.安装chart到名称空间 4.使用hel…

Unity3D插件开发教程(四):获取地址组件

Unity3D插件开发教程&#xff08;四&#xff09;&#xff1a;获取地址组件 前言 前几天做导出安装包插件时&#xff0c;遇到了个问题&#xff0c;我需要获取地址&#xff0c;可是每次都要手动填入&#xff08;复制粘贴&#xff09;地址是个很费时不讨好的事&#xff0c;所以我…

在 Ubuntu 18.04.4 LTS上安装 netmap

文章目录 步骤运行配置文件编译安装使用netmap 步骤 sudo su sudo apt-get update sudo apt install build-essential sudo apt-get install -y git sudo apt-get install -y linux-headers-$(uname -r)rootVM-20-6-ubuntu:/home/ubuntu/netmap/LINUX# git clone https://gith…

3dmax怎么渲染又快又清晰?

在3ds Max中&#xff0c;追求快速且清晰的渲染效果是每个设计师的目标。云渲染技术的出现&#xff0c;为这一目标提供了强大的支持。通过云渲染&#xff0c;设计师能够利用远程服务器的强大计算能力&#xff0c;实现快速渲染&#xff0c;同时保持图像的高清晰度。 一、3dmax怎么…

RAM + 串口的简单应用

REVIEW 之前已经学习过&#xff1a; RAM&#xff1a; RAM IP核配置_ip核 ram配置-CSDN博客 串口接收&#xff1a;Vivado 串口接收优化-CSDN博客 串口发送&#xff1a;Vivado 串口通信(UART)------串口发送_vivado串口收发实验-CSDN博客 按键&#xff1a;基于状态机的按键消抖实…

MTU 和 MSS 关系、 IP分片、TCP分段

从四层模型&#xff1a;链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;应用层说 一 、以太网V2格式数据帧 : 链路层 Destination Source Type DataAndPad FCS 6 6 2 46~1500 4 二、IP: 网络层 0 1 …

MySQL8,Navicat能登陆成功,密码却忘记了

执行成功的图&#xff1a; 以下为步骤&#xff1a;本文一共8个简单步骤。 环境&#xff1a;mysql8、window10、navicat11 1、打开本地电脑window10的命令窗&#xff08;俗称黑窗口&#xff09;&#xff0c;windowR 2、输入regegit&#xff0c;回车&#xff0c;打开注册表 3、…

哪里可以姓名设计免费签名?6个软件帮助你轻松设计签名

哪里可以姓名设计免费签名&#xff1f;6个软件帮助你轻松设计签名 这里有六个免费的软件和在线工具可以帮助您设计个性化的签名&#xff1a; 1.一键logo设计&#xff1a;这是一个功能强大且易于使用的设计工具&#xff0c;提供了丰富的签名设计模板和各种字体效果供选择。您可…

Kubernetes入门-Kubernetes集群构成

目录 前言 控制面板节点与工作节点 控制面板节点 工作节点 被托管的Kubernetes 用kubectl命令行工具管理Kubernetes 前言 前面说过&#xff0c;Kubernetes是云的操作系统顾名思义&#xff0c;它位于应用和基础设施之间Kubernetes运行在基础设施上&#xff0c;而应用运行…

手机录屏声音怎么录?2个小妙招教会你

手机录制好的视频怎么没有声音&#xff1f;你是否也遇到了这个难题&#xff1f;在日常生活中&#xff0c;手机录屏功能已经成为我们生活和工作中的得力助手。而录屏的声音&#xff0c;作为录屏功能的重要组成部分&#xff0c;更是为我们的录制体验增添了不少色彩。那么&#xf…