操作系統發展史
第一代計算機(1940~1955):真空管和穿孔卡片
第一代計算機的產生背景:
第一代之前人類是想用機械取代人力,第一代計算機的產生是計算機由機械時代進入電子時代的標誌,從Babbage失敗之後一直到第二次世界大戰,數字計算機的建造幾乎沒有什麽進展,第二次世界大戰刺激了有關計算機研究的爆炸性進展。
lowa州立大學的john Atanasoff教授和他的學生Clifford Berry建造了據認為是第一臺可工作的數字計算機。該機器使用300個真空管。大約在同時,Konrad Zuse在柏林用繼電器構建了Z3計算機,英格蘭布萊切利園的一個小組在1944年構建了Colossus,Howard Aiken在哈佛大學建造了Mark 1,賓夕法尼亞大學的William Mauchley和他的學生J.Presper Eckert建造了ENIAC。這些機器有的是二進制的,有的使用真空管,有的是可編程的,但都非常原始,設置需要花費數秒鐘時間才能完成最簡單的運算。
在這個時期,同一個小組裏的工程師們,設計、建造、編程、操作及維護同一臺機器,所有的程序設計是用純粹的機器語言編寫的,甚至更糟糕,需要通過成千上萬根電纜接到插件板上連成電路來控制機器的基本功能。沒有程序設計語言(匯編也沒有),操作系統則是從來都沒聽說過。使用機器的過程更加原始,詳見下‘工作過程’
特點:
沒有操作系統的概念
所有的程序設計都是直接操控硬件
工作過程:
程序員在墻上的機時表預約一段時間,然後程序員拿著他的插件版到機房裏,將自己的插件板街道計算機裏,這幾個小時內他獨享整個計算機資源,後面的一批人都得等著(兩萬多個真空管經常會有被燒壞的情況出現)。
後來出現了穿孔卡片,可以將程序寫在卡片上,然後讀入機而不用插件板
優點:
程序員在申請的時間段內獨享整個資源,可以即時地調試自己的程序(有bug可以立刻處理)
缺點:
浪費計算機資源,一個時間段內只有一個人用。
註意:同一時刻只有一個程序在內存中,被cpu調用執行,比方說10個程序的執行,是串行的
第二代計算機(1955~1965):晶體管和批處理系統
第二代計算機的產生背景:
由於當時的計算機非常昂貴,自認很自然的想辦法較少機時的浪費。通常采用的方法就是批處理系統。
特點:
設計人員、生產人員、操作人員、程序人員和維護人員直接有了明確的分工,計算機被鎖在專用空調房間中,由專業操作人員運行,這便是‘大型機’。
有了操作系統的概念
有了程序設計語言:FORTRAN語言或匯編語言,寫到紙上,然後穿孔打成卡片,再講卡片盒帶到輸入室,交給操作員,然後喝著咖啡等待輸出接口
工作過程:插圖
第二代如何解決第一代的問題/缺點:
1.把一堆人的輸入攢成一大波輸入,
2.然後順序計算(這是有問題的,但是第二代計算也沒有解決)
3.把一堆人的輸出攢成一大波輸出
現代操作系統的前身:(見圖)
優點:
批處理,節省了機時
缺點:
1.整個流程需要人參與控制,將磁帶搬來搬去(中間倆小人)
2.計算的過程仍然是順序計算-》串行
3.程序員原來獨享一段時間的計算機,現在必須被統一規劃到一批作業中,等待結果和重新調試的過程都需要等同批次的其他程序都運作完才可以(這極大的影響了程序的開發效率,無法及時調試程序)
第三代計算機(1965~1980):集成電路芯片和多道程序設計
第三代計算機的產生背景:
20世紀60年代初期,大多數計算機廠商都有兩條完全不兼容的生產線。
一條是面向字的:大型的科學計算機,如IBM 7094,見上圖,主要用於科學計算和工程計算
另外一條是面向字符的:商用計算機,如IBM 1401,見上圖,主要用於銀行和保險公司從事磁帶歸檔和打印服務
開發和維護完全不同的產品是昂貴的,同時不同的用戶對計算機的用途不同。
IBM公司試圖通過引入system/360系列來同時滿足科學計算和商業計算,360系列低檔機與1401相當,高檔機比7094功能強很多,不同的性能賣不同的價格
360是第一個采用了(小規模)芯片(集成電路)的主流機型,與采用晶體管的第二代計算機相比,性價比有了很大的提高。這些計算機的後代仍在大型的計算機中心裏使用,此乃現在服務器的前身,這些服務器每秒處理不小於千次的請求。
如何解決第二代計算機的問題1:
卡片被拿到機房後能夠很快的將作業從卡片讀入磁盤,於是任何時刻當一個作業結束時,操作系統就能將一個作業從磁帶讀出,裝進空出來的內存區域運行,這種技術叫做
同時的外部設備聯機操作:SPOOLING,該技術同時用於輸出。當采用了這種技術後,就不在需要IBM1401機了,也不必將磁帶搬來搬去了(中間倆小人不再需要)
如何解決第二代計算機的問題2:
第三代計算機的操作系統廣泛應用了第二代計算機的操作系統沒有的關鍵技術:多道技術
cpu在執行一個任務的過程中,若需要操作硬盤,則發送操作硬盤的指令,指令一旦發出,硬盤上的機械手臂滑動讀取數據到內存中,這一段時間,cpu需要等待,時間可能很短,但對於cpu來說已經很長很長,長到可以讓cpu做很多其他的任務,如果我們讓cpu在這段時間內切換到去做其他的任務,這樣cpu不就充分利用了嗎。這正是多道技術產生的技術背景
多道技術:
多道技術中的多道指的是多個程序,多道技術的實現是為了解決多個程序競爭或者說共享同一個資源(比如cpu)的有序調度問題,解決方式即多路復用,多路復用分為時間上的復用和空間上的復用。
空間上的復用:將內存分為幾部分,每個部分放入一個程序,這樣,同一時間內存中就有了多道程序。
時間上的復用:當一個程序在等待I/O時,另一個程序可以使用cpu,如果內存中可以同時存放足夠多的作業,則cpu的利用率可以接近100%,類似於我們小學數學所學的統籌方法。
(操作系統采用了多道技術後,可以控制進程的切換,或者說進程之間去爭搶cpu的執行權限。這種切換不僅會在一個進程遇到io時進行,一個進程占用cpu時間過長也會切換,或者說被操作系統奪走cpu的執行權限)
遇到IO切換 可以提高效率 , 占用CPU時間過長也會切換 就降低效率了 但是這種cpu切換非常快 看起來並發操作
空間上的復用最大的問題是:
程序之間的內存必須分割,這種分割需要在硬件層面實現,內存級別在物理層面上保證多個程序在內存裏是互相隔離的,
由操作系統控制。如果內存彼此不分割,則一個程序可以訪問另外一個程序的內存,
首先喪失的是安全性,比如你的qq程序可以訪問操作系統的內存,這意味著你的qq可以拿到操作系統的所有權限。
其次喪失的是穩定性,某個程序崩潰時有可能把別的程序的內存也給回收了,比方說把操作系統的內存給回收了,則操作系統崩潰。
第三代計算機的操作系統仍然是批處理
許多程序員懷念第一代獨享的計算機,可以即時調試自己的程序。為了滿足程序員們很快可以得到響應,出現了分時操作系統
如何解決第二代計算機的問題3:
分時操作系統:
多個聯機終端+多道技術20個客戶端同時加載到內存,有17在思考,3個在運行,cpu就采用多道的方式處理內存中的這3個程序,由於客戶提交的一般都是簡短的指令而且很少有耗時長的,索引計算機能夠為許多用戶提供快速的交互式服務,所有的用戶都以為自己獨享了計算機資源
CTTS:麻省理工(MIT)在一臺改裝過的7094機上開發成功的,CTSS兼容分時系統,第三代計算機廣泛采用了必須的保護硬件(程序之間的內存彼此隔離)之後,分時系統才開始流行
MIT,貝爾實驗室和通用電氣在CTTS成功研制後決定開發能夠同時支持上百終端的MULTICS(其設計者著眼於建造滿足波士頓地區所有用戶計算需求的一臺機器),很明顯真是要上天啊,最後摔死了。
後來一位參加過MULTICS研制的貝爾實驗室計算機科學家Ken Thompson開發了一個簡易的,單用戶版本的MULTICS,這就是後來的UNIX系統。基於它衍生了很多其他的Unix版本,為了使程序能在任何版本的unix上運行,IEEE提出了一個unix標準,即posix(可移植的操作系統接口Portable Operating System Interface)
後來,在1987年,出現了一個UNIX的小型克隆,即minix,用於教學使用。芬蘭學生Linus Torvalds基於它編寫了Linux
第四代計算機(1980~至今):個人計算機
多道技術 就是並發 可以邊開著暴風電影程序看電影 邊看word文檔 邊上著QQ聊天
多核用多道技術
如果是多核就不叫並發 叫並行,並行真的是意義上同時運行,並發只是看上去是同時運行
如果有4個CPU 並行可以有4個任務 一個CPU幹一個活
如果有5個任務 只有4個CPU 那就先執行4個任務 等到有人執行完 在處理第五個任務 操作系統會從自己隨機的4個CPU 隨機抽出一個來處理任務
或者等到有一個遇到IO、運行CPU時間過長、有個優先級更高的 都會拿走這個人的執行權限,拿走這個人權限給第五個任務處理
等完IO又執行了
操作系統發展史