操做系統核心簡介

操做系統的概念與功能

      現代計算機系統由一個或多個處理器、主存、磁盤、打印機、鍵盤、鼠標、顯示器、網絡接口以及各類其餘輸入/輸出設備組成。
      通常而言,現代計算機系統是一個複雜的系統。若是每位應用程序員都不得不掌握系統全部的細節,那就不可能再編寫代碼了。並且,管理全部這些部件並加以優化使用,是一件挑戰性極強的工做。因此,計算機安裝了一層軟件,稱爲操做系統,它的任務是爲用戶程序提供一個更好、更簡單、更清晰的計算機模型,並管理剛纔提到的全部這些設備。程序員

      多數讀者都會對諸如Windows, Linux,或Mac OS等某個操做系統有些體驗,但表面現象會騙人的。用戶與之交互的程序,基於文本的一般稱爲shell ,而基於圖標的則稱爲圖形用戶界面(Graphical User Interface,GUI),它們實際上並非操做系統的一部分,儘管這些程序使用操做系統來完成工做。web

      圖1-1給出了在這裏所討論主要部件的一個簡化視圖。圖的底部是硬件。硬件包括芯片、電路板、磁盤、鍵盤、顯示器以及相似的設備。在硬件的頂部是軟件。多數計算機有兩種運行模式:內核態和用戶態。軟件中最基礎的部分是操做系統,它運行在內核態(也稱爲管態、態下核心態)。在這個模式中,操做系統具備對全部硬件的徹底訪問權,能夠執行機器可以運行的任何指令。軟件的其他部分運行在用戶。在用戶態下,只使用了機器指令中的一個子集。特別地,特別地,那些會影響機器的控制或可進行IO(輸入/輸出)操做的指令,在用戶態的程序是禁止的。shell

         

       用戶接口程序,shell或者GUI,處於用戶態程序中的最低層次,容許用戶運行其餘程序,諸如Web瀏覽器、電子郵件閱讀器或音樂播放器等。這些程序也大量使用操做系統。
       操做系統和普通軟件(用戶態)之間的主要區別是,若是用戶不喜歡某個特定的電子郵件閱讀器,他能夠自由選擇另外一個,或者選擇本身寫一個,可是他不能自行寫一個屬於操做系統一部分的時鐘中斷處理程序。這個程序由硬件保護,防止用戶試圖對其進行修改。
      操做系統是一種運行在內核態的軟件。操做系統執行兩個墓本上獨立的任務,對上爲應用程序提供一個資源集的清晰抽象,對下管理硬件資源。數據庫

      抽象是管理複雜性的一個關鍵口好的抽象能夠把一個幾乎不可能管理的任務劃分爲兩個可管理的部分。其第一部分是有關抽象的定義和實現,第二部分是隨時用這些抽象解決問題。幾乎每一個計算機用戶都理解的一個抽象是文件。文件是一種有效的信息片斷,諸如數碼照片、保存的電子郵件信息或Web頁面等。處理數碼照片、電子郵件以及Web頁面等。要比處理磁盤的細節容易,這些磁盤的具體細節實現十分複雜。操做系統的任務是建立好的抽象,並實現和管理它所建立的抽象對象。抽象是理解操做系統的關鍵。
      硬件是醜陋的。真實的處理器、內存條、磁盤和其餘裝置都是很是複雜的,對於那些爲使用某個硬件而不得不編寫軟件的人們而言,他們使用的是困難、可怕、特殊和不一致的接口。有時這是因爲須要兼容舊的硬件,有時是爲了節省成本,可是,有時硬件設計師們並無意識到(或在乎)他們給軟件設計帶來了多大的麻煩。操做系統的一個主要任務是隱藏硬件,呈現給程序(以及程序員)良好、清晰、優雅、一致的抽象。如圖I-2所示,操做系統將醜陋轉變爲美麗。
      須要指出,操做系統的實際客戶是應用程序(固然是經過應用程序員)。它們直接與操做系統及其抽象打交道。或者是命令行shell或者是圖形接口。瀏覽器

      現代操做系統容許同時運行多道程序。假設在一臺計算機上運行的三個程序試圖同時在同一臺打印機上輸出計算結果,那麼開始的幾行多是程序1的輸出,接着幾行是程序2的輸出,而後又是程序3的輸出等,最終結果將是一團糟。採用將打印結果送到磁盤上緩衝區的方法,操做系統能夠把潛在的混亂有序化。在一個程序結束後,操做系統能夠將暫存在磁盤上的文件送到打印機輸出,同時其餘程序能夠繼續產生更多的輸出結果,很明顯,這些程序的輸出尚未真正送至打印機。
      當一個計算機(或網絡)有多個用戶時,管理和保護存儲器、I/O設備以及其餘資源的需求變得強烈起來,由於用戶間可能會互相干擾。另外,用戶一般不只共享硬件,還要共享信息(文件、數據庫等)簡而言之,操做系統的這一種觀點認爲,操做系統的主要任務是記錄哪一個程序在使用什麼資源,對資源請求進行分配,評估使用代價,而且爲不一樣的程序和用戶調解互相沖突的資源請求。
      資源管理包括用如下兩種不一樣方式實現多路複用(共享)資源:在時間上覆用和在空間上覆用。當一種資源在時間上覆用時,不一樣的程序或用戶輪流使用它.先是第一個得到資源的使用,而後下一個,以此類推。例如,若在系統中只有一個CPU,而多個程序須要在該CPU上運行,
      CPU分配給某一個程序,在它運行了足夠長的時間以後,另外一個程序獲得CPU,而後是下一個,如此進行下去,最終,輪到第一個程序再次運行。至於資源是如何實現時間複用的—
