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

万字整理 | 深入理解Linux时间子系统

低精度定时器是内核在早期就有的定时器接口,它的实现是靠调度器tick来驱动的。...所以用调度器tick来驱动低精度定时器是很合适的,tick的精度能满足低精度定时器的精度。...也就是说,对于只有低精度定时器的系统来说,是调度器tick驱动低精度定时器;对于有高精度定时器的系统来说,是高精度定时器驱动调度器tick,这个调度器tick再去驱动低精度定时器。...如果我们把1纳秒1次中断改为1微妙,1微妙1次中断不就可以大大减少中断的数量嘛,但是这样定时器的精度就是1微妙,达不到1纳秒的要求了。所以对于高精度定时器,底层的定时器硬件就只能是一次性的了。...但是我们的调度器tick也需要定时器中断,而且是周期性的,怎么办?

1.6K20

从零手写操作系统之RVOS硬件定时器-05

它是Machine Timer(机器计时器)的缩写。 mtime寄存器通常由硬件提供,用于跟踪系统运行的时间。它的值会不断增加,可以用于测量程序的执行时间、进行时间相关的操作和调度等。...在RISC-V中,mtime寄存器是一个64位的寄存器,可用于测量长时间间隔,通常以时钟周期或计时器滴答数的形式表示。它的精度和计时精度取决于硬件实现和操作系统的支持。...在操作系统或应用程序中,可以使用mtime寄存器来实现计时器、延时函数、性能统计等功能。通过读取mtime寄存器的值,可以获得当前的计时器数值,进而进行时间计算和处理。...通过使用mtimecmp寄存器,程序可以实现定时器相关的功能,如定时任务调度、时间片轮转调度、精确延时等。它为程序提供了一种基于时间的触发机制,使得程序能够按照预定的时间间隔执行特定的操作。...因此,以上描述仅为一般情况下的操作流程,具体的实现方式需要参考所使用的平台和系统的文档或相关编程接口。

