操做系統是位於應用軟件和硬件設備之間,本質上也是一個軟件,由系統內核(管理全部硬件資源)與系統接口(提供給程序員使用的接口)組成操做系統是爲方便用戶操做計算機而提供的一個運行在硬件之上的軟件linux
有了這些接口之後程序員不用再直接與硬件打交道了程序員
例子:有了操做系統後咱們就可使用資源管理器來操做硬盤上的數據,而不用操心,磁頭的移動啊,數據的讀寫等等編程
例子:全部軟件 qq啊 微信啊 吃雞啊都共用一套硬件設備 假設現有三個程序都在使用打印機,若是不能妥善管理競爭問題,可能一個程序打印了一半圖片後,另外一個程序搶到了打印機執行權因而打印了一半文本,致使兩個程序的任務都沒能完成,操做系統的任務就是將這些無序的操做變得有序windows
兩者的區別不在於的地位,它們都是軟件,而操做系統能夠看作一款特殊的軟件安全
操做系統是是受保護的:沒法被用戶修改(應用軟件如qq不屬於操做系統能夠隨便卸載)服務器
大型:linux或widows源代碼都在五百萬行以上,這僅僅是內核,不包括用戶程序,如GUI,庫以及基本應用軟件(如windows Explorer等),很容易就能達到這個數量的10倍或者20倍之多微信
長壽:因爲操做系統源碼量巨大,編寫是很是耗時耗力的,一旦完成,操做系統全部者便不會輕易的放棄重寫,二是在原有基礎上改進,基本上能夠把windows95/98/Me看出一個操做系統性能
第一代計算機的產生背景:第一代以前人類是想用機械取代人力,第一代計算機的產生是計算機由機械時代進入電子時代的標誌,從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個程序的執行,是串行的
第二代計算機的產生背景:
因爲當時的計算機很是昂貴,自認很天然的想辦法較少機時的浪費。一般採用的方法就是批處理系統。
特色:
設計人員、生產人員、操做人員、程序人員和維護人員直接有了明確的分工,計算機被鎖在專用空調房間中,由專業操做人員運行,這即是‘大型機’。
有了操做系統的概念
有了程序設計語言:FORTRAN語言或彙編語言,寫到紙上,而後穿孔打成卡片,再將卡片盒帶到輸入室,交給操做員,而後喝着咖啡等待輸出接口
工做過程:
第二代如何解決第一代的問題/缺點:
現代操做系統的前身:(見圖)
優勢:批處理,節省了機時
缺點:
整個流程須要人蔘與控制,將磁帶搬來搬去(中間倆小人)
計算的過程仍然是順序計算-》串行
程序員原來獨享一段時間的計算機,如今必須被統一規劃到一批做業中,等待結果和從新調試的過程都須要等同批次的其餘程序都運做完才能夠(這極大的影響了程序的開發效率,沒法及時調試程序)
第三代計算機的產生背景:
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的執行權限)
空間上的複用最大的問題是:程序之間的內存必須分割,這種分割須要在硬件層面實現,由操做系統控制。若是內存彼此不分割,則一個程序能夠訪問另一個程序的內存,
首先喪失的是安全性,好比你的qq程序能夠訪問操做系統的內存,這意味着你的qq能夠拿到操做系統的全部權限。
其次喪失的是穩定性,某個程序崩潰時有可能把別的程序的內存也給回收了,比方說把操做系統的內存給回收了,則操做系統崩潰。
多道技術案例:
生活中咱們進程會同時作多個任務,可是本質上一我的是不可能同時作執行多個任務的,
例1:吃飯和打遊戲,同時執行,本質上是在兩個任務之間切換執行,吃一口飯而後打打遊戲,打會兒遊戲再吃一口飯;
例2:作飯和洗衣服,若是沒有多道技術,在電飯煲作飯的時候咱們就只能等着,假設洗米花費5分鐘,煮飯花費40分鐘,至關於40分鐘是被浪費的時間。那就能夠在煮飯的等待過程當中去洗衣服,假設把衣服裝進洗衣機花費5分鐘,洗衣服花費40分鐘,那麼總耗時爲 5(洗米)+5(裝衣服)+40(最長等待時間) 大大提升了工做效率
多道技術也是在不一樣任務間切換執行,因爲計算機的切換速度很是快,因此用戶是沒有任何感受的,看起來就像是兩個任務都在執行,可是另外一個問題是,僅僅是切換還不行,還須要在切換前保存當前狀態,切換回來時恢復狀態,這些切換和保存都是須要花費時間的!在上述案例中因爲任務過程當中出現了等待即IO操做因此進行了切換,而對於一些不會出現IO操做的程序而言,切換不只不能提升效率,反而會下降效率
例如:作一百道乘法題和作一百道除法題,兩個任務都是計算任務是不須要等待的,此時的切換反而下降了運行效率!
第三代計算機的操做系統仍然是批處理
許多程序員懷念第一代獨享的計算機,能夠即時調試本身的程序。爲了知足程序員們很快能夠獲得響應,出現了分時操做系統
如何解決第二代計算機的問題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
第四代也就是咱們常見的操做系統,大可能是具有圖形化界面的,例如:Windows,macOS ,CentOS等
因爲採用了IC設計,計算機的體積降低,性能增加,而且成本以及能夠被普通消費者接受,而第三代操做系統大都須要進行專業的學習才能使用,因而各個大佬公司開始開發那種不須要專業學習也能夠快速上手的操做系統,即上述操做系統!
它們都是用了GUI 圖形化用戶接口,用戶只須要經過鼠標點擊拖拽界面上的元素便可完成大部分操做