操做系統常見面試題總結面試
1. 進程與線程的區別算法
(1) 粒度性分析:線程的粒度小於進程。安全
(2) 調度性分析:進程是資源擁有的基本單位,線程是獨立調度與獨立運行的基本單位,出了寄存器,程序計數器等必要的資源外基本不擁有其餘資源。socket
(3) 系統開銷分析:因爲線程基本不擁有系統資源,因此在進行切換時,線程切換的開銷遠遠小於進程。ide
2. 進程的狀態及其轉換性能
3. 進程同步與互斥的區別spa
互斥:是指某一資源同時只容許一個訪問者對其進行訪問,具備惟一性和排它性。但互斥沒法限制訪問者對資源的訪問順序,即訪問是無序的。操作系統
同步:是指在互斥的基礎上(大多數狀況),經過其它機制實現訪問者對資源的有序訪問。在大多數狀況下,同步已經實現了互斥,特別是全部寫入資源的狀況一定是互斥的。少數狀況是指能夠容許多個訪問者同時訪問資源。線程
簡單地說:同步體現的是一種協做性,互斥體現的是一種排他性。設計
4. 進程間的通訊方式有哪些?
(1) 管道( pipe ):管道是一種半雙工的通訊方式,數據只能單向流動,並且只能在具備親緣關係的進程間使用。進程的親緣關係一般是指父子進程關係。
(2)有名管道 (named pipe) : 有名管道也是半雙工的通訊方式,可是它容許無親緣關係進程間的通訊。
(3)信號量( semophore ) : 信號量是一個計數器,能夠用來控制多個進程對共享資源的訪問。它常做爲一種鎖機制,防止某進程正在訪問共享資源時,其餘進程也訪問該資源。所以,主要做爲進程間以及同一進程內不一樣線程之間的同步手段。
(4) 消息隊列( message queue ) : 消息隊列是由消息的鏈表,存放在內核中並由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩衝區大小受限等缺點。
(5)信號 ( sinal ) : 信號是一種比較複雜的通訊方式,用於通知接收進程某個事件已經發生。
(6)共享內存( shared memory ) :共享內存就是映射一段能被其餘進程所訪問的內存,這段共享內存由一個進程建立,但多個進程均可以訪問。共享內存是最快的 IPC 方式,它是針對其餘進程間通訊方式運行效率低而專門設計的。它每每與其餘通訊機制,如信號兩,配合使用,來實現進程間的同步和通訊。
(7)套接字( socket ) : 套解口也是一種進程間通訊機制,與其餘通訊機制不一樣的是,它可用於不一樣及其間的進程通訊。
5. 做業(或進程)的調度算法有哪些?
(1) 先來先服務(FCFS,First-Come-First-Served): 此算法的原則是按照做業到達後備做業隊列(或進程進入就緒隊列)的前後次序來選擇做業(或進程)。
(2) 短做業優先(SJF,Shortest Process Next):這種調度算法主要用於做業調度,它從做業後備隊列中挑選所需運行時間(估計值)最短的做業進入主存運行。
(3) 時間片輪轉調度算法(RR,Round-Robin):當某個進程執行的時間片用完時,調度程序便中止該進程的執行,並將它送就緒隊列的末尾,等待分配下一時間片再執行。而後把處理機分配給就緒隊列中新的隊首進程,同時也讓它執行一個時間片。這樣就能夠保證就緒隊列中的全部進程,在一給定的時間內,均能得到一時間片處理機執行時間。
(4) 高響應比優先(HRRN,Highest Response Ratio Next): 按照高響應比((已等待時間+要求運行時間)/ 要求運行時間)優先的原則,在每次選擇做業投入運行時,先計算此時後備做業隊列中每一個做業的響應比RP而後選擇其值最大的做業投入運行。
(5) 優先權(Priority)調度算法: 按照進程的優先權大小來調度,使高優先權進程獲得優先處理的調度策略稱爲優先權調度算法。注意:優先數越多,優先權越小。
(6) 多級隊列調度算法:多隊列調度是根據做業的性質和類型的不一樣,將就緒隊列再分爲若干個子隊列,全部的做業(或進程)按其性質排入相應的隊列中,而不一樣的就緒隊列採用不一樣的調度算法。
6. 死鎖產生的緣由,死鎖產生的必要條件是什麼,如何預防死鎖,如何避免死鎖,死鎖定理?
死鎖產生的緣由:(1)競爭資源;(2)進程推動順序不當。
死鎖產生的必要條件:
(1)互斥條件:一個資源一次只能被一個進程所使用,便是排它性使用。
(2)不剝奪條件:一個資源僅能被佔有它的進程所釋放,而不能被別的進程強佔。
(3)請求與保持條件:進程已經保持了至少一個資源,但又提出了新的資源要求,而該資源又已被其它進程佔有,此時請求進程阻塞,但又對已經得到的其它資源保持不放。
(4)環路等待條件:當每類資源只有一個時,在發生死鎖時,必然存在一個進程-資源的環形鏈。
預防死鎖:破壞四個必要條件之一。
死鎖的避免:銀行家算法,該方法容許進程動態地申請資源,系統在進行資源分配以前,先計算資源分配的安全性。若這次分配不會致使系統從安全狀態向不安全狀態轉換,即可將資源分配給進程;不然不分配資源,進程必須阻塞等待。從而避免發生死鎖。
死鎖定理:S爲死鎖狀態的充分條件是:尚且僅當S狀態的資源分配圖是不可徹底簡化的,該充分條件稱爲死鎖定理。
死鎖的解除:
(1) 方法1:強制性地從系統中撤消一個或多個死鎖的進程以斷開循環等待鏈,並收回分配給終止進程的所有資源供剩下的進程使用。
(2) 方法2:使用一個有效的掛起和解除機構來掛起一些死鎖的進程,其實質是從被掛起的進程那裏搶佔資源以解除死鎖。
7. 分段式存儲管理、分頁式存儲管理,兩個的區別?
分段式存儲管理:分頁存儲管理是將一個進程的地址(邏輯地址空間)空間劃分紅若干個大小相等的區域,稱爲頁,相應地,將內存空間劃分紅與頁相同大小(爲了保證頁內偏移一致)的若干個物理塊,稱爲塊或頁框(頁架)。在爲進程分配內存時,將進程中的若干頁分別裝入多個不相鄰接的塊中。
分頁式存儲管理:在分段存儲管理方式中,做業的地址空間被劃分爲若干個段,每一個段是一組完整的邏輯信息,若有主程序段、子程序段、數據段及堆棧段等,每一個段都有本身的名字,都是從零開始編址的一段連續的地址空間,各段長度是不等的。
二者的區別:
1.頁是信息的物理單位,分頁是爲了實現非連續的分配,以便解決內存的碎片問題,或者說分頁是爲了因爲系統管理的須要。
2.頁的大小固定是由系統肯定的,將邏輯地址劃分爲頁號和頁內地址是由機器硬件實現的。而段的長度是不固定的,決定與用戶的程序長度,一般由編譯程序進行編譯時根據信息的性質來劃分。
3.分頁式存儲管理的做業地址空間是一維的,分段式的存儲管理的做業管理地址空間是二維的。
8. 頁面置換算法有哪些?
(1) 最佳置換算法(Optimal):即選擇那些永不使用的,或者是在最長時間內再也不被訪問的頁面置換出去。(它是一種理想化的算法,性能最好,但在實際上難於實現)。
(2) 先進先出置換算法FIFO:該算法老是淘汰最早進入內存的頁面,即選擇在內存中駐留時間最久的頁面予以淘汰。
(3) 最近最久未使用置換算法LRU(Least Recently Used):該算法是選擇最近最久未使用的頁面予以淘汰,系統在每一個頁面設置一個訪問字段,用以記錄這個頁面自上次被訪問以來所經歷的時間T,當要淘汰一個頁面時,選擇T最大的頁面。
(4) Clock置換算法:也叫最近未用算法NRU(Not RecentlyUsed)。該算法爲每一個頁面設置一位訪問位,將內存中的全部頁面都經過連接指針鏈成一個循環隊列。當某頁被訪問時,其訪問位置「1」。在選擇一頁淘汰時,就檢查其訪問位,若是是「0」,就選擇該頁換出;若爲「1」,則從新置爲「0」,暫不換出該頁,在循環隊列中檢查下一個頁面,直到訪問位爲「0」的頁面爲止。因爲該算法只有一位訪問位,只能用它表示該頁是否已經使用過,而置換時是將未使用過的頁面換出去,因此把該算法稱爲最近未用算法。
(5) 最少使用置換算法LFU:該算法選擇最近時期使用最少的頁面做爲淘汰頁。