摘要:
内容:(1):从schedule()开始,几种不同类型的进程之间的调度选择;在相同类型的进程之间的调度选择算法(2):从CPU的IP值的变化上,说明在switch_to宏执行后,执行分析(3):堆栈发生切换位置,在切换堆栈前后,current_thread_info变化(4):地址空间发生切换,解释地址空间的切换不会影响后续切换代码的执行(5):current宏所代表的进程发生变化的源码位置(6):任务状态段中关于内核堆栈的信息发生变化源码位置1,从schedule()开始,说明几种不同类型的进程之间的调度选择;在相同类型的进程之间的调度选择算法。在schedule()函数中,首先禁止抢占,获 阅读全文
摘要:
调度什么时候发生?即:schedule()函数什么时候被调用?调度的发生有两种方式:1、主动式在内核中直接调用schedule()。当进程需要等待资源等而暂时停止运行时,会把状态置于挂起(睡眠),并主动请求调度,让出CPU。主动放弃cpu例: 1. current->state = TASK_INTERRUPTIBLE; 2. schedule();2、被动式(抢占)用户抢占(Linux2.4、Linux2.6)内核抢占(Linux2.6)用户抢占发生在:* 从系统调用返回用户空间。* 从中断处理程序返回用户空间。内核即将返回用户空间的时候,如果need_resched标志被设置... 阅读全文
摘要:
Table of Contents1 convential process1.1 static priority1.2 dynamic priority2 real-time process2.1 static priority2.2 dynamic priority2.3 real time priority3 调度策略1convential process1.1static priority范围为100-139(MAX_RT_PRIO - MAX_PRIO-1)内核2.6中的静态优先级相当于内核2.4中的nice值,但转到MAX_RT_PRIO到MAX_PRIO-1取值范围,其公式为:st 阅读全文