首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux的时钟中断与进程调度

时钟中断和进程调度是Linux操作系统中非常重要的两个概念,它们在操作系统的运行和进程管理中起着关键作用。以下是关于这两个概念的详细解释:

Linux的时钟中断与进程调度

  • 时钟中断:时钟中断是由CPU的定时器产生的一种周期性中断,用于维持系统时间、进行进程调度、记录系统运行时间等。在Linux中,时钟中断每10毫秒发生一次,触发时钟中断服务程序,更新系统时间,并执行一些系统管理任务。
  • 进程调度:Linux内核采用CFS(完全公平调度器)算法,通过虚拟运行时间来分配CPU时间,确保每个进程都能公平地获得CPU时间片。进程调度器根据进程的优先级和时间片来决定是否调度某个进程运行。

时钟中断与进程调度的关系

时钟中断是进程调度的关键触发机制。它负责更新系统时间,保证进程调度的准确性,并通过更新进程的时间片计数器来触发进程调度,确保系统中的每个进程都有机会获得CPU时间,从而保持系统的响应性和公平性。

应用场景

  • 时钟中断的应用场景包括系统时间维护、定时任务执行、进程调度等。
  • 进程调度的应用场景则广泛存在于各种需要多任务处理的操作系统中,用于优化资源利用率和系统响应速度。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux CFS调度器之虚拟时钟vruntime与调度延迟--Linux进程的管理与调度(二十六)

为了实现完全公平调度,内核引入了虚拟时钟(virtual clock)的概念,实际上我觉得这个虚拟时钟为什叫虚拟的,是因为这个时钟与具体的时钟晶振没有关系,他只不过是为了公平分配CPU时间而提出的一种时间量度.../*当前执行进程的可调度实体*/ ... }; 3 update_curr函数计算进程虚拟时间 所有与虚拟时钟有关的计算都在update_curr中执行, 该函数在系统中各个不同地方调用..., 包括周期性调度器在内. update_curr的流程如下 首先计算进程当前时间与上次启动时间的差值 通过负荷权重和当前时间模拟出进程的虚拟运行时钟 重新设置cfs的min_vruntime保持其单调性...每一个进程拥有一个vruntime, 每次需要调度的时候就选运行队列中拥有最小vruntime的那个进程来运行, vruntime在时钟中断里面被维护, 每次时钟中断都要更新当前进程的vruntime,...在时钟中断里面被维护,每次时钟中断都要更新当前进程的vruntime,即vruntime以如下公式逐渐增长: 条件 公式 curr.nice!

3.4K63

Linux进程调度器的设计--Linux进程的管理与调度(十七)

当然与批处理进程相比, 调度程序有偏爱交互式进程的倾向 1.3 不同进程采用不同的调度策略 根据进程的不同分类Linux采用不同的调度策略...., 不考虑优先级和调度类 load 提供了就绪队列当前负荷的度量, 队列的符合本质上与队列上当前活动进程的数目成正比, 其中的各个进程又有优先级作为权重....每个就绪队列的虚拟时钟的速度等于该信息 cpu_load 用于跟踪此前的负荷状态 cfs,rt 和dl 嵌入的子就绪队列, 分别用于完全公平调度器, 实时调度器和deadline调度器 curr 当前运行的进程的...* 其会不停增长,增长速度与load权重成反比,load越高,增长速度越慢,就越可能处于红黑树最左边被调度 * 每次时钟中断都会修改其值 * 具体见calc_delta_fair...注意其值为单调递增,在每个调度器的时钟中断时当前进程的虚拟运行时间都会累加。

