标签: interrupt

内核调度程序如何知道如何抢占进程?

据我了解,内核不是一个进程,而是一组可以从另一个进程的运行时调用的处理程序(或者内核本身通过计时器或类似的东西?)

如果程序遇到一些需要长时间同步处理才能再次开始运行的异常处理程序(例如,遇到需要读取磁盘的页面错误),内核如何识别应该切换上下文?为了实现这一点,似乎需要运行另一个进程?

内核是否会通过间歇性检查处于此状态的进程来生成处理此问题的进程?调用长时间运行的同步处理程序的进程是否让内核知道它应该切换上下文直到处理程序完成(例如磁盘读取完成)?

process scheduling kernel interrupt linux-kernel

2
推荐指数
1
解决办法
1263
查看次数

在 Linux 内核中如何处理键盘按下?

我目前正在学习 Linux 内核和操作系统,虽然我发现了很多关于 IRQ、驱动程序、调度和其他重要操作系统概念的优秀资源,以及与键盘相关的资源,但我很难把它们放在一起Linux 内核如何处理键盘上的按钮按下的全面概述。在这个阶段,我并没有试图理解每一个细节,而是试图将概念联系起来,有点全面。

我想到了以下场景:

  1. 我在一台只有一个处理器的 x64 机器上。
  2. 有几个进程正在运行,特别是 Editor VIM( Process #1) 和 say LibreOffice( Process #2)。
  3. 我在里面VIM按 -a键。但是,当前正在运行的进程是Process #2(VIM下一个计划)。

这就是我想象现在事情会发生的方式:

  1. 键盘通过一系列步骤生成一个电信号(USB 协议编码),并通过 USB 线发送。
  2. 信号由 USB 控制器处理,并通过 PCI-e(可能还有其他控制器/总线?)发送到中断控制器 ( APIC)。处理器的APIC触发器INT Pin。
  3. 处理器切换到Kernel Mode并IRQ-Number从 中请求APIC,它用作Interrupt Descriptor Table Register( IDTR)的偏移量。获取描述符,然后用于获取中断处理程序例程的地址。据我了解,这个中断处理程序最初是由键盘驱动程序注册的?
  4. 中断处理程序(在本例中为键盘处理程序)被调用。

这让我想到了我的主要问题:中断处理程序通过哪种机制将按下的键传达给正确的进程 ( Process #1)?它是否真的这样做呢,还是简单的写(通过提供一个被按下的按键到缓冲区char-device?),在某时刻为只读到一个进程(目前“附加”到Process #1)?我不明白什么时候 …

drivers keyboard interrupt linux-kernel

2
推荐指数
1
解决办法
2530
查看次数

关于/proc/interrupts,MIS和ERR是什么?

查看 /proc/interrupts 下面的输出分别在第 26 行和第 27 行显示了 ERR 和 MIS。这些是什么?为什么它们有 CPU0 的计数(尽管为零)但没有其他计数,也没有描述?我认为它们实际上与 PIC 本身错误有关吗?

感谢 ErikF 的回复。为什么这些中断只出现在CPU0上?是否是因为如果 PIC/中断系统出现错误,只有该 CPU 才会收到中断?

    1.  username@domain:/proc$ cat interrupts  
    2.             CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7  
    3.    0:    1221738          0          0          0          0          0          0          0   IO-APIC   2-edge      timer  
    4.    1:          9          0          0          0          0          0          0          0   IO-APIC   1-edge      i8042  
    5.    6:          3          0          0          0          0          0          0          0   IO-APIC   6-edge      floppy  
    6.    8:          0          0          0          0          0          0 …
Run Code Online (Sandbox Code Playgroud)

linux interrupt proc

1
推荐指数
1
解决办法
2308
查看次数

中断是否用于表示输出已准备好或输入已完成?

操作系统概念 说:

在 I/O 期间,各种设备控制器在准备好服务时会引发中断。这些中断表示

  • 该输出已完成,或
  • 输入数据可用,或
  • 检测到故障。

中断是否用于表示输出已准备好或输入已完成?

如果不是,它们是否需要以其他方式表示?

io interrupt

0
推荐指数
1
解决办法
87
查看次数

标签 统计

interrupt ×4

linux-kernel ×2

drivers ×1

io ×1

kernel ×1

keyboard ×1

linux ×1

proc ×1

process ×1

scheduling ×1