![和菜鳥一起學(xué)linux內(nèi)核源碼之基礎(chǔ)準(zhǔn)備篇_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/4bb5bea8-fbc0-4e1e-abf0-a996873a83cf/4bb5bea8-fbc0-4e1e-abf0-a996873a83cf1.gif)
![和菜鳥一起學(xué)linux內(nèi)核源碼之基礎(chǔ)準(zhǔn)備篇_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/4bb5bea8-fbc0-4e1e-abf0-a996873a83cf/4bb5bea8-fbc0-4e1e-abf0-a996873a83cf2.gif)
![和菜鳥一起學(xué)linux內(nèi)核源碼之基礎(chǔ)準(zhǔn)備篇_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/4bb5bea8-fbc0-4e1e-abf0-a996873a83cf/4bb5bea8-fbc0-4e1e-abf0-a996873a83cf3.gif)
![和菜鳥一起學(xué)linux內(nèi)核源碼之基礎(chǔ)準(zhǔn)備篇_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/4bb5bea8-fbc0-4e1e-abf0-a996873a83cf/4bb5bea8-fbc0-4e1e-abf0-a996873a83cf4.gif)
![和菜鳥一起學(xué)linux內(nèi)核源碼之基礎(chǔ)準(zhǔn)備篇_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/4bb5bea8-fbc0-4e1e-abf0-a996873a83cf/4bb5bea8-fbc0-4e1e-abf0-a996873a83cf5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 和菜鳥一起學(xué)linux內(nèi)核源碼之基礎(chǔ)準(zhǔn)備篇 斷斷續(xù)續(xù)地看著內(nèi)核源碼,發(fā)現(xiàn)很多知識點都不是很明白,特別是對于操作系統(tǒng)的一些基礎(chǔ)。雖然看到了塊設(shè)備了,但是發(fā)現(xiàn)也總結(jié)不出什么了,這篇好像好久前更新的,一直沒有發(fā)表。最近還是比較忙碌,同事走了好多人,也有考慮過別的公司。但是正式工作未滿1年,也不能隨隨便便地就離開。雖然很忙,但是還是學(xué)了很多東西。漸漸地接觸了linux應(yīng)用層。發(fā)現(xiàn)應(yīng)用和驅(qū)動還是有很多區(qū)別的,各種需求,各種接口,各種設(shè)計,各種實現(xiàn)。嗯,慢慢來總會學(xué)好的。對于內(nèi)核,慢慢看,看一遍不懂,那就第二遍,第三遍。相信總會看懂的。Fighting。
2、160; 初始化init下只有一個main函數(shù)。 首先利用setup.s程序取得的程序參數(shù)設(shè)置系統(tǒng)的根文件設(shè)備號以及一些內(nèi)存全局變量。這些內(nèi)存變量指明了主內(nèi)存的開始地址、系統(tǒng)所擁有的內(nèi)存變量和作為高速緩沖區(qū)內(nèi)存的末端地址。如果還定義了虛擬盤(RAMDISK), 則主內(nèi)存將適當(dāng)減少。 然后,內(nèi)核進(jìn)行所有方面的硬件初始化工作。包括陷阱門、塊設(shè)備、字符設(shè)備和tty包括人工創(chuàng)建第一個任務(wù)(task 0)。待所有初始化工作完成
3、就設(shè)置中斷允許標(biāo)志,開啟中斷。 在整個內(nèi)核完成初始化后,內(nèi)核將執(zhí)行權(quán)切換到了用戶模塊,也即CPU從0特權(quán)級切換到了第3特權(quán)級。然后系統(tǒng)第一次調(diào)用創(chuàng)建進(jìn)程函數(shù)fork(),創(chuàng)建出一個用于運(yùn)行init()的子進(jìn)程。 在該進(jìn)程中系統(tǒng)將運(yùn)行控制臺程序。如果控制臺環(huán)境建立成功,則再生成一個子進(jìn)程,用于運(yùn)行shell程序/bin/sh。若該子進(jìn)程退出,父進(jìn)程返回,則父進(jìn)程進(jìn)入一個死循環(huán)內(nèi),繼續(xù)生成子進(jìn)程,并在此子進(jìn)程中再次執(zhí)行shell程序/bin/sh,而父進(jìn)程
4、則繼續(xù)等待。 對于linux來說,所有任務(wù)都是在用戶模式執(zhí)行的,包括很多系統(tǒng)應(yīng)用程序,如shell程序、網(wǎng)絡(luò)子系統(tǒng)程序等關(guān)于linux內(nèi)核體系結(jié)構(gòu) 說到操作系統(tǒng),我們都會知道windows操作系統(tǒng),linux操作系統(tǒng),蘋果的iOS操作系統(tǒng),以前很火的塞班操作系統(tǒng),還有最近消費(fèi)類電子很火的Android操作系統(tǒng)。一個完整的操作系統(tǒng)分為4個部分。 可以把這個理解為我們用的手機(jī)。其中的硬件系統(tǒng)就是我們看到的
5、整個手機(jī)了,cpu啊,內(nèi)存啊,這些不拆開來看不到的,和觸摸屏啊,按鍵之類看以看到的。操作系統(tǒng)內(nèi)核就是我們說的android了,不過他包括了linux的內(nèi)核了。操作系統(tǒng)服務(wù)就是android的一套結(jié)構(gòu)了,給我們直觀的就是那個有點炫的界面了。我們可以通過點擊來實現(xiàn)我們想要的功能。用戶應(yīng)用就是我們常玩的QQ啊,導(dǎo)航啊,當(dāng)然少不了各種好玩的游戲了,憤怒的小鳥,涂鴉跳,水果忍者,是不是又想玩一把?唉,還是好好學(xué)習(xí)吧,雖然手機(jī)就在旁邊。對于linux內(nèi)核的單內(nèi)核模式的系統(tǒng),有可以把他分為如下: Linux內(nèi)核又可分為5個大的模塊。其關(guān)
6、系和主要功能可以見下圖:關(guān)于linux內(nèi)存物理內(nèi)存可以分為下圖所示:內(nèi)核占用內(nèi)存開始部分;接下來是共硬盤,軟盤使用的高速緩沖區(qū)部分,其中扣除顯存和bios的640k到1m;然后是虛擬盤;最后一部分是為所有程序可以使用的主內(nèi)存區(qū)。Linux內(nèi)存管理中,段變換:將一個由段選擇符和段內(nèi)偏移構(gòu)成的邏輯地址轉(zhuǎn)換為一個線性地址。頁變換:將線性地址轉(zhuǎn)換為對應(yīng)的物理地址。具體可見下圖所示:虛擬地址:指的是由程序產(chǎn)生的由段選擇符和段內(nèi)偏移地址兩個部分組成的地址。為什么叫它是虛擬的地址呢?因為這兩部分組成的地址并沒有直接訪問物理內(nèi)存,而是要通過分段地址的變換機(jī)構(gòu)處理或映射后才會對應(yīng)到相應(yīng)的物理內(nèi)存地址。
7、; 段描述符:向CPU提供了將邏輯地址映射為線性地址所必要的信息。描述符是由程序編譯器、鏈接器、加載器或者操作系統(tǒng)創(chuàng)建的。 描述符表:保存描述符在描述符表中的,有兩類1、 全局描述符表(Global descriptor table-GDT)2、 局部描述符表(Local descriptor table-LDT)描述符表是由8字節(jié)構(gòu)成的描述符項的內(nèi)存中的一個數(shù)組。處理器是通過使用GDT和LDTR寄存器來定位GDT表和當(dāng)前的LDT表。最多可以含
8、有8192(213)個描述符。選擇符:邏輯地址的選擇部分,用于指定一描述符的,它是通過指定一描述符表并且索引其中的一個描述符項完成的。段寄存器:處理器將描述符中的信息保存在段寄存器中,因而可以避免在每次訪問內(nèi)存時查詢描述符表。 線性地址:通過指定一個頁表、頁表中的某一頁以及頁中的偏移值,從而間接地指向?qū)?yīng)的物理地址。頁表:一個簡單的32位頁指示器的數(shù)組。頁表本身也是一頁內(nèi)存,因此它含有4K字節(jié)的內(nèi)存,可容納1K個32位的項。 Offset = 212=4K, table =210, directory = 210,所以線性地址空間為210*210*4
9、k=4G。由于0.11內(nèi)核把每個進(jìn)程的最大可用的虛擬內(nèi)存空間定義為64M,因此每個進(jìn)程的邏輯地址可以用任務(wù)號*64M,就可以轉(zhuǎn)換到線性空間的地址。 關(guān)于linux進(jìn)程 進(jìn)程可以在內(nèi)核態(tài)或者用戶態(tài)運(yùn)行,當(dāng)資源可用就被喚醒,進(jìn)入就緒態(tài);當(dāng)進(jìn)程處于可中斷睡眠狀態(tài),收到信號可被喚醒;當(dāng)處于不可中斷睡眠狀態(tài),只能被使用wakeup等的喚醒;當(dāng)進(jìn)程處于暫停狀態(tài),可發(fā)送信號使其進(jìn)入就緒態(tài);當(dāng)僵死狀態(tài),當(dāng)已經(jīng)停止運(yùn)行,父進(jìn)程還沒有調(diào)用wait查詢狀態(tài),一旦父進(jìn)程調(diào)用完wait取得子進(jìn)程信息后,這個進(jìn)程任務(wù)數(shù)
10、據(jù)結(jié)構(gòu)就會被釋放掉。 關(guān)于linux文件系統(tǒng)和源碼目錄 關(guān)于linux內(nèi)核makefileLinux makefile文件是編譯輔助工具軟件make的參數(shù)配置文件。Make工具軟件的主要用途是通過識別哪些文件已經(jīng)被修改過,從而自動地決定在一個含有多個源程序文件的程序系統(tǒng)中哪些文件需要被重新編譯。 這里的makefile主要作用是指示make程序最終使用獨(dú)立編譯連接成的tools/目錄中的build執(zhí)行程序?qū)⑺袃?nèi)核編譯代碼連接和
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個體品牌店鋪轉(zhuǎn)手合同標(biāo)準(zhǔn)格式
- 2025年企業(yè)應(yīng)用軟件開發(fā)外包服務(wù)合同
- 2025年勞動合同法關(guān)鍵及詳細(xì)解析
- 官方認(rèn)證合同標(biāo)準(zhǔn)文本參考集
- 2025年創(chuàng)業(yè)合伙企業(yè)投資協(xié)議模板
- 2025年雙邊技術(shù)交流與合作協(xié)議范例
- 2025年醫(yī)療機(jī)構(gòu)醫(yī)療器械監(jiān)管維護(hù)管理協(xié)議
- 2025年親屬間房產(chǎn)轉(zhuǎn)讓合同文本
- 2025年住宅建設(shè)安全管理合同
- 2025年經(jīng)濟(jì)型共享汽車短期租賃合同
- 山東省濰坊市2024-2025學(xué)年高三上學(xué)期期末 地理試題(含答案)
- 招聘專職人員報名表
- 《感冒中醫(yī)治療》課件
- 牛津上海版小學(xué)英語四年級下冊(英語單詞表)
- 2024年體育賽事運(yùn)動員贊助合同3篇
- 2023年中考英語話題復(fù)習(xí)課件 健康與飲食
- 2023年機(jī)動車檢測站質(zhì)量手冊和程序文件(根據(jù)補(bǔ)充要求編制)
- 路遙介紹課件
- 腸道健康管理
- 2024年高考語文復(fù)習(xí):古詩文閱讀強(qiáng)化練習(xí)題匯編(含答案解析)
- 北京萬集DCS-30K計重收費(fèi)系統(tǒng)技術(shù)方案設(shè)計
評論
0/150
提交評論