操作系统第二章——进程与线程(下)

news2025/1/18 4:44:32

东风夜放花千树,更吹落,星如雨

文章目录

  • 2.3.1 进程同步,进程互斥
    • 知识总览
    • 什么是进程同步
    • 什么是进程互斥
    • 知识回顾
  • 2.3.2 进程互斥的软件实现方法
    • 知识总览
    • 如果没有进程互斥
    • 单标志法
    • 双标志先检查法
    • 双标志后检查法
    • Peterson算法
    • 知识回顾
  • 2.3.3进程互斥的硬件实现方法
    • 中断屏蔽方法
    • TestAndSet指令
    • Swap指令
    • 本节回顾
  • 2.3.4 互斥锁
    • 进程互斥:锁
  • 2.3.5 信号量机制
    • 本节总览
    • 信号量机制
    • 信号量机制——整形信号量
    • 信号量机制——记录型信号量
    • 本节回顾
  • 2.3.6 用信号量实现进程互斥,同步,前驱关系
    • 知识总览
    • 信号量机制实现进程互斥
    • 信号量机制实现进程同步
    • 知识回顾
  • 2.3.7 生产者消费者问题
    • 能否改变相邻的PV操作的顺序
    • 知识回顾
  • 2.3.8 多生产者多消费者问题
    • 问题描述
    • 关系分析
    • 各个进程之间的PV操作
    • 设置信号量
    • 若是不设置互斥信号量
    • 缓冲区大于一
    • 知识回顾
  • 2.3.9 吸烟者问题
    • 知识回顾
    • 2.3.10读者写者问题
    • 实现
    • 实现2
    • 实现3
    • 知识回顾
  • 2.3.11哲学家进餐问题
    • 解决方式
    • 方案三
    • 知识回顾
  • 2.3.12 管程
    • 知识总览
    • 为什么引入管程?
    • 管程的定义和基本特征
    • 管程解决生产者消费者问题
    • Java中类似管程的机制
    • 知识回顾
  • 2.4.1 死锁的概念
    • 知识总览
    • 什么是死锁
    • 饥饿,死循环的区别
    • 死锁产生的必要条件
    • 什么时候会发生死锁
    • 死锁的处理策略
    • 知识回顾
  • 2.4.2预防死锁
    • 破坏互斥条件
    • 破坏不剥夺条件
    • 破坏请求和保持条件
    • 破坏循环等待条件
    • 知识回顾
  • 2.4.3 避免死锁(银行家算法)
    • 知识总览
    • 什么是安全序列
    • 银行家算法
    • 安全状态
    • 不安全状态
    • 知识回顾
  • 2.4.4死锁的检测和解除
    • 死锁的检测
    • 死锁的解除
    • 知识回顾


2.3.1 进程同步,进程互斥

知识总览

请添加图片描述

什么是进程同步

在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,如等待、传递信息等,引入了进程同步的概念。进程同步是为了解决进程的异步问题。
一个简单的例子来理解这个概念。
例如,让系统计算1 + 2x3,假设系统产生两个进程: 一个是加法进程,一个是乘法进程。要让计算结果是正确的,一定要让加法进程发生在乘法进程之后,但实际上操作系统具有异步性,若不加以制约,加法进程发生在乘法进程之前是绝对有可能的,因此要制定一定的机制去约束加法进程,让它在乘法进程完成之后才发生。
异步性:进程具有异步性的特征。异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。

请添加图片描述
请添加图片描述

什么是进程互斥

这里的同时是宏观上的共享 微观上依然是交替使用的,互斥,亦称间接制约关系。进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。
请添加图片描述
请添加图片描述
请添加图片描述

知识回顾

请添加图片描述

2.3.2 进程互斥的软件实现方法

知识总览

请添加图片描述

如果没有进程互斥

请添加图片描述
软件实现方法的思想:在进入区设置并检查一些标志 来标明是否有进程在临界区中,若已有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。

单标志法

请添加图片描述
请添加图片描述

双标志先检查法

