Linux操作系統(tǒng)與應(yīng)用 第一章_第1頁
Linux操作系統(tǒng)與應(yīng)用 第一章_第2頁
Linux操作系統(tǒng)與應(yīng)用 第一章_第3頁
Linux操作系統(tǒng)與應(yīng)用 第一章_第4頁
Linux操作系統(tǒng)與應(yīng)用 第一章_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第一章 操作系統(tǒng)概述認(rèn)識操作系統(tǒng) 操作系統(tǒng)的發(fā)展開放源代碼的Unix/Linux操作系統(tǒng) Linux內(nèi)核 Linux內(nèi)核源代碼 Linux 內(nèi)核模塊編程入門Linux 內(nèi)核中鏈表的實(shí)現(xiàn)及應(yīng)用認(rèn)識操作系統(tǒng)認(rèn)識操作系統(tǒng)v打開計(jì)算機(jī),首先跳入眼簾的是什么?v要拷貝一個(gè)文件,具體的拷貝操作是誰完成的?l你需要知道文件存放在何處嗎?l柱面、磁道、扇區(qū)描述什么?l數(shù)據(jù)的搬動(dòng)過程怎樣進(jìn)行v繁瑣留給自己,簡單留給用戶 l操作系統(tǒng)穿上華麗的外衣圖形界面l操作系統(tǒng)穿上樸素的外衣字符界面認(rèn)識操作系統(tǒng)認(rèn)識操作系統(tǒng)從使用者的角度看從使用者的角度看v拷貝命令的C語言實(shí)現(xiàn)片斷inf=open(“/floppy/TEST”,

2、O_RDONLY,0);inf=open(“/floppy/TEST”,O_RDONLY,0);out=open(“/mydir/test”,O_WRONLY,0600);out=open(“/mydir/test”,O_WRONLY,0600); do dol=read(inf,buf,4096);l=read(inf,buf,4096);write(outf,buf,l);write(outf,buf,l); while(l); while(l);close(outf);close(outf);close(inf);close(inf);認(rèn)識操作系統(tǒng)認(rèn)識操作系統(tǒng)從程序開發(fā)者的角度看從程序開

3、發(fā)者的角度看 瀏覽器 信息管理 文件管理系統(tǒng) 游戲 編譯程序 編輯程序 命令 解釋程序 操作系統(tǒng) CPU、內(nèi)存、I/O接口硬件內(nèi)核 認(rèn)識操作系統(tǒng)認(rèn)識操作系統(tǒng)從所處位置看從所處位置看操作系統(tǒng)是其它所有用戶程序運(yùn)行的基礎(chǔ)。 #includemain()printf(“ Hello worldn”)用戶告訴操作系統(tǒng)執(zhí)行用戶告訴操作系統(tǒng)執(zhí)行testtest程序程序 操作系統(tǒng)通過文件名找到該程序操作系統(tǒng)通過文件名找到該程序 檢查其類型檢查其類型, ,檢查程序首部,找出代檢查程序首部,找出代碼和數(shù)據(jù)存放的地址碼和數(shù)據(jù)存放的地址文件系統(tǒng)找到第一個(gè)磁盤塊文件系統(tǒng)找到第一個(gè)磁盤塊 操作系統(tǒng)建立程序的執(zhí)行環(huán)境操作

4、系統(tǒng)建立程序的執(zhí)行環(huán)境 操作系統(tǒng)把程序從磁盤裝入內(nèi)存,并操作系統(tǒng)把程序從磁盤裝入內(nèi)存,并跳到程序開始處執(zhí)行跳到程序開始處執(zhí)行 該程序的執(zhí)行過程簡述如下該程序的執(zhí)行過程簡述如下:操作系統(tǒng)檢查字符串的位置是否正確操作系統(tǒng)檢查字符串的位置是否正確 操作系統(tǒng)找到字符串被送往的設(shè)備操作系統(tǒng)找到字符串被送往的設(shè)備 操作系統(tǒng)將字符串送往輸出設(shè)備窗口操作系統(tǒng)將字符串送往輸出設(shè)備窗口系統(tǒng)確定這是一個(gè)合法的操作,然后系統(tǒng)確定這是一個(gè)合法的操作,然后將字符串轉(zhuǎn)換成像素將字符串轉(zhuǎn)換成像素窗口系統(tǒng)將像素寫入存儲映像區(qū)窗口系統(tǒng)將像素寫入存儲映像區(qū) 視頻硬件將像素表示轉(zhuǎn)換成一組模擬視頻硬件將像素表示轉(zhuǎn)換成一組模擬信號控制顯

5、示器(重畫屏幕)信號控制顯示器(重畫屏幕) 顯示器發(fā)射電子束。你在屏幕上看到顯示器發(fā)射電子束。你在屏幕上看到Hello worldHello world。 從中看從中看到什么到什么認(rèn)識操作系統(tǒng)認(rèn)識操作系統(tǒng)從程序執(zhí)行看從程序執(zhí)行看從操作系統(tǒng)設(shè)計(jì)者的角度看v操作系統(tǒng)的設(shè)計(jì)目標(biāo)是什么?l 盡可能地方便用戶使用計(jì)算機(jī) l 讓各種軟件資源和硬件資源高效而協(xié)調(diào)地運(yùn)轉(zhuǎn)起來。 v計(jì)算機(jī)的硬件資源和軟件資源各指什么?v假設(shè)在一臺計(jì)算機(jī)上有三道程序同時(shí)運(yùn)行,并試圖在一臺打印機(jī)上輸出運(yùn)算結(jié)果,必須考慮哪些問題 ?v從操作系統(tǒng)設(shè)計(jì)者的角度考慮,一個(gè)操作系統(tǒng)必須包含以下幾部分 l 操作系統(tǒng)接口l CPU管理l 內(nèi)存管理

