5.进程基本概念

embedded/2025/2/1 0:46:13/

5.进程基本概念

      • **1. 进程的基本概念**
      • **2. 进程与程序的区别**
      • **3. 进程的状态**
      • **4. 进程调度**
      • **5. 进程相关命令**
      • **6. 进程创建与管理**
      • **7. 进程的应用场景**
      • **8. 练习与作业**
      • **9. 进程的地址空间**
      • **10. 进程的分类**
      • **11. 进程的并发与并行**
      • **12. 总结**


1. 进程的基本概念

  • 进程:进程是程序执行的过程,操作系统会为其分配内存资源和CPU调度。
  • PCB(Process Control Block):进程控制块,是一个结构体,用于存储进程的相关信息,如:
    • PID:进程标识符。
    • 当前工作路径。
    • umask:文件创建时的默认权限掩码。
    • 进程打开的文件列表。
    • 信号相关设置。
    • 用户ID和组ID。
    • 进程资源的上限(可通过ulimit -a查看)。

2. 进程与程序的区别

  • 程序
    • 静态的,存储在硬盘中的代码和数据的集合。
    • 没有状态变化,无法并发执行。
  • 进程
    • 动态的,程序执行的过程,包括创建、调度和消亡。
    • 有状态变化,可以并发执行。
    • 进程之间会竞争计算机资源。
    • 一个程序可以运行多次,生成多个进程;一个进程可以运行一个或多个程序。

3. 进程的状态

  • 基本状态
    • 就绪态:进程已准备好,等待CPU调度。
    • 执行态:进程正在CPU上运行。
    • 阻塞态:进程因等待某些资源(如I/O)而暂停执行。
  • Linux中的进程状态
    • 运行态(R):进程正在运行或等待运行。
    • 睡眠态(S/D)
      • 可唤醒等待态(S)。
      • 不可唤醒等待态(D)。
    • 停止态(T):进程被暂停。
    • 僵尸态(Z):进程已终止,但其资源未被完全释放。
    • 结束态:进程已终止并释放资源。

4. 进程调度

  • 调度算法:操作系统通过调度算法决定哪个进程获得CPU资源。
    • 时间片轮转(RR):每个进程轮流获得CPU时间片。
    • 先进先出(FIFO):按进程到达顺序分配CPU资源。
  • 宏观并行,微观串行:多个进程看似同时运行,但实际上是通过快速切换实现的。

5. 进程相关命令

  • ps aux:查看系统中所有进程的详细信息。
  • top:实时查看进程的CPU占用率等信息。
  • kill:向指定进程发送信号。
    • kill -2 PID:发送SIGINT信号,终止进程。
    • kill -9 PID:发送SIGKILL信号,强制终止进程。
  • killall:向指定名称的所有进程发送信号。
    • killall -9 a.out:强制终止所有名为a.out的进程。

6. 进程创建与管理

  • fork
    • 函数原型:pid_t fork(void);
    • 功能:创建一个子进程,子进程是父进程的完全拷贝。
    • 返回值:
      • 父进程中:返回子进程的PID(>0)。
      • 子进程中:返回0。
      • 失败时返回-1。
    • 特点
      • 子进程从fork之后开始执行。
      • 子进程和父进程共享代码段,但拥有独立的数据空间。
  • getpid
    • 函数原型:pid_t getpid(void);
    • 功能:获取当前进程的PID。
  • getppid
    • 函数原型:pid_t getppid(void);
    • 功能:获取当前进程的父进程PID。

7. 进程的应用场景

  • 场景1:一个进程希望复制自己,使父子进程同时执行相同的代码段(如网络服务)。
  • 场景2:一个进程需要执行一个不同的程序(通过fork + exec实现)。

8. 练习与作业

  • 练习1:设计一个程序,动态生成两个进程,分别向同一个文件中写入不同的数据,并标明进程ID和时间。
    • 示例:
      父进程 1123 16:02:10
      子进程 1124 16:02:15
      
  • 作业1:动态生成n个子进程,并打印输出各自的PID。
    • 示例:
      进程1 PID: 111
      进程2 PID: 222
      

