☰
Linux 学习笔记(十四):从冯诺依曼到进程——操作系统是如何“管”程序的?
2026/10/23 5:05:27 网站建设 项目流程

一、 底层基石:冯诺依曼体系

现代计算机大多遵循冯诺依曼体系。核心定律:所有输入设备的数据必须先加载到内存;CPU 只

能读写内存,不能直接访问外设;输出设备也只能从内存中拿数据。

这也是为什么内存(RAM)的速度和大小对电脑性能影响巨大。

二、 操作系统的“管理学”

操作系统(OS)负责管理底层的软硬件资源,为上层的应用程序提供运行环境。

它是如何管理的?核心思想:先描述,再组织。

  • 描述:用结构体(struct)将硬件或程序的信息封装起来。

  • 组织:用链表等数据结构把结构体串联起来。

  • OS 不直接让用户操作硬件,而是提供系统调用接口,如read、write,供上层封装成库函数使用。

三、 认识进程(Process)

什么是进程?
课本概念:程序的一个执行实例。

底层真相:进程 = 内核数据结构(PCB) + 程序的代码和数据。
在 Linux 中,这个 PCB 结构体叫做task_struct。它包含了进程的所有属性,如:PID(进程标识符)、状态、优先级、内存指针等。

四、 实战:获取和查看进程

每个进程都有独特的身份证号(PID)和父进程 ID(PPID)。

1. 代码获取:

#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { printf("当前进程 PID: %d\n", getpid()); printf("父进程 PPID: %d\n", getppid()); return 0; }

2. 命令行查看:

# 查看系统所有进程(配合管道过滤) ps aux | grep 进程名 # Linux 的特色:/proc 目录下记录了所有运行中进程的信息 # 进入 /proc/进程PID 目录,能看到该进程的所有底层数据 ls /proc/1

总结

进程不只是一个跑起来的程序,它在操作系统眼里是一个拥有完整档案(PCB)的实体。通过getpid()和ps命令,我们可以轻松洞悉进程的身份。

自我实战操作

实战 1:获取自己的 PID(代码实战)
cd ~/linux_study mkdir proc_test cd proc_test vim getpid.c

(输入以下代码,保存退出)

#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { // getpid() 获取当前进程的 PID // getppid() 获取父进程的 ID printf("我的 PID 是: %d\n", getpid()); printf("我爸爸的 PPID 是: %d\n", getppid()); while(1) { sleep(1); // 死循环卡住,方便我们查看 } return 0; }
实战 2:编译、运行与查看
# 1. 编译 gcc getpid.c -o getpid # 2. 运行(注意:程序会卡住,这就代表它作为一个进程正在后台/前台运行) ./getpid

(此时屏幕上打印了 PID。不要按 Ctrl+C,新开一个 Xshell 窗口,或者把当前终端挂起 Ctrl+Z 然后 bg 放后台)

在新终端里查看这个进程:

# 1. 用 ps 命令配合管道符(复习前面学的)查找 ps aux | grep getpid # 2. 去系统 /proc 目录下看看它的真面目 ls -l /proc/你的PID # 把"你的PID"换成刚才程序打印出来的数字 # 3. 用 top 命令动态查看 top -p 你的PID

(复习:在ps aux的结果中,第二列就是 PID,第三列是 PPID。你会惊奇的发现,你运行的这个程序的爸爸(PPID),其实就是你当前所在的 Bash 终端的 PID!)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询