6、l 設(shè)備管理l 文件管理認(rèn)識操作系統(tǒng)認(rèn)識操作系統(tǒng)從設(shè)計(jì)者角度看從設(shè)計(jì)者角度看 操作系統(tǒng)操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)中的一個(gè)系統(tǒng)軟件,是一些程序模塊的集合它們能以盡量有效、合理的方式組織和管理計(jì)算機(jī)的軟硬件資源,合理的組織計(jì)算機(jī)的工作流程,控制程序的執(zhí)行并向用戶提供各種服務(wù)功能,使得用戶能夠靈活、方便、有效的使用計(jì)算機(jī),使整個(gè)計(jì)算機(jī)系統(tǒng)能高效、順暢地運(yùn)行。認(rèn)識操作系統(tǒng)認(rèn)識操作系統(tǒng)定義定義操作系統(tǒng)的組成操作系統(tǒng)的組成(1) 通常意義上的操作系統(tǒng)被認(rèn)為是整個(gè)系統(tǒng)中負(fù)責(zé)完成最通常意義上的操作系統(tǒng)被認(rèn)為是整個(gè)系統(tǒng)中負(fù)責(zé)完成最基本的功能和系統(tǒng)管理的部分。除了內(nèi)核,這些部分還應(yīng)該基本的功能和系統(tǒng)管理的部分。除了內(nèi)核

7、,這些部分還應(yīng)該包括啟動(dòng)引導(dǎo)程序、命令行包括啟動(dòng)引導(dǎo)程序、命令行shell或者其他種類的用戶界面、或者其他種類的用戶界面、基本的文件管理工具和系統(tǒng)工具等。基本的文件管理工具和系統(tǒng)工具等。 實(shí)際上,人們在得到操作系統(tǒng)的同時(shí),更需要的是構(gòu)架實(shí)際上,人們在得到操作系統(tǒng)的同時(shí),更需要的是構(gòu)架于其上的應(yīng)用軟件,從而完成所需的實(shí)際功能。為此,操作于其上的應(yīng)用軟件,從而完成所需的實(shí)際功能。為此,操作系統(tǒng)一般要和應(yīng)用軟件綁定發(fā)行和出售。這樣的軟件包在系統(tǒng)一般要和應(yīng)用軟件綁定發(fā)行和出售。這樣的軟件包在linux領(lǐng)域被稱作發(fā)布版。領(lǐng)域被稱作發(fā)布版。 操作系統(tǒng)的組成操作系統(tǒng)的組成(2) 從從開發(fā)者開發(fā)者的角度看,的

8、角度看,操作系統(tǒng)本質(zhì)上是大型軟件包操作系統(tǒng)本質(zhì)上是大型軟件包,因此,因此結(jié)構(gòu)組織不會(huì)與其它大型軟件迥異:操作系統(tǒng)的設(shè)計(jì)采用分層結(jié)構(gòu)組織不會(huì)與其它大型軟件迥異:操作系統(tǒng)的設(shè)計(jì)采用分層結(jié)構(gòu),越向上層抽象程度越高,越接近用戶;越向下層,越靠結(jié)構(gòu),越向上層抽象程度越高,越接近用戶;越向下層,越靠近硬件,抽象也越接近硬件。近硬件,抽象也越接近硬件。 上層軟件依靠下層軟件提供的服務(wù),而且上層軟件自身還上層軟件依靠下層軟件提供的服務(wù),而且上層軟件自身還提供附加服務(wù)。因此,操作系統(tǒng)的結(jié)構(gòu)整體總體呈現(xiàn)倒金字塔提供附加服務(wù)。因此,操作系統(tǒng)的結(jié)構(gòu)整體總體呈現(xiàn)倒金字塔形。形。 用一組簡單的公式描述操作系統(tǒng)的組成要素:

9、用一組簡單的公式描述操作系統(tǒng)的組成要素:操作系統(tǒng)操作系統(tǒng)= =內(nèi)核內(nèi)核+ +系統(tǒng)程序系統(tǒng)程序系統(tǒng)程序系統(tǒng)程序= =編譯環(huán)境編譯環(huán)境+API(+API(應(yīng)用程序接口應(yīng)用程序接口)+AUI()+AUI(用戶接口用戶接口) )編譯環(huán)境編譯環(huán)境= =編譯程序編譯程序+ +鏈接程序鏈接程序+ +裝載程序裝載程序API=shell+API=shell+系統(tǒng)服務(wù)例程系統(tǒng)服務(wù)例程+ +應(yīng)用程序應(yīng)用程序?qū)τ谡麄€(gè)軟件系統(tǒng):對于整個(gè)軟件系統(tǒng):軟件系統(tǒng)軟件系統(tǒng)= =操作系統(tǒng)操作系統(tǒng)+AUI+AUI操作系統(tǒng)的演變v單道批處理系統(tǒng)單道批處理系統(tǒng) l串行執(zhí)行預(yù)先組織好的一組一組任務(wù) l提高了系統(tǒng)效率 。 v多道批處理系統(tǒng)多

