现在的位置: 首页 > 综合 > 正文

linux进程调度

2017年08月25日 ⁄ 综合 ⁄ 共 897字 ⁄ 字号 评论关闭

调度---从就绪的进程选出最适合的一个来执行。

知识点-----

1---调度策略

2---调度时机

3---调度步骤

调度策略--------

SCHED_NORMAL(SCHED_OTHER):普通的分时进程

SCHED_FIFO---先入先出的实时进程

SCHED_RR---时间片轮转的实时进程

SCHED_BATCH----批处理进程

SCHED_IDLE----只有在系统空闲时才能够被调度执行的进程。

一个进程会选择以上的一种来调度,而不是说整个系统都是采用的某种调度。

调度类------它的引入增强了内核调度程序的可扩展性,这些类(调度程序模块)封装了调度策略,并将调度策略模块化。

CFS调度类---在kernel/sched_fair.c中实现用于以下调度策略---

SCHED_NORMAL  SCHED_BATCH  SCHED_IDLE

实时调度类---在kernel/sched_rt.c中实现用于SCHED_RR  SCHED_FIFO策略。

调度类

struct sched_class

{

...........................

struct task_struct *(*pick_next_task) (struct rq *rq)

...............................

}

pick_next_task------选择下一个要运行的进程。

调度时机----调度什么时候发生?即schedule()函数什么时候被调用。

调度发生的方式----

1--主动式

在内核中直接调用schedule()。当进程需要等待资源而暂时停止运行时,会把状态置于挂起(睡眠),并主动请求调度,让出cpu。

主动放弃cpu例子:

1---current->state=TASK_INTERRUPTIBLE

2---schedule()

2被动式(抢占)

用户抢占----2.4----2.6

内核抢占---2.6


用户抢占发生在-------

从系统调用返回用户空间。

从中断处理程序返回用户空间。

内核即将返回用户空间的时候,如果need_resched标志被设置,会导致schedule()被调用,此时就会发生用户抢占。

抱歉!评论已关闭.