作業系統中的串程序和執行緒

2021-10-23 12:00:14 字數 3369 閱讀 6733

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

•**•資料•狀態暫存器•通用暫存器•系統資源(檔案、記憶體...)

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

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

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

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

1.排程和狀態資訊:排程程序和處理機使用情況2.程序間通訊資訊:程序間通訊相關的各種標識3.儲存管理資訊:指向程序映像儲存空間資料結構4.程序所用資源:程序使用的系統資源,如開啟檔案等5.有關資料結構連線資訊:與pcb相關的程序佇列

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

鍊錶結構中:

•同一狀態的程序其pcb組成同一鍊錶,多個狀態對應多個不同的鍊錶•各狀態的程序形成不同的鍊錶:就緒鍊錶阻塞鍊錶...

索引表結構中:

•同一狀態的程序歸入乙個索引表(由索引指向pcb),多個狀態對應多個不同的索引表•各狀態的進行形成不同的索引表:就緒索引表阻塞索引表...

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

•建立:系統初始化、fork系統呼叫都會建立程序•就緒:程序獲得除處理機外的所有資源•執行:核心選擇就緒的程序,開始執行•等待:程序等待系統服務、等待io結束、等待資料•搶占:高優先順序程序先執行、程序當前時間片用完•喚醒:被阻塞程序需要的資源可被滿足、被阻塞程序等待的事件到達•結束:

•正常退出(自願) •錯誤退出(自願) •致命錯誤(強制性) •被其他程序所殺(強制性)

1.null→建立:乙個新程序被產生出來執行乙個程式2.建立→就緒:當程序被建立完成並初始化後,一切就緒準備執行時,變為就緒狀態3.就緒→執行:處於就緒狀態的程序被程序排程程式選中後,就分配到處理機上來執行4.執行→結束:當程序表示它已經完成或者因出錯,當前執行程序會由作業系統作結束處理5.執行→就緒:處於執行狀態的程序在其執行過程中,由於分配給它的處理機時間片用完而讓出處理機6.執行→等待:當程序請求某資源且必須等待時7.等待→就緒:當程序要等待某事件到來時,它從阻塞狀態變到就緒狀態

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

1.等待掛起狀態(blocked-suspend):外存中處於等待狀態的程序,等待某事件的出現2.就緒掛起狀態(ready-suspend):程序在外存,但只要進入記憶體,即可執行3.掛起(suspend):把乙個程序從記憶體轉到外存

•等待->等待掛起:沒有程序處於就緒狀態或就緒程序需要更多記憶體•就緒->就緒掛起:當有高優先順序等待(系統認為會很快就緒的)程序和低優先順序就緒程序•執行->就緒掛起:對搶先式分時系統,當有高優先順序等待掛起程序因事件出現而進入就緒掛起

4.在外存時的狀態轉換

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

•就緒掛起->就緒:沒有就緒程序或掛起就緒程序優先順序高於就緒程序•等待掛起->等待:當乙個程序釋放足夠記憶體,並有高優先順序等待掛起程序

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

void main(void) 

read()

decompress()

play()

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

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

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

執行緒 = 程序 - 共享資源

•乙個程序中可以同時存在多個執行緒•各個執行緒之間可以併發地執行•各個執行緒之間可以共享位址空間和檔案等資源•乙個執行緒崩潰,會導致其所屬程序的所有執行緒崩潰

1.程序是程式整體的資源分配單位,執行緒是cpu排程單位2.程序擁有乙個完整的資源,執行緒只獨享指令流執行的必要資源,如暫存器和棧3.執行緒狀態少,只有就緒、等待和執行三種基本狀態及狀態間的轉換關係4.執行緒能減少併發執行的時間和空間開銷

•執行緒的建立和終止時間比程序短•執行緒更輕量,同一程序內線程間切換時間比程序短•由於同一程序的各執行緒間共享記憶體和檔案資源,可不通過核心進行直接通訊

執行緒的實現方式有:

1.使用者執行緒:執行在使用者空間,由使用者自己實現,如posix pthreadsmach c-threadssolaris threads2.核心執行緒:執行在核心空間,在作業系統核心中實現,如windowssolarislinux3.輕量級程序:在核心中實現,支援使用者執行緒,如solaris(lightweight process)

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

使用者執行緒的特徵:

1.使用者執行緒不依賴於作業系統的核心,核心不了解使用者執行緒的存在2.在使用者空間實現的執行緒機制,每個程序有私有的執行緒控制塊(tcb)列表,由執行緒庫函式維護3.同一程序內的使用者執行緒切換速度快4.允許每個程序擁有自已的執行緒排程演算法

使用者執行緒的不足:

1.執行緒發起系統呼叫而阻塞時,則整個程序進入等待2.不支援基於執行緒的處理機搶占,除非當前執行執行緒主動放棄,它所在程序的其他執行緒無法搶占cpu3.只能按程序分配cpu時間,多個執行緒程序中,每個執行緒的時間片較少

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

核心執行緒的特徵:

1.由核心維護pcb和tcb2.執行緒執行系統呼叫而被阻塞不影響其他執行緒3.執行緒的建立、終止和切換相對較大,通過系統呼叫/核心函式,在核心實現4.以執行緒為單位進行cpu時間分配,多執行緒的程序可獲得更多cpu時間

1.一對一:乙個核心執行緒對應乙個使用者執行緒2.一對多:乙個核心執行緒對應多個使用者執行緒3.多對多:多個核心執行緒對應多個使用者執行緒

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

作業系統 程序和執行緒

從處理機只能執行單一程式,到處理機可以通過不停的切換所執行的程式,達到看似同時處理多個程序的過程,經歷了很長一段時間。從單道程式設計到多道程式設計,主要解決了在執行過程中需要頻繁等待資源或者i o操作的問題,因為這類操作通常都是很耗時間的 相對於cpu的快速執行來說 進而提高了整個cpu執行的效率和...

現代作業系統 程序和執行緒

概念 對正在執行程式的乙個抽象。偽並行 由於cpu在各個程序中的切換時間很短 幾十毫秒到幾百毫秒 所以在1s內它可以執行多個程序,這樣就產生了並行的錯覺。這就是說乙個cpu在乙個時間點只能執行乙個程序,在下乙個時間點切換到另外乙個程序,造成同時執行的錯覺。程序和程式 程式就是一些 用一些語言來描述演...

作業系統之執行緒和程序

以下內容 於 上面的面試題可以看出,其實都是一回事,只是換了一種提問方式,只要我們能掌握核心要點,隨便面試官怎麼提問,我們都能輕鬆應對!所以我們可以說 程序 是包含 執行緒 的,執行緒 是 程序 的乙個子集。程序 process 是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排...