1
考慮多核CPU中的以下情況,爲了簡單起見,可以堅持使用Linux內核。操作系統中的兩個I/O阻塞進程和鍵盤事件
wait_char()
{
while (1)
{
ch = readchar();
putchar(ch);
}
}
- 我打開兩個終端A和B,並運行在wait_char()代碼中的每個
- 兩個處理A和處理B被阻擋,並把在I/O隊列等待鍵盤中斷來。比方說,A是超前B在該隊列
- 現在我選擇具體終端B和輸入從我的鍵盤鍵
- CPU運行在內核模式中的鍵盤中斷服務程序
- 當然,我會看到輸入鍵在控制檯中回顯。
現在內核怎麼知道它是B(誰在I/O隊列中落後)?
我會猜測,因爲我不是100%確定。 bash將把「fork」和「execv」分配給你輸入的程序。子進程和父進程共享'PD'表中的所有條目,包括'stdin'和'stdout'。如果你在你運行程序A的第一個打開的bash中輸入你的密鑰,並在那裏輸入你的輸入,那麼bash會中斷,這樣操作系統會處理這個輸入。只有程序A和那個bash收到了這個輸入。不是程序B /第二次打開bash。 –