Linux 进程概念

[复制链接]
发表于 2026-10-3 22:39:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

进程这个概念在初学时最容易停在一句「正在运行的程序」上,但真正理解进程要往上追一层:为什么程序要进内存、操作系统怎么描述它、task_struct 里到底装了什么。这篇从冯诺依曼体系结构和存储金字塔讲起,把进程的概念、PCB 和 task_struct 串成一条完整的认知链。

一、冯诺依曼体系结构

我们常见的计算机,大部分都遵守冯诺依曼体系结构。有几条要点必须先说清:

  • 这里的「存储器」指的是内存。
  • 不考虑缓存的情况下,CPU 能且只能对内存读写,不能直接访问外设(输入/输出设备)。
  • 外设要输入或输出的数据,也只能写入内存或从内存读取。
  • 所以所有设备都只能直接和内存互动。

1.1 硬件部分

  • 存储器:就是内存,硬件级别的缓冲空间,在体系中处于核心地位。为什么要加它?因为外设和 CPU 的速度差太大——输入设备慢悠悠敲字,CPU 一瞬间算完,如果直连,CPU 只能干等。加一层内存做缓冲,整机的吞吐才跟得上。
  • 输入设备:鼠标、键盘、摄像头、麦克风,磁盘(写入文件),网卡(收数据)等。
  • 输出设备:显示器、扬声器,磁盘(保存文件),网卡(发数据)等。
  • 运算器:对输入的数据进行计算(算术运算、逻辑运算)。
  • 控制器:对计算硬件流程进行控制。运算器 + 控制器 = CPU。

这些设备都是独立个体,彼此之间用「线」连起来,分为系统总线和 I/O 总线。

1.2 存储金字塔

  • 离 CPU 越远的设备,容量越大、效率越低。
  • 存储是分级的:寄存器 → L1/L2/L3 缓存 → 内存 → 磁盘 → 网络,越往上越快越小越贵。

1.3 软件部分

一个程序要运行,必须先加载到内存里跑。原因很直接:程序代码和数据必须由 CPU 运算,而 CPU 只从内存中取数据,所以程序得先从外设调入内存——这是冯诺依曼体系结构的规定。

二、操作系统

操作系统是一款做管理的软件。「管理」要回答三件事:为什么管、管什么、怎么管。

2.1 概念

任何操作系统都包含一个基本的程序集合,称为 OS。笼统理解还包括:内核(进程管理、内存管理、文件管理、驱动管理),以及其他程序(函数库、shell 程序等)。

2.2 设计 OS 的目的

  1. 与硬件交互,管理所有软硬件资源,帮用户管好下面这些资源。
  2. 为用户程序(应用程序)提供一个良好的运行环境。

所有访问操作系统的行为,都只能通过系统调用完成。

2.3 怎么管:先描述,再组织

  • 管理者和被管理者不需要见面。
  • 管理者不见被管理者也能管好,前提是先拿到管理信息——管理的本质是通过对数据的管理,达到对人的管理。
  • 那怎么拿到数据?操作系统里的方法就是先描述、再组织:管理任何对象,最终都可以转化成对某种数据结构的增删查改。

2.4 系统调用与库函数

  • 从开发角度看,操作系统对外表现为一个整体,但会暴露部分接口供上层使用,这些由系统提供的接口叫系统调用。
  • 系统调用功能比较基础、对用户要求高,所以有些开发者对部分系统调用做封装形成库,方便上层二次开发。

三、进程到底是什么

3.1 基本概念

一个已经加载到内存中的程序,就叫进程。说得再直白点:正在运行的程序就是进程。

3.2 描述进程:PCB

任何一个进程加载到内存、形成真正的进程时,操作系统要先创建描述进程的结构体对象——PCB(进程控制块)。描述进程的 PCB 结构体和该进程对应的代码与数据合起来就叫进程:

进程 = 内核 PCB 数据结构对象(描述你这个进程的所有属性值)
     + 本身的代码和数据

PCB 由操作系统维护,代码和数据由程序员维护。

3.3 task_struct 里有什么

Linux 里描述进程的结构体叫 task_struct,它是内核的一种数据结构,被装载进 RAM 并包含着进程信息。内容大致分八类:

  • 标识符:本进程的唯一标识,用来区别其他进程(也就是 PID)。
  • 状态:任务状态、退出代码、退出信号等。
  • 优先级:相对于其他进程的优先级。
  • 程序计数器:程序中即将被执行的下一条指令的地址。
  • 内存指针:包括程序代码和相关数据的指针,以及和其他进程共享的内存块的指针。
  • 上下文数据:进程执行时处理器寄存器中的数据。
  • I/O 状态信息:包括显示的 I/O 请求、分配给进程的 I/O 设备和被进程使用的文件列表。
  • 记账信息:处理器时间总和、使用的时钟数总和、时间限定、账号等。

Linux 内核中,构造进程最基本的做法是采用双向链表——所有运行在系统里的进程都以 task_struct 链表的形式存在内核里。

四、一句话串起来

冯诺依曼体系规定了「程序必须进内存才能被 CPU 算」,操作系统为了管理这块内存里的运行实体,先用一个结构体(PCB / task_struct)把它描述出来,再用链表把它组织起来——这个被描述、被组织好的运行实体,就是进程。理解到这一层,后面学进程状态、fork、地址空间就都有抓手了。

qidao123.com企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表