《和菜鳥一起學linux內核源碼之基礎準備篇Word版》由會員分享,可在線閱讀,更多相關《和菜鳥一起學linux內核源碼之基礎準備篇Word版(23頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、
?
和菜鳥一起學linux內核源碼之基礎準備篇
?
斷斷續(xù)續(xù)地看著內核源碼,發(fā)現(xiàn)很多知識點都不是很明白,特別是對于操作系統(tǒng)的一些基礎。雖然看到了塊設備了,但是發(fā)現(xiàn)也總結不出什么了,這篇好像好久前更新的,一直沒有發(fā)表。最近還是比較忙碌,同事走了好多人,也有考慮過別的公司。但是正式工作未滿1年,也不能隨隨便便地就離開。雖然很忙,但是還是學了很多東西。漸漸地接觸了linux應用層。發(fā)現(xiàn)應用和驅動還是有很多區(qū)別的,各種需求,各種接口,各種設計,各種實現(xiàn)。嗯,慢慢來總會學好的。對于內核,慢慢看,看一遍不懂,那就第二遍,第三遍。相信總會看懂的。Fighting。。。。。。。。
?
2、????? 初始化init下只有一個main函數(shù)。
?????? 首先利用setup.s程序取得的程序參數(shù)設置系統(tǒng)的根文件設備號以及一些內存全局變量。這些內存變量指明了主內存的開始地址、系統(tǒng)所擁有的內存變量和作為高速緩沖區(qū)內存的末端地址。如果還定義了虛擬盤(RAMDISK), 則主內存將適當減少。
?????? 然后,內核進行所有方面的硬件初始化工作。包括陷阱門、塊設備、字符設備和tty包括人工創(chuàng)建第一個任務(task 0)。待所有初始化工作完成就設置中斷允許標志,開啟中斷。
?????? 在整個內核完成初始化后,內核將執(zhí)行權切換到了用戶模塊,也即CPU從0特權級切換到了第3特權級。然后
3、系統(tǒng)第一次調用創(chuàng)建進程函數(shù)fork(),創(chuàng)建出一個用于運行init()的子進程。
?????? 在該進程中系統(tǒng)將運行控制臺程序。如果控制臺環(huán)境建立成功,則再生成一個子進程,用于運行shell程序/bin/sh。若該子進程退出,父進程返回,則父進程進入一個死循環(huán)內,繼續(xù)生成子進程,并在此子進程中再次執(zhí)行shell程序/bin/sh,而父進程則繼續(xù)等待。
?????? 對于linux來說,所有任務都是在用戶模式執(zhí)行的,包括很多系統(tǒng)應用程序,如shell程序、網(wǎng)絡子系統(tǒng)程序等
推薦精選
關于linux內核體系結構
?????? 說到操作系統(tǒng),我們都會知道windows操作系
4、統(tǒng),linux操作系統(tǒng),蘋果的iOS操作系統(tǒng),以前很火的塞班操作系統(tǒng),還有最近消費類電子很火的Android操作系統(tǒng)。一個完整的操作系統(tǒng)分為4個部分。
推薦精選
? ? ? ?可以把這個理解為我們用的手機。其中的硬件系統(tǒng)就是我們看到的整個手機了,cpu啊,內存啊,這些不拆開來看不到的,和觸摸屏啊,按鍵之類看以看到的。操作系統(tǒng)內核就是我們說的android了,不過他包括了linux的內核了。操作系統(tǒng)服務就是android的一套結構了,給我們直觀的就是那個有點炫的界面了。我們可以通過點擊來實現(xiàn)我們想要的功能。用戶應用就是我們常玩的QQ啊,導航啊,當然少不了各種好玩的游戲了,憤怒的小鳥,
5、涂鴉跳,水果忍者,是不是又想玩一把?唉,還是好好學習吧,雖然手機就在旁邊。
對于linux內核的單內核模式的系統(tǒng),有可以把他分為如下:
?????? Linux內核又可分為5個大的模塊。
其關系和主要功能可以見下圖:
推薦精選
推薦精選
關于linux內存
物理內存可以分為下圖所示:
內核占用內存開始部分;接下來是共硬盤,軟盤使用的高速緩沖區(qū)部分,其中扣除顯存和bios的640k到1m;然后是虛擬盤;最后一部分是為所有程序可以使用的主內存區(qū)。
推薦精選
Linux內存管理中,段變換:將一個由段選擇符和段內偏移構成的邏輯地址轉換為一個線性地址。頁變
6、換:將線性地址轉換為對應的物理地址。具體可見下圖所示:
虛擬地址:指的是由程序產(chǎn)生的由段選擇符和段內偏移地址兩個部分組成的地址。為什么叫它是虛擬的地址呢?因為這兩部分組成的地址并沒有直接訪問物理內存,而是要通過分段地址的變換機構處理或映射后才會對應到相應的物理內存地址。
?????? 段描述符:向CPU提供了將邏輯地址映射為線性地址所必要的信息。描述符是由程序編譯器、鏈接器、加載器或者操作系統(tǒng)創(chuàng)建的。
?????? 描述符表:保存描述符在描述符表中的,有兩類
1、?全局描述符表(Global descriptor table---GDT)
2、?局部描述符表(Local desc
7、riptor table---LDT)
推薦精選
描述符表是由8字節(jié)構成的描述符項的內存中的一個數(shù)組。處理器是通過使用GDT和LDTR寄存器來定位GDT表和當前的LDT表。最多可以含有8192(2^13)個描述符。
選擇符:邏輯地址的選擇部分,用于指定一描述符的,它是通過指定一描述符表并且索引其中的一個描述符項完成的。
段寄存器:處理器將描述符中的信息保存在段寄存器中,因而可以避免在每次訪問內存時查詢描述符表。
?
推薦精選
?
?
線性地址:通過指定一個頁表、頁表中的某一頁以及頁中的偏移值,從而間接地指向對應的物理地址。
頁表:一個簡單的32位頁指示器的數(shù)組。
8、頁表本身也是一頁內存,因此它含有4K字節(jié)的內存,可容納1K個32位的項。
推薦精選
?
Offset = 2^12=4K, table =2^10, directory = 2^10,所以線性地址空間為2^10*2^10*4k=4G。
由于0.11內核把每個進程的最大可用的虛擬內存空間定義為64M,因此每個進程的邏輯地址可以用任務號*64M,就可以轉換到線性空間的地址。
?
?
關于linux進程
推薦精選
???????進程可以在內核態(tài)或者用戶態(tài)運行,當資源可用就被喚醒,進入就緒態(tài);當進程處于可中斷睡眠狀態(tài),收到信號可被喚醒;當處于不可中斷睡眠狀態(tài),只能被使用w
9、akeup等的喚醒;當進程處于暫停狀態(tài),可發(fā)送信號使其進入就緒態(tài);當僵死狀態(tài),當已經(jīng)停止運行,父進程還沒有調用wait查詢狀態(tài),一旦父進程調用完wait取得子進程信息后,這個進程任務數(shù)據(jù)結構就會被釋放掉。
?
推薦精選
?
關于linux文件系統(tǒng)和源碼目錄
?
推薦精選
?
?
?
?
推薦精選
推薦精選
?
推薦精選
?
推薦精選
?
?
推薦精選
?
推薦精選
?
?
?
推薦精選
?
?
推薦精選
?
?
推薦精選
推薦精選
關于linux內核ma
10、kefile
Linux makefile文件是編譯輔助工具軟件make的參數(shù)配置文件。Make工具軟件的主要用途是通過識別哪些文件已經(jīng)被修改過,從而自動地決定在一個含有多個源程序文件的程序系統(tǒng)中哪些文件需要被重新編譯。
???????這里的makefile主要作用是指示make程序最終使用獨立編譯連接成的tools/目錄中的build執(zhí)行程序將所有內核編譯代碼連接和合并成一個可運行的內核映像文件image。具體是對boot/目錄中的bootsect.s、setup.s使用8086匯編器進行編譯,分別生成各自的執(zhí)行模塊。再對源代碼中的其他所有程序使用GNU的編譯器gcc/gas進行編譯,并連接成模塊system。再用build工具將這三塊組合成一個內核映像文件image。
?
(注:可編輯下載,若有不當之處,請指正,謝謝!)
推薦精選