news 2026/7/3 5:16:05

进程概念详解:从程序到进程状态

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
进程概念详解:从程序到进程状态

1. 程序与进程

1.1 程序(Program)

程序是存放在磁盘上的指令和数据的有序集合,通常以文件形式存在。它是静态的,是代码和数据的物理载体。

1.2 进程(Process)

进程是执行一个程序所分配的资源的总称,是程序的一次执行过程。它是动态的,具有生命周期,包括创建、调度、执行和消亡。

核心区别

  • 程序是静态的代码文件,进程是动态的执行实体
  • 一个程序可以对应多个进程(如同时打开多个浏览器窗口)
  • 进程拥有系统分配的资源(内存、CPU时间片、文件描述符等)

2. 进程的内存布局

一个进程在内存中通常包含以下几个部分:

2.1 代码段(Text Segment)

  • 存放程序执行代码的区域
  • 大小在程序运行前就已确定
  • 通常是只读的,防止程序意外修改自身指令
  • 可能包含一些只读的常数变量(如字符串常量)

2.2 数据段(Data Segment)

  • 存放程序中已初始化的全局变量和静态变量
  • 在程序加载时分配并初始化

2.3 BSS段(Block Started by Symbol)

  • 存放程序中未初始化的全局变量和静态变量
  • 在程序加载时分配,但初始值全为0或空指针
  • 不占用磁盘空间,只在内存中分配

2.4 堆(Heap)

  • 用于动态内存分配的区域
  • 当调用malloccallocrealloc等函数时,从堆中分配内存
  • 当调用free函数时,将内存释放回堆
  • 堆的大小可以动态增长或缩减
  • 需要程序员手动管理内存分配和释放

2.5 栈(Stack)

  • 存放函数调用时的局部变量、函数参数、返回地址等
  • 不包括static声明的变量(这类变量在数据段中)
  • 采用"先进后出"(LIFO)原则,适合保存/恢复调用现场
  • 由系统自动管理,函数调用时压栈,返回时弹栈

注意:代码段、数据段、BSS段属于程序本身的内容,在程序加载时确定;而堆和栈是在进程运行时动态管理的。

3. 进程控制块(PCB)

进程控制块是操作系统管理进程的核心数据结构,每个进程都有一个对应的PCB。

3.1 PCB包含的主要信息:

  1. 进程标识符(PID):唯一标识一个进程
  2. 进程状态:运行、就绪、阻塞等
  3. 程序计数器:下一条要执行的指令地址
  4. CPU寄存器:进程切换时需要保存的寄存器值
  5. CPU调度信息:进程优先级、调度队列指针等
  6. 内存管理信息:基址寄存器、界限寄存器、页表等
  7. 记账信息:CPU使用时间、时间限制等
  8. I/O状态信息:分配给进程的I/O设备列表、打开文件列表等

3.2 PCB的作用:

  • 作为进程存在的唯一标志
  • 保存进程切换时的现场信息
  • 提供进程调度所需的信息
  • 实现进程间的通信和同步

4. 进程类型

4.1 交互式进程(Interactive Processes)

  • 在shell下启动,与用户交互
  • 可以在前台运行(占用终端),也可以在后台运行
  • 示例:文本编辑器、终端命令等

4.2 批处理进程(Batch Processes)

  • 与终端无关,通常被提交到作业队列中顺序执行
  • 不需要用户交互,自动完成任务
  • 示例:编译任务、数据分析任务等

4.3 守护进程(Daemon Processes)

  • 系统启动时启动,一直在后台运行
  • 不与任何终端关联,为系统或其他进程提供服务
  • 通常以"d"结尾,如httpdsshdcron
  • 生命周期长,直到系统关闭

5. 进程状态

进程在其生命周期中会经历多种状态变化:

5.1 运行态(Running)

  • 进程正在CPU上执行
  • 单核CPU任一时刻只有一个进程处于运行态

5.2 就绪态(Ready)

  • 进程已准备好运行,等待CPU调度
  • 具备运行条件,只差CPU资源

5.3 阻塞态(Blocked/Waiting)

  • 进程在等待某个事件的发生或某种系统资源
  • 可中断睡眠:可以被信号唤醒(如等待用户输入)
  • 不可中断睡眠:不能被信号唤醒(如等待磁盘I/O完成)

5.4 停止态(Stopped)

  • 进程被暂停执行,通常由信号(如SIGSTOP)引起
  • 收到继续信号(如SIGCONT)后可恢复运行
  • 常用于调试或作业控制

5.5 僵尸态(Zombie)

  • 进程已终止,但其PCB尚未被父进程回收
  • 占用系统资源(PID),但不再执行
  • 父进程应调用wait()waitpid()来回收僵尸进程

5.6 死亡态(Dead/Terminated)

  • 进程已完全终止,所有资源已被释放
  • PCB已被回收,进程不复存在

6. 进程状态转换

创建 → 就绪 ↔ 运行 → 终止 ↑ ↓ └── 阻塞
  1. 创建:新进程被创建,进入就绪态
  2. 调度:就绪态进程被调度器选中,进入运行态
  3. 时间片用完:运行态进程时间片用完,回到就绪态
  4. 等待事件:运行态进程需要等待I/O等事件,进入阻塞态
  5. 事件发生:阻塞态进程等待的事件发生,回到就绪态
  6. 终止:运行态进程执行完毕或被杀死,进入终止态
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 5:15:49

VScode远程Linux

1. 安装vscode vscode的官网下载安装包 https://code.visualstudio.com/ 2. 安装ssh插件3. ubuntu系统中安装ssh服务 sudo apt-get install openssh-server sudo service ssh restart4. 修改ssh服务设置 sudo vim /etc/ssh/sshd_config33 PermitRootLogin yes #新增34 #PermitR…

作者头像 李华
网站建设 2026/7/3 5:09:58

国产军工软件工厂的正确打开方式-四大典型踩坑总结

这两年,“软件工厂” 成了军工与信创圈的顶流概念。从科研院所到地方国企,纷纷砸钱上马 DevSecOps 平台、接入国产大模型、搭起可视化大屏,仿佛一夜之间就能对标洛马。可热闹褪去,真实落地状况远比想象刺眼:有的平台斥…

作者头像 李华
网站建设 2026/7/3 5:06:50

智驾工程师出路:能力翻译与可迁移工程价值

1. 这个问题背后的真实焦虑:不是“要不要转行”,而是“能力坐标系正在失效”“现在还从事智驾/自动驾驶的工程师的出路在哪里?”——这句话最近在多个技术社区、内推群和咖啡闲聊中高频出现,但很少有人点破:它根本不是…

作者头像 李华
网站建设 2026/7/3 5:06:06

ML生产化实战:从Notebook到高可用模型服务的17个关键细节

1. 项目概述:这不是“部署”,是让模型在真实世界里活下来“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题里藏着一个被太多人轻描淡写、却天天在后台崩盘的真相:Notebook不是起点,生产环境也…

作者头像 李华
网站建设 2026/7/3 5:02:01

鼠标性能终极测试:如何用免费开源工具精准评估你的鼠标表现

鼠标性能终极测试:如何用免费开源工具精准评估你的鼠标表现 【免费下载链接】MouseTester 项目地址: https://gitcode.com/gh_mirrors/mou/MouseTester 你是否在游戏中总感觉鼠标"飘"得厉害?或者工作时鼠标指针不够精准?别…

作者头像 李华