课时七—进程同步(一)

news2024/11/27 5:58:59

1、同步与互斥的基本概念

1)临界资源
(1)临界资源:是一次仅允许一个进程使用的共享资源。各进程采取互斥的方式,实现共享的资源称作临界资源。属于临界资源的硬件有,打印机,磁带机等;软件有消息队列,变量,数组,缓冲区等。
(2)临界区:每个进程中访问临界资源的那段代码称为临界区,每次只允许一个进程进入临界区,进入后,不允许其他进程进入。
多个进程涉及到同一临界资源的临界区称为相关临界区。
临界资源的访问过程分为4个部分:
a.进入区。负责检查是否可以进入临界区,设置正在访问临界资源的标志。
b.临界区。访问临界资源的那段代码。
c.退出区。负责接触正在访问临界资源的标志。
d.剩余区。做其他处理。
2)进程同步
同步也称直接制约关系,它指的是多个进程一起完成某个任务,这些进程因为合作、因为需要在某些位置上协调他们的工作次序而产生了某些制约关系。

注意:不要把进程同步和进程调度搞混了
(1)进程调度是为了最大程度的利用CPU资源,选用合适的算法调度就绪队列中的进程。
(2)进程同步是为了协调一些进程以完成某个任务,比如读和写,肯定先写后读,不能先读后写,这就是进程同步做的事情了,指定这些进程的先后执行次序使得某个任务能够顺利完成。

3)进程互斥:
进程互斥也称间接制约关系。当某个进程A在访问临界区使用临界资源时,另一个B进程必须等待,直到A进程访问结束并释放打印机资源后,B进程才能去访问。
为禁止两个进程同时进入临界区,同步机制应遵循以下准则:
(1)空闲让进。临界区空闲时,可以允许一个请求进临界区的进程立即进入临界区
(2)忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待
(3)有限等待。对请求访问的进程,应保证能在有限时间内进入临界区。
(4)让权等待。当进程不能进入临界区时,应立即释放处理机,防止进程忙等待

2、进程同步机制

1)软件同步机制
一个经典的解决方案:Peterson算法。
算法思想:为防止两个进程为进入临界区而无限等待,设置了变量turn,每个进程先设置自己的标志后再设置turn标志。这时,再同时检测另一个进程状态标志和不允许进入标志,以便保证两个进程同时要求进入临界区时,只允许一个进程进入临界区。
算法如下:

bool flag[2];
int turn=0;
p0进程:
flag[0]=true;
turn=1;
while(flag[1]&&turn==1);
critical section;//临界区
flag[0]=false;
remainder section;//释放资源
P1进程:
flag[1]=true;
turn=0;
while(flag[0]&&turn=0);
critical section;//临界区
flag[1]=false;
remainder section;//释放资源

注:turn变量的含义:进程在试图访问临界资源时,首先设置自己的flag变量为TRUE,表示希望访问;但又会设置turn变量为对方的进程编号,表示谦让,由于turn变量会有一个最终值,因此先做出谦让的进程先进入临界区,后做出谦让的进程则需要循环等待,不会造成“饥饿”现象。

Peterson算法用软件方法解决了进程互斥问题,遵循了空闲让进、忙则等待、有限等待三个原则,但是依然未遵循让权等待的原则。但相较于其他算法,这种解决方案是最好的。
2)硬件同步机制

(1)关中断
关中断是实现互斥最简单的方法之一,在进入锁测试之前,关闭中断,直到完成锁测试并上锁之后才能打开中断。
优点:简单、高效
缺点:不适合多CPU系统;只适合操作系统内核进程,不适合用户进程。
(2)利用Test-and-Set指令实现互斥
简称TS指令或TSL指令。TSL指令是由硬件实现的,执行过程不允许被中断,即一条原语。

bool TestAndSet(bool*lock){
bool old;
old=*lock;
*lock=true;
return old;
}
while(TestAndSet(&lock));
临界区代码段...
lock=false;
剩余区代码段...

