1. 程式人生 > >面試小結一:關於作業系統的面試題整理

面試小結一:關於作業系統的面試題整理

以下是我最近參加的一些面試,覺得有價值的與作業系統相關的面試題,答案都不唯一,都是摘自CSDN博文。

(一)程序和執行緒的區別:
1.定義
程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位.

執行緒是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬一個程序的其他的執行緒共享程序所擁有的全部資源.
2.關係
一個執行緒可以建立和撤銷另一個執行緒;同一個程序中的多個執行緒之間可以併發執行.
相對程序而言,執行緒是一個更加接近於執行體的概念,它可以與同進程中的其他執行緒共享資料,但擁有自己的棧空間,擁有獨立的執行序列。
3.區別
程序和執行緒的主要差別在於它們是不同的作業系統資源管理方式。程序有獨立的地址空間,一個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是一個程序中的不同執行路徑。執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的地址空間,一個執行緒死掉就等於整個程序死掉,所以多程序的程式要比多執行緒的程式健壯,但在程序切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變數的併發操作,只能用執行緒,不能用程序。

1) 簡而言之,一個程式至少有一個程序,一個程序至少有一個執行緒.

2) 執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。

3) 另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。

4) 執行緒在執行過程中與程序還是有區別的。每個獨立的執行緒有一個程式執行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

5) 從邏輯角度來看,多執行緒的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現程序的排程和管理以及資源分配。這就是程序和執行緒的重要區別。
4.優缺點
執行緒和程序在使用上各有優缺點:執行緒執行開銷小,但不利於資源的管理和保護;而程序正相反。同時,執行緒適合於在SMP機器上執行,而程序則可以跨機器遷移。

(二)作業系統中的死鎖是什麼?

當一個程序想要申請資源A,擁有資源B,而另一個程序想申請資源B,但是擁有資源A,那麼就會產生死鎖。
訊號量本身就是個資源,有一定數量。資源分為很多很多,如記憶體空間,CPU週期,I/O裝置等,每個資源有一定數量的資源例項。
資源和訊號量一樣,有等待佇列,當一個程序想要申請資源,但需要其他程序釋放此資源,則進入該資源的等待佇列。

死鎖的必要條件:
1.互斥。即資源不能被多個程序所佔有。這點其實除了只讀檔案,其他基本都滿足。
2.佔有並等待:A程序佔有一些資源,還需要的一些資源被其他程序佔有,所以處在等待狀態。
3.非搶佔:資源不能被中途搶佔。
4.迴圈等待:{P0,P1,P2….}程序佇列,P0等待P1佔用的資源,類似。

(三)幾個常用的作業系統程序排程演算法 :
一、先來先服務和短作業(程序)優先排程演算法

1.先來先服務排程演算法

先來先服務(FCFS)排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程,也可用於程序排程。在程序排程中採用FCFS演算法時,則每次排程是從就緒佇列中選擇一個最先進入該佇列的程序,為之分配處理機,使之投入執行。該程序一直執行到完成或發生某事件而阻塞後才放棄處理機。

2.短作業(程序)優先排程演算法

短作業(程序)優先排程演算法SJ(P)F,是指對短作業或短程序優先排程的演算法。它們可以分別用於作業排程和程序排程。短作業優先(SJF)的排程演算法是從後備佇列中選擇一個或若干個估計執行時間最短的作業,將它們調入記憶體執行。而短程序優先(SPF)排程演算法則是從就緒佇列中選出一個估計執行時間最短的程序,將處理機分配給它,使它立即執行並一直執行到完成,或發生某事件而被阻塞放棄處理機時再重新排程。

二、高優先權優先排程演算法

1.優先權排程演算法的型別

