linux 进程调度 (update)

参考Robert love的著作:


2.6内核版本以后的linux实现了抢占式内核,实现了内核抢占。


进程调度顺序:

1. 实时进程 > 非实时进程

2. 实时进程之间,比较实时优先级,1到99,越大越高。

3. 实时优先级相同的实时进程之间,根据调度策略来执行。分FIFO和RR两种。

    1)其中RR方式,是轮询的,在3.5.3内核版本中,rt_sched_class中task_tick的RR_TIMESLICE为100ms。当RR时间片超时后,进程被放到“实时优先级”相同的实时进程队列的队尾。

    2)FIFO方式,则不轮询。

    3)新加入的实时进程,放在同优先级队列的头部?尾部?各内核版本可能不一样。

4. 非实时进程之间,采用完全公平调度策略CFS进行调度,与nice值有很大关系。nice值越小,“处理器使用比”越小,如果“使用比”比当前进程小,则新进程投入运行。nice值为-19到20。

5. 通过kthread_create创建的内核线程,如ksoftirqd,kevent,调度策略为SCHED_NORMAL,默认的nice值各内核版本可能不一样。//参见create_kthread实现。

6. 当彻底没有进程执行的情况下,SCHED_BATCH级别的进程执行。


进程调度的时机:

一、用户抢占:当有TIF_NEED_RESCHED标记

       1. 系统调用返回用户空间时;

       2. 中断处理程序返回用户空间时;

二、内核抢占:

       1、中断处理程序返回内核空间时;

       2、内核再一次具有可抢占性的时候;如执行spin_unlock等。具体参见preempt_check_resched函数,要求当前进程有TIF_NEED_RESCHED标记,并且thread_info的preempt_count为0(没有锁了),则表示可以抢占了。

       3、显示调用schedule();

       4、进程被阻塞;阻塞为调用prepare_to_wait(可以通过wait_event_interruptible,wait_event_timeout等调用),修改了当前进程的状态,并且释放锁的时候进行了类似于情况2的检查。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux内核进程调度是一个非常复杂的系统,主要由可调度进程队列、进程调度策略、调度器负责。 在Linux中,进程调度器是一个单独的内核线程,其主要工作是在可调度进程队列中选择下一个要运行的进程,并将CPU分配给该进程。进程调度器根据进程的优先级和调度策略来选择下一个要运行的进程。 Linux进程调度的核心代码位于sched目录下,主要包括以下文件: 1. sched.h:定义了调度器的数据结构和函数原型。 2. sched.c:实现了进程调度器的主要功能,包括进程的加入、删除、更新等操作。 3. rt.c:实时调度策略相关代码。 4. fair.c:CFS调度策略相关代码。 5. idle.c:空闲进程相关代码。 6. deadline.c:DEADLINE调度策略相关代码。 下面我们以CFS调度策略为例,简单介绍一下进程调度的实现过程: CFS调度策略是一种完全公平的调度策略,它通过动态优先级来保证进程的公平性。在CFS调度策略中,每个进程都有一个虚拟运行时间(virtual runtime),该时间是进程已经运行的时间和优先级的函数。 CFS调度策略的核心代码位于fair.c文件中,主要包括以下函数: 1. enqueue_task_fair():将一个进程添加到可调度进程队列中。 2. dequeue_task_fair():将一个进程从可调度进程队列中删除。 3. update_curr_fair():更新当前进程的虚拟运行时间。 4. pick_next_task_fair():选择下一个要运行的进程。 以上函数的实现过程中,都涉及到了对进程调度器的数据结构的操作,如可调度进程队列、进程控制块等。具体实现过程需要结合代码进行分析。 总体来说,Linux内核进程调度的实现非常复杂,需要涉及到很多的数据结构和算法,同时还需要考虑到性能、公平性等因素。因此,对于想要深入了解Linux内核的人来说,进程调度是必须要掌握的一个重要部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值