Linux 下进程调度与优先级的深入分析》
已有 5452 次阅读 2009-12-13 17:33
1)初识调度
为配合系统对进程的调度,采用两种方式进行处理
1.1)协同多任务处理
当进程因为事件的等待,而自动放弃 CPU 资源,而使其它进程得以使用 CPU,这时称之为协
同多任务处理.
其实如果进程都采用协同多任务处理时,系统将会轻松的调度进程,以分配资源
1.2)抢先式多任务处理
当进程不进行 I/O,比如计算型运算应用时,一直占用大量的 CPU 时间,这时系统将会利用中
断,使原占用 CPU 的进程放弃 CPU.
这时称之为抢先式多任务处理
1.3)总结
1.3.1)UNIX/LINUX 采用协同多任务处理与抢先式多任务处理相结合的方式处理进程.
1.3.2)当进程都采用协同多任务处理,系统就可能永远不会用到抢先式.
1.3.3)调度程序本身也是一个进程,PID 是 0,是 INIT 进行的父进程
2)阻塞,抢先占用和放弃
2.1)抢先占用的触发:
2.1.1)当一个进程因为它的时间片用完而被内核停止执行时,就说这个进程被抢占.
2.1.2)当一个享有更高优先公的进程在就绪队列,内核同样可以抢占正在执行的进程,即使
它的时间片还没用完.
2.2)放弃的触发:
2.2.1)用户进程可以通过 sched_yield 系统调用来放弃使用 CPU.
2.2.2)用户进程通过其它系统调用来放弃 CPU.
例如:一个进程正在调用 read/write 时,它很可能不得不等待相应的设备的响应,这时它应用
使自己睡眠(sleep),放弃 CPU,直到设备就绪为止.
2.3)阻塞的触发:
2.3.1)当进程在内核模式下等待一个事件时,就是阻塞,直到所等侍的事件来唤醒它为止.
2.4)总结:
2.4.1)阻塞与放弃的区别
一个阻塞的进程即不会占用 CPU,也不会被调度程序调度.而放弃的进程则会被调度程序调
度.
2.4.2)linux2.6 内核是一个可抢先占有的内核,在不可抢先有的内核则高优先级的进程不能
抢占低优先级的进程.
3)优先级
3.1)动态优先级
因为高优先级的进程总比低优先级的进程先被调度,为防止有多个高优先级且一直占用 CPU
评论0
最新资源