目录
进程的概念
进程的状态
进程状态的理解
特殊的进程
本期我们将进行linux进程的学习。
进程的概念
我们或多或少都听说过进程的概念,但是在操作系统中,进程到底是什么呢?
进程就是程序的一次执行过程。
一个程序要被执行,就会先被操作系统从硬盘上加载到内存中,然后操作系统就会为这个程序创建与之对应的进程。进程可以理解为是一种软件资源,操作系统对于资源的管理都是先描述后组织,所以在进程创建的时候,操作系统会为进程创建对应的结构体我们称之为PCB(进程控制块)方便对进程进行管理(我们把进程控制块PCB也封装在了进程里),因为进程要对程序进行管理,所以进程中也会有程序的代码和数据,自此,我们把进程控制块和程序的代码和数据整体称为进程。进程控制块是进程存在的唯一标识。
操作系统对进程的操作本质上就是对进程控制块PCB的操作。
pcb称为进程控制块,在linux中进程控制块PCB就是一个task_struct(PCB和task_struct的关系就像是类和对象的关系)结构体,这个结构体中包含了什么呢?
1.进程id编号:表示当前进程的id。
2.优先级:因为CPU当面对很多进程时,根据进程的优先级按顺序执行进程。
3.程序计数器:存放下一条要执行的指令的地址。
4.内存指针:进程中包含了程序的代码和数据,内存指针就指向了这个代码和数据。
5.上下文数据:因为CPU可能会先后处理多个进程,所以一个进程可能在一次处理中没有被执行完,所以PCB中就会通过上下文数据,记录当前进程的执行状态以及下一次要执行时要执行这个进程的哪些内容。(上下文数据是保存在CPU的寄存器中的),上下文数据用于进程的切换。
总的来说:
进程=进程控制块(PCB)+程序的代码和数据,进程里面就包含了程序。
进程的状态
R(运行状态):此时的进程要么在运行,要么在运行队列中。
S(浅度睡眠状态,可中断睡眠状态):进程要完成某个任务,但是此时相应的条件不具备,此时进程就进入了S状态。睡眠状态除了被唤醒条件唤醒外,还可以被操作系统唤醒。
D(深度睡眠状态,不可中断睡眠状态):处于当前状态下的进程,只有当满足唤醒条件时,才可以被唤醒。操作系统是不会唤醒D状态的进程的。一般情况下,操作系统中的D状态的进程是很少的,当进程处于D状态时,操作系统是无法杀死的,只能通过重启服务器。
T(暂停状态):处于该状态下的进程,只能被相应的信号唤醒。
X(死亡状态):处于当前状态下的进程,操作系统会完成当前进程的资源的清理工作,资源就包括PCB和程序的代码和数据。
Z(僵尸状态):死亡状态的前一个状态,处于当前状态下的进程,会保存相应的退出信息在PCB里,最终交给父进程,父进程接收之后最终交给操作系统处理。如果处理了就变成了X状态,父进程如果没有接收子进程的退出信息,那么子进程就一直是Z状态。
进程状态的理解
我们先来看一下进程状态转换图:
解析:一般情况下,我们把R态的进程称作运行态和就绪态,把S,D,T态的进程称作阻塞态(等待态)。阻塞状态下的进程都处于等待队列中,运行态的进程都处于运行队列中,也可能正在运行,运行队列中的进程一旦被CPU调度就会被运行。
特殊的进程
僵尸进程:子进程在退出时,将退出状态信息封装在了PCB里,但是父进程没有接收子进程PCB里的退出信息,所以子进程此时就变成了僵尸进程。
孤儿进程:父进程先于子进程退出,此时父进程无法再对子进程进行处理,此时的子进程就成为了孤儿进程,但是孤儿进程不会成为僵尸进程,因为子进程的父进程退出之后,1号进程(操作系统)就成为了子进程的父进程,会去接收子进程的退出信息,所以子进程不会成为僵尸进程。
本期内容到此结束^_^