Linux 实操串起前九章的「进程 → 内存 → 文件」全链路。
| Linux | Windows | |
|---|---|---|
| 内核类型 | 宏内核 + 模块(LKM) | 混合内核(NT) |
| 可执行格式 | ELF | PE |
| 文件系统 | ext4/xfs/btrfs | NTFS/ReFS |
| 权限模型 | POSIX(uid/gid/rwx) | ACL/SID |
| 一切皆文件 | 是(/proc、/dev) | 部分(对象管理器) |
| 线程/进程 | 轻量进程(clone) | 线程为主 |
| 源码 | 开放(GPL) | 闭源 |
共同点:都支持虚拟内存、多线程、日志文件系统、抢占式多任务;差异在内核组织、权限模型、文件抽象三处。
ps aux # 查看进程(PID、状态、内存 RSS)
top # 实时查看 CPU/内存/进程
kill -9 1234 # 发 SIGKILL 信号终止进程
cat /proc/1234/maps # 查看进程的内存映射(五大段)
free -h # 物理内存/交换区
df -h; du -sh dir # 磁盘占用
ls -li # -i 显示 inode 号
ps 的 STAT 列对应第 2 章进程状态:R(运行)、S(等待)、Z(僵尸)、T(停止)。/proc/<pid>/maps 能看到第 6 章说的各段与映射区。C 指针课程第 2 章画的「进程五大段」就是第 6 章内存管理的用户态视图:
#include <stdio.h>
#include <stdlib.h>
int g = 1; // Data 段
char *lit = "hello"; // lit 在栈,"hello" 在 .rodata
void f(void) {
int local = 2; // 栈帧局部变量 [rbp-offset]
int *p = malloc(8); // 堆
printf("%p %p %p %p\n", &g, lit, &local, p);
}
&g(Data)、lit(.rodata)、&local(栈)、p(堆)分属四段,用 cat /proc/self/maps 或看地址大小即可验证。malloc 的堆是 OS 用 brk/mmap(第 1 章)从内核要来的。C 指针的「进程内存布局」 = 操作系统的「虚拟内存 + 分段」的用户态投影。