1. 程式人生 > >常見作業系統筆試面試題整理

常見作業系統筆試面試題整理

1、程序和執行緒的區別和聯絡

1)程序是作業系統進行資源分配的基本單位,執行緒是CPU排程的基本單位

2)一個程序可以包含多個執行緒,執行緒間共享程序的所有資源,每個執行緒都自己的堆疊和區域性變數

3)進行有自己的獨立的地址空間,每啟動一個程序,系統就會為它分配空間,建立資料表來維護程式碼段、堆疊段和資料段,這種操作非常昂貴;而執行緒共享程序中的資料,使用相同的地址空間,因此CPU切換一個執行緒的花費更低

2、程序間的通訊方式

1)管道:半雙工通訊方式、資料單向流動、只能在父子程序間使用

2)命名管道:半雙工,允許無親緣關係程序間的通訊

3)訊號量:計數器,控制多個程序對共享資源的訪問

4)共享記憶體:對映一段能被其他程序所訪問的記憶體

5)訊息佇列:訊息的連結串列,存放在核心中並由訊息佇列識別符號標識

6)套接字:不同裝置間的程序通訊

7)全雙工管道

3、執行緒間通訊

同一程序的執行緒共享地址空間,沒有通訊的必要,但要做好同步/互斥,保護共享的全域性變數

1)鎖機制(互斥鎖、條件變數、讀寫鎖)

2)訊號量機制:計數器

3)訊號機制:通過通知的操作來保持執行緒的同步

4、同步和非同步的概念

所謂同步,就是發出一個功能呼叫時,在沒有得到結果之前,該呼叫就不返回,不繼續執行後續操作

所謂非同步,就是發出一個功能呼叫時,呼叫者在沒有得到結果之前,就可以繼續執行後續操作。當這個呼叫完成後,一般通過狀態、通知和回撥來通知呼叫者。對於非同步呼叫,呼叫的返回並不受呼叫者控制。

阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起。函式只有在得到結果之後才會返回

非阻塞呼叫指在不能立刻得到結果之前,該函式不會阻塞當前執行緒,而會立刻返回

 同步是個過程,阻塞是執行緒的一種狀態。多個執行緒操作共享變數時可能會出現競爭。這時需要同步來防止兩個以上的執行緒同時進入臨界區,在這個過程中,後進入臨界區的執行緒將阻塞,等待先進入的執行緒走出臨界區。

5、分時作業系統和實時作業系統

分時系統是指在一臺主機上連線了多個終端並由此組成的系統,該系統允許多個使用者同時通過自己的終端,以互動方式使用計算機,共享主機中的資源。分時作業系統最典型的例子就是UNIX和Linux,它們可以同時連線多個終端,並且每隔一段時間重新掃描程序,重新分配程序的優先順序,動態分配系統資源。

實時作業系統是指當外界事件或資料產生時,能夠接受並以足夠快的速度予以處理,其處理的結果又能在規定的時間之內來控制生產過程或對處理系統做出快速響應,排程一切可利用的資源完成實時任務,並控制所有實時任務協調一致執行的作業系統。

6、是什麼是緩衝區溢位?有什麼危害?其原因是什麼?

緩衝區溢位,是指計算機向緩衝區填充資料的時候超過了緩衝區的本身的容量,溢位的資料覆蓋在合法的資料上

危害:1)程式崩潰,導致拒絕服務 2)跳轉並執行一段惡意程式碼 

主要的原因是程式中沒有仔細檢查使用者輸入

7、什麼是死鎖?死鎖產生的條件?

死鎖是指多個程序因搶奪資源而造成互相等待,若無外力作用,這些程序都將無法向前推進,這種現象就是死鎖

死鎖產生的原因:

1)系統資源的競爭:系統資源的競爭導致系統資源不足,以及資源分配不當

2)程序執行推進順序不合適:程序在執行過程中,請求和釋放資源的順序不當

四個必要條件:

1)互斥條件:一個資源每次只能被一個程序使用

2)請求與保持:程序已經保持了一個資源,但又提出新的資源請求,而該資源已被其他程序所佔有,此時請求程序被阻塞,但是對自己已經獲得的資源保持不變

3)不可剝奪:程序鎖所獲得的資源在未使用完畢之前,不能被其他程序剝奪

4)迴圈等待條件:若干個程序形成收尾相接迴圈等待資源的關係

預防死鎖(破壞四個必要條件)

資源一次性分配:(破壞請求和保持條件)

可剝奪資源:即當某程序新的資源未滿足時,釋放已佔有的資源(破壞不可剝奪條件)

資源有序分配法:系統給每類資源賦予一個編號,每一個程序按編號遞增的順序請求資源,釋放則相反(破壞環路等待條件)

