自己并没有学习过计算机操作系统这门课,而计算机操作系统里有关进程状态的知识点,是一种相对抽象的概念,它对于任何一个具体的操作系统中进程状态而言都是适配的,也使得我们理解这样的概念时很难理解,并且我也不知道这门课中都具体有哪些概念,只学到了几个,而学习的重点是Linux操作系统下进程的状态,明白了具体的状态之后,再去理解操作系统这门课中的概念时就有了映射的实际实例,会好理解很多。
进程状态本身也是PCB中的一个字段。
目录
操作系统:进程状态
新建:指的是进程刚被创建好,还没有被CPU调度的状态,事实上,Linux下并没有这种状态,而操作系统中有此状态也是为了整体更加严谨,完善。
运行:进程的task_struct被CPU调度或者在CPU的runqueue(运行队列)中等待被调度,都称为运行态(另一种说法是,被CPU调度为运行态,在运行队列中是就绪态)
阻塞:等待非CPU资源就绪的状态,例1,比如要进行文件读取,在硬盘的执行队列中等待硬盘的响应,就是阻塞状态。 例2,scanf时等待键盘的输入,也是阻塞状态,其实这个的场景还是非常多的。
挂起:类似于阻塞,情景比较少见,比较极端。当内存不足时,OS会置换长期不运行的进程的代码和数据到磁盘,而内存中只留进程的PCB,此时进程被称为挂起状态。
退出:进程结束的状态。
上方的理解可能有偏差,不严谨等等问题。更清晰全面的理解需要后期不断的学习。
Linux操作系统:进程的状态
上图是Linux内核源码中进程状态的示例,这够有说服力了吧....
R 运行状态(running)
并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。对应上方的运行态。
只运行死循环即可,但是前提是,循环内不可以有打印语句。