學(xué)習Linux,這些內核常識你應該要知道
1、到底什么是操作系統
(1)linux、windows、android、ucos就是操作系統;
(2)操作系統本質(zhì)上是一個(gè)程序,由很多個(gè)源文件構成,需要編譯連接成操作系統程序(vmlinz、zImage);
(3)操作系統的主要作用就是管理計算機硬件,給應用程序提供一個(gè)運行環(huán)境。
2、操作系統核心功能(管理資源)
(1)內存管理
如果沒(méi)有操作系統,內存需要程序自己來(lái)管理。譬如在uboot中要使用哪塊內存,由程序自己決定的,沒(méi)有注冊也沒(méi)有限制。此時(shí)如果程序不小心把同一塊內存重復使用,就會(huì )出現程序邏輯錯誤。
有了操作系統之后,操作系統負責管控所有的內存。應用程序需要使用內存時(shí),都要向操作系統去申請和注冊,由操作系統的內存管理模塊來(lái)分配內存。這樣好處是可以保證內存使用不會(huì )沖突。
(2)進(jìn)程調度
操作系統下支持多個(gè)應用程序同時(shí)運行,這是宏觀(guān)上的并行。實(shí)際上在單核心CPU上微觀(guān)上是不能并行的,宏觀(guān)上的并行就是操作系統提供的分時(shí)復用機制。操作系統的進(jìn)程調度模塊負責在各個(gè)進(jìn)程之間進(jìn)行切換。
(3)硬件設備管理
沒(méi)有操作系統時(shí),控制任何硬件都要自己寫(xiě)代碼,有了操作系統后操作系統本身會(huì )去控制各個(gè)硬件,應用程序就不用考慮硬件的具體細節了。
操作系統的硬件設備管理模塊就是驅動(dòng)模塊。
(4)文件系統
文件系統是管理存儲設備的一種方式。存儲設備由很多扇區組成,每個(gè)扇區有512/1024/2048/4096字節,存儲設備以扇區為單位進(jìn)行讀寫(xiě)。如果沒(méi)有文件系統,程序要自己去讀寫(xiě)扇區,就得記得哪個(gè)文件在哪個(gè)扇區。有了文件系統之后,我們不用再關(guān)注某個(gè)文件在物理磁盤(pán)的哪個(gè)扇區,只用關(guān)注文件系統中的目錄和文件名。
3、操作系統擴展功能
(1)協(xié)議棧
(2)有用的應用程序包
應用程序本身不屬于操作系統內核的一部分。
應用程序是給人用的,面向某種功能的,譬如ping程序用來(lái)測試網(wǎng)絡(luò )是否聯(lián)通,ifconfig程序用來(lái)配置網(wǎng)卡。
4、內核和發(fā)行版的區別
(1)內核是操作系統內核的簡(jiǎn)稱(chēng)。
內核負責實(shí)現操作系統的核心功能,內核不包括應用程序。
因此只有內核是無(wú)法使用的,因為做任何事情都是通過(guò)相應的應用程序來(lái)完成的。
賣(mài)操作系統的人把內核和一些常用的應用程序打包在一起提供給普通用戶(hù),這就是操作系統的發(fā)行版(也就是普通意義上的操作系統)。
(2)內核只有一個(gè)(www.kernel.org),發(fā)行版有很多(集成不同的應用程序,譬如ubuntu、redhat、suse、centos……)。
二、內核和驅動(dòng)的關(guān)聯(lián)
1、學(xué)習linux的思路
(1)對龐大的整體要有個(gè)認識。學(xué)習路線(xiàn)就是先建立框架和整體,然后逐漸去學(xué)習各個(gè)細節部分,逐步細化。
(2)對各分層的作用要清楚。
(3)對層次間的關(guān)聯(lián)和互相調用要理解。
2、驅動(dòng)屬于內核的一部分
(1)驅動(dòng)就是內核中的硬件設備管理模塊,屬于發(fā)展非?;钴S的部分。
(2)驅動(dòng)工作在內核態(tài)(cpu在跑操作系統)(與用戶(hù)態(tài)(cpu在跑應用程序)的區別:權限不同)
(3)驅動(dòng)程序故障可能導致整個(gè)內核崩潰。
(4)驅動(dòng)程序漏洞會(huì )使內核不安全。
三、內核和應用程序、根文件系統的關(guān)聯(lián)
1、應用和內核的關(guān)系
(1)應用程序不屬于內核,而是在內核之上的;
(2)應用程序工作在用戶(hù)態(tài),是受限制的;
(3)應用程序故障不會(huì )導致內核崩潰;
(4)應用程序通過(guò)內核定義的API接口來(lái)調用內核工作
(5)總結:應用程序是最終目標,內核就是為應用程序提供底層資源管理的服務(wù)員
2、內核和根文件系統
(1)根文件系統提供根目錄;屬于內核?NO!
(2)進(jìn)程1存放在根文件系統中,進(jìn)程1會(huì )使得內核態(tài)變?yōu)橛脩?hù)態(tài)。
(3)內核啟動(dòng)最后會(huì )去裝載根文件系統;
(4)總結:根文件系統為操作系統啟動(dòng)提供了很多必備的資源,如根目錄、進(jìn)程1。
四、linux內核的模塊化設計
1、什么是模塊化設計
(1)因為linux內核很龐大,代碼量很大、東西很多,如果設計時(shí)完全設計成一體(各個(gè)文件、各個(gè)函數之間緊耦合),復雜度超出了人所能理解的范圍。所以模塊化設計是一種必要。
(2)模塊化設計就是內核中各個(gè)功能模塊在代碼上是彼此獨立的,譬如說(shuō)調度系統和內存管理系統之間并沒(méi)有全局變量的互相引用,甚至函數互相調用也很少,就算有也是遵循一個(gè)接口規范的。模塊化設計的目的就是實(shí)現功能模塊的松耦合。
2、模塊化設計的體現
(1)配置時(shí)可裁剪。linux內核在編譯之前可以進(jìn)行配置,配置時(shí)可以選擇將組成內核的成千上萬(wàn)個(gè)模塊每一個(gè)要或者不要。要了之后還有更多的一些細節的配置。
(2)模塊化編譯和安裝。為了操作方便,從靜態(tài)的升級逐漸變成了動(dòng)態(tài)的升級(不需要重啟系統,更不需要重新燒錄系統)。這種動(dòng)態(tài)的升級也是由模塊化來(lái)支持的。
(3)源碼中使用條件編譯。這種在uboot中已經(jīng)見(jiàn)過(guò)了。
3、模塊化設計的好處
(1)功能可裁剪、靈活性;
(2)可擴展性(動(dòng)態(tài)安裝卸載、新硬件支持);
(3)利于協(xié)作;
4、模塊化設計是一種普遍性的系統設計原則
五、選擇合適版本的內核
1、linux內核版本變遷簡(jiǎn)史
(1)linux0.01。初版
(2)linux0.11。很多講linux內核源代碼解析的書(shū)都是以這個(gè)版本為原本來(lái)講?!秷D解linux內核設計的藝術(shù)》
(3)linux2.4。比較接近現代的版本,很多經(jīng)典的書(shū)都是以2.4版本內核為參照的,譬如《LDD3》。
linux2.4的晚期內核在前幾年還會(huì )經(jīng)常碰到有用的。
(4)linux2.6早期。2.6的早期和2.4晚期內核挺像的。
(5)linux2.6晚期。2.6的晚期內核較早期內核有一些改變,尤其是驅動(dòng)相關(guān)的部分和一些頭文件的位置。2.6的晚期內核目前還算是比較主流。
(6)linux3.x 4.x
2、如何選擇合適的內核版本
(1)并不是越新版本的內核越好;
(2)選擇SoC廠(chǎng)家移植版本會(huì )減少工作量。
3、S5PV210適用的內核版本
(1)2.6.35.7 + android2.3/QT4.8.3
(2)3.0.8 + android4.0
4、本課程使用2.6.35.7版本內核講解
評論