--誰應該是下一個以及運行多長時間等—則是操做系統的任務。還有一個有關時間複用的例子是打印機的共享。當多個打印做業在一臺打印機上排隊等待打印時,必須決定將輪到打印的是哪一個做業。安全

      另外一類複用是空間複用。每一個客戶都獲得資源的一部分,從而取代了客戶排隊。例如,一般在若干運行程序之間分割內存,這樣每個運行程序均可同時入住內存(例如,爲了輪流使用CPU ) 假設有足夠的內存能夠存放多個程序,那麼在內存中同時存放若干個程序的效率,比把全部內存都分給一個程序的效率要高得多,特別是,若是一個程序只須要整個內存的一小部分時,結果更是這樣。固然。如此的作法會引發公平、保護等問題甲這有賴於操做系統解決它們。有關空間複用的其餘資源還有磁盤。在許多系統,一個磁盤同時爲許多用戶保存文件。分配磁盤空間並記錄誰正在使用哪一個磁盤塊,是操做系統資源管理的典型任務。服務器

操做系統的歷史

2.1 真空管與穿孔卡片(無操做系統)

第一代計算機的產生背景:
第一代以前人類是想用機械取代人力,第一代計算機的產生是計算機由機械時代進入電子時代的標誌網絡

過程:
萬能程序員們將對應於程序和數據的已穿孔的紙帶(或卡片)裝入輸入機,而後啓動輸入機把程序和數據輸入計算機
內存,接着經過控制檯開關啓動程序針對數據運行;計算完畢,打印機輸出計算結果;用戶取走結果並卸下紙帶(或卡片)後,才讓下一個用戶上機。性能

注意點:
1 程序員須要在牆上的計時錶上預定時間
2 同一時刻只有一個程序在內存中被CPU調用運行(串行的)優化

優勢:程序員在申請的時間段內獨享整個資源,即時的調試本身的程序,若是有bug能夠當場處理.
缺點:這對於計算機提供商來講是一種浪費(你買一臺電腦4000塊,那 一年中你用365比只用1天,確定是省成本的,物盡其用)

2.2 晶體管和批處理系統

第二代計算機的產生背景:

因爲當時的計算機很是昂貴,自認很天然的想辦法較少機時的浪費。一般採用的方法就是批處理系統。

特色:
有了操做系統的概念FORTRAN,這些機器如今被稱爲大型機

工做過程:

第一代計算機的問題是:
人機交互太多了(人機交互過程:輸入-》計算-》輸出)

一我的的交互:輸入-》計算-》輸出
10我的的交互:
        輸入-》計算-》輸出
        輸入-》計算-》輸出
        輸入-》計算-》輸出

第二代如何解決第一代的問題:
1.把一堆人的輸入攢成一大波輸入,
2.而後順序計算(這是有問題的,可是第二代計算沒有解決)
3.把一堆人的輸出攢成一大波輸出

現代操做系統的前身:

在收集了大約一個小時的批量做業以後,這些卡片被讀入磁帶,而後磁帶被送到機房裏並裝到磁帶上。而後磁帶被送到機房裏並裝到磁帶機上。隨後,操做員裝入一個特殊的程序(此乃現代操做系統的前身),它負責從磁帶上讀入第一個做業(job,一個或一組程序)並運行,其輸出寫到第二個磁帶上,並且不打印。每一個做業結束後,操做系統自動的從磁帶上讀入下一個做業而且運行。當一整批的做業所有結束後,操做員去下輸入和輸出磁帶,講輸入磁帶換成下一批做業,而且把輸出磁帶拿到一臺1041機器上進行脫機(不與主計算機聯機)打印

優勢:批處理,節省了機時

