news 2026/6/10 19:10:10

自学嵌入式day29,进程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自学嵌入式day29,进程

以下是针对您提供的关于进程的笔记内容的整理和解释。我将以清晰的结构帮助您逐步理解这些操作系统概念。内容基于标准的操作系统知识,确保真实可靠。

1. 进程的含义

进程是一个程序在执行过程中的动态实体,它涉及内存资源的分配和 CPU 的调度。进程的核心是PCB(Process Control Block),这是一个系统维护的结构体,用于存储进程的状态信息。PCB 包含了进程的元数据和执行上下文,确保系统能有效地管理和调度进程。

PCB 中的关键内容

PCB 存储了多种信息,包括但不限于:

  • PID(进程标识符):唯一标识进程的数字。
  • 当前工作路径(chdir):进程当前所在的目录路径。
  • umask:文件创建时的默认权限掩码,例如0002
  • 进程打开的文件列表:在文件 I/O 操作中提到的文件句柄。
  • 信号相关设置:处理异步 I/O 和信号的配置。
  • 用户 ID 和组 ID:进程的所有者和所属组,用于权限控制。
  • 进程资源的上限:通过命令ulimit -a可以显示这些上限,如内存、文件描述符等资源限制。

2. 进程与程序的区别

程序是静态的代码和数据集合,存储在硬盘中;而进程是程序执行的动态过程,包括创建、调度和消亡。关键区别包括:

  • 持久性:程序是永存的(例如,.c文件编译成a.out),进程是临时的(例如,运行a.out生成进程 PID)。
  • 状态变化:进程有状态变化(如就绪、执行、阻塞),程序没有。
  • 并发性:进程可以并发运行(宏观并行),程序本身不具备并发性。
  • 资源竞争:进程间会竞争计算机资源(如 CPU、内存),而程序只是代码。
  • 关系:一个程序可以运行多次生成多个进程(如多次运行a.out);一个进程可以运行一个或多个程序(如通过系统调用)。

3. 虚拟内存

虚拟内存是操作系统提供的一种机制,用于隔离和保护进程的内存空间:

  • 隔离性:在多进程环境中,一个进程(如进程 A)不能直接访问另一个进程(如进程 B)的内存空间,防止数据冲突。
  • 安全性:Linux 内核运行在内存中,通过权限控制限制进程对内核的访问(非任意访问)。
  • 内存分布:在 Linux 中,虚拟地址空间分为:
    • 0-3G:用户空间,供进程使用。
    • 3G-4G:内核空间,供操作系统使用。
  • 地址映射:虚拟地址通过 MMU(内存管理单元)映射到物理内存或虚拟内存,页大小通常为4K

4. 进程分类

基于功能和用途,进程可分为三类:

  • 交互式进程:用户交互式任务,如命令行工具。
  • 批处理进程:自动化任务,如 shell 脚本。
  • 守护进程:后台服务,持续运行(如系统守护进程)。

进程的主要作用是实现并发:操作系统在一个时间段内同时运行多个任务的能力。例如,一个进程可能包含多个循环(如while(1)),并发执行不同任务(如处理视频和用户输入)。

5. 进程的状态

进程的状态描述了其执行阶段:

  • 基本状态模型(三状态)
    • 就绪态:进程准备运行,等待 CPU 分配。
    • 执行态:进程正在运行。
    • 阻塞态:进程等待资源(如 I/O),处于睡眠状态。
  • Linux 扩展状态
    • 运行态:正在执行。
    • 睡眠态:等待事件。
    • 僵尸态:进程已终止,但父进程尚未回收。
    • 暂停态:被信号暂停(如SIGSTOP)。

6. 进程调度与上下文切换

由于系统中多个进程竞争有限的 CPU 资源,操作系统需要调度策略:

  • 调度算法:常见算法包括时间片轮转(每个进程运行固定时间)、短任务优先(优先调度短进程)、优先级调度、完全公平调度算法(CFS)。
  • 并发机制:宏观上并行(多个进程在时间段内同时运行),微观上串行(某一时刻只有一个进程运行)。
  • 上下文切换:当进程的时间片耗尽(如从进程 A 切换到 B),系统保存当前进程的状态(PCB、寄存器、PC 等)到内存或硬盘,并加载下一个进程的状态。这确保了进程间的无缝切换。