為了照顧緊迫型作業,使之在進入系統後便獲得優先處理,引入了最高優先權優先(FPF)排程演算法。此演算法常被用於批處理系統中,作為作業排程演算法,也作為多種作業系統中的程序排程演算法,還可用於實時系統中。當把該演算法用於作業排程時,系統將從後備佇列中選擇若干個優先權最高的作業裝入記憶體。當用於程序排程時,該演算法是把處理機分配給就緒佇列中優先權最高的程序,這時,又可進一步把該演算法分成如下兩種。

1) 非搶佔式優先權演算法

在這種方式下,系統一旦把處理機分配給就緒佇列中優先權最高的程序後,該程序便一直執行下去,直至完成;或因發生某事件使該程序放棄處理機時,系統方可再將處理機重新分配給另一優先權最高的程序。這種排程演算法主要用於批處理系統中;也可用於某些對實時性要求不嚴的實時系統中。

2) 搶佔式優先權排程演算法

在這種方式下,系統同樣是把處理機分配給優先權最高的程序,使之執行。但在其執行期間,只要又出現了另一個其優先權更高的程序,程序排程程式就立即停止當前程序(原優先權最高的程序)的執行,重新將處理機分配給新到的優先權最高的程序。因此,在採用這種排程演算法時,是每當系統中出現一個新的就緒程序i 時,就將其優先權Pi與正在執行的程序j 的優先權Pj進行比較。如果Pi≤Pj,原程序Pj便繼續執行;但如果是Pi>Pj,則立即停止Pj的執行,做程序切換,使i 程序投入執行。顯然,這種搶佔式的優先權排程演算法能更好地滿足緊迫作業的要求,故而常用於要求比較嚴格的實時系統中,以及對效能要求較高的批處理和分時系統中。

2.高響應比優先排程演算法

在批處理系統中,短作業優先演算法是一種比較好的演算法,其主要的不足之處是長作業的執行得不到保證。如果我們能為每個作業引入前面所述的動態優先權,並使作業的優先順序隨著等待時間的增加而以速率a 提高,則長作業在等待一定的時間後,必然有機會分配到處理機。該優先權的變化規律可描述為:
作業系統
由於等待時間與服務時間之和就是系統對該作業的響應時間,故該優先權又相當於響應比RP。據此,又可表示為:
作業系統
由上式可以看出:

(1) 如果作業的等待時間相同,則要求服務的時間愈短,其優先權愈高,因而該演算法有利於短作業。

(2) 當要求服務的時間相同時,作業的優先權決定於其等待時間,等待時間愈長,其優先權愈高,因而它實現的是先來先服務。

(3) 對於長作業,作業的優先順序可以隨等待時間的增加而提高,當其等待時間足夠長時,其優先順序便可升到很高,從而也可獲得處理機。簡言之,該演算法既照顧了短作業,又考慮了作業到達的先後次序,不會使長作業長期得不到服務。因此,該演算法實現了一種較好的折衷。當然,在利用該演算法時,每要進行排程之前,都須先做響應比的計算,這會增加系統開銷。

三、基於時間片的輪轉排程演算法

1.時間片輪轉法

1) 基本原理

在早期的時間片輪轉法中,系統將所有的就緒程序按先來先服務的原則排成一個佇列,每次排程時,把CPU 分配給隊首程序,並令其執行一個時間片。時間片的大小從幾ms 到幾百ms。當執行的時間片用完時,由一個計時器發出時鐘中斷請求,排程程式便據此訊號來停止該程序的執行,並將它送往就緒佇列的末尾;然後,再把處理機分配給就緒佇列中新的隊首程序,同時也讓它執行一個時間片。這樣就可以保證就緒佇列中的所有程序在一給定的時間內均能獲得一時間片的處理機執行時間。換言之,系統能在給定的時間內響應所有使用者的請求。

2.多級反饋佇列排程演算法