10、道批處理系統(tǒng) l可以交錯(cuò)運(yùn)行多個(gè)程序 l再次提高系統(tǒng)效率。v分時(shí)分時(shí)系統(tǒng)系統(tǒng)l將處理器的運(yùn)行時(shí)間分成數(shù)片,均分或依照一定權(quán)重派發(fā)給系統(tǒng)中的用戶使用 l快速響應(yīng) 操作系統(tǒng)的發(fā)展操作系統(tǒng)的發(fā)展硬件角度下的操作系發(fā)展軌跡 年 代 硬 件 特點(diǎn) 操作系統(tǒng)特點(diǎn) 背 景 機(jī)械計(jì)算機(jī)時(shí)代17世紀(jì)20世紀(jì)初 1)純機(jī)械結(jié)構(gòu),低速2)只能進(jìn)行簡單的數(shù)學(xué)運(yùn)算 純手工操作 從計(jì)算尺至差分機(jī)到分析機(jī)發(fā)展了數(shù)百年第一代計(jì)算機(jī)1946年50年代末電子管計(jì)算機(jī) 1)體積大、能耗高、故障多、價(jià)格貴2)難以普及應(yīng)用 無操作系統(tǒng)(程序按機(jī)器碼編寫,載體從插件板到卡片與紙帶) 1906年發(fā)明電子管1946 ENIAC研制成功(第一

11、臺電子管計(jì)算機(jī)) 年 代 硬 件 特點(diǎn) 操作系統(tǒng)特點(diǎn) 背 景 第二代計(jì)算機(jī)50年代末60年代中期晶體管計(jì)算機(jī) 1)采用印刷電路2)穩(wěn)定性與可靠性 大 大 提 高3)批量生產(chǎn)成為可能4)進(jìn)入實(shí)際應(yīng)用領(lǐng)域但數(shù)量有限1)單道批處理系統(tǒng)2)操作系統(tǒng)以監(jiān)督軟件形式出現(xiàn)3)任務(wù)按順序方式處理 1947年發(fā)明晶體管 第三代計(jì)算機(jī)60年代中期70年代初集成電路計(jì)算機(jī) 1)體積減小,性價(jià) 比 迅 速 提 高2)小型計(jì)算機(jī)發(fā)展迅速3)進(jìn)入商業(yè)應(yīng)用4)尚不適合家庭應(yīng)用的需求1)涌現(xiàn)大批操作系統(tǒng)多道批處理系統(tǒng)、分時(shí)系統(tǒng)和實(shí)時(shí)系統(tǒng)2)奠定了現(xiàn)代操作系統(tǒng)的基本框架 1958年發(fā)明集成電路1971年INTEL發(fā)明微處理器

12、硬件角度下的操作系統(tǒng)發(fā)展軌跡硬件角度下的操作系統(tǒng)發(fā)展軌跡分析v在硬件的性價(jià)比較低的時(shí)候,操作系統(tǒng)設(shè)計(jì)追求什么? v在硬件性價(jià)比越來越高后,操作系統(tǒng)的設(shè)計(jì)開始追求的目標(biāo)是什么?v計(jì)算機(jī)開始普及后,操作系統(tǒng)的設(shè)計(jì)開始追求?v從第三代到第四代計(jì)算機(jī),操作系統(tǒng)的發(fā)展逐漸擺脫追隨硬件發(fā)展的狀況 ,形成自己的理論體系v進(jìn)入第四代系統(tǒng)后,分布式系統(tǒng)和多處理器系統(tǒng)雖然極大的擴(kuò)充了操作系統(tǒng)理論,但系統(tǒng)結(jié)構(gòu)并沒有變化,只是各功能模塊得以進(jìn)一步完善。 操作系統(tǒng)的發(fā)展操作系統(tǒng)的發(fā)展硬件角度下操作系統(tǒng)發(fā)展的分析硬件角度下操作系統(tǒng)發(fā)展的分析主流操作系統(tǒng) 系統(tǒng)特點(diǎn) 計(jì) 算 機(jī) 語 言 背 景 無 手工操作 無編程語言直接使

13、用機(jī)器代碼 1936年圖靈提出圖靈機(jī) 單道批處理系統(tǒng) 作業(yè)運(yùn)行的監(jiān)督程序 編程語言雛形期 1957年 FORTRAN語言開發(fā)成功多道批處理分時(shí)系統(tǒng)實(shí)時(shí)系統(tǒng)多處理系統(tǒng) 操作系統(tǒng)結(jié)構(gòu)確立,分為處理機(jī)管理、內(nèi)存管理、設(shè)備管理、文件管理等模塊 1)編程語言大量涌現(xiàn)2)結(jié)構(gòu)化程序設(shè)計(jì)3)C語言逐漸 60年代的軟件危機(jī)導(dǎo)致軟件工程的發(fā)展1969年 Unix誕生1972年 C語言推出 主流操作系統(tǒng) 系統(tǒng)特點(diǎn) 計(jì) 算 機(jī) 語 言 背 景 類Unix系列WINDOWS系列 人機(jī)交互成為主題1)可視化界面2)多媒體技 面向?qū)ο笳Z言成為主流 80年代中期開始面向?qū)ο蠹夹g(shù)逐步發(fā)展網(wǎng)絡(luò)操作系統(tǒng)分布式操作系統(tǒng) 微內(nèi)核技術(shù)

