进程前戏 (操作系统简述 什么是进程)
參考博客:
一、操作系統的發展史
手工操作 —— 穿孔卡片
1946年第一臺計算機誕生--20世紀50年代中期,計算機工作還在采用手工操作方式。此時還沒有操作系統的概念。
程序員將對應于程序和數據的已穿孔的紙帶(或卡片)裝入輸入機,然后啟動輸入機把程序和數據輸入計算機內存,接著通過控制臺開關啟動程序針對數據運行;計算完畢,打印機輸出計算結果;用戶取走結果并卸下紙帶(或卡片)后,才讓下一個用戶上機。
手工操作方式兩個特點:
(1)用戶獨占全機。不會出現因資源已被其他用戶占用而等待的現象,但資源的利用率低。
(2)CPU 等待手工操作。CPU的利用不充分。
20世紀50年代后期,出現人機矛盾:手工操作的慢速度和計算機的高速度之間形成了尖銳矛盾,手工操作方式已嚴重損害了系統資源的利用率(使資源利用率降為百分之幾,甚至更低),不能容忍。唯一的解決辦法:只有擺脫人的手工操作,實現作業的自動過渡。這樣就出現了成批處理。
批處理 —— 磁帶存儲
批處理系統:加載在計算機上的一個系統軟件,在它的控制下,計算機能夠自動地、成批地處理一個或多個用戶的作業(這作業包括程序、數據和命令)。
聯機批處理系統
首先出現的是聯機批處理系統,即作業的輸入/輸出由CPU來處理。
主機與輸入機之間增加一個存儲設備——磁帶,在運行于主機上的監督程序的自動控制下,計算機可自動完成:成批地把輸入機上的用戶作業讀入磁帶,依次把磁帶上的用戶作業讀入主機內存并執行并把計算結果向輸出機輸出。完成了上一批作業后,監督程序又從輸入機上輸入另一批作業,保存在磁帶上,并按上述步驟重復處理。
監督程序不停地處理各個作業,從而實現了作業到作業的自動轉接,減少了作業建立時間和手工操作時間,有效克服了人機矛盾,提高了計算機的利用率。
但是,在作業輸入和結果輸出時,主機的高速CPU仍處于空閑狀態,等待慢速的輸入/輸出設備完成工作: 主機處于“忙等”狀態。
脫機批處理系統
為克服與緩解:高速主機與慢速外設的矛盾,提高CPU的利用率,又引入了脫機批處理系統,即輸入/輸出脫離主機控制。
衛星機:一臺不與主機直接相連而專門用于與輸入/輸出設備打交道的。
其功能是:
(1)從輸入機上讀取用戶作業并放到輸入磁帶上。
(2)從輸出磁帶上讀取執行結果并傳給輸出機。
這樣,主機不是直接與慢速的輸入/輸出設備打交道,而是與速度相對較快的磁帶機發生關系,有效緩解了主機與設備的矛盾。主機與衛星機可并行工作,二者分工明確,可以充分發揮主機的高速計算能力。
脫機批處理系統:20世紀60年代應用十分廣泛,它極大緩解了人機矛盾及主機與外設的矛盾。
不足:每次主機內存中僅存放一道作業,每當它運行期間發出輸入/輸出(I/O)請求后,高速的CPU便處于等待低速的I/O完成狀態,致使CPU空閑。
為改善CPU的利用率,又引入了多道程序系統。
總結:
早期的操作系統,輸入輸出(I/O):讀磁帶 寫磁帶
現代操作系統,I/O:
磁盤方面:
讀硬盤 和 寫硬盤 :讀文件 寫文件
內存方面:
讀內存和寫內存 :向內存中寫input,從內存中讀print
網絡方面:
網絡傳輸:send 寫,recv 讀
多道程序系統
多道程序設計技術
所謂多道程序設計技術,就是指允許多個程序同時進入內存并運行。即同時把多個程序放入內存,并允許它們交替在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了。
舉例:
教授和研究都有一段代碼讓計算機執行,教授的程序執行需要3天,研究生只需要3分鐘就可以了。
那么問題來了,誰先算?
從常規情況上來看,應該讓研究生先算,因為他的比較快。ok,這只是1個研究生的情況下,假設有多個呢?
那教授不能忍了....
看下圖,使用分時系統
研究生和教授,執行任務的時候,每個任務輪流執行一分鐘。那么最終結果是
研究生需要6分鐘,教授需要3天3分鐘。2個人對這種處理方式,還是可以接受的。
實時系統
雖然多道批處理系統和分時系統能獲得較令人滿意的資源利用率和系統響應時間,但卻不能滿足實時控制與實時信息處理兩個應用領域的需求。于是就產生了實時系統,即系統能夠及時響應隨機發生的外部事件,并在嚴格的時間范圍內完成對該事件的處理。
實時系統在一個特定的應用中常作為一種控制設備來使用。
實時系統可分成兩類:
(1)實時控制系統。當用于飛機飛行、導彈發射等的自動控制時,要求計算機能盡快處理測量系統測得的數據,及時地對飛機或導彈進行控制,或將有關信息通過顯示終端提供給決策人員。當用于軋鋼、石化等工業生產過程控制時,也要求計算機能及時處理由各類傳感器送來的數據,然后控制相應的執行機構。
(2)實時信息處理系統。當用于預定飛機票、查詢有關航班、航線、票價等事宜時,或當用于銀行系統、情報檢索系統時,都要求計算機能對終端設備發來的服務請求及時予以正確的回答。此類對響應及時性的要求稍弱于第一類。
實時操作系統的主要特點:
(1)及時響應。每一個信息接收、分析處理和發送的過程必須在嚴格的時間限制內完成。
(2)高可靠性。需采取冗余措施,雙機系統前后臺工作,也包括必要的保密措施等。
分時——現在流行的PC,服務器都是采用這種運行模式,即把CPU的運行分成若干時間片分別處理不同的運算請求 linux系統 實時——一般用于單片機上、PLC等,比如電梯的上下控制中,對于按鍵等動作要求進行實時處理
分時系統和實時系統的比較
通用操作系統
操作系統的三種基本類型:多道批處理系統、分時系統、實時系統。
通用操作系統:具有多種類型操作特征的操作系統。可以同時兼有多道批處理、分時、實時處理的功能,或其中兩種以上的功能。
例如:實時處理+批處理=實時批處理系統。首先保證優先處理實時任務,插空進行批處理作業。常把實時任務稱為前臺作業,批作業稱為后臺作業。
再如:分時處理+批處理=分時批處理系統。即:時間要求不強的作業放入“后臺”(批處理)處理,需頻繁交互的作業在“前臺”(分時)處理,處理機優先運行“前臺”作業。
從上世紀60年代中期,國際上開始研制一些大型的通用操作系統。這些系統試圖達到功能齊全、可適應各種應用范圍和操作方式變化多端的環境的目標。但是,這些系統過于復雜和龐大,不僅付出了巨大的代價,且在解決其可靠性、可維護性和可理解性方面都遇到很大的困難。
相比之下,UNIX操作系統卻是一個例外。這是一個通用的多用戶分時交互型的操作系統。它首先建立的是一個精干的核心,而其功能卻足以與許多大型的操作系統相媲美,在核心層以外,可以支持龐大的軟件系統。它很快得到應用和推廣,并不斷完善,對現代操作系統有著重大的影響。
至此,操作系統的基本概念、功能、基本結構和組成都已形成并漸趨完善。
操作系統的進一步發展
進入20世紀80年代,大規模集成電路工藝技術的飛躍發展,微處理機的出現和發展,掀起了計算機大發展大普及的浪潮。一方面迎來了個人計算機的時代,同時又向計算機網絡、分布式處理、巨型計算機和智能化方向發展。于是,操作系統有了進一步的發展,如:個人計算機操作系統、網絡操作系統、分布式操作系統等。
個人計算機操作系統
個人計算機上的操作系統是聯機交互的單用戶操作系統,它提供的聯機交互功能與通用分時系統提供的功能很相似。
由于是個人專用,因此一些功能會簡單得多。然而,由于個人計算機的應用普及,對于提供更方便友好的用戶接口和豐富功能的文件系統的要求會愈來愈迫切。
網絡操作系統
計算機網絡:通過通信設施,將地理上分散的、具有自治功能的多個計算機系統互連起來,實現信息交換、資源共享、互操作和協作處理的系統。
網絡操作系統:在原來各自計算機操作系統上,按照網絡體系結構的各個協議標準增加網絡管理模塊,其中包括:通信、資源共享、系統安全和各種網絡應用服務。
分布式操作系統
表面上看,分布式系統與計算機網絡系統沒有多大區別。分布式操作系統也是通過通信網絡,將地理上分散的具有自治功能的數據處理系統或計算機系統互連起來,實現信息交換和資源共享,協作完成任務。——硬件連接相同。
但有如下一些明顯的區別:
(1)分布式系統要求一個統一的操作系統,實現系統操作的統一性。
(2)分布式操作系統管理分布式系統中的所有資源,它負責全系統的資源分配和調度、任務劃分、信息傳輸和控制協調工作,并為用戶提供一個統一的界面。
(3)用戶通過這一界面,實現所需要的操作和使用系統資源,至于操作定在哪一臺計算機上執行,或使用哪臺計算機的資源,則是操作系統完成的,用戶不必知道,此謂:系統的透明性。
(4)分布式系統更強調分布式計算和處理,因此對于多機合作和系統重構、堅強性和容錯能力有更高的要求,希望系統有:更短的響應時間、高吞吐量和高可靠性。
舉例:計算器例子
將表達式分別給不同的計算機處理,結果出來的就比較快。
分布式現在是比較火熱的話題,主要是一臺計算機的性能不夠,讓多臺處理,效率更高。
操作系統的作用
現代的計算機系統主要是由一個或者多個處理器,主存,硬盤,鍵盤,鼠標,顯示器,打印機,網絡接口及其他輸入輸出設備組成。
一般而言,現代計算機系統是一個復雜的系統。
其一:如果每位應用程序員都必須掌握該系統所有的細節,那就不可能再編寫代碼了(嚴重影響了程序員的開發效率:全部掌握這些細節可能需要一萬年....)
其二:并且管理這些部件并加以優化使用,是一件極富挑戰性的工作,于是,計算安裝了一層軟件(系統軟件),稱為操作系統。它的任務就是為用戶程序提供一個更好、更簡單、更清晰的計算機模型,并管理剛才提到的所有設備。
總結:
程序員無法把所有的硬件操作細節都了解到,管理這些硬件并且加以優化使用是非常繁瑣的工作,這個繁瑣的工作就是操作系統來干的,有了他,程序員就從這些繁瑣的工作中解脫了出來,只需要考慮自己的應用軟件的編寫就可以了,應用軟件直接使用操作系統提供的功能來間接使用硬件。
精簡的說的話,操作系統就是一個協調、管理和控制計算機硬件資源和軟件資源的控制程序。操作系統所處的位置如圖
細說的話,操作系統應該分成兩部分功能:
#一:隱藏了丑陋的硬件調用接口,為應用程序員提供調用硬件資源的更好,更簡單,更清晰的模型(系統調用接口)。應用程序員有了這些接口后,就不用再考慮操作硬件的細節,專心開發自己的應用程序即可。 例如:操作系統提供了文件這個抽象概念,對文件的操作就是對磁盤的操作,有了文件我們無需再去考慮關于磁盤的讀寫控制(比如控制磁盤轉動,移動磁頭讀寫數據等細節), #二:將應用程序對硬件資源的競態請求變得有序化 例如:很多應用軟件其實是共享一套計算機硬件,比方說有可能有三個應用程序同時需要申請打印機來輸出內容,那么a程序競爭到了打印機資源就打印,然后可能是b競爭到打印機資源,也可能是c,這就導致了無序,打印機可能打印一段a的內容然后又去打印c...,操作系統的一個功能就是將這種無序變得有序。
操作系統背景知識
顧名思義,進程即正在執行的一個過程。進程是對正在運行程序的一個抽象。
進程的概念起源于操作系統,是操作系統最核心的概念,也是操作系統提供的最古老也是最重要的抽象概念之一。操作系統的其他所有內容都是圍繞進程的概念展開的。
所以想要真正了解進程,必須事先了解操作系統,點擊進入
PS:即使可以利用的cpu只有一個(早期的計算機確實如此),也能保證支持(偽)并發的能力。將一個單獨的cpu變成多個虛擬的cpu(多道技術:時間多路復用和空間多路復用+硬件上支持隔離),沒有進程的抽象,現代計算機將不復存在。
必備的理論基礎:
#一 操作系統的作用:
1:隱藏丑陋復雜的硬件接口,提供良好的抽象接口
2:管理、調度進程,并且將多個進程對硬件的競爭變得有序
#二 多道技術:
1.產生背景:針對單核,實現并發
ps:
現在的主機一般是多核,那么每個核都會利用多道技術
有4個cpu,運行于cpu1的某個程序遇到io阻塞,會等到io結束再重新調度,會被調度到4個
cpu中的任意一個,具體由操作系統調度算法決定。
2.空間上的復用:如內存中同時有多道程序
3.時間上的復用:復用一個cpu的時間片
強調:遇到io切,占用cpu時間過長也切,核心在于切之前將進程的狀態保存下來,這樣
才能保證下次切換回來時,能基于上次切走的位置繼續運行
什么是進程
進程(Process)是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。在早期面向進程設計的計算機結構中,進程是程序的基本執行實體;在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。
狹義定義:進程是正在運行的程序的實例(an instance of a computer program that is being executed)。
廣義定義:進程是一個具有一定獨立功能的程序關于某個數據集合的一次運行活動。它是操作系統動態執行的基本單元,在傳統的操作系統中,進程既是基本的分配單元,也是基本的執行單元。
第一,進程是一個實體。每一個進程都有它自己的地址空間,一般情況下,包括文本區域(text region)、數據區域(data region)和堆棧(stack region)。文本區域存儲處理器執行的代碼;數據區域存儲變量和進程執行期間使用的動態分配的內存;堆棧區域存儲著活動過程調用的指令和本地變量。 第二,進程是一個“執行中的程序”。程序是一個沒有生命的實體,只有處理器賦予程序生命時(操作系統執行之),它才能成為一個活動的實體,我們稱其為進程。[3] 進程是操作系統中最基本、重要的概念。是多道程序系統出現后,為了刻畫系統內部出現的動態情況,描述系統內部各道程序的活動規律引進的一個概念,所有多道程序設計操作系統都建立在進程的基礎上。 進程的概念
從理論角度看,是對正在運行的程序過程的抽象; 從實現角度看,是一種數據結構,目的在于清晰地刻畫動態系統的內在規律,有效管理和調度進入計算機系統主存儲器運行的程序。
操作系統引入進程的概念的原因
動態性:進程的實質是程序在多道程序系統中的一次執行過程,進程是動態產生,動態消亡的。 并發性:任何進程都可以同其他進程一起并發執行 獨立性:進程是一個能獨立運行的基本單位,同時也是系統分配資源和調度的獨立單位; 異步性:由于進程間的相互制約,使進程具有執行的間斷性,即進程按各自獨立的、不可預知的速度向前推進 結構特征:進程由程序、數據和進程控制塊三部分組成。 多個不同的進程可以包含相同的程序:一個程序在不同的數據集里就構成不同的進程,能得到不同的結果;但是執行過程中,程序不能發生改變。
進程的特征
程序是指令和數據的有序集合,其本身沒有任何運行的含義,是一個靜態的概念。 而進程是程序在處理機上的一次執行過程,它是一個動態的概念。 程序可以作為一種軟件資料長期存在,而進程是有一定生命期的。 程序是永久的,進程是暫時的。
進程與程序中的區別
注意:同一個程序執行兩次,就會在操作系統中出現兩個進程,所以我們可以同時運行一個軟件,分別做不同的事情也不會混亂。
進程調度
要想多個進程交替運行,操作系統必須對這些進程進行調度,這個調度也不是隨即進行的,而是需要遵循一定的法則,由此就有了進程的調度算法。
先來先服務(FCFS)調度算法是一種最簡單的調度算法,該算法既可用于作業調度,也可用于進程調度。FCFS算法比較有利于長作業(進程),而不利于短作業(進程)。由此可知,本算法適合于CPU繁忙型作業,而不利于I/O繁忙型的作業(進程)。
先來先服務調度算法
短作業(進程)優先調度算法(SJ/PF)是指對短作業或短進程優先調度的算法,該算法既可用于作業調度,也可用于進程調度。但其對長作業不利;不能保證緊迫性作業(進程)被及時處理;作業的長短只是被估算出來的。
短作業優先調度算法
時間片輪轉(Round Robin,RR)法的基本思路是讓每個進程在就緒隊列中的等待時間與享受服務的時間成比例。在時間片輪轉法中,需要將CPU的處理時間分成固定大小的時間片,例如,幾十毫秒至幾百毫秒。如果一個進程在被調度選中之后用完了系統規定的時間片,但又未完成要求的任務,則它自行釋放自己所占有的CPU而排到就緒隊列的末尾,等待下一次調度。同時,進程調度程序又去調度當前就緒隊列中的第一個進程。
顯然,輪轉法只能用來調度分配一些可以搶占的資源。這些可以搶占的資源可以隨時被剝奪,而且可以將它們再分配給別的進程。CPU是可搶占資源的一種。但打印機等資源是不可搶占的。由于作業調度是對除了CPU之外的所有系統硬件資源的分配,其中包含有不可搶占資源,所以作業調度不使用輪轉法。
在輪轉法中,時間片長度的選取非常重要。首先,時間片長度的選擇會直接影響到系統的開銷和響應時間。如果時間片長度過短,則調度程序搶占處理機的次數增多。這將使進程上下文切換次數也大大增加,從而加重系統開銷。反過來,如果時間片長度選擇過長,例如,一個時間片能保證就緒隊列中所需執行時間最長的進程能執行完畢,則輪轉法變成了先來先服務法。時間片長度的選擇是根據系統對響應時間的要求和就緒隊列中所允許最大的進程數來確定的。
在輪轉法中,加入到就緒隊列的進程有3種情況:
一種是分給它的時間片用完,但進程還未完成,回到就緒隊列的末尾等待下次調度去繼續執行。
另一種情況是分給該進程的時間片并未用完,只是因為請求I/O或由于進程的互斥與同步關系而被阻塞。當阻塞解除之后再回到就緒隊列。
第三種情況就是新創建進程進入就緒隊列。
如果對這些進程區別對待,給予不同的優先級和時間片從直觀上看,可以進一步改善系統服務質量和效率。例如,我們可把就緒隊列按照進程到達就緒隊列的類型和進程被阻塞時的阻塞原因分成不同的就緒隊列,每個隊列按FCFS原則排列,各隊列之間的進程享有不同的優先級,但同一隊列內優先級相同。這樣,當一個進程在執行完它的時間片之后,或從睡眠中被喚醒以及被創建之后,將進入不同的就緒隊列。
時間片輪轉法
前面介紹的各種用作進程調度的算法都有一定的局限性。如短進程優先的調度算法,僅照顧了短進程而忽略了長進程,而且如果并未指明進程的長度,則短進程優先和基于進程長度的搶占式調度算法都將無法使用。 而多級反饋隊列調度算法則不必事先知道各種進程所需的執行時間,而且還可以滿足各種類型進程的需要,因而它是目前被公認的一種較好的進程調度算法。在采用多級反饋隊列調度算法的系統中,調度算法的實施過程如下所述。 (1) 應設置多個就緒隊列,并為各個隊列賦予不同的優先級。第一個隊列的優先級最高,第二個隊列次之,其余各隊列的優先權逐個降低。該算法賦予各個隊列中進程執行時間片的大小也各不相同,在優先權愈高的隊列中,為每個進程所規定的執行時間片就愈小。例如,第二個隊列的時間片要比第一個隊列的時間片長一倍,……,第i+1個隊列的時間片要比第i個隊列的時間片長一倍。 (2) 當一個新進程進入內存后,首先將它放入第一隊列的末尾,按FCFS原則排隊等待調度。當輪到該進程執行時,如它能在該時間片內完成,便可準備撤離系統;如果它在一個時間片結束時尚未完成,調度程序便將該進程轉入第二隊列的末尾,再同樣地按FCFS原則等待調度執行;如果它在第二隊列中運行一個時間片后仍未完成,再依次將它放入第三隊列,……,如此下去,當一個長作業(進程)從第一隊列依次降到第n隊列后,在第n 隊列便采取按時間片輪轉的方式運行。 (3) 僅當第一隊列空閑時,調度程序才調度第二隊列中的進程運行;僅當第1~(i-1)隊列均空時,才會調度第i隊列中的進程運行。如果處理機正在第i隊列中為某進程服務時,又有新進程進入優先權較高的隊列(第1~(i-1)中的任何一個隊列),則此時新進程將搶占正在運行進程的處理機,即由調度程序把正在運行的進程放回到第i隊列的末尾,把處理機分配給新到的高優先權進程。
多級反饋隊列
一個進程首先會進入高級隊列,再單位時間內,如果沒有執行完,就會降級,進入低級隊列。
進程的并行與并發
并行:并行是指兩者同時執行,比如賽跑,兩個人都在不停的往前跑;(資源夠用,比如三個線程,四核的CPU )
并發:并發是指資源有限的情況下,兩者交替輪流使用資源,比如一段路(單核CPU資源)同時只能過一個人,A走一段后,讓給B,B用完繼續給A ,交替使用,目的是提高效率。
區別:
并行是從微觀上,也就是在一個精確的時間片刻,有不同的程序在執行,這就要求必須有多個處理器。
并發是從宏觀上,在一個時間段上可以看出是同時執行的,比如一個服務器同時處理多個session。
同步異步阻塞非阻塞
狀態介紹
分析:
在了解其他概念之前,我們首先要了解進程的幾個狀態。在程序運行的過程中,由于被操作系統的調度算法控制,程序會進入幾個狀態:就緒,運行和阻塞。
(1)就緒(Ready)狀態
當進程已分配到除CPU以外的所有必要的資源,只要獲得處理機便可立即執行,這時的進程狀態稱為就緒狀態。
(2)執行/運行(Running)狀態當進程已獲得處理機,其程序正在處理機上執行,此時的進程狀態稱為執行狀態。
(3)阻塞(Blocked)狀態正在執行的進程,由于等待某個事件發生而無法執行時,便放棄處理機而處于阻塞狀態。引起進程阻塞的事件可有多種,例如,等待I/O完成、申請緩沖區不能滿足、等待信件(信號)等。
同步和異步
所謂同步就是一個任務的完成需要依賴另外一個任務時,只有等待被依賴的任務完成后,依賴的任務才能算完成,這是一種可靠的任務序列。要么成功都成功,失敗都失敗,兩個任務的狀態可以保持一致。
所謂異步是不需要等待被依賴的任務完成,只是通知被依賴的任務要完成什么工作,依賴的任務也立即執行,只要自己完成了整個任務就算完成了。至于被依賴的任務最終是否真正完成,依賴它的任務無法確定,所以它是不可靠的任務序列。
比如我去銀行辦理業務,可能會有兩種方式: 第一種 :選擇排隊等候; 第二種 :選擇取一個小紙條上面有我的號碼,等到排到我這一號時由柜臺的人通知我輪到我去辦理業務了; 第一種:前者(排隊等候)就是同步等待消息通知,也就是我要一直在等待銀行辦理業務情況; 第二種:后者(等待別人通知)就是異步等待消息通知。在異步消息處理中,等待消息通知者(在這個例子中就是等待辦理業務的人)往往注冊一個回調機制,在所等待的事件被觸發時由觸發機制(在這里是柜臺的人)通過某種機制(在這里是寫在小紙條上的號碼,喊號)找到等待該事件的人。
例子
阻塞與非阻塞
阻塞和非阻塞這兩個概念與程序(線程)等待消息通知(無所謂同步或者異步)時的狀態有關。也就是說阻塞與非阻塞主要是程序(線程)等待消息通知時的狀態角度來說的
繼續上面的那個例子,不論是排隊還是使用號碼等待通知,如果在這個等待的過程中,等待者除了等待消息通知之外不能做其它的事情,那么該機制就是阻塞的,表現在程序中,也就是該程序一直阻塞在該函數調用處不能繼續往下執行。 相反,有的人喜歡在銀行辦理這些業務的時候一邊打打電話發發短信一邊等待,這樣的狀態就是非阻塞的,因為他(等待者)沒有阻塞在這個消息通知上,而是一邊做自己的事情一邊等待。 注意:同步非阻塞形式實際上是效率低下的,想象一下你一邊打著電話一邊還需要抬頭看到底隊伍排到你了沒有。如果把打電話和觀察排隊的位置看成是程序的兩個操作的話,這個程序需要在這兩種不同的行為之間來回的切換,效率可想而知是低下的;而異步非阻塞形式卻沒有這樣的問題,因為打電話是你(等待者)的事情,而通知你則是柜臺(消息觸發機制)的事情,程序沒有在兩種不同的操作中來回切換。
例子
同步/異步與阻塞/非阻塞
同步阻塞形式
效率最低。拿上面的例子來說,就是你專心排隊,什么別的事都不做。
異步阻塞形式
如果在銀行等待辦理業務的人采用的是異步的方式去等待消息被觸發(通知),也就是領了一張小紙條,假如在這段時間里他不能離開銀行做其它的事情,那么很顯然,這個人被阻塞在了這個等待的操作上面;
異步操作是可以被阻塞住的,只不過它不是在處理消息時阻塞,而是在等待消息通知時被阻塞。
同步非阻塞形式
實際上是效率低下的。
想象一下你一邊打著電話一邊還需要抬頭看到底隊伍排到你了沒有,如果把打電話和觀察排隊的位置看成是程序的兩個操作的話,這個程序需要在這兩種不同的行為之間來回的切換,效率可想而知是低下的。
異步非阻塞形式
效率更高,
因為打電話是你(等待者)的事情,而通知你則是柜臺(消息觸發機制)的事情,程序沒有在兩種不同的操作中來回切換。
比如說,這個人突然發覺自己煙癮犯了,需要出去抽根煙,于是他告訴大堂經理說,排到我這個號碼的時候麻煩到外面通知我一下,那么他就沒有被阻塞在這個等待的操作上面,自然這個就是異步+非阻塞的方式了。
很多人會把同步和阻塞混淆,是因為很多時候同步操作會以阻塞的形式表現出來,同樣的,很多人也會把異步和非阻塞混淆,因為異步操作一般都不會在真正的IO操作處被阻塞。
舉個通俗的例子:
故事:老王燒開水。 出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)。 老王想了想,有好幾種等待方式 1.老王用水壺煮水,并且站在那里,不管水開沒開,每隔一定時間看看水開了沒。-同步阻塞 老王想了想,這種方法不夠聰明。 2.老王還是用水壺煮水,不再傻傻的站在那里看水開,跑去寢室上網,但是還是會每隔一段時間過來看看水開了沒有,水沒有開就走人。-同步非阻塞 老王想了想,現在的方法聰明了些,但是還是不夠好。 3.老王這次使用高大上的響水壺來煮水,站在那里,但是不會再每隔一段時間去看水開,而是等水開了,水壺會自動的通知他。-異步阻塞 老王想了想,不會呀,既然水壺可以通知我,那我為什么還要傻傻的站在那里等呢,嗯,得換個方法。 4.老王還是使用響水壺煮水,跑到客廳上網去,等著響水壺自己把水煮熟了以后通知他。-異步非阻塞 老王豁然,這下感覺輕松了很多。 -------------------------------------------------------------------------------- 同步和異步 同步就是燒開水,需要自己去輪詢(每隔一段時間去看看水開了沒),異步就是水開了,然后水壺會通知你水已經開了,你可以回來處理這些開水了。 同步和異步是相對于操作結果來說,會不會等待結果返回。 阻塞和非阻塞 阻塞就是說在煮水的過程中,你不可以去干其他的事情,非阻塞就是在同樣的情況下,可以同時去干其他的事情。阻塞和非阻塞是相對于線程是否被阻塞。
老王燒開水
進程的創建與結束
進程的創建
但凡是硬件,都需要有操作系統去管理,只要有操作系統,就有進程的概念,就需要有創建進程的方式,一些操作系統只為一個應用程序設計,比如微波爐中的控制器,一旦啟動微波爐,所有的進程都已經存在。
而對于通用系統(跑很多應用程序),需要有系統運行過程中創建或撤銷進程的能力,主要分為4中形式創建新的進程:
1. 系統初始化(查看進程linux中用ps命令,windows中用任務管理器,前臺進程負責與用戶交互,后臺運行的進程與用戶無關,運行在后臺并且只在需要時才喚醒的進程,稱為守護進程,如電子郵件、web頁面、新聞、打印)
2. 一個進程在運行過程中開啟了子進程(如nginx開啟多進程,os.fork,subprocess.Popen等)
3. 用戶的交互式請求,而創建一個新進程(如用戶雙擊暴風影音)
4. 一個批處理作業的初始化(只在大型機的批處理系統中應用)
無論哪一種,新進程的創建都是由一個已經存在的進程執行了一個用于創建進程的系統調用而創建的。
1. 在UNIX中該系統調用是:fork,fork會創建一個與父進程一模一樣的副本,二者有相同的存儲映像、同樣的環境字符串和同樣的打開文件(在shell解釋器進程中,執行一個命令就會創建一個子進程) 2. 在windows中該系統調用是:CreateProcess,CreateProcess既處理進程的創建,也負責把正確的程序裝入新進程。 關于創建子進程,UNIX和windows 1.相同的是:進程創建后,父進程和子進程有各自不同的地址空間(多道技術要求物理層面實現進程之間內存的隔離),任何一個進程的在其地址空間中的修改都不會影響到另外一個進程。 2.不同的是:在UNIX中,子進程的初始地址空間是父進程的一個副本,提示:子進程和父進程是可以有只讀的共享內存區的。但是對于windows系統來說,從一開始父進程與子進程的地址空間就是不同的。
創建進程
進程的結束
1. 正常退出(自愿,如用戶點擊交互式頁面的叉號,或程序執行完畢調用發起系統調用正常退出,在linux中用exit,在windows中用ExitProcess)
2. 出錯退出(自愿,python a.py中a.py不存在)
3. 嚴重錯誤(非自愿,執行非法指令,如引用不存在的內存,1/0等,可以捕捉異常,try...except...)
4. 被其他進程殺死(非自愿,如kill -9)
總結
以上是生活随笔為你收集整理的进程前戏 (操作系统简述 什么是进程)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mybatis大于小于符号的替换
- 下一篇: 特斯拉将永久关闭加州圣马特奥办公室:裁员