没有合适的资源?快使用搜索试试~ 我知道了~
首页进程的优先级与调度策略—Linux
文章目录1.概述1.1 进程优先级1.2 普通进程的调度1.2.1 静态优先级和基本时间片1.2.2 动态优先级和平均睡眠1.3 实时进程的调度1.4 内核空间优先级2.调度策略2.1 进程的抢占2.2 调度算法2.3 O(1)调度2.4 调度模型——机制与策略分离2.5 完全公平调度——CFS2.6 调度器总结 1.概述 进程调度中的所谓调度就是从就绪队列中选择一个进程投入CPU运行,则调度的主战场就是就绪队列,核心是调度算法,实质性的动作是进程的切换。 对于以时间片为主的调度,时钟中断就是驱动力,确保每个进程在CPU上运行一定的时间。在调度的过程中,用户还可以通过系统调用nice来调整优先
资源详情
资源评论
资源推荐

进程的优先级与调度策略进程的优先级与调度策略—Linux
文章目录文章目录1.概述1.1 进程优先级1.2 普通进程的调度1.2.1 静态优先级和基本时间片1.2.2 动态优先级和平均睡眠1.3 实时进程的
调度1.4 内核空间优先级2.调度策略2.1 进程的抢占2.2 调度算法2.3 O(1)调度2.4 调度模型——机制与策略分离2.5 完全公平调
度——CFS2.6 调度器总结
1.概述概述
进程调度中的所谓调度就是从就绪队列中选择一个进程投入CPU运行,则调度的主战场就是就绪队列,核心是调度算法,实
质性的动作是进程的切换。
对于以时间片为主的调度,时钟中断就是驱动力,确保每个进程在CPU上运行一定的时间。在调度的过程中,用户还可以通
过系统调用nice来调整优先级,比如降低自己的优先级等等。
当然也涉及进程状态的转换,新创建的进程就加入到了就绪队列中,推出的进程就从队列中删除。
从图中可以看出,所有CPU的所有进程都存放在了一个就绪队列中,那么我们从中选中一个进程进行调度的过程,实际上是
从这个队列上的一种线性查找的过程,因此其算法复杂度为O(n)。
把就绪状态的进程组成一个双向循环链表,也叫就绪队列(runqueue)。
在task_struct结构里头定义的队列的结构就是一个list_head。
循环链表的队头是init_task结构,即0号进程的PCB。
1.1 进程优先级进程优先级
在进程的调度算法中,进程优先级的重要性不言而喻,可从两个角度来看待优先级:
首先看用户态的空间,有两种优先级:
(1)普通优先级(nice):从-20~19,数据越小,优先级越高。可通过修改这个值,改变普通进程获取CPU资源的比例;
(2)调度优先级(scheduling priority):从1(最低)~99(最高)。
这是实时进程优先级,当然普通进程也有调度优先级,但是被设定为0。
1.2 普通进程的调度普通进程的调度
每个普通进程都有它自己的静态优先级。内核用从100(最高优先级)到139(最低优先级)的数表示普通进程的静态优先
级。值越大静态优先级越低。
新进程总是继承其父进程的静态优先级。不过,通过把某些“nice值”传递给系统调用nice()和setpriority(),用户可以改变自己拥
有的进程的静态优先级。
1.2.1 静态优先级和基本时间片静态优先级和基本时间片
静态优先级本质上决定了进程的基本时间片,即进程用完了以前的时间片时,系统分配给进程的时间片长度。
静态优先级和基本时间片的关系如下(基本时间片单位为ms):
若静态优先级<120 则基本时间片=(140-静态优先级)×20
若静态优先级 ≥120 则基本时间片=(140-静态优先级)×5
如上可知,静态优先级越高(其值越小),基本时间片就越长。


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论1