作業系統面試題及答案

  許多面試作業系統方面的使用者經常在面試的時候遇到很多問題,下面由小編為大家整理了,希望對大家有幫助。

  一

  1、什麼是程序***Process***和執行緒***Thread***?有何區別?

  程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位。執行緒是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位。執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源***如程式計數器,一組暫存器和棧***,但是它可與同屬一個程序的其他的執行緒共享程序所擁有的全部資源。一個執行緒可以建立和撤銷另一個執行緒,同一個程序中的多個執行緒之間可以併發執行。

  程序與應用程式的區別在於應用程式作為一個靜態檔案儲存在計算機系統的硬碟等儲存空間中,而程序則是處於動態條件下由作業系統維護的系統資源管理實體。

  2、Windows下的記憶體是如何管理的?

  Windows提供了3種方法來進行記憶體管理:虛擬記憶體,最適合用來管理大型物件或者結構陣列;記憶體對映檔案,最適合用來管理大型資料流***通常來自檔案***以及在單個計算機上執行多個程序之間共享資料;記憶體堆疊,最適合用來管理大量的小物件。

  Windows操縱記憶體可以分兩個層面:實體記憶體和虛擬記憶體。

  其中實體記憶體由系統管理,不允許應用程式直接訪問,應用程式可見的只有一個2G地址空間,而記憶體分配是通過堆進行的。對於每個程序都有自己的預設堆,當一個堆建立後,就通過虛擬記憶體操作保留了相應大小的地址塊***不佔有實際的記憶體,系統消耗很小***。當在堆上分配一塊記憶體時,系統在堆的地址表裡找到一個空閒塊***如果找不到,且堆建立屬性是可擴充的,則擴充堆大小***,為這個空閒塊所包含的所有記憶體頁提交物理物件***在實體記憶體上或硬碟的交換檔案上***,這時就可以訪問這部分地址。提交時,系統將對所有程序的記憶體統一調配,如果實體記憶體不夠,系統試圖把一部分程序暫時不訪問的頁放入交換檔案,以騰出部分實體記憶體。釋放記憶體時,只在堆中將所在的頁解除提交***相應的物理物件被解除***,繼續保留地址空間。

  如果要知道某個地址是否被佔用/可不可以訪問,只要查詢此地址的虛擬記憶體狀態即可。如果是提交,則可以訪問。如果僅僅保留,或沒保留,則產生一個軟體異常。此外,有些記憶體頁可以設定各種屬性。如果是隻讀,向記憶體寫也會產生軟體異常。

  3、Windows訊息排程機制是?

  A***指令佇列;B***指令堆疊;C***訊息佇列;D***訊息堆疊

  答案:C

  處理訊息佇列的順序。首先Windows絕對不是按佇列先進先出的次序來處理的,而是有一定優先順序的。優先順序通過訊息佇列的狀態標誌來實現的。首先,最高優先順序的是別的執行緒發過來的訊息***通過sendmessage***;其次,處理登記訊息佇列訊息;再次處理QS_QUIT標誌,處理虛擬輸入佇列,處理wm_paint;最後是wm_timer。

  4、描述實時系統的基本特性

  在特定時間內完成特定的任務,實時性與可靠性。

  所謂“實時作業系統”,實際上是指作業系統工作時,其各種資源可以根據需要隨時進行動態分配。由於各種資源可以進行動態分配,因此,其處理事務的能力較強、速度較快。

  5、中斷和輪詢的特點

  對I/O裝置的程式輪詢的方式,是早期的計算機系統對I/O裝置的一種管理方式。它定時對各種裝置輪流詢問一遍有無處理要求。輪流詢問之後,有要求的,則加以處理。在處理I/O裝置的要求之後,處理機返回繼續工作。儘管輪詢需要時間,但輪詢要比I/O裝置的速度要快得多,所以一般不會發生不能及時處理的問題。當然,再快的處理機,能處理的輸入輸出裝置的數量也是有一定限度的。而且,程式輪詢畢竟佔據了CPU相當一部分處理時間,因此,程式輪詢是一種效率較低的方式,在現代計算機系統中已很少應用。

  程式中斷通常簡稱中斷,是指CPU在正常執行程式的過程中,由於預先安排或發生了各種隨機的內部或外部事件,使CPU中斷正在執行的程式,而轉到為響應的服務程式去處理。

  輪詢——效率低,等待時間很長,CPU利用率不高。

  中斷——容易遺漏一些問題,CPU利用率高。

  6、什麼是臨界區?如何解決衝突?

  每個程序中訪問臨界資源的那段程式稱為臨界區,每次只准許一個程序進入臨界區,進入後不允許其他程序進入。

  ***1***如果有若干程序要求進入空閒的臨界區,一次僅允許一個程序進入;

  ***2***任何時候,處於臨界區內的程序不可多於一個。如已有程序進入自己的臨界區,則其它所有試圖進入臨界區的程序必須等待;

  ***3***進入臨界區的程序要在有限時間內退出,以便其它程序能及時進入自己的臨界區;

  ***4***如果程序不能進入自己的臨界區,則應讓出CPU,避免程序出現“忙等”現象。

  7、說說分段和分頁

  頁是資訊的物理單位,分頁是為實現離散分配方式,以消減記憶體的外零頭,提高記憶體的利用率;或者說,分頁僅僅是由於系統管理的需要,而不是使用者的需要。

  段是資訊的邏輯單位,它含有一組其意義相對完整的資訊。分段的目的是為了能更好的滿足使用者的需要。

  頁的大小固定且由系統確定,把邏輯地址劃分為頁號和頁內地址兩部分,是由機器硬體實現的,因而一個系統只能有一種大小的頁面。段的長度卻不固定,決定於使用者所編寫的程式,通常由編輯程式在對源程式進行編輯時,根據資訊的性質來劃分。

  分頁的作業地址空間是一維的,即單一的線性空間,程式設計師只須利用一個記憶符,即可表示一地址。分段的作業地址空間是二維的,程式設計師在標識一個地址時,既需給出段名,又需給出段內地址。

  8、說出你所知道的保持程序同步的方法?

  程序間同步的主要方法有原子操作、訊號量機制、自旋鎖、管程、會合、分散式系統等。

  9、Linux中常用到的命令

  顯示檔案目錄命令ls 如ls

  改變當前目錄命令cd 如cd /home

  建立子目錄mkdir 如mkdir xiong

  刪除子目錄命令rmdir 如rmdir /mnt/cdrom

  刪除檔案命令rm 如rm /ucdos.bat

  檔案複製命令cp 如cp /ucdos /fox

  獲取幫助資訊命令man 如man ls

  顯示檔案的內容less 如less mwm.lx

  重定向與管道type 如type readme>>direct,將檔案readme的內容追加到文direct中

  10、linux檔案屬性有哪些?***共十位***

  -rw-r--r--那個是許可權符號,總共是- --- --- ---這幾個位。

  第一個短橫處是檔案型別識別符:-表示普通檔案;c表示字元裝置***character***;b表示塊裝置***block***;d表示目錄***directory***;l表示連結檔案***link***;後面第一個三個連續的短橫是使用者許可權位***User***,第二個三個連續短橫是組許可權位***Group***,第三個三個連續短橫是其他許可權位***Other***。每個許可權位有三個許可權,r***讀許可權***,w***寫許可權***,x***執行許可權***。如果每個許可權位都有許可權存在,那麼滿許可權的情況就是:-rwxrwxrwx;許可權為空的情況就是- --- --- ---。

  許可權的設定可以用chmod命令,其格式位:chmod ugoa+/-/=rwx filename/directory。例如:

  一個檔案aaa具有完全空的許可權- --- --- ---。

  chmod u+rw aaa***給使用者許可權位設定讀寫許可權,其許可權表示為:- rw- --- ---***

  chmod g+r aaa***給組設定許可權為可讀,其許可權表示為:- --- r-- ---***

  chmod ugo+rw aaa***給使用者,組,其它使用者或組設定許可權為讀寫,許可權表示為:- rw- rw- rw-***

  如果aaa具有滿許可權- rwx rwx rwx。

  chmod u-x aaa***去掉使用者可執行許可權,許可權表示為:- rw- rwx rwx***

  如果要給aaa賦予制定許可權- rwx r-x r-x,命令為:

  chmod u=rwx,Go=rx aaa

  11、makefile檔案的作用是什麼?

  一個工程中的原始檔不計其數,其按型別、功能、模組分別放在若干個目錄中。makefile定義了一系列的規則來指定哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更復雜的功能操作。因為makefile就像一個Shell指令碼一樣,其中也可以執行作業系統的命令。makefile帶來的好處就是——“自動化編譯”。一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大地提高了軟體開發的效率。make是一個命令工具,是一個解釋makefile中指令的命令工具。一般來說,大多數的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成為了一種在工程方面的編譯方法。

  12、簡術OSI的物理層Layer1,鏈路層Layer2,網路層Layer3的任務。

  網路層:通過路由選擇演算法,為報文或分組通過通訊子網選擇最適當的路徑。

  鏈路層:通過各種控制協議,將有差錯的物理通道變為無差錯的、能可靠傳輸資料幀的資料鏈路。

  物理層:利用傳輸介質為資料鏈路層提供物理連線,實現位元流的透明傳輸。

  13、什麼是中斷?中斷時CPU做什麼工作?

  中斷是指在計算機執行期間,系統內發生任何非尋常的或非預期的急需處理事件,使得CPU暫時中斷當前正在執行的程式而轉去執行相應的事件處理程式。待處理完畢後又返回原來被中斷處繼續執行或排程新的程序執行的過程。

  14、你知道作業系統的內容分為幾塊嗎?什麼叫做虛擬記憶體?他和主存的關係如何?記憶體管理屬於作業系統的內容嗎?

  作業系統的主要組成部分:程序和執行緒的管理,儲存管理,裝置管理,檔案管理。虛擬記憶體是一些系統頁檔案,存放在磁碟上,每個系統頁檔案大小為4K,實體記憶體也被分頁,每個頁大小也為4K,這樣虛擬頁檔案和實體記憶體頁就可以對應,實際上虛擬記憶體就是用於實體記憶體的臨時存放的磁碟空間。頁檔案就是記憶體頁,實體記憶體中每頁叫物理頁,磁碟上的頁檔案叫虛擬頁,物理頁+虛擬頁就是系統所有使用的頁檔案的總和。

  15、執行緒是否具有相同的堆疊?dll是否有獨立的堆疊?

  每個執行緒有自己的堆疊。

  dll是否有獨立的堆疊?這個問題不好回答,或者說這個問題本身是否有問題。因為dll中的程式碼是被某些執行緒所執行,只有執行緒擁有堆疊。如果dll中的程式碼是exe中的執行緒所呼叫,那麼這個時候是不是說這個dll沒有獨立的堆疊?如果dll中的程式碼是由dll自己建立的執行緒所執行,那麼是不是說dll有獨立的堆疊?

  以上講的是堆疊,如果對於堆來說,每個dll有自己的堆,所以如果是從dll中動態分配的記憶體,最好是從dll中刪除;如果你從dll中分配記憶體,然後在exe中,或者另外一個dll中刪除,很有可能導致程式崩潰。

  16、什麼是緩衝區溢位?有什麼危害?其原因是什麼?

  緩衝區溢位是指當計算機向緩衝區內填充資料時超過了緩衝區本身的容量,溢位的資料覆蓋在合法資料上。

  危害:在當前網路與分散式系統安全中,被廣泛利用的50%以上都是緩衝區溢位,其中最著名的例子是1988年利用fingerd漏洞的蠕蟲。而緩衝區溢位中,最為危險的是堆疊溢位,因為入侵者可以利用堆疊溢位,在函式返回時改變返回程式的地址,讓其跳轉到任意地址,帶來的危害一種是程式崩潰導致拒絕服務,另外一種就是跳轉並且執行一段惡意程式碼,比如得到shell,然後為所欲為。通過往程式的緩衝區寫超出其長度的內容,造成緩衝區的溢位,從而破壞程式的堆疊,使程式轉而執行其它指令,以達到攻擊的目的。

  造成緩衝區溢位的主原因是程式中沒有仔細檢查使用者輸入的引數。

  17、什麼是死鎖?其條件是什麼?怎樣避免死鎖?

  死鎖的概念:在兩個或多個併發程序中,如果每個程序持有某種資源而又都等待別的程序釋放它或它們現在保持著的資源,在未改變這種狀態之前都不能向前推進,稱這一組程序產生了死鎖。通俗地講,就是兩個或多個程序被無限期地阻塞、相互等待的一種狀態。

  死鎖產生的原因主要是:? 系統資源不足;? 程序推進順序非法。

  產生死鎖的必要條件:

  ***1***互斥***mutualexclusion***,一個資源每次只能被一個程序使用;

  ***2***不可搶佔***nopreemption***,程序已獲得的資源,在未使用完之前,不能強行剝奪;

  ***3***佔有並等待***hold andwait***,一個程序因請***而阻塞時,對已獲得的資源保持不放;

  ***4***環形等待***circularwait***,若干程序之間形成一種首尾相接的迴圈等待資源關係。

  這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。

  死鎖的解除與預防:理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖。所以,在系統設計、程序排程等方面注意如何不讓這四個必要條件成立,如何確定資源的合理分配演算法,避免程序永久佔據系統資源。此外,也要防止程序在處於等待狀態的情況下佔用資源。因此,對資源的分配要給予合理的規劃。

  死鎖的處理策略:鴕鳥策略、預防策略、避免策略、檢測與恢復策略。

  二

  1、程式和程序

  程序由兩個部分組成:1***作業系統用來管理程序的核心物件。核心物件也是系統用來存放關於程序的統計資訊的地方。2***地址空間。它包含所有可執行模組或DLL模組的程式碼和資料。它還包含動態記憶體分配的空間。如執行緒堆疊和堆分配空間。

 

