【架构师通关】理发店排队 + 车库停车,大白话秒懂“进程状态模型”与“PV操作
兄弟们操作系统的进程管理一直是软考里最让人头疼的“硬骨头” 。什么“阻塞”、“挂起”、“信号量”、“PV操作”听着就像天书 。但今天飞哥绝不跟你拽学术名词咱们就通过“去理发店剪个头” ♂️ 和“去商场地下车库停车” 这两个大家再熟悉不过的生活场景把这两大高频考点一次性炖烂、嚼碎一、♂️ 理发店里的“进程三态模型”想象一下你周末去一家非常火爆的理发店。店里只有一个最牛的Tony老师CPU但排队剪头发的人进程有十几个。如果大家都不排队一窝蜂冲上去抢Tony老师手里的剪刀场面是不是就失控了操作系统也是一样。为了让大家都能按顺序理发操作系统必须给每个顾客贴上不同的“状态标签” ️。最经典的“进程三态模型”其实就是顾客在理发店里的三种基本状态运行态Running场景你正坐在理发椅上Tony老师正在给你咔嚓咔嚓剪头发 ✂️。本质进程拿到了CPU正在执行代码。就绪态Ready场景你洗完头坐在店里的沙发上等 ️。你什么都不缺万事俱备就缺一个空闲的Tony老师只要叫到你的号马上就能坐上去剪。本质进程具备了运行的所有条件只差分配到CPU时间。等待态/阻塞态Blocked/Waiting场景你刚坐上理发椅突然发现没带手机付钱 只能赶紧给老婆发微信求转账。这时候Tony老师肯定不能干等你啊于是让你去店里的角落蹲着等进入阻塞态他先给下一个人剪。就算Tony老师现在有空你老婆钱没转过来你也剪不了本质进程正在等待某个事件如等待网络、等待读取硬盘等即使现在给它CPU也跑不下去。⚠️这里有一个超级高频的考试陷阱如果老婆把钱转给你了你是直接冲上去抢过Tony老师的剪刀吗绝对不行♂️ 阻塞态等到钱之后必须乖乖回沙发重新排队进入就绪态核心骨架图三态转换① 叫号 (调度)② 剪完重排 (时间片完)③ 发现没钱 (等待事件)④ 钱到了 (事件发生)就绪态 (Ready)坐在沙发上运行态 (Running)正在剪头发阻塞态 (Blocked)蹲角落等钱二、 软考必考的“五态模型”到底把你赶去了哪注意了架构师考试里最爱考的“五态模型”并不是加了“新建”和“终止”而是引入了“挂起Suspend”这个概念这五个状态分别是运行、活跃就绪、静止就绪、活跃阻塞、静止阻塞。听起来是不是像念经别慌咱们继续在理发店里待着 。引入“挂起”的唯一原因就是店里的沙发内存坐不下了只能把一部分人赶到**店门外的大马路上外存/磁盘**去等 ♂️。活跃 在店里面在内存里静止 在店门外被挂起到磁盘上️活跃就绪Active Ready坐在店里的沙发上等Tony老师。随时可以叫号上去剪在内存中具备运行条件。静止就绪Static Ready店里沙发满了老板让你去店门外马路上站着排队被挂起。你得先被老板叫回店里激活才能被Tony老师服务在磁盘中具备运行条件等待调入内存。活跃阻塞Active Blocked蹲在店里的角落等老婆微信转账在内存中等资源。静止阻塞Static Blocked你不仅没钱还因为太占地方被老板赶到了店门外马路上去等钱 在磁盘中等资源。运行Running坐在椅子上剪头发 ✂️。核心骨架图带挂起的五态转换【理发店内】活跃状态 (内存)【店外马路】静止 / 挂起状态 (外存)① 叫号(调度)② 时间片完③ 没带钱(等待)④ 钱到了(事件发生)挂起(赶出门)激活(叫进店)挂起(赶出门)激活(叫进店)⑤ 门外收到钱静止就绪 (Static Ready)站在门外排队静止阻塞 (Static Blocked)站在门外等钱活跃就绪 (Active Ready)坐在沙发上运行 (Running)正在理发活跃阻塞 (Active Blocked)蹲在角落等三、️ 进阶Boss用“地下车库”秒懂PV操作与信号量如果你搞懂了上面的进程状态流转那接下来这个经常让人在下午案例题里丢分的“PV操作”咱们也能顺手秒杀理发店的例子解决的是“状态流转”但如果遇到多个同类资源我们换一个大家周末都会遇到的绝佳场景去商场地下停车场停车️。商场的地下停车场车位是有限的这就是操作系统里的“临界资源”。如果100辆车同时往只有50个车位的车库里开里面绝对会堵成一锅粥。怎么管理呢商场会在门口设一个自动抬杆机和余位显示牌信号量 S进场叫“拿卡P操作” 出场叫“还卡V操作” 。把“信号量 S”想象成停车场门口显示牌上的“空闲车位数量”S 0表示现在车库里还有几个空车位。S 0表示车位刚刚停满一个空位都没了。S 0注意了负数的绝对值表示门口起落杆外有几辆车正在排队等车位比如 S -2表示里面全满门外还有2辆车在排队 。P操作Passeren进场拿卡 / 申请资源你开到门口按一下机器拿一张停车卡同时显示牌上的空位减一S S - 1。如果减完之后S 0说明你拿到卡了抬杆放行你开进去停车进程继续运行。如果减完之后S 0说明车位早满了机器根本不吐卡你只能在杆外踩着刹车苦等进程进入阻塞态V操作Vrijgeven出场还卡 / 释放资源你逛完商场开出来了在出口把停车卡还给收费员同时显示牌上的空位加一S S 1。你把卡还回去之后如果S 0注意这里是小于等于0因为你刚加了1说明加之前肯定是负数这代表你刚才在里面停的时候门外一直有车在苦苦排队收费员拿到你这张卡马上用对讲机喊入口保安“刚空出一个车位放门外排队的第一辆车进来” ️唤醒一个阻塞态的进程让它进入就绪态。核心骨架图PV操作逻辑V操作 (出场还卡 / 释放资源)是 (有人在门外排队)否 (没人排队)S S 1S 0 ?保安放一辆排队的车进来(叫醒别人)直接开走(继续执行)P操作 (进场拿卡 / 申请资源)是 (车位满了)否 (拿到卡了)S S - 1S 0 ?在门外排队等待(自我阻塞)抬杆进场(继续执行)四、 飞哥总结考前必背的通关口诀为了帮大家在考场上秒杀选择题和案例题飞哥把这两大块核心考点浓缩成了下面的“避坑指南”建议直接截图保存 进程状态避坑要点活跃 vs 静止在店里内存就是活跃被踢到门外外存/硬盘就是静止挂起。就绪 vs 阻塞万事俱备就差Tony老师CPU就是就绪缺别的东西等钱、等网速就是阻塞。门外的逆袭如果在门外等钱静止阻塞钱突然到了你不能直接冲进店你只会变成在门外排队静止就绪只有等老板叫你进店激活才能变成坐在沙发上等活跃就绪。 PV操作避坑要点P是自己等P操作进场拿卡如果失败了是把自己挡在门外“阻塞”了等车位。V是叫醒别人V操作出场还卡是在还车位如果发现有人在等顺手“唤醒”门外的一辆车让他进场。万能口诀⭐P减1小于0就等V加1小于等于0就叫醒。怎么样这下子操作系统最硬的两块骨头是不是变得像看段子一样轻松了赶快收藏这篇笔记咱们考场上见
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2479759.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!