14、興起 1)JAVA語言2)腳本語言興起 1995年JAVA推出 嵌入式系統(tǒng) 單內(nèi)核與微內(nèi)核競爭激烈 編程工具向跨平臺方向發(fā) 1991年免費(fèi)的操作系統(tǒng)Linux發(fā)布 軟件角度下的操作系統(tǒng)發(fā)展軌跡軟件角度下的操作系統(tǒng)發(fā)展軌跡 分析v程序設(shè)計(jì)理論約束著操作系統(tǒng)設(shè)計(jì)。操作系統(tǒng)的發(fā)展滯后于計(jì)算機(jī)語言的發(fā)展,從結(jié)構(gòu)化設(shè)計(jì)到對象化設(shè)計(jì),操作系統(tǒng)總是最后應(yīng)用新編程理論的軟件之一。 v至今操作系統(tǒng)對于是否需要徹底對象化(即微內(nèi)核化),還處于徘徊時(shí)期,仍在探索單內(nèi)核與微內(nèi)核的最佳結(jié)合方式。v人機(jī)交互技術(shù)主要是為用戶考慮,這是對操作系統(tǒng)設(shè)計(jì)進(jìn)行的變革。 v以Linux為代表的開源軟件的出現(xiàn),打破了帶有神秘色彩的傳統(tǒng)

15、的封閉式開發(fā)模式。 軟件角度下的操作系統(tǒng)發(fā)展軌跡分析軟件角度下的操作系統(tǒng)發(fā)展軌跡分析 講究效率的單模塊操作系統(tǒng)講究效率的單模塊操作系統(tǒng)進(jìn)程管理進(jìn)程管理內(nèi)存管理內(nèi)存管理設(shè)備管理設(shè)備管理文件管理文件管理模塊之間可以互相調(diào)用的單模塊結(jié)構(gòu)模塊之間可以互相調(diào)用的單模塊結(jié)構(gòu)講究效率的單模塊操作系統(tǒng)講究效率的單模塊操作系統(tǒng)v模塊之間直接調(diào)用函數(shù),除了函數(shù)調(diào)用的開銷模塊之間直接調(diào)用函數(shù),除了函數(shù)調(diào)用的開銷外,沒有額外開銷。外,沒有額外開銷。v龐大的操作系統(tǒng)有數(shù)以千計(jì)的函數(shù)v復(fù)雜的調(diào)用關(guān)系勢必導(dǎo)致操作系統(tǒng)維護(hù)的困難追求簡潔的微內(nèi)核操作系統(tǒng)追求簡潔的微內(nèi)核操作系統(tǒng)客戶進(jìn)程客戶進(jìn)程進(jìn)程服務(wù)器進(jìn)程服務(wù)器內(nèi)存服務(wù)器內(nèi)存

16、服務(wù)器文件服務(wù)器文件服務(wù)器微內(nèi)核微內(nèi)核追求簡潔的微內(nèi)核操作系統(tǒng)追求簡潔的微內(nèi)核操作系統(tǒng)v內(nèi)核與各個(gè)服務(wù)器之間通過通信機(jī)制進(jìn)行交互內(nèi)核與各個(gè)服務(wù)器之間通過通信機(jī)制進(jìn)行交互,這使得微內(nèi)核結(jié)構(gòu)的效率大大折扣。,這使得微內(nèi)核結(jié)構(gòu)的效率大大折扣。v內(nèi)核發(fā)出請求,服務(wù)器做出應(yīng)答v為各個(gè)服務(wù)器模塊的相對獨(dú)立性,使得其維護(hù)相對容易歷史悠久的歷史悠久的Unixv在在MULTICS(1969) 的肩上的肩上制研制者制研制者Ken Thompson和和Dennis M. Ritchie Unix的誕生還伴有的誕生還伴有C語言呱呱落地語言呱呱落地UnixUnix是現(xiàn)代操作系統(tǒng)的代表:安全、可靠、強(qiáng)大是現(xiàn)代操作系統(tǒng)的代

