操作系统 - 进程
进程
进程基本上是一个正在执行的程序。 进程的执行必须按顺序进行。
进程被定义为一个实体,它代表了系统中要实现的基本工作单元。
简单来说,我们将计算机程序写在一个文本文件中,当我们执行这个程序时,它就变成了一个进程,执行程序中提到的所有任务。
当一个程序被加载到内存中成为一个进程时,它可以分为四个部分——栈、堆、文本和数据。 下图显示了主内存中进程的简化布局 −
S.N. | 组件 & 描述 |
---|---|
1 | Stack 进程栈包含方法/函数参数、返回地址和局部变量等临时数据。 |
2 | Heap 这是在进程运行时动态分配的内存。 |
3 | Text 这包括由程序计数器的值和处理器寄存器的内容表示的当前活动。 |
4 | Data 此部分包含全局变量和静态变量。 |
程序
程序是一段代码,可以是单行或数百万行。 计算机程序通常由计算机程序员以编程语言编写。 例如,这是一个用 C 编程语言编写的简单程序 −
#include <stdio.h> int main() { printf("Hello, World! \n"); return 0; }
计算机程序是由计算机执行时执行特定任务的指令的集合。 当我们将程序与进程进行比较时,我们可以得出结论,进程是计算机程序的动态实例。
执行定义明确的任务的计算机程序的一部分称为算法。 计算机程序、库和相关数据的集合称为软件。
进程生命周期
当一个进程执行时,它会经历不同的状态。 这些阶段在不同的操作系统中可能会有所不同,而且这些状态的名称也不规范。
一般来说,一个进程一次可以有以下五种状态之一。
S.N. | 状态 & 描述 |
---|---|
1 |
Start 这是首次启动/创建进程时的初始状态。 |
2 |
Ready 进程正在等待分配给处理器。 就绪进程正在等待操作系统分配给它们的处理器,以便它们可以运行。 进程可能在 Start 状态之后或在运行时进入此状态,但被调度程序中断以将 CPU 分配给其他进程。 |
3 | Running 一旦操作系统调度程序将进程分配给处理器,进程状态将设置为运行,处理器执行其指令。 |
4 | Waiting 如果进程需要等待资源,例如等待用户输入或等待文件可用,则进入等待状态。 |
5 | Terminated or Exit 一旦进程完成执行,或者被操作系统终止,它就会进入终止状态,等待从主内存中删除。 |
进程控制块 (PCB)
进程控制块是操作系统为每个进程维护的数据结构。 PCB 由整数进程 ID (PID) 标识。 PCB 保留了跟踪过程所需的所有信息,如下表所示 −
S.N. | 信息 & 描述 |
---|---|
1 | Process State 进程的当前状态,即它是否准备好、正在运行、等待或其他。 |
2 | Process privileges 这是允许/禁止访问系统资源所必需的。 |
3 | Process ID 操作系统中每个进程的唯一标识。 |
4 | Pointer 指向父进程的指针。 |
5 | Program Counter 程序计数器是一个指向该进程要执行的下一条指令地址的指针。 |
6 | CPU registers 需要存储进程以执行运行状态的各种 CPU 寄存器。 |
7 | CPU Scheduling Information 进程优先级和调度进程所需的其他调度信息。 |
8 | Memory management information 这包括页表、内存限制、段表等信息,具体取决于操作系统使用的内存。 |
9 | Accounting information 这包括用于进程执行的 CPU 量、时间限制、执行 ID 等。 |
10 | IO status information 这包括分配给进程的 I/O 设备列表。 |
PCB的架构完全依赖于操作系统,在不同的操作系统中可能包含不同的信息。 这是PCB的简化图 −
PCB 在进程的整个生命周期内都会被维护,一旦进程终止就会被删除。