第一部分:进程基本概念

1. 程序与进程的区别

· 程序:存放在外存(如硬盘)中的一段代码的集合,是静态的、被动的实体。
· 进程:是程序动态执行的过程,包括创建、调度和消亡,是操作系统进行资源分配和调度的基本单位。

第二部分:进程管理相关命令

1. 查看进程信息

· top:动态显示进程信息,按CPU占用率排序展示。
· ps -ef:查看系统中所有进程的详细信息。
· ps aux:查看进程的运行状态和资源占用情况。
· pstree:以树形结构显示进程间的父子关系。

2. 关键标识符

· PID:进程ID号,用于唯一区分每个进程。
· PPID:父进程的PID号,标识创建该进程的父进程。

3. 进程控制命令

· kill:向指定进程发送信号终止任务,配合 -9 选项强制终止。
· killall:通过进程名终止所有同名进程。

4. 前后台任务管理

· 后台执行:在命令末尾添加 & 可将任务放入后台执行。
· jobs:查看当前终端下的后台任务列表。
· fg:将后台任务调至前台继续执行。
· ps:查看当前终端下的前后台任务状态。

5. 进程优先级管理

· nice:在启动进程时设置优先级。
· renice:调整已运行进程的优先级。

第三部分:进程的内存布局

1. 虚拟内存空间(32位系统,0~4GB)
进程的虚拟内存空间划分为多个区域:

· 文本段:存放程序指令(机器码),为只读区域。
· 数据段:存放已初始化的全局变量和静态变量。
· BSS段:存放未初始化的全局变量和静态变量,系统自动初始化为0。
· 字符串常量区:存放字符串字面量,内容只读。
· 堆区:动态分配的内存区域,由程序员手动管理。
· 栈区:存放局部变量、函数参数和函数调用信息,由编译器自动管理。

2. 进程空间的特性

· 每个进程拥有独立的虚拟地址空间,相互隔离,互不干扰。
· 多个进程共享同一套0~4GB的虚拟内存空间映射机制,通过MMU映射到不同的物理内存。
· 操作系统通过分时复用技术,让多个进程交替使用CPU资源。

第四部分:进程调度与时间片

1. 时间片概念
CPU在每个进程上连续执行的一小段时间称为时间片。时间片用完后,操作系统会切换执行下一个进程。

2. 宏观并行与微观串行
多个进程看似在同时运行(宏观并行),实际上CPU在同一时刻只能执行一个进程,通过快速轮换实现并发(微观串行)。

3. 常见进程调度算法

· 先来先服务:按照进程到达的顺序依次执行,简单但效率较低。
· 高优先级调度:优先级高的进程优先获得CPU资源。
· 时间片轮转:每个进程轮流获得固定时间片,公平且响应快。
· 多级队列反馈:设置多个优先级队列,进程可在队列间动态移动,兼顾实时性和公平性。
· 负载均衡:在多核系统中,将进程分配到不同的CPU核心上,平衡负载。

第五部分:进程状态与状态转换

1. 就绪态:进程已具备运行条件,等待CPU调度分配时间片。

2. 运行态:进程正在CPU上执行指令。

3. 可唤醒等待态(可中断睡眠):进程因等待某资源或事件而挂起,等待过程中可被信号或事件唤醒。

4. 不可唤醒等待态(不可中断睡眠):进程等待资源时无法被信号唤醒,通常用于等待磁盘I/O等关键操作完成。

5. 停止态:进程因收到暂停信号而停止执行,可通过恢复信号继续运行。

6. 僵尸态:进程已执行结束,但其进程空间尚未被父进程或系统回收,仅保留进程描述符(等待回收状态)。

7. 结束态:进程执行结束且空间已被系统回收的状态。

第六部分:进程创建相关函数接口

fork 函数

· 用于创建一个新的进程(子进程)。
· 子进程是父进程的副本,继承父进程的数据段、代码段和堆栈等资源。
· fork调用一次,返回两次:在父进程中返回子进程的PID,在子进程中返回0。
· 若创建失败则返回-1。

进程终止相关函数

· exit:正常终止当前进程,会刷新缓冲区并执行清理操作。
· _exit:立即终止进程,不刷新缓冲区。

进程等待相关函数

· wait:父进程调用后阻塞,等待任意子进程结束并回收其状态信息。
· waitpid:可指定等待特定子进程,提供更多控制选项。

获取进程标识符

· getpid:获取当前进程自身的PID。
· getppid:获取当前进程的父进程PID。

第七部分:关键概念辨析

程序 vs 进程

· 程序是静态的、存放在外存的代码集合;进程是程序动态执行的过程,是操作系统调度的基本单位。

僵尸态 vs 结束态

· 僵尸态:进程已结束但空间未被回收,处于等待回收状态;结束态:进程空间已被系统回收,完全终止。

可唤醒等待态 vs 不可唤醒等待态

· 可唤醒等待态可被信号唤醒;不可唤醒等待态只能等待指定资源完成,无法被信号中断。

fork 与 exec 的关系

· fork用于创建新进程的副本;exec系列函数用于在当前进程中加载并执行新的程序映像(替换原有代码和数据)。

前台进程 vs 后台进程

· 前台进程:占用终端输入输出,用户可直接交互;后台进程:不占用终端输入,在后台运行,适合长时间任务。

 

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