(1)閱讀sched.h原始碼檔案,加深對程序管理概念的理解
(2)閱讀linux的fork.c原始碼檔案,分析程序的建立過程
(3)閱讀msg.c,sem.c和shm.c原始碼檔案,熟悉linux的三種通訊機制。
u arch: 該目錄包含了此核心原始碼所支援的硬體體系結構相關的核心原始碼。在這個目錄下,針對不同體系結構所移植的版本都有三個子目錄:kernel、lib和mm。kernel子目錄包含以來於體系結構實現的一般核心功能,如訊號處理、時鐘處理等;lib子目錄包含庫函式的本地實現,如果從依賴於體系結構的原始碼編譯,則執行更快;mm子目錄包含儲存管理實現的**。
u mm: 包含了所有linux實現虛擬記憶體管理的原始碼。與具體硬體體協結構相關的記憶體管理**位於arch/*/mm目錄下,如對應x86的就是arch/i386/mm/fault.c
u drivers: 這個目錄擁有50%以上的核心原始碼,系統中所有的裝置驅動程式都位於該目錄中。
u include: 包括了核心的大多數標頭檔案,另外對每種支援的體系結構分別有乙個子目錄。
u init: 包含了所有系統的初始化原始碼,許多主要的檔案,如main.c就位於該目錄下。該檔案還包含了許多核心**——如實現fork()的**和最常執行的**——cpuidle()迴圈。
u ipc: 處理程序間通訊的全部所需的**都放在目錄下。
u modules: 已編譯好的可動態載入的模組。
u fs: linux支援的檔案系統**。不同的檔案系統有不同的子目錄與之對應。
u net: 所有提供網路支援的**,每個子目錄對應網路的乙個方面。
linux核心原始碼包含的內容較多,2.4.20版本的核心原始碼大約有40萬行。
如果使用者需要修改linux核心原始碼,那麼一定要注意遵守下面的編碼約定:
u 注釋是/* */風格的,單行注釋也是這樣,不接受//風格的注釋。
u 函式開始的大括號{}獨佔一行。
u if語句以下面方式編碼:
if (str[0]>=』0』 && str[0]<=』9』)else
printk (「error param」);
name [sizeof (name) -1]=0;
u 單行if語句是可以接受的:
if (!strcmp(str, 「abc」)) strcpy(str, 「abc」);
u 核心原始碼包含許多goto,差不多每80行**就有乙個goto,這是出於執行效率的考慮,如在一些while語句中,使用goto跳出**塊,而不是使用break。
linux學習筆記17
vim vim介紹 vim是vi的公升級版,vim和vi的最大區別就是編輯乙個文字時vi不會顯示顏色,vim會顯示顏色,vim的安裝方法yum install y vim enhanced。vim顏色顯示 vim的顏色和你檔案的具體內容有關,相同的檔案在不同的目錄下都有可能導致顏色不存在,vim的配...
linux指令碼攻略學習筆記17
sed是進行文字替換的不二之選。這樣,我們就可以通過sed用空白替代匹配的句子。先建立乙個包含替換文字的檔案。例如 我們的目標是移除包含 mobile phones 的句子。可以用sed語句來實現 這裡的匹配模式是用來匹配整句文字的正規表示式,檔案中的每一句話第乙個字元都是空格,句與句之間用 來分割...
Linux學習筆記17 alarm pause
inlcude unsigned int alarm unsigned int seconds int pause void alarm是乙個鬧鐘,在指定的秒數之後發出乙個sigalrm訊號 但是,alarm函式自身是馬上就返回的,不用等待n秒之後再返回,非同步 這個訊號只能本程序自己接收 如果在呼...