程序與執行緒

2022-08-26 09:42:10 字數 2881 閱讀 1229

程序模型

計算機上所有可執行的軟體,通常也包括作業系統,被組織成若干順序程序,簡稱 程序。乙個程序就是乙個正在執行程式的例項。包括程式計數器、計數器和當前變數的值。

cpu在程序之間快速來回切換被稱作是多道程式設計。

程序的建立

四種事件會導致程序的建立

1.系統初始化

2.正在執行的程式執行了建立程序的系統呼叫。

3.使用者建立乙個新程序。

4.乙個批處理作業的初始化。

守護程序:停留在後台處理諸如電子郵件、web頁面、新聞、列印之類活動的程序成為守護程序。

在unix和windows中,程序建立之後,父程序和子程序有各自不同的位址空間

程序的終止

1.正常退出(自願的)

2.出錯退出(自願的)

3.嚴重錯誤(非自願)

4.被其它程序殺死(非自願)

程序的結構層次

unix:樹

windows: 沒有程序層次概念,所有的程序層次相同,唯一類似的是,建立子程序的時候,父程序得到乙個特別的令牌(控制代碼),可以用來控制子程序,但它有權把控制代碼傳給其它程序,這樣就不存在程序層次,unix中則不能剝

奪子程序的繼承權。

程序的狀態

程序的實現:

作業系統維護這一張**(乙個結構陣列),即程序表。乙個程序占用乙個程序表項(程序控制塊),該表項中包含了程序狀態的重要資訊,程式計數器,堆疊指標,記憶體分配狀態,所開啟檔案的狀態,賬號和排程資訊等等。

執行緒

為什麼需要多執行緒

執行緒其實就是迷你程序,需要多執行緒的理由是一些程序中進行著許多活動,分解成執行緒的話會簡單很多,

還有個原因是,執行緒比程序更輕量級,建立和撤銷都比程序容易,建立乙個執行緒較建立乙個程序要快10到100倍,在有大量程序需要動態和快速修改時,這一特性很有用。

3.效能。存在大量計算和大量io處理會加快。

4.多cpu系統中,真正的並行有了實現的可能。

由於執行緒擁有程序的某些性質,有時也被稱為輕量級程序。

ieee標準3.1c中定義了執行緒的標準,定義了執行緒包pthread

在使用者空間實現執行緒

在使用者空間管理執行緒,每個程序需要有其專用的執行緒表,用來跟蹤該程序中的執行緒。

在核心空間實現執行緒

此時不需要執行時系統,每個程序中也沒有執行緒表。

彈出式執行緒

乙個訊息的到來導致系統建立乙個處理該訊息的執行緒,這種執行緒稱為彈出式執行緒。

程序間通訊

臨界區把共享記憶體進行訪問的程式片段稱作臨界區域或臨界區。

忙等待的互斥實現:1.遮蔽中斷 2.鎖變數 3.嚴格輪換法4.pesterson解法  5.tsl指令

睡眠與喚醒

生產者-消費者問題(有界緩衝區問題)

訊號量

使用乙個整型變數來累計喚醒次數,供以後使用,通過兩種操作,down和up,訊號量減為0則睡眠。

互斥量

不需要訊號量的計數能力,就可以用它的簡化版本,稱為互斥量,僅適用於管理共享資源或一小段**,在實現洪湖空間執行緒包的時候非常有用。

它處於兩態之一:解鎖和加鎖。只需乙個二進位制位來表示。

快速使用者區互斥量futex:包含兩個部分,核心服務和乙個使用者庫。

pthread中的互斥量:使用乙個可以被鎖定和解鎖的互斥量來保護每個臨界區。

管程

一種高階同步原語。

特性:任一時刻管程中只能有乙個活躍程序。

條件變數:wait signal

訊息傳遞

使用兩條原語:send 和 receive ,像訊號量,是系統呼叫而不是語言。庫例程:

send(destination,&message);

receive(source,&message);

(感覺像tcp中的ack)

屏障

當乙個京城到達屏障時,被屏障所攔截,知道所有程序都到達該屏障為止,屏障可用於一組程序同步。

排程

何時排程?

1.建立新程序時,父子程序選擇執行誰

2.程序退出

3.程序阻塞

4.i/o中斷

排程演算法分類:

1.批處理

2.互動式

3.實時。

批處理系統中的排程:

1、先來先服務  2、最短作業優先  3、最短時間優先

互動式系統中的排程;

1、輪轉排程(時間片、程序切換、上下文切換等)2、優先順序排程3、多級佇列 4、最短程序優先(最短響應時間)5、保證排程(向使用者做出效能保證,然後實現這個保證)

6、彩票排程(在保證排程的基礎上,隨機抽出乙個來執行,就買彩票一樣)7、公平分享排程

實時系統中的排程  

實時系統:硬實時:絕對的截止時間

軟實時:可容忍的截止時間

策略和機制:將排程機制與排程策略分離。

經典ipc問題:哲學家就餐同步問題。

程序與執行緒

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

程序與執行緒

程序 是擁有資源的實體,包括 1。乙個程序有乙個虛擬位址空間,不同程序位於不同的 虛擬位址空間中。程序之間若要通訊,必須通過作業系統 的功能呼叫 ipc 2。程序擁有其他資源,例如開啟的檔案和i o裝置。程序結束時,作業系統會自動釋放該程序擁有的所有資源。例如,如果 open乙個檔案而不close它...

程序與執行緒

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