操作系統常見問題【面試必備】

整理操作系統中常見的知識點,面試問題
1、進程和線程的區別和關係

  • 從基本單位來看,進程是系統進行資源分配和調度的基本單位,是對運行程序的封裝;而線程則是CPU分配和調度的基本單位。
  • 從切換開銷來看,進程切換開銷比線程切換大。由於不同進程之間資源獨立(佔有獨立的內存塊),因此進程切換需要頁表切換以及頁調度操作;而線程共享進程內資源,因此線程切換只需要切換上下文(寄存器和棧信息)即可。
  • 線程是進程的子任務,一個進程可能有多個線程。

2、邏輯地址、線性地址、虛擬地址、物理地址的區別和關係

  • 邏輯地址:計算機程序中某條指令的地址,也叫相對地址。一個邏輯地址由兩部分組成:段標識符|段偏移量,所以邏輯地址實際上就是段內偏移。
  • 線性地址:也叫虛擬地址,是邏輯地址轉換爲物理地址的中間層。跟邏輯地址的關係爲——在分段部件中邏輯地址是段中的偏移地址,然後加上基地址就是線性地址。線性地址的組成爲[頁目錄索引][頁表索引][物理偏移]
  • 物理地址:CPU地址總線上的地址。
    具體的轉換關係爲邏輯地址——線性地址——物理地址

3、進程的狀態有哪些

  • 就緒態:等待分配資源
  • 運行態:運行進程
  • 阻塞態:等待某種條件
    處於就緒態的進程,在分配到了處理機等資源後轉入運行態;
    處於運行態的進程,如果因爲時間片已輪轉完而被剝奪處理機,轉入就緒態;
    處於運行態的進程,如果因爲某種原因受阻,轉入阻塞態

4、進程和程序的區別和關係
程序是靜態的代碼,進程是動態的工作程序。程序和進程的關係等同於類與對象的關係。

5、進程間的通信方式

  • 管道(pipe)及命名管道(named pipe):管道可用於具有親緣關係的父子進程間的通信,有名管道除了具有管道所具有的功能外,它還允許無親緣關係進程間的通信;

  • 信號(signal):信號是一種比較複雜的通信方式,用於通知接收進程某個事件已經發生;

  • 消息隊列:消息隊列是消息的鏈接表,它克服了上兩種通信方式中信號量有限的缺點,具有寫權限得進程可以按照一定得規則向消息隊列中添加新信息;對消息隊列有讀權限得進程則可以從消息隊列中讀取信息;

  • 共享內存:可以說這是最有用的進程間通信方式。它使得多個進程可以訪問同一塊內存空間,不同進程可以及時看到對方進程中對共享內存中數據得更新。這種方式需要依靠某種同步操作,如互斥鎖和信號量等;

  • 信號量:主要作爲進程之間及同一種進程的不同線程之間得同步和互斥手段;

  • 套接字:這是一種更爲一般得進程間通信機制,它可用於網絡中不同機器之間的進程間通信,應用非常廣泛。

6、進程間同步
在多道程序環境下,進程是併發執行的,不同進程之間存在着不同的相互制約關係。
經典的進程同步問題:生產者-消費者問題;哲學家進餐問題;讀者-寫者問題
常見的進程同步解決方法:信號量Mutex和管程

7、死鎖是什麼?舉例說明

  • 通俗的闡述:多個進程互相阻塞,循環等待。
  • 產生死鎖通俗的原因是:對於共享互斥資源的爭用導致進程互相阻塞。
  • 舉例:進程1佔有資源1想要申請資源2,同時進程2佔有資源2想要申請1,均爲非搶佔式,進程12不會主動釋放資源12。

8、死鎖產生的條件有哪些?

  • 互斥:一個資源只能同時被一個進程佔用
  • 非搶佔式:資源只能由進程本身釋放,而不可被其他進程搶用
  • 請求保持:一個進程在申請資源同時,該資源已被佔用並保持不放
  • 循環等待:若干進程之間形成一種頭尾相接的循環等待資源的關係

