閱讀屋>面試> 作業系統面試題

作業系統面試題

作業系統面試題

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

核心物件

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

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

常見的作業系統使用的檔案系統整理

檔案系統是作業系統用於明確磁碟或分割槽上的檔案的方法和資料結構;即在磁碟上組織檔案的方法。也指用於儲存檔案的磁碟或分割槽,或檔案系統種類。作業系統中負責管理和儲存檔案資訊的軟體機構稱為檔案管理系統,簡稱檔案系統。檔案系統由三部分組成:與檔案管理有關軟體、被管理檔案以及實施檔案管理所需資料結構。從系統角度來看,檔案系統是對檔案儲存器空間進行組織和分配,負責檔案儲存並對存入的檔案進行保護和檢索的系統。具體地說,它負責為使用者建立檔案,存入、讀出、修改、轉儲檔案,控制檔案的存取,當用戶不再使用時撤銷檔案等。

【FAT】:

常PC機使用的檔案系統是FAT16。像基於MS-DOS,Win 95等系統都採用了FAT16檔案系統。在Win 9X下,FAT16支援的分割槽最大為2GB。我們知道計算機將資訊儲存在硬碟上稱為“簇”的區域內。使用的簇越小,儲存資訊的效率就越高。在FAT16的情況下,分割槽越大簇就相應的要大,儲存效率就越低,勢必造成儲存空間的浪費。並且隨著計算機硬體和應用的不斷提高,FAT16檔案系統已不能很好地適應系統的要求。在這種情況下,推出了增強的檔案系統FAT32。同FAT16相比,FAT32主要具有以下特點:

1、同FAT16相比FAT32最大的優點是可以支援的磁碟大小達到32G,但是不能支援小於512MB的分割槽。

*基於FAT32的Win 2000可以支援分割槽最大為32GB;而基於 FAT16的Win 2000支援的分割槽最大為4GB。

2、由於採用了更小的簇,FAT32檔案系統可以更有效率地儲存資訊。如兩個分割槽大小都為2GB,一個分割槽採用了FAT16檔案系統,另一個分割槽採用了FAT32檔案系統。採用FAT16的分割槽的簇大小為32KB,而FAT32分割槽的簇只有4KB的大小。這樣FAT32就比FAT16的儲存效率要高很多,通常情況下可以提高15%。

3、FAT32檔案系統可以重新定位根目錄和使用FAT的備份副本。另外FAT32分割槽的啟動記錄被包含在一個含有關鍵資料的結構中,減少了計算機系統崩潰的可能性。

【NTFS】:

NTFS檔案系統是一個基於安全性的檔案系統,是Windows NT所採用的獨特的檔案系統結構,它是建立在保護檔案和目錄資料基礎上,同時照顧節省儲存資源、減少磁碟佔用量的一種先進的檔案系統。使用非常廣泛的Windows NT 4.0採用的就是NTFS 4.0檔案系統,相信它所帶來的強大的系統安全性一定給廣大使用者留下了深刻的印象。Win 2000採用了更新版本的NTFS檔案系統??NTFS 5.0,它的推出使得使用者不但可以像Win 9X那樣方便快捷地操作和管理計算機,同時也可享受到NTFS所帶來的系統安全性。

NTFS 5.0的特點主要體現在以下幾個方面:

1、NTFS可以支援的分割槽(如果採用動態磁碟則稱為卷)大小可以達到2TB。而Win 2000中的FAT32支援分割槽的大小最大為32GB。

2、NTFS是一個可恢復的檔案系統。在NTFS分割槽上使用者很少需要執行磁碟修復程式。NTFS透過使用標準的事物處理日誌和恢復技術來保證分割槽的一致性。發生系統失敗事件時,NTFS使用日誌檔案和檢查點資訊自動恢復檔案系統的'一致性。

3、NTFS支援對分割槽、資料夾和檔案的壓縮。任何基於Windows的應用程式對NTFS分割槽上的壓縮檔案進行讀寫時不需要事先由其他程式進行解壓縮,當對檔案進行讀取時,檔案將自動進行解壓縮;檔案關閉或儲存時會自動對檔案進行壓縮。

4、NTFS採用了更小的簇,可以更有效率地管理磁碟空間。在Win 2000的FAT32檔案系統的情況下,分割槽大小在2GB~8GB時簇的大小為4KB;分割槽大小在8GB~16GB時簇的大小為8KB;分割槽大小在16GB~32GB時,簇的大小則達到了16KB。而Win 2000的NTFS檔案系統,當分割槽的大小在2GB以下時,簇的大小都比相應的FAT32簇小;當分割槽的大小在2GB以上時(2GB~2TB),簇的大小都為4KB。相比之下,NTFS可以比FAT32更有效地管理磁碟空間,最大限度地避免了磁碟空間的浪費。