17、表:安全、可靠、強(qiáng)大的計(jì)算能力的計(jì)算能力UnixUnix的商業(yè)化是一把雙刃劍的商業(yè)化是一把雙刃劍 自由而奔放的黑馬自由而奔放的黑馬Linux誕生于學(xué)生之手誕生于學(xué)生之手成長于成長于Internet Internet 壯大于自由而開壯大于自由而開放的文化放的文化芬蘭、赫爾辛基大學(xué)、芬蘭、赫爾辛基大學(xué)、19901990起始于寫兩個(gè)進(jìn)程起始于寫兩個(gè)進(jìn)程 然后寫驅(qū)動(dòng)程序、文件然后寫驅(qū)動(dòng)程序、文件系統(tǒng)、任務(wù)切換程序,系統(tǒng)、任務(wù)切換程序,從而形成一個(gè)操作系統(tǒng)從而形成一個(gè)操作系統(tǒng)鄒形鄒形vPOSIX POSIX 表示可移植操作系統(tǒng)接口(表示可移植操作系統(tǒng)接口(Portable Operating Syste

18、m InterfacePortable Operating System Interface) vPOSIXPOSIX是在是在UnixUnix標(biāo)準(zhǔn)化過程中出現(xiàn)的產(chǎn)物。標(biāo)準(zhǔn)化過程中出現(xiàn)的產(chǎn)物。 vPOSIX 1003.1POSIX 1003.1標(biāo)準(zhǔn)定義了一個(gè)最小的標(biāo)準(zhǔn)定義了一個(gè)最小的UnixUnix操作系統(tǒng)接口操作系統(tǒng)接口 v任何操作系統(tǒng)只有符合這一標(biāo)準(zhǔn),才有可任何操作系統(tǒng)只有符合這一標(biāo)準(zhǔn),才有可能運(yùn)行能運(yùn)行UnixUnix程序程序 vGNU GNU 是是 GNU Is Not Unix GNU Is Not Unix 的遞歸縮寫,是自的遞歸縮寫,是自由軟件基金會(huì)的一個(gè)由軟件基金會(huì)的一個(gè)項(xiàng)目項(xiàng)目

19、 。 v GNU GNU 項(xiàng)目產(chǎn)品包括項(xiàng)目產(chǎn)品包括 emacs emacs 編輯器、著名的編輯器、著名的 GNU C GNU C 和和 GccGcc編譯器等,這些軟件叫做編譯器等,這些軟件叫做GNUGNU軟軟件。件。vGNU GNU 軟件和派生工作均適用軟件和派生工作均適用 GNU GNU 通用公共許通用公共許可證,即可證,即 GPLGPL(General Public License ) vLinuxLinux的開發(fā)使用了眾多的的開發(fā)使用了眾多的GUNGUN工具工具vGPL GPL 允許軟件作者擁有軟件版權(quán)允許軟件作者擁有軟件版權(quán) v但但GPLGPL規(guī)定授予其他任何人以合法復(fù)制、規(guī)定授予其他

20、任何人以合法復(fù)制、發(fā)發(fā)行和修改軟件的權(quán)利。行和修改軟件的權(quán)利。v符合符合 POSIX POSIX 標(biāo)準(zhǔn)的操作系統(tǒng)內(nèi)核、標(biāo)準(zhǔn)的操作系統(tǒng)內(nèi)核、 Shell Shell 和外圍工具。和外圍工具。 v C C 語言編譯器和其他開發(fā)工具及函數(shù)庫語言編譯器和其他開發(fā)工具及函數(shù)庫 vX Window X Window 窗口系統(tǒng)窗口系統(tǒng) v各種應(yīng)用軟件,包括字處理軟件、圖象處理各種應(yīng)用軟件,包括字處理軟件、圖象處理軟件等。軟件等。 v世界各地軟件愛好者集體智慧的結(jié)晶世界各地軟件愛好者集體智慧的結(jié)晶 v提供源代碼,遵守提供源代碼,遵守GPLGPL。 v經(jīng)歷了各種各樣的測試與考驗(yàn),軟件的穩(wěn)定經(jīng)歷了各種各樣的測試與

21、考驗(yàn),軟件的穩(wěn)定性好。性好。 v開發(fā)人員憑興趣去開發(fā),熱情高,具有創(chuàng)造開發(fā)人員憑興趣去開發(fā),熱情高,具有創(chuàng)造性。性。 vLinusLinus領(lǐng)導(dǎo)下的開發(fā)小組開發(fā)出的系統(tǒng)內(nèi)核領(lǐng)導(dǎo)下的開發(fā)小組開發(fā)出的系統(tǒng)內(nèi)核 v是所有是所有Linux Linux 發(fā)布版本的核心發(fā)布版本的核心 v內(nèi)核開發(fā)人員一般在百人以上,任何自由程內(nèi)核開發(fā)人員一般在百人以上,任何自由程序員都可以提交自己的修改工作。序員都可以提交自己的修改工作。 v采用郵件列表來進(jìn)行項(xiàng)目管理、交流、錯(cuò)誤采用郵件列表來進(jìn)行項(xiàng)目管理、交流、錯(cuò)誤報(bào)告報(bào)告v有大量的用戶進(jìn)行測試,正式發(fā)布的代碼質(zhì)有大量的用戶進(jìn)行測試,正式發(fā)布的代碼質(zhì)量高量高 vlinux

22、linux內(nèi)核被設(shè)計(jì)成單內(nèi)核結(jié)構(gòu),這是相對微內(nèi)核而言的內(nèi)核被設(shè)計(jì)成單內(nèi)核結(jié)構(gòu),這是相對微內(nèi)核而言的 v2.62.6版本以前的版本以前的linuxlinux內(nèi)核是單線程結(jié)構(gòu),是非搶占式的內(nèi)內(nèi)核是單線程結(jié)構(gòu),是非搶占式的內(nèi) 核結(jié)構(gòu)核結(jié)構(gòu)vlinuxlinux內(nèi)核支持動(dòng)態(tài)加載內(nèi)核模塊內(nèi)核支持動(dòng)態(tài)加載內(nèi)核模塊 vLinuxLinux內(nèi)核被動(dòng)地提供服務(wù)內(nèi)核被動(dòng)地提供服務(wù)vlinuxlinux內(nèi)核采用了虛擬內(nèi)存技術(shù),使得內(nèi)存空間達(dá)到內(nèi)核采用了虛擬內(nèi)存技術(shù),使得內(nèi)存空間達(dá)到4GB4GBvlinuxlinux文件系統(tǒng)實(shí)現(xiàn)了一種文件系統(tǒng)實(shí)現(xiàn)了一種UNIXUNIX風(fēng)格的抽象文件模型風(fēng)格的抽象文件模型虛虛擬文件系統(tǒng)

23、擬文件系統(tǒng)(Virtual Filesysterm Switch,VFS)(Virtual Filesysterm Switch,VFS)vlinuxlinux提供了一套很有效的延遲機(jī)制提供了一套很有效的延遲機(jī)制下半部分、軟中斷下半部分、軟中斷 tasklet tasklet和和2.62.6版本新引進(jìn)的工作隊(duì)列等。版本新引進(jìn)的工作隊(duì)列等。硬件硬件系統(tǒng)調(diào)用接口應(yīng)用應(yīng)用程序進(jìn)程程序進(jìn)程1應(yīng)用應(yīng)用程序進(jìn)程程序進(jìn)程2應(yīng)用應(yīng)用程序進(jìn)程程序進(jìn)程3Linux內(nèi)核內(nèi)核用戶進(jìn)程用戶進(jìn)程 內(nèi)核子系統(tǒng)內(nèi)核子系統(tǒng)系統(tǒng)調(diào)用系統(tǒng)調(diào)用v用戶進(jìn)程用戶進(jìn)程運(yùn)行在運(yùn)行在LinuxLinux內(nèi)核之上的一個(gè)龐大軟件內(nèi)核之上的一個(gè)龐大

24、軟件集合。集合。v系統(tǒng)調(diào)用系統(tǒng)調(diào)用內(nèi)核的出口,用戶程序通過它使用內(nèi)核內(nèi)核的出口,用戶程序通過它使用內(nèi)核提供的功能。提供的功能。 vLinuxLinux內(nèi)核內(nèi)核操作系統(tǒng)的靈魂,負(fù)責(zé)管理磁盤上的操作系統(tǒng)的靈魂,負(fù)責(zé)管理磁盤上的文件、內(nèi)存,負(fù)責(zé)啟動(dòng)并運(yùn)行程序,負(fù)責(zé)從網(wǎng)絡(luò)上文件、內(nèi)存,負(fù)責(zé)啟動(dòng)并運(yùn)行程序,負(fù)責(zé)從網(wǎng)絡(luò)上接收和發(fā)送數(shù)據(jù)包等等。接收和發(fā)送數(shù)據(jù)包等等。 v硬件硬件包括了包括了LinuxLinux安裝時(shí)需要的所有可能的物理安裝時(shí)需要的所有可能的物理設(shè)備。例如,設(shè)備。例如,CPUCPU、 內(nèi)存、硬盤、網(wǎng)絡(luò)硬件等等。內(nèi)存、硬盤、網(wǎng)絡(luò)硬件等等。 v進(jìn)程調(diào)度控制著進(jìn)程對進(jìn)程調(diào)度控制著進(jìn)程對CPUCPU的

25、訪問。的訪問。 v內(nèi)存管理允許多個(gè)進(jìn)程安全地共享主內(nèi)存區(qū)域內(nèi)存管理允許多個(gè)進(jìn)程安全地共享主內(nèi)存區(qū)域 v虛擬文件系統(tǒng)隱藏各種不同硬件的具體細(xì)節(jié),為虛擬文件系統(tǒng)隱藏各種不同硬件的具體細(xì)節(jié),為所有設(shè)備提供統(tǒng)一的接口。所有設(shè)備提供統(tǒng)一的接口。v網(wǎng)絡(luò)提供了對各種網(wǎng)絡(luò)標(biāo)準(zhǔn)協(xié)議的存取和各種網(wǎng)網(wǎng)絡(luò)提供了對各種網(wǎng)絡(luò)標(biāo)準(zhǔn)協(xié)議的存取和各種網(wǎng)絡(luò)硬件的支持。絡(luò)硬件的支持。 v進(jìn)程間通信進(jìn)程間通信(IPC)(IPC) 支持進(jìn)程間各種通信機(jī)制,包支持進(jìn)程間各種通信機(jī)制,包括共享內(nèi)存、消息隊(duì)列及管道等。括共享內(nèi)存、消息隊(duì)列及管道等。 0.01 Linux(第一版)(第一版) 0.13版版 | 產(chǎn)品化版本產(chǎn)品化版本 實(shí)驗(yàn)版本實(shí)

26、驗(yàn)版本 1.0.0 1.1.0(1.0.0的拷貝的拷貝) 1.0.X(修改修改) 1.1.X(增加新功能,進(jìn)行測試增加新功能,進(jìn)行測試) 1.1.95(1.1.95(成為成為1.2.0) 1.2.0) vLinuxLinux超文本交叉代碼檢索工具超文本交叉代碼檢索工具 http:/lxr.linux.no/http:/lxr.linux.no/ v Windows平臺下的源代碼閱讀工具Source Insightu認(rèn)識內(nèi)核模塊認(rèn)識內(nèi)核模塊 內(nèi)核模塊是linux內(nèi)核向外部提供的一個(gè)插口,是內(nèi)核的一部分,但是并沒有被編譯到內(nèi)核里面去,其全稱為動(dòng)態(tài)可加載內(nèi)核模塊(Loadable Kernel Mo

27、dule,LKM),簡稱模塊。u為什么要使用模塊?為什么要使用模塊? l linux內(nèi)核之所以提供模塊機(jī)制,是因?yàn)樗旧硎且粋€(gè)單內(nèi)核。而單內(nèi)核的最大優(yōu)點(diǎn)就是效率高,因?yàn)樗械膬?nèi)容都集成在一起,但其缺點(diǎn)是可擴(kuò)展性和可維護(hù)性相對較差,模塊機(jī)制就是為了彌補(bǔ)這一缺陷。u模塊的定義模塊的定義 模塊是具有獨(dú)立功能的程序,它可以被單獨(dú)編譯,但不能獨(dú)立運(yùn)行。它在運(yùn)行時(shí)被鏈接到內(nèi)核作為內(nèi)核的一部分在內(nèi)核空間運(yùn)行,這與運(yùn)行在用戶空間的進(jìn)程是不同的。模塊通常由一組函數(shù)和數(shù)據(jù)結(jié)構(gòu)組成,用來實(shí)現(xiàn)一種文件系統(tǒng)、一個(gè)驅(qū)動(dòng)程序或者其他內(nèi)核上層的功能。u編寫簡單的內(nèi)核模塊編寫簡單的內(nèi)核模塊 模塊和內(nèi)核都在內(nèi)核空間運(yùn)行,模塊編程