前面介紹的各種用作程序排程的演算法都有一定的侷限性。如短程序優先的排程演算法,僅照顧了短程序而忽略了長程序,而且如果並未指明程序的長度,則短程序優先和基於程序長度的搶佔式排程演算法都將無法使用。而多級反饋佇列排程演算法則不必事先知道各種程序所需的執行時間,而且還可以滿足各種型別程序的需要,因而它是目前被公認的一種較好的程序排程演算法。在採用多級反饋佇列排程演算法的系統中,排程演算法的實施過程如下所述。

(1) 應設定多個就緒佇列,併為各個佇列賦予不同的優先順序。第一個佇列的優先順序最高,第二個佇列次之,其餘各佇列的優先權逐個降低。該演算法賦予各個佇列中程序執行時間片的大小也各不相同,在優先權愈高的佇列中,為每個程序所規定的執行時間片就愈小。例如,第二個佇列的時間片要比第一個佇列的時間片長一倍,……,第i+1個佇列的時間片要比第i個佇列的時間片長一倍。

(2) 當一個新程序進入記憶體後,首先將它放入第一佇列的末尾,按FCFS原則排隊等待排程。當輪到該程序執行時,如它能在該時間片內完成,便可準備撤離系統;如果它在一個時間片結束時尚未完成,排程程式便將該程序轉入第二佇列的末尾,再同樣地按FCFS原則等待排程執行;如果它在第二佇列中執行一個時間片後仍未完成,再依次將它放入第三佇列,……,如此下去,當一個長作業(程序)從第一佇列依次降到第n佇列後,在第n 佇列便採取按時間片輪轉的方式執行。

(3) 僅當第一佇列空閒時,排程程式才排程第二佇列中的程序執行;僅當第1~(i-1)佇列均空時,才會排程第i佇列中的程序執行。如果處理機正在第i佇列中為某程序服務時,又有新程序進入優先權較高的佇列(第1~(i-1)中的任何一個佇列),則此時新程序將搶佔正在執行程序的處理機,即由排程程式把正在執行的程序放回到第i佇列的末尾,把處理機分配給新到的高優先權程序。

相關推薦

面試小結關於作業系統試題整理

以下是我最近參加的一些面試,覺得有價值的與作業系統相關的面試題,答案都不唯一,都是摘自CSDN博文。 (一)程序和執行緒的區別: 1.定義 程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位. 執行緒

2018年5-7月面試經歷總結阿里試題

第一輪:電話初面 第二輪:技術面談【技術職位儘量避免多談管理上的工作】 第三輪:高管複試 第四輪:HR最後確認 一面:首先確認對阿里的意向度(如果異地更會考慮對工作地點(杭州)的意向度!阿里很看重這個);其次面試官一般會針對您所做過的專案來做具體技術的交流,會比較

八年面試生涯,整理套Kafka試題

  1.Kafka 的設計時什麼樣的呢? Kafka 將訊息以 topic 為單位進行歸納 將向 Kafka

JAVA筆記多線程試題整理

java 分布式 編程語言 程序員 面試 多線程有幾種實現方案,分別是哪幾種??? 三種。繼承Thread類實現Runnable接口:Java不支持類的多重繼承,但允許你調用多個接口。所以如果你要繼承其他類,當然是調用Runnable接口好了。線程與進程的區別??? 線程是進程的子集,一個

大廠面試必備css試題彙總

小夥伴們,前幾天的css面試題彙總大全看的怎麼樣呢,今天,繼續來更新最後一彈,咱們閒言少敘,進入正題。 如果有想一起學習web前端,HTML5及JavaScript的可以來一下我的前端群:733581373,好友都會在裡面交流,分享一些學習的方法和需要注意的小細節,每天也會準時的講

