對記憶體的使用方法
linux核心源**的目錄結構
系統最多可以有64個程序同時執行,除第乙個程序為手工建立,其他程序均使用系統呼叫fork建立。
核心使用程序標識號(process id,pid)標識程序。
程序由可致性的指令**、資料和堆疊區組成。
核心通過程序表對程序進行管理,每個程序在程序表中占有一項,程序表項是乙個task_struct
任務結構指標,定義在include/linux/sched.h
中。
當乙個程序在執行時,cpu的所有暫存器中的值、程序的狀態以及堆疊中的內容被稱為該程序的上下文。
乙個程序在其生存期內,可處於一組不同的狀態下,稱為程序狀態。
只有當程序從「核心執行態」轉移到「睡眠狀態」時,核心才會進行程序切換操作。在核心態下執行的程序不能被其他程序搶占,而且乙個程序不能改變另乙個程序的狀態。為了避免切換時造成核心資料錯誤,核心在執行臨界區**時會禁止一切中斷。
linux程序是搶占式的,被搶占的程序仍然處於task_running
狀態,只是暫時沒有被cpu執行,程序的搶占發生在程序處於使用者態執行階段,在核心態執行時是不能被搶占的。linux 0.11中採用基於優先順序排隊的排程策略。
線性位址(linear address)是邏輯位址到物理位址變換之間的中間層。
實體地址(physical address)是指出現在cpu外部位址匯流排上的定址物理記憶體的位址訊號,是位址變換的最終結果位址。
虛擬記憶體(virtual memory)是指計算機呈現出要比實際擁有的記憶體大得多的記憶體量。
boot目錄包含3個彙編檔案,是核心源**檔案中最先被編譯的程式
bootsect.s : 磁碟引導塊程式,編譯後會駐留在磁碟的第乙個扇區中
setup.s : 用於讀取機器的硬體配置引數,並把核心模組system移動到適當的記憶體位置處
head.s : 會被編譯連線在system模組的最前部分,主要進行硬體裝置的探測設定和記憶體管理頁面的初始設定工作
圖中每個方框代表乙個檔案,從上到下按基本引用關係放置,虛框中的程式檔案不屬於檔案系統,帶箭頭的線條表示引用關係,粗線條表示有相互引用關係。
檔案系統目錄中可以劃分為四個部分:高速緩衝區管理、低層檔案操作、檔案資料訪問和檔案高層函式。
管理高速緩衝區的程式是buffer.c,其他程式則主要用於檔案系統管理。
在file_table.c中,目前只定義了乙個檔案控制代碼(描述符)結構陣列。
ioctl.c檔案將引用kernel/chr_drv/tty_ioctl.c中的函式,實現字元裝置的io控制功能。
exec.c主要包含乙個執行程式函式do_execve()
,它是所有exec()
函式簇中的主要函式。
fcntl.c程式用於實現檔案i/o控制的系統呼叫函式。
read_write.c程式用於實現檔案讀/寫和定位三個系統呼叫函式。
stat.c程式中實現了兩個獲取檔案狀態的系統呼叫函式。
open.c程式主要包含實現修改檔案屬性和建立與關閉檔案的系統呼叫函式。
char_dev.c主要包含字元裝置獨寫函式rw_char()
。
pipe.c程式中包含管道讀寫函式和建立管道的系統呼叫。
file_dev.c程式中包含基於i幾點和描述符結構的檔案獨寫函式。
namei.c程式主要包括檔案系統中目錄名和檔名的操作函式和系統呼叫函式。
block_dev.c程式包含塊資料讀和寫函式。
inode.c程式中包含針對檔案系統i節點操作的函式。
truncate.c程式用於在刪除檔案時釋放檔案所占用的裝置資料空間。
bitmap.c程式用於處理檔案系統中i系欸但和邏輯資料塊的點陣圖。
super.c程式中包含對檔案系統超級塊的處理函式。
頭檔案目錄中一共含有32個.h標頭檔案。主目錄下13個,asm目錄下4個,linux目錄中有10個,sys子目錄中有5個。
用於執行核心所有的初始化工作,然後移到使用者模式建立新程序,並在控制台裝置上執行shell程式。
核心庫函式用於為核心初始化程式init/main.c執行在使用者態的程序(程序0、1)提供呼叫支援,與普通靜態庫的實現方法完全一樣。
主要用於管理程式對主記憶體區的使用,實現了程序邏輯位址到線性位址以及線性位址到主記憶體區中物理記憶體位址的對映,通過記憶體的分頁管理機制,在程序的虛擬記憶體頁與主記憶體區的物理記憶體頁之間建立了對應關係。
用於將linux各個目錄中被分別編譯生成的目標**連線合併成乙個可執行的核心映像檔案image。
Linux核心學習筆記一
核心與作業系統 核心是作業系統的核心部分,包含了系統執行的核心過程,決定系統的效能,作業系統啟動核心被裝入到ram中 作業系統與底層硬體裝置互動和為執行應用程式提供執行環境。linux核心與微核心比較 微核心 核心只需要乙個很小的函式集,通常包括幾個同步原語,乙個簡單的排程程式和程序間通訊機制。執行...
Linux核心學習筆記 核心同步
linux核心中執行的程式,時刻都要防止併發引起的競態。這將會導致資料結構被破壞,嚴重的時候會引起核心崩潰。所以核心同步技術對核心開發的驅動程式來說非常重要。不懂核心同步技術的人,是寫不出安全健壯的核心驅動程式來的。在學習核心同步技術之前需要掌握一下幾個概念。1 並行,併發與競態 在smp執行的li...
linux核心學習筆記
核心的配置 a.make s3c2410 deconfig b.make menuconfig 圖形化配置 c.使用廠家給出的配置 生成.config 編譯生成核心,使用如下命令 make vmlinux make uimage 帶頭部 真正核心 1 config 建立生成autoconf.h 供源...