操作系統-進程和線程

文章目錄

進程

PCB是進程存在的唯一標識。用於控制進程中的資源。
進程是程序的一次性執行過程,具有“動態性”。
進程實體是由程序段,數據段,PCB三部分組成。進程的管理者(操作系統)所需的數據都在PCB中,程序本身運行所需的數據放在程序段和數據段中。

進程的特點:

動態性:進程是程序的一次性執行過程,是動態的產生,變化和消亡的;
併發性:內存中有多個進程實體,各個進程可以併發執行。(併發:進程輪流的被CPU所執行,CPU切換速度很快,所以在用戶看來好像是一起執行了多個進程,稱爲併發)
獨立性:進程是能夠獨立運行,獨立獲得資源,接受調度的基本單位。
異步性:各進程按各自獨立的,不可預知的速度向前推進,操作系統要提供“進程同步機制”來解決異步問題。
結構性:每個進程都會配置一個PCB。結構上看,進程由程序段,數據段,PCB組成。

進程的狀態–三種基本狀態
運行態:佔有CPU,並在CPU上運行;(單核處理機環境下,每一時刻最多隻有一個進程處於運行狀態)
就緒態:已經具備運行條件,但是由於沒有空閒CPU,而暫時不能運行。(完事具備,只欠CPU)
阻塞態:因等待某一事件而暫時不能被運行,比如說需要等待其他進程運行的結果,所以自己主動轉換到阻塞態。
在這裏插入圖片描述
進程同步
進程具有異步性。異步性是指,各併發執行的進程以各自獨立的、不可預知的速度向前推進。(併發必然導致異步性)
同步亦稱直接制約關係,它是指爲完成某種任務而建立的兩個或多個進程,這些進程因爲需要在某些位置上協調他們的工作次序而產生的制約關係。進程間的制約關係就是源於他們之間的相互合作。比如說進程之間的管道通信,讀進程和寫進程併發的進行,由於併發必然導致異步性,因此“寫數據”和“讀數據”兩個操作執行的先後順序是不確定的。而實際應用中,又必須按照“寫數據–讀數據”這種順序來執行的,因而引入同步的概念。

進程互斥
我們把一個時間段只允許一個進程使用的資源稱爲臨界資源,許多物理設備(比如打印機/攝像頭)都屬於臨界資源。此外還有許多變量/數據/內存緩衝區都屬於臨界資源。
對於臨界資源的訪問,必須互斥的進行。進程互斥指當某一個進程訪問某臨界資源時,另一個想要訪問該臨界資源的進程必須等待。當前訪問臨界資源的進程訪問結束,釋放該資源後,另一個進程才能去訪問臨界資源。
–進入區,可理解爲上鎖;
–臨界區:訪問臨界資源的那段代碼;
–退出區:負責解除正在訪問臨界資源的標誌,可以理解爲“解鎖”
–剩餘區:做其他處理

進程調度算法
1.先來先服務
2.短進程優先
3.時間片輪轉調度算法
4.高響應比優先調度算法
其中先來先服務,短進程優先算法都會導致進程飢餓現象發生;高響應比優先調度算法是綜合考慮等待時間和執行時間的一種進程調度算法。

線程

傳統的進程是程序執行流的最小單位,在引入了線程之後,線程成爲了程序執行流的最小單位,可以把線程理解成爲輕量級的進程。
線程是一個基本的CPU執行單元,也是程序執行流的最小單位。
引入線程之後,不僅是進程之間可以併發,線程之間也可以併發,從而進一步提升了系統的併發度,使得一個進程內可以併發處理各種任務(如QQ視頻,文字聊天,傳文件)
引入線程後,進程只能作爲除CPU之外的系統資源的分配單元(如打印機,內存地址空間等都是分配給進程的)。

在這裏插入圖片描述
在這裏插入圖片描述
線程互斥:
互斥:指在某一時刻指允許一個進程運行其中的程序片,具有排他性和唯一性。
對於線程A和線程B來講,在同一時刻,只允許一個線程對臨界資源進行操作,即當A進入臨界區對資源操作時,B就必須等待;當A執行完,退出臨界區後,B才能對臨界資源進行操作。
線程同步:
同步:指的是在互斥的基礎上,實現進程之間的有序訪問。假設現有線程A和線程B,線程A需要往緩衝區寫數據,線程B需要從緩衝區讀數據,但他們之間存在一種制約關係,即當線程A寫的時候,B不能來拿數據;B在拿數據的時候A不能往緩衝區寫,也就是說,只有當A寫完數據(或B取走數據),B才能來讀數據(或A才能往裏寫數據)。這種關係就是一種線程的同步關係。

應用常見:多線程編程中,難免會遇到多個線程同時訪問臨界資源的問題,如果不對其加以保護,那麼結果肯定是不如預期的,因此需要線程同步與互斥。

多線程
多線程就是指一個進程中同時有多個執行路徑正在執行

併發是指cpu通過時間片輪轉調度方式,在進程/線程之間不停的切換服務於不同的線程/進程,在宏觀上(用戶層面)看起來好像是多個進程在同時執行一樣,在微觀上其實每一個時刻只有一個進程被執行。

並行是指多個操作指令由多個cpu來完成,它是一種實際意義上的同時執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章