1. 程式人生 > >操作系統核心簡介

操作系統核心簡介

其他 ace 輸出 硬件設計 例如 商都 卡片 兼容 一個人

操作系統的概念與功能

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

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

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

技術分享圖片

用戶接口程序,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~至今):個人計算機

隨著大規模集成電路的發展,每平方厘米的矽片芯片上可以集成數千個晶體管,個人計算機的時代就此到來。

操作系統核心簡介