程序與執行緒

2021-03-31 08:56:28 字數 1799 閱讀 4505

【程序】是擁有資源的實體,包括:

1。乙個程序有乙個虛擬位址空間,不同程序位於不同的

虛擬位址空間中。程序之間若要通訊,必須通過作業系統

的功能呼叫(ipc);

2。程序擁有其他資源,例如開啟的檔案和i/o裝置。程序結束時,

作業系統會自動釋放該程序擁有的所有資源。例如,如果

open乙個檔案而不close它,程序結束後會自動關閉。

【執行緒】是一組特定的指令序列的實體。它可以被作業系統安排

去執行(排程)。在單cpu系統上,很顯然多個執行緒不可能

真正同時執行,只能按照某種順序依次輪流執行。這個順序是

由作業系統的排程演算法決定的。

執行緒在其存在期間有狀態,例如:

執行狀態:正在執行;

ready狀態:等待作業系統安排它去執行;

阻塞狀態:等待特定事件發生,例如i/o操作完成等;

睡眠狀態:等待乙個定時器超時。

執行緒只有在執行狀態才會消耗cpu時間。在其它狀態時,僅

需要排程程式的管理。

執行緒擁有自己的cpu暫存器和堆疊。在它占用cpu執行時,

如果os的排程程式決定『趕走』它,系統會儲存cpu暫存器到

乙個和這個執行緒有關的資料結構中;如果os決定讓某執行緒

再次執行,則os從該資料結構中恢復cpu暫存器。這樣達到

切換的目的。

乙個程序可以包含多個執行緒,這些執行緒共享程序的資源。

【例】有些作業系統,例如早期的unix,乙個程序中只能

有乙個執行緒,或者說,它沒有執行緒的概念:程序就是執行緒。

這種環境下,使用者可以把自己的程式和某種執行緒庫鏈結,

以實現多執行緒。但os對使用者執行緒一無所知,它還是按照

程序進行排程。

有些作業系統,例如windows nt,os本身可以實現多執行緒。

【任務】有些作業系統如vxworks,沒有程序和執行緒的概念,

只有任務。任務之於os,大致相當於執行緒之於程序。所有

任務,包括os,共享系統中唯一的位址空間。所有任務共享

系統中所有資源。乙個任務開啟乙個裝置後,別的任務可以

向這個裝置上讀或寫。

然而還是有些不同的。例如,程序中的執行緒,它們所開啟的

檔案描述符會被記錄在該程序的程序控制塊(pcb)中,這樣,

當程序終止時,os會去關閉這些檔案(如果還沒關閉的話)。

然而在vxworks中,別指望在os關機前給你關閉檔案,所以

可能出現檔案資料丟失(如果任務不關閉該檔案)。

另外,標準輸入,標準輸出和標準錯誤這3個裝置是任務特定的,

即每個任務擁有自己的3個標準裝置,不和其它任務共享。

還有,可以用vxvmi實現基於任務的記憶體保護,例如可以把某段

記憶體標識為任務a可讀寫,任務b唯讀,而任務c完全不能訪問。

(又有點類似於程序)

【域】

unix沒有執行緒,或者說程序和執行緒是1:1的關係。windows nt

下程序和執行緒是1:m(一對多)的關係。還有一種是m:m(多對多)

的關係。有些作業系統例如trix和vxworks ae,有域(domain)的概念。

乙個域有乙個位址空間,還可以有埠(port;估計是一種共享記憶體),

可以通過埠進行通訊。乙個域可以包含多個執行緒/任務,但是任務可以

改變自己所在的域。

【小結】

不同作業系統中的程序、執行緒/任務的特點是不盡相同的。通過對比

或模擬可以幫助我們掌握。

僅供參考。

vxfree 

程序與執行緒

程序 process 管理單元,管理分配應用程式的資料,的記憶體空間.執行緒 thread 執行單元,執行緒負責執行乙個預先編排好的 段,執行 棧是基於執行緒的.乙個應用程式啟動的時候,程序自動建立,並且會預設建立主線程,主線程負責執行main 方法.thread t new thread new ...

程序與執行緒

程序包括 1 私有的虛位址空間 2 可執行程式 與資料 3 開啟系統資源列表控制代碼 4 安全訪問標誌 5 程序id 6 至少有乙個執行執行緒 執行緒包括 1 一組cpu暫存器狀態 2 兩個堆疊 系統態與使用者態 3 tls 執行緒區域性儲存區 4 執行緒id 5 安全特性 因此程序是不活潑的,它從...

程序與執行緒

1.計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2.假定工廠的電力有限,一次只能供給乙個車間使用。也就是說,乙個車間開工的時候,其他車間都必須停工。背後的含義就是,單個cpu一次只能執行乙個任務。3.程序就好比工廠的車間,它代表cpu所能處理的單個任務。任一時刻,cpu...