程序和執行緒

2022-08-29 20:54:14 字數 2044 閱讀 4557

1. 程序:

(1)程序模型:乙個程序就是乙個程式的執行例項,程式是靜態的,程序是動態的。乙個程序有乙個位址空間和乙個控制線程,其中位址空間包含有:程式計數器、暫存器、變數的當前值。當乙個程序被掛起時,程序的物理程式計數器值被儲存在該程序的程式計數器中。下次程序執行時,再從程式計數器中取出計數值裝入記憶體的程式計數器中。

(2)程序的建立:在unix系統中,建立新程序的方式只有乙個:fork()函式,即建立乙個子程序。子程序是父程序的乙個副本,和父程序擁有相同的儲存映像、相同的環境字串和相同的開啟檔案。但是,子程序和父程序有各自不同的位址空間,不同的pid。通過系統呼叫execve()函式,可以替換位址空間中的程式段。(ps:子程序和父程序擁有不同的位址空間,但位址空間中的內容相同)          

(3)程序的三種狀態:執行態、就緒態、阻塞態。(ps:系統呼叫pause()可以使程序進入阻塞態)

(4)多程序的實現:作業系統維護著一張程序表,每個程序占用乙個表項。該表項包含著程序狀態的重要資訊,包括:暫存器、程式計數器、堆疊指標、記憶體分配狀況、開啟檔案的狀態、排程資訊、從執行態轉為就緒態或阻塞態時所儲存的資訊(程式計數器值和暫存器中的相關資訊)。當核心切換程序時,會將舊程序的資訊裝入程序表,保證下次該程序能正確啟動,然後載入新程序的程式計數器和暫存器等相應資訊到記憶體中,從而切換到新程序。

(5)多程序的設計模型:當乙個程序從執行態轉為就緒態或阻塞態時,會發生中斷,中斷硬體將程式計數器、程式狀態字、乙個或多個暫存器放入程序表中,然後跳轉到中斷向量所指示的位址,引導程式計數器和暫存器相關值,從而開始執行另乙個程序。

2. 執行緒:

(1)執行緒模型:乙個執行緒就像乙個分離的程序,它執行在程序的上下文中,多個執行緒共享該程序的虛擬位址空間和其中所有可用的資料,但是每個執行緒都有自己獨立的暫存器,堆疊空間,程式計數器,狀態。多個執行緒各自獨立地進行在同乙個程序中。

(2)執行緒的優勢:  ①便於設計    ②輕量級,容易建立和撤銷    ③使用者態的多執行緒切換速度快,效能高

(3)程序和執行緒的聯絡:程序用於把資源都集中一起,而多個執行緒則執行在程序的上下文中,共享程序的資源,是被cpu排程執行的實體。(ps:執行緒是不安全的,乙個執行緒可以修改其他執行緒的堆疊空間,其他執行緒也可以訪問某個執行緒開啟的檔案)      

(4)posix執行緒:乙個執行緒包,其中主要的函式呼叫有:

pthread_create          建立乙個新執行緒

pthread_exit    結束呼叫的執行緒

pthread_join    等待乙個特定的執行緒退出

pthread_yield     釋放cpu來執行另外乙個執行緒

pthread_attr_init   建立並初始化乙個執行緒屬性結構               

(5)多執行緒實現方式:多執行緒的實現方式一般有兩種,使用者態實現和核心態實現。

(ps①:執行緒表和程序表類似,包含重啟該執行緒的資訊,即:每個執行緒的程式計數器、堆疊指標、暫存器和狀態等)

(ps②:通過pthread_yield對執行緒排程時,先把執行緒資訊存入執行緒表,進而呼叫排程程式選擇另乙個執行緒)

使用者態執行緒的優缺點:

優點:  1. 儲存執行緒狀態和排程程式都是本地過程,允許每個程序有自己定製的排程演算法。

2. 使用者級執行緒沒有系統呼叫和上下文切換,不需要對記憶體的快取記憶體進行重新整理,所以使用者執行緒排程效率比核心執行緒高出乙個數量級。

缺點:  1. 當程序中某個執行緒發生阻塞時,程序中的其他執行緒都會一起阻塞(ps:select呼叫可以預檢測阻塞) 

2. 當程序中的乙個執行緒執行時,其他執行緒無法執行,除非該執行緒執行結束或強制終止。由於程序內部沒有時鐘中斷,無法切分時間片,所以不能用輪轉排程的方式排程執行緒。

(ps:核心視所有的執行緒為平等的,統一對不同程序的所有執行緒進行排程。當乙個執行緒阻塞時,核心可能執行同一程序中的執行緒,也可能執行不同程序中的執行緒)

核心態執行緒的優缺點:

優點:1. 核心可以時鐘中斷,防止某一線程執行時間過長(時間片切換:定時到了之後執行緒自動切換)

2. 所有阻塞執行緒的呼叫都以系統呼叫的形式實現,防止某一線程阻塞造成該程序所有執行緒阻塞。

缺點: 需要完整的上下文切換,修改記憶體映像,清除記憶體中快取記憶體的內容。這些導致了若干數量級的延遲,降低了效能。

執行緒和程序

標準的定義是 程序是執行緒的容器,乙個程序可於乙個或者多個執行緒,它是系統分配資源的基本單位 同乙個程序下,執行緒共享位址空降 已經開啟的檔案 訊號處理函式 報警訊號和其他,執行緒自己只保留程式計數器和棧。但是很遺憾的,這個只是教科書上的定義,實際情況是每個作業系統實現的作業系統特性不同,實現的方法...

程序和執行緒

乙個程序就是當前正在執行的乙個程式,包括程式的暫存器 程式計數器和變數的當前值。不同的程序擁有不同的位址空間。而執行緒可以理解為是程序中的控制流。同乙個程序內也就是說在同乙個位址空間內可以有多個控制流。也就是可以有多個線 程,他們共享位址空間。我們通常將程序視為是資源的集合,程序中有程式的正文 資料...

執行緒和程序

對於求職者,在面試的時候大多都會被問到 你對多執行緒了解麼?給我講講執行緒和程序的區別吧。在unix中,乙個程序可以理解為執行緒 位址空間 檔案描述符 資料,道破現實,其實就相當於老闆和員工,老闆就是程序,員工就是執行緒。老闆需要僱傭若干員工 執行緒 還要有辦公樓 位址空間 還要有若干的辦公裝置 檔...