多个进程的多个中断向量表
Multiple interrupt vector tables for multiple processes
我的想法:
假设两个应用程序在 Linux x86(多任务)中并行 运行,并且它们都共享键盘外设。如果我按下键盘上的一个按钮,就会发生中断,控制必须切换到相应的中断例程。中断源的中断例程的起始地址是从已经从 0x0000 定义的中断向量 table 中获得的。但是对于同一个键盘中断,两个应用程序可能需要不同的例程。所以要执行的例程应该取决于它实际上是从哪个任务中断的。
这是否意味着必须为两个进程保留两个单独的中断向量 table,并且在进程打开时间片时由内核加载它们???
用户地址 space 中的进程 运行 无法处理中断,因此没有向量 table。中断向量 table 将驻留在内核地址 space.
在键盘的情况下,内核的向量 table(s) 将处理中断并拾取按键。然后内核将通过系统调用将按键按下的字符发送到用户应用程序。在 linux 中,系统调用很可能被抽象为用户进程正在读取的文件。
多个用户进程(本例中的应用程序)可以读取同一个文件,因此行为取决于 file/file 类设备的具体情况。很有可能它最终会成为进程之间不可预测的 table 竞争,以首先读取数据。实际上,让多个进程同时访问同一个文件通常不是一个好主意。
我的想法:
假设两个应用程序在 Linux x86(多任务)中并行 运行,并且它们都共享键盘外设。如果我按下键盘上的一个按钮,就会发生中断,控制必须切换到相应的中断例程。中断源的中断例程的起始地址是从已经从 0x0000 定义的中断向量 table 中获得的。但是对于同一个键盘中断,两个应用程序可能需要不同的例程。所以要执行的例程应该取决于它实际上是从哪个任务中断的。
这是否意味着必须为两个进程保留两个单独的中断向量 table,并且在进程打开时间片时由内核加载它们???
用户地址 space 中的进程 运行 无法处理中断,因此没有向量 table。中断向量 table 将驻留在内核地址 space.
在键盘的情况下,内核的向量 table(s) 将处理中断并拾取按键。然后内核将通过系统调用将按键按下的字符发送到用户应用程序。在 linux 中,系统调用很可能被抽象为用户进程正在读取的文件。
多个用户进程(本例中的应用程序)可以读取同一个文件,因此行为取决于 file/file 类设备的具体情况。很有可能它最终会成为进程之间不可预测的 table 竞争,以首先读取数据。实际上,让多个进程同时访问同一个文件通常不是一个好主意。