第一章 进程的定义
摘要:本节将介绍进程的定义。进程作为构成系统的基本细胞,不仅是系统内部独立运行的实体,而且是独立竞争资源的基本实体。了解进程的本质,对于理解、描述和设计操作系统有着极为重要的意义。了解进程的活动、状态,也有利于编制复杂程序。
1.进程的基本概念
首先我们先看看进程的定义,进程是一个具有独立功能的程序关于某个数据集合的一次可以并发执行的运行活动,是处于活动状态的计算机程序。进程作为构成系统的基本细胞,不仅是系统内部独立运行的实体,而且是独立竞争资源的基本实体。了解进程的本质,对于理解、描述和设计操作系统有着极为重要的意义。了解进程的活动、状态,也有利于编制复杂程序。
1.1 进程状态和状态转换
现在我们来看看,进程在生存周期中的各种状态及状态的转换。
下面是 LINUX 系统的进程状态模型的各种状态:
1) 用户状态:进程在用户状态下运行的状态。
2) 内核状态①:进程在内核状态下运行的状态。
3) 内存中就绪:进程没有执行,但处于就绪状态,只要内核调度它,就可以执行。
4) 内存中睡眠:进程正在睡眠并且进程存储在内存中,没有被交换到 SWAP 设备。
5) 就绪且换出:进程处于就绪状态,但是必须把它换入内存,内核才能再次调度它进行运行。
6) 睡眠且换出:进程正在睡眠,且被换出内存。
7) 被抢先:进程从内核状态返回用户状态时,内核抢先于它,做了上下文切换,调度了另一个进程。原先这个进程就处于被抢先状态。
8) 创建状态:进程刚被创建。该进程存在,但既不是就绪状态,也不是睡眠状态。这个状态是除了进程 0 以外的所有进程的最初状态。
9) 僵死状态(zombie) :进程调用 exit 结束,进程不再存在,但在进程表项中仍有纪录,该纪录可由父进程收集。
现在我们从进程的创建到退出来看看进程的状态转化。需要说明的是,进程在它的生命周期里并不一定要经历所有的状态。
首先父进程通过系统调用 fork来创建子进程,调用 fork 时,子进程首先处于创建态,fork 调用为子进程配置好内核数据结构和子进程私有数据结构后,子进程就要进入就绪态 3 或 5,即在内存中就绪,或者因为内存不够,而导致在 SWAP 设备中就绪。
下载体验