当前位置: 首页 > news >正文

【操作系统】临界区与临界资源

考点频率:★★★★☆(常以1-2道选择题考查)
难度:⭐
建议:掌握临界资源的判断方法、临界区的四部分组成、临界区管理的四项原则

1️⃣ 回顾:什么是临界资源?

临界资源是指一次只允许一个进程使用的资源。这类资源如果被多个进程同时访问,会导致数据不一致或系统错误。

常见临界资源举例

临界资源类型具体例子为什么是临界资源
共享变量计数器count、队列指针多个进程同时修改会导致计数错误
共享数据结构链表、缓冲区池同时操作会破坏数据结构完整性
独占I/O设备打印机、磁带机同时打印会输出混乱

判断标准:如果一个资源被多个进程同时访问会造成不可预期的错误,那么它就是临界资源。

注意:临界资源不一定都是硬件设备,软件中的共享数据(如全局变量、缓冲区)也属于临界资源。

2️⃣ 什么是临界区?

临界区是指每个进程中访问临界资源的那一段程序代码。临界区不是一段固定的内存区域,而是程序中的代码片段。

一个进程访问临界资源的典型结构

进程P: 剩余区代码 ← 不需要互斥保护的普通代码 ┌─────────────────┐ │ 进入区 (Entry) │ ← 申请进入临界区(如执行P操作) │ 临界区 (CS) │ ← 真正访问临界资源的代码(核心) │ 退出区 (Exit) │ ← 释放临界区(如执行V操作) └─────────────────┘ 剩余区代码 ← 继续执行普通代码

四个区域的说明

区域说明
进入区检查是否可进入临界区。若可以,则设置“正在访问临界区”的标志(通常通过PV操作的P操作实现)。
临界区真正访问临界资源的代码段。同一时刻最多只有一个进程在此区域。
退出区清除“正在访问临界区”的标志,释放资源(通常通过PV操作的V操作实现)。
剩余区代码中除进入区、临界区和退出区之外的部分,不受互斥保护。

3️⃣ 临界区管理的四项原则

临界区的管理必须满足以下四个条件,这是软考常考的重点。凡是不满足这些条件的设计,都会导致进程间资源访问出错。

原则说明反例
忙则等待已有进程在临界区时,其他进程必须等待,不能强行闯入不遵守会导致两个进程同时修改共享变量
空闲让进当无进程在临界区时,一个请求进入的进程应立即获准进入不遵守会浪费CPU时间,导致性能下降
有限等待任何进程都不能无限期地等待进入临界区(不应存在死等或饥饿)低优先级进程永远等不到(饥饿)
让权等待不能进入临界区的进程,应当释放CPU资源,而不是占用CPU忙等进程死循环等待,浪费CPU(自旋锁虽允许但在多核场景特殊处理)

4️⃣ 临界区与临界资源的关系

临界资源(资源层面) │ └── 由多个进程共享 │ └── 每个进程中访问该资源的代码段 ──→ 临界区
  • 临界资源是“东西”(如打印机、共享缓冲区)
  • 临界区是“代码”(访问那个东西的程序段)
  • 一个进程可以访问多个临界资源,因此可能对应多个临界区
  • 同一进程中的多个临界区如果访问不同临界资源,彼此之间通常不需要互斥

5️⃣ 经典例题

例题1:在操作系统中,临界区是指( )。

A. 访问临界资源的程序段
B. 进程执行过程中访问共享变量的程序段
C. 进程执行过程中访问临界资源的程序段
D. 一段内存区域

解析:临界区是访问临界资源的程序段,是代码而非内存区域,选 C。


例题2:下列原则中,属于临界区管理必须满足的是( )。

A. 忙则等待
B. 资源预分配
C. 循环等待
D. 不可抢占

解析:临界区管理的四项原则包括:忙则等待、空闲让进、有限等待、让权等待。资源预分配、循环等待、不可抢占是死锁相关的条件,不属于临界区管理原则。选A


例题3(判断):一个进程可以拥有多个临界区。( )

解析:正确。一个进程可能访问多个不同的临界资源,因此会有多个对应的临界区。例如生产者进程既需要访问共享缓冲区(临界区1),又可能需要更新计数器(临界区2)。

6️⃣ 记忆口诀

临界资源一次用,临界区是访问段。
进入退出要成对,忙则空闲不能乱。
有限等待不饿死,让权等待不空转。

7️⃣ 小测验(评论区对答案)

下列关于临界区的叙述中,正确的是( )。
A. 临界区是一段内存区域
B. 同一进程的多个临界区之间必须互斥
C. 临界区中的代码访问的是临界资源
D. 进程在临界区中可以无限期停留

🔔本专栏日更2篇,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #临界区 #临界资源 #进程同步 #操作系统

http://www.jsqmd.com/news/1079997/

相关文章:

  • 小程序计算机毕设之移动端驱动的SpringBoot物联网菇房环境数据管理系统设计与实现 食用菌栽培专用物联网菇房环境监测小程序系统设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • Python+Appium搭建Android自动化测试环境:从零到一实战指南
  • Apache SeaTunnel Zeta Engine 的 Basic Auth 是怎么工作的?
  • 企业出海进入系统化开发时代了吗?
  • OpenAI收购Ona:Codex持久化沙箱如何改变Agent开发范式
  • 解码时间序列记忆:LSTM核心结构与门控机制详解
  • 开源中国完成数亿元 C 轮融资:Gitee 加速智能化研发效能革新
  • 关于毕业多年后再次投身研究的感触与未来展望!
  • 注册商标R标怎么标注才合规?企业品牌用标必备常识
  • HPCC 仿真代码分析(一)——pfc帧的触发
  • 软件测试之黑盒测试/白盒测试详解
  • 2026工业散热白皮书 高静压风扇化解设备高密度部署热失效难题
  • 革命性AI机器人框架IB-Robot:如何快速搭建智能具身机器人开发环境
  • 服务治理未来展望
  • 怎样用KeymouseGo实现自动化操作:5个高效录制秘诀
  • Redis 大量 Key 删除慢的根因与系统化解决方案
  • 计算机毕业设计之基于微信小程序的上门维修系统
  • 三维拟线性波动方程全局解存在性:加权Strichartz估计与能量控制
  • GitHub Desktop中文汉化:让Git操作像使用微信一样简单
  • input 设备 - kernel 和 应用数据 交互
  • 3步重塑Windows桌面:NoFences分区工具从零到精通的实战指南
  • ArcObjects SDK 10.8技术栈:解决复杂地理数据可视化的专业级方案
  • 【大二那年我C盘又红了,然后有了这篇操作系统笔记】
  • 图论中的完美匹配重配置:从2-switch到k-switch的连通性探索
  • 从对话框到工作流:我用开源工具把 AI Agent 工程化落地的踩坑实录
  • Etcd 3.6.11 官方版下载(夸克网盘+百度网盘,SHA256校验)
  • 从 UI 渲染者到 AI 组织者:2026 年前端工程师转型 AI 应用开发全指南
  • 爬虫转大模型:新人上手的关键步骤
  • 2026数字化农业:水溶肥科学选配指南,助力高产优质
  • 如何从卫星瓦片拼接出一张高清区域影像?