28、在一定意義上說就是內(nèi)核編程。一個(gè)內(nèi)核模塊應(yīng)該至少有兩個(gè)函數(shù),第一個(gè)為module_init(),是模塊加載函數(shù),當(dāng)模塊被插入到內(nèi)核時(shí)調(diào)用它;第二個(gè)為module_exit(),是模塊卸載函數(shù),當(dāng)模塊從內(nèi)核移走時(shí)調(diào)用它。u簡單的內(nèi)核模塊實(shí)例:簡單的內(nèi)核模塊實(shí)例: 任何模塊都要包含的三個(gè)頭文件:#include #include #incldue 說明:module.h頭文件包含了對模塊的版本控制;kernel.h包含了常用的內(nèi)核函數(shù);init.h包含了宏_init和_exit,宏_init告訴編譯程序相關(guān)的函數(shù)和變量僅用于初始化,編譯程序?qū)?biāo)有_init的所有代碼存儲到特殊的內(nèi)存段中,初始化結(jié)束

29、就釋放這段內(nèi)存。在此使用了printk()函數(shù),該函數(shù)是由內(nèi)核定義的,功能和C庫中的printf()類似,它把要打印的日志輸出到終端或系統(tǒng)日志。字符串中的是輸出的級別,表示立即在終端輸出。u內(nèi)核模塊的內(nèi)核模塊的MakefileMakefile文件文件 內(nèi)核模塊不是獨(dú)立的可執(zhí)行文件,但在運(yùn)行時(shí)其目標(biāo)文件被鏈接到內(nèi)核中。只有超級用戶才能加載和卸載模塊。 給前面的程序起名叫module_example.c,那么其對應(yīng)的Makefile文件的基本內(nèi)容如下:obj-m :=obj-m :=這個(gè)賦值語句的含義是說明要使用目標(biāo)文件這個(gè)賦值語句的含義是說明要使用目標(biāo)文件modulemodule_example

30、.o_example.o建立一個(gè)模塊,最后生成的模塊名為建立一個(gè)模塊,最后生成的模塊名為module_module_example.koexample.ko。.o.o文件是經(jīng)過編譯和匯編,而沒有經(jīng)過鏈接的文件是經(jīng)過編譯和匯編,而沒有經(jīng)過鏈接的中間文件。中間文件。注:注:makefilemakefile文件中,若某一行是命令,則它必須以一個(gè)文件中,若某一行是命令,則它必須以一個(gè)TabTab鍵開頭。鍵開頭。u運(yùn)行代碼運(yùn)行代碼 當(dāng)編譯好模塊,就可以用insmod命令將新的模塊插入到內(nèi)核中,如:insmod module_example.ko然后,可以用lsmod命令查看模塊是否正確地插入到了內(nèi)核中。

31、模塊的輸出由printk()產(chǎn)生。該函數(shù)默認(rèn)打印系統(tǒng)文件/var/log/messages的內(nèi)容。卸載模塊時(shí),使用rmmod命令加上在insmod中看到的模塊名,就可以從內(nèi)核中移除該模塊: rmmod module_exampleu應(yīng)用程序與內(nèi)核模塊的比較應(yīng)用程序與內(nèi)核模塊的比較 C C語言應(yīng)用程序語言應(yīng)用程序 內(nèi)核模塊程序內(nèi)核模塊程序 使用函數(shù)使用函數(shù) Libc Libc庫庫 內(nèi)核函數(shù)內(nèi)核函數(shù) 運(yùn)行空間運(yùn)行空間 用戶空間用戶空間 內(nèi)核空間內(nèi)核空間 運(yùn)行權(quán)限運(yùn)行權(quán)限 普通用戶普通用戶 超級用戶超級用戶 入口函數(shù)入口函數(shù) main() main() module_init () module_i

32、nit () 出口函數(shù)出口函數(shù) exit() exit() module_cleanup () module_cleanup () 編譯編譯 gcc gcc c c make make 連接連接 gcc gcc insmod insmod 運(yùn)行運(yùn)行 直接運(yùn)行直接運(yùn)行 insmod insmod 調(diào)試調(diào)試 gdb gdb kdbug, kdb,kgdb kdbug, kdb,kgdb等等為什么要用鏈表?為什么要用鏈表? 與數(shù)組相比,鏈表中可以動(dòng)態(tài)插入或刪除元素,在編譯時(shí)不必知道要與數(shù)組相比,鏈表中可以動(dòng)態(tài)插入或刪除元素,在編譯時(shí)不必知道要?jiǎng)?chuàng)建的元素個(gè)數(shù)。創(chuàng)建的元素個(gè)數(shù)。 在內(nèi)存無需占用連續(xù)的內(nèi)存