9. 进程的地址空间

  • 虚拟地址空间
    • 0-3G:用户空间,每个进程独立。
    • 3G-4G:内核空间,所有进程共享。
  • 物理内存与虚拟内存的映射
    • 通过MMU(内存管理单元)实现虚拟地址到物理地址的映射。
    • 1页 = 4KB。

10. 进程的分类

  • 交互式进程:与用户交互的进程(如Shell)。
  • 批处理进程:执行批处理任务的进程(如Shell脚本)。
  • 守护进程:在后台运行的进程,通常用于提供服务(如httpd)。

11. 进程的并发与并行

  • 并发:多个进程交替执行,宏观上看似同时运行。
  • 并行:多个进程真正同时运行(需要多核CPU支持)。

12. 总结

进程是操作系统资源分配和调度的基本单位。通过fork可以创建子进程,父子进程共享代码段但拥有独立的数据空间。进程的状态包括就绪态、运行态、阻塞态等,操作系统通过调度算法管理进程的执行。通过pstopkill等命令可以查看和管理进程。


http://www.ppmy.cn/embedded/158490.html

相关文章

UE求职Demo开发日志#12 完善击杀获得物品逻辑和UI

1 实现思路 1.给WarehouseManager添加一个按TArray增加物品的函数 2.Enemy身上一个变量记录掉落物品,死亡时调用增加物品函数 3.同时调用UI显示 2 实现过程 2.1 在WarehouseManager里添加一个AddItemByArray函数 遍历数组调用添加函数 void UWarehouseManage…

如何利用Docker和.NET Core实现环境一致性、简化依赖管理、快速部署与扩展,同时提高资源利用率、确保安全性和生态系统支持

目录 1. 环境一致性 2. 简化依赖管理 3. 快速部署与扩展 4. 提高资源利用率 5. 确保安全性 6. 生态系统支持 总结 使用 Docker 和 .NET Core 结合,可以有效地实现环境一致性、简化依赖管理、快速部署与扩展,同时提高资源利用率、确保安全性和生态…

PyTorch 与 Python 版本对应关系

PyTorch 支持多个 Python 版本,但不同版本的 PyTorch 可能对 Python 版本有不同的要求。一般来说: PyTorch 与 Python 版本对应关系 PyTorch 版本支持的 Python 版本2.2.x3.8 - 3.122.1.x3.8 - 3.112.0.x3.8 - 3.101.13.x3.7 - 3.101.12.x3.7 - 3.101.…

【Spring MVC】如何运用应用分层思想实现简单图书管理系统前后端交互工作

前言 🌟🌟本期讲解关于SpringMVC的编程思想之应用分层~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那…

Redis复制

一、Redis复制: 1.为了解决分布式中单点故障问题,通常会把数据复制多个副本部署到其他机器上来解决故障恢复和负载均衡等需求。 2.建立复制 参与复制的redis实例划分为主节点(master)和从节点(slave),每个从…

electron打包客户端在rk3588上支持h265硬解

目录 前言 chromium是如何支持h265硬解 electron/chromium第一次编译 electron/chromium第二次编译 前言 我们的客户端程序是用electron打包的前端程序,其在rk3588主机上的linux环境运行。之前使用客户端查看h264编码的视频直播是没有问题的,但视频源…

Linux实操篇-文件目录类>/>>/echo/head/tail/ln/history

目录 传送门前言一、>、 >>概念二、>、 >>实战1. **>(输出重定向)**2. **>>(追加输出)****区别总结:** 三、echo、head、tail概念四、echo、head、tail实战1. **echo****用法**&#xff1a…

58.界面参数传递给Command C#例子 WPF例子

界面参数的传递,界面参数是如何从前台传送到后台的。 param 参数是从界面传递到命令的。这个过程通常涉及以下几个步骤: 数据绑定:界面元素(如按钮)的 Command 属性绑定到视图模型中的 RelayCommand 实例。同时&#x…