程序的並行和併發以及上下文。

2021-09-29 07:08:39 字數 2000 閱讀 3972

一、程序的初步認識二、時間片的概念

現代作業系統,如linux,windows等都是支援多工的作業系統,所謂的多工就是作業系統可以執行同時執行多個任務。

作業系統的任務排程就是採用時間片輪換的搶占式排程方式,也就是說乙個任務執行一小段時間後強制暫停去執行下乙個任務,每個任務輪流執行。

任務執行的一小段時間叫做時間片,任務正在執行的狀態叫做執行狀態,任務執行一段時間後強制暫停去執行下乙個任務,被暫停的任務就出於就緒狀態等待下乙個屬於它的時間片的到來,這樣每個任務都能得到執行,由於cpu的執行效率非常高,時間片非常短,在每個任務之間快速的區切,給人的感覺就是多個任務在"同時執行",這就是接下來要講的併發

三、併發和並行

現在,多核cpu已經非常普及了,由於任務數量遠遠多於cpu的核心數量,所以,作業系統也會自動把很多任務輪流排程到每個核心上執行。

對於併發:多個程序在乙個cpu下採用時間片輪轉的方式,在一段時間之內,讓多個程序都得以推進,稱之為併發。站在cpu的角度來說,多個程序是來回切換執行的,但由於cpu執行效率很快,時間片很短,在外界或者人類的角度來說,難以察覺這些切換時的變化,所以看起來這些程序是同時進行的,所以併發是一種「偽並行」。

對於並行:多個程序在多個cpu下分別,同時進行執行,這稱之為並行以。

計算機作業系統中把並行性和併發性明顯區分開,主要是從微觀的角度來說的,具體是指程序的並行性(多處理機的情況下,多個程序同時執行)和併發性(單處理機的情況下,多個程序在同一時間間隔執行的)。併發與並行類似於工廠中的流水線,要擴大產量,1是考慮建造多個工廠,這就是並行,2是考慮每個工廠中新增流水線,這就類似併發。

四、程序中的上下文

程序是由核心態管理和排程的,程序的切換只能發生在核心態。

上下文簡單說來就是乙個環境,程序在時間片輪轉切換時,由於每個程序執行環境不同,就涉及到轉換前後的上下文,環境的切換就是乙個程序在執行的時候,cpu的所有暫存器中的值、程序的狀態以及堆疊上的內容。切換時需要儲存當前程序的所有狀態,即儲存當前程序的程序上下文,以便再次執行該程序時,能夠恢復切換時的狀態,繼續執行。

程序的上下文不但包括虛擬記憶體,棧,全域性變數等使用者空間資源,還包括核心堆疊,暫存器等核心空間。先把當前程序的虛擬記憶體,棧儲存起來,再儲存當前程序的核心狀態和cpu暫存器,載入下乙個程序的核心狀態後,還需要重新整理新程序的虛擬記憶體和使用者棧。

程序切換的場景有:

1.程序的時間片耗盡。

2.系統資源不足(記憶體不足)

3.程序通過睡眠函式sleep把自己掛起來。

4.當有優先順序更高的程序執行時,為了去執行更高優先順序的程式,當前程式會被暫停執行。

5.發生硬中斷,cpu上的程序會被掛起,然後執行核心中的中斷服務程序。

五、程序的狀態

1.就緒:程序處於可執行的狀態,就是說該程序已經被分配到了所有必須的資源,只是cpu時間片還沒有輪轉到該程序,則該程序處於就緒狀態,一旦獲得時間片就可以立即執行。

2.執行:程序處於可執行的狀態,且cpu時間片輪轉到該程序,該程序正在執行**,則該程序處於執行狀態。

3.阻塞:程序不具備執行條件,正在等待某個事件的完成。引起阻塞的原因有:(1)、向系統申請資源時失敗。如果資源被另乙個程序正在占用。則該程序出於阻塞狀態。(2)、等待某種操作,該程序啟動了某i/o裝置,如果只有完成了制定i/o任務後該程序才能執行,在啟動了i/o裝置後會自動進入阻塞狀態。

(3)、新資料尚未達到,對於相互作用的程序,如果乙個執行緒需要先獲得另乙個程序資料後才能對該資料進行處理,只要資料未達到就會進入阻塞狀態。(4)、等待新任務的到達,每當當前程序完成自己的任務就會把自己阻塞起來,等到新任務到達時,才將其喚醒。

六、核心態和使用者態

一般的作業系統(如windows、linux)對執行許可權進行分級:使用者態和核心態。

作業系統核心作為直接控制硬體裝置的底層軟體,許可權最高,稱為核心態,或核心態。

使用者程式的許可權最低,稱為使用者態。

程序上下文和中斷上下文

程序上下文和中斷上下文是作業系統中很重要的兩個概念,這兩個概念在作業系統課程中不斷被提及,是最經常接觸 看上去很懂但又說不清楚到底怎麼回事。造成這種局面的原因,可能是原來接觸到的作業系統課程的教學總停留在一種淺層次的理論層面上,沒有深入去研究。處理器總處於以下狀態中的一種 核心態,執行於程序上下文,...

程序上下文和中斷上下文

程序上下文是一種核心所處的操作模式,此時核心代表程序執行 例如執行系統呼叫或執行核心執行緒。上下文context 上下文簡單說來就是乙個環境,相對於程序而言,就是程序執行時的環境。具體來說就是各個變數和資料,包括所有的暫存器變數 程序開啟的檔案 記憶體資訊等。乙個程序的上下文可以分為三個部分 使用者...

程序上下文和中斷上下文

核心空間和使用者空間是現代作業系統的兩種工作模式,核心模組執行在核心空間,而使用者態應用程式執行在使用者空間。它們代表不同的級別,而對系統資源具有不同的訪問許可權。核心模組執行在最高端別 核心態 這個級下所有的操作都受系統信任,而應用程式執行在較低級別 使用者態 在這個級別,處理器控制著對硬體的直接...