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

进程管理的详细总结

目录

1. 进程状态(Process States)

五大基本状态

现代操作系统的扩展状态

2. 进程调度算法(Scheduling Algorithms)

(1)先来先服务(FCFS)

(2)最短作业优先(SJF)

(3)优先级调度(Priority)

(4)时间片轮转(Round Robin, RR)

(5)多级反馈队列(MLFQ)(现代系统常用)

3. 进程同步(Process Synchronization)

(1)临界区问题(Critical Section)

(2)同步机制

(3)经典问题

4. 死锁(Deadlock)

(1)死锁的四个必要条件

(2)死锁处理策略

(3)实际系统中的解决方案

关键对比与总结

现代演进方向


==

1. 进程状态(Process States)

五大基本状态
状态描述转换条件
新建进程刚被创建(如fork()),尚未分配资源。→ 就绪(资源就绪后由调度器分配CPU时间)
就绪进程已获得除CPU外的所有资源,等待被调度。→ 运行(被调度器选中)
运行进程占用CPU执行指令。→ 就绪(时间片用完)→ 阻塞(等待I/O/信号量等事件)
阻塞进程因等待事件(如I/O完成、锁释放)暂停执行。→ 就绪(事件发生后被唤醒)
终止进程执行完毕或被强制终止(如exit()),资源被回收。
现代操作系统的扩展状态
  • 挂起(Suspend):进程被换出到磁盘(如Linux的TASK_STOPPED)。
  • 僵尸(Zombie):子进程终止但父进程未调用wait(),保留PCB供父进程读取退出状态。

2. 进程调度算法(Scheduling Algorithms)

(1)先来先服务(FCFS)
  • 规则:按进程到达顺序分配CPU。
  • 特点
    • 非抢占式:当前进程运行到结束或阻塞。
    • ** convoy效应**:短进程可能因长进程阻塞而等待过久。
  • 适用场景:批处理系统。
(2)最短作业优先(SJF)
  • 规则:优先调度预计执行时间最短的进程。
  • 变种
    • 抢占式(SRTN):新进程到达时,若其执行时间比当前剩余时间更短,则抢占CPU。
  • 缺点:需要预知进程运行时间(实际通过历史数据预测)。
(3)优先级调度(Priority)
  • 规则:按优先级分配CPU,优先级可静态(固定)或动态(随等待时间调整)。
  • 问题饥饿(低优先级进程长期得不到执行)。
  • 解决方案老化(Aging),逐步提高等待进程的优先级。
(4)时间片轮转(Round Robin, RR)
  • 规则:每个进程分配固定时间片(如10ms),超时后放入就绪队列尾部。
  • 关键参数
    • 时间片大小:过长退化为FCFS,过短增加上下文切换开销。
  • 适用场景:分时系统(如Linux默认的CFS调度器改进版)。
(5)多级反馈队列(MLFQ)(现代系统常用)
  • 规则
    1. 多个优先级队列,高优先级队列时间片更短。
    2. 新进程进入最高优先级队列,若时间片用完未结束则降级。
    3. 低优先级队列中的进程可被提升优先级(防止饥饿)。
  • 优势:平衡响应时间(短作业优先)和吞吐量(长作业不饿死)。

3. 进程同步(Process Synchronization)

(1)临界区问题(Critical Section)
  • 核心要求
    • 互斥:同一时间仅一个进程进入临界区。
    • 前进:无进程在临界区时,其他进程可竞争进入。
    • 有限等待:进程等待进入临界区的时间必须有限。
(2)同步机制
机制原理示例
信号量计数器+等待队列,通过P()(申请资源)和V()(释放资源)操作。semaphore mutex = 1;(互斥锁)
管程高级抽象,封装共享变量和操作(如Java的synchronized)。条件变量(wait()/signal()
原子指令硬件支持(如CAS, TAS),实现无锁数据结构。xchg指令实现自旋锁
(3)经典问题
  • 生产者-消费者:通过信号量解决缓冲区同步。
  • 读者-写者:读写锁(读者可并发,写者需独占)。
  • 哲学家就餐:避免死锁(如限制最多4人拿筷子)。

4. 死锁(Deadlock)

(1)死锁的四个必要条件
  1. 互斥:资源一次只能被一个进程占用。
  2. 占有并等待:进程持有资源的同时等待其他资源。
  3. 非抢占:已分配的资源不能被强制剥夺。
  4. 循环等待:存在进程资源的环形等待链(如P1等P2的资源,P2等P1的资源)。
(2)死锁处理策略
策略方法缺点
预防破坏四个必要条件之一(如资源一次性分配)。资源利用率低
避免动态检查资源分配状态(如银行家算法)。计算开销大,需预知最大需求
检测与恢复定期检测死锁(如资源分配图),通过终止进程或回滚恢复。恢复可能导致数据丢失
忽略如Linux/Windows默认策略,假设死锁概率低。适用于通用系统
(3)实际系统中的解决方案
  • 锁顺序:所有进程按固定顺序申请资源(破坏循环等待)。
  • 超时机制:获取锁超时后释放已持有资源(如数据库死锁检测)。

关键对比与总结

概念核心目标典型实现
进程调度公平性 vs 吞吐量 vs 响应时间Linux CFS(基于虚拟时间片)
进程同步安全访问共享资源互斥锁(pthread_mutex_t
死锁避免平衡安全性与效率开发规范(如锁顺序约定)

现代演进方向

  1. 实时调度:优先级反转解决方案(如优先级继承)。
  2. 无锁编程:基于CAS的并发数据结构(如Redis的跳表)。
  3. 分布式死锁检测:适用于微服务架构(如两阶段提交的超时回滚)。

理解这些机制有助于设计高并发、低延迟的系统,并避免常见陷阱(如死锁、竞态条件)。

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

相关文章:

  • Qt GUI缓存实现
  • 实战演练2:实战演练之机器阅读理解(上)
  • AI Coding IDE 介绍:Cursor 的入门指南
  • Cgroup 控制组学习(二)
  • 人工智能与城市:城市生活的集成智能
  • ProtoBuf序列化技术详解与实战指南
  • Model 组件的基本组成
  • vuhub jangow-01-1.0.1靶场攻略
  • 最优估计准则与方法(6)递推最小二乘估计(RLS)_学习笔记
  • 阻止网页重定向
  • 昇思学习营-【模型推理和性能优化】学习心得_20250730
  • 【QT入门到晋级】window opencv安装及引入qtcreator(包含两种qt编译器:MSVC和MinGW)
  • 系统整理Python的循环语句和常用方法
  • RabbiteMQ安装-ubuntu
  • XSS利用
  • 适配IE11(通过Babel+core-js转译ES6语法)
  • 神经网络模型训练需要的内存大小计算方法
  • 智能化设备健康管理:中讯烛龙预测性维护系统引领行业变革
  • 数学建模——模糊综合评价
  • 如何在 Ubuntu 24.04 或 22.04 中更改 SSH 端口
  • 一分钟部署一个导航网站
  • QTableView 使用实例(1)
  • Cursor下利用Stagewise实现 “所见即改” 的前端开发体验~
  • Java全栈面试实战:从JVM到AI的技术演进之路
  • 数据结构--优先级队列(堆)
  • 【网络协议安全】任务15:DHCP与FTP服务全配置
  • 点击劫持:潜藏在指尖的安全陷阱
  • Python异步下载实战:asyncio + aiohttp 性能碾压同步请求
  • 算法竞赛阶段二-数据结构(37)数据结构循环链表模拟实现
  • ios UIAppearance 协议