二、三态模型:在多道程序系统中,进程在处理器上交替运行,状态也不断地发生变化。进程一般有3种基本状态:运行、就绪和阻塞。
(1)运行:当一个进程在处理器上运行时,则称该进程处于运行状态(进程占用CPU,并在CPU上运行)。处于此状态的进程的数目小于等于处理器的数目,对于单处理器系统,处于运行状态的进程只有一个。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
(2)就绪:当一个进程获得了除处理器以外的一切所需资源,一旦得到处理器即可运行,则称此进程处于就绪状态。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。
(3)阻塞:也称为等待或睡眠状态,一个进程正在等待某一事件发生(例如请求I/O而等待I/O完成等)而暂时停止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。
三、五态模型:对于一个实际的系统,进程的状态及其转换更为复杂。引入新建态和终止态构成了进程的五态模型。
新建态:对应于进程刚刚被创建时没有被提交的状态,并等待系统完成创建进程的所有必要信息。进程正在创建过程中,还不能运行。操作系统在创建状态要进行的工作包括分配和建立进程控制块表项、建立资源表格(如打开文件表)并分配资源、加载程序并建立地址空间表等。创建进程时分为两个阶段,第一个阶段为一个新进程创建必要的管理信息,第二个阶段让该进程进入就绪状态。由于有了新建态,操作系统往往可以根据系统的性能和主存容量的限制推迟新建态进程的提交。
终止态:进程已结束运行,回收除进程控制块之外的其他资源,并让其他进程从进程控制块中收集有关信息(如记帐和将退出代码传递给父进程)。类似的,进程的终止也可分为两个阶段,第一个阶段等待操作系统进行善后处理,第二个阶段释放主存。
四、由于进程的不断创建,系统资源特别是主存资源已不能满足所有进程运行的要求。这时,就必须将某些进程挂起,放到磁盘对换区,暂时不参加调度,以平衡系统负载;进程挂起的原因可能是系统故障,或者是用户调试程序,也可能是需要检查问题。
活跃就绪:是指进程在主存并且可被调度的状态。
静止就绪(挂起就绪):是指进程被对换到辅存时的就绪状态,是不能被直接调度的状态,只有当主存中没有活跃就绪态进程,或者是挂起就绪态进程具有更高的优先级,系统将把挂起就绪态进程调回主存并转换为活跃就绪。
活跃阻塞:是指进程已在主存,一旦等待的事件产生便进入活跃就绪状态。
静止阻塞:是指进程对换到辅存时的阻塞状态,一旦等待的事件产生便进入静止就绪状态。
五、在一些系统中,又增加了一些新状态:
可运行状态:运行状态和就绪状态的合并,表示进程正在运行或准备运行,Linux 中使用TASK_RUNNING 宏表示可运行状态。标志:R
浅度睡眠状态(可中断):进程正在睡眠(被阻塞),等待资源的到来是唤醒,也可以通过其他进程信号或时钟中断唤醒,进入运行队列。Linux 中使用TASK_INTERRUPTIBLE 宏表示此状态。标志:S
深度睡眠状态(不可中断):其和浅度睡眠基本类似,但不可被其他进程信号或时钟中断唤醒。Linux 中使用TASK_UNINTERRUPTIBLE 宏表示此状态。标志:D
暂停状态:进程暂停执行接受某种处理。Linux 使用TASK_STOPPED 宏表示此状态。标志:T
僵死状态:进程已经结束但未释放进程控制块(PCB),Linux 使用TASK_ZOMBIE 宏表示此状态。标志:Z
挂起状态:在执行状态的进程通过挂起即可进入就绪状态,标志:X
六、 进程查看PS
①USER:该进程是由哪个用户产生的。
②PID:进程的ID号。PPID:父进程
③%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源
④&MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源
⑤VSZ:该进程占用虚拟内存的大小,单位KB
⑥RSS:该进程占用实际物理内存的大小,单位KB
⑦TTY:该进程是在哪个终端运行的。其中的tty1-tty7代表本地控制台终端,tty1-tty67是本地的字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端。
⑧STAT:进程状态。常见的状态有:R—运行;S-睡眠;T—停止状态;s-包含子进程;+—位于后台。
⑨START,TIME:进程启动时间和占用CPU的运算时间。
⑩COMMAND:产生此进程的命令名。
ProcessState p_stat; /*进程当前状态*/
int p_flag; /*进程标志位,可以将多个状态组合*/
int p_pri; /*进程优先数*/
int p_cpu; /*cpu值,用于计算p_pri*/
p_nice; /*用于计算进程动态优先数*/
p_sig; /*接受软中断信号*/
p_uid; /*进程的用户标识*/
p_pid; /*进程标识符*/
p_ppid; /*父进程的标识符*/
p_time; /*进程在内存或者外村的驻留时间*/
p_addr; /*User区的地址(现代:p_ubptb,p_regin)*/
p_size; /*User区的大小*/
p_ttyp; /*进程的相关终端*/
p_textp; /*指向共享正文段表*/
p_wchan; /*进程等待原因*/
七、进程标志位:
ProcessFlag:
SLOAD=0X1; /*进程图像在内存中*/
SSYS=0X2; /*系统进程图像,不允许被换出*/
SLOCK=0X4; /*含有该标志的进程图像暂时不允许被换出*/
SSWAP=0X8; /*该进程被创建时图像就在交换区上*/
STRC=0X10; /*父子进程跟踪标志,UNIX V6++未使用到*/
STWED=0X20; /*父子进程跟踪标志,UNIX V6++未使用到*/
八、进程状态:
ProcessState:
SNULL=0; /*未初始化空状态*/
SSLEEP=1; /*高优先权睡眠*/
SWAIT=2; /*低优先权睡眠*/
SRUN=3; /*运行,就绪状态*/
SIDL=4; /*进程创建时的中间状态*/
SZOME=5; /*进程终止时的中间状态*/
SSTOP=6; /*进程正被跟踪*/