sp; 操作系統(tǒng)最底層的組件是內(nèi)核,其上層搭建了許多系統(tǒng)軟件。系統(tǒng)程序包括三個(gè)部分。這三個(gè)部分分別是:編譯環(huán)境、應(yīng)用程序接口和用戶接口。編譯環(huán)境包含匯編,c 等低高級(jí)語言編譯程序,連接程序和裝載程序,這些程序負(fù)責(zé)將文本格式的程序語言轉(zhuǎn)變?yōu)闄C(jī)器能識(shí)別和裝載的機(jī)器代碼;應(yīng)用程序接口(api)包含內(nèi)核提供的系統(tǒng)調(diào)用接口和語言庫,系統(tǒng)調(diào)用是為了能讓應(yīng)用程序使用內(nèi)核服務(wù),語言庫函數(shù)則是為了方便應(yīng)用程序開發(fā),所以將一些常用的基礎(chǔ)功能預(yù)先編譯以供使用,比如對(duì)c語言來說常用的c庫有g(shù)un c等;用戶接口(aui)包括我們熟悉的shell(關(guān)于shell 應(yīng)該專門寫一個(gè)教程)、系統(tǒng)服務(wù)程序和常用的應(yīng)用程序?! ?BR> 這些部分并非所有的操作系統(tǒng)都必須一個(gè)不少的包含,不過其中大多數(shù)功能都應(yīng)該提供,尤其內(nèi)核,系統(tǒng)調(diào)用,shell這些基本組件,它們都屬于操作系統(tǒng)必備組件,其它組件是否包含需要根據(jù)具體系統(tǒng)的要求和應(yīng)用環(huán)境決定,你也可以將其歸為操作系統(tǒng)之外的附加部分?! ?/P> 系統(tǒng)程序:系統(tǒng)程序是相對(duì)應(yīng)用程序而言的,應(yīng)用程序針對(duì)終端用戶需求完成功能,而系統(tǒng)程序則是為了簡(jiǎn)化應(yīng)用程序的開發(fā)而存在的,比如數(shù)據(jù)庫系統(tǒng)為了應(yīng)用程序提供了有效的數(shù)據(jù)傳輸,存儲(chǔ)服務(wù);還有編程語言的執(zhí)行環(huán)境——它由c庫實(shí)現(xiàn)——也屬于一種系統(tǒng)程序,它為應(yīng)用程序開發(fā)提供了諸如i/o操作例程,圖形庫,計(jì)算庫等等基礎(chǔ)服務(wù)??梢娤到y(tǒng)程序范圍覆蓋很廣,只要面相服務(wù)群體不是最終用戶的軟件都可以劃歸到系統(tǒng)軟件中來。 內(nèi)核概念 操作系統(tǒng)最核心,最基礎(chǔ)的組件就要屬內(nèi)核了——內(nèi)核和操作系統(tǒng)的其它系統(tǒng)軟件或應(yīng)用程序本質(zhì)的區(qū)別在于內(nèi)核運(yùn)行在高特權(quán)級(jí),和硬件直接交互,操作權(quán)限幾乎不收任何限制,因此內(nèi)核程序編寫也要求格外謹(jǐn)慎,必須保證效率和可靠?! ?BR> 特權(quán)級(jí)別:現(xiàn)代體系結(jié)構(gòu)中往往為了保護(hù)操作系統(tǒng)(內(nèi)核)專用的數(shù)據(jù)不被應(yīng)用程序訪問,以免關(guān)鍵數(shù)據(jù)泄露或系統(tǒng)被破壞,將系統(tǒng)(硬件機(jī)制)劃分為不同的特權(quán)級(jí)別,敏感數(shù)據(jù)存在高特權(quán)級(jí),且還規(guī)定了一些特權(quán)指令,其它級(jí)別的任務(wù)不能訪問敏感數(shù)據(jù)和使用這些特權(quán)指令,只有處于特權(quán)級(jí)別的任務(wù)才有權(quán)使用。比如ox86體系結(jié)構(gòu)中存在4個(gè)特權(quán)級(jí)別(0,1,2,3)linux操作系統(tǒng)將內(nèi)核存在0級(jí),其它任務(wù)運(yùn)行在3級(jí)。0級(jí)被稱為內(nèi)核空間,3級(jí)被稱為用戶空間。內(nèi)核設(shè)計(jì)的主要任務(wù)內(nèi)核作為操作系統(tǒng)的核心,運(yùn)行級(jí)別最高。其它系統(tǒng)程序都必須通過它才可以使用系統(tǒng)資源,獲取系統(tǒng)服務(wù)。所以內(nèi)核使用最為頻繁,一切系統(tǒng)行為無論巨細(xì)都要通過內(nèi)核參與。因此內(nèi)核運(yùn)行效率和正確性對(duì)整個(gè)系統(tǒng)的運(yùn)行效率和可靠性至觀重要,如果內(nèi)核效率稍微下降,那么在應(yīng)用程序中就必然造成層層放大。 內(nèi)核要求高效率,所以它必須自系統(tǒng)運(yùn)行起就要載入內(nèi)存,并且在運(yùn)行期間一直駐留在內(nèi)存中,直到系統(tǒng)關(guān)閉。這是內(nèi)核與其它應(yīng)用程序或系統(tǒng)程序的另一個(gè)顯著區(qū)別。雖然說內(nèi)存今天已經(jīng)不再是天價(jià)了,但是畢竟內(nèi)存容量有限,所以內(nèi)核大小不能過大(linux內(nèi)核只有幾m或十幾m,甚至可以裁減得更?。?,因此內(nèi)核只應(yīng)該包含最基礎(chǔ)和核心的功能,其它附加功能應(yīng)該盡量提到用戶空間完成。 那么到底有那些功能是操作系統(tǒng)使用最頻繁,最需要在內(nèi)核中實(shí)現(xiàn)的呢??jī)?nèi)核直接架構(gòu)于硬件資源之上,因此首先要做的就是對(duì)硬件的資源管理。因此內(nèi)核必須負(fù)責(zé):內(nèi)存管理,進(jìn)程和進(jìn)程調(diào)度(對(duì)cpu的管理),文件系統(tǒng)管理,i/o處理等任務(wù)?! ?BR> 我們的雜志核心就是在解釋內(nèi)核原理的基礎(chǔ)上,帶領(lǐng)大家學(xué)習(xí)內(nèi)核級(jí)別的開發(fā),也就是說進(jìn)行核心開發(fā)。本期僅僅給大家一個(gè)概念上的說明,描述內(nèi)核設(shè)計(jì)需要完成的主要任務(wù),至于具體內(nèi)核各部分的詳細(xì)討論在后續(xù)期刊中將逐步展開?! ?BR> 內(nèi)核至少需要包含如下幾個(gè)模塊?! ∵M(jìn)程管理:進(jìn)程是操作系統(tǒng)中的執(zhí)行代碼,是任務(wù)在系統(tǒng)內(nèi)的動(dòng)態(tài)化身。內(nèi)核必須負(fù)責(zé)將任務(wù)抽象為進(jìn)程,而且必須能將進(jìn)程執(zhí)行,能為進(jìn)程分配資源,維護(hù)進(jìn)程的執(zhí)行狀態(tài),提供進(jìn)程間通訊方法。更進(jìn)一步講,進(jìn)程管理還必須保證進(jìn)程運(yùn)行的可靠性,因此需要提供進(jìn)程同步,互斥,防死鎖等等服務(wù),另外進(jìn)程調(diào)度也是進(jìn)程管理中的重要任務(wù)?! ?nèi)存管理:計(jì)算機(jī)存儲(chǔ)部件由快到慢、由小到大分為緩存、內(nèi)存和磁盤。其中最主要和必須是內(nèi)存,內(nèi)存管理包括內(nèi)存的分配和釋放,以及訪問保護(hù)等。另外對(duì)使用虛擬內(nèi)存的系統(tǒng),內(nèi)存管理還包含虛擬內(nèi)存管理,磁盤交換管理,內(nèi)存影射等等?! ?BR> 文件系統(tǒng):文件是多數(shù)系統(tǒng)中用戶使用和管理數(shù)據(jù)的主要方式,文件系統(tǒng)需要負(fù)責(zé)用戶文件訪問,訪問權(quán)限控制,文件格式轉(zhuǎn)換,數(shù)據(jù)傳輸?shù)纫幌盗袉栴}?! ≡O(shè)備管理:除了存儲(chǔ)設(shè)備外,系統(tǒng)還有大量外設(shè)需要操作系統(tǒng)管理,比如時(shí)鐘,網(wǎng)卡,鍵盤,磁盤等等,設(shè)備管理需要負(fù)責(zé)驅(qū)動(dòng)這些設(shè)備為上層調(diào)用服務(wù)?! ?BR> i/o管理:操作系統(tǒng)中i/o管理負(fù)責(zé)處理復(fù)雜的i/o操作,其中包括i/o緩沖和磁盤調(diào)度等?! ×硗庵袛喙芾硪彩遣僮飨到y(tǒng)內(nèi)核應(yīng)該實(shí)現(xiàn)的功能?! ?BR> 以上是操作系統(tǒng)內(nèi)核設(shè)計(jì)要考慮的主要問題,其中各種模塊彼此相互交錯(cuò)、相互利用。不過這些模塊的劃分并不是絕對(duì)的,在實(shí)際系統(tǒng)中可能有不同的組合或更細(xì)致地劃分,因此我們不必追究模塊的具體內(nèi)容,需要關(guān)注的是內(nèi)核究竟需要完成那些功能?! ?nèi)核模塊大致也有層次之分,我們可以這樣理解層次含義:直接和硬件作用的是硬件抽象層,和用戶更靠近的屬于邏輯抽象層?! ∷^硬件抽象層,是指管理硬件設(shè)備的模塊,比如存儲(chǔ)管理、設(shè)備管理這些模塊將硬件功能抽象為內(nèi)核數(shù)據(jù)結(jié)構(gòu)和接口函數(shù),以供上層使用。比如磁盤設(shè)備驅(qū)動(dòng),需要將磁盤設(shè)備功能抽象為打開open,寫入(write),讀?。╮ead)等接口函數(shù);內(nèi)存管理需要將內(nèi)存抽象為頁、段等結(jié)構(gòu)體。然后分配、合并、釋放等工作都是通過操作這些抽象得來的結(jié)構(gòu)體,再由這些結(jié)構(gòu)影射到內(nèi)存的物理實(shí)體上去的完成實(shí)際操作的?! ?BR> 所謂邏輯抽象層最主要的目的是為了貼近用戶需求,最重要的邏輯抽象模塊就是文件系統(tǒng),文件系統(tǒng)的存在完全是從用戶角度出發(fā)設(shè)計(jì)的,因?yàn)橛脩糇钅芙邮芤杂梦募问桨b的信息,所以文件系統(tǒng)屬于邏輯上的抽象,因?yàn)槲锢碓O(shè)備中沒有對(duì)應(yīng)文件的實(shí)體?! ?BR> 對(duì)于進(jìn)程管理來說,其中進(jìn)程執(zhí)行和調(diào)度要和處理器打交道,應(yīng)該說屬于硬件抽象層,但其中進(jìn)程狀態(tài)維護(hù),進(jìn)程通訊等更接近用戶使用,因此可以歸結(jié)到邏輯抽象層?! ×硗鈏/o管理和中斷管理些模塊,在內(nèi)核中屬于為其它模塊服務(wù)的借用力量,它們主要被文件系統(tǒng)或設(shè)備管理模塊使用,但總之是面向硬件的,所以也可以將其歸為硬件邏輯層。 linux操作系統(tǒng) 在眾多商業(yè)操作系統(tǒng)和免費(fèi)操作系統(tǒng)中,linux占有獨(dú)到地位,它不但功能強(qiáng)大,接近于工業(yè)強(qiáng)度,而且結(jié)構(gòu)設(shè)計(jì)幽雅,具有良好的擴(kuò)展性和移植性,接口定義規(guī)范,基本和unix系統(tǒng)兼容。更為重要的優(yōu)勢(shì)在于linux操作系統(tǒng)是最具影響力的開源軟件,它的產(chǎn)生揭開了開元運(yùn)動(dòng)的新紀(jì)元,對(duì)自由軟件發(fā)展起到了前所為有的推動(dòng)作用。 linux開放性,也就是它不拘一格的拿來主義精神,吸引了無數(shù)軟件愛好者熱情的投入到其開發(fā)中去,因此linux是當(dāng)今發(fā)展最快,范圍最廣的開元軟件之一。它是社區(qū)中大家最樂意討論和參與的項(xiàng)目,也正是這種開源精神使linux成為操作系統(tǒng)愛好者最好的良師益友,它在教育意義上的貢獻(xiàn)是前所未有的。從這節(jié)起我們將進(jìn)入linux世界去探索操作系統(tǒng)軟件的嚴(yán)謹(jǐn),去感受linux的可愛。linux操作系統(tǒng)的起源 linux的第一個(gè)版本誕生于1991年,它的作者就是現(xiàn)在大名鼎鼎linus torvalds,這個(gè)芬蘭小伙子據(jù)說最初是在做一個(gè)作業(yè)調(diào)度系統(tǒng)的學(xué)校家庭作業(yè),后來他突發(fā)靈感開始著手將系統(tǒng)改造為一個(gè)實(shí)用的操作系統(tǒng),他在開發(fā)初期借助了當(dāng)時(shí)最負(fù)盛名的教育類操作系統(tǒng)minx的一些思想和成果,但他的雄心是要將自己這個(gè)系統(tǒng)變的比minx更實(shí)用、更強(qiáng)健,因此他決定把自己的系統(tǒng)代碼公布于眾,并且歡迎任何支援者來修改和擴(kuò)充linux系統(tǒng)——這正是我們現(xiàn)在耳聞祥熟的gun協(xié)議的權(quán)益——linux選擇了當(dāng)時(shí)在世界上最受推崇的un ix系統(tǒng)接口標(biāo)準(zhǔn):posix.1來作為自己的內(nèi)核系統(tǒng)調(diào)用接口,從此linux成為了unix風(fēng)格操作系統(tǒng)家族中的新貴,而且是一個(gè)代碼完全公開的操作系統(tǒng)。 linux的生命力來自于它的開源思想,自linus公開linux代碼一來,世界各地的軟件工程師和愛好這不斷積極地對(duì)linux系統(tǒng)今進(jìn)行修改和加強(qiáng),先后將其版本從0.1 提高到2.0 、2.2、2.4到如今的2.6,同時(shí)linux也被從初期的x86平臺(tái)移植到了powerpc、sparc、mips、68k等幾乎市面上能找到的所有體系結(jié)構(gòu)上。更另人激動(dòng)的是,拜開源運(yùn)動(dòng)之新風(fēng),數(shù)不勝數(shù)的應(yīng)用軟件出現(xiàn)在linux系統(tǒng)之上,這樣大大加強(qiáng)了linux系統(tǒng)的實(shí)用能力。 linux作為開源軟件中的桂冠,越來越受到歡迎,毫無疑問地成為人氣最旺,最活躍的gun項(xiàng)目,圍繞linux的社區(qū)雨后春筍般的出現(xiàn),這一切都預(yù)示著linux將在教育領(lǐng)域,在工業(yè)領(lǐng)域在政治領(lǐng)域?qū)⒌们八从械某晒Αinux 操作系統(tǒng)的技術(shù)特點(diǎn) linux系統(tǒng)吸收了unix操作系統(tǒng)的精華思想——“簡(jiǎn)單就是美”,因此它采用了緊縮內(nèi)核結(jié)構(gòu),只在內(nèi)核中實(shí)現(xiàn)那些必要的功能,盡量保持內(nèi)核精悍短小。至于那些豐富多彩的附加功能統(tǒng)統(tǒng)交給用戶空間的庫函數(shù)或其它系統(tǒng)軟件或應(yīng)用軟件完成?! ∮袝r(shí)大家將直接將linux內(nèi)核和 linux操作系統(tǒng)化等號(hào),這也沒錯(cuò)的。而我們上文提到的操作操作系統(tǒng)多數(shù)情況不僅僅只內(nèi)核而且還只內(nèi)核之上的系統(tǒng)程序,可以說是廣義的操作系統(tǒng)概念,希望大家區(qū)別?! 榱四苁芤嬗趗nix系統(tǒng)的影響力,linux采用了unix的系統(tǒng)調(diào)用接口標(biāo)準(zhǔn)poxis.1,保證了和unix系統(tǒng)的有限兼容,從而抓住了很大一部分unix技術(shù)人員?! ×硗鈒inux起源于小型計(jì)、通用算機(jī),并非針對(duì)大型和專用計(jì)算機(jī)設(shè)計(jì),因此結(jié)構(gòu)復(fù)雜性和規(guī)范性都比較適中?! ∵€有就是目前多數(shù)linux操作系統(tǒng)版本都是以服務(wù)器為出發(fā)點(diǎn),因此網(wǎng)絡(luò)功能和系管理能力突出,多數(shù)應(yīng)用也是專為網(wǎng)絡(luò)管理服務(wù)的,對(duì)于個(gè)人用戶所關(guān)注的桌面應(yīng)用和嵌入應(yīng)用關(guān)注的實(shí)時(shí)性支持尚且有限(今年linux發(fā)展的一個(gè)重要議題就是針對(duì)桌面和嵌入開發(fā)相應(yīng)的內(nèi)核版本)。 linux 內(nèi)核的特點(diǎn) linux是一種是實(shí)用性很強(qiáng)的現(xiàn)代操作系統(tǒng),開發(fā)它的中 |