优点:实现简单,适用于多CPU系统;
缺点:不满足“让权等待”原则,暂时无法进入临界区的进程会占用CPU并循环执行TSL指令,从而导致“忙等”。
(3)利用swap指令执行进程互斥
swap指令被称为对换指令,是由硬件实现,执行过程也是不允许被中断的。
(4)实时系统
实时系统是指系统及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。

estAndSet(
swap(bool*a,bool*b){
bool temp;
temp=*a;
*a=*b;
*b=temp;
}
bool old=ture;
while(old==ture)
swap(&lock,&old);
临界区代码段...
lock=false;
剩余区代码段...

值得注意的是:在逻辑上swap指令和TSL并无太大区别。
优点:实现简单,适用于多CPU系统。
缺点:不满足“让权等待”原则,暂时无法进入临界区的进程会占用CPU并循环执行TSL指令,从而导致“忙等”。

在这里插入图片描述

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

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

相关文章

javase个人小结

一、数据类型 二、运算符(需要注意的) /:如果是int类型,那么会保留整数,舍去余数 列如:10/3 3 优先级:拿不准就加括号,括号优先级最高 三、类和对象 什么是封装,继承…

连接器信号完整性仿真教程 三

本文将讲解CST边界(Boundary)、背景(Background)的概念及背景材料与边件设置。边界与背景是CST仿真电磁的基础,有必要了解它,并掌握其设置方法与步骤。并以两个实例演示了具体设置的操作。 一 背景、边界与…

深度学习—目标检测标注数据集

深度学习之目标检测 PASCAL数据集 PASCAL VOC挑战赛(The PASCAL Visual Object Classes)是一个世界级的计算机视觉挑战赛,PASCAL全称:Pattern Analysis,Statical Modeling and Computational Learning,是…

磐维数据库应用案例荣获2022年度杭州商用密码应用优秀案例二等奖

2023年5月8日上午,在2023西湖论剑数字安全大会商用密码应用论坛上发布了2022年度杭州商用密码应用优秀案例,其中由中国移动通信集团浙江有限公司和中移动信息技术有限公司联合申报的 《基于磐维数据库的CRM营销系统商用密码应用案例》荣获二等奖。 20…

Linux下gdb基础命令演示,及命令汇总图

提示:本文主要介绍了什么是gdb,以及gdb指令及其具体使用案例 ————故不积跬步,无以至千里;不积小流,无以成江海。 文章目录 一、gdb模式下命令一览。1.1基本命令:1.2 断点命令:1.3 数据命令…

实时频谱分析-2.3实时频谱分析

实时频谱分析 频谱分析要想归入实时类别中,必须没有间隙地、不确定地处理关心的频宽内包含的所有信息。RSA 必须获得时域波形中包含的全部信息,把信息转换成频域信号。实时完成这一点必须满足多个重要的信号处理要求: 1)提供足够…

【计算思维题】少儿编程 蓝桥杯青少组计算思维真题及详细解析第3套

少儿编程 蓝桥杯青少组计算思维题及详细解析第3套 1、浩浩的左手边是 A、兰兰 B、贝贝 C、青青 D、浩浩 答案:B 考点分析:主要考查小朋友们的观察能力,从给定的图中可以看到:浩浩的左手边是贝贝,所以答案B 2、2 时 30 分,钟面上时针和分针形成的角是什么角 A、钝角…

与vCenter无法通讯时更改虚拟机的网络配置

客户的VCSA由于虚拟机的配置问题导致无法启动,需要通过重新创建VCSA的虚拟机配置的方式来恢复。但是,由于ESXi主机上的所有物理网口都已分配给了分布式网络交换机,在重建虚拟机配置时不能指定标准交换机的端口组来配置网络。而如果将虚拟机的…

找C++程序员工作被卡学历怎么办?我来分享一下实用的方法

当学历低的程序员找C程序员工作时,最担心的问题就是学历卡关。但只有资深的人力资源经理才知道那个行业内的潜规则。对于学历低的程序员来说,这是简直是很难逾越的关卡。 企业招聘程序员时,对学历的要求几乎全是本科及以上学历。这让学历低的…