49830
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux时间子系统(下)

    计时器Counter,RTC或者定时器虽然也可以实现计时器的目的,但是由于精度太差,所以系统都有专门的计时器硬件。...计时器一般都是一个整数寄存器,以特定的时间间隔增长,比如说1纳秒增加1,这样两次读它的值就可以算出其中的时间差,而且精度很高。...timekeeping模块 所谓timekeeping,如字面意思,就是让时间持续更新下去。 linux内核中维护了有三种时间概念: Wall time 现实时间。...高精度定时器和低精度定时器: 传统的低精度定时器,是指让硬件定时器每隔固定时间(1ms或者10ms)产生一次中断,这种操作的默认语义就是允许产生ms级的延迟,这种时钟中断频率作为任务调度用途来说还可以接受...同时为了满足 任务调度的需求和原来系统的对 周期性时钟中断的依赖,专门安排了一个hrtimer来按照(CONFIG_CPU_HZ)规定的频率来对硬件定时器进行设置,从而达到周期性产生时钟中断的效果。

    45010

    系统解读CPU 隔离:Full Dynticks 深探

    然而,停止定时器中断并非易事,因为许多 kernel 组件依赖周期性事件,主要是定时器、定时和调度程序。但有一个例外:当 CPU 空闲时,不需要这种 100~1000 Hz 频率的中断。...时钟中断服务的替代方案 如前文所述,定时的一次性事件(计时器回调)或周期性事件(调度程序、计时、RCU 等)的几个子系统需要时钟中断 。...未绑定的计时器就是这样的情况,即未固定到任何 CPU 的计时器。...调度程序时的时钟中断 调度器需要持续收集关于本地和全局任务负载的多项统计信息,从而使其内部状态保持最新。...其他子系统也可能会请求定期 Tick,从而在某些情况下保持运行:posix cpu 计时器、perf 事件等。我们将进一步探讨这些细节。

    86730

    Mirage:基于GPU张量程序的多级超级优化器

    为了优化输入的张量程序,现有的框架(如PyTorch和TensorFlow)使用手动设计的规则将张量程序映射到专家编写的GPU内核。...这些方法通常分为两类:基于算法和调度分离的思想,通过固定算法优化张量程序的调度(如Halide、TVM和Ansor),以及考虑代数转换的方法,这些方法利用不同算法之间的数学等价性(如TASO、Grappler...现在,我们介绍Mirage,这是首个针对张量程序的多级超级优化器,由卡内基梅隆大学的研究团队开发。 Mirage能够自动发现和验证需要代数转换、调度转换和新自定义内核联合优化的复杂张量程序优化。...图中比较了Mirage和现有的张量程序优化器在12个深度神经网络(DNN)基准测试上的性能,这些基准测试使用了两种不同的批次大小。所有系统都使用半精度浮点数来处理所有DNN基准测试。...Triton是一个基于调度的优化器,用于生成高性能的张量程序,并已部署在现有的DNN系统中,其性能优于其他基于调度的优化器。

    26010

    操作系统如何在多处理器间切换应用程序的执行

    如果有写过多线程的小伙伴知道,如果两个程序同时向一片区域中写入数据,可能会导致写入数据交叉错乱的情况,这是因为操作系统在运行程序时,为了能够让每个进程资源都充分被调度,会定期实施切换进程操作,本文旨在从底层源码介绍操作系统如何在内核态中切换应用程序...,定义了三个返回数字: 返回2说明是计时器定期发送的中断,返回1说明是其他设备的中断,0说明还没有定义,而在usertrap函数的下面会判断which_dev是否为2,如果为2会进入yield函数: 在...CPU进行资源调度时,会通过计时器发送中断,使得运行进程进入yield函数: 在yield函数中,会获取当前运行进程,获得锁,防止其他进程对当前资源进行修改操作,之后会将对应的状态state从RUNNING...切换为RUNNABLE,之后进入sched函数: 在这个函数中,会判断当前进程是否持有锁、是否为运行态、是否得到了计时器中断等一系列操作,这些判断的作用就是确保是由于计时器中断进入的该程序,判断成功会调用...函数切换进程上下文信息,将当前进程指向这个即将运行的进程,最后释放锁,也就完成了进程信息的设置 而当操作系统发出定时器中断后,内核中又会发生上述的当前进程的资源调度,再次返回到当前的swtch函数,最后把进程资源调度处获得的锁释放

    10310

    Linux调度系统全景指南(中篇)

    如果这样的中断发生在内核中,本次中断返回是不会引起调度的,而要到最初使CPU从用户空间进入内核空间的那次系统调用或中断(异常)返回时才会发生调度。 另外一个问题是优先级反转。...用户抢占在以下情况下产生: 从系统调用返回用户空间 从中断处理程序返回用户空间 内核抢占会发生在: 当从中断处理程序返回内核空间的时候,且当时内核具有可抢占性; 当内核代码再一次具有可抢占性的时候...(如:spin_unlock时); 如果内核中的任务显式的调用schedule(); 如果内核中的任务阻塞。...timerwheel实现依赖基于系统tick周期性中断,高精度时钟定时器不在依赖系统的tick中断,而是基于事件触发,内核启动后会进行从低精度模式到高精度时钟模式的切换,hrtimer模拟的tick中断将驱动传统的低精度定时器系统...hrtimer采用红黑树进行高精度定时器的管理, 通过将高精度时钟硬件的下次中断触发时间设置为红黑树中最早到期的 Timer 的时间,时钟到期后从红黑树中得到下一个 Timer 的到期时间,并设置硬件,

    1.7K21

    英飞凌TriCore架构的MCU系统定时器

    摘要 本篇文档主要用来介绍英飞凌基于AURIX-2G TriCore 1.6.2架构的 TC3xx系列STM定时器的使用 STM介绍 STM(System Timer) 是为高精度和长周期的全局系统定时应用而设计...由于计时器会在两次加载操作之间继续计数,因此读取的两个值是有可能不一致(由于可能从定时器的低部分溢出到两个读操作之间的高部分)。所以为了能够同时连续独处STM的值,采取捕获寄存器(CAP)的办法。...因此,CAP将定时器的高半部分保持在完全相同的位置读取低半部分的时间。然后,第二个读取操作将读取CAP的内容以获取完整的计时器值。...TC33x上移植FreeRTOS,就是基于STM来作为系统的内核心跳SysTick。...在移植好的工程里创建任务,开启调度器,就可以了,这里主要要弄清楚这个STM是怎么和FreeRTOS关联起来的,以及如何创建任务。包括任务间的交互,数据传递等。

    44610

    系统解读CPU 隔离:简介

    计时器和中断在很短的时间内(通常以微秒计)执行;许多内核线程,其中一些是工作队列,执行时间也不应过长,尤其是它们的 CPU 时间通过调度程序进行平衡的时候。...定时器中断 让我们从定时器中断出发,更详细地探索内核管理的世界。定时器作为内核的核心组件,过去一直是难以消除的干扰源。...它执行多项工作: 运行过期的通用计时器回调 跳过 posix CPU 定时器,并运行已经过期的定时器 计时:维护内部时钟 (jiffies) 和外部时钟 (gettimeofday()) 调度程序:维护内部状态...其行为如下图所示: 图 1:周期计时器中断的实现 从图中可以看出,中断会盲目触发并一直中断 CPU,无论 CPU 是在内核空间、用户空间还是处于空闲状态。...此后,我们工作负载上的情况就如下图所示: 图 2:dynticks- 空闲计时器中断的实现 请记住:对于以无抖动 CPU 为目标的工作负载,我们更希望在无中断的情况下运行实际任务。

    1.2K40

    一文搞懂 | Linux 时间子系统

    每次运行时 counter 不再是加1,而是加 10,这样就不会丢失时间精度。...arm 没有对精度做出特别要求,不过最低的建议值为24小时, 误差不超过 10s。 从 0 开始计数,正常情况下每一个时钟脉冲加1,节能模式下除外。...clocksource提供了一个单调增加的计时器产生tick,为timeline提供时钟源。timekeeper是内核提供时间服务的基础模块,负责选择并维护最优的clocksource。...低精度timer和高精度timer都是基于tick device生成的定时器设备,关于它们的事件和周期信号的关系在上面的图中有一个大体的介绍。 最上层是linux应用层。...基于timekeeping设备的是时间管理的库time lib,基于定时器设备的是定时管理的库timer lib。

    2.3K31

    操作系统基础-CPU虚拟化

    CPU中的通用寄存器,如%rax CPU中的特殊寄存器,如: 程序计数器(Program Counter/PC),或叫做指令指针(Instruction Pointer/IP) 栈指针(stack pointer...一些早期的系统如Mac OS采用了合作式的调度方案,长期运行的进程需要周期性地让出CPU,比如在循环体中加入一个yield()之类的系统调用,允许操作系统调度其他进程。...要解决这个问题,操作系统仍然需要硬件的协助。硬件中有个计时器可以编程为每隔一定的时间(比如每十毫秒)就发起一个时钟中断,它会挂起当前运行的进程,跳转到操作系统预先设置的中断处理函数中。...Direct Limited Execution 现在可以完整的描述这个协议了 OS启动(内核模式) 硬件 初始化异常处理函数 记下异常处理函数的内存地址 启动中断计时器 启动计时器,每隔一段时间中断...跳转到进程B的程序计时器(Program Counter) 进程B运行 注意: 上文中有两组寄存器的保存/还原操作,第一组是用户态的寄存器,第二组是内核态的寄存器 内核处理完系统的调用后,也可以选择不切换进程

    1.6K40

    Whats a CPU to do when it has nothing to do

    当前内核中有两个调速器,分别称为“菜单”和“梯形图”。它们在不同的情况下使用,但是它们都尝试做大致相同的事情:跟踪CPU空闲时的系统状态以及空闲时间。...这是一个由CPU调度程序运行的计时器,用于分时CPU:如果要在单个CPU上运行多个作业,则每个作业只能运行一段时间,然后定期搁置另一份工作。...此刻度不需要在空闲的CPU上运行,因为没有作业可以共享CPU。此外,如果允许滴答声可以在其他空闲的CPU上运行,则它将通过限制CPU可能保持空闲状态的时间来防止调控器选择深度空闲状态。...因此,在4.16及更低版本的内核中,调度程序在调用调控器之前禁用了滴答。...当CPU被中断唤醒时,调度程序将决定是否有工作要做,如果有, 如果调速器预测到很长的空闲时间,并且闲置时间变长,则调速器“获胜”:CPU将进入深度空闲状态,并节省了电源。

    91211

    处理器调度及算法

    当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。...在时间片轮转算法中,时间片的大小对系统性能有很大的影响,如选择很小的时间片将有利于短作业,因为它能较快地完成,但会频繁地发生中断、进程上下文的切换,从而增加系统的开销;反之,如选择太长的时间片,使得每个进程都能在一个时间片内完成...该算法要求在系统中保持一个实时任务就绪队列,该队列按各任务截止时间的早晚排序;当然,具有最早截止时间的任务排在队列的最前面。...更重要的是,定时机制连同一些更可见的内核活动(如检查超时)来驱使进程切换。...常用的定时器包括:实时时钟(RTC)、时间戳计时器(TSC)、可编程间隔定时器(PIT)、CPU本地定时器、高精度事件定时器(HPET)、ACPI电源管理定时器。

    1.4K20

    【Linux】:进程信号(详谈信号捕捉 & OS 运行)

    在一些情况下,进程调度发生时,当前进程可能仍然继续运行,不需要进行实际的进程切换 本质:让当前进程的时间片进行 --,每个进程执行一段时间后,操作系统会中断其执行并切换到下一个进程,直到进程的时间片耗尽...每当时钟计时器达到预定时间间隔(如10毫秒),就会产生一次中断,CPU会暂停当前执行的程序,转而执行中断处理程序。 操作系统的中断处理: 当时钟中断发生时,操作系统会进行中断处理。...如果时间片已经用尽,操作系统会选择一个新的进程(根据调度算法,如时间片轮转、优先级调度等)并将控制权转移给该进程。...操作系统的内核保持不变,它通过一组管理机制(如调度器、内存管理、进程管理等)来控制所有进程的执行。...在进程切换时,操作系统通过保存和恢复每个进程的上下文(如程序计数器、寄存器等),让不同的进程能够继续执行。 操作系统保持对硬件和资源的控制,保证切换进程的过程对系统外部是透明的。 4.

    9010

    Java获取系统时间的正确方式

    前言 如果代码中获取时间使用的System.currentTimeMillis();,这样在单线程的情况下完全没问题,但是如果是多线程比如说后端提供的数据服务,那么就会出现严重的性能问题,导致服务不可用...简单来讲就是: 调用gettimeofday()需要从用户态切换到内核态; gettimeofday()的表现受Linux系统的计时器(时钟源)影响,在HPET计时器下性能尤其差; 系统只有一个全局时钟源...HPET计时器性能较差的原因是会将所有对时间戳的请求串行执行。 TSC计时器性能较好,因为有专用的寄存器来保存时间戳。...缺点是可能不稳定,因为它是纯硬件的计时器,频率可变(与处理器的CLK信号有关)。 处理方法 如何解决这个问题? 最常见的办法是用单个调度线程来按毫秒更新时间戳,相当于维护一个全局缓存。...SystemClock.millisClock().now()输出当前时间,有一定精度上问题,得到是时间获取上效率。

    1.1K20

    zephyr笔记 2.2.1 内核时钟

    32位硬件时钟是一个高精度计数器,可以跟踪若干个周期时间,但这个周期不能指定单位。一个周期的持续时间取决于内核使用的电路板硬件,通常以纳秒为单位进行测量。...大多数内核基于时间的服务都使用系统时钟,包括内核计时器对象和其他内核对象类型支持的超时。 为方便起见,内核的API允许以毫秒为单位指定持续时间,并自动将它们转换为相应的tick数。...注意:配置较小的时间间隔允许更细粒度的时序,但也会增加内核处理时钟中断所需的工作量,因为它们会更频繁地发生。 将滴答持续时间设置为零将禁用内核时钟及其相关服务。...,不需要高精度,如定时器对象或线程睡眠。...注意:硬件时钟的高频率与32位数的大小紧密相关,意味着在进行长时间高精度测量时必须考虑计数器翻转的情况。

    94220

    Nano Transport:一种硬件实现的用于SmartNIC的低延迟、可编程传输层

    在某些情况下,计时器可能会在后台线程检查计时器之后立即超时,在这种情况下,直到后台线程循环回到计时器时才会触发超时事件。...然而,请注意,即使在这种情况下,计时器也会在有限的时间量内超时,这由系统中的最大计时器/消息数量决定。这个简单的设计符合我们的要求。...优先级调度器的实现利用了这样一个事实,即大多数消息都很小(小于1BDP),因此不需要调度;在任何给定时间只需要调度少数消息。因此,调度程序外部变量在寄存器中维护消息状态,以便可以同时对它们进行比较。...除了调度程序外,Homa还使用两个双端口内存原语(§3.2),如Algorithm5所示。...NanoTransport的延迟比Homa Linux Kernel Module报告的4.8us低三个数量级[52]。通过Linux网络堆栈的延迟对中断处理开销和OS线程调度决策非常敏感。

    2K30

    深入理解Linux内核之进程睡眠(下)

    do_nanosleep函数是睡眠的核心实现:首先设置任务的状态为可中断的睡眠状态,然后开启了之前设置的高精度定时器,随即调用freezable_schedule进行真正的睡眠。...总结:处于用户态的任务,如果想要睡眠一段时间必须向内核请求服务(如调用clock_nanosleep系统调用),内核中会设置一个高精度定时器,来记录要睡眠的任务,然后设置任务状态为可中断的睡眠状态,紧接着发生主动调度...5.内核态睡眠 当任务处于内核态时,有时候也需要睡眠一段时间,不像任务处于用户态需要发生系统调用来请求内核进行睡眠,在内核态可以直接调用睡眠函数。...当然,内核态中,睡眠有两种场景:一种是睡眠特定的时间的延迟操作(唤醒条件为超时),一种是等待特定条件满足(如IO读写完成,可睡眠的锁被释放等)。...(timeout->task); //唤醒其管理的任务 可以看到,msleep实现睡眠也是通过定时器,首先设置当前任务状态为不可中断睡眠,然后设置定时器超时时间为传递的ms级延迟转换的jiffies

    2.2K20

    AIoT应用创新大赛-植物生长分析仪

    一、背景介绍 传统的豆芽生长设备,只是完成豆芽的生长过程。相对于其他市面上的自动豆芽生长器,它只是简单的进行循环浇水,保持湿度,保持恒温。然后用遮光布遮光,持续到豆芽长成豆苗。...,既具备高频率(最高主频600M)、高处理性能,也具备中断响应迅速、实时性高的特点。...RS485(Modbus协议)预热时间2min(可用)、10min(最大精度)数据更新间隔2s 4.2.4 ESP8266模组 WIFI模块.PNG WIFI模块参数.PNG ESP8266模块小熊派开发板套件提供的用于通过...TencentOS tiny 提供精简的 RTOS 内核,内核组件可裁剪可配置,可快速移植到多种主流 MCU (如NXP Arm Cortex-M 全系列)及模组芯片上。...而且,基于RTOS内核提供了丰富的物联网组件,内部集成主流物联网协议栈(如 CoAP/MQTT/TLS/DTLS/LoRaWAN/NB-IoT 等),可助力物联网终端设备及业务快速接入腾讯云物联网平台。

    80541

    深入理解Linux内核之进程睡眠

    睡眠的内核原理 睡眠都是主动发生调度,即主动调用主调度器。...如延迟睡眠场景,内核将即将睡眠的任务记录在定时器相关的数据结构中;可睡眠的信号量场景中,内核将即将睡眠的任务加入到信号量的相关链表中。...do_nanosleep函数是睡眠的核心实现:首先设置任务的状态为可中断的睡眠状态,然后开启了之前设置的高精度定时器,随即调用freezable_schedule进行真正的睡眠。...总结:处于用户态的任务,如果想要睡眠一段时间必须向内核请求服务(如调用clock_nanosleep系统调用),内核中会设置一个高精度定时器,来记录要睡眠的任务,然后设置任务状态为可中断的睡眠状态,紧接着发生主动调度...当然,内核态中,睡眠有两种场景:一种是睡眠特定的时间的延迟操作(唤醒条件为超时),一种是等待特定条件满足(如IO读写完成,可睡眠的锁被释放等)。

    2.9K40
    领券