第2章 · 播客 第2集

操作系统 · 进程三态转换与前趋图

🎙️ 本集播客第2集:从「哪一条进程状态转换绝对不可能发生」这个必考点切入,先把操作系统的定义、接口、五大管理功能和分类的「三个还是七个」辨清,再把进程与程序的区别、三态定义与四条转换逐条讲透,最后拿前趋图的直接制约与间接制约收尾——都是选择题的直接取材点。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
🎙️ 第2章播客 第2集
⬇ 下载本集 点击播放
阿明
这个真会骗到我。那三态之间的转换,就是我开场答错的地方,认真讲。
小雅
原文给了四条合法转换,我按它的编号念,你把「触发条件」记住,因为题目常给条件反问状态。第一条,运行态到等待态。三种触发:一个进程运行中启动了外围设备,它就变成等待外围设备传输信息的状态;进程在运行中申请资源,主存储空间及外围设备得不到满足时,变成等待资源状态;进程在运行中出现了故障,比如程序出错或主存储器读写错误,变成等待干预状态。
阿明
等待外围设备、等待资源、等待干预——三种等待。
小雅
第二条,等待态到就绪态,也是三种,跟上面一一对应:外围设备工作结束后,等待外围设备传输信息的进程结束等待;等待的资源能得到满足时,也就是另一个进程归还了资源,等待资源者就结束等待;故障排除后让等待干预的进程结束等待。然后是最要命的一句总结——任何一个结束等待的进程必须先变成就绪状态,待分配到处理器后才能运行。
阿明
「必须先变成就绪状态」,这就是为什么阻塞不能直接跳到运行。
小雅
就是这个原因,而且这句是唯一的依据,记牢。第三条,运行态到就绪态,两种触发:进程用完了一个使用处理器的时间片,强迫该进程暂时让出处理器;当有更优先权的进程要运行时,也迫使正在运行的进程让出处理器。第四条,就绪态到运行态:等待分配处理器的进程,系统按一种选定的策略从处于就绪状态的进程中选择一个,让它占用处理器,那个被选中的进程就变成了运行态。
阿明
四条都是双向配对的:运行到等待、等待到就绪、运行到就绪、就绪到运行。
小雅
对,现在把不存在的通路点掉,第二道题就是考这个。原文:进程的状态可以动态地相互转换,但阻塞状态的进程不能直接进入执行状态,就绪状态的进程不能直接进入阻塞状态。所以四选一那道题,选项 A 运行态到等待态、B 等待态到就绪态、C 就绪态到运行态,全是原文列出的合法转换;只有 D「阻塞态到运行态」是不可能直接发生的,选 D。
阿明
那为什么就绪不能直接变阻塞?直觉上好像也说得过去。
小雅
因为阻塞是「运行中」提出请求才产生的——启动设备、申请资源、出故障,这些动作都得先占着 CPU 才能做。就绪态的进程根本没在跑,它没机会去请求任何东西,自然不会阻塞。这套推理你懂了,就不用死记两条禁止转换。再补最后一句约束:在任何时刻,任何进程都处于且只能处于这其中一种状态——「且只能处于一种」,判断题会说成「可以同时处于就绪和阻塞」,错。
阿明
那所谓的第四态挂起呢?我看原文后面专门讲了一节。
小雅
先给你定位:原文说在不少系统中进程只有三种状态,但在另一些系统中又增加了一些新状态,其中最重要的是挂起状态。所以挂起不属于「三种基本状态」,这就是为什么第一题里挂起是干扰项。这里先记住它最硬的一个属性:被挂起的进程原来若处于就绪状态,此时称为挂起就绪;原来处于阻塞状态,则称为挂起阻塞,不论哪种状态,该进程都是不可能被调度而执行的。挂起的五个原因和三条属性放在第 2 集细讲。
阿明
行,那就先收着。最后是前趋图?
小雅
对,本集最后一个考点,也是必考的一道。定义先立住:前趋图是一个由结点和有向边构成的有向无循环图,通常用于表现事务之间先后顺序的制约关系。图中的每个结点可以表示一个语句、一个程序段或是一个进程,结点间的有向边表示两个结点之间存在的前趋关系。
阿明
「有向无循环」这四个字是不是也考?
小雅
考,问「前趋图是什么图」,答有向无循环图,选项里会塞「有向有环图」「无向图」来骗你。而且结点粒度那句也是考点——结点可以是语句、程序段或进程,三种都行,不是只能表示进程。
阿明
那原文那个流水线的例子怎么读?没有图我怕听不懂。
小雅
我念给你听。在计算机中经常采用流水线方式执行指令,每一条指令都可以分解为取指、分析和执行三步:取指操作记作 A i,分析操作记作 B i,执行操作记作 C i,i 取 1、2、3,代表三个任务。图里的关系是这样的——A1 没有前趋结点,称为开始结点,它不受任何制约,可以直接执行;B1 与 A2 只能在 A1 执行完成之后才能开始;而 B2 必须在 B1 与 A2 都完成之后才能开始;C3 没有后继结点,称为终止结点。
阿明
所以「没有前趋的叫开始结点、没有后继的叫终止结点」,这两个名词也可能单独问。
小雅
会。现在到关键分类:在前趋图中,执行先后顺序的制约关系可分为两种,直接制约和间接制约。直接制约通常是指一个操作中多个步骤之间的制约关系,也可以说是「同步的进程之间的制约关系」。原文的例子——A1、B1、C1 是一条指令的取指、分析、执行的三个步骤,所以它们之间的关系是直接制约。
阿明
间接制约就反过来?
小雅
对,间接制约通常是指多个操作之间相同步骤的制约关系,也可以说是「互斥的进程之间的制约关系」。原文的例子是 A1、A2、A3 之间存在间接制约——三个不同任务的同一个步骤「取指」,都要抢同一套取指部件,是互斥关系。所以第 14 题问「同一指令的取指、分析、执行三个步骤之间的制约关系属于哪种」,答案是直接制约。
阿明
我怕考场上还是会反。有没有一句话能锁死?
小雅
有,两组配对背下来:一个操作内部的不同步骤,是直接制约,对应同步;多个操作之间的相同步骤,是间接制约,对应互斥。再压缩成六个字——「纵向同步、横向互斥」:同一条指令从取指到执行是纵着走,直接制约;不同指令都来取指是横着排,间接制约。那道题四个选项里,「互斥制约」和「并行制约」这两个词原文根本没有,是编出来的假名词,先划掉,剩下直接和间接你再用这句话判。
阿明
假选项这招真阴。前趋图后面还有用吗?
小雅
有,收尾这句也考:前趋图的应用广泛,在项目开发中可用前趋图来分析哪些活动可以并行完成,同时项目管理工具 Pert 图、单代号和双代号网络图等都融入了前趋图的思想。所以看到「Pert 图源自哪个概念」,答前趋图,这是操作系统和项目管理两章的联结点。
小雅
把本集必背过一遍。操作系统是核心系统软件,对用户的接口是命令、菜单、窗口,对应用程序的接口是 API;资源管理五项是处理器、存储器、文件、设备、作业;最基本三类是批处理、分时、实时,按功能划分再加网络、分布式、嵌入式、微内核。进程是独立运行和分配资源的基本单位。三态:就绪是已分配除 CPU 外所有必要资源、只要获得处理机便能立即执行;执行是已获得处理机且单处理机下只能有一个;阻塞又叫等待或睡眠。合法转换四条,不可能的两条是阻塞态直接到运行态、就绪态直接到阻塞态。前趋图是有向无循环图,一个操作内部的步骤间是直接制约对应同步,多个操作间的相同步骤是间接制约对应互斥。
阿明
这一集把三态那张图彻底讲明白了,我现在闭着眼都能说出哪条箭头不存在。
小雅
下一集接着往下走:挂起状态的五个原因和三条属性,然后是进程互斥与同步、临界资源和临界区、四条协调准则,重头戏是 P 操作和 V 操作——信号量的正负各代表什么、生产者消费者的两个信号量初值为什么是 1 和 0,我会把代码一行一行念给你,最后收在死锁的四个必要条件和银行家算法上。那一集是本章最能拉分的地方。