请添加图片描述
请添加图片描述

双标志后检查法

请添加图片描述
请添加图片描述

Peterson算法

让权等待指的是若是当前这个进程此时进不了临界区,则让出处理机不在CPU上跑
请添加图片描述
谁最后说了客气话,谁就失去了行动的优先权,类如过年
阿姨:乖,收下阿姨的心意~
你:不用了阿姨,您的心意我领了
阿姨:对阿姨来说你还是个孩子,你就收下吧你:真的不用了阿姨,我已经成年了
结局…
请添加图片描述

知识回顾

请添加图片描述

2.3.3进程互斥的硬件实现方法

请添加图片描述

中断屏蔽方法

请添加图片描述

TestAndSet指令

下面代码只是表示一种逻辑,不代表真正的TestAndSet指令
执行TSL指令时,它的内部运转逻辑:
假设lock现在为false,代表临界资源A空闲,那么我就可以访问这个资源,同时将lock=true,提醒别的进程,这个临界资源A我正在使用,让他们等等
假设lock为true,代表临界资源正在有人使用,所以我必须等待,并且将lock=true,并不影响什么,所以没关系,只是为了让lock为false时可以上锁,将上锁与检查在一个TSL指令完成。
请添加图片描述

Swap指令

old是每个进程都要进行的一步,都必须将old=true
分析一下这样做的原因:
因为lock是某一特定临界资源的共享变量,当每一个进程准备访问这个特定的临界资源时,初始化old=true,然后进入while循环进行交换,如果当前lock是false,则交换后old=false,则当前进程可以跳出循环进入临界区代码段,同时因为交换,lock=old=true上锁,不让别的进程来打扰,别的进程会因为lock变为true,一直在while循环等待,当我使用完临界资源,则将lock=false,此时别的进程再交换old和lock就能判断old=false,可以跳出循环,使用临界资源
请添加图片描述

本节回顾

请添加图片描述

2.3.4 互斥锁

进程互斥:锁

请添加图片描述
忙等不是意味着一直占用处理机,当时间片用完依然会释放处理机
请添加图片描述

2.3.5 信号量机制

本节总览

请添加图片描述

信号量机制

请添加图片描述

信号量机制——整形信号量

请添加图片描述

信号量机制——记录型信号量

请添加图片描述
请添加图片描述
请添加图片描述

本节回顾

请添加图片描述

2.3.6 用信号量实现进程互斥,同步,前驱关系

知识总览

请添加图片描述

信号量机制实现进程互斥

请添加图片描述

信号量机制实现进程同步

请添加图片描述
前面活动完成后就执行V操作 后面活动执行前就执行P操作
请添加图片描述

知识回顾

请添加图片描述

2.3.7 生产者消费者问题

请添加图片描述

PV操作题目分析步骤:
1.关系分析。找出题目中描述的各个进程,分析它们之间的同步、互斥关系。
2.整理思路。根据各进程的操作流程确定P、V操作的大致顺序。
3.设置信号量。并根据题目条件确定信号量初值.(互斥信号量初值一般为1,同步信号量的初始值要看对应资源的初始值是多少)
请添加图片描述

能否改变相邻的PV操作的顺序

请添加图片描述
这里没有将使用产品放入到PV之间是因为放入之后,原则上是可以的,但是对临界资源锁的时间也会变长,对系统的效率造成影响
请添加图片描述

知识回顾

请添加图片描述

2.3.8 多生产者多消费者问题

前V后P:同步关系中,前面时间发生之后发生V操作,后面事件发生之前发生P操作

问题描述

请添加图片描述

关系分析

请添加图片描述

各个进程之间的PV操作

互斥关系很简单:就是在访问临界资源之后分别对临界变量实行一个P操作 一个V操作,
同步关系:前面事件发生之后我们实行一个V操作,后面事件发生之前执行一个P操作

设置信号量

