1. 程式人生 > >作業系統(二)

作業系統(二)

  1. 在多重處理系統中,處理死鎖的辦法有兩種:一是防止其發生,二是發生後進行處理。
  • 所謂死鎖deadlocks 是指兩個或者兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們將推進下去。此時稱系統處於死鎖狀態或者系統產生了死鎖。
  • 產生死鎖的四個必要條件:
    • …互斥條件: 一個資源每次只能被一個程序使用。
    • …請求與保持條件: 一個程序因請求資源而阻塞時,對已獲得的資源保持不放。
    • …不剝奪條件: 程序已獲得的資源,在未使用之前,不能強行剝奪
    • …迴圈等待條件: 若干程序之間形成一種頭尾相接的迴圈等待資源關係

      只要發生死鎖,這些條件必然成立。只要上面條件之一不滿足,就不會發生死鎖。為此可以採用下面三種措施:
    • 採用資源靜態分配策略-----破壞“部分分配”條件
    • 允許程序剝奪使用其他程序佔有的資源,從而破壞“不可剝奪”條件。
    • 採用資源有序分配法----破壞“環路”條件。
    • 這裡注意:互斥條件無法被破壞。
  1. fork英文單詞是叉的意思。意思是程序在這裡開始分叉,分成了兩個程序:一個是父程序一個是子程序。子程序複製了父程序的絕大部分:棧、緩衝區等等。系統為子程序建立一個新的程序表項,其中程序id和父程序是不相同的,父子程序成為兩個獨立的程序,雖然父子程序共享空間,但是在涉及寫資料時子程序有自己的資料空間,再有資料修改時,系統會為子程序申請新的頁面。

  1. 描述程序的三種狀態:
  • 程序在執行過程中不斷改變其執行狀態。通常,一個執行程序必須具有以下三種基本狀態。
  • 1 >就緒(Ready)狀態:當程序與分配到除CPU以外的所有必要資源時,只要獲得處理機便可立即執行,這時的程序狀態稱為就緒狀態。
  • 2>執行(Running)狀態:當程序已獲得處理機,其程式正在處理機上執行,此時的狀態稱為執行狀態。
  • 3>阻塞(Blocked)狀態:正在執行的過程中,由於等待某個事件而無法執行時,便放棄處理機處於阻塞狀態。引起阻塞的事件有多種----等待I/O完成、申請緩衝區不能滿足、等待訊號等。

執行緒篇

  1. 請描述程序與執行緒的區別:
  • 程序是程式的一次執行。執行緒可以理解為程序中執行的一段程式片段。在一個多工環境中下面的概念幫助我們理解兩者差別。
  • 程序間是獨立的,這表現為記憶體空間、上下文環境;執行緒執行在程序空間內。一般來講(不使用特殊技術),程序無法突破程序邊界存取其他程序內的儲存空間;而執行緒由於處於程序空間內,所以同一程序所產生的執行緒共享同一記憶體空間。
  • 同一程序中的兩段程式碼不能夠同時執行,除非引入執行緒。
  • 執行緒屬於程序,當程序退出時,該程序產生的執行緒都會被強制退出並清除。執行緒佔用的資源少於程序佔用資源。程序和執行緒都可以有優先順序。
  • 程序間可以通過IPC通訊,但執行緒不可以。

  1. PE 檔案被稱為可移植的執行體Portable Execute的全程,常見的EXE、DLL、OCX,SYS、COM都是·PE檔案,PE檔案是windows作業系統上的程式檔案(可能是間接被執行,如 DLL(動態連結庫檔案))。
  2. Windows平臺的大多數程式都是使用各種動態連結庫(DLL)來避免重複實現功能。作業系統為每個程式載入了若干個DLL。當程式不使用絕對位置時,使用預設的搜尋順序來找到它。預設情況:作業系統使用下面的順序搜尋DLL:
  • 記憶體
  • KnownDLLs
  • 清單與.local
  • 應用程式目錄
  • 當前工作目錄
  • 系統目錄
  • 路徑變數
    包含EXE檔案目錄 ->程序的當前工作目錄->windows系統目錄->windows目錄->列在Path環境變數中的一系列目錄。

  1. 動態連結庫相對靜態連線庫的優點有:節省記憶體,減少交換操作,節省磁碟空間,更易於升級(不需要重連結和重編譯)。靜態連結庫可能比動態連結庫更快。

記憶體管理


  • 抖動現象(Thrashing)是指剛剛被換出的頁很快又要被訪問。
  • 採用FIFO演算法時,如果對—個程序未分配它所要求的全部頁面,有時就會出現分配的頁面數增多但缺頁率反而提高的異常現象。
    Belady現象的描述:一個程序P要訪問M個頁,OS分配N(N<M)個記憶體頁面給程序P;對一個訪問序列S,發生缺頁次數為PE(S,N).當N增大(且N小於M)時,PE(S, N)時而增大,時而減小。
    FIFO是最早出現的頁置換演算法之一。Belady現象的原因是FIFO演算法的置換特徵與程序訪問記憶體的動態特徵是矛盾的,即被置換的頁面並不是程序不會訪問的,因而FIFO並不是一個好的置換演算法。
  • 虛擬儲存的基本思想是:程式、資料、堆疊的總大小可以超過物理儲存器的大小,作業系統把當前使用的部分保留在記憶體中。而把其他未被使用的部分儲存在磁碟。