定義

使用系統執行資源情況

程式

計算機指令的集合,它以檔案的形式儲存在磁碟上。程式是靜態實體passive Entity),在多道程式系統中,它是不能獨立執行的,更不能與其他程式併發執行。

不使用【程式不能申請系統資源,不能被系統排程,也不能作為獨立執行的單位,因此,它不佔用系統的執行資源】。

 

程序

通常被定義為一個正在執行的程式的例項,是一個程式在其自身的地址空間中的一次執行活動。

定義:程序是程序實體(包括:程式段、相關的資料段、程序控制塊PCB)的執行過程,是系統進行資源分配和排程的一個獨立單位。

使用【程序是資源申請、排程和獨立執行的單位,因此,它使用系統中的執行資源。】

  2、程序與執行緒

  如果說作業系統引入程序的目的是為了提高程式併發執行,以提高資源利用率和系統吞吐量。那麼作業系統中引入執行緒的目的,則是為了減少程序併發執行過程中所付出的時空開銷,使作業系統能很好的併發執行。

  程序process定義了一個執行環境,包括它自己私有的地址空間、一個控制代碼表,以及一個安全環境;執行緒則是一個控制流,有他自己的呼叫棧call stack,記錄了它的執行歷史。

  執行緒由兩個部分組成:1***執行緒的核心物件,作業系統用它來對執行緒實施管理。核心物件也是系統用來存放執行緒統計資訊的地方。2***執行緒堆疊,它用於維護執行緒在執行程式碼時需要的所有引數和區域性變數。當建立執行緒時,系統建立一個執行緒核心物件。該執行緒核心物件不是執行緒本身,而是作業系統用來管理執行緒的較小的資料結構。可以將執行緒核心物件視為由關於執行緒的統計資訊組成的一個小型資料結構。

  程序與執行緒的比較如下:

比較

程序

執行緒

活潑性

不活潑(只是執行緒的容器)

活潑

地址空間

系統賦予的獨立的虛擬地址空間(對於32位程序來說,這個地址空間是4GB

在程序的地址空間執行程式碼。執行緒只有一個核心物件和一個堆疊,保留的記錄很少,因此所需要的記憶體也很少。因為執行緒需要的開銷比程序少

排程

僅是資源分配的基本單位

獨立排程、分派的基本單位

併發性

僅程序間併發(傳統OS

程序間、執行緒間併發

擁有資源

資源擁有的基本單位

基本上不擁有資源

系統開銷

建立、撤銷、切換開銷大

僅儲存少量暫存器內容,開銷小。

  3、程序同步

  程序同步的主要任務:是對多個相關程序在執行次序上進行協調,以使併發執行的諸程序之間能有效地共享資源和相互合作,從而使程式的執行具有可再現性。

  同步機制遵循的原則:

  ***1***空閒讓進;

  ***2***忙則等待***保證對臨界區的互斥訪問***;

  ***3***有限等待***有限代表有限的時間,避免死等***;

  ***4***讓權等待,***當程序不能進入自己的臨界區時,應該釋放處理機,以免陷入忙等狀態***。

  4、程序間的通訊是如何實現的?

  程序通訊,是指程序之間的資訊交換***資訊量少則一個狀態或數值,多者則是成千上萬個位元組***。因此,對於用訊號量進行的程序間的互斥和同步,由於其所交換的資訊量少而被歸結為低階通訊。

  所謂高階程序通訊指:使用者可以利用作業系統所提供的一組通訊命令傳送大量資料的一種通訊方式。作業系統隱藏了程序通訊的實現細節。或者說,通訊過程對使用者是透明的。

  高階通訊機制可歸結為三大類:

  ***1***共享儲存器系統***儲存器中劃分的共享儲存區***;實際操作中對應的是“剪貼簿”***剪貼簿實際上是系統維護管理的一塊記憶體區域***的通訊方式,比如舉例如下:word程序按下ctrl+c,在ppt程序按下ctrl+v,即完成了word程序和ppt程序之間的通訊,複製時將資料放入到剪貼簿,貼上時從剪貼簿中取出資料,然後顯示在ppt視窗上。

  ***2***訊息傳遞系統***程序間的資料交換以訊息***message***為單位,當今最流行的微核心作業系統中,微核心與伺服器之間的通訊,無一例外地都採用了訊息傳遞機制。應用舉例:郵槽***MailSlot***是基於廣播通訊體系設計出來的,它採用無連線的不可靠的資料傳輸。郵槽是一種單向通訊機制,建立郵槽的伺服器程序讀取資料,開啟郵槽的客戶機程序寫入資料。

  ***3***管道通訊系統***管道即:連線讀寫程序以實現他們之間通訊的共享檔案***pipe檔案,類似先進先出的佇列,由一個程序寫,另一程序讀******。實際操作中,管道分為:匿名管道、命名管道。匿名管道是一個未命名的、單向管道,通過父程序和一個子程序之間傳輸資料。匿名管道只能實現本地機器上兩個程序之間的通訊,而不能實現跨網路的通訊。命名管道不僅可以在本機上實現兩個程序間的通訊,還可以跨網路實現兩個程序間的通訊。

 

同一機器兩個程序間通訊

跨網路通訊

剪貼簿Clipboard

可以

不可以

匿名管道Pipe

可以

不可以

命名管道(點對點單一通訊,資料量可較大)Namedpipe

可以

可以

郵槽(一對多,資料量較小,424位元組以下)Mailslot

可以

可以

  5、執行緒同步

  根據使用者模式及核心模式下的同步方式的不同,分類及對比如下:

 

核心物件/

非核心物件

含義

缺點

適用

關鍵程式碼段(臨界區)CriticalSection

非核心物件,工作在使用者方式下,為使用者模式物件

從程式程式碼的角度來控制執行緒的併發性

1.因為在等待進入關鍵程式碼段時無法設定超時值,所以其很容易進入死鎖狀態。2.不能跨程序使用。

單個程序中執行緒間的同步(同步速度快)

事件物件Event

核心物件

所有核心物件中最基本的。

速度較慢(相比使用者模式實現執行緒同步)

多個程序間的各個執行緒間實現同步

互斥物件Mutex

核心物件

代表對一個資源的獨佔式訪問

訊號量

Semaphore

核心物件

使用計數器來控制程式對一個共享資源的訪問

  由於程序同步產生了一系列經典的同步問題“生產者-消費者”問題,“哲學家進餐”問題,“讀者-寫者”問題。