对于实现互斥关系来说,我们当然需要设置一个初值为1的互斥信号量
对于同步关系我们需要根据具体的情况设置同步变量的值,这里由于刚开始的时候盘中是没苹果的,所以设置apple 设置为0,同样的srange也设置为0 ,刚开始的时候盘子本来就是空的所以设置为1
请添加图片描述

若是不设置互斥信号量

请添加图片描述
通过分析我们发现即使不设置专门的互斥变量mutex,也不会出现多个进程同时访问盘中的现象,原因在于,本题中的缓冲区大小为1,在任何时刻,apple,orange,plate 三个同步信号量最多只有一个是1 ,因此在任何时刻,最多只有一个进程的P操作不会被阻塞,并顺利的进入临界区

缓冲区大于一

请添加图片描述

知识回顾

请添加图片描述

请添加图片描述

2.3.9 吸烟者问题

请添加图片描述
请添加图片描述

知识回顾

请添加图片描述

2.3.10读者写者问题

请添加图片描述

实现

请添加图片描述

实现2

这里说一下为什么要加mutex。
比如:当count=0时,第一个读者进程执行到p(rw),rw=0,假设此时时间片到了,切换到第二个读者进程,第二个进程发现count=0,则执行p(rw),但是此时rw=0,于是第二个进程被堵在p(rw)这里,同理,后面的可能会有多个进程堵在p(rw),只有当第一个进程再次获得时间片,执行count++,让count不为0,然后其他进程就可以直接绕过if直接进行count++来访问文件,但是第三个读者进程和后面的几个可能堵在p(rw)的多个读者进程则必须得等count–为0后才可以再次和写进程竞争来访问文件,对count的访问没有做到一气呵成,会导致本来一些进程一直堵在p(rw)。
请添加图片描述

实现3

在上面的算法中,读进程是优先的,即当存在读进程时,写操作将被延迟,且只要有 一个读进程活跃,随后而来的读进程都将被允许访问文件。这样的方式会导致写进程可能长时间等待,且存在写进程“饿死”的情况。
若希望写进程优先,即当有读进程正在读共享文件时,有写进程请求访问,这时应禁止后续读进程的请求,等到已在共享文件的读进程执行完毕,立即让写进程执行,只有在无写进程执行的情况下才允许读进程再次运行。为此,增加一个信号量并在上面程序的writer()和 reader()函数中各增加一对PV操作,就可以得到写进程优先的解决程序
请添加图片描述

知识回顾

请添加图片描述

2.3.11哲学家进餐问题

请添加图片描述

解决方式

请添加图片描述

方案三

增加一个互斥信号量,使得只有左右筷子都存在的时候才会取,并且取筷子操作一气呵成,若是先进行第一个哲学家,然后进行4号哲学家,则依然可能会拿到一个筷子

知识回顾

请添加图片描述

2.3.12 管程

知识总览

请添加图片描述

为什么引入管程?

请添加图片描述

管程的定义和基本特征

请添加图片描述

管程解决生产者消费者问题

请添加图片描述
请添加图片描述

Java中类似管程的机制

请添加图片描述

知识回顾

请添加图片描述

2.4.1 死锁的概念

知识总览

请添加图片描述

什么是死锁

请添加图片描述
请添加图片描述

饥饿,死循环的区别

请添加图片描述

死锁产生的必要条件

请添加图片描述

什么时候会发生死锁

请添加图片描述

死锁的处理策略

请添加图片描述

知识回顾

请添加图片描述

2.4.2预防死锁

请添加图片描述

破坏互斥条件

请添加图片描述

破坏不剥夺条件

请添加图片描述

破坏请求和保持条件

请添加图片描述

破坏循环等待条件

请添加图片描述

知识回顾

请添加图片描述

2.4.3 避免死锁(银行家算法)

知识总览

请添加图片描述

什么是安全序列

请添加图片描述

银行家算法

请添加图片描述

安全状态

请添加图片描述
请添加图片描述

不安全状态

请添加图片描述
请添加图片描述

知识回顾

请添加图片描述

2.4.4死锁的检测和解除

请添加图片描述

死锁的检测

