操作系统笔记(五)信号量,经典的IPC问题(读写者问题...)

news2024/11/25 0:24:00

信号量 

一个信号量是一个包含两部分内容的数据结构:    

(a) 一个整数计数器, COUNT    

(b) 一个记录阻塞进程ID的队列, Q

信号量有两个原子操作:  

UP(V操作) 和 DOWN (P操作)

DOWN(S):     

if (S.count > 0)         

  S.count = S.count - 1;   

 else       

  block(P);

即,                      

 (a) 将 P进程的pid 插入 S.Q                        

(b) 阻塞进程 P                    

 (c) 将控制权交给调度进程

UP(S):             

if (S.Q is nonempty)             

wakeup(P) 唤醒 S.Q中的某个P; 即:                        

(a) 将进程P的pid从队列S.Q中移除                      

  (b) 将进程P的pid插入就绪队列                      

  (c) 将控制权交给调度进程             

else             

S.count = S.count + 1;

利用信号量实现互斥

semaphore mutex = 1;  

// set mutex.count = 1    

DOWN(mutex);     

- critical section -    

UP(mutex);

信号量通过引入阻塞避免了忙等待。

习题:

设两个进程共用一个临界资源的互斥信号量mutex,当mutex=1时表示()

A 一个进程进入了临界区,另一个进程在等待;

B没有一个进程进入临界区;

C 两个进程都进入临界区;

D 两个进程都在等待;

经典的IPC问题

  1. 读者写者问题
  2. 哲学家就餐问题
  3. 睡眠理发师问题

1. 读者写者问题

             

Reader:

Down(mutex)

Read data

Up(mutex)

Writer:

Down(mutex)

Write data

Up(mutex)

问题:每次只允许一个读者读数据。

Initial: reader = 0; wmutex = 1;

Reader:

reader ++;

If(reader == 1)

Down(wmutex);

Read data

reader--;

If(reader == 0)

Up(wmutex);

Writer :

Down(wmutex)

Write data

Up(wmutex)

问题: 导致竞争条件。

方案1

Reader:

Down(mutex);

reader ++;

If(reader == 1)

Down(wmutex);

Up(mutex);

Read data

Down(mutex);

reader--;

If(reader == 0)

Up(wmutex);

Up(mutex);

Writer:

Down(wmutex)

Write data

Up(wmutex)

2. 哲学家就餐问题

五个哲学家坐在餐桌边,每两位哲学家之间有一个叉子。每个哲学家需要拿到两把叉子才能吃到面条。哲学家吃一会儿面就放下叉子思考人生,思考一会又打算吃点面条,如此循环。如何确保所有哲学家都能高效地吃面条和思考人生?

方案1

过程take-fork 将等待直到获得相应的叉子。

问题:如果五个哲学家同时感到饿了,他们将同时拿起他们左边的叉子,这将导致大家都在等待右边的叉子,谁都吃不了面条。

方案2

问题: 如果一个哲学家正在吃面条,而他旁边的哲学家请求使用叉子,那么所有其他的哲学家都必须等待直到这个请求满足。

方案3

Void philosopher(int i) {    

     While (True) do {

            Thinking;

            take_forks(i);

            Eating;

            put_forks(i);

      }

}

           

目的: 用于检查是否 (i) 可以开始吃了. 如果 (i) 可以开始吃,那么更新 (i)的状态并允许 (i) 开始吃面条。否则,当执行下一个 down 操作时(i) 将被阻塞。

3. 睡眠理发师问题

有一个理发师,一张理发的椅子和n张顾客等待时坐的椅子。如果没有顾客,则理发师将睡觉;若第一个顾客进来了,他将叫醒理发师给自己理发;若顾客进来发现没有空的椅子,他将离开理发店。

解决方案

利用信号量实现同步/异步

  

