1. 进程概念
进程(作业)是执行中的程序,这是一种非正式的说法。因为进程不只是程序代码。
1.1. 进程结构
-
代码段
(文本段):通过程序计数器的值和处理器寄存器的内容来表示。 -
数据段
:包含全局变量 -
堆栈段
:包括临时数据,如函数参数、返回地址和局部变量。 - 可能包括
堆(heap)
:在运行期间动态分配的内存。
Linux中的进程表示
Linux中的进程控制块
是通过C结构
task_struct来表示的。这个结构包含了表示一个进程所需要的所有信息,包括进程的状态
、调度和内存管理信息
、打开文件列表
和指向父进程和所有子进程的指针
。task_struct的这些字段包括:
pid_t pid; //进程ID
long state; //进程状态
unsigned int time_slice; //调度信息
struct files_struct *files; //打开文件列表
struct mm_struct *mm; //进程地址空间
2. 进程状态
- 新的:进程正在被创建(进程实际上是一个数据结构代码)。
- 运行:指令正在被执行(执行创建的代码)。
- 等待:进程等待某个事件的发生(如I/O完成或收到信号)。
- 就绪:进程等待分配处理器。
- 终止:进程完成执行。
3. 进程控制块
每个进程在操作系统内用进程控制块
(Process Control Block,PCB
,也称任务控制块
)来表示。
3.1 进程控制块结构
-
进程状态
:新的、就绪、运行、等待、停止。 -
程序计数器
:计数器表示进程要执行的下个指令的地址。 -
CPU寄存器
:根据计算机体系结构的不同,寄存器的数量和类型也不同。包括累加器、索引寄存器、堆栈指针、通用寄存器和其他条件码信息寄存器。这些状态信息在出现中断时也需要保存。 -
CPU调度信息
:包括进程优先级、调度队列的指针和其他调度参数。
- 内存管理信息:包括基址和界限寄存器的值、页表或段表。
- 记账信息:包括CPU时间、实际使用时间、时间界限、记账数据、作业或进程数量等。
- I/O状态信息:包含分配给进程的I/O设备列表、打开的文件列表等。