首頁  >  文章  >  作業系統面試高頻考點

作業系統面試高頻考點

嵌入式Linux充电站
嵌入式Linux充电站轉載
2023-07-31 16:23:071222瀏覽
作業系統面試高頻考點

1、行程與執行緒的差異

  • ##行程是資源分配的最小單位,執行緒是CPU調度的基本單位。
  • 程式擁有獨立的位址空間,執行緒沒有獨立的位址空間,但擁有獨立的堆疊和局部變數。
  • 在多進程和多執行緒中,多進程比多執行緒更健狀。由於行程擁有獨立的位址空間,所以一個行程異常結束時,不會影響到其它進程;執行緒沒有獨立的位址空間,當執行緒異常結束時,可能會影響到其它執行緒。
  • 建立進程的開銷比建立執行緒的開銷大;進程上下文切換的開銷比執行緒上下文切換開銷大。

2、進程間通訊的方式有哪些

  • #。管道
    :(1)無名管道:用於具有親緣關係的進程間通信,以位元組流的形式。 (2)有名管道:打破了情緣關係的界限,使兩個不​​相干的進程用管道通信,以字節流的形式。
  • 訊息佇列
    :資料以區塊的方式傳輸,但要把資料從使用者空間往內核空間拷貝,開銷大。
  • 共享記憶體:存在資源競爭的問題
  • 訊號:非同步通訊
  • 信號量:同步互斥
  • #socket通訊:實作兩台電腦間的通信。

3、進程調度演算法

  • 先來先服務調度演算法;依照入隊的先後順序一個行程一個行程的執行
  • #最短作業優先排程演算法;優先選擇運行時間最短的行程執行
  • 高響應比優先調度演算法;進程調度時,先計算響應比優先權,然後選則響應比優先級最高的進程運行
  • 時間片輪換調度演算法;每個進程能運行的時間是一樣的,進程根據時間片輪流運行
  • #最高優先權調度演算法
  • ;選擇優先權最高的程序
  • 多級回饋佇列調度演算法
  • ;設定多層佇列,佇列優先權從高到底、時間片從小到大

4、孤兒進程是什麼

##(1)父程式先於子進程結束,此時子進程成為孤兒進程。 ###

(2)Linux系統規定:所有孤兒進程都成為一個特殊進程(進程1,也就是init進程)的子進程。

5、多執行緒同步機制有哪些

  • #互斥量
  • 讀寫鎖定
  • 條件變數
  • 訊號量
  • ##自旋鎖定

#6、簡述進程記憶體分區

作業系統面試高頻考點
  • 核心空間:存放作業系統程式碼與資料
  • 堆疊區:存放局部變數、函數的參數值等,該區域由作業系統控制
  • 動態庫/共享記憶體映射區:可執行程式運行依賴的動態庫載入在該區域;mmap映射的共享記憶體也在該區域
  • 堆區:提供給程式設計師自行操作的記憶體區域,malloc/free和new/delete操作的就是這塊記憶體
  • 可讀寫資料區
    #

(1).bss段:儲存未初始化的、初始化為0的全域變數和靜態變數。

(2).data段:儲存初始化不為0的全域變數與靜態變數、const型常數。

  • 只讀資料區:存放二進位程式碼、一些const修飾變數、字串常數等

7、記憶體碎片

  • 如何產生記憶體碎片

程式設計師在程式中用malloc向虛擬內存的堆空間動態申請內存,用free釋放內存。如果程式存在大量的malloc/free操作且長時間運行,則虛擬記憶體的堆空間很容易產生記憶體碎片

  • #什麼是記憶體碎片

