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

操作系统复习(二)

操作系统复习(二)

多道程序设计

多道程序设计是把多个程序放到内存中,它们交替运行的技术。

  • 宏观并行
  • 微观串行

内存中有程序A(需要大量计算)和程序B(需要频繁读取磁盘)。当B因等待磁盘I/O而暂停时,CPU不会空等,而是立即切换去执行A,等B的I/O完成后再回来执行B。

主要优点

资源利用率高,系统吞吐量大。

需要的硬件支持

中断系统、MMU、时钟、IO处理器或DMA。

要实现多道程序设计,仅靠软件逻辑是不够的,必须依赖于底层硬件的强力支撑。具体需要以下几大硬件机构:

  • 中断机构(必不可少):这是实现“交替运行”的物理基础。当运行中的程序发起I/O请求并完成时,或者时间片用完时,硬件中断机构会立即捕获这些事件,触发中断信号,让CPU暂停当前程序,切换到操作系统(管态) 去调度下一个程序运行。如果没有中断,CPU就无法知道I/O何时完成,也就无法实现“切换”。
  • 存储保护机构(如MMU、基址/限长寄存器):内存中同时驻留多道程序,必须防止它们互相干扰或越界访问。硬件提供基址寄存器和限长寄存器(或现代CPU的MMU内存管理单元),用于比较程序发出的内存地址是否属于它自己的合法区域。一旦程序试图访问其他程序的内存空间,硬件会立即触发“越界中断”,由操作系统强制终止该程序。
  • 通道(I/O处理器)或DMA(直接存储器访问)控制器:这是实现CPU与I/O并行的关键硬件。通道是一种专门负责输入/输出控制的独立处理器。当CPU向通道发出I/O指令后,通道全权负责数据在内存和外设之间的传输,CPU则转身去执行另一道程序。传输完成后,通道通过中断通知CPU。
  • 时钟(定时器)(视调度算法而定):如果系统采用“时间片轮转”调度(我们之前聊过),则需要一个可编程的硬件时钟。它每隔固定时间(如10ms)产生一次时钟中断,强制当前程序让出CPU,确保所有程序都能得到公平的响应,防止一道程序长期霸占CPU。

简述信号量

在记录型信号量(PV操作)中,信号量的值 S 具有明确的物理意义:

  • S > 0:表示当前可用的临界资源数量。
  • S = 0:表示临界资源正在被某个进程使用,且没有其他进程在等待。
  • S < 0:其绝对值表示当前等待该临界资源的进程数量。

进程状态相关

进程被调度程序选中:进程从就绪态转换为运行态。

进程的时间片到期:进程从运行态转换为就绪态。

进程被更高优先级的进程抢占:进程从运行态转换为就绪态。

等待某一事件:这是运行态 → 阻塞态(等待态) 的转换条件(例如请求I/O操作)

等待的事件发生:这是阻塞态(等待态) → 就绪态 的转换条件(例如I/O完成)

管程

管程(Monitor) 是一种高级的进程同步机制。可以把它理解为一个专门用来管理共享资源的“专属管家”——它把共享资源和对它的所有操作都封装在一个模块里,并强行规定:同一时刻,最多只有一个进程能进入管程内部执行。

之前说的信号量(PV操作)虽然强大,但缺点很明显:P和V操作分散在代码各处,一旦程序员写错顺序或忘记V操作,就会导致死锁。管程的诞生,就是为了解决信号量“使用时容易出错”这个痛点,把同步的复杂性交给编译器去处理。

管程的组成

一个标准的管程包含以下四个部分:

  • 共享数据结构:需要被多个进程保护的资源(如缓冲区队列、共享变量)。
  • 操作函数(过程):用于操作共享数据的入口函数。
  • 初始化代码:负责在系统启动时初始化共享数据。
  • 条件变量:用于实现复杂的等待/唤醒逻辑(如缓冲区满时暂停生产者,缓冲区空时暂停消费者)。

并发和并行

区别

  • 并发(Concurrency):指的是逻辑上的“同时”。系统有能力处理多个任务,但不一定在物理上同时执行。在单核CPU上,通过时间片轮转(我们之前聊过)让多个进程交替推进,这就是并发的典型实现。它关注的是结构(如何设计程序来处理多个任务)。

  • 并行(Parallelism):指的是物理上的“同时”。系统在同一时刻真正地在执行多个任务。这必须依赖多核CPU或多处理器的支持,每个核心在同一时刻独立运行一个任务。它关注的是执行(如何让任务跑得更快)。

http://www.gsyq.cn/news/1618398.html

相关文章:

  • 机器视觉自动曝光综述
  • Ubuntu 18.04 上 ROS1 Melodic 安装配置教程
  • 机器学习模型生产部署:从PyTorch到K8s+Triton的工程实践
  • 彻底解决ChatGPT幻觉问题!2026大模型虚假信息规避实战方案
  • 元学习对话系统:少样本个性化适配的工业级实践
  • ORB-SLAM3 关键帧相似度计算
  • MySQL 迁移实战——如何实现真正的“零改造“平滑切换
  • 耐压仪一开机5kV,屏幕数据直接跳飞?换过三个牌子才找到答案
  • 2026长春靠谱人造草坪供应商,选这家不踩坑
  • Java毕设项目:基于 SpringBoot 的宠物诊疗设备调度管理系统的设计与实现 基于 SpringBoot 的宠物疫苗信息公示与统计系统的设计与实现 (源码+文档,讲解、调试运行,定制等)
  • 3分钟免费解锁QQ音乐格式限制:QMCFLAC2MP3让你的音乐真正自由播放
  • 2026 GitHub最受欢迎的10个AI开源项目盘点
  • cw-omnibus:一本 Android 开发书的全部示例代码
  • Codex 新手优选的 6 个实用 Skill:让 AI 真正成为你的开发助手
  • 鼠标革命:让你的普通鼠标在Mac上比触控板更好用!
  • 运行codex时出现登录失败:failed to start login server: 以一种访问权限不允许的方式做了一个访问套接字的尝试。 (os error 10013) 解决方案
  • 笔试强训 Day 19:小易的升级之路、礼物的最大价值、对称之美
  • Java毕设选题推荐:基于 Java 的学术资料智能检索管理系统的设计与实现 基于 Java 的文献资源分类统计管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 内网渗透测试实战指南:从信息收集到域控攻防的完整攻击链
  • 节点】[SmoothStep节点]原理解析与实际应用
  • 2026年AIGC检测怎么过?5大检测平台对比+AI痕迹降低实战指南
  • ZXing:一个扫描条码的基础库
  • ICM-42688-P与PIC18F4553在机器人控制与工业监测中的应用
  • 类比StandardServer, 抓住StandardService整体类依赖结构来理解
  • 【节点】[Clamp节点]原理解析与实际应用
  • Kubernetes 核心机制与运维实践知识精要
  • ROS2基本操作指令:从“节点”到“机器人”的完整工具箱
  • 重庆市二手房价格数据分析与可视化系统
  • 墨香情手游官方下载:2026 国风武侠手游优选正版高速官方下载通道
  • .NET与AI Agent深度集成开发实战