9、解決死鎖的方法
銀行家算法:每次分配資源給進程之前,執行一次安全監測算法,查看按照此種分配方式整個系統是否處於安全狀態

10、中斷是什麼
中斷是指在程序運行過程中,遇到急需處理的事件時,暫時停止該程序,轉而去執行相應的事件處理程序,執行完畢之後再返回繼續執行之前的程序。
中斷分爲軟中斷和硬中斷,軟中斷是軟件實現的中斷,也就是程序運行時其他程序對它的中斷,如程序出錯(非法指令、地址越界);硬中斷是硬件實現的中斷,是程序運行時硬件設備對程序的中斷,如通常的磁盤中斷、打印機中斷。

11、中斷和異常的區別

  • 中斷是由CPU中某事件引起的,是外部原因。
  • 異常是由正在執行的現行指令引起的,例如除0,是自身原因。

12、系統調用是什麼,和中斷的關係是什麼

  • 系統調用是指當程序需要操作系統所提供的服務,轉入內核態去執行系統調用函數
  • 中斷輔助系統調用操作的完成:當需要執行系統調用時,發送一個軟中斷給系統,然後轉而去執行中斷處理程序,即執行系統調用

13、分段和分頁的區別

  • 分段是從用戶角度,從邏輯上將程序的地址空間劃分爲若干段(segment),如代碼段,數據段,堆棧段;不會產生內碎片(因爲段大小可變),會產生外碎片(比如4k的段換5k的段,會產生1k的外碎片)
  • 分頁是從系統角度,將程序的邏輯地址劃分爲固定大小的頁,提高內存的利用率。沒有外碎片(因爲頁的大小固定),但會產生內碎片(一個頁可能填充不滿)。

14、進程調度策略有哪些?
先了解兩個概念:

  • 週轉時間: 從開始申請執行任務,到執行任務完成
  • 響應時間: 從開始申請執行任務到開始執行任務

先來先服務調度算法FCFS:按作業或者進程到達的先後順序依次調度;(平均週轉時間可能會很長 )
短作業優先調度算法SJF:算法從就緒隊列中選擇估計時間最短的作業進行處理,直到得出結果或者無法繼續執行(週轉時間短,但是響應時間長 )
高相應比算法HRN:響應比=(等待時間+要求服務時間)/要求服務時間;

時間片輪轉調度RR:按到達的先後對進程放入隊列中,然後給隊首進程分配CPU時間片,時間片用完之後計時器發出中斷,暫停當前進程並將其放到隊列尾部,循環 ;(響應時間可以得到保證)

多級反饋隊列調度算法:目前公認較好的調度算法;設置多個就緒隊列併爲每個隊列設置不同的優先級,第一個隊列優先級最高,其餘依次遞減。優先級越高的隊列分配的時間片越短,進程到達之後按FCFS放入第一個隊列,如果調度執行後沒有完成,那麼放到第二個隊列尾部等待調度,如果第二次調度仍然沒有完成,放入第三隊列尾部…。只有當前一個隊列爲空的時候纔會去調度下一個隊列的進程。

15、頁面調度算法
物理內存可能比較小,不能同時放很多進程進來。解決思路:把要運行的代碼移到內存,暫時不用的代碼移入磁盤,內存置換。

  • 先進先出(FIFO)算法:總是最先淘汰最先進去的頁面,該算法容易實現。缺點:通常程序調入內存的先後順序和程序執行的先後順序不一致,導致缺頁率高。
  • LRU(Least recently use)最近最少使用算法:根據使用時間到現在的長短來判斷
  • LFU(Least frequently use)最少使用次數算法:根據使用次數來判斷
  • OPT(Optimal replacement)最優置換算法:理論最優;就是要保證置換出去的是不再被使用的頁,該算法無法實現,只能作爲其他算法好壞的一個評價對比。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章