news 2026/2/22 4:12:53

嵌入式第三十四篇——linux系统编程——进程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嵌入式第三十四篇——linux系统编程——进程

一、进程本质与核心结构

进程是程序在计算机中的执行过程,操作系统为其分配内存、CPU等资源,是资源调度和分配的基本单位。与静态存储在硬盘中的程序不同,进程具有动态性,涵盖创建、调度、运行到消亡的完整生命周期。

程序是永存的代码与数据集合,而进程是暂时的执行过程。进程会经历状态变化,支持并发执行,且多个进程之间会竞争系统资源。一个程序可多次运行生成多个进程,一个进程也可关联运行一个或多个程序。

进程控制块(PCB)是描述进程的核心结构体,包含进程运行所需的所有关键信息:

  • 进程标识符(PID):唯一标识进程的编号
  • 系统属性:当前工作路径、用户ID(UID)、组ID、umask权限掩码(默认0002)
  • 资源管理:进程打开的文件列表(默认最大1024个)、栈大小(默认8192KB即8M)等资源限制
  • 运行状态:信号处理配置、CPU寄存器状态、程序计数器(PC)等
  • 内存映射:虚拟地址与物理地址的映射关系,由内存管理单元(MMU)负责地址转换

二、内存空间与隔离机制

进程的内存空间划分为多个区域:

  • 代码段(Code):存储程序的可执行代码,权限为只读
  • 数据段(Data):存储已初始化的全局变量和静态变量
  • 堆(Heap):动态内存分配区域,由程序员通过malloc、free等函数手动管理
  • 栈(Stack):存储局部变量、函数参数和返回地址,默认大小为8M,遵循"先进后出"原则
  • 共享/映射区(Share/map):用于进程间共享数据或映射文件内容

多进程环境中,操作系统通过两大机制保障稳定性和安全性:

  • 内存隔离:借助MMU实现虚拟内存技术,每个进程拥有独立的虚拟地址空间
  • 权限控制:进程访问内核资源需通过权限校验,防止未授权操作破坏系统稳定性

三、进程分类与核心功能

根据运行特性和使用场景,进程可分为三类:

  • 交互式进程:运行过程中需要用户输入交互,如终端命令执行、图形界面应用
  • 批处理进程:通过shell脚本批量执行预设命令,无需实时用户干预
  • 守护进程:后台自动运行的进程,默认处于休眠状态,通常以"d"为后缀命名

进程的核心价值在于实现"并发"——操作系统在一个时间段内同时运行多个任务的能力。宏观上看多个进程似乎在同时运行;微观上,由于CPU资源有限,通过调度算法实现进程的快速切换。

四、进程状态与转换机制

Linux系统中进程具有以下关键状态:

  • 运行态(Running,0):分为用户运行态和内核运行态,进程正在占用CPU执行指令
  • 就绪态:进程已具备运行条件,等待CPU调度
  • 可中断睡眠状态(Interruptible,1):进程因等待资源而睡眠,可被信号唤醒
  • 不可中断睡眠状态(Uninterruptible,2):进程深度睡眠,用于关键资源等待
  • 暂停状态(Stopped):进程被暂停执行,需通过特定信号恢复
  • 终止态(3):进程执行完毕或异常终止
  • 僵死状态(Zombie):子进程消亡后,用户内存空间释放,但内核中的PCB未被回收

状态转换规则:

  • 就绪态→运行态:CPU调度器选择就绪队列中的进程分配时间片
  • 运行态→就绪态:进程时间片耗尽,或有更高优先级进程进入就绪态
  • 运行态→阻塞态(睡眠状态):进程等待资源,主动放弃CPU
  • 阻塞态→就绪态:等待的资源满足,进程被唤醒
  • 运行态→终止态:进程正常结束或异常终止
  • 终止态→僵死态:子进程先于父进程消亡,PCB未被回收

五、进程调度算法

Linux采用多种调度算法:

  • 时间片轮转:将CPU时间划分为固定长度的时间片,按顺序分配给就绪进程
  • 短任务优先:优先调度执行时间较短的进程,减少平均等待时间
  • 进程优先级:进程拥有静态优先级(PR)和动态优先级(NI)
  • 完全公平调度算法(CFS):基于"完全公平"原则,动态调整调度权重

