【文魁大腦讀書會(huì)】26/60馬帥《理解linux內(nèi)核》

閱讀時(shí)間:2015年11月9日

圖片發(fā)自簡書App

圖片發(fā)自簡書App


該目錄下的代碼文件從功能上可以分為三類,一類是硬件(異常)中斷處理程序文件,一類是系統(tǒng) 調(diào)用服務(wù)處理程序文件,另一類是進(jìn)程調(diào)度等通用功能文件。參見圖 1.5。我們現(xiàn)在根據(jù)這個(gè)分類方式, 從實(shí)現(xiàn)的功能上進(jìn)行更詳細(xì)的說明。

主要包括兩個(gè)代碼文件:asm.s 和 traps.c 文件。asm.s 用于實(shí)現(xiàn)大部分硬件異常所引起的中斷的匯 編語言處理過程。而 traps.c 程序則實(shí)現(xiàn)了 asm.s 的中斷處理過程中調(diào)用的 c 函數(shù)。另外幾個(gè)硬件中斷 處理程序在文件 system_call.s 和 mm/page.s 中實(shí)現(xiàn)。

Linux 中應(yīng)用程序調(diào)用內(nèi)核的功能是通過中斷調(diào)用 int 0x80 進(jìn)行的,寄存器 eax 中放調(diào)用號(hào)。因此 該中斷調(diào)用被稱為系統(tǒng)調(diào)用。實(shí)現(xiàn)系統(tǒng)調(diào)用的相關(guān)文件包括 system_call.s、fork.c、signal.c、sys.c 和 exit.c 文件。

本程序主要實(shí)現(xiàn)系統(tǒng)調(diào)用(system_call)中斷 int 0x80 的入口處理過程以及信號(hào)檢測處理(從代碼 第 80 行開始),同時(shí)給出了兩個(gè)系統(tǒng)功能的底層接口,分別是 sys_execve 和 sys_fork。還列出了處理 過程類似的協(xié)處理器出錯(cuò)(int 16)、設(shè)備不存在(int7)、時(shí)鐘中斷(int32)、硬盤中斷(int46)、軟盤中 斷(int38)的中斷處理程序。

sched.c 是內(nèi)核中有關(guān)任務(wù)調(diào)度函數(shù)的程序,其中包括有關(guān)調(diào)度的基本函數(shù)(sleep_on、wakeup、 schedule 等)以及一些簡單的系統(tǒng)調(diào)用函數(shù)(比如 getpid())。另外 Linus 為了編程的方便,考慮到軟盤 驅(qū)動(dòng)器程序定時(shí)的需要,也將操作軟盤的幾個(gè)函數(shù)放到了這里。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容