【0.2 漫画操作系统原理】
🖥️ 漫画操作系统原理
🎯 学习目标:深入理解操作系统核心原理,为Java并发编程和性能优化打下坚实基础
🎪 第一章:操作系统初识篇
🤔 什么是操作系统?
想象一下,你是一个大型图书馆的馆长…
📚 没有操作系统 vs 有操作系统没有操作系统:
读者1 → 直接找书架 ← 读者2↘ ↙发生冲突!有操作系统:
读者1 → 图书管理系统 → 有序分配 → 书架1
读者2 → 图书管理系统 → 有序分配 → 书架2
读者3 → 图书管理系统 → 排队等待 → 书架?操作系统的核心职责:
• 资源管理:CPU、内存、磁盘、网络
• 进程调度:决定哪个程序先运行
• 内存管理:为程序分配和回收内存
• 文件管理:统一的文件存储接口
• 设备管理:统一的硬件访问接口
🎭 操作系统特性:
- 并发性:同时处理多个任务
- 共享性:多个程序共享系统资源
- 虚拟性:为每个程序提供独立的虚拟空间
- 异步性:程序执行顺序不可预知
🏗️ 操作系统架构
🏗️ 操作系统分层架构:┌─────────────────────────────────────┐
│ 用户应用程序 │ ← 用户态
├─────────────────────────────────────┤
│ 系统调用接口 │ ← 内核态边界
├─────────────────────────────────────┤
│ 进程管理 │ 内存管理 │ 文件管理 │
├─────────────────────────────────────┤ ← 内核态
│ 设备管理 │ 网络管理 │ 安全管理 │
├─────────────────────────────────────┤
│ 硬件抽象层 │
└─────────────────────────────────────┘硬件层
🔄 第二章:进程与线程管理
👥 进程基础概念
🎭 进程生命周期:创建 → 就绪 → 运行 → 阻塞 → 终止↑ ↓ ↓ ↑└──────┴──────┴──────┘进程状态转换:
• 创建→就绪:进程创建完成,等待CPU
• 就绪→运行:获得CPU时间片
• 运行→阻塞:等待I/O或其他资源
• 阻塞→就绪:所需资源到位
• 运行→就绪:时间片用完
• 运行→终止:进程执行完毕进程控制块(PCB):
┌─────────────────┐
│ 进程ID(PID) │
│ 进程状态 │
│ CPU寄存器 │
│ 内存管理信息 │
│ 文件描述符 │
│ 调度信息 │
└─────────────────┘
🧵 线程深度解析
🧵 进程 vs 线程对比:进程(重量级):
┌─────────────────┐
│ 进程A │
│ ┌─────┐ ┌─────┐ │
│ │线程1│ │线程2│ │
│ └─────┘ └─────┘ │
│ 独立内存空间 │
└─────────────────┘线程(轻量级):
• 共享进程内存空间
• 拥有独立的栈和寄存器
• 创建开销小,切换快
• 通信简单但需要同步线程实现模型:
1. 用户级线程:内核不感知,效率高但无法利用多核
2. 内核级线程:内核管理,可利用多核但开销大
3. 混合模型:结合两者优势
🔄 进程调度算法
🔄 CPU调度算法详解:1. 先来先服务(FCFS):进程: A(24) → B(3) → C(3)时间: 0────24──27─30平均等待时间: (0+24+27)/3 = 172. 最短作业优先(SJF):进程: B(3) → C(3) → A(24)时间: 0─3──6────30平均等待时间: (0+3+6)/3 = 33. 时间片轮转(RR):时间片=4,进程队列: A(24),B(3),C(3)A(4) → B(3) → C(3) → A(4) → A(4) → A(4) → A(4) → A(4)4. 优先级调度:┌─────────────────┐│ 优先级队列 ││ 高 ┌─────┐ ││ ↑ │进程A│ ││ │ └─────┘ ││ │ ┌─────┐ ││ │ │进程B│ ││ │ └─────┘ ││ 低 ┌─────┐ ││ │进程C│ ││ └─────┘ │└─────────────────┘
🔒 进程同步与通信
🔒 进程同步机制:1. 互斥锁(Mutex):```javasynchronized(lock) {// 临界区代码共享资源访问}
-
信号量(Semaphore):
Semaphore semaphore = new Semaphore(3); // 允许3个线程 semaphore.acquire(); // P操作,获取资源 try {// 使用资源 } finally {semaphore.release(); // V操作,释放资源 }
-
条件变量(Condition):
ReentrantLock lock = new ReentrantLock(); Condition condition = lock