请添加图片描述
请添加图片描述
请添加图片描述

死锁的解除

请添加图片描述

知识回顾

请添加图片描述

4

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

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

相关文章

Linkage Mapper解密数字世界链接 专栏内容介绍

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Linkage Mapper解密数字世界链接 在数字时代,链接是信息的核心,链接地…

typescript:熟练掌握typescript

一、简介 TypeScript 教程 | 菜鸟教程 TypeScript (简称:TS)是JavaScript的超集 (JS有的TS 都有)。 TypeScriptType JavaScript (在JS 基础之上,为JS添加了类型支持)。 哔哩哔哩_教程_TypeScript 二、TypeScript为什么要为js增加类型支持? 背景&am…

Flowable+React+bpmn-js实现工作流

由于新东家使用的是React,不是Vue,而自己一直想做一个关于工作流的应用出来,断断续续,花了几个月的时间,开发了工作流的功能,后面会继续完善。 技术栈 前端 前端是基于React开发的,使用了ant…

【LeetCode】704.二分查找

704.二分查找 解析&#xff1a; 思路一&#xff1a;暴力解法&#xff0c;直接遍历&#xff0c;从头开始查找&#xff0c;如果找到直接返回下标&#xff0c;找不到返回-1。 class Solution { public:int search(vector<int>& nums, int target) {for(int i 0; i <…

[架构之路-192]-《软考-系统分析师》-8-软件工程 - 14种UML图快速概览

目录 第1章 UML概述 1.1 什么是UML&#xff1f; 1.2 为什么要用UML&#xff1f; 1.3 UML图有哪些&#xff1f; 1.4 UML图概览 第2章 UML图示 2.1 静态图、结构图 - 什么是类图&#xff1f; 泛化&#xff08;Generalization&#xff09; 实现&#xff08;Realization&a…

四:redis的常见命令及5种基本数据类型

四:redis的常见命令及数据类型 Redis 键(key) 命令1.String&#xff08;字符串&#xff09;2.List(列表类型)3.set(集合)4.Hash(哈希)5.Zset(有序集合) redis官网可查看所有命令&#xff1a; https://www.redis.net.cn/order/ Redis 键(key) 命令 127.0.0.1:6379> keys * …

String、StringBufer、StringBuild类

文章目录 1. String1.1 String的特性1.2 String的不可变的特性理解1.3 String不同实例化方式的对比1.4 *String中的常用方法1.5 String与其他类型之间的转换1.5.1 String与基本数据类型、包装类之间的转换1.5.2 String与字符数组(char[])之间的转换 2. StringBuffer类2.1 Strin…

如何从菜鸟变成大佬:提升写文案的技巧

其实很多人都不知道文案是什么&#xff1f; 他们分不清文案和日常的写作之间的区别。 其实&#xff0c;文案和日常的写作的最大区别就是是否能够产生销售力。 比如你平时写作文、写博客、写情感文章、写政府报告&#xff0c;公文、写书之类的&#xff0c;都不属于文案的范畴…

基于线上考研资讯数据抓取的推荐系统的设计与实现(论文+源码)_kaic

摘 要 随着互联网的飞速发展&#xff0c;互联网在各行各业的应用迅速成为众多学校关注的焦点。他们利用互联网提供电子商务服务&#xff0c;然后有了“考研信息平台”&#xff0c;这将使学生考研的信息平台更加方便和简单。 对于考研信息平台的设计&#xff0c;大多采用java技…

Ae:绘画面板

Ae菜单&#xff1a;窗口/绘画 Paint 快捷键&#xff1a;Ctrl 8 绘画工具&#xff08;画笔工具、仿制图章工具及橡皮擦工具&#xff09;仅能工作在图层面板上。在使用绘画工具之前&#xff0c;建议先在绘画 Paint面板中查看或进行相关设置。 说明&#xff1a; 如果要在绘画描边…

尝试通过俄罗斯方块解释程序员这个职业

