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

操作系统与并发底层原理多道技术

  • 并发(Concurrency)
  • 多道程序设计(Multiprogramming)
  • 底层调度原理

🧠 一、先理解几个基础概念

1. 什么是操作系统(OS)?

操作系统是运行在计算机硬件上的核心程序,负责管理资源(CPU/内存/设备),协调各个应用程序的运行。


2. 什么是并发(Concurrency)?

并发是指“多个程序或任务同一个时间段内交替执行”,让人感觉它们是在“同时运行”。

💡 注意:并发 ≠ 真并行(Parallelism)
并发是交替切换执行;并行是真正同时执行(多核)


3. 什么是多道技术(Multiprogramming)?

多道技术是操作系统的一个核心设计思想,允许多个程序“同时”驻留在内存中,通过CPU在它们之间快速切换,提高资源利用率。


🧩 二、从现实类比帮助你理解

场景类比:餐厅做饭 🍽️

  • 单道程序设计 = 厨师每次只能做一道菜,做完才开始下一道。
  • 多道程序设计 = 厨师能同时处理多道菜(先煮这个汤、等汤滚时炒青菜、青菜出锅后炸鸡翅…)

虽然本质上是一个人(CPU)干活,但它在多个任务之间来回切换,让你感觉“好像同时都在做”。


🧱 三、底层原理:操作系统怎么做到“并发”的?

✅ 1. 进程(Process)和线程(Thread)

  • 进程 = 正在运行的程序,是资源分配的基本单位
  • 线程 = 进程中的执行单元,是调度的基本单位

🔹 一个进程里可以有多个线程(比如浏览器主线程 + 视频线程 + JS线程)


✅ 2. CPU 时间片(Time Slice)切换机制

  • 操作系统把 CPU 时间划分为“时间片”(几十毫秒)
  • 每次只允许一个线程占用 CPU
  • 时间片结束,切换到下一个线程 → 上下文切换

💡 这种快速切换的过程 + 多道程序的驻留 → 实现“并发运行


✅ 3. 上下文切换(Context Switch)

  • 当 CPU 从一个任务切换到另一个任务时,必须:

    • 保存当前进程的寄存器、程序计数器、栈指针等状态
    • 加载下一个进程的状态
  • 这个过程就是“上下文切换”

  • 太频繁的切换会带来性能开销


🧠 四、多道程序设计解决了什么问题?

问题多道设计解决方案
CPU 空闲当一个程序在等 I/O 时,调度另一个任务执行
内存浪费多个程序共享内存,提高使用率
资源利用率低多个程序交替执行,不让资源空转
响应慢快速切换任务,让系统更流畅

📦 五、操作系统中的调度策略(简化了解)

策略简介
先来先服务(FCFS)谁先来,谁先执行
时间片轮转(RR)每个任务轮流分配时间片
最短作业优先(SJF)先执行短的任务
多级反馈队列综合考虑优先级和历史表现,现代系统常用

💡 六、可视化结构图(文字版)

+-------------------------+
|   操作系统(OS)         |
|                         |
|  [程序A] [程序B] [程序C]   ← 多道程序同时驻留内存
|     ↓       ↓       ↓
|  进程A   进程B   进程C     ← 被加载为独立进程
|     ↓       ↓       ↓
|   线程A1   B1      C1     ← OS按时间片轮流调度线程
|     ↓       ↓       ↓
|      ← CPU快速切换执行 →
|                         |
+-------------------------+

🧰 七、实际应用举例(你日常就在体验)

  • 你同时打开:

    • 浏览器(进程A)→ 看网页
    • QQ(进程B)→ 接收消息
    • WPS(进程C)→ 写文档

虽然只有一个 CPU(或有限几个核心),操作系统用 多道 + 并发 + 调度机制 让它们“看起来”同时运行。


📘 八、延伸学习关键词(你可以继续深入)

如果你想继续深入学习操作系统和并发原理,建议搜索和学习:

关键词内容
进程与线程的区别多任务调度基础
上下文切换并发的代价
进程控制块(PCB)存储进程信息的数据结构
时间片轮转算法最基本调度策略
I/O阻塞与非阻塞多道技术配合I/O调度
并发 vs 并行计算机多任务基础概念
多核并发真正同时执行的并行

✅ 总结一句话:

多道技术是操作系统的核心机制,它通过让多个程序同时驻留在内存中,快速切换 CPU 执行,结合进程调度与上下文切换,实现“并发执行”的效果。


http://www.dtcms.com/a/320067.html

相关文章:

  • docker容器导出为镜像
  • 深度学习入门Day7:Transformer架构原理与实战全解析
  • 亚马逊广告运营:有什么好用的辅助工具
  • Redis配置、测试及分布式缓存实现
  • Android 之 Jetpack - Paging
  • 《C语言》函数练习题--2
  • ElasticSearch相关术语介绍
  • 使用 decimal 包解决 go float 浮点数运算失真
  • 小鸡模拟器安卓版:经典街机游戏的移动体验
  • 利用Axure与JavaScript打造动态图片上传原型:设计案例分享
  • spring-cglib代理-初探01
  • 深度学习-卷积神经网络CNN-1×1卷积层
  • Flink-1.19.0源码详解9-ExecutionGraph生成-后篇
  • UE5多人MOBA+GAS 39、制作角色上半身UI
  • 字符串匹配(重点解析KMP算法)
  • 6 大模块!重构物业运营方式
  • 跨境电商增长突围:多维变局下的战略重构与技术赋能
  • 数智先锋 | Bonree ONE 赋能通威股份有限公司提升全栈可观测性能力
  • 深入解析NVIDIA Nsight工具套件:原理、功能与实战指南
  • 房产证识别在房产行业的技术实现及应用原理
  • Python Socket 脚本深度解析与开发指南
  • 扣扣号码展示网站源码_号码售卖展示系统源码 全开源 带后台(源码下载)
  • 5、倒计时翻页效果
  • 工作任务管理
  • 《C语言》指针练习题--1
  • Python入门Day17:函数式编程(map/filter/reduce/lambda)
  • 浏览器渲染与GPU进程通信图解
  • Numpy科学计算与数据分析:Numpy数组操作入门:合并、分割与重塑
  • PWM常用库函数(STC8系列)
  • 【Linux基础知识系列】第八十七篇 - 使用df命令查看磁盘空间