當前位置:才華齋>計算機>作業系統>

作業系統面試題

作業系統 閱讀(1.22W)

不放過每一個知識點,尤其對容易混淆的東西要下更大工夫搞清楚,基礎要牢固,本站小編整理了一些作業系統試題給大家,希望對你有所幫助!

作業系統面試題

  1. 程序和執行緒的區別。

程序(Process):是作業系統分配資源的單位

執行緒(Thread):是程序的一個實體,是CPU排程和分派的基本單位

程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體。

同一程序內的執行緒間切換比程序間的切換要快,尤其是使用者級執行緒間的切換。

  2. 死鎖的必要條件,怎麼處理死鎖。

死鎖的必要條件:

互斥條件。某個資源在一段時間內只能由一個程序佔有,不能同時被兩個或兩個以上的程序佔有。

不可搶佔條件。程序所獲得的資源在未使用完畢之前,資源申請者不能強行地從資源佔有者手中奪取資源,而只能由該資源的佔有者程序自行釋放。

佔有且申請條件。程序至少已經佔有一個資源,但又申請新的資源;由於該資源已被另外程序佔有,此時該程序阻塞;但是,它在等待新資源之時,仍繼續佔用已佔有的資源。

迴圈等待條件。存在一個程序等待序列{P1,P2,...,Pn},其中P1等待P2所佔有的某一資源,P2等待P3所佔有的某一源,......,而Pn等待P1所佔有的的某一資源,形成一個程序迴圈等待環。

解決死鎖的方法:

死鎖的預防:基本思想是要求程序申請資源時遵循某種協議,從而打破產生死鎖的四個必要條件中的一個或幾個,保證系統不會進入死鎖狀態

死鎖的避免:不限制程序有關申請資源的命令,而是對程序所發出的每一個申請資源命令加以動態地檢查(是否有發生死鎖的可能性),並根據檢查結果決定是否進行資源分配。這種方法的關鍵是確定資源分配的安全性。(安全序列、銀行家演算法、 雖然存在安全序列時一定不會有死鎖發生,但是系統進入不安全狀態(四個死鎖的必要條件同時發生)也未必會產生死鎖。當然,產生死鎖後,系統一定處於不安全狀態)。

死鎖的檢測與恢復

  3. 記憶體管理方式:段儲存,頁儲存,段頁儲存。

頁儲存:使用者程式的地址空間被劃分成若干固定大小的區域,稱為“頁”,相應地,記憶體空間分成若干個物理塊,頁和塊的大小相等。可將使用者程式的任一頁放在記憶體的任一塊中,實現了離散分配。

段儲存:將使用者程式地址空間分成若干個大小不等的段,每段可以定義一組相對完整的邏輯資訊。儲存分配時,以段為單位,段與段在記憶體中可以不相鄰接,也實現了離散分配。

段頁儲存:分段式和分頁式結合的儲存組織方法,這樣可充分利用分段管理和分頁管理的優點。(1) 用分段方法來分配和管理虛擬儲存器。程式的地址空間按邏輯單位分成基本獨立的段,而每一段有自己的段名,再把每段分成固定大小的若干頁。(2) 用分頁方法來分配和管理實存。即把整個主存分成與上述頁大小相等的儲存塊,可裝入作業的任何一頁。程式對記憶體的調入或調出是按頁進行的,但它又可按段實現共享和保護。

  4. 程序的幾種狀態。

  5. IPC幾種通訊方式。

管道(pipe):管道包括三種:1)普通管道PIPE, 通常有種限制,一是半雙工,只能單向傳輸;二是隻能在父子程序間使用. 2)流管道s_pipe: 去除了第一種限制,可以雙向傳輸. 3)命名管道:name_pipe, 去除了第二種限制,可以在許多並不相關的程序之間進行通訊.

訊號量(semophore):訊號量是一種計數器,可以控制程序間多個執行緒或者多個程序對資源的同步訪問,它常實現為一種鎖機制。實質上,訊號量是一個被保護的變數,並且只能通過初始化和兩個標準的原子操作(P/V)來訪問。(P,V操作也常稱為wait(s),signal(s))

訊號(Signal):訊號是Unix系統中使用的最古老的程序間通訊的方法之一。作業系統通過訊號來通知某一程序發生了某一種預定好的事件;接收到訊號的程序可以選擇不同的方式處理該訊號,一是可以採用預設處理機制-程序中斷或退出,一是忽略該訊號,還有就是自定義該訊號的處理函式,執行相應的動作。核心為程序生產訊號,來響應不同的事件,這些事件就是訊號源。訊號源可以是:異常,其他程序,終端的中斷(Ctrl-C,Ctrl+等),作業的控制(前臺,後臺程序的管理等),分配額問題(cpu超時或檔案過大等),核心通知(例如I/O就緒等),報警(計時器)。

訊息佇列(Message Queue):訊息佇列就是訊息的一個連結串列,它允許一個或者多個程序向它寫訊息,一個或多個程序向它讀訊息。Linux維護了一個訊息佇列向量表:msgque,來表示系統中所有的訊息佇列。訊息佇列克服了訊號傳遞資訊少,管道只能支援無格式位元組流和緩衝區受限的缺點。

共享記憶體(shared memory):共享記憶體對映為一段可以被其他程序訪問的'記憶體。該共享記憶體由一個程序所建立,然後其他程序可以掛載到該共享記憶體中。共享記憶體是最快的IPC機制,但由於linux本身不能實現對其同步控制,需要使用者程式進行併發訪問控制,因此它一般結合了其他通訊機制實現了程序間的通訊,例如訊號量。

套接字(socket):socket也是一種程序間的通訊機制,不過它與其他通訊方式主要的區別是:它可以實現不同主機間的程序通訊。一個套介面可以看做是程序間通訊的端點(endpoint),每個套介面的名字是唯一的;其他程序可以訪問,連線和進行資料通訊。

  6. 什麼是虛擬記憶體。

虛擬記憶體:邏輯上不分內外存,實現了邏輯上的“擴存”。

虛擬儲存器具有請求調入、 置換功能,當所需要的頁面不再記憶體中時,就要執行頁面的請求調入演算法。

  7. 虛擬地址、邏輯地址、線性地址、實體地址的區別。

邏輯地址(虛擬地址):由程式產生的與段相關的偏移地址部分

線性地址:段中的偏移地址,加上相應段的基地址就生成了一個線性地址。如果啟用了分頁機制,那麼線性地址可以再經變換以產生一個實體地址。若沒有啟用分頁機制,那麼線性地址直接就是實體地址。

實體地址:在CPU外部地址總線上的定址實體記憶體的地址訊號,是地址變換的最終結果地址