[Linux服务器] linux为什么不是实时操作系统

1025 0
Honkers 2025-4-7 13:27:28 | 显示全部楼层 |阅读模式

Linux为什么不是实时操作系统?

从我们接触Linux系统开始,一直听到的都是它是非实时操作系统,怎么理解这个非实时呢?

我的理解,非实时,就是中断响应不及时,任务调度不及时。那么,真的是这样吗?下面先了解一下,Linux中断响应,是怎样的一个处理流程。

Linux是如何响应中断

ARM中断流程

ARM处理器的中断处理过程,可以分为以下几个步骤:

  1. 中断请求:外部设备或软件可以向ARM处理器发送中断请求信号,以通知处理器有需要处理的事件发生。中断请求可以是硬件中断(如外部设备的输入触发中断)或软件中断(通过软件指令触发中断)。
  2. 中断检测:ARM处理器会周期性地检测中断请求是否发生。这个过程通常在每个指令周期的某个时刻进行,被称为中断检测阶段。如果检测到中断请求,处理器将进入中断处理流程。
  3. 中断响应:当ARM处理器检测到中断请求时,它会保存当前的执行状态,并跳转到中断服务例程(ISR,Interrupt Service Routine)的入口地址。
  4. 中断处理:进入中断服务例程后,ARM处理器将执行特定的中断处理代码,以完成对中断事件的处理。中断服务例程通常包括保存现场、处理中断事件、恢复现场等步骤。
  5. 中断返回:在中断处理完成后,ARM处理器会从中断服务例程返回到原来的执行状态。处理器会恢复之前保存的现场,并继续执行被中断的指令。

我们在上面的第三步,存在一个保存现场的过程,它主要进行以下逻辑:

ARM异常处理:处理器对特定的异常事件进行的处理流程(CPU指导硬件自动完成:四大步三小步)。

一、保存现场(四大步):

  1. 保存CPSR到SPSR_mode

  2. 适当设置 CPSR 对应功能位(三小步):

    a. 切换处理器进入ARM状态:T[5]
    b. 根据需要,禁止中断位:F[6] / I[7]
    c. 根据异常切换到对应的异常模式:M[4:0]

  3. 保存返回地址:把当前 PC 保存到 lr_mode

  4. 设置PC = 存放跳转到对应的异常向量表的固定首地址。

Linux的中断入口

我们关注中断响应和中断处理的过程,以ARM A55为例,Linux内核中,中断向量表在 arch/arm64/kernel/entry.S 中有定义:

  1. /*
  2. * Exception vectors.
  3. */
  4. .pushsection ".entry.text", "ax"
  5. .align 11
  6. SYM_CODE_START(vectors)
  7. kernel_ventry 1, t, 64, sync // Synchronous EL1t
  8. kernel_ventry 1, t, 64, irq // IRQ EL1t
  9. kernel_ventry 1, t, 64, fiq // FIQ EL1h
  10. kernel_ventry 1, t, 64, error // Error EL1t
  11. kernel_ventry 1, h, 64, sync // Synchronous EL1h
  12. kernel_ventry 1, h, 64, irq // IRQ EL1h
  13. kernel_ventry 1, h,
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行