进程概述
进程概述
概念
进程(Process)是程序关于某数据集合的一次运行活动,由程序代码、数据及进程控制块(PCB)组成。它不仅是系统资源(如内存、文件、CPU时间)的分配单元,也是并发执行的基本实体。
- 程序:静态的,就存放在磁盘里的可执行文件,如QQ.exe。
- 进程:动态的,是程序的一次执行过程,如同时执行多次QQ程序。
同一个程序多次执行会对应多个进程。
进程的组成
PCB
当一个进程被创建时,操作系统产生一个对应数据结构:PCB(Process Control Block)
进程控制块。操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会放到PCB
中。当进程结束时,操作系统会回收其PCB。
PCB中的关键字段:
PID
:当一个进程被创建时,操作系统会为该进程分配一个唯一的,不重复的身份证号。UID
:这个进程是哪个用户创建的。- 记录给进程分配了哪些资源:如分配的内存大小,正在使用哪些I/O设备,正在使用哪些文件。(用于实现操作系统对资源的管理)
- 记录进程的运行情况:CPU的使用时间,磁盘使用情况,网络流量使用情况。(用于实现操作系统对进程的控制和调度)
程序段
程序段:存储可执行代码。
代码段
数据段:包含全局变量、堆栈等运行时数据。
总结
程序段、数据段、PCB三部分组成了进程实体(进程映像)
引入进程实体的概念后,可把进程定义为:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
进程特征
进程状态和转换
创建态
进程正在被创建时,它的状态是创建态,在这个阶段操作系统会为进程分配资源,创建PCB。
就绪态
进程创建完成后,便进入就绪态,处于就绪态的进程已经具备运行条件,但此时没有空闲的CPU,就暂时不能运行。
运行态
如果一个进程此时在CPU上运行,那么这个进程处于运行态,CPU会执行该进程对应的程序。
阻塞态
在进程运行的过程中,可能会请求等待某个事件发生(如等待系统资源的分配,或者等待其他进程的响应)在这个事件发生之前,进程无法继续往下执行,此时操作系统会让这个进程下CPU
,并让他进入阻塞态。当CPU
空闲时,又会选择另一个就绪态进程上CPU
运行。
终止态
一个进程可以执行exit系统调用,请求操作系统终止该进程。此时该进程会进入终止态,操作系统会让该进程下CPU,并回收内存空间等资源,最后回收该进程的PCB。当终止进程的工作完成之后,这个进程就彻底消失了。
僵尸态
当父进程创建出的子进程,当子进程运行结束时,子进程不会被操作系统杀掉,因为父进程要用到子进程的某些信息。此时,这个子进程的状态就是僵尸态。当父进程回收子进程的结果之后,子进程在可以被操作系统杀掉。
进程状态的转换
进程的组织
在进程PCB
中,会有一个变量state
来表示进程的当前状态。比如:1表示创建态,2表示就绪态,3表示运行态。为了对同一个状态下的各个进程进行统一的管理,操作系统会将各个进程的PCB
组织起来。
链接方式
操作系统内部会维护几个链表将各个进程的PCB组织起来
- 执行链表:存放处于执行态进程的PCB。
- 就绪链表:存放处于就绪态进程的PCB。
- 阻塞队列:存放处于阻塞态进程的PCB。注:很多操作系统会根据阻塞的原因不同,在分为多个阻塞队列。
注:单核CPU在同一时刻只能有一个进程处于运行态,但是多核CPU可以同时运行多个进程。
索引方式
工作原理:将同一状态的进程组织在一个索引表中,索引表项指向相应的 PCB,不同状态对应不同的索引表。
一般会选择链表,链表插入,删除数据比较灵活。