走進Linux 操作系統

        這是一篇比較專業、深入的有關linux介紹的文章,發佈此文章是給有一定專業基礎的同學所用,因此,請慎重選讀。


         本期涉獵了操作系統的來龍去脈後與大家攜手步入Linux世界。我們力圖展示給大家一幅Linux系統的全景圖,併爲了加深對linux系統的全面認知,親手搭建了一個能運行在內存中的試驗系統。同時爲大家提供了幾個shell腳本幫助建立試驗系統。

         最熟悉的陌生人

         用蕭亞軒的一首歌形容操作系統給我們的感覺再合適不過了,“最熟悉的陌生人”。

         說熟悉,因爲幾乎每天我們都在有意無意和它打着交道。無論是日常辦公,還是暢遊網際,我們都無法離開操作系統的幫助。電腦初啓,首當其衝運行的就是操作系統。對於許多人而言,電腦就是那扇“窗”。即便遠離電腦,我們依然無法逃脫操作系統的“魔掌”。在您收發短信、撥打電話的時候,手機屏幕背後一個嵌入操作系統正在默默爲您服務。越來越多的數字設備都開始擁有自己操作系統,雖然它們不同於Bill爲我們帶來的“窗子”,但並無什麼本質的差別。假如有一天,您的電視機開始對您噓寒問暖,請別忘記,有一個叫做操作系統的東西站在它的背後。

        說陌生,因爲直接爲我們服務的大多屬於應用軟件,也許是文字處理、也許電子郵件、也許網絡遊戲。他們都運行於操作系統之上,提供我們所需的服務,這讓我們很少直接面對操作系統。對大多數用戶而言,操作系統的細節是不可見的,所以雖說我們無時無刻不在使用操作系統,彼此之間卻多了一層隔閡。對於操作系統的認識,往往只能停留在間接地、片面地感性基礎之上,其內部的運作機制,我們無法一目瞭然。

        無處不在卻不以正面相示,讓操作系統有了一種“猶抱琵琶”的美,於是操作系統被冠以“最神祕”的稱號。

        揭開這層神祕面紗,是我們雜誌的初衷。我們希望能夠詮釋操作系統設計思想,和您一起熟悉操作系統提供的各種服務,學習靈活運用這些服務的方法和技巧。我們將以理論討論結合實例實驗方式,讓您和我們一起擁有操作系統級開發軟件的本領。

         好了,開始我們的內核之旅,走近這個“最熟悉的陌生人”吧!

        本期目標!

         在第一期中,我們將:

         提綱挈領地介紹操作系統的基本概念;

         理清楚操作系統和其它系統軟件或應用軟件之間的關係;

         瞭解操作系統的體系結構;在此基礎上,提出操作系統內核概念。

          簡而言之,希望讀者可以在讀過本期的內容,能在腦海裏勾勒出一幅操作系統的全景圖,爲日後剖析內核、開發內核創造基礎。

          學習的最佳方法是實踐。

          我們的雜誌將以實踐爲主,理論爲輔。

          將實驗貫穿到學習、分析當中。

          在本期中,爲了讓讀者能比較全面地理解操作系統,並加強對操作系統的感性認識,我們將本期分爲兩大部分:           第一部分從理論上簡要介紹操作系統的內涵,揭示操作系統在軟件體系中的特殊地位,然後討論操作系統的體系結構和演化進程。

         第二部重點分析Linux操作系統,介紹Linux操作系統的發源,特色以及內核結構。最後通過和讀者一同親手搭建一個實驗操作系統——一個經過裁減具備基本功能的小型Linux,讓讀者從實踐中感受操作系統的體系結構和在計算機系統中所起的作用。

         什麼是操作系統

         操作系統的概念雖然定義總是生硬、乏味、令人費解,但是它畢竟是概括性最強、最能體現水平的,所以我們還是要在開始就給出操作系統定義:

        操作系統是應用程序的運行環境。

        夠精闢吧!可能運行環境這個術語令你如墜雲端,它太廣泛、太抽象了。你一定在問運行環境到底是什麼?簡單地講,運行環境是一種即服務和控制於一體地容器。

        如果你沒有理解環境這個概念,我可以舉個並不貼切的社會實例。

        在開發區中可以看到許多企業孵化池或產業園,其中入住了各種各樣的企業,孵化池或產業園的管理機構會統一爲其中的企業辦理各種工商、保險、衛生醫療等手續、提供後勤、治安等基礎服務,企業需要某些政務服務時,可以通過管理機構去和政府聯繫,處理相關事宜,而不需要親自去處理這些和企業業務無關的政務活動,因此可以抽出身來集中精力在業務上。孵化池和產業園爲企業提供了統一、普遍地服務和管理,是企業運作的外在環境。操作系統從這個意義上來說,類似於產業園的管理結構,爲應用程序——好比企業——提供基礎服務和管理。

        當然,我們現在並不指望你立刻認識到操作系統深刻內涵,對它的認識需要在不斷地使用和思考中消化和積累,在本期雜誌中,我們將從各種角度介紹“運行環境”這個術語的真實含義,並在今後各期雜誌中分階段、分層次的展開學習操作系統的各個領域。相信在不久的將來,你就能和我們一起認清它的廬山真面目了。

        操作系統產生背景

        想要認清一個人,最好是從小認識他。對技術的理解也是如此,我們必須瞭解它的產生原因和發展過程,才能較爲全面的認識該技術所解決的問題,認識它在學科發展中所處的地位。對比技術發展各個階段的特點,才能認清該技術的優劣。同樣,我們想要把握操作系統的特性,還是先把操作系統放在時間軸上看看它的來龍去脈吧!

        操作系統並不是計算機出現之初就有的,最初的計算機科學中並不存在操作系統這個概念,所有任務都直接運行於硬件之上。那時的任務大多集中於科學計算領域,系統硬件實現相對簡單、直接,任務對I/O操作的要求也比較低,將結果記錄到磁帶機之類的簡單設備中足矣。老程序員們大多采用手工或是用打孔機的方式將將二進制數據和程序輸入機器內存,然後執行計算,最後,將結果保存到磁帶機上。一旦出現錯誤,機器上的調試燈會將保存在寄存器中的錯誤代碼反映出來,程序員們會據此去分析錯誤所在。

        隨着科學計算任務變得越來越複雜,計算機逐漸被應用到了科學計算以外的其它領域。硬件設備比以前更加豐富和複雜了,I/O操作要求大幅提高,程序規模迅速擴大,需要調試的錯誤更是直線上升,直接操作硬件,對程序員來說變得越發困難。

       於是出現了高級語言、編譯系統,幫助程序員簡化開發工作;出現了操作系統,幫助程序員管理和操作硬件設備。程序員們可以將精力集中於開發需要的任務,煩瑣的如任務裝載、分配/釋放內存、內存尋址、設備驅動、數據存儲等等硬件相關操作統統交給操作系統管理——真可以說是生產力的一次解放。

        時代繼續發展,多用戶多任務時代的來臨,使得系統管理更加強調資源共享性。用戶直接操作系統資源顯然有悖於上述精神,因此資源合理分配與保護更爲操作系統發展提供了新的挑戰和機遇,同時奠定了操作系統不可或缺的地位,從此,操作系統成爲爲軟件體系中最基礎,最重要的組成部分了。

        操作系統的任務

        從操作系統的起源可以看出,操作系統的核心任務是作爲硬件和應用程序之間的一箇中間層,或者說是應用程序的一個操作平臺,通過它應用程序和系統硬件隔離開,應用程序利用它提供的服務完成硬件相關操作。

        總而言之,操作系統方便了應用程序運行,保護了系統資源。具體地講,操作系統爲用戶帶來了幾個方面的好處:

        易操作性: 操作系統是用戶和計算機之間的接口,它大大簡化了用戶執行任務的複雜程度。

        作爲應用程序的執行環境:它爲程序員建立應用程序提供了必要的編輯環境、編譯環境和調試工具;爲程序的執行提供了載入服務和資源分配服務;爲數據存取提供了I/O訪問服務;爲數據格式轉化和定位提供了文件操作服務;爲程序的安全運行提供了權限控制服務;爲程序運行失敗提供了錯誤報告服務等等系統服務,從此,程序員和用戶都不再需要關心那些令人生畏的計算機體系結構細節,可以全心全意地開發應用程序了。

        有效性:從另一個角度看待操作系統,可以將它認爲是一個計算機資源管理系統。

        由於系統中資源種類各異,用法也大不相同,如果直接由用戶管理這些資源,比如內存分配,時鐘計時,I/O驅動,存儲維護,勢必要求用戶具有豐富的軟硬件知識,深刻把握計算機系統結構,否則資源將難以合理使用,最終造成系統混亂,甚至崩潰。而且現代的多用戶操作系統更是要求系統資源共享,資源必須合理分配給多用戶、多任務,只有採用一定的調度策略和分配策略,才能保證資源被公平有效的利用。所以,配置資源成了提高性能的關鍵——如同資源配置是提高生產力的關鍵一樣。  

        安全性:安全性是操作系統爲我們提供的另一個重要的特點,它爲我們提供了多層面的安全保障。

        首先,操作系統作爲系統硬件和用戶的中間平臺,禁止應用程序直接操作硬件,禁止應用程序直接訪問內存,執行特權指令。多數系統都將應用程序運行限制在用戶空間(低特權級),而操作系統則運行於內核空間(高特權級),應用程序只有通過系統調用請求操作系統所提供的接口,才能通過操作系統間接執行和硬件相關的操作或是執行特權指令。因此保護了系統不被惡意的應用程序破壞或非法操作。

        其次,多任務多用戶操作系統必須保證,不同任務之間信息不能泄漏,因此需要爲任務劃分各自的私有空間和對其進行訪問控制。對不同用戶進行相應的授權和認證,可以保護用戶各行其是,互不侵犯。

        總之,操作系統安全涉及方方面面,健壯的操作系統必須能多方位地保證任務安全執行。

        易擴展:計算機技術的高速發展和計算機日益普及,計算機硬件設備不斷推陳出新,這要求操作系統提供的服務也能夠日新月異,因此要求操作系統具有良好的擴展性。

        由於操作系統對系統資源和服務進行了抽象,屏蔽了底層細節,統一了上層接口,添加設備或服務成了一件輕而易舉的事,需要做的僅僅是,在設備或服務規定的接口下完成新的實現即刻。 

        什麼是資源?

        資源概念在操作系統中使用得相當廣泛,內存、磁盤、文件、處理器、時鐘等等軟硬件都可以劃歸到資源範疇。資源的概念其實很好理解,概括來講,系統中的資源指的是系統提供給進程使用的特殊實體,進程通過向操作系統請求獲得這些實體,另外,系統分配這些實體給進程前,進程需要掛起等待。凡是滿足上述條件的實體就屬於資源。

        操作系統的演化   

        和其它任何事務一樣,操作系統並非一成不變。迄今爲止,它已經經歷了半個多世紀的發展,已經形成了一個龐大的家族。從個人計算機到工作站,從通用系統到專用系統,從嵌入式到虛擬機,可謂形式豐富多樣。我們難以將所有操作系統囊括,只希望提綱挈領地介紹在操作系統發展進程中具有代表性的幾種系統,理清它的演化脈絡。

        進化歷程 : 

       最早的操作系統是簡單的單道批處理系統。它的功能相當簡陋,只能串行執行預先組織好的任務組。早先的系統一次只能運行一個任務,每個任務必須先裝入,再等執行完後才能裝入下一個任務,重複的裝入浪費了大量的時間。單道批處理系統的出現,大大的提高了系統吞吐率。 

       事情並非總如想象般順利。

       由於數據存儲時所消耗的時間——I/O操作時間——相比數據處理時間——CPU操作時間——要高出數倍(往往在20倍以上),所以程序運行到I/O操作期間,CPU總是需要停下來(掛起)等待數據傳輸完成,無形中浪費了大量寶貴的時間,任務組中後續程序的執行也因此被延遲了。如何避免數據傳輸等待帶來的時間浪費呢?能否在進行傳輸期間,解放CPU去執行別的任務呢?

        爲解決這個瓶頸,單道批處理系統進化到了多道批處理系統。

       所謂多道就實際就是說,處理器(當然現在談到的都屬於單處理器系統)可以交錯運行多個程序,某個任務掛起時,運行另一個程序。這樣一來, CPU等待數據傳輸造成的時間浪費問題得以解決,系統吞吐率又一次得到了提高。

       計算機的發展使得任務不再僅僅侷限於科學計算,越來越多的應用於辦公、生活等日常活動中。科學計算中的任務多數執行路徑都是固定不變,預先定義好的,只需要給定輸入,得到結果期間程序執行中途不需要外界干預,與之不同,辦公,生活中的許多任務都必須和用戶不斷交互,任務結果隨時都會因爲用戶的選擇改變。這時的系統變得更公開、更普遍,往往允許多個用戶可以同時使用。交互模式和共用模式需要任務響應時間儘可能的快(超過20秒的話,人的思維就容易被打斷或變得很不耐煩),這樣才能讓多個用戶都滿意,於是操作系統開始採用分時技術,處理器的運行時間分成數片,均分或依照一定權重派發給系統中的用戶使用。這種將處理器虛擬給多用戶共同使用的方法,不但可以滿足快速響應,而且也可以使得所有用戶獲得計算機完全是在爲自己服務的假象。

       上面給出了操作系統發展的主流路線:單道批處理——多道批處理——分時系統,除此以外現在還出現了許多分佈式操作系統,嵌入系統,不過總體技術思路都仍然脫離不了多道、分時等概念。

        操作系統內容

        操作系統的演化使得其功能變得愈來愈強大,但結構也越來越複雜。在以方便用戶(包括開發人員和終端用戶)爲宗旨的思想下,操作系統不斷集成新功能,新服務。回憶從前大家使用的DOS系統僅僅只需要一張軟盤,而如今的windows系統或Linux系統動輒就需要數張光盤,可見已經從過去的麻雀變成了恐龍——雖然它們都有五臟六腑。

       雖然變成了恐龍,但是其結構還時相對穩定,清晰的。和軟件工程提出的思想一致,操作系統也採取了分層結構,越向上層抽象都越高,越接近用戶;相反越向下層,越靠近硬件,抽象也相對接近硬件。而且高層軟件依靠下層軟件提供的服務,再加上本身提供附加服務爲更高層服務。總體來講呈現倒金子塔形式。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章