news 2026/2/14 11:04:53

程序与进程:解密运行背后的奥秘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
程序与进程:解密运行背后的奥秘

进程与程序的核心概念

进程是程序执行的动态实例,包含内存分配、CPU调度等资源管理。程序是静态存储在硬盘上的代码和数据集合。

  • 区别
    • 程序永久存储,进程临时存在
    • 进程有状态变化(创建、运行、终止),程序无状态
    • 进程可并发执行,程序不可并发
    • 进程间竞争资源(CPU、内存)
    • 一个程序可生成多个进程,一个进程可执行多个程序

进程控制块(PCB)

PCB是操作系统描述进程的核心数据结构,包含以下信息:

  • PID:唯一进程标识符
  • 工作路径:进程当前目录(chdir相关)
  • umask:默认文件权限掩码(如0002
  • 文件列表:进程打开的文件描述符
  • 信号处理:异步I/O事件响应配置
  • 用户/组ID:权限控制标识
  • 资源限制:如最大打开文件数(默认1024)、栈大小(如8MB)

进程的内存与隔离性

  • 虚拟内存
    • 隔离性:进程间内存空间不可直接访问
    • 安全性:通过权限控制防止非法访问内核空间
  • 进程内存布局:包括代码段、数据段、堆、栈等

进程分类

  1. 交互式进程:需用户输入后输出(如命令行工具)
  2. 批处理进程:批量执行命令(如Shell脚本)
  3. 守护进程:后台自动运行,响应特定事件(如系统服务)

进程调度与并发

  • 调度算法
    • 时间片轮转:每个进程分配固定CPU时间
    • 短任务优先:优先执行耗时短的进程
    • CFS(完全公平调度):基于权重分配CPU时间
  • 并发本质
    • 宏观并行:多进程同时运行(时间段内)
    • 微观串行:任一时刻仅一个进程占用CPU

进程上下文切换

当CPU时间片耗尽时:

  1. 当前进程状态(PCB、寄存器值)保存到内存/硬盘
  2. 新进程状态从存储加载到内存
  3. CPU切换到新进程执行

Linux进程管理命令

  • ps aux:列出所有进程详细信息
  • top:动态查看进程资源占用
  • kill:发送信号控制进程
    • kill -9 PID:强制终止进程
    • killall -9 a.out:终止所有同名进程

进程创建函数(fork

pid_t fork(void);
  • 行为
    • 克隆父进程的地址空间和PCB,生成子进程
    • 子进程从fork()后开始执行,与父进程共享代码逻辑
  • 返回值
    • 父进程:返回子进程PID(>0)
    • 子进程:返回0
    • 失败:返回-1

获取进程ID的函数

pid_t getpid(void); // 获取当前进程PID pid_t getppid(void); // 获取父进程PID
  • 用途:明确进程关系,用于调试或资源管理

关键注意事项

  • 父子进程独立性:变量不共享,修改互不影响
  • 执行顺序:父子进程运行顺序由调度器决定,非固定
  • 资源释放:子进程终止后需由父进程回收(避免僵尸进程)

通过上述机制,操作系统实现多进程的高效管理和资源分配。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/6 7:30:09

基于微信小程序的校园食堂点餐订餐系统(毕业设计项目源码+文档)

课题摘要基于微信小程序的校园食堂点餐订餐系统,直击校园食堂 “排队耗时久、选餐信息差、取餐效率低、管理数据化不足” 的核心痛点,依托微信生态的便捷性与云端数据处理能力,构建 “线上精准点餐 线下高效取餐 全流程数据化管理” 的一体…

作者头像 李华
网站建设 2026/2/10 14:54:22

XGW-9000系列高端新能源电站边缘网关产品需求文档(PRD)

XGW-9000系列高端新能源电站边缘网关产品需求文档(PRD) 文件标识:XGW-9000-PRD-V1.0 文件状态:[√]草稿 [ ]正式发布 [ ]正在修改 当前版本:V1.0 修订记录序号版本编写/修订说明修订人修订日期备注1V1.0创建PRD文档&am…

作者头像 李华
网站建设 2026/2/13 17:13:56

多模态Agent的Docker服务编排全解析(架构师不愿透露的5大核心技巧)

第一章:多模态Agent的Docker服务编排在构建多模态Agent系统时,通常需要整合语音识别、图像处理、自然语言理解等多个异构服务。使用Docker进行服务编排,可以有效隔离各模块运行环境,并实现快速部署与横向扩展。服务容器化设计 每个…

作者头像 李华
网站建设 2026/2/7 12:51:45

网络安全培训全攻略:零基础能学会吗?前景如何?

一句话回答:能学会,且前景光明!但这取决于你选择的路是否正确。本文是价值万元的免费攻略,从“能不能学”到“如何学”,再到“学完怎么办”,一次性讲透。一、零基础,真的能学会网络安全吗&#…

作者头像 李华
网站建设 2026/2/7 0:28:25

仓颉stdx模块终极配置指南:从零开始快速上手

仓颉stdx模块终极配置指南:从零开始快速上手 【免费下载链接】cangjie-stdx-bin 仓颉编程语言 stdx 模块二进制发布仓,待迁移。 项目地址: https://gitcode.com/Cangjie/cangjie-stdx-bin 还在为仓颉编程语言中的stdx模块配置而烦恼吗&#xff1f…

作者头像 李华
网站建设 2026/2/11 7:19:11

使用开源模型微调,构建专属的测试用例生成机器人

测试用例生成的智能化变革在敏捷开发与DevOps普及的当下,软件测试面临着测试周期压缩与质量要求提升的双重压力。传统测试用例设计高度依赖工程师经验,存在效率瓶颈与覆盖盲区。大型语言模型虽能生成基础测试用例,但通用模型在领域特定业务逻…

作者头像 李华