多進程的實現原理 多道技術 操作系統介紹 下圖是操作系統在整個電腦中所在的位置: 位於應用軟體和硬體設備之間,本質上也是一個軟體, 由系統內核(管理所有硬體資源)與系統介面(提供給程式員使用的介面)組成 操作系統是為方便用戶操作電腦而提供的一個運行在硬體之上的軟體 操作系統的兩個核心作用 1.為 ...
多進程的實現原理-多道技術
操作系統介紹
下圖是操作系統在整個電腦中所在的位置:
位於應用軟體和硬體設備之間,本質上也是一個軟體,
由系統內核(管理所有硬體資源)與系統介面(提供給程式員使用的介面)組成
操作系統是為方便用戶操作電腦而提供的一個運行在硬體之上的軟體
操作系統的兩個核心作用
1.為用戶屏蔽了複雜繁瑣的硬體介面,為應用程式提供了,清晰易用的系統介面
有了這些介面以後程式員不用再直接與硬體打交道了
例子:有了操作系統後我們就可以使用資源管理器來操作硬碟上的數據,而不用操心,磁頭的移動啊,數據的讀寫等等
2.操作系統將應用程式對硬體資源的競爭變成有序的使用
例子:所有軟體 qq啊 微信啊 吃雞啊都共用一套硬體設備 假設現有三個程式都在使用印表機,如果不能妥善管理競爭問題,可能一個程式列印了一半圖片後,另一個程式搶到了印表機執行權於是列印了一半文本,導致兩個程式的任務都沒能完成,操作系統的任務就是將這些無序的操作變得有序
操作系統與應用程式的區別
二者的區別不在於的地位,它們都是軟體,而操作系統可以看做一款特殊的軟體
1.操作系統是是受保護的:無法被用戶修改(應用軟體如qq不屬於操作系統可以隨便卸載)
2.大型:linux或widows源代碼都在五百萬行以上,這僅僅是內核,不包括用戶程式,如GUI,庫以及基本應用軟體(如windows Explorer等),很容易就能達到這個數量的10倍或者20倍之多
3.長壽:由於操作系統源碼量巨大,編寫是非常耗時耗力的,一旦完成,操作系統所有者便不會輕易的放棄重寫,二是在原有基礎上改進,基本上可以把windows95/98/Me看出一個操作系統
操作系統發展歷史:
多道技術出現在第三代操作系統中,是為瞭解決前兩代操作系統存在的種種問題而出現,那麼前兩代操作系統都有哪些問題呢?一起來看看操作系統的發展歷史:
第一代電腦(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的執行許可權)
空間上的復用最大的問題是:程式之間的記憶體必須分割,這種分割需要在硬體層面實現,由操作系統控制。如果記憶體彼此不分割,則一個程式可以訪問另外一個程式的記憶體,
首先喪失的是安全性,比如你的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
第四代電腦(1980~至今):個人電腦
第四代也就是我們常見的操作系統,大多是具備圖形化界面的,例如:Windows,macOS ,CentOS等
由於採用了IC設計,電腦的體積下降,性能增長,並且成本以及可以被普通消費者接受,而第三代操作系統大都需要進行專業的學習才能使用,於是各個大佬公司開始開發那種不需要專業學習也可以快速上手的操作系統,即上述操作系統!
它們都是用了GUI 圖形化用戶介面,用戶只需要通過滑鼠點擊拖拽界面上的元素即可完成大部分操作