天天看點

走進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系統動辄就需要數張CD光牒,可見已經從過去的麻雀變成了恐龍——雖然它們都有五髒六腑。

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

下一篇: 快捷鍵

繼續閱讀