第一代以前人類是想用機械取代人力,第一代計算機的產生是計算機由機械時代進入電子時代的標誌,從Babbage失敗以後一直到第二次世界大戰,數字計算機的建造幾乎沒有什麼進展,第二次世界大戰刺激了有關計算機研究的爆炸性進展。python
lowa州立大學的john Atanasoff教授和他的學生Clifford Berry建造了據認爲是第一臺可工做的數字計算機。該機器使用300個真空管。大約在同時,Konrad Zuse在柏林用繼電器構建了Z3計算機,英格蘭布萊切利園的一個小組在1944年構建了Colossus,Howard Aiken在哈佛大學建造了Mark 1,賓夕法尼亞大學的William Mauchley和他的學生J.Presper Eckert建造了ENIAC。這些機器有的是二進制的,有的使用真空管,有的是可編程的,但都很是原始,設置須要花費數秒鐘時間才能完成最簡單的運算。linux
在這個時期,同一個小組裏的工程師們,設計、建造、編程、操做及維護同一臺機器,全部的程序設計是用純粹的機器語言編寫的,甚至更糟糕,須要經過成千上萬根電纜接到插件板上連成電路來控制機器的基本功能。沒有程序設計語言(彙編也沒有),操做系統則是歷來都沒據說過。使用機器的過程更加原始,詳見下‘工做過程’程序員
沒有操做系統的概念全部的程序設計都是直接操控硬件編程
程序員在牆上的機時表預定一段時間,而後程序員拿着他的插件版到機房裏,將本身的插件板街道計算機裏,這幾個小時內他獨享整個計算機資源,後面的一批人都得等着(兩萬多個真空管常常會有被燒壞的狀況出現)。安全
後來出現了穿孔卡片,能夠將程序寫在卡片上,而後讀入機而不用插件板服務器
程序員在申請的時間段內獨享整個資源,能夠即時地調試本身的程序(有bug能夠馬上處理)markdown
浪費計算機資源,一個時間段內只有一我的用。注意:同一時刻只有一個程序在內存中,被cpu調用執行,比方說10個程序的執行,是串行的 網絡
1946年第一臺計算機誕生--20世紀50年代中期,計算機工做還在採用手工操做方式。此時尚未操做系統的概念。分佈式
程序員將對應於程序和數據的已穿孔的紙帶(或卡片)裝入輸入機,而後啓動輸入機把程序和數據輸入計算機內存,接着經過控制檯開關啓動程序針對數據運行;計算完畢,打印機輸出計算結果;用戶取走結果並卸下紙帶(或卡片)後,才讓下一個用戶上機。性能
20世紀50年代後期,出現人機矛盾:手工操做的慢速度和計算機的高速度之間造成了尖銳矛盾,手工操做方式已嚴重損害了系統資源的利用率(使資源利用率降爲百分之幾,甚至更低),不能容忍。惟一的解決辦法:只有擺脫人的手工操做,實現做業的自動過渡。這樣就出現了成批處理。
因爲當時的計算機很是昂貴,自認很天然的想辦法較少機時的浪費。一般採用的方法就是批處理系統。
設計人員、生產人員、操做人員、程序人員和維護人員直接有了明確的分工,計算機被鎖在專用空調房間中,由專業操做人員運行,這即是‘大型機’。
有了程序設計語言:FORTRAN語言或彙編語言,寫到紙上,而後穿孔打成卡片,再講卡片盒帶到輸入室,交給操做員,而後喝着咖啡等待輸出接口。
批處理系統:加載在計算機上的一個系統軟件,在它的控制下,計算機可以自動地、成批地處理一個或多個用戶的做業(這做業包括程序、數據和命令)。
首先出現的是聯機批處理系統,即做業的輸入/輸出由CPU來處理。
主機與輸入機之間增長一個存儲設備——磁帶,在運行於主機上的監督程序的自動控制下,計算機可自動完成:成批地把輸入機上的用戶做業讀入磁帶,依次把磁帶上的用戶做業讀入主機內存並執行並把計算結果向輸出機輸出。完成了上一批做業後,監督程序又從輸入機上輸入另外一批做業,保存在磁帶上,並按上述步驟重複處理。
監督程序不停地處理各個做業,從而實現了做業到做業的自動轉接,減小了做業創建時間和手工操做時間,有效克服了人機矛盾,提升了計算機的利用率。
可是,在做業輸入和結果輸出時,主機的高速CPU仍處於空閒狀態,等待慢速的輸入/輸出設備完成工做: 主機處於「忙等」狀態。
爲克服與緩解:高速主機與慢速外設的矛盾,提升CPU的利用率,又引入了脫機批處理系統,即輸入/輸出脫離主機控制。
衛星機:一臺不與主機直接相連而專門用於與輸入/輸出設備打交道的。
其功能是:
(1)從輸入機上讀取用戶做業並放到輸入磁帶上。
(2)從輸出磁帶上讀取執行結果並傳給輸出機。
這樣,主機不是直接與慢速的輸入/輸出設備打交道,而是與速度相對較快的磁帶機發生關係,有效緩解了主機與設備的矛盾。主機與衛星機可並行工做,兩者分工明確,能夠充分發揮主機的高速計算能力。
脫機批處理系統:20世紀60年代應用十分普遍,它極大緩解了人機矛盾及主機與外設的矛盾。
不足:每次主機內存中僅存放一道做業,每當它運行期間發出輸入/輸出(I/O)請求後,高速的CPU便處於等待低速的I/O完成狀態,導致CPU空閒。
爲改善CPU的利用率,又引入了多道程序系統。
1.把一堆人的輸入攢成一大波輸入,2.而後順序計算(這是有問題的,可是第二代計算也沒有解決)3.把一堆人的輸出攢成一大波輸出
批處理,節省了機時
1.整個流程須要人蔘與控制,將磁帶搬來搬去(中間倆小人)
2.計算的過程仍然是順序計算-》串行
3.程序員原來獨享一段時間的計算機,如今必須被統一規劃到一批做業中,等待結果和從新調試的過程都須要等同批次的其餘程序都運做完才能夠(這極大的影響了程序的開發效率,沒法及時調試程序)
20世紀60年代初期,大多數計算機廠商都有兩條徹底不兼容的生產線。
一條是面向字的:大型的科學計算機,如IBM 7094,主要用於科學計算和工程計算
另一條是面向字符的:商用計算機,如IBM 1401,主要用於銀行和保險公司從事磁帶歸檔和打印服務
開發和維護徹底不一樣的產品是昂貴的,同時不一樣的用戶對計算機的用途不一樣。
IBM公司試圖經過引入system/360系列來同時知足科學計算和商業計算,360系列低檔機與1401至關,高檔機比7094功能強不少,不一樣的性能賣不一樣的價格
360是第一個採用了(小規模)芯片(集成電路)的主流機型,與採用晶體管的第二代計算機相比,性價比有了很大的提升。這些計算機的後代仍在大型的計算機中內心使用,此乃如今服務器的前身,這些服務器每秒處理不小於千次的請求。
卡片被拿到機房後可以很快的將做業從卡片讀入磁盤,因而任什麼時候刻當一個做業結束時,操做系統就能將一個做業從磁帶讀出,裝進空出來的內存區域運行,這種技術叫作同時的外部設備聯機操做:SPOOLING,該技術同時用於輸出。當採用了這種技術後,就不在須要IBM1401機了,也沒必要將磁帶搬來搬去了(中間倆小人再也不須要)
第三代計算機的操做系統普遍應用了第二代計算機的操做系統沒有的關鍵技術:多道技術
cpu在執行一個任務的過程當中,若須要操做硬盤,則發送操做硬盤的指令,指令一旦發出,硬盤上的機械手臂滑動讀取數據到內存中,這一段時間,cpu須要等待,時間可能很短,但對於cpu來講已經很長很長,長到可讓cpu作不少其餘的任務,若是咱們讓cpu在這段時間內切換到去作其餘的任務,這樣cpu不就充分利用了嗎。這正是多道技術產生的技術背景
多道技術中的多道指的是多個程序,多道技術的實現是爲了解決多個程序競爭或者說共享同一個資源(好比cpu)的有序調度問題,解決方式即多路複用,多路複用分爲時間上的複用和空間上的複用。
空間上的複用:將內存分爲幾部分,每一個部分放入一個程序,這樣,同一時間內存中就有了多道程序。
時間上的複用:當一個程序在等待I/O時,另外一個程序可使用cpu,若是內存中能夠同時存放足夠多的做業,則cpu的利用率能夠接近100%,相似於咱們小學數學所學的統籌方法。(操做系統採用了多道技術後,能夠控制進程的切換,或者說進程之間去爭搶cpu的執行權限。這種切換不只會在一個進程遇到io時進行,一個進程佔用cpu時間過長也會切換,或者說被操做系統奪走cpu的執行權限)
程序之間的內存必須分割,這種分割須要在硬件層面實現,由操做系統控制。若是內存彼此不分割,則一個程序能夠訪問另一個程序的內存,
首先喪失的是安全性,好比你的qq程序能夠訪問操做系統的內存,這意味着你的qq能夠拿到操做系統的全部權限。
其次喪失的是穩定性,某個程序崩潰時有可能把別的程序的內存也給回收了,比方說把操做系統的內存給回收了,則操做系統崩潰。
許多程序員懷念第一代獨享的計算機,能夠即時調試本身的程序。爲了知足程序員們很快能夠獲得響應,出現了分時操做系統
分時操做系統:多個聯機終端+多道技術
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.
所謂多道程序設計技術,就是指容許多個程序同時進入內存並運行。即同時把多個程序放入內存,並容許它們交替在CPU中運行,它們共享系統中的各類硬、軟件資源。當一道程序因I/O請求而暫停運行時,CPU便當即轉去運行另外一道程序。
在A程序計算時,I/O空閒, A程序I/O操做時,CPU空閒(B程序也是一樣);必須A工做完成後,B才能進入內存中開始工做,二者是串行的,所有完成共需時間=T1+T2。
將A、B兩道程序同時存放在內存中,它們在系統的控制下,可相互穿插、交替地在CPU上運行:當A程序因請求I/O操做而放棄CPU時,B程序就可佔用CPU運行,這樣 CPU再也不空閒,而正進行A I/O操做的I/O設備也不空閒,顯然,CPU和I/O設備都處於「忙」狀態,大大提升了資源的利用率,從而也提升了系統的效率,A、B所有完成所需時間<<T1+T2。
多道程序設計技術不只使CPU獲得充分利用,同時改善I/O設備和內存的利用率,從而提升了整個系統的資源利用率和系統吞吐量(單位時間內處理做業(程序)的個數),最終提升了整個系統的效率。
單處理機系統中多道程序運行時的特色:
(1)多道:計算機內存中同時存放幾道相互獨立的程序;
(2)宏觀上並行:同時進入系統的幾道程序都處於運行過程當中,即它們前後開始了各自的運行,但都未運行完畢;
(3)微觀上串行:實際上,各道程序輪流地用CPU,並交替運行。
多道程序系統的出現,標誌着操做系統漸趨成熟的階段,前後出現了做業調度管理、處理機管理、存儲器管理、外部設備管理、文件系統管理等功能。
因爲多個程序同時在計算機中運行,開始有了空間隔離的概念,只有內存空間的隔離,才能讓數據更加安全、穩定。
出了空間隔離以外,多道技術還第一次體現了時空複用的特色,遇到IO操做就切換程序,使得cpu的利用率提升了,計算機的工做效率也隨之提升。
20世紀60年代中期,在前述的批處理系統中,引入多道程序設計技術後造成多道批處理系統(簡稱:批處理系統)。
它有兩個特色:
(1)多道:系統內可同時容納多個做業。這些做業放在外存中,組成一個後備隊列,系統按必定的調度原則每次從後備做業隊列中選取一個或多個做業進入內存運行,運行做業結束、退出運行和後備做業進入運行均由系統自動實現,從而在系統中造成一個自動轉接的、連續的做業流。
(2)成批:在系統運行過程當中,不容許用戶與其做業發生交互做用,即:做業一旦進入系統,用戶就不能直接干預其做業的運行。
批處理系統的追求目標:提升系統資源利用率和系統吞吐量,以及做業流程的自動化。
批處理系統的一個重要缺點:不提供人機交互能力,給用戶使用計算機帶來不便。
雖然用戶獨佔全機資源,而且直接控制程序的運行,能夠隨時瞭解程序運行狀況。但這種工做方式因獨佔全機形成資源效率極低。
一種新的追求目標:既能保證計算機效率,又能方便用戶使用計算機。 20世紀60年代中期,計算機技術和軟件技術的發展使這種追求成爲可能。
因爲CPU速度不斷提升和採用分時技術,一臺計算機可同時鏈接多個用戶終端,而每一個用戶可在本身的終端上聯機使用計算機,好象本身獨佔機器同樣。
分時技術:把處理機的運行時間分紅很短的時間片,按時間片輪流把處理機分配給各聯機做業使用。
若某個做業在分配給它的時間片內不能完成其計算,則該做業暫時中斷,把處理機讓給另外一做業使用,等待下一輪時再繼續其運行。因爲計算機速度很快,做業運行輪轉得很快,給每一個用戶的印象是,好象他獨佔了一臺計算機。而每一個用戶能夠經過本身的終端向系統發出各類操做控制命令,在充分的人機交互狀況下,完成做業的運行。
具備上述特徵的計算機系統稱爲分時系統,它容許多個用戶同時聯機使用計算機。
特色:
(1)多路性。若干個用戶同時使用一臺計算機。微觀上看是各用戶輪流使用計算機;宏觀上看是各用戶並行工做。
(2)交互性。用戶可根據系統對請求的響應結果,進一步向系統提出新的請求。這種能使用戶與系統進行人機對話的工做方式,明顯地有別於批處理系統,於是,分時系統又被稱爲交互式系統。
(3)獨立性。用戶之間能夠相互獨立操做,互不干擾。系統保證各用戶程序運行的完整性,不會發生相互混淆或破壞現象。
(4)及時性。系統可對用戶的輸入及時做出響應。分時系統性能的主要指標之一是響應時間,它是指:從終端發出命令到系統予以應答所需的時間。
分時系統的主要目標:對用戶響應的及時性,即不至於用戶等待每個命令的處理時間過長。
分時系統能夠同時接納數十個甚至上百個用戶,因爲內存空間有限,每每採用對換(又稱交換)方式的存儲方法。即將未「輪到」的做業放入磁盤,一旦「輪到」,再將其調入內存;而時間片用完後,又將做業存回磁盤(俗稱「滾進」、「滾出「法),使同一存儲區域輪流爲多個用戶服務。
多用戶分時系統是當今計算機操做系統中最廣泛使用的一類操做系統。
注意:分時系統的分時間片工做,在沒有遇到IO操做的時候就用完了本身的時間片被切走了,這樣的切換工做其實並無提升cpu的效率,反而使得計算機的效率下降了。可是咱們犧牲了一點效率,卻實現了多個程序共同執行的效果,這樣你就能夠在計算機上一邊聽音樂一邊聊qq了。
雖然多道批處理系統和分時系統能得到較使人滿意的資源利用率和系統響應時間,但卻不能知足實時控制與實時信息處理兩個應用領域的需求。因而就產生了實時系統,即系統可以及時響應隨機發生的外部事件,並在嚴格的時間範圍內完成對該事件的處理。
實時系統在一個特定的應用中常做爲一種控制設備來使用。
實時系統可分紅兩類:
(1)實時控制系統。當用于飛機飛行、導彈發射等的自動控制時,要求計算機能儘快處理測量系統測得的數據,及時地對飛機或導彈進行控制,或將有關信息經過顯示終端提供給決策人員。當用於軋鋼、石化等工業生產過程控制時,也要求計算機能及時處理由各種傳感器送來的數據,而後控制相應的執行機構。
(2)實時信息處理系統。當用於預約飛機票、查詢有關航班、航線、票價等事宜時,或當用於銀行系統、情報檢索系統時,都要求計算機能對終端設備發來的服務請求及時予以正確的回答。此類對響應及時性的要求稍弱於第一類。
實時操做系統的主要特色:
(1)及時響應。每個信息接收、分析處理和發送的過程必須在嚴格的時間限制內完成。
(2)高可靠性。需採起冗餘措施,雙機系統先後臺工做,也包括必要的保密措施等。
分時——如今流行的PC,服務器都是採用這種運行模式,即把CPU的運行分紅若干時間片分別處理不一樣的運算請求 linux系統
實時——通常用於單片機上、PLC等,好比電梯的上下控制中,對於按鍵等動做要求進行實時處理
操做系統的三種基本類型:多道批處理系統、分時系統、實時系統。
通用操做系統:具備多種類型操做特徵的操做系統。能夠同時兼有多道批處理、分時、實時處理的功能,或其中兩種以上的功能。
例如:實時處理+批處理=實時批處理系統。首先保證優先處理實時任務,插空進行批處理做業。常把實時任務稱爲前臺做業,批做業稱爲後臺做業。
再如:分時處理+批處理=分時批處理系統。即:時間要求不強的做業放入「後臺」(批處理)處理,需頻繁交互的做業在「前臺」(分時)處理,處理機優先運行「前臺」做業。
從上世紀60年代中期,國際上開始研製一些大型的通用操做系統。這些系統試圖達到功能齊全、可適應各類應用範圍和操做方式變化無窮的環境的目標。可是,這些系統過於複雜和龐大,不只付出了巨大的代價,且在解決其可靠性、可維護性和可理解性方面都遇到很大的困難。
相比之下,UNIX操做系統倒是一個例外。這是一個通用的多用戶分時交互型的操做系統。它首先創建的是一個精幹的核心,而其功能卻足以與許多大型的操做系統相媲美,在覈心層之外,能夠支持龐大的軟件系統。它很快獲得應用和推廣,並不斷完善,對現代操做系統有着重大的影響。
至此,操做系統的基本概念、功能、基本結構和組成都已造成並漸趨完善。
進入20世紀80年代,大規模集成電路工藝技術的飛躍發展,微處理機的出現和發展,掀起了計算機大發展大普及的浪潮。一方面迎來了我的計算機的時代,同時又向計算機網絡、分佈式處理、巨型計算機和智能化方向發展。因而,操做系統有了進一步的發展,如:我的計算機操做系統、網絡操做系統、分佈式操做系統等。
我的計算機上的操做系統是聯機交互的單用戶操做系統,它提供的聯機交互功能與通用分時系統提供的功能很類似。
因爲是我的專用,所以一些功能會簡單得多。然而,因爲我的計算機的應用普及,對於提供更方便友好的用戶接口和豐富功能的文件系統的要求會越來越迫切。
計算機網絡:經過通訊設施,將地理上分散的、具備自治功能的多個計算機系統互連起來,實現信息交換、資源共享、互操做和協做處理的系統。
網絡操做系統:在原來各自計算機操做系統上,按照網絡體系結構的各個協議標準增長網絡管理模塊,其中包括:通訊、資源共享、系統安全和各類網絡應用服務。
表面上看,分佈式系統與計算機網絡系統沒有多大區別。分佈式操做系統也是經過通訊網絡,將地理上分散的具備自治功能的數據處理系統或計算機系統互連起來,實現信息交換和資源共享,協做完成任務。——硬件鏈接相同。
但有以下一些明顯的區別:
(1)分佈式系統要求一個統一的操做系統,實現系統操做的統一性。
(2)分佈式操做系統管理分佈式系統中的全部資源,它負責全系統的資源分配和調度、任務劃分、信息傳輸和控制協調工做,併爲用戶提供一個統一的界面。
(3)用戶經過這一界面,實現所須要的操做和使用系統資源,至於操做定在哪一臺計算機上執行,或使用哪臺計算機的資源,則是操做系統完成的,用戶沒必要知道,此謂:系統的透明性。
(4)分佈式系統更強調分佈式計算和處理,所以對於多機合做和系統重構、堅強性和容錯能力有更高的要求,但願系統有:更短的響應時間、高吞吐量和高可靠性。
現代的計算機系統主要是由一個或者多個處理器,主存,硬盤,鍵盤,鼠標,顯示器,打印機,網絡接口及其餘輸入輸出設備組成。
通常而言,現代計算機系統是一個複雜的系統。
其一:若是每位應用程序員都必須掌握該系統全部的細節,那就不可能再編寫代碼了(嚴重影響了程序員的開發效率:所有掌握這些細節可能須要一萬年....)
其二:而且管理這些部件並加以優化使用,是一件極富挑戰性的工做,因而,計算安裝了一層軟件(系統軟件),稱爲操做系統。它的任務就是爲用戶程序提供一個更好、更簡單、更清晰的計算機模型,並管理剛纔提到的全部設備。
總結:
程序員沒法把全部的硬件操做細節都瞭解到,管理這些硬件而且加以優化使用是很是繁瑣的工做,這個繁瑣的工做就是操做系統來乾的,有了他,程序員就從這些繁瑣的工做中解脫了出來,只須要考慮本身的應用軟件的編寫就能夠了,應用軟件直接使用操做系統提供的功能來間接使用硬件。
精簡的說的話,操做系統就是一個協調、管理和控制計算機硬件資源和軟件資源的控制程序。操做系統所處的位置如圖
細說的話,操做系統應該分紅兩部分功能:
應用程序員有了這些接口後,就不用再考慮操做硬件的細節,專心開發本身的應用程序便可。
例如:操做系統提供了文件這個抽象概念,對文件的操做就是對磁盤的操做,有了文件咱們無需再去考慮關於磁盤的讀寫控制(好比控制磁盤轉動,移動磁頭讀寫數據等細節),
例如:不少應用軟件實際上是共享一套計算機硬件,比方說有可能有三個應用程序同時須要申請打印機來輸出內容,那麼a程序競爭到了打印機資源就打印,而後多是b競爭到打印機資源,也多是c,這就致使了無序,打印機可能打印一段a的內容而後又去打印c...,操做系統的一個功能就是將這種無序變得有序。