进程管理和调度 --调度器的实现

2.5 调度器的实现
内存中保存了对每个进程的唯一描述,并通过若干结构域其他进程链接起来。调度器面对的情形就是这样,器任务是在程序之间共享CPU时间,创造并行执行的错觉。正如以上的讨论,改任务分为两个不同部分:一个设计调度策略,另一个设计上下文切换

2.5.1 概观
内核必须提供一种方法,在各个进程之间尽可能公平地共享CPU时间,而同时又要考虑不同的任务优先级。完后才能够该墓地有许多方法,各有其利弊。
*schedule函数式理解调度操作的起点。改函数定义在kernel/sched.c中,是内核代码中最长调用的函数之一。调度器的实现受若干因素的影响而稍显模糊。
*在多处理器系统上,必须注意结构细节,以避免调度器子项干扰。
*不仅实现了优先调度,还实现POSIX标准需要的其他两种软实时策略。
*使用goto以生成最有的汇编语言代码。

当前的调度器置烤炉进程的等待时间,即进程在就绪队列(run-queue)中已经等待了多长时间。对CPU时间需求最严格的进程被调度执行。
调度器的一般原理是,按所能分配的计算能力,向系统中的每个进程提供最大的公正性。或者从一个角度来说,他视图确保没有进程被亏待。
红黑树是内核的标准数据结构。
*进程的不同优先级,更重要的进程必须必次要进程更多的CPU时间份额。
*进程不能切换的太多频繁,因为上下文切换,即从一个进程改变到另一个,是有一定开销的。在切换发生的态频繁时,过多时间话费在进程切换的过程中,而不是用于实际的工作。

2.5.2 数据结构
调度器使用一系列数据结构,来排序和管理系统中的进程。
可以用两种方法激活调度。一种只记得额,比如进程打算睡眠或处于其他原因放弃CPU;另一种是通过周期性机制,以固定的频率运行,不时检测是否有必要进程金恒切换。在下午中我将这两个组件称为通用调度器(generic scheduler)或核心调度器(core scheduler).本质上,通过调度器是一个分配器,与其他两个组件交互
(1)调度类用于判断接下来运行那个进程。内核支持不同的调度策略(完全公平调度、实时调度在五十可做时调度空闲进程),调度类使得能够以模块化方法实现这些策略,即一个雷的代码不需要与其他类的代码交互。
在调度器被调用时,他阿辉查询调度器。
(2)在选中将要运行的进程之后,必须执行底层任务切换。这需要与CPU的紧密交互。
1.task_struct成员
各进程的task_struct有几个成员与调度相关。
*并非系统上的所有进程同样重要。不那么紧急的进程不需要关注,而重要的工作应该可能快速完成。但task_struct采用了3个成员来表示进程的优先级:prio和normal_prio表示冬天优先级,static_prio表示进程的静态优先级。静态优先级是进程启动时分配的优先级。他可以用nice和sched_setschduler系统调用修改,否则在进程运行期间会一直保持恒定。
但调度器考虑的优先级则保存在prio.由于在某些情况下内核需要暂时提高进程的优先级,因此需要滴3个成员来表示。

*rt_priority表示实时进程的优先级。改置不会代替先前讨论的那些纸!最低的实时优先级为0,而最高的优先级是99.
*sched_class 表示进程所属的调度器类。
*调度器不限于调度进程,还可以处理更大的分配。

*policy保存了对改进程应用的调度策略。
SCHED_NORMAL用于普通进程,他们通过完全公平调度器来处理。SCHED_BASTCH和SCHED_IDLE也通过公平调度器来处理,不过可用于次要的进程。SCHED_BATCH用于非交互、CPU使用秘籍的屁处理进化成呢过。
*SCHED_RR和SCHED_FIFO用于实现软实时进程。SHED_RR实现了一种循环方法,而SCHED_FIFO则使用先进先出机制。
* cpus_allowed是一个味域,在多处理器系统上使用,用来限制进程可以在那些CPU上运行。
* *run_list和time_slice是循环实时调度器所需要的,但不用于完全公平调度器。run_list是一个表头,用于维护包含个进程的一个运行表,而time_slice则指定进程可使用CPU的剩余时间段。

2调度器类
调度器类听了通用调度器和各个调度方法之间的关联。调度器类有特定数据结构中汇集的几个函数指针表示。全局带哦度器请求的各个操作都可以有一个指针表示。这使得无需了解不同调度器类的内部工作原理,即可创建通用调度器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值