目录
前言:
本文阐述了关于进程在CPU与内存中运行的区别,有助于理解计算机系统工作原理。同时澄清一下进程运行中误区。
一、明确核心问题
进程既运行在内存中,也运行在CPU中,两者各司其职:
- 内存:存储进程的代码、数据和状态信息。
- CPU:实际执行进程的指令
二、详细说明
1、内存中的进程
内存(RAM)是进程的"居住地",存储着以下内容:
- 可执行代码:程序的指令
- 数据段:全局变量、静态变量
- 堆:动态分配的内存
- 栈:函数调用、局部变量
- 进程控制块(PCB):操作系统维护的进程元数据
当进程被创建时,操作系统会在内存中为其分配地址空间,加载可执行文件的内容。即使进程没有被CPU执行,它的这些信息也保留在内存中(除非被换出到交换空间)。
2、CPU中的执行
CPU是实际"干活"的部件,针对进程它会有如下一些操作:
- 从内存中读取指令
- 解码并执行这些指令
- 读写内存中的数据
- 通过寄存器进行高速计算
这里有一个关键点:CPU在任何时刻只能执行一个进程的指令(单核情况下),通过快速切换实现多任务。
3、协同工作流程
(1)、读取指令:CPU从内存中读取下一条指令(通过程序计数器PC确定地址)
(2)、解码:CPU解码该指令
(3)、执行:CPU执行指令,可能需要:
- 从内存读取数据
- 将结果写回内存
- 进行算术/逻辑运算
(4)、更新状态:程序计数器更新为下一条指令地址
4、理解类比
可以把这场景想象成一个图书馆
- 内存:就像图书馆的书架,存储所有书籍(程序和数据)
- CPU:就像正在阅读的人,只能同时阅读一本书的一页(执行一条指令)
- 进程切换:就像把当前阅读的书放回书架,取出另一本书继续阅读
5、常见误区澄清
(1)、进程存储在CPU中
事实:CPU不"存储"进程,它只是按指令行事。CPU寄存器会保存进程的当前执行状态,但这是临时性的
(2)、进程完全在内存中
事实:内存存储进程的静态信息,但执行必须依赖CPU,未被执行的进程可以看作完全在内存中
(3)、CPU性能越高,能同时运行的进程越多
事实:单个CPU核心在任何时刻只能执行一个线程的指令,多核CPU可以真正并行执行多个进程 "同时运行多个进程"是通过快速切换实现的假象
6、性能影响
(1)、CPU密集型进程:主要受CPU速度限制
(2)、内存密集型进程:受内存带宽和延迟影响更大
(3)、I/O密集型进程:更多时间在等待I/O而非使用CPU
7、实际观察工具
(1)、`top`/`htop`
- CPU列:显示进程占用CPU的情况
- RES列:显示进程使用的物理内存
(2)、`vmstat`
- US:用户态CPU时间
- SY:内核态CPU时间
- free:空闲内存
(3)、`pmap`
pmap -x <pid> 查看进程的内存映射
总结:
- 内存是进程的"家":长期存储所有代码和数据
- CPU是进程的"工人":实际执行指令
- 两者通过总线/缓存紧密协作
- 操作系统作为"管理者"协调内存分配和CPU调度
理解这个区别有助于:
- 合理设计程序(减少CPU/内存瓶颈)
- 有效进行系统调优
- 调试性能问题
- 理解计算机系统的基本工作原理