閱讀時間:2015年11月9日
圖片發自簡書App
圖片發自簡書App
該目錄下的代碼文件從功能上可以分為三類,一類是硬件(異常)中斷處理程序文件,一類是系統 調用服務處理程序文件,另一類是進程調度等通用功能文件。參見圖 1.5。我們現在根據這個分類方式, 從實現的功能上進行更詳細的說明。
主要包括兩個代碼文件:asm.s 和 traps.c 文件。asm.s 用于實現大部分硬件異常所引起的中斷的匯 編語言處理過程。而 traps.c 程序則實現了 asm.s 的中斷處理過程中調用的 c 函數。另外幾個硬件中斷 處理程序在文件 system_call.s 和 mm/page.s 中實現。
Linux 中應用程序調用內核的功能是通過中斷調用 int 0x80 進行的,寄存器 eax 中放調用號。因此 該中斷調用被稱為系統調用。實現系統調用的相關文件包括 system_call.s、fork.c、signal.c、sys.c 和 exit.c 文件。
本程序主要實現系統調用(system_call)中斷 int 0x80 的入口處理過程以及信號檢測處理(從代碼 第 80 行開始),同時給出了兩個系統功能的底層接口,分別是 sys_execve 和 sys_fork。還列出了處理 過程類似的協處理器出錯(int 16)、設備不存在(int7)、時鐘中斷(int32)、硬盤中斷(int46)、軟盤中 斷(int38)的中斷處理程序。
sched.c 是內核中有關任務調度函數的程序,其中包括有關調度的基本函數(sleep_on、wakeup、 schedule 等)以及一些簡單的系統調用函數(比如 getpid())。另外 Linus 為了編程的方便,考慮到軟盤 驅動器程序定時的需要,也將操作軟盤的幾個函數放到了這里。