1. 程式人生 > >作業系統讀書筆記(三)

作業系統讀書筆記(三)

注: 這是對 [Abraham Silberschatz. 作業系統概念 第七版. 高等教育出版社, 2010.1] 一書的概述性閱讀筆記

      同時也是對學校作業系統課程部份作業的整理

CH3&4 程序與執行緒

1.程序概念

程序是執行中的程式,它不只是程式程式碼,還包括當前活動,通過程式計數器的值和處理器暫存器的內容來表示,也包括程序堆疊段和資料段,還可能包括堆——程序執行期間動態分配的記憶體。

程序在執行時會改變狀態,每個程序可能處於新的、執行、等待、就緒、終止這幾個狀態之一。

程序在作業系統內通過程序控制塊(PCB)表示,一個PCB中包含有一個特定程序相關的程序狀態、程序編號、程式計數器、暫存器、記憶體管理等眾多資訊。

2.程序操作

絕大多數系統內的程序能夠併發執行,可以被動態建立和刪除,作業系統提供了建立和終止程序的機制。

(1)程序建立

程序在執行過程中能夠通過建立程序系統呼叫建立多個新程序,建立程序稱父程序,新建立的程序稱子程序,子程序可以繼續建立新程序,從而形成了程序樹。大多數作業系統根據唯一的程序識別符號(pid)來識別程序,程序建立時其識別符號將被返回給父程序。

資源方面,子程序被建立時可能從作業系統直接獲得所需要的CPU時間、記憶體、I/O等資源,也可能只從父程序獲得資源,父程序在其子程序之間分配或共享資源。而程序建立時的初始化資料和輸入由父程序傳遞給子程序,有的作業系統將資源傳遞給子程序。

當新程序建立時,父程序與子程序可能併發執行,也可能父程序等待某個或全部子程序執行完畢,子程序的地址空間可能是父程序的複製品,具有與父程序相同的程式和資料,也可能將子程序裝入另一個新程式。

(2)程序終止

程序也可能被其他程序(通常為其父程序)通過系統呼叫而終止,父程序將其子程序終止的原因可能有:子程序使用了超出其所分配到的資源,分配給子程序的任務已不再需要等,部分作業系統不允許子程序在父程序已終止的情況下存在,當一個程序被終止時,其所有子程序也將會終止,即級聯終止。

3.程序通訊

作業系統內併發執行的程序可以是獨立程序或協作程序,協作程序影響或能被其他程序所影響,程序協作能夠實現資訊共享,提高運算速度,利於模組化以方便多工。而協作程序需要程序間通訊機制(IPC)來允許程序交換資料和資訊,程序間通訊有共享記憶體和訊息傳遞兩種基本模式。

共享記憶體允許以最快的速度進行方便的通訊,在這種模式下,通訊程序間通過系統呼叫建立共享記憶體的區域,建立共享記憶體後訪問被視作常規記憶體訪問而不再需要核心的幫助,程序在共享區域讀寫來交換資訊,資料形式和位置取決於程序而不受控於作業系統,程序也負責保證不想向同一區域同時寫入資料。

訊息傳遞模式不需要共享地址空間從而避免了衝突,對於交換少量資料顯得非常方便,尤其對於分散式環境極為有用,訊息傳遞工具至少提供傳送和接收兩種操作來實現資料交換,程序間通訊線路的邏輯實現方法有直接和間接通訊、同步或非同步通訊、自動或顯式緩衝等

作業系統中上述2種程序通訊模式都很常用,且大部分作業系統都實現了2種模式。

4.執行緒概念

執行緒是CPU使用的基本單元,由執行緒ID、程式計數器、暫存器集合和棧組成,許多現代作業系統提供單個程序包括多個控制執行緒的功能,同一程序下的多個執行緒共享程式碼段、資料段和其他作業系統資源。

多執行緒具有響應度高、資源共享、經濟、充分利用多處理器體系結構等優點,提高了了應用程式同時執行多個相似任務的效率,提高了伺服器對併發請求的處理能力。

5.多執行緒模型

多執行緒的支援有2種實現方式:使用者層的使用者執行緒和核心層的核心執行緒,使用者執行緒收核心支援而無需核心管理,核心執行緒由作業系統直接支援和管理。

使用者執行緒和核心執行緒間的關係建立可以由多種方式建立:將多個使用者執行緒對映到一個核心執行緒的多對一模型;將每個使用者執行緒對映到一個核心執行緒的一對一模型;多路複用多個使用者執行緒到同樣數量或更小數量核心執行緒的多對多模型。

6.執行緒庫

執行緒庫為程式設計師提供建立和管理執行緒的API,主要有2種方法來實現:通過在使用者空間中提供一個沒有核心支援的庫,呼叫庫函式只導致使用者空間本地函式呼叫;或通過執行由作業系統直接支援的核心級的庫,呼叫庫中API會導致對核心的系統呼叫。

目前三種主要的執行緒庫有:作為PSOSIX標準拓展的可提供使用者級或核心級的庫 Pthread執行緒庫、適用於Windows作業系統的核心級執行緒庫Win32執行緒庫、允許執行緒在Java程式中直接建立和管理的Java執行緒庫。

7.執行緒取消

執行緒取消是線上程完成之前終止執行緒的任務,當多個執行緒併發執行相同任務且其中一個執行緒已經得到結果時其餘執行緒就可能被取消,要取消的執行緒稱為目標執行緒,目標執行緒的取消可能發生於2種情形:目標執行緒立即被執行緒終止(非同步取消);目標執行緒不斷檢查其是否應終止,以有序方式終止自己(延遲取消)。