#記憶體碎片是指堆空間剩餘很多離散的空閒內存,但不能滿足malloc的分配請求。記憶體碎片分為外部碎片和內部碎片。下圖描述了部分堆空間的記憶體分配情況,將堆空間以4位元組為單位劃分為許多分配區塊,白色區塊表示空閒內存,淺藍色和深藍色區塊表示已分配的記憶體。假設記憶體分配的最小單位是一個分配塊(4位元組)。

  1. 外部碎片:由於堆空間中不存在連續4個分配區塊大小的空閒記憶體(白色區塊),但有許多離散的、小於4個分配區塊大小的空閒記憶體。所以當malloc(16)申請16位元組時會分配失敗,原因是沒有連續4個分配區塊的空閒內存,但有小於4個分配區塊的空閒內存,這些記憶體稱為外部碎片
  2. 內部碎片:由於分配記憶體的最小單位是一個分配區塊(4位元組),所以當malloc(5)申請5位元組時,堆空間分配兩個空閒區塊共8字節,但程式只需要5字節,剩餘的3位元組(深藍色)沒用到,這3位元組記憶體稱為內部碎片
作業系統面試高頻考點

8、堆疊和堆疊的差別?

  • 分配方式不同

#堆疊:由系統自動分配

#堆疊:由程式設計師手動申請

  • 申請大小不同

#堆疊:堆疊區的記憶體大小是固定的,只要申請的記憶體小於棧區剩餘的內存,就可以分配成功,否則棧會溢位。

堆:堆區的記憶體大小是由電腦的虛擬記憶體決定的,

9、互斥鎖與信號量的差異

(1)信號量用於執行緒同步,互斥鎖用於執行緒互斥。

(2)訊號量可以為非負整數,可以實現多個同類資源的多執行緒同步;互斥鎖只能為0/1,只能用於一個資源的互斥存取。

(3)信號量可以由一個執行緒釋放,另一個執行緒得到;互斥鎖的加鎖和解鎖必須由同一執行緒分別對應使用,並且多個執行緒使用多個互斥鎖必須注意統一順序,否則可能造成死鎖。

10、同步與非同步的區別

  • #同步:A呼叫B,必須等B處理結束後返回,A才能繼續往下執行
  • 非同步:A呼叫B,不用等B處理結束,A可以繼續往下執行,等B處理結束後透過回呼等方式通知A

#11、死鎖

什麼是死鎖?產生死鎖的原因是什麼?

(1)死鎖是指多個進程因競爭資源而造成的一種僵局(互相等待),若無外力作用,這些進程將無法向前推進。

(2)原因:①系統資源不足。 ②資源分配不當。 ③進程推進的順序不合適

死鎖的四個必要條件是什麼?

(1)互斥條件:一個資源每次只能被一個行程使用,其他行程只能等待。

(2)請求與保持條件:進程已經獲得至少一個資源,但又提出了新的資源請求,而該資源已被其他進程佔有,此時該進程被阻塞,但對已獲得資源仍保持不放。

(3)不可剝奪條件:進程所獲得的資源不能被其他行程剝奪,只能被自己釋放。

(4)循環等待條件:若干進程形成首尾相接循環等待資源的關係。

注意:以上四個條件缺一不可。

死鎖的處理方法?

(1)預防死鎖:透過設定一些限制條件,去破壞產生死鎖的必要條件。

(2)避免死鎖:在資源分配過程中,使用某種方法避免系統進入不安全的狀態,從而避免發生死鎖。

(3)偵測並解除死鎖:允許死鎖的發生,但透過系統的偵測之後,採取一些措施,將死鎖清除掉。

怎麼預防死鎖?

(1)破壞「請求與保持條件」

①靜態分配,即每個進程在開始執行時就申請它所需要的全部資源:

②動態分配,即每個進程在申請所需的資源時它本身不佔用系統資源。

(2)破壞「不可剝奪條件」:一個進程在阻塞等待期間,其占有的資源被隱式釋放後被其他進程使用,而阻塞等待的資源只有獲得所有需要的資源才能重新啟動。

(3)破壞「循環等待條件」:採用資源的有序分配,將所有資源進行編號,緊缺的資源採用 比較大的編號,一個行程只有獲得較小編號的資源才可以申請較大編號的資源

以上是作業系統面試高頻考點的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:嵌入式Linux充电站。如有侵權,請聯絡admin@php.cn刪除