六、进程上下文切换

当一个进程的时间片耗尽或主动放弃CPU时,操作系统会触发上下文切换:

  • 保存当前进程状态:将进程的PCB信息、CPU寄存器值、程序计数器(PC)、内存数据等缓存至硬盘
  • 释放CPU资源:当前进程从运行态转为就绪态或阻塞态
  • 加载目标进程:从硬盘读取待运行进程的缓存数据,恢复其PCB、寄存器状态

七、进程操作命令与函数

常用命令:

  • ps aux:显示系统中所有进程的详细信息
  • top:实时监控进程状态,动态刷新CPU、内存使用情况
  • kill -9 pid:强制终止指定PID的进程
  • killall -9 进程名:强制终止所有同名进程
  • ulimit -a:查看当前用户的进程资源限制

核心系统函数:

  • pid_t fork():从当前进程克隆一个子进程
  • pid_t getpid(void):获取当前进程的PID
  • pid_t getppid(void):获取当前进程的父进程PID
  • void exit(int status):C库函数,终止进程时刷新缓冲区
  • void _exit(int status):系统调用,终止进程时不刷新缓冲区
  • pid_t wait(int *status):父进程阻塞等待任意子进程退出

八、特殊进程

僵尸进程:

  • 产生原因:子进程先于父进程消亡,父进程未调用wait/waitpid回收其PCB
  • 危害:僵尸进程的PCB占用内核内存,长期积累会导致内核内存不足
  • 排查:通过ps auxtop命令查看状态为"Z"的进程

孤儿进程:

  • 产生原因:父进程先于子进程消亡,子进程失去父进程
  • 处理机制:孤儿进程会自动被init进程(PID=1)或系统指定进程收养
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/21 16:57:17

从“内存溢出”到“稳定运行”——Spark OOM的终极解决方案

一、资源配置优化:Executor内存的“黄金分割”1. 堆内内存:避免“过大或过小”的平衡术核心公式:executor.memory 单Task内存需求 executor.cores 安全系数(1.5) 案例:处理100GB数据,每个T…

作者头像 李华
网站建设 2026/2/20 10:08:17

UKB_RAP生物医学数据分析平台完整使用教程

UKB_RAP生物医学数据分析平台完整使用教程 【免费下载链接】UKB_RAP Access share reviewed code & Jupyter Notebooks for use on the UK Biobank (UKBB) Research Application Platform. Includes resources from DNAnexus webinars, online trainings and workshops. …

作者头像 李华
网站建设 2026/2/21 0:20:32

openMES开源制造执行系统:快速构建数字化工厂的完整解决方案

openMES是一款基于国际工业标准ISA88和ISA95设计的开源制造执行系统,为企业数字化转型提供强大支持。通过标准化的数据模型和灵活的模块化架构,系统能够帮助企业实现生产过程透明化、设备管理智能化、质量控制精细化,让传统制造企业轻松迈入工…

作者头像 李华
网站建设 2026/2/21 18:38:43

FF14插件自动跳过副本动画文章仿写prompt

FF14插件自动跳过副本动画文章仿写prompt 【免费下载链接】FFXIV_ACT_CutsceneSkip 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_ACT_CutsceneSkip 请基于FF14插件自动跳过副本动画的功能,创作一篇全新的技术教程文章。要求文章结构创新、内容原创&…

作者头像 李华
网站建设 2026/2/21 3:28:06

OpenBoardView:免费开源电路板查看工具的完整使用指南

OpenBoardView:免费开源电路板查看工具的完整使用指南 【免费下载链接】OpenBoardView View .brd files 项目地址: https://gitcode.com/gh_mirrors/op/OpenBoardView 还在为查看.brd电路板文件而烦恼吗?面对昂贵的专业软件和复杂的操作界面&…

作者头像 李华
网站建设 2026/2/21 18:22:35

22、绿色物联网与移动云计算融合:架构、应用与未来挑战

绿色物联网与移动云计算融合:架构、应用与未来挑战 1. 物联网 - 移动云计算(IoT - MCC)架构 如今,物联网设备在各种应用中的广泛使用产生了海量数据。这些大规模数据需要新的架构和技术来进行数据管理,包括数据捕获和处理。物联网 - 移动云计算(IoT - MCC)架构应运而生…

作者头像 李华