OS中的两个I / O阻塞进程和击键事件

时间:2017-02-14 15:28:02

标签: linux keyboard operating-system interrupt

在多核CPU中考虑以下情况,为简单起见,请坚持使用linux内核。

wait_char()
{
   while (1)
   {
       ch = readchar();
       putchar(ch);
   }
}
  1. 我打开两个终端A和B,并在每个
  2. 中运行wait_char()代码
  3. 进程A和进程B都被阻塞并放入I / O队列,等待键盘中断到来。可以说,A在该队列中位于B之前
  4. 现在我专门选择了终端B并从键盘输入了一个键
  5. CPU在内核模式下运行键盘中断服务程序
  6. 当然,我会看到输入的密钥在控制台中回显。
  7. 现在内核是如何判断出B(谁是I / O队列中的后面人员)?

1 个答案:

答案 0 :(得分:0)

进程不在队列中等待I / O.当您在终端B上输入内容时,设备驱动程序知道它来自终端B.设备很可能会触发中断。然后,操作系统将数据发送给在终端B上有待读取请求的任何人。

如果您有两个进程从终端B读取,则随机获取该角色。