Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Linux进程状态&&进程优先级

Linux之进程状态&&进程优先级详解

作者:阿赭ochre

文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进程优先级的方法,以及并发相关的概念和函数的返回值

一、操作系统的进程状态

1.1运行状态

1.2阻塞状态

1.3挂起

二、Linux下具体的状态

static const char * const task_state_array[] =
{
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};

子进程退出,父进程没有退出并且没有回收子进程的退出信息,就会使子进程进入僵尸进程

三、进程的优先级

3.1基本概念

3.2查看进程优先级的命令

PRI即进程的优先级,通俗点说就是程序被CPU执行的先后顺序,此值越小

进程的优先级别越高(默认80)

NI就是nice值,其表示进程可被执行的优先级的修正数值

PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice

这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行

所以,调整进程优先级,在Linux下,就是调整进程nice值 ,Linux为了保证优先级的调整范围,nice其取值范围是-20至19,一共40个级别

3.3修改进程优先级的命令

操作系统是如何根据优先级展开调度的呢?

CPU会维护一个runqueue,runqueue中有两个调度队列,他们本质上是两个指针数组,存储40个优先级所一一对应的40个队列的指针,再结合位图的思想(调度完毕的队列为0,未调度完毕的队列为1),针对不同的优先级对进程进行调度!

新加入的进程或者被进程切换下来的进程会链接到另外一个调度队列的对应的优先级的队列当中去,直到前一个调度队列全部调度完后,swap交换两个队列的指针,对另外一个未调度的队列进行调度,以此循环往复,也叫Linux内核的O(1)调度算法

3.4其他概念

3.5并发

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文