避免死鎖:在資源動態分配過程中,用某種方法防止系統進入不安全狀態,從而避免死鎖發生;

 所謂銀行家演算法,是指在分配資源之前先看清楚,資源分配後是否會導致系統死鎖。如果會死鎖,則不分配,否則就分配。

按照銀行家演算法的思想,當程序請求資源時,系統將按如下原則分配系統資源:

(1) 當一個程序對資源的最大需求量不超過系統中的資源數時可以接納該程序。

(2) 程序可以分期請求資源,當請求的總數不能超過最大需求量。

(3) 當系統現有的資源不能滿足程序尚需資源數時,對程序的請求可以推遲分配,但總能使程序在有限的時間裡得到資源。

(4) 當系統現有的資源能滿足程序尚需資源數時,必須測試系統現存的資源能否滿足該程序尚需的最大資源數,若能滿足則按當前的申請量分配資源,否則也要推遲分配。

8、程序有哪幾種狀態?

1)就緒狀態:程序已獲得除處理機以外的其他所需資源,等待分配處理機資源

2)執行狀態:佔用處理機資源執行

3)阻塞狀態:等待資源而無法繼續執行的狀態

9、分頁和分段有什麼區別?

1)段是資訊的邏輯單元,它是根據使用者的需要劃分的,因此段對使用者是可見的;

頁是資訊的物理單位,它是為了管理記憶體的方便而劃分的,對使用者是透明的

2)端的大小是不固定的,由它所完成的功能決定;

頁的大小是固定的,由系統決定

3)段向用戶提供二維地址空間;頁提供一維地址空間

在端式儲存管理中,將程式的地址空間劃分成若干段,這樣每個程序有一個二維地址(段名,段內地址)空間,

相互獨立,互不干擾,沒有記憶體碎片,大小可變;但是段的切入切出會產生外部碎片。

在頁式儲存管理中,頁的大小固定,沒有外碎片,但是可能產生內部碎片,因為一頁可能填不滿

10、常用的作業系統程序排程演算法

1)FCFS 先來先服務 佇列

2)短程序(作業)優先排程演算法(SPF) 後備佇列

3)優先權排程演算法 FPF (非搶佔式、搶佔式)

4)高響應比優先排程演算法

5)時間片輪轉法

6)多級反饋佇列排程演算法 (設定多個就緒佇列)

11、執行緒同步的幾種方式

  臨界區(Critical Section)、互斥量(Mutex)、訊號量(Semaphore)、事件(Event)

1)臨界區:通過對多執行緒的序列化來訪問公共資源或一段程式碼,速度快,適合控制資料訪問。在任意時刻只允許一個執行緒對共享資源進行訪問, 如果有多個執行緒試圖訪問公共資源,那麼在有一個執行緒進入後,其他試圖訪問公共資源的執行緒將被掛起,並一直等到進入臨界區的執行緒離開,臨界區在被釋放後,其他執行緒才可以搶佔。
2)互斥量:採用互斥物件機制。 只有擁有互斥物件的執行緒才有訪問公共資源的許可權,因為互斥物件只有一個,所以能保證公共資源不會同時被多個執行緒訪問。互斥不僅能實現同一應用程式的公共資源安全共享,還能實現不同應用程式的公共資源安全共享。
3)訊號量:它允許多個執行緒在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大執行緒數目。
4)事 件: 通過通知操作的方式來保持執行緒的同步,還可以方便實現對多個執行緒的優先順序比較的操作。

12、程序的上下文切換

上下文是作業系統保持跟蹤程序執行所需的狀態資訊,包括如下:

  • 通用目的暫存器
  • 浮點暫存器
  • 程式計數器
  • 使用者棧
  • 狀態暫存器
  • 核心棧
  • 各種核心資料結構

當作業系統決定將控制權從當前程序轉移到某個新程序時,就會就進行上下文切換,即儲存當前程序的上下文,恢復新程序的上下文,然後將控制權傳遞到新程序,新程序就會從上次停止的地方開始

13、使用者模式和核心模式

處理器通常是用某個控制暫存器中的一個模式位來提供這種功能的,該暫存器描述了程序當前享有的特權。

一個執行在核心模式的程序可以執行指令集中的任何指令,並且可以訪問系統中任何儲存器位置。 

一個執行在使用者模式的程序不允許執行特權指令,比如停止處理器,改變模式位,或者發起一個I/O操作;也不允許直接引用地址空間中核心區內的程式碼和資料。

程序從使用者模式變為核心模式的唯一方法是通過諸如中斷,故障或者陷入系統呼叫這樣的異常,當異常發生時,控制傳遞到異常處理程式,處理器將模式從使用者模式變為核心模式。