轉載:http://blog.csdn.net/youngchang06hpu/article/details/8009947php
一、什麼是進程(Process)和線程(Thread)?有何區別?html
進程是具備必定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位。線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),可是它可與同屬一個進程的其餘的線程共享進程所擁有的所有資源。一個線程能夠建立和撤銷另外一個線程,同一個進程中的多個線程之間能夠併發執行。node
進程與應用程序的區別在於應用程序做爲一個靜態文件存儲在計算機系統的硬盤等存儲空間中,而進程則是處於動態條件下由操做系統維護的系統資源管理實體。程序員
二、Windows下的內存是如何管理的?算法
Windows提供了3種方法來進行內存管理:虛擬內存,最適合用來管理大型對象或者結構數組;內存映射文件,最適合用來管理大型數據流(一般來自文件)以及在單個計算機上運行多個進程之間共享數據;內存堆棧,最適合用來管理大量的小對象。shell
Windows操縱內存能夠分兩個層面:物理內存和虛擬內存。數組
其中物理內存由系統管理,不容許應用程序直接訪問,應用程序可見的只有一個2G地址空間,而內存分配是經過堆進行的。對於每一個進程都有本身的默認堆,當一個堆建立後,就經過虛擬內存操做保留了相應大小的地址塊(不佔有實際的內存,系統消耗很小)。當在堆上分配一塊內存時,系統在堆的地址表裏找到一個空閒塊(若是找不到,且堆建立屬性是可擴充的,則擴充堆大小),爲這個空閒塊所包含的全部內存頁提交物理對象(在物理內存上或硬盤的交換文件上),這時就能夠訪問這部分地址。提交時,系統將對全部進程的內存統一調配,若是物理內存不夠,系統試圖把一部分進程暫時不訪問的頁放入交換文件,以騰出部分物理內存。釋放內存時,只在堆中將所在的頁解除提交(相應的物理對象被解除),繼續保留地址空間。緩存
若是要知道某個地址是否被佔用/可不能夠訪問,只要查詢此地址的虛擬內存狀態便可。若是是提交,則能夠訪問。若是僅僅保留,或沒保留,則產生一個軟件異常。此外,有些內存頁能夠設置各類屬性。若是是隻讀,向內存寫也會產生軟件異常。安全
三、Windows消息調度機制是?服務器
A)指令隊列;B)指令堆棧;C)消息隊列;D)消息堆棧
答案:C
處理消息隊列的順序。首先Windows絕對不是按隊列先進先出的次序來處理的,而是有必定優先級的。優先級經過消息隊列的狀態標誌來實現的。首先,最高優先級的是別的線程發過來的消息(經過sendmessage);其次,處理登記消息隊列消息;再次處理QS_QUIT標誌,處理虛擬輸入隊列,處理wm_paint;最後是wm_timer。
四、描述實時系統的基本特性
在特定時間內完成特定的任務,實時性與可靠性。
所謂「實時操做系統」,其實是指操做系統工做時,其各類資源能夠根據須要隨時進行動態分配。因爲各類資源能夠進行動態分配,所以,其處理事務的能力較強、速度較快。
五、中斷和輪詢的特色
對I/O設備的程序輪詢的方式,是早期的計算機系統對I/O設備的一種管理方式。它定時對各類設備輪流詢問一遍有無處理要求。輪流詢問以後,有要求的,則加以處理。在處理I/O設備的要求以後,處理機返回繼續工做。儘管輪詢須要時間,但輪詢要比I/O設備的速度要快得多,因此通常不會發生不能及時處理的問題。固然,再快的處理機,能處理的輸入輸出設備的數量也是有必定限度的。並且,程序輪詢畢竟佔據了CPU至關一部分處理時間,所以,程序輪詢是一種效率較低的方式,在現代計算機系統中已不多應用。
程序中斷一般簡稱中斷,是指CPU在正常運行程序的過程當中,因爲預先安排或發生了各類隨機的內部或外部事件,使CPU中斷正在運行的程序,而轉到爲響應的服務程序去處理。
輪詢——效率低,等待時間很長,CPU利用率不高。
中斷——容易遺漏一些問題,CPU利用率高。
六、什麼是臨界區?如何解決衝突?
每一個進程中訪問臨界資源的那段程序稱爲臨界區,每次只准許一個進程進入臨界區,進入後不容許其餘進程進入。
(1)若是有若干進程要求進入空閒的臨界區,一次僅容許一個進程進入;
(2)任什麼時候候,處於臨界區內的進程不可多於一個。如已有進程進入本身的臨界區,則其它全部試圖進入臨界區的進程必須等待;
(3)進入臨界區的進程要在有限時間內退出,以便其它進程能及時進入本身的臨界區;
(4)若是進程不能進入本身的臨界區,則應讓出CPU,避免進程出現「忙等」現象。
七、說說分段和分頁
頁是信息的物理單位,分頁是爲實現離散分配方式,以消減內存的外零頭,提升內存的利用率;或者說,分頁僅僅是因爲系統管理的須要,而不是用戶的須要。
段是信息的邏輯單位,它含有一組其意義相對完整的信息。分段的目的是爲了能更好的知足用戶的須要。
頁的大小固定且由系統肯定,把邏輯地址劃分爲頁號和頁內地址兩部分,是由機器硬件實現的,於是一個系統只能有一種大小的頁面。段的長度卻不固定,決定於用戶所編寫的程序,一般由編輯程序在對源程序進行編輯時,根據信息的性質來劃分。
分頁的做業地址空間是一維的,即單一的線性空間,程序員只須利用一個記憶符,便可表示一地址。分段的做業地址空間是二維的,程序員在標識一個地址時,既需給出段名,又需給出段內地址。
八、說出你所知道的保持進程同步的方法?
進程間同步的主要方法有原子操做、信號量機制、自旋鎖、管程、會合、分佈式系統等。
九、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中
十、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
十一、makefile文件的做用是什麼?
一個工程中的源文件不可勝數,其按類型、功能、模塊分別放在若干個目錄中。makefile定義了一系列的規則來指定哪些文件須要先編譯,哪些文件須要後編譯,哪些文件須要從新編譯,甚至於進行更復雜的功能操做。由於makefile就像一個Shell腳本同樣,其中也能夠執行操做系統的命令。makefile帶來的好處就是——「自動化編譯」。一旦寫好,只須要一個make命令,整個工程徹底自動編譯,極大地提升了軟件開發的效率。make是一個命令工具,是一個解釋makefile中指令的命令工具。通常來講,大多數的IDE都有這個命令,好比:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成爲了一種在工程方面的編譯方法。
十二、簡術OSI的物理層Layer1,鏈路層Layer2,網絡層Layer3的任務。
網絡層:經過路由選擇算法,爲報文或分組經過通訊子網選擇最適當的路徑。
鏈路層:經過各類控制協議,將有差錯的物理信道變爲無差錯的、能可靠傳輸數據幀的數據鏈路。
物理層:利用傳輸介質爲數據鏈路層提供物理鏈接,實現比特流的透明傳輸。
1三、什麼是中斷?中斷時CPU作什麼工做?
中斷是指在計算機執行期間,系統內發生任何非尋常的或非預期的急需處理事件,使得CPU暫時中斷當前正在執行的程序而轉去執行相應的事件處理程序。待處理完畢後又返回原來被中斷處繼續執行或調度新的進程執行的過程。
1四、你知道操做系統的內容分爲幾塊嗎?什麼叫作虛擬內存?他和主存的關係如何?內存管理屬於操做系統的內容嗎?
操做系統的主要組成部分:進程和線程的管理,存儲管理,設備管理,文件管理。虛擬內存是一些系統頁文件,存放在磁盤上,每一個系統頁文件大小爲4K,物理內存也被分頁,每一個頁大小也爲4K,這樣虛擬頁文件和物理內存頁就能夠對應,實際上虛擬內存就是用於物理內存的臨時存放的磁盤空間。頁文件就是內存頁,物理內存中每頁叫物理頁,磁盤上的頁文件叫虛擬頁,物理頁+虛擬頁就是系統全部使用的頁文件的總和。
1五、線程是否具備相同的堆棧?dll是否有獨立的堆棧?
每一個線程有本身的堆棧。
dll是否有獨立的堆棧?這個問題很差回答,或者說這個問題自己是否有問題。由於dll中的代碼是被某些線程所執行,只有線程擁有堆棧。若是dll中的代碼是exe中的線程所調用,那麼這個時候是否是說這個dll沒有獨立的堆棧?若是dll中的代碼是由dll本身建立的線程所執行,那麼是否是說dll有獨立的堆棧?
以上講的是堆棧,若是對於堆來講,每一個dll有本身的堆,因此若是是從dll中動態分配的內存,最好是從dll中刪除;若是你從dll中分配內存,而後在exe中,或者另一個dll中刪除,頗有可能致使程序崩潰。
1六、什麼是緩衝區溢出?有什麼危害?其緣由是什麼?
緩衝區溢出是指當計算機向緩衝區內填充數據時超過了緩衝區自己的容量,溢出的數據覆蓋在合法數據上。
危害:在當前網絡與分佈式系統安全中,被普遍利用的50%以上都是緩衝區溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕蟲。而緩衝區溢出中,最爲危險的是堆棧溢出,由於入侵者能夠利用堆棧溢出,在函數返回時改變返回程序的地址,讓其跳轉到任意地址,帶來的危害一種是程序崩潰致使拒絕服務,另一種就是跳轉而且執行一段惡意代碼,好比獲得shell,而後隨心所欲。經過往程序的緩衝區寫超出其長度的內容,形成緩衝區的溢出,從而破壞程序的堆棧,使程序轉而執行其它指令,以達到攻擊的目的。
形成緩衝區溢出的主緣由是程序中沒有仔細檢查用戶輸入的參數。
1七、什麼是死鎖?其條件是什麼?怎樣避免死鎖?
死鎖的概念:在兩個或多個併發進程中,若是每一個進程持有某種資源而又都等待別的進程釋放它或它們如今保持着的資源,在未改變這種狀態以前都不能向前推動,稱這一組進程產生了死鎖。通俗地講,就是兩個或多個進程被無限期地阻塞、相互等待的一種狀態。
死鎖產生的緣由主要是:? 系統資源不足;? 進程推動順序非法。
產生死鎖的必要條件:
(1)互斥(mutualexclusion),一個資源每次只能被一個進程使用;
(2)不可搶佔(nopreemption),進程已得到的資源,在未使用完以前,不能強行剝奪;
(3)佔有並等待(hold andwait),一個進程因請求資源而阻塞時,對已得到的資源保持不放;
(4)環形等待(circularwait),若干進程之間造成一種首尾相接的循環等待資源關係。
這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不知足,就不會發生死鎖。
死鎖的解除與預防:理解了死鎖的緣由,尤爲是產生死鎖的四個必要條件,就能夠最大可能地避免、預防和解除死鎖。因此,在系統設計、進程調度等方面注意如何不讓這四個必要條件成立,如何肯定資源的合理分配算法,避免進程永久佔據系統資源。此外,也要防止進程在處於等待狀態的狀況下佔用資源。所以,對資源的分配要給予合理的規劃。
死鎖的處理策略:鴕鳥策略、預防策略、避免策略、檢測與恢復策略。
一、程序和進程
進程由兩個部分組成:1)操做系統用來管理進程的內核對象。內核對象也是系統用來存放關於進程的統計信息的地方。2)地址空間。它包含全部可執行模塊或DLL模塊的代碼和數據。它還包含動態內存分配的空間。如線程堆棧和堆分配空間。
|
定義 |
使用系統運行資源狀況 |
程序 |
計算機指令的集合,它以文件的形式存儲在磁盤上。程序是靜態實體(passive Entity),在多道程序系統中,它是不能獨立運行的,更不能與其餘程序併發執行。 |
不使用【程序不能申請系統資源,不能被系統調度,也不能做爲獨立運行的單位,所以,它不佔用系統的運行資源】。
|
進程 |
一般被定義爲一個正在運行的程序的實例,是一個程序在其自身的地址空間中的一次執行活動。 定義:進程是進程實體(包括:程序段、相關的數據段、進程控制塊PCB)的運行過程,是系統進行資源分配和調度的一個獨立單位。 |
使用【進程是資源申請、調度和獨立運行的單位,所以,它使用系統中的運行資源。】 |
二、進程與線程
若是說操做系統引入進程的目的是爲了提升程序併發執行,以提升資源利用率和系統吞吐量。那麼操做系統中引入線程的目的,則是爲了減小進程併發執行過程當中所付出的時空開銷,使操做系統能很好的併發執行。
進程process定義了一個執行環境,包括它本身私有的地址空間、一個句柄表,以及一個安全環境;線程則是一個控制流,有他本身的調用棧call stack,記錄了它的執行歷史。
線程由兩個部分組成:1)線程的內核對象,操做系統用它來對線程實施管理。內核對象也是系統用來存放線程統計信息的地方。2)線程堆棧,它用於維護線程在執行代碼時須要的全部參數和局部變量。當建立線程時,系統建立一個線程內核對象。該線程內核對象不是線程自己,而是操做系統用來管理線程的較小的數據結構。能夠將線程內核對象視爲由關於線程的統計信息組成的一個小型數據結構。
進程與線程的比較以下:
比較 |
進程 |
線程 |
活潑性 |
不活潑(只是線程的容器) |
活潑 |
地址空間 |
系統賦予的獨立的虛擬地址空間(對於32位進程來講,這個地址空間是4GB) |
在進程的地址空間執行代碼。線程只有一個內核對象和一個堆棧,保留的記錄不多,所以所須要的內存也不多。由於線程須要的開銷比進程少 |
調度 |
僅是資源分配的基本單位 |
獨立調度、分派的基本單位 |
併發性 |
僅進程間併發(傳統OS) |
進程間、線程間併發 |
擁有資源 |
資源擁有的基本單位 |
基本上不擁有資源 |
系統開銷 |
建立、撤銷、切換開銷大 |
僅保存少許寄存器內容,開銷小。 |
三、進程同步
進程同步的主要任務:是對多個相關進程在執行次序上進行協調,以使併發執行的諸進程之間能有效地共享資源和相互合做,從而使程序的執行具備可再現性。
同步機制遵循的原則:
(1)空閒讓進;
(2)忙則等待(保證對臨界區的互斥訪問);
(3)有限等待(有限表明有限的時間,避免死等);
(4)讓權等待,(當進程不能進入本身的臨界區時,應該釋放處理機,以避免陷入忙等狀態)。
四、進程間的通訊是如何實現的?
進程通訊,是指進程之間的信息交換(信息量少則一個狀態或數值,多者則是成千上萬個字節)。所以,對於用信號量進行的進程間的互斥和同步,因爲其所交換的信息量少而被歸結爲低級通訊。
所謂高級進程通訊指:用戶能夠利用操做系統所提供的一組通訊命令傳送大量數據的一種通訊方式。操做系統隱藏了進程通訊的實現細節。或者說,通訊過程對用戶是透明的。
高級通訊機制可歸結爲三大類:
(1)共享存儲器系統(存儲器中劃分的共享存儲區);實際操做中對應的是「剪貼板」(剪貼板其實是系統維護管理的一塊內存區域)的通訊方式,好比舉例以下:word進程按下ctrl+c,在ppt進程按下ctrl+v,即完成了word進程和ppt進程之間的通訊,複製時將數據放入到剪貼板,粘貼時從剪貼板中取出數據,而後顯示在ppt窗口上。
(2)消息傳遞系統(進程間的數據交換以消息(message)爲單位,當今最流行的微內核操做系統中,微內核與服務器之間的通訊,無一例外地都採用了消息傳遞機制。應用舉例:郵槽(MailSlot)是基於廣播通訊體系設計出來的,它採用無鏈接的不可靠的數據傳輸。郵槽是一種單向通訊機制,建立郵槽的服務器進程讀取數據,打開郵槽的客戶機進程寫入數據。
(3)管道通訊系統(管道即:鏈接讀寫進程以實現他們之間通訊的共享文件(pipe文件,相似先進先出的隊列,由一個進程寫,另外一進程讀))。實際操做中,管道分爲:匿名管道、命名管道。匿名管道是一個未命名的、單向管道,經過父進程和一個子進程之間傳輸數據。匿名管道只能實現本地機器上兩個進程之間的通訊,而不能實現跨網絡的通訊。命名管道不只能夠在本機上實現兩個進程間的通訊,還能夠跨網絡實現兩個進程間的通訊。
|
同一機器兩個進程間通訊 |
跨網絡通訊 |
剪貼板Clipboard |
能夠 |
不能夠 |
匿名管道Pipe |
能夠 |
不能夠 |
命名管道(點對點單一通訊,數據量可較大)Namedpipe |
能夠 |
能夠 |
郵槽(一對多,數據量較小,424字節如下)Mailslot |
能夠 |
能夠 |
五、線程同步
根據用戶模式及內核模式下的同步方式的不一樣,分類及對好比下:
|
內核對象/ 非內核對象 |
含義 |
缺點 |
適用 |
關鍵代碼段(臨界區)CriticalSection |
非內核對象,工做在用戶方式下,爲用戶模式對象 |
從程序代碼的角度來控制線程的併發性 |
1.由於在等待進入關鍵代碼段時沒法設定超時值,因此其很容易進入死鎖狀態。2.不能跨進程使用。 |
單個進程中線程間的同步(同步速度快) |
事件對象Event |
內核對象 |
全部內核對象中最基本的。 |
速度較慢(相比用戶模式實現線程同步) |
多個進程間的各個線程間實現同步 |
互斥對象Mutex |
內核對象 |
表明對一個資源的獨佔式訪問 |
||
信號量 Semaphore |
內核對象 |
使用計數器來控制程序對一個共享資源的訪問 |
因爲進程同步產生了一系列經典的同步問題「生產者-消費者」問題,「哲學家進餐」問題,「讀者-寫者」問題。
文件系統是操做系統用於明確磁盤或分區上的文件的方法和數據結構;即在磁盤上組織文件的方法。也指用於存儲文件的磁盤或分區,或文件系統種類。操做系統中負責管理和存儲文件信息的軟件機構稱爲文件管理系統,簡稱文件系統。文件系統由三部分組成:與文件管理有關軟件、被管理文件以及實施文件管理所需數據結構。從系統角度來看,文件系統是對文件存儲器空間進行組織和分配,負責文件存儲並對存入的文件進行保護和檢索的系統。具體地說,它負責爲用戶創建文件,存入、讀出、修改、轉儲文件,控制文件的存取,當用戶再也不使用時撤銷文件等。
【FAT】:
常PC機使用的文件系統是FAT16。像基於MS-DOS,Win 95等系統都採用了FAT16文件系統。在Win 9X下,FAT16支持的分區最大爲2GB。咱們知道計算機將信息保存在硬盤上稱爲「簇」的區域內。使用的簇越小,保存信息的效率就越高。在FAT16的狀況下,分區越大簇就相應的要大,存儲效率就越低,勢必形成存儲空間的浪費。而且隨着計算機硬件和應用的不斷提升,FAT16文件系統已不能很好地適應系統的要求。在這種狀況下,推出了加強的文件系統FAT32。同FAT16相比,FAT32主要具備如下特色:
一、同FAT16相比FAT32最大的優勢是能夠支持的磁盤大小達到32G,可是不能支持小於512MB的分區。
*基於FAT32的Win 2000能夠支持分區最大爲32GB;而基於 FAT16的Win 2000支持的分區最大爲4GB。
二、因爲採用了更小的簇,FAT32文件系統能夠更有效率地保存信息。如兩個分區大小都爲2GB,一個分區採用了FAT16文件系統,另外一個分區採用了FAT32文件系統。採用FAT16的分區的簇大小爲32KB,而FAT32分區的簇只有4KB的大小。這樣FAT32就比FAT16的存儲效率要高不少,一般狀況下能夠提升15%。
三、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的特色主要體如今如下幾個方面:
一、NTFS能夠支持的分區(若是採用動態磁盤則稱爲卷)大小能夠達到2TB。而Win 2000中的FAT32支持分區的大小最大爲32GB。
二、NTFS是一個可恢復的文件系統。在NTFS分區上用戶不多須要運行磁盤修復程序。NTFS經過使用標準的事物處理日誌和恢復技術來保證分區的一致性。發生系統失敗事件時,NTFS使用日誌文件和檢查點信息自動恢復文件系統的一致性。
三、NTFS支持對分區、文件夾和文件的壓縮。任何基於Windows的應用程序對NTFS分區上的壓縮文件進行讀寫時不須要事先由其餘程序進行解壓縮,當對文件進行讀取時,文件將自動進行解壓縮;文件關閉或保存時會自動對文件進行壓縮。
四、NTFS採用了更小的簇,能夠更有效率地管理磁盤空間。在Win 2000的FAT32文件系統的狀況下,分區大小在2GB~8GB時簇的大小爲4KB;分區大小在8GB~16GB時簇的大小爲8KB;分區大小在16GB~32GB時,簇的大小則達到了16KB。而Win 2000的NTFS文件系統,當分區的大小在2GB如下時,簇的大小都比相應的FAT32簇小;當分區的大小在2GB以上時(2GB~2TB),簇的大小都爲4KB。相比之下,NTFS能夠比FAT32更有效地管理磁盤空間,最大限度地避免了磁盤空間的浪費。
五、在NTFS分區上,能夠爲共享資源、文件夾以及文件設置訪問許可權限。許可的設置包括兩方面的內容:一是容許哪些組或用戶對文件夾、文件和共享資源進行訪問;二是得到訪問許可的組或用戶能夠進行什麼級別的訪問。訪問許可權限的設置不但適用於本地計算機的用戶,一樣也應用於經過網絡的共享文件夾對文件進行訪問的網絡用戶。與FAT32文件系統下對文件夾或文件進行訪問相比,安全性要高得多。另外,在採用NTFS格式的Win 2000中,應用審覈策略能夠對文件夾、文件以及活動目錄對象進行審覈,審覈結果記錄在安全日誌中,經過安全日誌就能夠查看哪些組或用戶對文件夾、文件或活動目錄對象進行了什麼級別的操做,從而發現系統可能面臨的非法訪問,經過採起相應的措施,將這種安全隱患減到最低。這些在FAT32文件系統下,是不能實現的。
六、在Win 2000的NTFS文件系統下能夠進行磁盤配額管理。磁盤配額就是管理員能夠爲用戶所能使用的磁盤空間進行配額限制,每一用戶只能使用最大配額範圍內的磁盤空間。設置磁盤配額後,能夠對每個用戶的磁盤使用狀況進行跟蹤和控制,經過監測能夠標識出超過配額報警閾值和配額限制的用戶,從而採起相應的措施。磁盤配額管理功能的提供,使得管理員能夠方便合理地爲用戶分配存儲資源,避免因爲磁盤空間使用的失控可能形成的系統崩潰,提升了系統的安全性。
七、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 能夠提供更佳的性能和可靠性,還有更爲豐富的功能:
一、與 Ext3 兼容。執行若干條命令,就能從 Ext3 在線遷移到 Ext4,而無須從新格式化磁盤或從新安裝系統。原有 Ext3 數據結構照樣保留,Ext4 做用於新數據,固然,整個文件系統所以也就得到了 Ext4 所支持的更大容量。
二、更大的文件系統和更大的文件。較之 Ext3 目前所支持的最大 16TB 文件系統和最大 2TB 文件,Ext4 分別支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系統,以及 16TB 的文件。
三、無限數量的子目錄。Ext3 目前只支持 32,000 個子目錄,而 Ext4 支持無限數量的子目錄。
四、Extents。Ext3 採用間接塊映射,當操做大文件時,效率極其低下。好比一個 100MB 大小的文件,在 Ext3 中要創建 25,600 個數據塊(每一個數據塊大小爲 4KB)的映射表。而 Ext4 引入了現代文件系統中流行的 extents 概念,每一個 extent 爲一組連續的數據塊,上述文件則表示爲「該文件數據保存在接下來的 25,600 個數據塊中」,提升了很多效率。
五、多塊分配。當寫入數據到 Ext3 文件系統中時,Ext3 的數據塊分配器每次只能分配一個 4KB 的塊,寫一個 100MB 文件就要調用 25,600 次數據塊分配器,而 Ext4 的多塊分配器「multiblock allocator」(mballoc) 支持一次調用分配多個數據塊。
六、延遲分配。Ext3 的數據塊分配策略是儘快分配,而 Ext4 和其它現代文件操做系統的策略是儘量地延遲分配,直到文件在 cache 中寫完纔開始分配數據塊並寫入磁盤,這樣就能優化整個文件的數據塊分配,與前兩種特性搭配起來能夠顯著提高性能。
七、快速 fsck。之前執行 fsck 第一步就會很慢,由於它要檢查全部的 inode,如今 Ext4 給每一個組的 inode 表中都添加了一份未使用 inode 的列表,從此 fsck Ext4 文件系統就能夠跳過它們而只去檢查那些在用的 inode 了。
八、日誌校驗。日誌是最經常使用的部分,也極易致使磁盤硬件故障,而從損壞的日誌中恢復數據會致使更多的數據損壞。Ext4 的日誌校驗功能能夠很方便地判斷日誌數據是否損壞,並且它將 Ext3 的兩階段日誌機制合併成一個階段,在增長安全性的同時提升了性能。
九、「無日誌」(No Journaling)模式。日誌總歸有一些開銷,Ext4 容許關閉日誌,以便某些有特殊需求的用戶能夠藉此提高性能。
十、在線碎片整理。儘管延遲分配、多塊分配和 extents 能有效減小文件系統碎片,但碎片仍是不可避免會產生。Ext4 支持在線碎片整理,並將提供 e4defrag 工具進行個別文件或整個文件系統的碎片整理。
十一、inode 相關特性。Ext4 支持更大的 inode,較之 Ext3 默認的 inode 大小 128 字節,Ext4 爲了在 inode 中容納更多的擴展屬性(如納秒時間戳或 inode 版本),默認 inode 大小爲 256 字節。Ext4 還支持快速擴展屬性(fast extended attributes)和 inode 保留(inodes reservation)。
十二、持久預分配(Persistent preallocation)。P2P 軟件爲了保證下載文件有足夠的空間存放,經常會預先建立一個與所下載文件大小相同的空文件,以避免將來的數小時或數天以內磁盤空間不足致使下載失敗。Ext4 在文件系統層面實現了持久預分配並提供相應的 API(libc 中的 posix_fallocate()),比應用軟件本身實現更有效率。
1三、默認啓用 barrier。磁盤上配有內部緩存,以便從新調整批量數據的寫操做順序,優化寫入性能,所以文件系統必須在日誌數據寫入磁盤以後才能寫 commit 記錄,若 commit 記錄寫入在先,而日誌有可能損壞,那麼就會影響數據完整性。Ext4 默認啓用 barrier,只有當 barrier 以前的數據所有寫入磁盤,才能寫 barrier 以後的數據。(可經過 「mount -o barrier=0」 命令禁用該特性。)
【ZFS】:
ZFS源自於Sun Microsystems爲Solaris操做系統開發的文件系統。ZFS是一個具備高存儲容量、文件系統與卷管理概念整合、嶄新的磁盤邏輯結構的輕量級文件系統,同時也是一個便捷的存儲池管理系統。ZFS是一個使用CDDL協議條款受權的開源項目。
【HFS】:
一、HFS文件系統概念
分層文件系統(Hierarchical File System,HFS)是一種由蘋果電腦開發,並使用在Mac OS上的文件系統。最初被設計用於軟盤和硬盤,同時也能夠在在只讀媒體如CD-ROM上見到。
二、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卷不能做爲啓動用。
三、構成方式
分層文件系統把一個卷分爲許多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的連接同時打印出每個。