《計算機作業系統》總結二(程序與執行緒)
作業系統(計算機)程序和執行緒管理
主要內容:- 程序與執行緒
- 程序概念;程序的狀態與轉換
- 程序控制;程序組織
- 程序通訊;執行緒概念與多執行緒模型
- 處理器排程
排程的基本概念;排程時機、切換與過程排程的基本準則;排程方式典型排程演算法
- 程序同步
程序同步的基本概念實現臨界區互斥的基本方法訊號量;管程;經典同步問題
- 死鎖
死鎖的概念;死鎖處理策略死鎖預防;死鎖避免死鎖的檢測和解除
2.1 程序的概念和特徵
程序的概念
在多道程式環境下,允許多個程式併發執行,此時它們將失去封閉性,並具有間斷性及不可再現性的特徵。為此引入了程序(Process)的概念,以便更好地描述和控制程式的併發執行,實現作業系統的併發性和共享性為了使參與併發執行的程式(含資料)能獨立地執行,必須為之配置一個專門的資料結構,稱為程序控制塊(Process Control Block, PCB)。系統利用PCB來描述程序的基本情況和執行狀態,進而控制和管理程序。相應地,由程式段、相關資料段和PCB三部分構成了程序映像(程序實體)。所謂建立程序,實質上是建立程序映像中的PCB;而撤銷程序,實質上是撤銷程序的PCB。值得注意的是,程序映像是靜態的,程序則是動態的。
注意:PCB是程序存在的唯一標誌!
從不同的角度,程序可以有不同的定義,比較典型的定義有:
- 程序是程式的一次執行過程。
- 程序是一個程式及其資料在處理機上順序執行時所發生的活動。
- 程序是具有獨立功能的程式在一個數據集合上執行的過程,它是系統進行資源分配和排程的一個獨立單位。
在引入程序實體的概念後,我們可以把傳統作業系統中的程序定義為:”程序是程序實體的執行過程,是系統進行資源分配和排程的一個獨立單位。“
程序的特徵
程序是由多程式的併發執行而引出的,它和程式是兩個截然不同的概念。程序的基本特徵是對比單個程式的順序執行提出的,也是對程序管理提出的基本要求。- 動態性:程序是程式的一次執行,它有著建立、活動、暫停、終止等過程,具有一定的生命週期,是動態地產生、變化和消亡的。動態性是程序最基本的特徵。
- 併發性:指多個程序實體,同存於記憶體中,能在一段時間內同時執行,併發性是程序的重要特徵,同時也是作業系統的重要特徵。引入程序的目的就是為了使程式能與其他程序的程式併發執行,以提高資源利用率。
- 獨立性:指程序實體是一個能獨立執行、獨立獲得資源和獨立接受排程的基本單位。凡未建立PCB的程式都不能作為一個獨立的單位參與執行。
- 非同步性:由於程序的相互制約,使程序具有執行的間斷性,即程序按各自獨立的、 不可預知的速度向前推進。非同步性會導致執行結果的不可再現性,為此,在作業系統中必須配置相應的程序同步機制。
- 結構性:每個程序都配置一個PCB對其進行描述。從結構上看,程序實體是由程式段、資料段和程序控制段三部分組成的。
2.2 程序的狀態與轉換
程序在其生命週期內,由於系統中各程序之間的相互制約關係及系統的執行環境的變化,使得程序的狀態也在不斷地發生變化(一個程序會經歷若干種不同狀態)。通常程序有以下五種狀態,前三種是程序的基本狀態。1) 執行狀態:程序正在處理機上執行。在單處理機環境下,每一時刻最多隻有一個程序處於執行狀態。
2) 就緒狀態:程序已處於準備執行的狀態,即程序獲得了除處理機之外的一切所需資源,一旦得到處理機即可執行。
3) 阻塞狀態,又稱等待狀態:程序正在等待某一事件而暫停執行,如等待某資源為可用(不包括處理機)或等待輸入/輸出完成。即使處理機空閒,該程序也不能執行。
4) 建立狀態:程序正在被建立,尚未轉到就緒狀態。建立程序通常需要多個步驟:首先申請一個空白的PCB,並向PCB中填寫一些控制和管理程序的資訊;然後由系統為該程序分配執行時所必需的資源;最後把該程序轉入到就緒狀態。
5) 結束狀態:程序正從系統中消失,這可能是程序正常結束或其他原因中斷退出執行。當程序需要結束執行時,系統首先必須置該程序為結束狀態,然後再進一步處理資源釋放和回收等工作。
注意區別就緒狀態和等待狀態:就緒狀態是指程序僅缺少處理機,只要獲得處理機資源就立即執行;而等待狀態是指程序需要其他資源(除了處理機)或等待某一事件。之所以把處理機和其他資源劃分開,是因為在分時系統的時間片輪轉機制中,每個程序分到的時間片是若干毫秒。也就是說,程序得到處理機的時間很短且非常頻繁,程序在執行過程中實際上是頻繁地轉換到就緒狀態的;而其他資源(如外設)的使用和分配或者某一事件的發生(如I/O操作的完成)對應的時間相對來說很長,程序轉換到等待狀態的次數也相對較少。這樣來看,就緒狀態和等待狀態是程序生命週期中兩個完全不同的狀態,很顯然需要加以區分。
圖2-1說明了五種程序狀態的轉換,而三種基本狀態之間的轉換如下:
圖2-1 五種程序狀態的轉換
就緒狀態 -> 執行狀態:處於就緒狀態的程序被排程後,獲得處理機資源(分派處理機時間片),於是程序由就緒狀態轉換為執行狀態。
執行狀態 -> 就緒狀態:處於執行狀態的程序在時間片用完後,不得不讓出處理機,從而程序由執行狀態轉換為就緒狀態。此外,在可剝奪的作業系統中,當有更高優先順序的程序就緒時,排程程度將正執行的程序轉換為就緒狀態,讓更高優先順序的程序執行。
執行狀態 -> 阻塞狀態:當程序請求某一資源(如外設)的使用和分配或等待某一事件的發生(如I/O操作的完成)時,它就從執行狀態轉換為阻塞狀態。程序以系統呼叫的形式請求作業系統提供服務,這是一種特殊的、由執行使用者態程式呼叫作業系統核心過程的形式。
阻塞狀態 -> 就緒狀態:當程序等待的事件到來時,如I/O操作結束或中斷結束時,中斷處理程式必須把相應程序的狀態由阻塞狀態轉換為就緒狀態。
2.3 程序控制:程序的建立、終止、阻塞、喚醒和切換
程序控制的主要功能是對系統中的所有程序實施有效的管理,它具有建立新程序、撤銷已有程序、實現程序狀態轉換等功能。在作業系統中,一般把程序控制用的程式段稱為原語,原語的特點是執行期間不允許中斷,它是一個不可分割的基本單位。程序的建立
允許一個程序建立另一個程序。此時建立者稱為父程序,被建立的程序稱為子程序。子程序可以繼承父程序所擁有的資源。當子程序被撤銷時,應將其從父程序那裡獲得的資源歸還給父程序。此外,在撤銷父程序時,也必須同時撤銷其所有的子程序。在作業系統中,終端使用者登入系統、作業排程、系統提供服務、使用者程式的應用請求等都會引起程序的建立。作業系統建立一個新程序的過程如下(建立原語):
- 為新程序分配一個唯一的程序標識號,並申請一個空白的PCB(PCB是有限的)。若PCB申請失敗則建立失敗。
- 為程序分配資源,為新程序的程式和資料、以及使用者棧分配必要的記憶體空間(在PCB 中體現)。注意:這裡如果資源不足(比如記憶體空間),並不是建立失敗,而是處於”等待狀態“,或稱為“阻塞狀態”,等待的是記憶體這個資源。
- 初始化PCB,主要包括初始化標誌資訊、初始化處理機狀態資訊和初始化處理機控制資訊,以及設定程序的優先順序等。
- 如果程序就緒佇列能夠接納新程序,就將新程序插入到就緒佇列,等待被排程執行。
程序的終止
引起程序終止的事件主要有:正常結束,表示程序的任務已經完成和準備退出執行。異常結束是指程序在執行時,發生了某種異常事件,使程式無法繼續執行,如儲存區越界、保護錯、非法指令、特權指令錯、I/O故障等。外界干預是指程序應外界的請求而終止執行,如操作員或作業系統干預、父程序請求和父程序終止。作業系統終止程序的過程如下(撤銷原語):
- 根據被終止程序的識別符號,檢索PCB,從中讀出該程序的狀態。
- 若被終止程序處於執行狀態,立即終止該程序的執行,將處理機資源分配給其他程序。
- 若該程序還有子程序,則應將其所有子程序終止。
- 將該程序所擁有的全部資源,或歸還給其父程序或歸還給作業系統。
- 將該PCB從所在佇列(連結串列)中刪除。
程序的阻塞和喚醒
正在執行的程序,由於期待的某些事件未發生,如請求系統資源失敗、等待某種操作的完成、新資料尚未到達或無新工作做等,則由系統自動執行阻塞原語(Block),使自己由執行狀態變為阻塞狀態。可見,程序的阻塞是程序自身的一種主動行為,也因此只有處於執行態的程序(獲得CPU),才可能將其轉為阻塞狀態。阻塞原語的執行過程是:
- 找到將要被阻塞程序的標識號對應的PCB。
- 若該程序為執行狀態,則保護其現場,將其狀態轉為阻塞狀態,停止執行。
- 把該PCB插入到相應事件的等待佇列中去。
當被阻塞程序所期待的事件出現時,如它所啟動的I/O操作已完成或其所期待的資料已到達,則由有關程序(比如,提供資料的程序)呼叫喚醒原語(Wakeup),將等待該事件的程序喚醒。
喚醒原語的執行過程是:
- 在該事件的等待佇列中找到相應程序的PCB。
- 將其從等待佇列中移出,並置其狀態為就緒狀態。
- 把該PCB插入就緒佇列中,等待排程程式排程。
需要注意的是,Block原語和Wakeup原語是一對作用剛好相反的原語,必須成對使用。 Block原語是由被阻塞程序自我呼叫實現的,而Wakeup原語則是由一個與被喚醒程序相合作或被其他相關的程序呼叫實現的。
程序切換
對於通常的程序,其建立、撤銷以及要求由系統裝置完成的I/O操作都是利用系統呼叫而進入核心,再由核心中相應處理程式予以完成的。程序切換同樣是在核心的支援下實現的,因此可以說,任何程序都是在作業系統核心的支援下執行的,是與核心緊密相關的。程序切換是指處理機從一個程序的執行轉到另一個程序上執行,這個過程中,程序的執行環境產生了實質性的變化。
程序切換的過程如下:
- 儲存處理機上下文,包括程式計數器和其他暫存器。
- 更新PCB資訊。
- 把程序的PCB移入相應的佇列,如就緒、在某事件阻塞等佇列。
- 選擇另一個程序執行,並更新其PCB。
- 更新記憶體管理的資料結構。
- 恢復處理機上下文。
注意,程序切換與處理機模式切換是不同的,模式切換時,處理機邏輯上可能還在同一程序中執行。如果程序因中斷或異常進入到核心態執行,執行完後又回到使用者態剛被中斷的程式執行,則作業系統只需恢復程序進入核心時所儲存的CPU現場,無需改變當前程序的環境資訊。但若要切換程序,當前執行程序改變了,則當前程序的環境資訊也需要改變。
2.4 程序的組織:控制塊、程式段和資料段
程序是作業系統的資源分配和獨立執行的基本單位。它一般由以下三個部分組成。程序控制塊
程序建立時,作業系統就新建一個PCB結構,它之後就常駐記憶體,任一時刻可以存取, 在程序結束時刪除。PCB是程序實體的一部分,是程序存在的唯一標誌。當建立一個程序時,系統為該程序建立一個PCB;當程序執行時,系統通過其PCB 瞭解程序的現行狀態資訊,以便對其進行控制和管理;當程序結束時,系統收回其PCB,該程序隨之消亡。作業系統通過PCB表來管理和控制程序。
程序描述資訊 | 程序控制和管理資訊 | 資源分配清單 | 處理機相關資訊 |
---|---|---|---|
程序識別符號(PID) | 程序當前狀態 | 程式碼段指標 | 通用暫存器值 |
使用者識別符號(UID) | 程序優先順序 | 資料段指標 | 地址暫存器值 |
程式碼執行入口地址 | 堆疊段指標 | 控制暫存器值 | |
程式的外存地址 | 檔案描述符 | 標誌暫存器值 | |
進入記憶體時間 | 鍵盤 | 狀態字 | |
處理機佔用時間 | 滑鼠 | ||
訊號量使用 |
表2-1是一個PCB的例項,PCB主要包括程序描述資訊、程序控制和管理資訊、資源分配清單和處理機相關資訊等。各部分的主要說明如下:
1) 程序描述資訊
程序識別符號:標誌各個程序,每個程序都有一個並且是唯一的標識號。
使用者識別符號:程序歸屬的使用者,使用者識別符號主要為共享和保護服務。
2) 程序控制和管理資訊
程序當前狀態:描述程序的狀態資訊,作為處理機分配排程的依據。
程序優先順序:描述程序搶佔處理機的優先順序,優先順序高的程序可以優先獲得處理機。
3) 資源分配清單,用於說明有關記憶體地址空間或虛擬地址空間的狀況;所開啟檔案的列表和所使用的輸入/輸出裝置資訊。
4) 處理機相關資訊,主要指處理機中各暫存器值,當程序被切換時,處理機狀態資訊都必須儲存在相應的PCB中,以便在該程序重新執行時,能再從斷點繼續執行。
在一個系統中,通常存在著許多程序,有的處於就緒狀態,有的處於阻塞狀態,而且阻塞的原因各不相同。為了方便程序的排程和管理,需要將各程序的PCB用適當的方法組織起來。目前,常用的組織方式有連結方式和索引方式兩種。連結方式將同一狀態的PCB連結成一個佇列,不同狀態對應不同的佇列,也可以把處於阻塞狀態的程序的PCB,根據其阻塞原因的不同,排成多個阻塞佇列。索引方式是將同一狀態的程序組織在一個索引表中,索引表的表項指向相應的PCB,不同狀態對應不同的索引表,如就緒索引表和阻塞索引表等。
程式段
程式段就是能被程序排程程式排程到CPU執行的程式程式碼段。注意,程式可以被多個程序共享,就是說多個程序可以運行同一個程式。資料段
一個程序的資料段,可以是程序對應的程式加工處理的原始資料,也可以是程式執行時產生的中間或最終結果。2.5 程序的通訊:共享儲存、訊息傳遞和管道通訊
程序通訊是指程序之間的資訊交換。PV操作(通過、釋放)是低階通訊方式,髙級通訊方式是指以較高的效率傳輸大量資料的通訊方式。高階通訊方法主要有以下三個類。共享儲存
在通訊的程序之間存在一塊可直接訪問的共享空間,通過對這片共享空間進行寫/讀操作實現程序之間的資訊交換。在對共享空間進行寫/讀操作時,需要使用同步互斥工具(如 P操作、V操作),對共享空間的寫/讀進行控制。共享儲存又分為兩種:低階方式的共享是基於資料結構的共享;高階方式則是基於儲存區的共享。作業系統只負責為通訊程序提供可共享使用的儲存空間和同步互斥工具,而資料交換則由使用者自己安排讀/寫指令完成。需要注意的是,使用者程序空間一般都是獨立的,要想讓兩個使用者程序共享空間必須通過特殊的系統呼叫實現,而程序內的執行緒是自然共享程序空間的。
訊息傳遞
在訊息傳遞系統中,程序間的資料交換是以格式化的訊息(Message)為單位的。若通訊的程序之間不存在可直接訪問的共享空間,則必須利用作業系統提供的訊息傳遞方法實現程序通訊。程序通過系統提供的傳送訊息和接收訊息兩個原語進行資料交換。1) 直接通訊方式:傳送程序直接把訊息傳送給接收程序,並將它掛在接收程序的訊息緩衝佇列上,接收程序從訊息緩衝佇列中取得訊息。
2) 間接通訊方式:傳送程序把訊息傳送到某個中間實體中,接收程序從中間實體中取得訊息。這種中間實體一般稱為信箱,這種通訊方式又稱為信箱通訊方式。該通訊方式廣泛應用於計算機網路中,相應的通訊系統稱為電子郵件系統。
管道通訊
管道通訊是訊息傳遞的一種特殊方式。所謂“管道”,是指用於連線一個讀程序和一個寫程序以實現它們之間通訊的一個共享檔案,又名pipe檔案。向管道(共享檔案)提供輸入的傳送程序(即寫程序),以字元流形式將大量的資料送入(寫)管道;而接收管道輸出的接收程序(即讀程序),則從管道中接收(讀)資料。為了協調雙方的通訊,管道機制必須提供以下三方面的協調能力:互斥、同步和確定對方的存在。2.6 執行緒的概念和多執行緒模型
執行緒的基本概念
引入程序的目的,是為了使多道程式併發執行,以提高資源利用率和系統吞吐量; 而引入執行緒,則是為了減小程式在併發執行時所付出的時空開銷,提高作業系統的併發效能。執行緒最直接的理解就是“輕量級程序”,它是一個基本的CPU執行單元,也是程式執行流的最小單元,由執行緒ID、程式計數器、暫存器集合和堆疊組成。執行緒是程序中的一個實體,是被系統獨立排程和分派的基本單位,執行緒自己不擁有系統資源,只擁有一點在執行中必不可少的資源,但它可與同屬一個程序的其他執行緒共享程序所擁有的全部資源。一個執行緒可以建立和撤銷另一個執行緒,同一程序中的多個執行緒之間可以併發執行。由於執行緒之間的相互制約,致使執行緒在執行中呈現出間斷性。執行緒也有就緒、阻塞和執行三種基本狀態。
引入執行緒後,程序的內涵發生了改變,程序只作為除CPU以外系統資源的分配單元,執行緒則作為處理機的分配單元。
執行緒與程序的比較
1) 排程。在傳統的作業系統中,擁有資源和獨立排程的基本單位都是程序。在引入執行緒的作業系統中,執行緒是獨立排程的基本單位,程序是資源擁有的基本單位。在同一程序中,執行緒的切換不會引起程序切換。在不同程序中進行執行緒切換,如從一個程序內的執行緒切換到另一個程序中的執行緒時,會引起程序切換。2) 擁有資源。不論是傳統作業系統還是設有執行緒的作業系統,程序都是擁有資源的基本單位,而執行緒不擁有系統資源(也有一點必不可少的資源),但執行緒可以訪問其隸屬程序的系統資源。
3) 併發性。在引入執行緒的作業系統中,不僅程序之間可以併發執行,而且多個執行緒之間也可以併發執行,從而使作業系統具有更好的併發性,提高了系統的吞吐量。
4) 系統開銷。由於建立或撤銷程序時,系統都要為之分配或回收資源,如記憶體空間、 I/O裝置等,因此作業系統所付出的開銷遠大於建立或撤銷執行緒時的開銷。類似地,在進行程序切換時,涉及當前執行程序CPU環境的儲存及新排程到程序CPU環境的設定,而執行緒切換時只需儲存和設定少量暫存器內容,開銷很小。此外,由於同一程序內的多個執行緒共享程序的地址空間,因此,這些執行緒之間的同步與通訊非常容易實現,甚至無需作業系統的干預。
5) 地址空間和其他資源(如開啟的檔案):程序的地址空間之間互相獨立,同一程序的各執行緒間共享程序的資源,某程序內的執行緒對於其他程序不可見。
6) 通訊方面:程序間通訊(IPC)需要程序同步和互斥手段的輔助,以保證資料的一致性,而執行緒間可以直接讀/寫程序資料段(如全域性變數)來進行通訊。
執行緒的屬性
在多執行緒作業系統中,把執行緒作為獨立執行(或排程)的基本單位,此時的程序,已不再是一個基本的可執行實體。但程序仍具有與執行相關的狀態,所謂程序處於“執行”狀態,實際上是指該程序中某執行緒正在執行。執行緒的主要屬性如下:- 執行緒是一個輕型實體,它不擁有系統資源,但每個執行緒都應有一個唯一的識別符號和一個執行緒控制塊,執行緒控制塊記錄了執行緒執行的暫存器和棧等現場狀態。
- 不同的執行緒可以執行相同的程式,即同一個服務程式被不同的使用者呼叫時,作業系統為它們建立成不同的執行緒。
- 同一程序中的各個執行緒共享該程序所擁有的資源。
- 執行緒是處理機的獨立排程單位,多個執行緒是可以併發執行的。在單CPU的計算機系統中,各執行緒可交替地佔用CPU;在多CPU的計算機系統中,各執行緒可同時佔用不同的CPU,若各個CPU同時為一個程序內的各執行緒服務則可縮短程序的處理時間。
- —個執行緒被建立後便開始了它的生命週期,直至終止,執行緒在生命週期內會經歷阻塞態、就緒態和執行態等各種狀態變化。
執行緒的實現方式
執行緒的實現可以分為兩類:使用者級執行緒(User-Level Thread, ULT)和核心級執行緒(Kemel-Level Thread, KLT)。核心級執行緒又稱為核心支援的執行緒。在使用者級執行緒中,有關執行緒管理的所有工作都由應用程式完成,核心意識不到執行緒的存在。應用程式可以通過使用執行緒庫設計成多執行緒程式。通常,應用程式從單執行緒起始,在該執行緒中開始執行,在其執行的任何時刻,可以通過呼叫執行緒庫中的派生例程建立一個在相同程序中執行的新執行緒。圖2-2(a)說明了使用者級執行緒的實現方式。
在核心級執行緒中,執行緒管理的所有工作由核心完成,應用程式沒有進行執行緒管理的程式碼,只有一個到核心級執行緒的程式設計介面。核心為程序及其內部的每個執行緒維護上下文資訊,排程也是在核心基於執行緒架構的基礎上完成。圖2-2(b)說明了核心級執行緒的實現方式。
在一些系統中,使用組合方式的多執行緒實現。執行緒建立完全在使用者空間中完成,執行緒的排程和同步也在應用程式中進行。一個應用程式中的多個使用者級執行緒被對映到一些(小於或等於使用者級執行緒的數目)核心級執行緒上。圖2-2(c)說明了使用者級與核心級的組合實現方式。
圖2-2使用者級和核心級執行緒
多執行緒模型
有些系統同時支援使用者執行緒和核心執行緒由此產生了不同的多執行緒模型,即實現使用者級執行緒和核心級執行緒的連線方式。1) 多對一模型
將多個使用者級執行緒對映到一個核心級執行緒,執行緒管理在使用者空間完成。此模式中,使用者級執行緒對作業系統不可見(即透明)。
優點:執行緒管理是在使用者空間進行的,因而效率比較高。
缺點:當一個執行緒在使用核心服務時被阻塞,那麼整個程序都會被阻塞;多個執行緒不能並行地執行在多處理機上。
2) 一對一模型
將每個使用者級執行緒對映到一個核心級執行緒。優點:當一個執行緒被阻塞後,允許另一個執行緒繼續執行,所以併發能力較強。
缺點:每建立一個使用者級執行緒都需要建立一個核心級執行緒與其對應,這樣建立執行緒的開銷比較大,會影響到應用程式的效能。
3) 多對多模型
將 n 個使用者級執行緒對映到 m 個核心級執行緒上,要求 m <= n。特點:在多對一模型和一對一模型中取了個折中,克服了多對一模型的併發度不高的缺點,又克服了一對一模型的一個使用者程序佔用太多核心級執行緒,開銷太大的缺點。又擁有多對一模型和一對一模型各自的優點,可謂集兩者之所長。
相關推薦
《計算機作業系統》總結二(程序與執行緒)
作業系統(計算機)程序和執行緒管理 主要內容: 程序與執行緒 程序概念;程序的狀態與轉換程序控制;程序組織程序通訊;執行緒概念與多執行緒模型處理器排程 排程的基本概念;排程時機、切換與過程排程的基本準
作業系統面試筆試題總結二(程序與執行緒)
程式在併發系統內執行的特點:程式執行的間斷性,相互通訊的可能性,資源分配的動態性 在下面關於併發性的敘述中正確的是:併發性是指若干事件在同一時間間隔發生 一般來說,為了實現多道程式設計,計算機最需要更大的記憶體 Unix作業系統的程序控制塊中常駐記憶體的是
併發通訊(程序與執行緒)
程序與執行緒在通訊中都會遇到各自的問題,這是因他們各自的而產生的。每個程序有自己的地址空間。兩個程序中的地址即使值相同,實際指向的位置也不同,故程序間無法直接就能通訊。雖然同一程序的執行緒共享全域性變數和記憶體,使得執行緒之間共享資料很容易也很方便,但會帶來某些共享資料的互斥
python 學習第二十二天(程序和執行緒)
程序 程序就是一個程式在一個數據集上的一次動態執行過程。 程序一般由程式、資料集、程序控制塊三部分組成。 我們編寫的程式用來描述程序要完成哪些功能以及如何完成; 資料集則是程式在執行過程中所需要使用的資源; 程序控制塊用來記錄程序的外部特徵,描述程序的執行變化過程,系統可以利
Java多執行緒的實現(程序與執行緒的概念、Java繼承Thread類實現多執行緒、Java實現Runnable介面實現多執行緒、Thread與Runnable的區別、實現Callable介面實現多執行緒)
1 程序與執行緒 1.1 程序與執行緒的概念 什麼是程序? 程序: 作業系統中一個程式的執行週期。(比如我們想要在電腦上登入QQ,從雙擊qq按鈕---->關閉qq這個過程就是一個程序) 多程序: 同一時刻跑多個程式。 在DOS(磁碟作業系統時
作業系統知識回顧(2)--程序與執行緒
在作業系統中,程序和執行緒是極為重要的概念,這篇文章主要總結了程序、執行緒的基本概念及程序的排程。 1. 程序 1.1 什麼是程序 程序(process)是具有一定獨立功能的程式關於某個資料集合上的一次執行活動。在傳統 OS 中,程序是系統進行資源分配和排程的基本單位。程序是一個正在執行程式的
程序與執行緒(二)——程序的管理、建立與銷燬
接上回: 我們介紹了程序的由來,程序的概念,程序的組成部分和它在執行過程中的狀態。我們說程序最重要的部分是程序控制塊PCB,作業系統通過PCB來管理各個程序有條不紊的在我們的機器中執行的。那麼作業系統是怎麼樣管理這麼多程序的呢?程序是怎麼樣建立、又是怎麼樣銷燬的呢?
程式、程序與執行緒(二)
在前一章部落格(《程式、程序與執行緒(一)》)中,我們已經瞭解了程式與程序的概念與區別,今天我們再來講講程序與執行緒。程序用得好好的為何還要出現執行緒呢?首先我們來看看程序的一些侷限性。 一、程序的侷限性 1、建立子程序時每次都要把父程序的資料都copy一份,造成資源空間
程序與執行緒總結(比較全面)
1.程序和執行緒 1.1 概述: 程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位. 執行緒是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不
現代作業系統之程序與執行緒(上)
程序 基本概念 一個程序就是一個正在執行程式的例項,包括程式計數器、暫存器和變數當前的值。從概念上說,每個程序擁有它自己的虛擬cpu。實際上,每個瞬間CPU只能執行一個程序。 在對程序程式設計時不能對時序做任何確定對假設。 建立程序 常見情況: 系統初始化執行政治執
作業系統與系統程式設計(二)程序與執行緒
(二)程序與執行緒 1.關於程序: ——程序在使用者方面,包含了程式的執行狀態和這個程式所用的抽象記憶體及儲存資料。 ——程序在作業系統方面:包括: (1)一個程序的執行狀態(通過在程序中儲存”狀態暫存器、指令計數器、棧指標、通用暫存器“等代表程序目
《現代作業系統(中文第三版)》課後習題——第二章 程序與執行緒
第二章 程序和執行緒 1、圖2-2中給出了三個程序狀態,在理論上,三個狀態可以有六種轉換,每個狀態兩個。但是,圖中只給出了四種轉換。有沒有可能發生其他兩種轉換中的一個或兩個? 答:從阻塞到執行的轉換是可以想象的。假設某個程序在I/O上阻塞,而且I/O結束,如果此時CPU空
程序與執行緒(直接copy)
轉載自:https://www.cnblogs.com/zhehan54/p/6130030.html 在理解程序和執行緒概念之前首選要對併發有一定的感性認識,如果伺服器同一時間內只能服務於一個客戶端,其他客戶端都再那裡傻等的話,可見其效能的低下估計會被客戶罵出翔來,因此併發程式設計應運而生,併
程序與執行緒(三)——執行緒的概念與實現
一 什麼是執行緒? 程序中的一條執行流程。 有了執行緒,程序發生了一系列的變化。首先是(1)資源管理,包括地址空間(程式碼段,資料段):程序就是由來管理資源的:地址空間,開啟的檔案,訪問的網路。(2)執行緒把程序的另一部分功能給拆出來了。 程序的執行功能,程序的
程序與執行緒(一)——程序
序言: 我們知道多執行緒是現代作業系統中一個很重要的組成部分。它經常在面試過程中或者在實際運用過程中都會碰到的一個比較難的一個問題,所以這篇文章所屬的一個系列,將淺顯的記錄下博主的多執行緒學習的一個過程。 首先呢,說起執行緒的起源,我們不得不提就是程序的概念。然而一開始也並不是直接就有
程序與執行緒(三)——程序/執行緒間通訊
在使用者空間中建立執行緒 用庫函式實現執行緒(《現代作業系統》 P61) #include<pthread.h> #include<stdio.h> #include<stdlib.h> #define NUMBER_OF_THREAD
程序與執行緒(2)- python實現多程序
python 實現多程序 參考連結: https://morvanzhou.github.io/tutorials/python-basic/multiprocessing/ python中實現多程序的模組:multiprocessing 注意:在windows系統下
LINUX作業系統知識:程序與執行緒詳解
當一個程式開始執行後,在開始執行到執行完畢退出這段時間內,它在記憶體中的部分就叫稱作一個程序。 Linux 是一個多工的作業系統,也就是說,在同一時間內,可以有多個程序同時執行。我們大家常用的單CPU計算機實際上在一個時間片段內只能執行一條指令。 那麼Linux是如何實現多程序的同時執行的呢?原來Linu
Linux程序與執行緒的區別 詳細總結
首先,簡要了解一下程序和執行緒。對於作業系統而言,程序是核心之核心,整個現代作業系統的根本,就是以程序為單位在執行任務。系統的管理架構也是基於程序層面的。在按下電源鍵之後,計算機就開始了複雜的啟動過程,此處有一個經典問題:當按下電源鍵之後,計算機如何把自己由靜止啟動起來的?本
作業系統——程序與執行緒的區別以及如何選擇
1.定義 在對執行緒和程序進行比較之前,我們先看一下它們的定義。 程序:是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位,是資源分配的最小單位。 執行緒:是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的