缺點:
1.整個流程須要人蔘與控制,將磁帶搬來搬去(中間倆小人)

2.計算的過程仍然是順序計算-》串行

3.程序員原來獨享一段時間的計算機,如今必須被統一規劃到一批做業中,等待結果和從新調試的過程都須要等同批次的其餘程序都運做完才能夠

2.3  集成電路芯片和多道程序設計

第三代計算機的產生背景:

20世紀60年代初期,大多數計算機廠商都有兩條徹底不兼容的生產線。一條是面向字的:大型的科學計算機,如IBM 7094,見上圖,主要用於科學計算和工程計算另一條是面向字符的:商用計算機,如IBM 1401,見上圖,主要用於銀行和保險公司從事磁帶歸檔和打印服務

開發和維護徹底不一樣的產品是昂貴的,同時不一樣的用戶對計算機的用途不一樣。IBM公司試圖經過引入system/360系列來同時知足科學計算和商業計算,360系列低檔機與1401至關,高檔機比7094功能強不少,不一樣的性能賣不一樣的價格360是第一個採用了(小規模)芯片(集成電路)的主流機型,與採用晶體管的第二代計算機相比,性價比有了很大的提升。這些計算機的後代仍在大型的計算機中內心使用,此乃如今服務器的前身,這些服務器每秒處理不小於千次的請求。

如何解決第二代計算機的問題1:

卡片被拿到機房後可以很快的將做業從卡片讀入磁盤,因而任什麼時候刻當一個做業結束時,操做系統就能將一個做業從磁帶讀出,裝進空出啦的內存區域運行,這種技術叫作同時的外部設備聯機操做:SPOOLING,該技術同時用於輸出。當採用了這種技術後,就不在須要IBM1401機了,也沒必要將磁帶搬來搬去了(中間倆小人就失業了)

如何解決第二代計算機的問題2:

第三代計算機的操做系統普遍應用了第二代計算機的操做系統沒有的關鍵技術:多道技術
多道技術:

多道技術中的多道指的是多個程序,多道技術的實現是爲了解決多個程序競爭或者說共享同一個資源(好比cpu)的有序調度問題,解決方式即多路複用,多路複用分爲時間上的複用和空間上的複用。

     空間上的複用:將內存分爲幾部分,每一個部分放入一個程序,這樣,同一時間內存中就有了多道程序。

     時間上的複用:當一個程序在等待I/O時,另外一個程序可使用cpu,若是內存中能夠同時存放足夠多的做業,則cpu的利用率能夠接近100%。

空間上的複用最大的問題是:程序直接的內存必須分割,這種分割在硬件層面實現,由操做系統控制實現。若是內存彼此不分割,則一個程序能夠訪問另一個程序的內存,首先喪失的是安全性,好比你的qq程序能夠訪問操做系統的內存,這意味着你的qq能夠拿到操做系統的全部權限。

其次喪失的是穩定性,某個程序崩潰時有可能把別人的內存也給回收了,比方說把操做系統的內存給回收了,則操做系統崩潰。

第三代計算機的操做系統仍然是批處理,許多程序員懷念第一代獨享的計算機,能夠即時調試本身的程序。爲了知足程序員們很快能夠獲得響應,出現了分時操做系統

如何解決第二代計算機的問題3:

分時操做系統:
多個聯機終端+多道技術

20個客戶端同時加載到內存,有17在思考,3個在運行,cpu就採用多道的方式處理內存中的這3個程序,因爲客戶提交的通常都是簡短的指令並且不多有耗時長的,索引計算機可以爲許多用戶提供快速的交互式服務,全部的用戶都覺得本身獨享了計算機資源

CTTS:麻省理工兼容分時系統,知道第三代計算機普遍採用了必須的保護硬件(程序之間的內存彼此隔離)以後,分時系統纔開始流行

MIT,貝爾實驗室和通用電氣在CTTS成功研製後決定開發可以同時支持上百終端的MULTICS(其設計者着眼於建造知足波士頓地區全部用戶計算需求的一臺機器),很明顯真是要上天啊,最後摔死了。

後來一位參加過MULTICS研製的貝爾實驗室計算機科學家Ken Thompson開發了一個簡易的,單用戶版本的MULTICS,這就是後來的UNIX系統。基於它衍生了不少其餘的Unix版本,爲了使程序能在任何版本的unix上運行,IEEE提出了一個unix標準,即posix(可移植的操做系統調用接口標準)

後來出現了minix,芬蘭學生Linus Torvalds基於它編寫了Linux

第四代計算機(1980~至今):我的計算機

隨着大規模集成電路的發展,每平方釐米的硅片芯片上能夠集成數千個晶體管,我的計算機的時代就此到來。

相關文章
相關標籤/搜索