每到毕业季和高考季&#xff0c;总会有相关的职业前景咨询环节等待着我&#xff0c;不管我愿不愿意~~。 每次我都会变着法向众人解释程序员这个职业&#xff0c;声泪俱下地描述互联网各种血泪史&#xff0c;先去考公不要进坑云云。可是效果非常不好&#xff0c;7、8月份这群人…

使用docker compose 安装最新版neo4j

一、Neo4j和图数据库简介 neo4j是基于Java语言编写图形数据库。图是一组节点和连接这些节点的关系。图形数据库也被称为图形数据库管理系统或GDBMS。 Neo4j的是一种流行的图形数据库。 其他的图形数据库是Oracle NoSQL数据库&#xff0c;OrientDB&#xff0c;HypherGraphDB&am…

AIGC周报|下一个裁谁?老板:问问AI;OpenAI推出Shap·E;库克:AI仍有不少问题要解决

AIGC&#xff08;AI Generated Content&#xff09;即人工智能生成内容。近期爆火的 AI 聊天机器人 ChatGPT&#xff0c;以及 DallE 2、Stable Diffusion 等文生图模型&#xff0c;都属于 AIGC 的典型案例&#xff0c;它们通过借鉴现有的、人类创造的内容来快速完成内容创作。 …

网络基础之应用层协议,组织方式,自定义协议和http协议https协议简单介绍

网络基础之应用层协议 应用层介绍应用层是什么 组织方式序列化反序列化常见的自定义序列化方式 HTTP协议——超文本传输协议&#xff08;最早就是用来传输web网页传输的&#xff09;HTTP协议的特性HTTP协议的格式&#xff1a; HTTP 请求请求行HTTP常见HeaderHTTP常见状态码 HTT…

asp.net+C#公交线路换乘查询系统

系统功能结构图 (1)用户查询模块 在用户查询模块中&#xff0c;主要是查询出用户自己所需要的线路信息&#xff0c;这也是整个系统最主要的功能模块。主要包括&#xff1a; ①查询车次信息&#xff1a;输入要查询的车次进行搜索&#xff0c;可以查询出于它相应的站点名和站点描…

unity航点寻径

一、游戏框架&#xff1a;设置了六个路标&#xff0c;角色会在这六个路标之间一次移动&#xff0c;当移动到第六个路标后又会返回第一个路标&#xff0c;继续依次移动。 road&#xff1a; 道路&#xff0c;由五个立方体组成 sign&#xff1a;路标&#xff0c;由六个胶囊组成 …

系统集成项目管理工程师 下午 真题 及考点(2020年下半年)

文章目录 2020年下半年试题一&#xff1a;第10章 项目质量管理&#xff0c;规划质量管理过程的输入试题二&#xff1a;第9章 项目成本管理&#xff0c;典型&#xff1a;EAC ACETC AC&#xff08;BAC-EV&#xff09;/CPI BAC/CPI试题三&#xff1a;第18章 项目风险管理&#x…

Grafana 系列-统一展示-3-Prometheus 仪表板

系列文章 Grafana 系列文章 知识储备 Prometheus Template Variables 你可以使用变量来代替硬编码的细节&#xff0c;如 server、app 和 pod_name 在 metric 查询中。Grafana 在仪表盘顶部的下拉选择框中列出这些变量&#xff0c;帮助你改变仪表盘中显示的数据。Grafana 将…

【Java EE】-Servlet(四) Cookie和Session

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【JavaEE】 分享: 寂寞会发慌&#xff0c;孤独是饱满的。——史铁生《命若琴弦》 主要内容&#xff1a;Cookie的理解&#xff0c;Cookie是什么&#xff1f;Cookie从哪里来&#x…

【消息中间件】kafka高性能设计之内存池

文章目录 前言实现创建内存池分配内存释放内存 总结 前言 Kafka的内存池是一个用于管理内存分配的缓存区域。它通过在内存上保留一块固定大小的内存池&#xff0c;用于分配消息缓存、批处理缓存等对象&#xff0c;以减少频繁调用内存分配函数的开销。 Kafka内存池的实现利用了…