歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 內核筆記1

內核筆記1

日期:2017/3/3 12:39:49   编辑:Linux技術

此筆記來源於趙炯先生編著的《Linux內核注釋》一書

*注:

早期的內核0.11版本,包括以下幾個文件:

bootimage.Z -具有美國鍵盤代碼的壓縮啟動映像文件

rootimage.Z -以1200kb壓縮的根文件系統映像文件

linux-0.11.tar.Z -內核源代碼文件

as86.tar.Z -linux bruce evans 二進制執行文件,是16位的匯編程序和裝入程序

ISTALL-0.11 -更新過的安裝信息文件*

Linux內核模式和體系結構

一個完整可用的操作系統主要由四個部分組成:硬件、操作系統內核、操作系統服務和用戶應用程序。目前操作系統內核的結構模式分為整體式的單內核和層次式的微內核,0.11采用了單內核。單內核代碼結構緊湊、執行速度快但是層次結構性不強。

單內核模式的內核粗略的分為三層:

1)調用服務的主程序層

2)執行系統調用的服務層

3)支持系統調用的底層函數

在單內核模式中操作系統提供服務的流程為:應用主程序調用指定參數,使cpu從用戶態(user mode)切換到核心態(kernal mode);然後系統根據參數調用不同的服務程序;服務程序再調用底層函數完成特定功能;服務結束後,cpu從核心態轉化為用戶態。

Linux內核主要由五個模塊組成:

進程調度

進程間通信

內存管理

文件系統

網絡接口

值得注意的是所有模塊都與進程調度模塊有關,因為它們都需要依靠進程調度程序來掛起或是重啟它們的進程。各個模塊之間的依賴關系是未來對於內核代碼閱讀的重要理論依據。

Linux中斷機制

對於Linux內核來說,中斷分為兩種:硬件中斷軟件中斷(異常) 每個中斷都是由0-255之間的一個數字來標示。Int32~int255(0x20~0xff)可由用戶自己定義;而int0~int31(0x00~0x1f)則是由Intel公司已經定義好或是預留使用的,一般情況下cpu在檢測到異常的時候會使用這些中斷,所以這些軟件中斷又被稱之為異常。

Linux系統將int32~int47(0x20~0x2f)對應於8259A發出的中斷請求信號IRQ0~IRQ15

Linux系統將程序編程發出的系統調用(system_call)中斷設置為int128(0x80)。

Linux系統定時

在Linux0.11中,8253芯片被設置為每隔10ms就發出一個時鐘中斷(IRQ0)信號,這個時間節拍被稱之為系統滴答

每經過一個系統滴答就會調用一次時鐘中斷處理函數(time_interrupt),該函數主要用來累計自系統啟動以來的滴答數,每發生一次時鐘中斷,jiffies變量+1。然後從被中斷程序的段選擇符中選擇當前特權級CPL作為參數調用do_timer函數。do_timer函數會對當前進程運行時間作累計,並且確保運行在內核態的程序(CPL=0)不會被搶占,用戶態運行的程序可以被搶占。補充:

Linux系統的特權級有三種:CPL、DPL、RPL

總的來說,CPL代表當前代碼段的權限,如果它想要去訪問一個段或門,首先要看看對方的權限如何,也就是檢查對方的DPL,如果滿足當前的權限比要訪問的權限高,則有可能允許去訪問,有些情況我們還要檢查選擇子的權限,即RPL,因為我們通過選擇子偏移量的方式去訪問一個段,這算是一個訪問請求動作,因此稱為請求訪問權限RPL(Requst Privilege Level)。當請求權限也滿足條件,那麼訪問就被允許了。

CPL是當前執行的任務的特權等級。通常情況下,CPL等於代碼所在段的特權等級,當程序轉移到不同的代碼段時,處理器將改變CPL。

DPL(Descriptor Privilege Level)表示門或者段的特權級

RPL(Rquest Privilege Level)是通過選擇子的低兩位來表現出來的(這麼說來,CS和SS也是存放選擇子的,同時CPL存放在CS和SS的低兩位上,那麼對CS和SS來說,選擇子的RPL=當前段的CPL)。

處理器通過檢查RPL和CPL來確認一個訪問是否合法。即提出訪問的段除了有足夠的特權級CPL,如果RPL不夠也是不行的(有些情況會忽略RPL檢查)

Copyright © Linux教程網 All Rights Reserved