作業系統(二)
阿新 • • 發佈:2018-11-14
- 在多重處理系統中,處理死鎖的辦法有兩種:一是防止其發生,二是發生後進行處理。
- 所謂死鎖deadlocks 是指兩個或者兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們將推進下去。此時稱系統處於死鎖狀態或者系統產生了死鎖。
- 產生死鎖的四個必要條件:
- …互斥條件: 一個資源每次只能被一個程序使用。
- …請求與保持條件: 一個程序因請求資源而阻塞時,對已獲得的資源保持不放。
- …不剝奪條件: 程序已獲得的資源,在未使用之前,不能強行剝奪
- …迴圈等待條件: 若干程序之間形成一種頭尾相接的迴圈等待資源關係
只要發生死鎖,這些條件必然成立。只要上面條件之一不滿足,就不會發生死鎖。為此可以採用下面三種措施: - 採用資源靜態分配策略-----破壞“部分分配”條件
- 允許程序剝奪使用其他程序佔有的資源,從而破壞“不可剝奪”條件。
- 採用資源有序分配法----破壞“環路”條件。
- 這裡注意:互斥條件無法被破壞。
- fork英文單詞是叉的意思。意思是程序在這裡開始分叉,分成了兩個程序:一個是父程序一個是子程序。子程序複製了父程序的絕大部分:棧、緩衝區等等。系統為子程序建立一個新的程序表項,其中程序id和父程序是不相同的,父子程序成為兩個獨立的程序,雖然父子程序共享空間,但是在涉及寫資料時子程序有自己的資料空間,再有資料修改時,系統會為子程序申請新的頁面。
- 描述程序的三種狀態:
- 程序在執行過程中不斷改變其執行狀態。通常,一個執行程序必須具有以下三種基本狀態。
- 1 >就緒(Ready)狀態:當程序與分配到除CPU以外的所有必要資源時,只要獲得處理機便可立即執行,這時的程序狀態稱為就緒狀態。
- 2>執行(Running)狀態:當程序已獲得處理機,其程式正在處理機上執行,此時的狀態稱為執行狀態。
- 3>阻塞(Blocked)狀態:正在執行的過程中,由於等待某個事件而無法執行時,便放棄處理機處於阻塞狀態。引起阻塞的事件有多種----等待I/O完成、申請緩衝區不能滿足、等待訊號等。
執行緒篇
- 請描述程序與執行緒的區別:
- 程序是程式的一次執行。執行緒可以理解為程序中執行的一段程式片段。在一個多工環境中下面的概念幫助我們理解兩者差別。
- 程序間是獨立的,這表現為記憶體空間、上下文環境;執行緒執行在程序空間內。一般來講(不使用特殊技術),程序無法突破程序邊界存取其他程序內的儲存空間;而執行緒由於處於程序空間內,所以同一程序所產生的執行緒共享同一記憶體空間。
- 同一程序中的兩段程式碼不能夠同時執行,除非引入執行緒。
- 執行緒屬於程序,當程序退出時,該程序產生的執行緒都會被強制退出並清除。執行緒佔用的資源少於程序佔用資源。程序和執行緒都可以有優先順序。
- 程序間可以通過IPC通訊,但執行緒不可以。
- PE 檔案被稱為可移植的執行體Portable Execute的全程,常見的EXE、DLL、OCX,SYS、COM都是·PE檔案,PE檔案是windows作業系統上的程式檔案(可能是間接被執行,如 DLL(動態連結庫檔案))。
- Windows平臺的大多數程式都是使用各種動態連結庫(DLL)來避免重複實現功能。作業系統為每個程式載入了若干個DLL。當程式不使用絕對位置時,使用預設的搜尋順序來找到它。預設情況:作業系統使用下面的順序搜尋DLL:
- 記憶體
- KnownDLLs
- 清單與.local
- 應用程式目錄
- 當前工作目錄
- 系統目錄
- 路徑變數
包含EXE檔案目錄 ->程序的當前工作目錄->windows系統目錄->windows目錄->列在Path環境變數中的一系列目錄。
- 動態連結庫相對靜態連線庫的優點有:節省記憶體,減少交換操作,節省磁碟空間,更易於升級(不需要重連結和重編譯)。靜態連結庫可能比動態連結庫更快。
記憶體管理
- 抖動現象(Thrashing)是指剛剛被換出的頁很快又要被訪問。
- 採用FIFO演算法時,如果對—個程序未分配它所要求的全部頁面,有時就會出現分配的頁面數增多但缺頁率反而提高的異常現象。
Belady現象的描述:一個程序P要訪問M個頁,OS分配N(N<M)個記憶體頁面給程序P;對一個訪問序列S,發生缺頁次數為PE(S,N).當N增大(且N小於M)時,PE(S, N)時而增大,時而減小。
FIFO是最早出現的頁置換演算法之一。Belady現象的原因是FIFO演算法的置換特徵與程序訪問記憶體的動態特徵是矛盾的,即被置換的頁面並不是程序不會訪問的,因而FIFO並不是一個好的置換演算法。 - 虛擬儲存的基本思想是:程式、資料、堆疊的總大小可以超過物理儲存器的大小,作業系統把當前使用的部分保留在記憶體中。而把其他未被使用的部分儲存在磁碟。