3.6K41
  • Linux进程调度器概述--Linux进程的管理与调度(十五)

    ), 也可能是CPU受限的(比如图形绘制程序) 2.2 实时进程与普通进程 在linux中, 调度算法可以明确的确认所有实时进程的身份, 但是没办法区分交互式程序和批处理程序(统称为普通进程), linux2.6...当然与批处理进程相比, 调度程序有偏爱交互式进程的倾向 根据进程的不同分类Linux采用不同的调度策略. 对于实时进程,采用FIFO或者Round Robin的调度策略....因此进程调度也包含了线程调度的功能. linux进程的调度算法其实经过了很多次的演变, 但是其演变主要是针对与普通进程的, 因为前面我们提到过根据进程的不同分类Linux采用不同的调度策略.实时进程和普通进程采用了不同的调度策略...调度定时器每隔一定时间执行一个中断,在中断会对当前运行进程运行时间进行更新,如果进程需要被调度,在调度定时器中断中会设置一个调度标志位,之后从定时器中断返回,因为上面已经提到从中断上下文返回时是有调度时机的...scheduler_tick由内核时钟中断周期性的触发, 周期性调度器以固定的频率激活负责当前进程调度类的周期性调度方法, 以保证系统的并发性, 周期性调度器通过调用进程所属调度器类的task_tick

    3.6K20

    Linux进程调度_linux进程的查看和调度

    Linux 系统为了提升响应的速度,倾向于优先调度 I/O 消耗型。...—— 小结 实时进程优先级:value 越高,优先级越大 普通进程优先级:nice值越高,普通进程的优先级越小 任何实时进程的优先级 > 普通进程 Linux 调度算法 ---- Linux 中有一个总的调度结构...Linux 调度时机 ---- 一、进程切换 从进程的角度看,CPU是共享资源,由所有的进程按特定的策略轮番使用。...二、调度时机 自愿切换意味着进程需要等待某种资源,强制切换则与抢占(Preemption)有关。...在以下时刻: 周期性的时钟中断 时钟中断处理函数会调用scheduler_tick(),这是调度器核心层(scheduler core)的函数,它通过调度类(scheduling class)的task_tick

    20.7K10

    Linux进程调度策略的发展和演变--Linux进程的管理与调度(十六)

    当然与批处理进程相比, 调度程序有偏爱交互式进程的倾向 1.3 不同进程采用不同的调度策略 根据进程的不同分类Linux采用不同的调度策略....因此,这个算法缺乏可伸缩性 2.2.2 详情 每个进程被创建时都被赋予一个时间片。时钟中断递减当前运行进程的时间片,当进程的时间片被用完时,它必须等待重新赋予时间片才能有机会运行。...O(1)调度算法所花费的时间为常数,与当前系统中的进程个数无关。 此外Linux 2.6内核支持内核态抢占,因此更好地支持了实时进程。...该值的更新时机分布在很多内核函数内:时钟中断scheduler_tick();进程创建;进程从TASK_INTERRUPTIBLE状态唤醒;负载平衡等。...为了提高交互式进程的响应时间,O(1)调度器不仅动态地提高该类进程的优先级,还采用以下方法:每次时钟tick中断时,进程的时间片(time_slice)被减一。

    2.3K20

    Linux下进程的调度与切换

    前言:   在Linux操作系统中,进程的调度与切换是操作系统核心功能之一,它直接影响着系统的性能和响应速度。那么话不多说,开启我们今天的话题!...进程调度 ✈️活动状态进程队列   我们上次说过,Linux实现进程调度的算法,需要考虑 优先级,考虑进程饥饿,以及效率。那么CPU是如何实现进程调度的呢?   ...我们来看一下Linux下CPU的运行队列的各项属性:   我们首先看蓝色框内的内容,有一个叫做 queue[140] 的数组,这里的 queue数组表示活动状态进程的进程队列。   ...这样,我们竞争饥饿,优先级,以及进程效率都解决了。 ✏️总结  进程切换最重要的部分就是 进程上下文的保护和恢复。  进程调度的优先级问题由 活跃进程数组的下标与进程优先级形成一种映射关系 解决。  ...进程调度的时间复杂度问题由 位图和两个结构体指针 解决,时间复杂度控制在了O(1)。  进程调度的进程饥饿问题由 活跃队列和过期队列 解决。

    14010

    Linux进程核心调度器之主调度器schedule--Linux进程的管理与调度(十九)

    该信息使得内核在显示栈转储活类似信息时, 忽略所有与调度相关的调用. 由于调度哈书调用不是普通代码流程的一部分, 因此在这种情况下是没有意义的....* 被抢占有两种情况, 一种是时间片到点, 一种是时间片没到点 * 时间片到点后, 主要是置当前进程的need_resched标志 * 接下来在时钟中断结束后, 会...prev是隶属于CFS的普通非实时进程 * 而当前cpu的全局就绪队列rq中的进程数与cfs_rq的进程数相等 * 则说明当前cpu上的所有进程都是由cfs调度的普通非实时进程...调度过程可能选择了一个新的进程, 而清理工作则是针对此前的活动进程, 请注意, 这不是发起上下文切换的那个进程, 而是系统中随机的某个其他进程, 内核必须想办法使得进程能够与context_switch..., 我们的调度会被中断, 而调度却还没有完成, 这样会丢失我们调度的信息.

    3.9K31

    Linux进程ID号--Linux进程的管理与调度(三)【转】

    Linux 内核使用 task_struct 数据结构来关联所有与进程有关的数据和结构,Linux 内核所有涉及到进程和程序的所有算法都是围绕该数据结构建立的,是内核中最重要的数据结构之一。...是 Linux 中在其命名空间中唯一标识进程而分配给它的一个号码,称做进程ID号,简称PID。...处于相同的线程组中的所有进程都有相同的TGID,但是由于他们是不同的进程,因此其pid各不相同;线程组组长(也叫主线程)的TGID与其PID相同;一个进程没有使用线程,则其TGID与PID也相同。...pid时候,只需要查找pidmap位图即可 那么最终,linux下进程命名空间和进程的关系结构如下: ?...至此,已经与 Linux 内核中数据结构相差不多了。

    5.9K10

    linux进程调度

    不同与普通进程,系统调度时,实时优先级高的进程总是先于优先级低的进程执行。知道实时优先级高的实时进程无法执行。实时进程总是被认为处于活动状态。...假设当前CPU运行的实时进程A的优先级为a,而此时有个优先级为b的实时进程B进入可运行状态,那么只要b中断A的执行,而优先执行B,直到B无法执行(无论A,B为何种实时进程)。    ...总而言之,对于实时进程,高优先级的进程先执行,它执行到没法执行了,才轮到低优先级的进程执行。 2.非实时进程的调度 Linux对普通的进程,根据动态优先级进行调度。...Linux下,静态优先级是用户不可见的,隐藏在内核中。...Linux2.6认为,交互式进程可以从平均睡眠时间这样一个measurement进行判断。进程过去的睡眠时间越多,则越有可能属于交互式进程。

    3.2K140

    linux进程调度

    调度策略 进程可以分为实时进程和普通进程,对于这两种不同类型的进程肯定有不同的调度策略,task_struct中的policy就用来表示调度策略。...SCHED_RR,时间片轮转调度,也是高优先级可以抢占低优先级,对于同优先级新来的排到队尾,每个进程都执行一个时间片,然后换下一个进程。...普通调度策略有 SCHED_NORMAL, SCHED_BATCH,SCHED_IDLE SCHED_NORMAL:普通的进程 SCHED_BATCH:后台进程 SCHED_IDLE:空闲时运行的进程...stop_sched_class:优先级最高的进程使用该策略,可以打断所有其他进程,并且该进程不会被抢占 rt_sched_class:RR算法或者FIFO算法的调度策略,具体由该进程的task_struct...fair_sched_class:普通进程的调度策略 CFS调度算法 CFS(completed fair Schedule)完全公平调度,适用于普通进程调度。

    8.1K20

    Linux内核调度分析(进程调度)

    本文是《Linux内核设计与实现》第四章的阅读笔记,代码则是摘自最新的4.6版本linux源码(github),转载请注明出处。...Linux进程调度 发展历史 Linux从2.5版本开始引入一种名为的调度器,后在2.6版本中将公平的的调度概念引入了调度程序,代替之前的调度器,称为算法(完全公平调度算法)。...Linux调度算法 调度器类 Linux的调度器是以模块的方式提供的,这样使得不同类型的进程按照自己的需要来选择不同的调度算法。...可以认为这是CFS为了能够实现理想多任务处理而不得不虚拟的一个新的时钟,具体地讲,一个进程的vruntime会随着运行时间的增加而增加,但这个增加的速度由它所占的权重来决定。...从中断返回内核空间的时候,会检查和的值,如果被标记,并且为0,就意味着有一个更需要调度的进程需要被调度,而且当前情况是安全的,可以进行抢占,那么此时调度程序就会被调用。

    15K113

    Linux CFS调度器之唤醒抢占--Linux进程的管理与调度(三十)

    , 当然因为大多数情况下, 系统中全是CFS调度的非实时进程, 因而linux内核也有一些优化的策略 一般情况下选择红黑树中的最左进程left作为最优进程完成调度, 如果选出的进程正好是cfs_rq->...skip需要跳过调度的那个进程, 则可能需要再检查红黑树的次左进程second, 同时由于curr进程不在红黑树中, 它可能比较饥渴, 将选择出进程的与curr进程进行择优选取, 同样last进程和next...这个是调度器最初向进程欠下的债务....关于place_entity函数, 我们之前在讲解CFS队列操作的时候已经讲的很详细了 参见linux进程管理与调度之CFS入队出队操作 设想一下子如果休眠进程的vruntime保持不变,...se->vruntime -= cfs_rq->min_vruntime; 我们前面讲解place_entity的时候说到, 新创建的进程和睡眠后苏醒的进程为了保证他们的vruntime与系统中进程的vruntime

    2.6K31

    【Linux】详谈进程优先级&&进程调度与切换

    1.2、优先级的具体表示 进程的优先级其实就是PCB中的一个整形变量(int PRI)。Linux中进程的默认优先级是80,这个默认优先级是可以被修改的。Linux中优先级的范围是[60,99]。...数字越小,进程优先级越高。Linux系统允许用户调整优先级,但是不能直接让你修改PRI的值,而是修改nice值。nice值不是进程的优先级,而是优先级的修正数据。...二、进程的调度与切换  进程被加载到CPU上运行的时候,并不是必须一口气把代码跑完,现代操作系统,都是基于时间片轮转执行的。...2.2进程的调度 CPU实现进程调度的算法需要考虑优先级,饥饿问题以及效率问题。...这样,CPU在调度的时候就可以根据进程的优先级由高到低地调度进程了。

    50810

    Linux进程调度(三)

    一、抢占式调度和主动调度: 前面我们说过,进程的切换总是通过 shedule 函数发生的,而 schedule 函数可以是在系统调用返回、中断返回等时机被调用,也可以进程在驱动程序中主动调用 我们把在系统调用返回等时机调用...schedule 函数的这种非进程自愿情况称为抢占式调度。...把进程在驱动程序中主动调用 schedule 函数来发生进程切换的这种情况称为主动调度 本文将讨论主动调度,抢占式调度将在下一篇文章中讲解: 二、主动调度的发生的情况: 主动调度一般在应用程序读取某个设备时...我们先想一下,进程切换主要做了什么 进程地址空间的切换 进程与进程之间的地址是相互独立的,所以需要切换进程的地址空间 指令指针的切换 进程切换后,要恢复进程原本执行的地方 我们下面看看 context_switch...四、总结: 进程发生切换总是调用 schedule 函数进行的,进程调度分抢占式调度和主动调度,主动调度表示的是进程主动调用 schedule 函数发生进程切换 schedule 函数主要做了两件事,

    2.5K10

    Linux进程调度分析

    与实时进程相比,普通进程的调度要复杂得多。...随着进程在CPU上运行,其优先级被不断调低,以便其他优先级较低的进程得到运行机会; 后一种方式有更小的调度粒度,并且将“公平性”与“动态调整优先级”两件事情合而为一,大大简化了内核调度程序的代码。...如发送信号主动唤醒,或因为释放互斥对象(如释放锁)而被唤醒; 内核在响应时钟中断的过程中,发现当前进程的时间片用完; 内核在响应中断的过程中,发现优先级更高的进程所等待的外部资源的变为可用,从而将其唤醒...比如CPU收到网卡中断,内核处理该中断,发现某个socket可读,于是唤醒正在等待读这个socket的进程;再比如内核在处理时钟中断的过程中,触发了定时器,从而唤醒对应的正在nanosleep 系统调用中睡眠的进程...4、中断处理线程化 在linux下,中断处理程序运行于一个不可调度的上下文中。从CPU响应硬件中断自动跳转到内核设定的中断处理程序去执行,到中断处理程序退出,整个过程是不能被抢占的。

    2.4K31

    Linux进程退出详解(do_exit)--Linux进程的管理与调度(十四)

    Linux进程的退出 linux下进程退出的方式 正常退出 从main函数返回return 调用exit 调用_exit 异常退出 调用abort 由信号终止 _exit, exit和_Exit的区别和联系...这个信息我们已经讨论过很多次了 参见 Linux进程ID号–Linux进程的管理与调度(三) Linux进程描述符task_struct结构体详解–Linux进程的管理与调度(一)...为了完成这个步骤,函数扫描与current->tgid对应的PIDTYPE_TGID类型的散列表中的每PID链表,向表中所有不同于current的进程发送SIGKILL信号,结果,所有这样的进程都将执行...list_empty(&plug->cb_list)); } OOPS消息 中断上下文不能执行do_exit函数, 也不能终止PID为0的进程。..., 进程已经无法被再次调度, 因为对应用程序或者用户空间来说此进程已经死了, 但是尽管进程已经不能再被调度,但系统还是保留了它的进程描述符,这样做是为了让系统有办法在进程终止后仍能获得它的信息。

    6.2K30

    【Linux内核】进程调度

    文章目录 前言 I/O消耗型与处理器消耗性 进程优先级 时间片 进程抢占 前言 调度程序没有太复杂的原理。最大限度地利用处理器时间的原则是,只要有可以执行的进程,那么就总会有进程正在执行。...Linux 提供了抢占式的多任务模式。在此模式下,由调度程序来决定什么时候停止一个进程的运行以便其他进程能够得到执行机会。这个强制的挂起动作就叫抢占(preemption)。...I/O消耗型与处理器消耗性 进程可以被分为I/O消耗型和处理器消耗型。前者指进程的大部分时间用来提交I/O请求或是等待I/O请求。...优先级高的进程先运行,低的后运行,相同优先级的进程按轮转方式进行调度(一个接一个,重复进行)。在包括Linux在内的某些系统中,优先级高的进程使用的时间片也较长。...进程抢占 像前面所说的,Linux 系统是抢占式的。当-个进程进入TASK_RUNNING状态,内核会检查它的优先级是否高于当前正在执行的进程。

    2.9K20

    Linux进程调度学习!

    Linux 调度算法: Linux 中有一个总的调度结构,称之为 调度器类(scheduler class),它允许不同的可动态添加的调度算法并存,总调度器根据调度器类的优先顺序,依次去进行调度器类的中的进程进行调度...SCHED_RR :与 SCHED_FIFO 大致相同,只是 SCHED_RR 级的进程在耗尽其时间后,不能再执行,需要接受 CPU 的调度。...Linux 调度时机: 1、进程切换: 从进程的角度看,CPU是共享资源,由所有的进程按特定的策略轮番使用。...2、调度时机: 自愿切换意味着进程需要等待某种资源,强制切换则与抢占(Preemption)有关。...在以下时刻: 周期性的时钟中断:时钟中断处理函数会调用scheduler_tick(),这是调度器核心层(scheduler core)的函数,它通过调度类(scheduling class)的task_tick

    1.9K30

    Linux下2号进程的kthreadd--Linux进程的管理与调度(七)

    它的任务就是管理和调度其他内核线程kernel_thread, 会循环执行一个kthreadd的函数,该函数的作用就是运行kthread_create_list全局链表中维护的kthread, 当我们调用...kernel_thread创建的内核线程会被加入到此链表中,因此所有的内核线程都是直接或者间接的以kthreadd为父进程 2号进程的创建 在rest_init函数中创建2号进程的代码如下 pid =...在for循环中,如果发现kthread_create_list是一空链表,则调用schedule调度函数,因为此前已经将该进程的状态设置为TASK_INTERRUPTIBLE,所以schedule的调用将会使当前进程进入睡眠...kthread_create() 并且返回新创建线程的任务描述符 新创建的线程由于执行了 schedule() 调度,此时并没有执行....idle通过kernel_thread创建,并始终运行在内核空间, 负责所有内核线程的调度和管理,它的任务就是管理和调度其他内核线程kernel_thread, 会循环执行一个kthreadd的函数,该函数的作用就是运行

    2.4K20

    Linux的进程线程及调度

    本文为宋宝华《Linux的进程、线程以及调度》学习笔记。 1 进程概念 1.1 进程与线程的定义 操作系统中的经典定义: 进程:资源分配单位。 线程:调度单位。...4) wait() 父进程挂起,等待子进程结束。 5) 孤儿进程与僵尸进程 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。...5) 消息队列 与命令管道类似,但不必考虑打开/关闭管道的复杂操作。消息队列独立于进程而存在。 6) 共享内存 需要通信的进程间共享一块内存进行数据交换。...2 进程线程的实现本质 Linux调度器实际是识别task_struct进行调度。...每个线程都有自己的task_struct,因为每个线程可被CPU调度。多线程间又共享同一进程资源。这两点刚好满足线程的定义。 Linux就是这样用进程实现了线程,所以线程又称为轻量级进程。

    4.1K41
    领券