面試第一家公司的試題及答案(

1.談談對跨域的理解,怎麼處理跨域? 簡單的理解:瀏覽器或者JavaScript說處於安全方面的考慮,對同源策略的限制。 處理的方法一:porxy代理 通過同域名的web伺服器建立一個代理,比如說杭州的伺服器後臺(www.hangzhou.com/porxy-hangzho

Android試題整理(源自鴻洋大神公眾號【201803】的篇BAT試題推送)

三月,想必各位程式設計師GG 此刻想要的,莫過於一篇面試寶典。鄙人不才,也從未系統的刷過面試題,以鴻洋大哥一篇面試題為引,略加整理,希望能幫到各位不知道看什麼小夥伴。(大部分知識都是有答案的). 原文連結: [https://mp.weixin.qq.com/s/p3l9wr4DX9

Linux運維工程師30道試題整理

11.Linux 系統的開機啟動順序 載入 BIOS–>讀取 MBR–>Boot Loader–>載入核心–>使用者層 init 一句 inittab 檔案來設定系統執行的等級(一般 3 或者 5,3 是多使用者命令列,5 是介面)–>init 程序執行 rc.syninit

【JAVA面試】java試題整理(1)

                                       java面試題整理(1) JAVA常考點總結1 目錄

【JAVA面試】java試題整理(2)

                                           java面試題整理(2) JAVA常考點總結2 目錄 1、

【JAVA面試】java試題整理(3)

                                     java面試題整理(3) JAVA常考點3 目錄 1. 講下JAVA的執行時區域 回答:執行時資料區整體分為兩類 執行緒私有和執行

【JAVA面試】java試題整理(4)

                                           java面試題整理(4) JAVA常考點4 目錄 Set集合如何保證不重複 弄清怎麼個邏輯達到元素不重複的,原始碼先上

Java試題整理(反射)

問題:簡述Java中的反射使用 答: 1.作用: 可以通過配置檔案來動態配置和載入類,以實現軟體工程理論裡所提及的類與類,模組與模組之間的解耦。反射最經典的應用是spring框架。 2. 定義 反射簡單來說,就是動態載入物件,並對物件進行剖析。在Java中的反射機制是指在執

java試題整理面試遇到的,暫無答案)

hashMap的key可以為null嗎?springmvc的處理機制? 要超詳細的hashMap的資料結構;put方法的過程;舉例說明其他的資料結構樂觀鎖、悲觀鎖讀寫分離怎麼實現springmvc的事務

試題整理學習(三)Git常用命令整理

原文連結:點選開啟連結,整理非常的全面,表示感謝 一般來說,日常使用只要記住下圖6個命令,就可以了。但是熟練使用,恐怕要記住60~100個命令。 下面是我整理的常用 Git 命令清單。幾個專用名詞的譯名如下。 Workspace:工作區 Index / Sta

試題)——網際網路公司試題整理

百度移動遊戲 1.ArrayList和LinkedList區別 2.HashMap實現原理,內部構造,JDK1.8的實現 3.如何設計資料庫 4.JVM堆為什麼分成年輕代和老年代 5.ConcurrentHashMap原理 6.一個方法中定義一個in

Linux運維工程師試題整理

11.Linux系統的開機啟動順序 載入BIOS–>讀取MBR–>Boot Loader–>載入核心–>使用者層init一句inittab檔案來設定系統執行的等級(一般3或者5,3是多使用者命令列,5是介面)–>init程序執行rc.syninit–>啟動核心模組

Android--試題整理

1. 什麼是Activity? 四大元件之一,一般的,一個使用者互動介面對應一個activity setContentView() ,// 要顯示的佈局 , activity 是Context的子類,同時實現了window.callback和keyevent.callb

Java面試技巧Java試題集錦(二)

2.1 HashMap和Hashtable的區別。   HashMap是Hashtable的輕量級實現(非執行緒安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非執行緒安全,效率上可能高於Hashtable.   

Hadoop試題整理

        lucene是支援隨機讀寫的,而hdfs只支援隨機讀。但是HBase可以來補救。HBase提供隨機讀寫,來解決Hadoop不能處理的問題。HBase自底層設計開始即聚焦於各種可伸縮性問題:表可以很“高”,有數十億個資料行;也可以很“寬”,有數百萬個列;水平分割槽並在上千個普通商用機節點上自動複