同步与互斥的关系

  1. 同步:多个相互合作的进程,在一些关键节点上可能需要互相等待或互相交换信息,这种相互制约关系称为同步。
  2. 互斥:当一个进程进入临界区使用临界资源时,另一个进程必须等待;当占用临界资源的进程退出临界区后,另一进程才允许访问此临界资源,进程之间的这种相互制约关系称为互斥。
  3. 关系:互斥是同步的一种特殊情况。

习题:

这节跟上一个笔记的内容联系较大,可以移步上一个笔记看看哦

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

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

相关文章

基于SpringBoot+Vue的前后端分离的大学自动排课系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 在这个背景下&#xf…

【IEEE出版|:IEEE Xplore,EI Compendex,Scopus检索|征稿正在进行中!】

第七届机械工程与智能制造国际会议(WCMEIM 2024) 2024 7th World Conference on Mechanical Engineering and Intelligent Manufacturing 【会议信息】 会议日期:2024年11月15-17日 会议地点:中国武汉(武汉纺织大学…

HTMLCSS:3D旋转动画机器人摄像头

效果演示 创建了一个3D机器人摄像头效果。 HTML <div class"modelViewPort"><div class"eva"><div class"head"><div class"eyeChamber"><div class"eye"></div><div class&quo…

ZeroNL2SQL:零样本 NL2SQL

发布于&#xff1a;2024 年 10 月 30 日 星期三 #RAG #NL2SQL # Zero-Shot 自然语言到 SQL&#xff08;NL2SQL&#xff09;的转换是一个重要的研究领域&#xff0c;它允许非技术用户轻松访问和分析数据&#xff0c;在商业智能、数据分析等领域具有广泛的应用前景。然而&#x…

Qgis 开发初级 《ToolBox》

Qgis 有个ToolBox 的&#xff0c;在Processing->ToolBox 菜单里面&#xff0c;界面如下。 理论上Qgis这里面的工具都是可以用脚本或者C 代码调用的。界面以Vector overlay 为例子简单介绍下使用方式。Vector overlay 的意思是矢量叠置分析&#xff0c;和arcgis软件类似的。点…

三合一无线键鼠中射频芯片-PHY6233

PHY6233 三合一键鼠芯片在键鼠领域占据着重要的地位。它以其强大的性能和广泛的适用性&#xff0c;成为众多键鼠产品的核心组件。PHY6233 芯片能够提供出色的操作体验。它可以支持多达几乎 100 个按键的支持&#xff0c;满足了用户对多功能键鼠的需求。同时&#xff0c;该芯片还…

基于STM32F103的计秒设计

基于STM32F103的计秒设计 仿真软件&#xff1a; Proteus 8.17 编程软件&#xff1a; Keil 5 仿真实现&#xff1a; 在4位数码管上进行计秒显示&#xff0c;每100ms改变一次数值。 数码管原理&#xff1a; 数码管是一种常用的显示器件&#xff0c;主要用于显示数字和一些字母…

万圣夜,Codigger

在这个神秘的万圣节&#xff0c;让Codigger&#xff0c;一个专业的分布式操作系统&#xff0c;带领你踏入未知的编程世界&#xff01;就像变装成各种角色一样&#xff0c;Codigger也以其独特的能力和技巧&#xff0c;在数字世界中展现无穷魅力。让我们一起在这个神秘的节日里&a…

探索光耦:光耦——光伏逆变器中的智慧守护者

在全球清洁能源的浪潮中&#xff0c;光伏产业正以前所未有的速度蓬勃发展。作为光伏发电系统的核心设备&#xff0c;光伏逆变器扮演着将直流电转化为交流电的关键角色&#xff0c;其性能直接关系到整个系统的效率和安全性。而在这一复杂而精细的转换过程中&#xff0c;光电耦合…

关于AES加密的思考与总结 | 内容详细

今天心血来潮&#xff0c;想把AES加密的内容做一个总结&#xff0c;方便日后观看查阅。 学艺不精&#xff0c;如有错误&#xff0c;欢迎各位老师批评指正&#xff01; AES简介 AES是目前广泛应用的对称加密算法&#xff0c;主要用于保护电子数据。 对称加密&#xff1a;加密…

航顺芯片HK32MCU版图再扩张,深圳南山新基地助力集成电路核心圈突破

【中国&#xff0c;深圳&#xff0c;2024年10月24日】深圳市南山区&#xff0c;作为中国高新技术产业的重要聚集地&#xff0c;一直是集成电路企业的必争之地。近期&#xff0c;深圳市航顺芯片技术研发有限公司&#xff08;下文简称“航顺芯片”&#xff09;随着高精尖人才团队…

qt配置https请求

qt应用版本 windows 32位 先说下心理路程&#xff0c;你能遇到的我都遇到了&#xff0c;你能想到的我都想到了&#xff0c;怎么解决看这一篇就够了&#xff0c;从上午12点到晚上12点几乎没离开电脑&#xff08;除了吃饭&#xff09;&#xff0c;对于openssl这种用的时候无感&am…

LVGL-从入门到熟练使用

LVGL简介 LVGL&#xff08; Light and Versatile Graphics Library &#xff09;是一个轻量、多功能的开源图形库。 1、丰富且强大的模块化图形组件&#xff1a;按钮 、图表 、列表、滑动条、图片等 2、高级的图形引擎&#xff1a;动画、抗锯齿、透明度、平滑滚动、图层混合等…

【判断推理】翻译推理

7.1 等价推出 等价推出指的是将题干逻辑关系和选项逻辑关系分别翻译后&#xff0c;二者完全一致。考察的是对翻译规则的掌握&#xff0c;常用知识点有命题的传递和原命题、逆否命题等价。 题干中无逻辑关联词的部分不需要关注&#xff0c;直接寻找带有逻辑关联词的语句即可。 …

圣麟易安中医:微搭助力中医诊所实现数字化问诊接诊

“只用了下班时间&#xff0c;每天写一点点&#xff0c;2个月就基于微搭搭建出来了现在问诊小程序和接诊管理后台&#xff0c;大概节约70%的工作量吧” ——项目负责人 邓小静 私人中医诊所也能定制小程序&#xff0c;传统中医诊所如何实现服务流程的智能化和个性化&#x…

基于SSM校园生活电子商城管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;餐厅信息管理&#xff0c;菜品类型管理&#xff0c;闲置物品管理&#xff0c;订单管理&#xff0c;系统管理 用户账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xf…

python mac vscode 脚本文件的运行

切换到脚本文件的目录下 路径的修改 当前文件组织形式&#xff1a; 脚本文件在文件夹下&#xff1a; 赋予权限&#xff1a;chmod x ./scripts/fscd_test.sh 运行&#xff1a;./scripts/fscd_test.sh

Python画图3个小案例之“一起看流星雨”、“爱心跳动”、“烟花绚丽”

源码如下&#xff1a; import turtle # 导入turtle库&#xff0c;用于图形绘制 import random # 导入random库&#xff0c;生成随机数 import math # 导入math库&#xff0c;进行数学计算turtle.setup(1.0, 1.0) # 设置窗口大小为屏幕大小 turtle.title("流星雨动画&…

【大数据学习 | kafka】kafka的整体框架与数据结构

1. kafka的整体框架 首先kafka启动以后所有的broker都会向zookeeper进行注册&#xff0c;在/brokers/ids中以列表的形式展示所有的节点&#xff0c;在/controller节点中使用独享锁实现broker的选举&#xff0c;其中一个机器为主节点。其他的为从节点&#xff0c;选举的根本原则…

SpringBoot获取resources目录下的文件

在 Spring Boot 项目中&#xff0c;获取 resources 目录中的文件路径通常涉及到访问类路径资源&#xff08;classpath resources&#xff09;。Spring Boot 提供了一些工具类和方法&#xff0c;可以方便地访问这些资源。以下是一些常见的方法&#xff1a; 首先&#xff0c;我们…