5、在NTFS分割槽上,可以為共享資源、資料夾以及檔案設定訪問許可許可權。許可的設定包括兩方面的內容:一是允許哪些組或使用者對資料夾、檔案和共享資源進行訪問;二是獲得訪問許可的組或使用者可以進行什麼級別的訪問。訪問許可許可權的設定不但適用於本地計算機的使用者,同樣也應用於透過網路的共享資料夾對檔案進行訪問的網路使用者。與FAT32檔案系統下對資料夾或檔案進行訪問相比,安全性要高得多。另外,在採用NTFS格式的Win 2000中,應用稽核策略可以對資料夾、檔案以及活動目錄物件進行稽核,稽核結果記錄在安全日誌中,透過安全日誌就可以檢視哪些組或使用者對資料夾、檔案或活動目錄物件進行了什麼級別的操作,從而發現系統可能面臨的非法訪問,透過採取相應的措施,將這種安全隱患減到最低。這些在FAT32檔案系統下,是不能實現的。

6、在Win 2000的NTFS檔案系統下可以進行磁碟配額管理。磁碟配額就是管理員可以為使用者所能使用的磁碟空間進行配額限制,每一使用者只能使用最大配額範圍內的磁碟空間。設定磁碟配額後,可以對每一個使用者的磁碟使用情況進行跟蹤和控制,透過監測可以標識出超過配額報警閾值和配額限制的使用者,從而採取相應的措施。磁碟配額管理功能的提供,使得管理員可以方便合理地為使用者分配儲存資源,避免由於磁碟空間使用的失控可能造成的系統崩潰,提高了系統的安全性。

7、NTFS使用一個“變更”日誌來跟蹤記錄檔案所發生的變更。

【Ext2】:

Ext2是 GNU/Linux 系統中標準的檔案系統,其特點為存取檔案的效能極好,對於中小型的檔案更顯示出優勢,這主要得利於其簇快取層的優良設計。

其單一檔案大小與檔案系統本身的容量上限與檔案系統本身的簇大小有關,在一般常見的 x86 電腦系統中,簇最大為 4KB,則單一檔案大小上限為 2048GB,而檔案系統的容量上限為 16384GB。

但由於目前核心 2.4 所能使用的單一分割區最大隻有 2048GB,實際上能使用的檔案系統容量最多也只有 2048GB。

至於Ext3檔案系統,它屬於一種日誌檔案系統,是對ext2系統的擴充套件。它相容ext2,並且從ext2轉換成ext3並不複雜。

【Ext3】:

Ext3是一種日誌式檔案系統,是對ext2系統的擴充套件,它相容ext2。日誌式檔案系統的優越性在於:由於檔案系統都有快取層參與運作,如不使用時必須將檔案系統卸下,以便將快取層的資料寫回磁碟中。因此每當系統要關機時,必須將其所有的檔案系統全部shutdown後才能進行關機。

如果在檔案系統尚未shutdown前就關機 (如停電) 時,下次重開機後會造成檔案系統的資料不一致,故這時必須做檔案系統的重整工作,將不一致與錯誤的地方修復。然而,此一重整的工作是相當耗時的,特別是容量大的檔案系統,而且也不能百分之百保證所有的資料都不會流失。

為了克服此問題,使用所謂‘日誌式檔案系統 (Journal File System) ’。此類檔案系統最大的特色是,它會將整個磁碟的寫入動作完整記錄在磁碟的某個區域上,以便有需要時可以回溯追蹤。

由於資料的寫入動作包含許多的細節,像是改變檔案標頭資料、搜尋磁碟可寫入空間、一個個寫入資料區段等等,每一個細節進行到一半若被中斷,就會造成檔案系統的不一致,因而需要重整。

然而,在日誌式檔案系統中,由於詳細紀錄了每個細節,故當在某個過程中被中斷時,系統可以根據這些記錄直接回溯並重整被中斷的部分,而不必花時間去檢查其他的部分,故重整的工作速度相當快,幾乎不需要花時間。

【Ext4】:

Linux kernel 自 2.6.28 開始正式支援新的檔案系統 Ext4。Ext4 是 Ext3 的改進版,修改了 Ext3 中部分重要的資料結構,而不僅僅像 Ext3 對 Ext2 那樣,只是增加了一個日誌功能而已。Ext4 可以提供更佳的效能和可靠性,還有更為豐富的功能:

1、與 Ext3 相容。執行若干條命令,就能從 Ext3 線上遷移到 Ext4,而無須重新格式化磁碟或重新安裝系統。原有 Ext3 資料結構照樣保留,Ext4 作用於新資料,當然,整個檔案系統因此也就獲得了 Ext4 所支援的更大容量。

2、更大的檔案系統和更大的檔案。較之 Ext3 目前所支援的最大 16TB 檔案系統和最大 2TB 檔案,Ext4 分別支援 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的檔案系統,以及 16TB 的檔案。

3、無限數量的子目錄。Ext3 目前只支援 32,000 個子目錄,而 Ext4 支援無限數量的子目錄。

4、Extents。Ext3 採用間接塊對映,當操作大檔案時,效率極其低下。比如一個 100MB 大小的檔案,在 Ext3 中要建立 25,600 個數據塊(每個資料塊大小為 4KB)的對映表。而 Ext4 引入了現代檔案系統中流行的 extents 概念,每個 extent 為一組連續的資料塊,上述檔案則表示為“該檔案資料儲存在接下來的 25,600 個數據塊中”,提高了不少效率。

5、多塊分配。當寫入資料到 Ext3 檔案系統中時,Ext3 的資料塊分配器每次只能分配一個 4KB 的塊,寫一個 100MB 檔案就要呼叫 25,600 次資料塊分配器,而 Ext4 的多塊分配器“multiblock allocator”(mballoc) 支援一次呼叫分配多個數據塊。

6、延遲分配。Ext3 的資料塊分配策略是儘快分配,而 Ext4 和其它現代檔案作業系統的策略是儘可能地延遲分配,直到檔案在 cache 中寫完才開始分配資料塊並寫入磁碟,這樣就能最佳化整個檔案的資料塊分配,與前兩種特性搭配起來可以顯著提升效能。

7、快速 fsck。以前執行 fsck 第一步就會很慢,因為它要檢查所有的 inode,現在 Ext4 給每個組的 inode 表中都添加了一份未使用 inode 的列表,今後 fsck Ext4 檔案系統就可以跳過它們而只去檢查那些在用的 inode 了。

8、日誌校驗。日誌是最常用的部分,也極易導致磁碟硬體故障,而從損壞的日誌中恢復資料會導致更多的資料損壞。Ext4 的日誌校驗功能可以很方便地判斷日誌資料是否損壞,而且它將 Ext3 的兩階段日誌機制合併成一個階段,在增加安全性的同時提高了效能。

9、“無日誌”(No Journaling)模式。日誌總歸有一些開銷,Ext4 允許關閉日誌,以便某些有特殊需求的使用者可以藉此提升效能。

10、線上碎片整理。儘管延遲分配、多塊分配和 extents 能有效減少檔案系統碎片,但碎片還是不可避免會產生。Ext4 支援線上碎片整理,並將提供 e4defrag 工具進行個別檔案或整個檔案系統的碎片整理。

11、inode 相關特性。Ext4 支援更大的 inode,較之 Ext3 預設的 inode 大小 128 位元組,Ext4 為了在 inode 中容納更多的擴充套件屬性(如納秒時間戳或 inode 版本),預設 inode 大小為 256 位元組。Ext4 還支援快速擴充套件屬性(fast extended attributes)和 inode 保留(inodes reservation)。

12、持久預分配(Persistent preallocation)。P2P 軟體為了保證下載檔案有足夠的空間存放,常常會預先建立一個與所下載檔案大小相同的空檔案,以免未來的數小時或數天之內磁碟空間不足導致下載失敗。Ext4 在檔案系統層面實現了持久預分配並提供相應的 API(libc 中的 posix_fallocate()),比應用軟體自己實現更有效率。

13、預設啟用 barrier。磁碟上配有內部快取,以便重新調整批次資料的寫操作順序,最佳化寫入效能,因此檔案系統必須在日誌資料寫入磁碟之後才能寫 commit 記錄,若 commit 記錄寫入在先,而日誌有可能損壞,那麼就會影響資料完整性。Ext4 預設啟用 barrier,只有當 barrier 之前的資料全部寫入磁碟,才能寫 barrier 之後的資料。(可透過 “mount -o barrier=0” 命令禁用該特性。)

【ZFS】:

