




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Linux操作系統(tǒng)結(jié)構(gòu)分析緒論一、分析對(duì)象現(xiàn)今有許多操作系統(tǒng),從巨型機(jī)到臺(tái)式機(jī)到手持機(jī)中都有自己的操作系統(tǒng),經(jīng)常見到的操作系統(tǒng)就有幾十種。如:DOS、Windows 95/98/NT/2000/CE、各種版本的、 etWare,JavaOS 等等。每一種操作系統(tǒng)都有自己的結(jié)構(gòu),不可能全部分析,必須選擇其中最有代表性的一種。選取的原則:流行:主流操作系統(tǒng),對(duì)它的分析具有實(shí)用價(jià)值; 成熟:采用的都是經(jīng)過(guò)驗(yàn)證的、正確、高效的技術(shù);先進(jìn):具有先進(jìn)性,代表了操作系統(tǒng)發(fā)展的潮流;容易得到:能得到可運(yùn)行的系統(tǒng)、及豐富的文檔資料,最好有原碼;滿足以上條件的操作系統(tǒng)有:DOS、Windows 系列、UNIX 及
2、其變種。DOS 可以分析,但過(guò)時(shí)了;.Windows 系列所能得到的資料都是應(yīng)用一級(jí)的,很少有介紹其無(wú)法得到原碼,難以深入分析;實(shí)現(xiàn)的,更UNIX 系統(tǒng)發(fā)展多年,非常成熟;目前仍有很大的市場(chǎng),還算流行;經(jīng)過(guò)不斷的改進(jìn)和演化,其技術(shù)保持先進(jìn)性,對(duì)整個(gè)操作系統(tǒng)的發(fā)展影響深遠(yuǎn);而且可以得到原碼和各種資料,便于分析其結(jié)構(gòu),所以選擇 UNIX 及其變種作為分析對(duì)象?!癠NIX 的種類可能比你見到的冰淇淋的品牌還要多”,應(yīng)選擇一個(gè)有代表性的變種,為此,首先看UNIX 及其變種的發(fā)展和演化:1.產(chǎn)生:1969 AT&T 的貝爾;創(chuàng)造者Ken Thompson 和Dennis Ritchie;環(huán)
3、境DEC PDP 7/11;1973.10 對(duì)外正式發(fā)布。2.:兩大1956 年(BSD、SVR)司法部依據(jù)反托拉斯法向 AT&T 提出,不允許 AT&T 經(jīng)營(yíng)計(jì)算機(jī)產(chǎn)品,因此,UNIX 無(wú)法進(jìn)入商業(yè)領(lǐng)域。AT&T 無(wú)償向大學(xué)和研究機(jī)構(gòu)提供UNIX 系統(tǒng)(包括原碼),用于教學(xué)和研究。其間,AT&T 維護(hù)著 UNIX,用戶從不同的方面對(duì) UNIX 作了許多改進(jìn),AT&T 又將用戶對(duì) UNIX 的改進(jìn)加入到新版本中。此舉導(dǎo)致了 UNIX 在世界范圍內(nèi)廣泛、快速發(fā)展。可以說(shuō),UNIX 開始時(shí)走的是開放、技術(shù)而非商業(yè)的道路。1978 年貝爾將 UNIX 移植到 VAX-11 上,該版本后來(lái)寄給了加州大
4、學(xué)分校(UCB)。分校 1974 年 2 月獲得UNIX證,1978 年獲得 VAX-11/780 和貝爾在 VAX-11 上的 UNIX 新版本。再此基礎(chǔ)上,分校為UNIX 引入了虛存、TCP/IP、快速文件系統(tǒng)、socket 等技術(shù),發(fā)布了自己的版本(Berkeley Software Distribution):1979 年 3BSD、1980 年 4.0BSD、1981 年 4.1BSD、1983 年 4.2BSD、1986 年 4.3BSD、1993 年4.4BSD,93 年后停止開發(fā)。雖然 BSD 仍然是 UNIX,但它和 AT&T 的UNIX 在許多方面都不同,出現(xiàn)了。1982
5、年 AT&T 被允諾進(jìn)入計(jì)算機(jī)市場(chǎng),它很快推出了 UNIX版本:1982 年 System III、1983 年 System V,1984 年 System V Release 2(SVR2)、1987 年 SVR3、SVR4,其中引入了許多新技術(shù),如:虛存(與 BSD 完全不同)、進(jìn)程間通信設(shè)施、框架等;文件系統(tǒng)、共享庫(kù)、StreamsUNIX 商業(yè)版不斷推出,它們要么基于 BSD,要么基于 SVR,從而出現(xiàn)了兩大派別。1987 年 AT&T 與SUN 合作開發(fā)SVR4,引起許多廠商的不滿。1988 年 IBM、Digital、HP、Apollo 等成立開放(OSF);作為,AT&T 和S
6、UN 等公司成立UNIX 國(guó)際(UI)。的商業(yè)產(chǎn)品有:BSDSUN SunOS、DEC Ultrix、SGI IRIX、UCB 4.4BSD; SVR3HP UP-UX、SCO/MS SCO Xenix、SCO SCO UNIX、IBMAIX、Unisys Unisys UNIX 等;SVR4USL(AT&T 的子公司) System V、Novell UnixWare、CrayUNICOS、Dell DelIX SVR4 等;SV+BSDSUN Solaris、Apple A/UX 等。1990 Windows NT 推出,合作。UNIX 的商業(yè)化和標(biāo)準(zhǔn)化發(fā)展引入了許多新技術(shù)(如:SunOS
7、 引入的虛擬文件系統(tǒng)、網(wǎng)絡(luò)文件系統(tǒng),AIX 引入的日志文件系統(tǒng)等),也制定了許多標(biāo)準(zhǔn)(如:IEEE 的IX 標(biāo)準(zhǔn)等),促進(jìn)了整個(gè)操作系統(tǒng)的發(fā)展。3.簡(jiǎn)化內(nèi)核MACH早期的 UNIX,內(nèi)核小巧、簡(jiǎn)單,“小的就是美的”。隨著系統(tǒng)不斷地添加新的功能,內(nèi)核變得越來(lái)越龐大、復(fù)雜和笨拙,有必要將其減肥。80 年代中期,.大學(xué)開發(fā) Mach 操作系統(tǒng),該系統(tǒng)采用微內(nèi)核結(jié)構(gòu),內(nèi)核僅提供必要功能的最小集,并支持 UNIX 編程接口。該系統(tǒng)首次提出微內(nèi)核的概念,對(duì)操作系統(tǒng)的發(fā)展產(chǎn)生了深遠(yuǎn)的影響。DigitaIX、NeXT NextStep、GNU Hurd、等商業(yè)系統(tǒng)都是基于它開發(fā)的。4.教學(xué)需要Minix在早期
8、,只要有 AT&T 的,可以很方便地拿到 UNIX 的原碼,可以說(shuō)UNIX 原碼是公開的,因此,很多大學(xué)的操作系統(tǒng)課程都采用了UNIX。后來(lái) AT&TUNIX 的巨大,原碼不再公開,同時(shí)也限制大學(xué)再講述 UNIX 理論。為了教學(xué)的需要,Andrew S. Tanenbaum 等人決定自己從頭寫一個(gè)與 UNIX 兼容的、完全為教學(xué)服務(wù)(演示操作系統(tǒng)的基本概念)的操作系統(tǒng),這就是 Minix。經(jīng)過(guò)多年的努力,Minix 有了很大發(fā)展,成了一個(gè)完全獨(dú)立的操作系統(tǒng)。但 Minix 是制了它的進(jìn)一步發(fā)展。的系統(tǒng),而且不夠完善,這限1990 年秋天,芬蘭首都的大學(xué)正在開設(shè)操作系統(tǒng)課程,所用的是Andrew
9、 Tanenbaum 的操作系統(tǒng):設(shè)計(jì)與實(shí)現(xiàn),當(dāng)然,講述的是 Minix,上機(jī)用的也是 Minix。其中有一個(gè)學(xué)生:Linus Torvalds。因?yàn)樵趯W(xué)校上機(jī)需要長(zhǎng)時(shí)間排隊(duì)等待,所以,Linus“一氣之下,自己掏錢買了一臺(tái) PC 機(jī)”,并在其上安裝了 Minix。Linus 在自己的 PC 機(jī)上,以 Tanenbaum 教授自行設(shè)計(jì)的微型 Unix 操作系統(tǒng):Minix 為開發(fā),開發(fā)了屬于他自己的第一個(gè)程序?!斑@個(gè)程序包括兩個(gè)進(jìn)程,都是向屏幕上寫字母,然后用一個(gè)定時(shí)器來(lái)切換這兩個(gè)進(jìn)程?!彼貞浾f(shuō),“一個(gè)進(jìn)程寫 A,另一個(gè)進(jìn)程寫 B,所以就在屏幕上看到了 AAAA, BBBB,如此循環(huán)重復(fù)的輸
10、出結(jié)果?!盠inus 說(shuō)剛開始的時(shí)候他根本沒有想到要編寫一個(gè)操作系統(tǒng)內(nèi)核。1991 年,他需要一個(gè)簡(jiǎn)單的終端仿真程序來(lái)存取 Usenet組的內(nèi)容,于是他就在前兩個(gè)草草編寫的進(jìn)程的基礎(chǔ)上又寫了一個(gè)程序。當(dāng)然,他把那些個(gè) A 和 B 改成了別的東西?!耙粋€(gè)進(jìn)程是從鍵盤上閱讀輸入然后發(fā)送給調(diào)制解調(diào)器,另一個(gè)進(jìn)程則是從調(diào)制解調(diào)器上閱讀發(fā)送來(lái)的信息然后送到屏幕上供人閱讀?!比欢獙?shí)現(xiàn)這兩個(gè)新的進(jìn)程,他顯然還需要一些別的東西,這就是驅(qū)動(dòng)程序。他必須為不同的顯示器、鍵盤和調(diào)制解調(diào)器編寫驅(qū)動(dòng)程序。1991年的夏季,也就是在他了第一臺(tái) PC 之后 6 個(gè)月,Linus 覺得他還需要從網(wǎng)上某些文件,為此他必須讀寫
11、某個(gè)磁盤?!坝谑俏矣植坏貌粚懸粋€(gè)磁盤驅(qū)動(dòng)程序,然后是一個(gè)文件系統(tǒng)。而一旦當(dāng)你有了任務(wù)切換器、文件系統(tǒng)和設(shè)備驅(qū)動(dòng)程序之后,你當(dāng)然就擁有了一個(gè) Unix”或者至少是它的一個(gè)內(nèi)核。Linux 就以這樣一種極其古怪但也極其自然的方式問(wèn)世了。 Linux這個(gè)羽毛未豐的操作系統(tǒng)很有可能馬上夭折,所以 Linus 并沒有在 Minix5.組中它。他只是在技術(shù)大學(xué)的一臺(tái) FTP 服務(wù)器上發(fā)了一則消息,說(shuō)用戶可以Linux 的公開版本?!癓inux 是筆名,但是我要是真用它來(lái)命名的話,我擔(dān)心有人會(huì)認(rèn)為我狂妄自大,而且不會(huì)去認(rèn)真地對(duì)待它。所以我當(dāng)時(shí)選了一個(gè)很糟糕的名字:Freax” ,這個(gè)字是由 free()fr
12、eak(怪胎)x的,“我知道這聽起來(lái)令人”。幸好,管理這臺(tái) FTP 服務(wù)器的 Ari Lemmke 根本不喜歡 Freax 這個(gè)名字,他認(rèn)為此套系統(tǒng)為“Linus 的 Minix ”,所以最后還是選擇了Linux。到 1992 年 1 月止,全世界大約只有 100 個(gè)左右的人在使用 Linux,但正是他們?yōu)?Linux 做了關(guān)鍵性的洗禮。他們所提供的所有初期的上載代碼和評(píng)論后來(lái)證明對(duì) Linux 的發(fā)展為了解決 Linux 的錯(cuò)誤而編寫的許多,尤為重要的是那些網(wǎng)上們代碼段。網(wǎng)上的任何人在任何地方都可以得到 Linux 的基本文件,并可通過(guò)電子郵件評(píng)論或者提供修正代碼,Usenet 還專門為它開
13、辟了一個(gè)。于是,Linux 就從最開始的一個(gè)人的產(chǎn)品變成了一副巨大的織錦,變成了由無(wú)數(shù)志同道合的們發(fā)起的一場(chǎng)運(yùn)動(dòng)。后來(lái),Linux 加入了 GNU 組織,它受到越來(lái)越多的人的喜愛,被全世界的 Linux者加工、完善。許多技術(shù)力量雄厚又市場(chǎng)的商業(yè)公司也加入了原先完全由業(yè)余者和網(wǎng)絡(luò)所參與的這場(chǎng) 光了純粹面和眾多的運(yùn)動(dòng),開發(fā)出了多種 Linux 的擴(kuò)散版本(distribution),磨許多粗糙不平的棱角,增加了更易于用戶使用的圖形界開發(fā)工具,極大地拓展了 Linux 的全球用戶基礎(chǔ)。因此 Linux是ernet 上許多人共同努力的結(jié)果,是集體智慧的結(jié)晶。Linus 并不是從頭開始寫 Linux 的
14、。相反地,他是從重用 Minix 的代碼和思想入手的,當(dāng)然,最后所有的 Minix 代碼都或被徹底的重寫了。Linux是在 Minix 上起步的,但在其成長(zhǎng)的過(guò)程中,又接受了 UNIX 的許多成功的。有人評(píng)價(jià)說(shuō):“Linux 是在凝聚了 Unix 過(guò)去所有的成功,并拋棄了其所有缺陷后所形成的 Unix 的全部的精華”。Linux 的特色:多任務(wù):可同時(shí)執(zhí)行多個(gè)程序。多用戶:同一部機(jī)器可供多人同時(shí)使用。支持 386 protected mode: 采用內(nèi)存保護(hù)方式執(zhí)行各程序, 所以個(gè)別的程序失控不會(huì)造成系統(tǒng)當(dāng)機(jī)。動(dòng)態(tài)聯(lián)結(jié) (dynamic linking):程序只在需要時(shí)才裝入內(nèi)存。虛擬內(nèi)存:每
15、個(gè)進(jìn)程都可用到全部的地址空間,但須在硬盤上規(guī)劃一塊區(qū)域作交換區(qū)。copy-on-write pages 支持:意即多個(gè)進(jìn)程(父子)開始時(shí)共享同一塊內(nèi)存頁(yè),但當(dāng)某個(gè)進(jìn)程企圖向共享頁(yè)寫入時(shí),系統(tǒng)在進(jìn)程的地址空間為該頁(yè)創(chuàng)建一個(gè)新的拷貝,以后進(jìn)程各自用自己的私有頁(yè)。如果一直沒有對(duì)共享頁(yè)的寫操作,它們將一直共享該頁(yè)。其好處是增加速度并減少內(nèi)存的使用。符合IX 標(biāo)準(zhǔn),并且其原碼與 System V 及部分 BSD 相容。(注)所有的原碼都是可免費(fèi)獲得的,包括所有的內(nèi)核程序、驅(qū)動(dòng)程序、開發(fā)工具程序、應(yīng)用程序。支持多國(guó)語(yǔ)言。多重虛擬consoles :可使用熱鍵作更換。支持多種常見的文件系統(tǒng):minix-1、
16、 Xenix、 System V filesystems、DOSFAT、OS/2 的HPFS(read-only)等,本身支持兩種 file system:EXT2 and XIAFS,且文件名長(zhǎng)度可至 256 字。 “UMSDOS(Unix-like MSDOS)”: 可在 Dos partition支持各種標(biāo)準(zhǔn) CD-ROM 格式,如 ISO 9660。中安裝 Linux。支持 TCP/IP 協(xié)議,包含 ftp、移植性好:支持大多的硬件安全可靠,受到世界尤其net、NFS 等。計(jì)算機(jī)界的廣泛關(guān)注認(rèn)為,Linux操作系統(tǒng)的一次難得的機(jī)會(huì)。大廠商的支持:IBM、Oracle、Sybase 等都
17、在將自己的產(chǎn)品移植到Linux上。Linus Torvalds 說(shuō):“微軟總是強(qiáng)調(diào)性能只要過(guò)得去就行,并且他們的體積非常大, 而 Linux 卻是(并且也將一直是)強(qiáng)調(diào)技術(shù)問(wèn)題?!边x取 Linux 為分析對(duì)象。Linux 既不屬于 BSD 也不屬于 SVR,但它吸收了兩者的許多優(yōu)點(diǎn)。事實(shí)上, Linux 的許多技術(shù)來(lái)源于 UNIX,因此,也可以說(shuō),Linux 既屬于 BSD 也屬于 SVR,它又沒有完全采用這兩者中的任何一種。有些技術(shù),如Streams,在 Linux 中就沒有采用。二、分析內(nèi)容作為一個(gè)通用的操作系統(tǒng),Linux 包含很多內(nèi)容,1、操作系統(tǒng)的定義也不能全部分析。廣義上說(shuō),操作系
18、統(tǒng)是整個(gè)的內(nèi)容,包括:內(nèi)核及其上的各種系統(tǒng),如圖形界面、S、語(yǔ)言編譯器(gcc 等)、編輯器、瀏覽器等;狹義上說(shuō),操作系統(tǒng)就是內(nèi)核。內(nèi)核之外的都是應(yīng)用程序。通常說(shuō)的 Linux 操作系統(tǒng)指的就是Linux 內(nèi)核,它由 Linus 本人“擁有”,由他直接不斷地開發(fā)、完善,該操作系統(tǒng)中真正屬于 GNU 的、Free 的部分也就是內(nèi)核。Linux 的內(nèi)核是只分析內(nèi)核。2、Linux但作為一個(gè)操作系統(tǒng)不能只有內(nèi)核,還需要有各種工具、以及建立在內(nèi)核上的的、一致的。應(yīng)用程序。在 Linux 內(nèi)核上開發(fā)有許許多多的應(yīng)用程序,這些應(yīng)用程序有的是的、開放的,有的是私有的、成 Linux 的一個(gè)。Linux 的各
19、種的。在 Linux 內(nèi)核上集成不同的應(yīng)用,就構(gòu)Slackware 較早的一個(gè)發(fā)布。Red Hat 已經(jīng)成為最受歡迎的“零售”版本。Caldera 由德國(guó)的 Linux Support Team (LST)(現(xiàn)在是 Caldera 的一部分了)負(fù)責(zé)。Debian 是最老的系統(tǒng)之一,但是由于它是由為緩慢。S.u.S.E.是一個(gè)德國(guó)系統(tǒng)。進(jìn)行開發(fā)的, 它的更新較這些采用的內(nèi)核均是 Linux,只是上面集成的應(yīng)用不同而已。嚴(yán)格地說(shuō),它們不能直接被叫做 Linux,而應(yīng)叫做“以 Linux 為包”。在內(nèi)核上集成進(jìn)來(lái)什么,它就能做什么。3、Linux 版本的操作系統(tǒng)Linux 內(nèi)核的版本號(hào)是由點(diǎn)隔開的三
20、個(gè)數(shù)字(A.BB.CC)。其中第一個(gè)數(shù)是內(nèi)核的版本,現(xiàn)在用的是第三版(2.);第二個(gè)號(hào)碼是的主號(hào),主號(hào)為偶數(shù)(包括 0)的版本是可以使用的穩(wěn)定的版本,如 2.0.36,主號(hào)為奇數(shù)的版本是不一定穩(wěn)定的測(cè)試版,如 2.1.26;最后一個(gè)號(hào)碼是次號(hào),它因每一次改動(dòng)而增加,如 2.0.8,表示它是內(nèi)核 2.0,是穩(wěn)定的內(nèi)核,它已經(jīng)是第九次了。Linus 本人Linux 內(nèi)核新版本的開發(fā),這些新版本的主號(hào)都是奇數(shù)(目前是2.3.xx),一旦他覺得內(nèi)核變得穩(wěn)定了,他就將主號(hào)改為偶數(shù),(目前的是2.2.xx),并將其交給另外的小組,而后開始另一個(gè)版本的開發(fā)(目前是 2.3.xx)。本分析基于Linux 2.
21、0 版。(本書基于穩(wěn)定的 2.0.30 源代碼)。Linux的版本隨者的不同而不同,與 Linux 內(nèi)核的版本號(hào)相對(duì)獨(dú)立。發(fā)行中包含的應(yīng)用的版本也與內(nèi)核無(wú)關(guān)。例如,RedHat5.2 中包括:內(nèi)核:Linux2.0.36;WWW Server:Apache 1.3.3;系統(tǒng):Send_8.8.7;DNS:Bind 8.1.2; NEWS: inn 1.7.2; Xwindow:Xfree86 3.3.2; C 語(yǔ)言:gcc 2.7.2;相對(duì)于 FreeBSD 類操作系統(tǒng),Linux 的巨大優(yōu)勢(shì)就在于有 Linus。 他專注于內(nèi)核,代碼和質(zhì)量,幾乎完全避開政治。他讓其他人處理“用戶空間”(庫(kù)、編
22、譯器、以及包含在任何 Linux套件里的各種工具和應(yīng)用程序。)從這種“溫和的核上帝”(在他以前者”模式中獲益把 Linus 看作是“Linux 內(nèi)是一神教)。一無(wú)所有,而且就此而言當(dāng) Linus 最終退休時(shí)(這也許在死后很長(zhǎng)時(shí)間才會(huì)發(fā)生),Linux 內(nèi)核開發(fā)者們的希望就在于能一致接受一個(gè)繼任者一個(gè)新的溫和的者。那將是像 Alan Cox、Stephen Tdie 這樣的人,或?qū)⑹敲诸l繁出現(xiàn)在 Linux-kernelinglist 的某個(gè)人(對(duì)此我知道得并不多)。Linus 開玩笑地把他的女兒稱為L(zhǎng)inus 2.0 和 3.0 (如果她們有并且精通技術(shù),可能會(huì)建立一種世襲的寡頭政體)。讓過(guò)
23、 15 年后再看。三、分析方法最好是讀原碼,但原碼多而復(fù)雜,需要有指導(dǎo),所以需要先看文檔。原則:看文檔+讀原碼。就是說(shuō),查看內(nèi)核源程序是深入地理解 Linux 操作系統(tǒng)的一個(gè)富有成效的練習(xí)。參考文獻(xiàn):1、Linux 有幾本電子文檔,如安裝指南、用戶手冊(cè)、管理員指南、指南等,其中有一本叫 Linux 內(nèi)核(Linux Kernel),以此為藍(lán)本??稍谠S多站點(diǎn)找到,光盤上也有,還有中文翻譯,可在 http/原文。2、書店出售的書中有一本電子工業(yè)/上,但翻譯得很爛,建議讀的Linux 實(shí)用魏永明 楊飛月編著,其中有該文檔的部分翻譯,可參考。3、UNIX 高級(jí)等譯。系統(tǒng)技術(shù)(美)Uresh Vahal
24、ia 著,之 王4、網(wǎng)上、報(bào)上、雜志上的各種有關(guān) Linux 的資料。四、The Linux Kernel Sour(Linux 內(nèi)核源程序)下面是 Linux 內(nèi)核源程序的概覽:它們?nèi)绾谓M織,你應(yīng)該從哪里開始查找特定的代碼等等。Where to Get The Linux Kernel Sour從哪里得到 Linux 內(nèi)核源程序)所有主要的Linux(Craftworks,Debian,Slackware,RedHat 等等)中都有內(nèi)核源程序。通常,安裝在你系統(tǒng)上的 Linux 內(nèi)核都是用這些源程序建立的。實(shí)際上這些源程序顯得有些過(guò)時(shí), 所以你可能希望得到的源程序。的源程序放在ftp:/ft
25、p.cs.helsinki.fi 和其它所有的鏡像的web 站點(diǎn)上。helsinki 的 web 站點(diǎn),但是其它站點(diǎn),例如 MIT 和 Sunsite 也不會(huì)太。如果你無(wú)法web,還有許多 CD ROM 廠家用非常合理的費(fèi)用提供世界主要 web站點(diǎn)的快照(snapshots)。一些廠商甚至提供預(yù)訂服務(wù),按季或月進(jìn)行更新。你的本地的Linux 用戶組也是一個(gè)源程序的好的來(lái)源。對(duì)于內(nèi)核源程序的改動(dòng)是用 patch 文件分發(fā)的。工具 patch 可以對(duì)于一組源文件做一系列的修改。例如,如果你有 2.0.29 的源程序樹,而你希望轉(zhuǎn)移到 2.0.30,你可以先獲取 2.0.30 的 patch 文件,
26、然后把這些 patch(編輯)應(yīng)用到 2.0.29 源程序樹上:$ cd /usr/src/linux$ patch -p1 patch-2.0.30這樣可以不用拷貝整個(gè)源程序樹,特別對(duì)于慢速的串行連接。一個(gè)內(nèi)核補(bǔ)丁(正式和非正式的)的好來(lái)源是 http。How The Kernel SourAre Arranged(內(nèi)核源程序如何組織)在源程序樹的最上層你會(huì)看到一些目錄:archarch 子目錄包括所有和體系結(jié)構(gòu)相關(guān)的內(nèi)核代碼。它還有更深的子目錄,每一種支持的體系結(jié)構(gòu),例如 i386 和 alpha。一includeinclude 子目錄包括編譯內(nèi)核所需要的大部分 include 文件。它也
27、有更深的子目錄,每一個(gè)支持的體系結(jié)構(gòu)一個(gè)。include/asm 是這系結(jié)構(gòu)所需要的真實(shí)的include 目錄的軟,例如 include/asm-i386。為了改變體系結(jié)構(gòu),你需要編輯內(nèi)核的 makefile 文件,并重新運(yùn)行 Linux 的內(nèi)核配置程序。init這個(gè)目錄包含內(nèi)核的初始化代碼,這是研究?jī)?nèi)核如何工作的一個(gè)非常好的起點(diǎn)。mm這個(gè)目錄包括所有的內(nèi)存管理代碼,包括內(nèi)核內(nèi)存管理和虛擬內(nèi)存管理。但和體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼則位于arch/*/mm/,例如 arch/i386/mm/fault.c。 drivers系統(tǒng)所有的設(shè)備驅(qū)動(dòng)程序都在這個(gè)目錄中。它們又按設(shè)備驅(qū)動(dòng)程序類被劃分成多個(gè)子目
28、錄,例如block、pci、net 等。ipc這個(gè)目錄包含內(nèi)核的進(jìn)程間通訊的代碼,共享內(nèi)存、信號(hào)燈、消息隊(duì)列等。modules這只是一個(gè)用來(lái)存放建立好的模塊的目錄。通常為空。fs所有的文件系統(tǒng)的代碼。它又被劃分成子目錄,每一個(gè)支持的文件系個(gè),例如 vfat 和ext2。kernel主要的內(nèi)核代碼,如進(jìn)程的創(chuàng)建、終止、調(diào)度,以及信號(hào)、時(shí)鐘等。同樣,和體系結(jié)構(gòu)相關(guān)的內(nèi)核代碼放在 arch/*/kernel 中。net內(nèi)核的網(wǎng)絡(luò)代碼,包括 TCP/IP 協(xié)議、Socket 以及相關(guān)的內(nèi)容。lib這個(gè)目錄放置內(nèi)核的庫(kù)代碼,如 vsprf、串處理函數(shù)、解壓縮函數(shù)等。和體系結(jié)構(gòu)相關(guān)的庫(kù)代碼在 arch/*
29、/lib/中。scripts這個(gè)目錄包含(例如awk 和 tk),用于配置內(nèi)核。Where to Start Looking(從哪里開始看)看像 Linux 內(nèi)核這么巨大而復(fù)雜的程序是相當(dāng)?shù)摹K拖褚粋€(gè)巨大的線球,顯示不出終點(diǎn)??磧?nèi)核的一部分代碼通常會(huì)被引到查看其它幾個(gè)相關(guān)的文件,你就會(huì)忘記你最初要看的是什么。下一節(jié)給你一個(gè)提示,對(duì)于一個(gè)給定的,最好看源程序樹的那個(gè)地方。1、System Startup and Initialization(系統(tǒng)啟動(dòng)和初始化)在一個(gè) el 系統(tǒng)上,當(dāng) loadlin.exe 或 LILO 把內(nèi)核加載到內(nèi)存并把控制權(quán)交給它的時(shí)候,內(nèi)核開始啟動(dòng)。有關(guān)這一部分可看
30、arch/i386/kernel/head.S。head.S 執(zhí)行一些和體系結(jié)構(gòu)相關(guān)的設(shè)置工作,然后跳到 init/main.c 中的 main()例程。2、Memory Management(內(nèi)存管理)這部分代碼大多在 mm 中,但和體系結(jié)構(gòu)相關(guān)的代碼則在 arch/*/mm 中。Page fault處理代碼在 mm/memory.c 中,內(nèi)存和頁(yè)緩存代碼在 mm/filemap.c 中。Buffer cache 在mm/buffer.c 中實(shí)現(xiàn),交換緩存在 mm/swap_se.c 和mm/swapfile.c 中。3、Kernel大部分相對(duì)通用的代碼在 kernel,而和體系結(jié)構(gòu)相關(guān)的代
31、碼則在 arch/*/kernel 中。調(diào)度程序在 kernel/sched.c , fork 代碼在 kernel/fork.c 。 bottom half 處理代碼在 include/linux/ errupt.h。task_struct 數(shù)據(jù)結(jié)構(gòu)可以在 include/linux/sched.h 中找到。4、PCIPCI 偽驅(qū)動(dòng)程序在 drivers/pci/pci.c,系統(tǒng)范圍的定義在 include/linux/pci.h。每一種體系結(jié)構(gòu)都有一些特殊的 PCI BIOS 代碼,Alpha AXP 的位于 arch/alpha/kernel/bios32.c。5、ros Communi
32、cation全部在 ipc 目錄。所有 System V IPC 對(duì)象都包括在 ipc_perm 數(shù)據(jù)結(jié)構(gòu)中,并可以在include/linux/ipc.h 中找到。System V 的消息在 ipc/msg.c 中實(shí)現(xiàn),共享內(nèi)存在 ipc/shm.c 中,信號(hào)燈在 ipc/sem.c,管道在 ipc/pipe.c 中實(shí)現(xiàn)。6、errupndling內(nèi)核的中斷處理代碼幾乎都是和微處理器(通常也和代碼在 arch/i386/kernel/irq.c 它的定義在 incude/asm-i386/irq.h。7、Device Drivers(設(shè)備驅(qū)動(dòng)程序)相關(guān)的。 el 中斷處理Linux 內(nèi)核源代碼的大部分代碼行在它的設(shè)備驅(qū)動(dòng)程序中。Linux 所有的設(shè)備驅(qū)動(dòng)程序源代碼都在 drivers 子目錄中,它們又被進(jìn)一步分類:/block塊設(shè)備驅(qū)動(dòng)程序,比如 ide(ide.c)。如果你希望查看所有可能包含文件系統(tǒng)的設(shè)備是如何初始化的,你可以看 drivers/block/genhd.c 中的 device_setup()。它不僅初始化硬盤,也初始化網(wǎng)絡(luò),因?yàn)楫?dāng)安裝 nfs 文件系統(tǒng)的時(shí)候需要網(wǎng)絡(luò)。塊設(shè)備包括基于
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高爐均壓放散減壓閥組消聲器項(xiàng)目發(fā)展計(jì)劃
- 干掛鋁塑板施工方案
- 新城化糞池施工方案
- 監(jiān)控機(jī)房裝飾施工方案
- 肋板臺(tái)施工方案
- 精神心理健康知識(shí)講座
- 環(huán)評(píng)知識(shí)培訓(xùn)課件
- 課題開題報(bào)告:黃炎培職業(yè)教育教師觀研究與實(shí)踐
- 課題開題報(bào)告:湖北省農(nóng)村產(chǎn)業(yè)融合發(fā)展與大學(xué)生就業(yè)策略研究
- 課題開題報(bào)告:紅色文化教育培養(yǎng)目標(biāo)、教學(xué)目標(biāo)研究
- GB/T 41326-2022六氟丁二烯
- 注塑模具分類及結(jié)構(gòu)組成
- GB/T 14002-2008勞動(dòng)定員定額術(shù)語(yǔ)
- 盆腔炎性疾病后遺癥-病因病機(jī)-(中醫(yī))
- 沁園春雪拼音版
- 傳染病防治法培訓(xùn)講義課件
- 法律方法階梯實(shí)用版課件
- KET詞匯表(英文中文完整版)
- 實(shí)驗(yàn) 探究彈簧彈力與形變量的關(guān)系2022-2023學(xué)年高一物理(人教版2019必修第一冊(cè))
- 《三位數(shù)的加減法》單元分析
- 鋼管樁的計(jì)算公式
評(píng)論
0/150
提交評(píng)論