作業系統常見知識點

weixin_34007291發表於2018-10-17

一、請分別簡單說一說程式和執行緒以及它們的區別

  • 程式是具有一定功能的程式關於某個資料集合上的一次執行活動,程式是系統進行資源排程和分配的一個獨立單位。
  • 執行緒是程式的實體,是CPU排程和分派的基本單位,它是比程式更小的能獨立執行的基本單位。
  • 一個程式可以有多個執行緒,多個執行緒也可以併發執行

二、執行緒同步的方式有哪些?

  • 互斥量:採用互斥物件機制,只有擁有互斥物件的執行緒才有訪問公共資源的許可權。因為互斥物件只有一個,所以可以保證公共資源不會被多個執行緒同時訪問。
  • 訊號量:它允許同一時刻多個執行緒訪問同一資源,但是需要控制同一時刻訪問此資源的最大執行緒數量。
  • 事件(訊號):通過通知操作的方式來保持多執行緒同步,還可以方便的實現多執行緒優先順序的比較操作。

三、程式的通訊方式有哪些?
主要分為:管道、系統IPC(包括訊息佇列、訊號量、共享儲存)、SOCKET
管道主要分為:普通管道PIPE 、流管道(s_pipe)、命名管道(name_pipe)

四、什麼是緩衝區溢位?
緩衝區溢位是指當計算機向緩衝區填充資料時超出了緩衝區本身的容量,溢位的資料覆蓋在合法資料上。

五、什麼是死鎖?死鎖產生的條件?
在兩個或者多個併發程式中,如果每個程式持有某種資源而又等待其它程式釋放它或它們現在保持著的資源,在未改變這種狀態之前都不能向前推進,稱這一組程式產生了死鎖。通俗的講就是兩個或多個程式無限期的阻塞、相互等待的一種狀態。
死鎖產生的四個條件(有一個條件不成立,則不會產生死鎖)

  • 互斥條件:一個資源一次只能被一個程式使用
  • 請求與保持條件:一個程式因請求資源而阻塞時,對已獲得資源保持不放
  • 不剝奪條件:程式獲得的資源,在未完全使用完之前,不能強行剝奪
  • 迴圈等待條件:若干程式之間形成一種頭尾相接的環形等待資源關係

六、作業系統中程式排程策略有哪幾種?
FCFS(先來先服務),優先順序,時間片輪轉,多級反饋

七、說一說死鎖的處理基本策略和常用方法
解決死鎖的基本方法如下:
預防死鎖、避免死鎖、檢測死鎖、解除死鎖
預防死鎖

  • 資源一次性分配:破壞請求和保持條件
  • 可剝奪資源:即當某程式新的資源未滿足時,釋放已佔有的資源(破壞不可剝奪條件)
  • 資源有序分配法:系統給每類資源賦予一個編號,每一個程式按編號遞增的順序請求資源,釋放則相反(破壞環路等待條件)

避免死鎖

  • 在避免死鎖的策略中,允許程式動態地申請資源。因而,系統在進行資源分配之前預先計算資源分配的安全性。若此次分配不會導致系統進入不安全狀態,則將資源分配給程式;否則,程式等待。其中最具有代表性的避免死鎖演算法是銀行家演算法。

檢測死鎖

解除死鎖
當發現有程式死鎖後,便應立即把它從死鎖狀態中解脫出來,常採用的方法有:

  • 剝奪資源:從其它程式剝奪足夠數量的資源給死鎖程式,以解除死鎖狀態;
  • 撤消程式:可以直接撤消死鎖程式或撤消代價最小的程式,直至有足夠的資源可用,死鎖狀態消除為止;所謂代價是指優先順序、執行代價、程式的重要性和價值等。

八、作業系統頁面置換演算法
1.最佳置換演算法(OPT,理想置換演算法):從主存中移出永遠不再需要的頁面;如無這樣的頁面存在,則選擇最長時間不需要訪問的頁面。於所選擇的被淘汰頁面將是以後永不使用的,或者是在最長時間內不再被訪問的頁面,這樣可以保證獲得最低的缺頁率。
最佳置換演算法可以用來評價其他演算法。假定系統為某程式分配了三個物理塊,並考慮有以下頁面號引用串:
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
程式執行時,先將7, 0, 1三個頁面依次裝入記憶體。程式要訪問頁面2時,產生缺頁中斷,根據最佳置換演算法,選擇第18次訪問才需調入的頁面7予以淘汰。然後,訪問頁面0時,因為已在記憶體中所以不必產生缺頁中斷。訪問頁面3時又會根據最佳置換演算法將頁面1淘汰……依此類推,如下圖所示。從圖中可以看出釆用最佳置換演算法時的情況。
可以看到,發生缺頁中斷的次數為9,頁面置換的次數為6。

2965532-e32a3e6c3c78eae2.png

2.先進先出置換演算法(FIFO):是最簡單的頁面置換演算法。這種演算法的基本思想是:當需要淘汰一個頁面時,總是選擇駐留主存時間最長的頁面進行淘汰,即先進入主存的頁面先淘汰。其理由是:最早調入主存的頁面不再被使用的可能性最大。
這裡仍用上面的例項,釆用FIFO演算法進行頁面置換。程式訪問頁面2時,把最早進入記憶體的頁面7換出。然後訪問頁面3時,再把2, 0, 1中最先進入記憶體的頁換出。由下圖可以看出,利用FIFO演算法時進行了 12次頁面置換,比最佳置換演算法正好多一倍。
2965532-14a6dcb493f8ab6e.png

FIFO演算法還會產生當所分配的物理塊數增大而頁故障數不減反增的異常現象,這是由 Belady於1969年發現,故稱為Belady異常。只有FIFO演算法可能出現Belady 異常,而LRU和OPT演算法永遠不會出現Belady異常。

3.最近最久未使用演算法(LRU):這種演算法的基本思想是:利用區域性性原理,根據一個作業在執行過程中過去的頁面訪問歷史來推測未來的行為。它認為過去一段時間裡不曾被訪問過的頁面,在最近的將來可能也不會再被訪問。所以,這種演算法的實質是:當需要淘汰一個頁面時,總是選擇在最近一段時間內最久不用的頁面予以淘汰。
再對上面的例項釆用LRU演算法進行頁面置換,如下圖所示。程式第一次對頁面2訪問時,將最近最久未被訪問的頁面7置換出去。然後訪問頁面3時,將最近最久未使用的頁面1換出。


2965532-f8e6aba9d7013532.png

實際上,LRU演算法根據各頁以前的情況,是“向前看”的,而最佳置換演算法則根據各頁以後的使用情況,是“向後看”的。

相關文章