ZFS源自於Sun Microsystems為Solaris作業系統開發的檔案系統。ZFS是一個具有高儲存容量、檔案系統與卷管理概念整合、嶄新的磁碟邏輯結構的輕量級檔案系統,同時也是一個便捷的儲存池管理系統。ZFS是一個使用CDDL協議條款授權的開源專案。

【HFS】:

1、HFS檔案系統概念

分層檔案系統(Hierarchical File System,HFS)是一種由蘋果電腦開發,並使用在Mac OS上的檔案系統。最初被設計用於軟盤和硬碟,同時也可以在在只讀媒體如CD-ROM上見到。

2、HFS檔案系統開發過程

HFS首次出現在1985年9月17日,作為Macintosh電腦上新的檔案系統。它取代只用於早期Mac型號所使用的平面檔案系統Macintosh File System(MFS)。因為Macintosh電腦所產生的資料,比其它通常的檔案系統,如DOS使用的FAT或原始Unix檔案系統所允許儲存的資料更多。蘋果電腦開發了一種新式更適用的檔案系統,而不是採用現有的規格。例如,HFS允許檔名最多有31個字元的長度,支援metadata和雙分支(每個檔案的資料和資源支分開儲存)檔案。

儘管HFS象其它大多數檔案系統一樣被視為專有的格式,因為只有它為大多數最新的作業系統提供了很好的通用解決方法以存取HFS格式磁碟。

在1998年,蘋果電腦釋出了HFS Plus,其改善了HFS對磁碟空間的地址定位效率低下,並加入了其它的改進。當前版本的Mac OS仍舊支援HFS,但從Mac OS X開始HFS卷不能作為啟動用。

3、構成方式

分層檔案系統把一個卷分為許多512位元組的“邏輯塊”。這些邏輯塊被編組為“分配塊”,這些分配塊可以根據卷的尺寸包含一個或多個邏輯塊。HFS對地址分配塊使用16位數值,分配塊的最高限制數量是65536。

組成一個HFS卷需要下面的五個結構:

1)卷的邏輯塊0和1是啟動塊,它包含了系統啟動資訊。例如,啟動時載入的系統名稱和殼(通常是Finder)檔案。

2)邏輯塊2包含主目錄塊(Master Directory Block,簡稱MDB)。

3)邏輯塊3是卷點陣圖(Volume Bitmap)的啟動塊,它追蹤分配塊使用狀態。

4)總目錄檔案(Catalog File)是一個包含所有檔案的記錄和儲存在卷中目錄的B*-tree。

5)擴充套件溢位檔案(Extent Overflow File)是當最初總目錄檔案中三個擴充套件佔用後,另外一個包含額外擴充套件記錄的分配塊對應資訊的B*-tree。

核心怎樣管理你的記憶體

在分析了程序的虛擬地址佈局,我們轉向核心以及他管理使用者記憶體的機制。下圖是gonzo的例子:

Linux程序在核心中是由task_struct程序描述符實現的,task_struct的mm欄位指向記憶體描述符mm_struct,他是程序的一個記憶體執行摘要。如上圖所示,mm_struct儲存了記憶體各個段的開始和結束地址、程序所使用的記憶體頁面數(rss代表常駐集合大小)、使用的虛擬地址空間總數等等。在記憶體描述符中我們也可以找到兩個用於管理程序內層的欄位:虛擬記憶體集合和頁表。Gonzo的記憶體區域如下圖:

每個虛擬記憶體區域(VMA)是一個虛擬地址空間上連續的區域;這些區域不會彼此覆蓋。Vm_area_struct結構描述了一個記憶體區域,包括他的開始和技術地址、flags欄位指定了他的行為和訪問許可權,vm_file欄位指定了該區域對映的實際檔案。一個沒有對映檔案的VMA成為匿名的。除了記憶體對映段以外,上面的每個記憶體段(堆、棧等等)相當於一個單獨的VMA。這不是必須的,儘管在x86機器上通常是這樣。VMA不會關心他在哪個段裡面。

一個程序的所有VMA以兩種方式儲存在他的記憶體描述符中,一種是以連結串列的方式存放在mmap欄位,以開始虛擬地址進行了排序,另一種是以紅黑樹的方式存放,mm_rb欄位為這顆紅黑樹的根。紅黑樹可以讓核心根據給定的虛擬地址快速地找到記憶體區域。當我們讀取檔案/proc/pid_of_process/maps,核心僅僅是透過程序VMA的連結同時打印出每一個。


【作業系統面試題】相關文章: