• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于“Linux內(nèi)核分析”的教學(xué)內(nèi)容研究與實踐

      2009-08-28 09:09:14陳莉君王小銀
      計算機教育 2009年14期
      關(guān)鍵詞:源代碼教學(xué)改革

      陳莉君 梁 琛 王小銀

      摘要:開放源代碼Linux為操作系統(tǒng)教學(xué)內(nèi)容研究與改革帶來良好的契機,本文在對Linux內(nèi)核入門途徑分析的基礎(chǔ)上,給出了分析Linux內(nèi)核的原理基礎(chǔ)和硬件基礎(chǔ),并探究了操作系統(tǒng)的執(zhí)行機制,最后給出了實踐途徑和方法。

      關(guān)鍵詞:Linux內(nèi)核;源代碼;教學(xué)改革

      中圖分類號:G642 文獻(xiàn)標(biāo)識碼:B

      1引言

      芬蘭大學(xué)生Linus在赫爾辛基大學(xué)學(xué)習(xí)“操作系統(tǒng)”課程時,不滿足于使用教學(xué)用操作系統(tǒng)Minix,從著手開發(fā)一個簡單的程序開始,到逐步開發(fā)顯示器、鍵盤和調(diào)制解調(diào)器的驅(qū)動程序,然后寫了磁盤驅(qū)動程序,文件系統(tǒng),這樣,一個操作系統(tǒng)的原型就形成了。

      這個誕生于學(xué)生之手的Linux,在Internet這片肥沃的土壤中不斷成長,逐步發(fā)展為與Unix、Windows并駕齊驅(qū)的實用操作系統(tǒng)。與Windows不同,Linux 與Unix外表相似,但它的窗口向所有人完全敞開,任何想了解其內(nèi)在機理的愛好者都可以走進(jìn)其內(nèi)部世界。

      在1999年的春季,我們有幸走進(jìn)了這個開放的世界,那時分析的是Linux內(nèi)核2.0版,在閱讀源代碼的基礎(chǔ)上,我們編寫了《Linux操作系統(tǒng)內(nèi)核分析》一書,該書曾被指定為中科院考博參考書。隨著Linux內(nèi)核版本的不斷更新,我們又陸續(xù)編寫和翻譯了針對Linux內(nèi)核2.2、2.4及2.6的相關(guān)書籍。

      Linux內(nèi)核是由C語言和匯編語言編寫的,其全部源代碼是一個龐大的世界,如何在這龐大而又復(fù)雜的世界中抓住主要內(nèi)容,如何找到進(jìn)入Linux內(nèi)部的突破口,又如何能把Linux的源代碼變?yōu)樽约旱乃?并在此基礎(chǔ)上進(jìn)行內(nèi)核級程序的開發(fā),很多學(xué)過操作系統(tǒng)原理而又想進(jìn)一步實踐的軟件開發(fā)者,對以上問題都有過種種困惑。針對這些問題,在教學(xué)的過程中,從教學(xué)內(nèi)容,教學(xué)方法以及實踐環(huán)節(jié)等方面,我們進(jìn)行了探索和改革。

      2Linux內(nèi)核入門

      Linux內(nèi)核入門是不容易的,它之所以難學(xué),在于龐大的規(guī)模和涉及的層面。規(guī)模一大就不易現(xiàn)出本來面目,渾然一體,自然不容易找到著手之處;層面一多,就會讓人眼花繚亂,盤根錯節(jié)。

      Linux源碼研究的方法不同于小規(guī)模軟件。這是由于規(guī)模和層面決定的,比如說,在語言學(xué)習(xí)中,可以采取小步快跑的方法,通過一個個小程序和小嘗試,就可以取得漸進(jìn)的成果,就能從新技術(shù)中有所收獲。針對Linux,如果沒有對整體的把握,即使你對某個局部的算法、技術(shù)或是代碼再熟悉,也無法將其融入實用。因此,Linux內(nèi)核入門從以下幾方面著手。

      2.1Linux內(nèi)核整體結(jié)構(gòu)

      Linux內(nèi)核雖然實現(xiàn)和Unix系統(tǒng)有很大不同,但是其結(jié)構(gòu)還基本保持和Unix一致,其中功能與操作系統(tǒng)原理中所涉及到的內(nèi)容大體一致。

      Linux 內(nèi)核除系統(tǒng)調(diào)用外,由5個主要的子系統(tǒng)組成,如圖1所示。

      從圖1可以看出,處于中心位置的是進(jìn)程調(diào)度,所有其它的子系統(tǒng)都依賴于它,因為每個子系統(tǒng)都需要掛起或恢復(fù)進(jìn)程。一般情況下,當(dāng)一個進(jìn)程等待硬件操作完成時,它被掛起,當(dāng)操作真正完成時,進(jìn)程恢復(fù)執(zhí)行。例如,當(dāng)一個進(jìn)程通過網(wǎng)絡(luò)發(fā)送一條消息時,發(fā)送進(jìn)程被掛起,一直到硬件成功地完成消息的發(fā)送。其它子系統(tǒng)(內(nèi)存管理,虛擬文件系統(tǒng)及進(jìn)程間通信)以相似的理由依賴于進(jìn)程調(diào)度。

      2.2硬件基礎(chǔ)

      操作系統(tǒng)是一組軟件的集合。但它和一般軟件不同,因為它是充分挖掘硬件潛能的軟件,也可以說,操作系統(tǒng)是橫跨軟件和硬件的橋梁。因此,要想深入解析操作系統(tǒng)內(nèi)在的運作機制,就必須搞清楚相關(guān)的硬件機制——尤其是內(nèi)存尋址的硬件機制。

      操作系統(tǒng)的設(shè)計者必須在硬件相關(guān)的代碼與硬件無關(guān)的代碼之間劃出清楚的界限,以便于一個操作系統(tǒng)很容易地移植到不同的平臺。Linux的設(shè)計就做到了這點,它把與硬件相關(guān)的代碼全部放在arch(architecture一詞的縮寫,即體系結(jié)構(gòu)相關(guān))的目錄下,在這個目錄下,可以找到Linux目前版本支持的所有平臺,例如,支持的平臺有arm、alpha,、i386、m68k、mips等十多種。在這眾多的平臺中,大家最熟悉的就是X86。因此,首先要了解和熟悉X86與內(nèi)存管理相關(guān)的機制—保護模式機制。

      2.3原理基礎(chǔ)

      操作系統(tǒng)的原理中主要講述了進(jìn)程管理、內(nèi)存管理、文件管理和設(shè)備管理。盡管這些原理基于的背景為Unix,但是,因為其要涵蓋更多的操作系統(tǒng),因此,各部分內(nèi)容顯得抽象。而在Linux內(nèi)核源代碼分析中,就是讓這些原理適時地落到實處。

      進(jìn)程管理是操作系統(tǒng)的靈魂,因此要從內(nèi)核實現(xiàn)的角度分析進(jìn)程賴以存活的各種數(shù)據(jù)結(jié)構(gòu)。進(jìn)程作為一個動態(tài)變化的實體,可以從生命歷程的角度說明進(jìn)程從誕生到死亡的艱難過程,并給出具體的實現(xiàn)函數(shù)。

      內(nèi)存作為計算機系統(tǒng)的重要資源,因為其容量的有限和程序規(guī)模的不斷擴大,需要從技術(shù)上對其容量進(jìn)行擴充,Linux中對虛擬內(nèi)存管理的實現(xiàn)建立在分段和分頁的原理之上,具體給出其中的部分源代碼,使學(xué)生體會從理論過渡到實踐之間的真實跨越。

      3探究操作系統(tǒng)的執(zhí)行機制

      如果說操作系統(tǒng)是資源的管理者,那么歸根結(jié)底,操作系統(tǒng)是程序賴以執(zhí)行的堅實基礎(chǔ);因為所謂的進(jìn)程管理,內(nèi)存管理,文件管理以及設(shè)備管理等,都是因為執(zhí)行程序而引發(fā)的。以這樣的大思路為前提,引領(lǐng)學(xué)生探究事物本質(zhì)的興趣。

      進(jìn)程概念的引入是為了執(zhí)行程序,這是毋庸置疑的。那么,內(nèi)存管理呢?一個死氣沉沉存放在磁盤上的程序是毫無意義的。程序只有從外存裝入內(nèi)存一行行執(zhí)行,才會變得生龍活虎,因此,所謂的文件系統(tǒng)以及內(nèi)存管理等等都是為程序的執(zhí)行而服務(wù)的。

      3.1并發(fā)執(zhí)行之根本

      多個程序之所以能夠有條不紊地執(zhí)行,是因為Linux內(nèi)核的核心仲裁者調(diào)度程序,也就是內(nèi)核代碼中schedule()函數(shù),鼓勵學(xué)生閱讀這一函數(shù),從根本上認(rèn)識進(jìn)程調(diào)度的過程,從而明白內(nèi)核為了進(jìn)程的并發(fā)執(zhí)行而牽引出一系列的相關(guān)東西,真正理解圖1中的進(jìn)程調(diào)度所處的核心位置。

      3.2內(nèi)核任務(wù)的并發(fā)執(zhí)行

      所謂內(nèi)核任務(wù)是指內(nèi)核態(tài)下可以獨立執(zhí)行的內(nèi)核例程(一個或多個內(nèi)核函數(shù)),每個內(nèi)核任務(wù)運行時都擁有一個獨立的程序計數(shù)器、棧和一組寄存器。一般來說,內(nèi)核任務(wù)包括內(nèi)核線程、系統(tǒng)調(diào)用、中斷服務(wù)程序、異常處理程序、下半部等幾類。

      如果我們把內(nèi)核看作不斷對各種請求進(jìn)行響應(yīng)的服務(wù)器,那么,正在CPU上執(zhí)行的進(jìn)程、發(fā)出中斷請求的外部設(shè)備等就相當(dāng)于客戶。正如服務(wù)器要隨時響應(yīng)客戶的請求一樣,內(nèi)核也會隨時響應(yīng)進(jìn)程、中斷等的請求。所以說內(nèi)核中各個任務(wù)并不是嚴(yán)格按著順序依次執(zhí)行的,而是相互交錯執(zhí)行的。搞清楚各種內(nèi)核任務(wù)的執(zhí)行機制,猶如把學(xué)

      生從森林中引領(lǐng)出來,使學(xué)生體會操作系統(tǒng)執(zhí)行機制的奧妙。

      4動手實踐

      內(nèi)核初學(xué)者對內(nèi)核各個核心子系統(tǒng)有個整體把握,包括它們提供什么樣的服務(wù),為什么要提供這樣的服務(wù),又是怎樣實現(xiàn)的有了初步了解之后,總希望自己寫代碼一試身手。我們的“內(nèi)核之旅”www.kerneltravel.net網(wǎng)站,填補課堂教學(xué)和實踐開發(fā)之間的鴻溝。網(wǎng)上發(fā)布多期原創(chuàng)專題性電子刊物。針對操作系統(tǒng)愛好者學(xué)習(xí)Linux之后,苦于無用武之地的現(xiàn)狀,在網(wǎng)站上討論如何進(jìn)行Linux內(nèi)核層面上的系統(tǒng)軟件開發(fā)。并配以大量有實用價值或指導(dǎo)意義的實驗,深入淺出的教授學(xué)生認(rèn)識Linux內(nèi)核,學(xué)習(xí)Linux內(nèi)核,開發(fā)Linux內(nèi)核。每期都配有相關(guān)的實驗和相應(yīng)的源代碼,供大家下載實踐。實踐內(nèi)容如下:

      (1) 搭建Linux試驗系統(tǒng)實例:學(xué)生通過親手構(gòu)建系統(tǒng)的過程,消除對Linux的恐懼感;

      (2) 構(gòu)建一個簡易操作系統(tǒng)(一個可啟動的操作系統(tǒng));

      (3) 編寫Shell解釋程序;

      (4) 編寫自己的系統(tǒng)調(diào)用;

      (5) 編寫一個內(nèi)存映射;

      (6) 編寫一個內(nèi)核共享鏈表同步訪問的程序;

      (7) 實現(xiàn)一個文件系統(tǒng);

      (8) 編寫自己的中斷系統(tǒng)。

      5結(jié)束語

      “Linux內(nèi)核分析”是一門引領(lǐng)初學(xué)者進(jìn)入Linux內(nèi)核的課程,在這樣一條引領(lǐng)的路途上,會遇到各種困難和絆腳石。如果說,龐大的Linux內(nèi)核源代碼是一片望不到邊的森林,那么,我們教師恰恰就是要給學(xué)生以引領(lǐng),使大家不被茂密森林中的雜草或荊棘所絆倒,為此,我們編寫了《Linux操作系統(tǒng)原理與應(yīng)用》一書,并建設(shè)了配套的Linux內(nèi)核之旅網(wǎng)站的。另外,針對當(dāng)前2.6內(nèi)核,我們陸續(xù)在網(wǎng)站發(fā)布相應(yīng)的實驗代碼,同時鼓勵讀者把網(wǎng)站電子雜志部分的實驗代碼移植到2.6,以讓更多的人分享。在Linux內(nèi)核之旅的討論區(qū)http://www.lupaworld.com/bbs/ forum-255-1.html,設(shè)有專門解答Linux內(nèi)核問題的論壇。同時,在作者的技術(shù)博客http://linuxkernel.lupaworld.com上,不定期發(fā)布與內(nèi)核相關(guān)專題的知識。Linux教學(xué)與學(xué)習(xí)之路漫漫兮,在課堂之外,我們西郵Linux興趣小組www.xiyouLinux.cn在積極主動的學(xué)習(xí)Linux相關(guān)知識。

      Linux最本質(zhì)的思想體現(xiàn)其“自由”和“開放”的思想。自由,意味著世界范圍內(nèi)的知識共享;而開放,則意味著Linux對所有的人都敞開大門。走入Linux內(nèi)核,源于我們的興趣,對Linux源代碼的深入分析和研究,源于開源社區(qū)良好的氛圍。這種氛圍深深影響了我們,于是,我們對Linux內(nèi)核源代碼的分析結(jié)果也無償?shù)墓蚕碛陂_源社區(qū),希望更多的Linux愛好者分享到我們的成果。

      參考文獻(xiàn):

      [1] 陳莉君, 康華. Linux操作系統(tǒng)原理與應(yīng)用[M]. 北京:清華大學(xué)出版社,2006.

      [2] ANIEL P. BOVET, MARCO CESATI . 深入理解Linux內(nèi)核[M].3版. 陳莉君,張瓊聲,張宏偉,譯. 北京:中國電力出版社,2007.

      [3] Claudia Salzberg Rodriguez, Gordon Fischer, Steven Smolski. Linux內(nèi)核編程[M]. 陳莉君,賀炎,劉霞林,譯. 北京:機械工業(yè)出版社,2006.

      [4] Robert Love. Linux內(nèi)核設(shè)計與實現(xiàn)[M]. 陳莉君,康華,張波,譯. 北京:機械工業(yè)出版社,2006.

      猜你喜歡
      源代碼教學(xué)改革
      人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
      計算機仿真(2023年8期)2023-09-20 11:23:42
      基于TXL的源代碼插樁技術(shù)研究
      軟件源代碼非公知性司法鑒定方法探析
      基于語法和語義結(jié)合的源代碼精確搜索方法
      中職學(xué)?!吧菊n堂”的調(diào)查研究與實踐
      成才之路(2016年25期)2016-10-08 10:03:04
      高校三維動畫課程教學(xué)方法研究
      成才之路(2016年25期)2016-10-08 10:00:36
      基于人才培養(yǎng)的技工學(xué)校德育實效性研究
      成才之路(2016年25期)2016-10-08 09:51:08
      現(xiàn)代信息技術(shù)在高職數(shù)學(xué)教學(xué)改革中的應(yīng)用研究
      科技視界(2016年20期)2016-09-29 12:59:03
      以職業(yè)技能競賽為導(dǎo)向的高職單片機實踐教學(xué)改革研究
      科技視界(2016年20期)2016-09-29 11:20:38
      微課時代高等數(shù)學(xué)教學(xué)改革的實踐與探索
      科技視界(2016年20期)2016-09-29 11:16:19
      桐柏县| 四平市| 扎兰屯市| 鹤山市| 香港| 惠安县| 德安县| 陕西省| 望奎县| 寿宁县| 和田市| 东光县| 荆门市| 天气| 新沂市| 华阴市| 宜兰县| 读书| 宁河县| 乌拉特前旗| 肃北| 杭锦后旗| 临洮县| 夹江县| 景洪市| 武夷山市| 阳曲县| 中阳县| 英超| 昭通市| 余姚市| 克拉玛依市| 革吉县| 扎鲁特旗| 康平县| 兴宁市| 吐鲁番市| 德令哈市| 唐河县| 平度市| 东安县|