C++11 列表初始化initializer_list

引子 C11,是继C98后的一次有力更新,引进了很多好用的语法,STL也添加了几个新容器,也解决了很多的问题。本篇博客就学习一下C11列表初始化的新语法和 initializer_list 文章目录 引子一. 列表初始化二. initializer_list结束语 一…

接口测试的流程?怎么设计接口测试用例?两张图给你讲的明明白白

目录 一、简介 二、接口测试的流程 三、为什么要写用例 四、接口用例设计 一、简介 在开始接口测试之前,我们想一下,接口测试的流程是什么?说到这里,有些人就会产生好奇和疑问,心里mmp:接口测试要什么流…

详细的谈谈,软件测试定义、目的及原则。

1.软件测试定义 软件测试就是在产品上线前,对软件需求、设计方案和编码实现的核查。软件测试的定义 软件测试是为了发现错误而执行程序的过程使用人工或自动方式来运行并测试某个系统,以此来检验系统是否满足规定的需求并确定预期结果与实际结果的差异 …

WEB安全:深入反射式dll注入技术

一、前言 dll注入技术是让某个进程主动加载指定的dll的技术。恶意软件为了提高隐蔽性,通常会使用dll注入技术将自身的恶意代码以dll的形式注入高可信进程。 常规的dll注入技术使用LoadLibraryA()函数来使被注入进程加载指定的dll。常规dll注入的方式一个致命的缺陷…

你不会还不知道如何用Python写一个切水果的小游戏吧

目录 引言 一、需要导入的包 二、窗口界面设置 三、随机生成水果位置 四、绘制字体 五、玩家生命的提示 六、游戏开始与结束的画面 七、游戏主循环 引言 水果忍者的玩法很简单,尽可能的切开抛出的水果就行。 今天小五就用python简单的模拟一下…

linux centos 安装zookeeper服务

一、进入官网:Apache ZooKeeper 二、下载安装包 可以使用wget 下载,我这里服务器的原因就不使用了,直接在网页使用http下载,然后通过xftp上传到服务器 下载完成后通过xftp上传到linux服务器 三、解压 tar -zxvf apache-zookeepe…

520中国劲酒携手撒贝宁直播探厂,共同见证健康跑活动启幕

5月20日是“网络情人节”,每年一度的 520,所有人都沉在真爱告白的浓情氛围当中,对于全中国的劲酒爱好者来说,520 却有着不一样的意义,每年 520 劲粉节,中国劲酒以爱之名,号召和鼓励劲粉们培养持之以恒的健康生活方式。      520 当日,总台央视主持人撒贝宁来到了湖北大冶市…

新手要学网络安全应该从哪学起?

写在开篇 本人10 年工作经验, 擅长 Web 安全攻防、渗透领域, 在金融领域的安全有丰富的实战经验。从事在线教育 3 年多培养学员过万,讲解清晰透彻,课程干货内容多,辅导学员耐心细致 我为啥说自学黑客&网络安全&a…

SSM框架学习之Mybatis

SSM Spring SpringMVC Mybatis,这是一种常用的Java Web开发框架组合。Spring是一个轻量级的IoC和AOP容器框架,SpringMVC是基于Spring的MVC框架,Mybatis是一种ORM(Object Relational Mapping)框架,用于在Java应用中管理数据库。…

libvirt job机制浅析

libvirt 中,job 机制用于处理和跟踪针对虚拟机域(domain)的长时间操作,如迁移、快照、保存,热插拔等。job 机制的主要目的是确保在同一时间只有一个长时间操作可以执行,从而避免竞争条件和不一致性问题。 …

C嘎嘎~~[类和对象 精华篇]

类和对象 精华篇 static成员引入特点问题收尾 友元友元函数友元类 内部类理解 类和对象 static成员 引入 🗨️[题目] 实现一个类,计算程序中创建出了多少个类对象 先分析一下题目: 程序运行中, 有对象的创建, 也有对象的销毁 ⇒ 对应下来就是 构造,拷…