相关命令
  • ps aux:显示所有进程的详细信息。
  • top:Linux 的任务管理器,实时监控进程。
  • kill:发送信号给进程,如kill -9 PID强制终止指定进程。
  • killall -9 a.out:终止所有名为a.out的进程。

7. 相关函数

以下是进程操作的关键函数:

fork()
pid_t fork(void);
  • 功能:创建一个子进程。一次调用返回两次(父进程和子进程各返回一次)。执行顺序不确定(子进程或父进程先运行)。变量不共享。
  • 细节:子进程复制父进程的用户空间(0-3G)和 PCB,但 PID 不同。子进程从fork后开始执行,与父进程共享相同代码逻辑。
  • 返回值
    • 父进程:成功时返回子进程 PID(>0),失败返回-1
    • 子进程:成功时返回0,失败无返回值。
getpid()
pid_t getpid(void);
  • 功能:获取调用进程的 PID。
  • 参数:无。
  • 返回值:进程的 PID。
getppid()
pid_t getppid(void);
  • 功能:获取调用进程的父进程 PID。
  • 参数:无。
  • 返回值:父进程的 PID。

这个解释覆盖了您提供的所有关键点。如果您有特定问题或需要更深入讨论某个部分,请随时补充!

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

自动泊车车位检测及改进混合a星算法的路径规划,其中包括环境地图建模,路径规划及优化程序。 。 ...

自动泊车车位检测及改进混合a星算法的路径规划,其中包括环境地图建模,路径规划及优化程序。 。 。 平行垂直斜向都有,自动泊车的技术栈里有两个硬骨头:怎么在混乱的停车场精准找到车位,以及如何生成一条让车子能倒进去…

作者头像 李华
网站建设 2026/6/9 20:03:35

Waymo时序数据完整序列访问的3步实战指南

Waymo时序数据完整序列访问的3步实战指南 【免费下载链接】waymo-open-dataset Waymo Open Dataset 项目地址: https://gitcode.com/gh_mirrors/wa/waymo-open-dataset 如何从单帧数据快速构建完整时序序列?这是许多自动驾驶开发者在处理Waymo Open Dataset时…

作者头像 李华
网站建设 2026/6/10 15:35:37

终极指南:DBeaver SQL编辑器代码模板功能快速上手

终极指南:DBeaver SQL编辑器代码模板功能快速上手 【免费下载链接】dbeaver 项目地址: https://gitcode.com/gh_mirrors/dbe/dbeaver DBeaver作为一款强大的开源数据库管理工具,其SQL编辑器的代码模板功能为开发者提供了极大的便利。特别是模板变…

作者头像 李华
网站建设 2026/6/10 8:05:47

企业AI智能体的技术架构与实施路径:从概念到落地的关键技术实践

一、企业AI智能体的技术架构解析企业级AI智能体并非单一技术模块,而是由多层级架构协同构成的复杂系统。典型的技术架构可分为感知层、认知层、决策层与执行层,其核心能力取决于各层的技术耦合度与扩展性。1. 感知层:多模态交互入口输入模块&…

作者头像 李华
网站建设 2026/6/10 13:57:51

5分钟掌握分布式PPO:7倍加速强化学习训练终极方案

你是否正在为PPO算法训练耗时过长而苦恼?传统单环境训练模式下,一个简单的CartPole任务可能需要数小时才能收敛。本文将从性能瓶颈深度剖析入手,为你呈现一套完整的分布式训练架构设计方案,通过多进程环境并行技术实现PPO算法7倍性…

作者头像 李华
网站建设 2026/6/10 15:48:24

智能运维的“地基革命”:数据治理如何支撑大模型智能体?

岁末回望智能运维领域,大模型智能体正重塑运维格局,智能运维建设从基于小模型统计分析算法的1.0时代进入基于大、小模型融合智能体驱动的2.0时代。热潮之下,擎创科技始终保持清醒洞察:行业存在一个易被忽视的核心迷思—不少企业过…

作者头像 李华