Linux Kernel(四) 进程调度

进程调度简单介绍:

调度程序可看做在可运行状态进程进行处理器时间资源分配的内核子系统。

调度程序是多任务操作系统的基础,只有通过调度程序的合理调度才能发挥最大作用,多进程才会有并发的效果。


调度程序中,处理进程的原则是只要有可执行的进程就一定会处于执行进程的状态下,如果进程数目多于处理器

数目,那么就会有进程处于等待状态中。


wiki关于多任务的解释:

In the case of a computer with a single CPU, only one task is said to be running at any point in time, meaning that the CPU is actively executing instructions for that task. Multitasking solves the problem by scheduling which task may be the one running at any given time, and when another waiting task gets a turn. The act of reassigning a CPU from one task to another one is called a context switch. When context switches occur frequently enough the illusion of parallelism is achieved.

在单处理器的计算机中,在任一时间点只有一个任务处于运行中,意味着cpu一直在频繁地执行任务指令。多任务通过时间调度哪个任务可能在给定的时间运行和什么时候另一个等待进程被调用解决了这一问题,这种cpu从一任务到另一任务分配时间的方式叫做上下文中断,当上下文中断频繁发生的时候给我们一种并行实现的错觉。


多任务操作系统就是能并发交互执行多个进程的操作系统。

多任务操作系统:

分为非抢占式多任务系统(cooperative multitasking)和抢占式多任务系统(preemptive multitasking),linux提供了抢占式的多任务模式,由调度程序决定什么时候该任务结束,以便其他的进程执行,每个进程执行的时间(timeslice)都是预先计算好的.

  关于时间片:

   首先,进程分为I/O消耗型和处理器消耗型,时间片是一个数值,表示进程被抢占前所运行的时间,因此,调度策略必须规定一个默认的时间片,在这里,要权衡I/O消耗型和处理器消耗型,对于I/O消耗型来说,调度策略所规定的时间片时间越短越好,而对于处理器型则需要长的时间片。

  但是在linux中,CFS调度器并没将时间片分配到进程,而是将处理器的比例划分到进程,这样,时间片会随着系统负荷的变化动态变化,还会受到进程 nice值的影响,nice值作为权重加入到时间片计算。

 

  linux调度算法:

LKD告诉我们linux调度器是以模块方式提供的,这样做是为了使得进程可以根据自身来选择相应的调度算法,这种模块化结构设计被称为调度器类。

每个调度器都有一个优先级,基础调度器代码在kernel/sched,c文件中

/*
 * These are the 'tuning knobs' of the scheduler:
 *
 * default timeslice is 100 msecs (used only for SCHED_RR tasks).
 * Timeslices get refilled after they expire.
 */
#define DEF_TIMESLICE           (100 * HZ / 1000)

/*
 * single value that denotes runtime == period, ie unlimited time.
 */
#define RUNTIME_INF     ((u64)~0ULL)
(未完待续)

 



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值