-
-
[分享]进程、线程、PCB和三态模型举例
-
发表于: 1小时前 44
-
AI模型:Deepseek
仅供参考,如有错误,欢迎批评指正!
Let's Go!
=======================我是分割线=================================
进程、线程和PCB:
以 Windows 记事本为例:
打开记事本,在任务管理器“详细信息”中看到 notepad.exe 这一行,它有:
PID:进程唯一标识。(对应 PCB / EPROCESS 中的 UniqueProcessId)
内存 - 工作集 / 提交大小:占用的物理内存和虚拟内存。(对应 PCB / EPROCESS 中的内存管理字段)
句柄:对象或实例的标识。(对应 PCB / EPROCESS 中的 ObjectTable 句柄表)
用户名:运行账户,对应安全令牌。(对应 PCB / EPROCESS 中的 Token 安全令牌)
线程:内部线程数量。(对应 PCB 中 KPROCESS 的线程列表 / 活动线程数)
这些字段其实都来自内核中的 PCB(进程控制块)。Windows 的 PCB 核心是 EPROCESS 结构,它包含 KPROCESS(调度信息)和执行信息(资源管理)。任务管理器只是把 PCB 中的关键字段提取出来展示。
这些资源都归进程所有,所以进程是资源分配和管理的基本单位。结束进程时,这些资源被整体回收。
而记事本内部有多个线程,它们共享进程的内存和句柄,但 CPU 时间片是分给线程的。你打字时,是主 UI 线程被调度到 CPU 上运行;其他线程在等待。调度器不会直接调度“记事本进程”,而是调度它里面的线程。
所以:进程是资源分配和管理的最小单位,线程是处理器分配资源的最小单位。
=======================我是分割线=================================
三态模型:
以 Windows 下的记事本为例:
运行态:你敲键盘输入文字,记事本的线程正在 CPU 上执行,把字显示到窗口里。
回到就绪态:时间片用完或被抢占,它就下 CPU,回就绪队列排队。
阻塞态:你停止输入,记事本线程在等待下一条消息,不占用 CPU。
就绪态:你又敲了一个键,系统把消息发给它,线程被唤醒,排到调度队列里等 CPU。
再次运行态:CPU 调度到它,它取出消息,把新字显示出来。
简单说就是:打字时运行 → 时间片用完或被抢占回到就绪态 → 再次被调度后运行→不打字时阻塞 → 你一按键就变就绪 → 被调度后又运行。
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。