linux内核学习-进程调度一
来源:互联网 发布:卖家开通淘宝客条件 编辑:程序博客网 时间:2024/06/05 15:23
进程调度:
多任务系统可划分为非抢占式多任务和抢占式多任务
调度策略,I/O消耗型和处理器消耗型进程,I/O消耗型指进程大部分时间用来提交I/O请求或等待I/O请求。处理器消耗型指进程把大多数时间花费在执行代码上,没有太多I/O请求,对于这类响应要求不高的进程,调度策略是尽量降低运行频率,延长其运行时间,调度策略往往在进程响应速度和最大系统利用率之间寻求平衡。
进程优先级,动态优先级的调度方法:如果一个进程在i/o等待上耗费的时间多余其他的运行时间,明显属于I/O 消耗型进程,它的优先级被提高,如果一个进程的全部时间片一下被耗尽,该进程属于处理器消耗型,他的优先级动态降到最低。(为了响应迅速,动态提高I/O消耗型进程,降低处理器消耗型进程)
linux内核提供两组独立的优先级范围。第一种是nice值(-20~19)默认值是0.nice值越大,优先级越低。nice值决定分配给进程的时间片的长短。第二种是实时优先级,默认(0~99)任何实时进程优先级高于普通进程。
时间片:时间片太长会导致系统对交互的响应表现欠佳,时间片太短会明显增大进程切换带来的处理器消耗。linux动态提高交互式程序优先级并可以根据优先级动态分配时间片,这种动态分配的机制非常稳定且强健。且进程的时间片不必一次全部耗尽,可以分几次重复调度,当时间片耗尽时,认为进程到期了,没有时间片的进程不会再投入运行。
可执行队列:每个处理器对应一个可执行队列,cpu_rq(processor)宏用于返回给定处理器可执行队列的指针
死锁和自旋(在以后的章节详细解释)
优先级数组:struct prio_array{
int nr_active;(保存该优先级数组内可执行进程的数目)
unsigned long bitmap[BitmapSize];(优先级位图)
struct list_head queue[Max_Prio];(优先级队列)
}
unsigned long长32位,140个优先级需要5个长整型数(因为5*32=160)才能表示。一开始,所有的位都被置为0,当某一个拥有一定优先级的进程开始准备执行时,位图中相应的位就会被置为1,查找图中最高的优先级就是查找图中被设置的第一个位。其中优先级队列都是一个链表,每个链表与一个给定的优先级对应,对于给定的优先级,按轮转方式调度任务。
重新计算时间片:每个处理器维护两个优先级数组,既有活动数组又有过期数组,活动数组内的可执行队列上的进程都还有时间片剩余,而过期数组内的可执行队列上的进程都耗尽了时间片。当一个进程的时间片耗尽时,它会被移至国旗数组,但在移动前,它的时间片已经重新计算好了。(这里不是很理解,交换数组就可以重新计算时间片了?)
schedule()选定下一个进程并切换到它去执行是通过schedule()函数实现的。该函数独立于处理器运行,每一个cpu都要对下一次该运行的哪个进程作出自己的判断。首先该函数找到第一个被设置的位,该位对应着优先级最高的可执行进程。然后调度程序选择这个级别链表里的头一个进程,这也就是马上要执行的进程
- linux内核学习-进程调度一
- Linux内核学习-进程调度二
- linux内核学习----进程调度
- LINUX内核进程调度学习笔记(一)
- 深入Linux内核(一):进程调度
- linux内核之进程调度(一)
- linux内核之进程调度(一)
- linux内核--进程调度(一)
- linux内核学习笔记(六)进程调度
- Linux内核学习4:进程调度
- Linux内核进程调度
- linux内核-进程调度
- 【Linux 内核】进程调度
- Linux内核-进程调度
- Linux内核-进程调度
- Linux内核-进程调度
- Linux内核进程调度
- linux内核进程调度
- 机器学习问答
- 代理(delegate)设计模式
- selenium2java利用mysq解决向浏览器插入cookies时token过期问题
- No resource found that matches the given name 'android:Widget.Material.Button.Colored' 解决
- 南宁市二手房铁路公积金贷款流程(一)
- linux内核学习-进程调度一
- 动态规划-背包问题
- tinySLAM阅读笔记
- 性能先分析在优化
- Network in Network 网络分析
- [转][Android][Memory Leak] InputMethodManager内存泄露现象及解决
- AM335x uboot 移植
- 如何将单体应用改造为微服务
- Android学习笔记之蓝牙