33、單元。在內(nèi)存無需占用連續(xù)的內(nèi)存單元。 每個(gè)元素都包含一個(gè)指向下一個(gè)元素的指針,當(dāng)有元素加入鏈表或者每個(gè)元素都包含一個(gè)指向下一個(gè)元素的指針,當(dāng)有元素加入鏈表或者從鏈表中刪除元素時(shí),只需要調(diào)整下一個(gè)節(jié)點(diǎn)的指針就可以了。從鏈表中刪除元素時(shí),只需要調(diào)整下一個(gè)節(jié)點(diǎn)的指針就可以了。通過前趨(prev)和后繼(next)兩個(gè)指針域,就可以從兩個(gè)方向遍歷雙鏈表,這使得遍歷鏈表的代價(jià)減少。鏈表的演化鏈表的演化 在C語言中,一個(gè)基本的雙向鏈表定義如下: struct my_list void *mydata; struct my_list *next;struct my_list *prev; u鏈表的定義鏈表的

34、定義 linux內(nèi)核對鏈表的實(shí)現(xiàn)方式與眾不同,不是在鏈表中包含數(shù)據(jù),而是在數(shù)據(jù)結(jié)構(gòu)中包含鏈表。其具體的定義如下: struct list_head struct list_head struct struct list_head list_head * *next, next, * *prev;prev; ; ;這個(gè)不含數(shù)據(jù)結(jié)構(gòu)的通用雙向鏈表可以嵌入到任何結(jié)構(gòu)中。說明:說明:1.list域隱藏了鏈表的指針特性 2.struct list_head可以位于結(jié)構(gòu)的任何位置,可以給其起任何名字 3.在一個(gè)結(jié)構(gòu)中可以有多個(gè)list域 以struct list_head為基本對象,可以對鏈表進(jìn)行插入、刪

35、除、合并以及遍歷等各種操作。 u鏈表的聲明和初始化鏈表的聲明和初始化 struct list_head只定義了鏈表節(jié)點(diǎn),并沒有專門定義鏈表頭,那么一個(gè)鏈表結(jié)構(gòu)是如何建立起來的?內(nèi)核代碼list.h中定義了兩個(gè)宏:#define LIST_HEAD_INIT(name) &(name), &(name) /*僅初始化*/#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name) /*聲明并初始化*/ 當(dāng)我們調(diào)用LIST_HEAD(name)聲明一個(gè)名為name的鏈表頭時(shí),它的next和prev指針都初始

36、化指向自己。這樣,我們就有了一個(gè)空鏈表,因?yàn)閘inux用頭指針的next是否指向自己來判斷鏈表是否為空:static inline int list_empty(const struct list_head *head)return head-next = head;u在鏈表中增加一個(gè)節(jié)點(diǎn)在鏈表中增加一個(gè)節(jié)點(diǎn) 在在include/linux/list.hinclude/linux/list.h中增加結(jié)點(diǎn)的函數(shù)為:中增加結(jié)點(diǎn)的函數(shù)為: static inline void list_add(); static inline void list_add_tail(); 在內(nèi)核代碼中,函數(shù)名前加兩個(gè)

37、下劃線表示內(nèi)部函數(shù)。list_add()和list_add_tail()均調(diào)用_list_add()_list_add()真正實(shí)現(xiàn)頭插和尾插。static inline void _list_add(struct list_head*new, struct list_head *prev, struct list_head *next) next-prev = new; new-next = next; new-prev = prev; prev-next = new; static inline void list_add(struct list_head *new, struct list

38、_head *head) _list_add(new, head, head-next); 該函數(shù)向指定鏈表的head結(jié)點(diǎn)后插入new結(jié)點(diǎn)。因?yàn)槭茄h(huán)鏈表,而且通常沒有首尾結(jié)點(diǎn)的概念,所以可以將任何結(jié)點(diǎn)傳給head。若傳最后一個(gè)元素給head,該函數(shù)就可以實(shí)現(xiàn)一個(gè)棧。u list_add_tail()list_add_tail()的內(nèi)核實(shí)現(xiàn)的內(nèi)核實(shí)現(xiàn): : static inline void list_add_tail(struct list_head *new, struct list_head *head) _list_add(new, head-prev, head); list_add_tail()函數(shù)向指定鏈表的head結(jié)點(diǎn)前插入new結(jié)點(diǎn)。說明說明:關(guān)于static inlinestatic inline關(guān)鍵字。 “static”“static”加在函數(shù)前,表示這個(gè)函數(shù)是靜態(tài)函數(shù) ,所謂靜態(tài)函數(shù),實(shí)際上是 對函數(shù)作用域的限制,指該函數(shù)的作用域僅局限于本文件。所以說,static具有信息隱藏的作用。而關(guān)鍵字inline“inline“加在函數(shù)前,說明這個(gè)函數(shù)對編譯程序是可見的,也就是說編譯程序在調(diào)用這個(gè)函數(shù)時(shí)就立即展開該函數(shù)。u 鏈表的遍歷鏈表的遍歷 這種鏈表只是找到了一個(gè)個(gè)結(jié)點(diǎn)在鏈表中的偏移位置pos,如下圖(a)。那么如何通過pos獲得結(jié)點(diǎn)的起始地址,從而可

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論