執行緒與程序的聯絡與區別

2022-08-10 20:36:17 字數 2750 閱讀 2563

程序是乙個動態概念,表示程式在乙個資料集合上的一次動態執行過程。程序包含正在執行的乙個程式的所有狀態資訊:

程序可以動態建立和結束,多個程序可以併發執行,不同程序間互不影響(作業系統實現)。同時程序間又相互制約,它們因訪問共享資料/資源程序間同步而產生制約。

程式是靜態的,它是檔案。程序是動態的,是執行中的程式,程序=程式+執行狀態。

程序控制塊(pcb, process control block)是作業系統用來管理程序執行的資料結構。每個程序都在作業系統中有乙個對應的pcb,因此pcb是程序存在的唯一標誌。

當程序建立時,生成pcb。程序終止時,作業系統會**它的pcb。pcb的主要內容如下:

排程和狀態資訊:排程程序和處理機使用情況

儲存管理資訊:指向程序映像儲存空間資料結構

程序所用資源:程序使用的系統資源,如開啟檔案等

作業系統中的pcb可以通過鍊錶索引表來組織。

鍊錶結構中:

索引表結構中:

按照程序的生命週期,可以劃分不同的狀態(因作業系統而異),常用的狀態有:

null→建立:乙個新程序被產生出來執行乙個程式

建立→就緒:當程序被建立完成並初始化後,一切就緒準備執行時,變為就緒狀態

就緒→執行:處於就緒狀態的程序被程序排程程式選中後,就分配到處理機上來執行

執行→結束:當程序表示它已經完成或者因出錯,當前執行程序會由作業系統作結束處理

執行→等待:當程序請求某資源且必須等待時

等待→就緒:當程序要等待某事件到來時,它從阻塞狀態變到就緒狀態

為了更好利用記憶體資源、減少程序占用記憶體,處在掛起狀態的程序映像儲存在磁碟上。此時程序的狀態轉換圖更新如下:

等待掛起狀態(blocked-suspend):外存中處於等待狀態的程序,等待某事件的出現

就緒掛起狀態(ready-suspend):程序在外存,但只要進入記憶體,即可執行

掛起(suspend):把乙個程序從記憶體轉到外存

就緒->就緒掛起:當有高優先順序等待(系統認為會很快就緒的)程序和低優先順序就緒程序

執行->就緒掛起:對搶先式分時系統,當有高優先順序等待掛起程序因事件出現而進入就緒掛起

在外存時的狀態轉換

啟用(activate):把乙個程序從外存轉到記憶體

上述的狀態轉換比較多,在理解時需要明白:掛起是為了解決記憶體資源,當程序狀態->掛起時,應該從節約記憶體的角度思考

讀取音訊資料

對資料進行解壓縮

void main(void) 

read()

decompress()

play()

執行緒是程序的一部分,描述指令流執行狀態,它是程序中指令執行流的最小單元,是cpu排程的基本單位

執行緒是處理機排程維度的概念:描述在程序資源環境中的指令流執行狀態。

所以執行緒的粒度比程序要細一些。

執行緒 = 程序 - 共享資源

程序是程式整體的資源分配單位,執行緒是cpu排程單位

程序擁有乙個完整的資源,執行緒只獨享指令流執行的必要資源,如暫存器和棧

執行緒狀態少,只有就緒、等待和執行三種基本狀態及狀態間的轉換關係

執行緒能減少併發執行的時間和空間開銷

執行緒的實現方式有:

使用者執行緒:執行在使用者空間,由使用者自己實現,如posix pthreadsmach c-threadssolaris threads

核心執行緒:執行在核心空間,在作業系統核心中實現,如windowssolarislinux

輕量級程序:在核心中實現,支援使用者執行緒,如solaris(lightweight process)

使用者執行緒由一組使用者級的執行緒庫函式來完成執行緒的管理,包括執行緒的建立、終止、同步和排程等。

使用者執行緒的特徵:

使用者執行緒不依賴於作業系統的核心,核心不了解使用者執行緒的存在

在使用者空間實現的執行緒機制,每個程序有私有的執行緒控制塊(tcb)列表,由執行緒庫函式維護

同一程序內的使用者執行緒切換速度快

允許每個程序擁有自已的執行緒排程演算法

使用者執行緒的不足:

執行緒發起系統呼叫而阻塞時,則整個程序進入等待

不支援基於執行緒的處理機搶占,除非當前執行執行緒主動放棄,它所在程序的其他執行緒無法搶占cpu

只能按程序分配cpu時間,多個執行緒程序中,每個執行緒的時間片較少

由核心通過系統呼叫實現的執行緒機制,由核心完成執行緒的建立、終止和管理。

核心執行緒的特徵:

由核心維護pcb和tcb

執行緒執行系統呼叫而被阻塞不影響其他執行緒

執行緒的建立、終止和切換相對較大,通過系統呼叫/核心函式,在核心實現

以執行緒為單位進行cpu時間分配,多執行緒的程序可獲得更多cpu時間

一對一:乙個核心執行緒對應乙個使用者執行緒

一對多:乙個核心執行緒對應多個使用者執行緒

多對多:多個核心執行緒對應多個使用者執行緒

本文介紹了作業系統中的核心概念程序執行緒。相比於「靜態」的程式**,它們是負責程式執行的「動態」概念。程序的粒度大,包含程式執行所需的完整資源;執行緒是cpu排程的單位,只包括指令執行的必要資源。

程序與執行緒的區別與聯絡

程序 資源分配的基本單位,也是排程執行的基本單位 執行緒 程序中執行執行的最小單位,執行緒是作業系統可識別的最小執行和排程單位 兩者的關係 1.乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒 2.程序是資源分配的基本單位。同一程序中的所有執行緒共享該程序的資源包括 段 和常量 資料段 全域性...

程序與執行緒的區別與聯絡

程序,是併發執行的程式在執行過程中分配和管理資源的基本單位,是乙個動態概念,竟爭計算機系統資源的基本單位。每乙個程序都有乙個自己的位址空間,即程序空間或 虛空間 程序空間的大小 只與處理機的位數有關,乙個 16 位長處理機的程序空間大小為 216 而 32 位處理機的程序空間大小為 232 程序至少...

程序與執行緒的區別聯絡

自 對於執行緒,程序的概念一直都是比較模糊,最近整理了一下。總結起來就是,執行緒是程序的一部分,程序是程式的一部分。這個說法不準確,但是可以指出期間的差別 程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的乙個獨立單位.執行緒是程序的乙個實體,是cpu排程和...