标签:
调度:调度是一个平衡的过程。一方面,它要保证各个运行的进程能够最大限度的使用CP;另一方面,保证各个进程能公平的使用CPU。
调度功能:决定哪个进程运行以及进程运行多长时间。
调度实现原理:与进程的优先级有关
Linux上调度实现的方法:O(1)的调度算法
调度相关的系统调用
多任务系统可以划分为两类:非抢占式多任务( cooperative multitasking )和抢占式多任务
(preemptive multitasking)。像所
有Unix 的变体和许多其他现代操作系统一样, Linux 提供了抢占
式的多任务模式。在此模式下,由调度程序来决定什么时候停止一个进程的运行,
以便其他进程
能够得到执行机会.这个强制的挂起动作就叫做抢占( preemption ).进程在被抢占之前能够运行
的时间是预先设置好的,而且有一
个专门的名字,叫进程的时间片( timeslice )。时间片实际上
就是分配给每个可运行进程的处理器时间段。有效管理时间片能使调度程序从系统
全局的角度做
出调度决定,这样做还可以避免个别进程独占系统资源.当今众多现代操作系统对程序运行都采
用了动态时间片计算的方式,并且引入
了可配置的计算策略.不过我们将看到, Linux 姐一无二
的“公平”调度程度本身并没有采取时间片来达到公平调度。
0(1)调度程序一一它是因为其算泌的行为而得名的θ 。它解决了先前版本Linux 调度程序的许多不足,引入了许多强大的新特性和性能特征。
这里主要要感谢静态时间片算法和针对每一处理器的运行队列,它们帮助我们摆脱了先前调度程序设计上的限制。
0(1)调度器虽然在拥有数以十计(不是数以百计〉的多处理器的环境下尚能表现出近乎完美的性能和可扩展性,但是时间证明该调度算提对于
调度那些响应时间敏感的程序却有一些先天不足。这些程序我们称其为交互进程一一它无疑包括了所有需要用户交互的程序。
策略决定调度程序在何时让什么进程运行
上下文切换,也就是从一个可执行进程切换到另一个可执行进程,由定义在kernel/ sched.c 中
的context_switch()函数负责处理.每当一个新的进程被选出来准备投入运行的时候, schedule()
就会调用该函数。它完成了两项基本的工作:
·调用声明在<asm/mmu_ context.h>中的switch_mm(), 该函数负责把虚拟内存从上一个
进程映射切换到新进程中。
·调用声明在<asm/system.h> 中的switch_to(),
该函数负责从上一个进程的处理器状态切换到新进程的处理器状态。这包括保存、恢复检信息和寄存器信息,还有
其他任何与体系结构相关的状态信息,都必须以每个进程为对象进行管理和保存。_add_w血’_queue衍巴任务
加到等待队列中.然后调用schedule()
标签:
原文地址:http://www.cnblogs.com/20135302wei/p/5389439.html