1,运行状态R
1,理论:
在cpu中,有一个结构体:runqueue组成的一个双向链表,里面记录着对应的进程的代码和数据,存在内存中随时准备被调度,这种时候就叫做运行状态
2,why?
一个进程只要把自己放到cpu上开始运行了,是不是一直要执行完毕才把自己放下来?
不是!每一个进程都有一个叫做时间片的概念!当一个进程在cpu中跑了一段时间还没跑完,cpu就是让这个进程停止运行把cpu的功能让给下一个进程
在一个时间段内,所有进程代码都会被执行,这个概念叫做并发执行
大量的把进程从cpu上放上去,拿下来的动作叫做进程的切换
2,什么是阻塞状态?
阻塞有很多种可能,这边简单的列举几种
1,当进程需要访问外设时
有c语言基础的应该都知道c语言提供了一个关键字叫做scanf(),这个关键字可以在键盘中输入字符到程序中,这个时候你会发现如果你一直没有给程序输入数据,他的窗口就会一直卡在那里不动,程序也不会继续跑下去,这个时候就是阻塞状态,直到你在键盘中输入数据
2,操作系统内部的内存资源严重不足了
当操作系统内部内存严重不足的时候,会保证操作系统正常的情况下省出来内存空间,方式就有把内存中运行的程序暂时的存在磁盘中,有的直接杀死进程。
3,具体的Linux状态是如何维护的?
在操作系统中,一共有几种常见的状态:
R(running),运行状态
,S(sleeping),睡眠状态
,D(disk sleep),深度睡眠状态
,T(stopped),阻塞状态
,t(tracing stp),阻塞状态
,X(dead),死亡状态
,Z(zombie),僵尸状态
1,S状态
进入睡眠状态指此进程暂时不运行,我们知道cpu是有限的,在程序没进入cpu处理时候的状态叫做S状态,上面还有一个状态叫做D状态也是睡眠状态,他与S状态不同的一点是S状态可以被唤醒,而D状态不可被唤醒,不相信任何的请求。
2,t状态
目前和T的状态差不多不做细讲
3,X状态
死亡状态,一般在子进程退出时或者出问题的时候,子进程会变成死亡状态。
4,Z状态
僵尸状态,进程一般进入死完状态时,不会这么快被操作系统回收,如果父进程没有主动回收僵尸状态的进程,子进程就会一直处于Z状态,进程相关资料尤其是task_strict结构体不能被释放,这就会导致严重的内存泄露。
要是父进程比子进程先退出,子进程的父进程会改成一号进程(操作系统)
而父进程是1的进程叫做孤儿进程
该进程被系统领养
为什么要被领养?因为孤儿进程未来也会退出,也要被释放
4,优先级
优先级是什么?
优先级的对资源的访问,谁先访问,谁后访问
为什么要有优先级?
因为资源是有限的,进程是多个的,进程之间是竞争关系,操作系统必须保证大家良性竞争,确认优先级。
Linux不想过多的参与优先级的调整,在我们对应的范围内进行优先级调整 nice【-20,19】