自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

操作系統(tǒng)是怎樣一步步接收鍵盤按鍵的?

系統(tǒng) 其他OS
在類Unix系統(tǒng)中,驅(qū)動程序會把字母a寫到device file中,也就是設(shè)備文件,你可以像訪問普通文件那樣直接訪問設(shè)備文件,但它并不是真正的文件。

大家好,我是島主小風(fēng)哥,你有沒有想過,按下鍵盤按鍵后,相應(yīng)的字符是怎么一步步顯示在屏幕上的?

首先來看硬件部分,你至少應(yīng)該能想到必須得有鍵盤和CPU:

圖片圖片

之后呢,cpu是怎么知道有鍵盤按下呢?

為了讓鍵盤按下按鍵后能通知到CPU,需要借助鍵盤控制器,keyboard controller,這當(dāng)然也是硬件:

圖片圖片

當(dāng)按下按鍵時,鍵盤控制器能檢測到鍵盤按鍵:

圖片圖片

接著鍵盤控制器向CPU發(fā)出中斷:

圖片圖片

當(dāng)CPU接收到中斷信號后暫停當(dāng)然正在執(zhí)行的代碼,在此之前也許CPU正在執(zhí)行應(yīng)用程序的代碼,表現(xiàn)出來的就是你的程序就在運行:

圖片圖片

當(dāng)然也有可能CPU正在執(zhí)行操作系統(tǒng)代碼,但不管怎樣,CPU接收到中斷信號后將暫停執(zhí)行當(dāng)前的指令然后跳轉(zhuǎn)到一個提前配置好的地址,這個地址指向的就是內(nèi)核中的處理函數(shù),假設(shè)這個函數(shù)叫做do_irq()。

圖片圖片

中斷處理函數(shù)do_irq發(fā)現(xiàn)中斷來自鍵盤,因此開始調(diào)用能處理鍵盤按鍵的內(nèi)核代碼,這段內(nèi)核代碼就是所謂的驅(qū)動,driver。

圖片圖片

驅(qū)動程序處理鍵盤按鍵后發(fā)現(xiàn)按下的是字母a,然后呢?

在類Unix系統(tǒng)中,驅(qū)動程序會把字母a寫到device file中,也就是設(shè)備文件,你可以像訪問普通文件那樣直接訪問設(shè)備文件,但它并不是真正的文件。

圖片圖片

現(xiàn)在,鍵盤按鍵已經(jīng)從硬件世界來到的了軟件世界,也就是內(nèi)核中。

還是以Unix系統(tǒng)為例,在Unix中負(fù)責(zé)窗體管理的叫做X Window System,該系統(tǒng)由X server以及X client組成,圖形應(yīng)用程序就是x client,接收來自x server的鍵盤消息,那么x server又是從哪里知道鍵盤消息呢?答案就是剛才提到的設(shè)備文件:

圖片圖片

接下來X server會把鍵盤按鍵消息發(fā)送給正在獲取焦點的窗體,怎么發(fā)送呢?利用的就是進(jìn)程間通信技術(shù),IPC:

圖片圖片

這樣,我們的程序就可以獲得鍵盤按鍵了。

責(zé)任編輯:武曉燕 來源: 碼農(nóng)的荒島求生
相關(guān)推薦

2025-04-03 01:45:00

2025-03-28 09:39:15

CPU指令信號

2024-09-30 09:56:59

2024-09-12 10:04:06

內(nèi)存程序系統(tǒng)

2024-06-27 08:30:36

內(nèi)存擴容堆區(qū)

2024-08-30 08:30:29

CPU操作系統(tǒng)寄存器

2017-01-19 21:08:33

iOS路由構(gòu)建

2018-07-13 15:36:52

2024-08-06 09:29:54

程序機器指令字符串

2019-03-05 14:09:27

Docker存儲容器

2019-07-09 15:23:22

Docker存儲驅(qū)動

2018-12-24 10:04:06

Docker存儲驅(qū)動

2021-03-15 09:20:15

微軟IBM研究院

2025-04-09 08:45:00

操作系統(tǒng)進(jìn)程線程

2010-03-04 16:28:17

Android核心代碼

2016-11-02 18:54:01

javascript

2017-12-25 11:50:57

LinuxArch Linux

2011-05-10 10:28:55

2020-12-24 11:19:55

JavaMapHashMap

2018-06-11 15:30:12

點贊
收藏

51CTO技術(shù)棧公眾號