2013-04-23 22 views
0

「操作系統設計和組態」第351頁。 鍵盤中斷服務程序是kbd_interrupt(行15335)釋放。它調用scode從鍵盤控制器芯片獲取掃描代碼。 ...所有原始掃描代碼都放置在循環緩衝區中,並引發當前控制檯的tp-> tty _events標誌(15350行)。 ...並且在此之後,kbd_interrupt立即返回。 ...一個繼續行13795的語句使主迴路的一個新的迭代立即開始,在行13764.當執行轉移到循環的控制檯設備巾> TTY _events標誌的頂部,現在被發現是集,和KB _read(線15360),特定於設備的程序中,是使用在控制檯的TTY結構的TP-> TTY _devread字段指針調用。 Kb_read從鍵盤的循環緩衝區讀取掃描碼,並將ASCII碼放入本地緩衝區。在minix3的終端驅動程序keyboard.c中,爲什麼ibuf存在?

我覺得IBUF水溼有一個以上的掃描碼。所以我認爲一個char變量就足夠了。爲什麼通告ibuf存在?

回答

1

我給你的問題必須是:爲什麼你認爲你一次只能在緩衝區中有一個掃描碼?

中斷與線程代碼非常相似,因爲您不知道代碼的位執行順序。只要按下某個鍵,就會觸發此特定中斷,而不管其他代碼是否可能是(當然假設中斷沒有被禁用)。

這很可能是因爲您的掃描代碼可以從緩存中提取之前得到快速連續兩個中斷。

Minix3 source code允許這被認爲是足夠大,以處理被按壓的鍵的可能性快於它們可以被提取一個32字節的緩衝器。如果緩衝區填滿,則後續按鍵丟失(鍵盤硬件被選通以提取鍵碼,但不會將其添加到緩衝區中)。

+0

在MINIX 3,內核更改中斷到HARD_INT消息時,終端驅動程序處理的中斷作爲一個消息。 – ling 2013-04-23 09:15:06

相關問題