关于进程调度的疑问

众所周知,就拿i386为例的单核cpu,linux的进程调度sched.c被编译到内核以后,他要是起作用,必然是以一个进程的方式来完成调度工作,cpu每次只能处理一个进程,那么如果该调度进程正在等待队列中,或者在就绪队列的话,正在运行的进程的就无法完成调度的工作,也就是说系统将会处于僵死状态,这显然是与实际的情况不符啊,我不懂我的分析错在哪里了,还请高手回答下。
谢啦

作者: shenyanxxxy   发布时间: 2011-02-01

对linux内核的理解是不正确的,早期一些操作系统是有个线程来作任务调度,它是整个内核的核心。但是linux包括window等现代操作系统,调度的驱动源是中断和异常,从中断和异常处理返回的时候就是任务调度的机会点,因此当前占用CPU的是什么线程不重要,中断和异常总是会打断它,你可以认为中断和异常的优先级是高于线程优先级的,所以任务总是会“被迫放弃”CPU(除了FIFO线程)。
     不知我解释清楚没有,如果没有我们可以探讨,谢谢!










+++++++++++++++++++++++++++++++
银河渡口工作室提供在linux嵌入式、桌面、服务器领域的专业服务:专业培训、疑难问题定位、特性开发及解决方案设计。
+++++++++++++++++++++++++++++++

作者: 银河渡口   发布时间: 2011-02-09