John Walker Asked: 2023-01-09 02:47:19 +0800 CST2023-01-09 02:47:19 +0800 CST 2023-01-09 02:47:19 +0800 CST 该进程如何以编程方式连接到中断? 772 我知道中断是发送给内核要求处理的信号。在某些情况下,我们有一个物理设备,例如带有驱动程序的键盘,该驱动程序将进程与中断(按下键)连接起来。但是定时器或其他没有物理设备的东西呢?也许我对这一切的想法是错误的,如果有人纠正我,我会很高兴。 process 2 个回答 Voted user10489 2023-01-09T06:16:24+08:002023-01-09T06:16:24+08:00 从用户空间来看,中断的道德等价物是一个信号。一个进程可以设置一个信号处理程序,它在功能上与中断处理程序极为相似。大多数计时器都是通过 SIGALARM 以这种方式处理的。从历史上看,sleep() 可以通过警报或等待的系统调用来实现。 一些键盘 I/O 是用信号处理的。例如,ctrl-c生成 SIGINT (2),但大多数键盘 I/O 不是这样完成的。 大多数设备,如键盘,都作为文件处理。通常,进程要么等待 I/O 调用 read() 完成(然后基本上进入休眠状态,直到内核调度程序看到 I/O 已完成并将其唤醒),或者轮询打开的文件以查找设备在做其他事情之间,或者它给内核一个文件列表并调用 poll() 或类似的东西来等待其中一个完成 I/O 或超时到期。 此外,键盘(技术上,tty)I/O 可以使用 termios 库专门处理,它可以调整内核缓冲用户输入的方式,以便 read() 返回完整的行或单个字符或字符块超时。(termios 和 stty 也可以调整或禁用生成 3-4 键盘可生成信号的键。) 有多种机制可以在一个流程中进行交互。信号可以中断 poll(),而 poll() 和 read() 等系统调用可以在信号处理程序之后中断或恢复。 Best Answer MC68020 2023-01-10T03:30:40+08:002023-01-10T03:30:40+08:00 从一个角度来看:在 Linux 系统下运行的任何代码段(包括微代码)都或多或少是某些硬件中断的直接结果。 从相反的角度来看:除了内核在其硬件中断处理程序中的内部烹饪之外,没有硬件中断会立即运行任何其他东西。有趣的部分(从用户态的角度理解)将被推迟到稍后由某个内核线程处理。 什么负责选择应该选择哪个线程运行?: 调度器! 这是对您的问题可能的理解的第一个答案:调度程序是将进程链接到中断的组件,因为: 它最终将启动内核线程(ksoftirqd 或任何 irq 专用 ktrhead 是系统启动 irq 线程)来处理不同的部分,这些部分会顺便标记一些事件挂起, 然后它将最终启动正在等待此特定事件的休眠任务。
从用户空间来看,中断的道德等价物是一个信号。一个进程可以设置一个信号处理程序,它在功能上与中断处理程序极为相似。大多数计时器都是通过 SIGALARM 以这种方式处理的。从历史上看,sleep() 可以通过警报或等待的系统调用来实现。
一些键盘 I/O 是用信号处理的。例如,ctrl-c生成 SIGINT (2),但大多数键盘 I/O 不是这样完成的。
大多数设备,如键盘,都作为文件处理。通常,进程要么等待 I/O 调用 read() 完成(然后基本上进入休眠状态,直到内核调度程序看到 I/O 已完成并将其唤醒),或者轮询打开的文件以查找设备在做其他事情之间,或者它给内核一个文件列表并调用 poll() 或类似的东西来等待其中一个完成 I/O 或超时到期。
此外,键盘(技术上,tty)I/O 可以使用 termios 库专门处理,它可以调整内核缓冲用户输入的方式,以便 read() 返回完整的行或单个字符或字符块超时。(termios 和 stty 也可以调整或禁用生成 3-4 键盘可生成信号的键。)
有多种机制可以在一个流程中进行交互。信号可以中断 poll(),而 poll() 和 read() 等系统调用可以在信号处理程序之后中断或恢复。
从一个角度来看:在 Linux 系统下运行的任何代码段(包括微代码)都或多或少是某些硬件中断的直接结果。
从相反的角度来看:除了内核在其硬件中断处理程序中的内部烹饪之外,没有硬件中断会立即运行任何其他东西。有趣的部分(从用户态的角度理解)将被推迟到稍后由某个内核线程处理。
什么负责选择应该选择哪个线程运行?: 调度器!
这是对您的问题可能的理解的第一个答案:调度程序是将进程链接到中断的组件,因为: