本文摘抄自http://www.cnblogs.com/heyonggang/p/3172570.htmlhtml
一、線程與進程的區別聯繫程序員
二、進程通訊方式有哪些?面試
三、同步的方式有哪些?算法
四、ThreadLocal與其它同步機制的比較shell
五、進程死鎖的條件數據庫
第一題:數組
(1)線程是進程的一個實體,一個進程能夠擁有多個線程,多個線程也能夠併發執行。一個沒有線程的進程也能夠看作是單線程的,一樣線程也常常被看作是一種輕量級的進程。而且進程能夠不依賴於線程而單獨存在,而線程則否則。安全
(2)進程是併發程序在一個數據集合上的一次執行過程,進程是系統進行資源分配和調度的獨立單位,線程是進程的實體,它是比進程更小的可以獨立執行的基本單元,線程本身不擁有任何系統資源,可是它能夠訪問其隸屬進程的所有資源。服務器
(3) 與進程的控制表PCB類似,線程也有本身的控制表TCB,可是TCB中所保存的線程狀態比PCB表少得多。網絡
進程的做用與定義:是爲了提升CPU的執行效率,爲了不因等待而形成CPU空轉以及其餘計算機硬件資源的浪費而提出來的。
線程的引入:例如,有一個Web服務器要進程的方式併發地處理來自不一樣用戶的網頁訪問請求的話,能夠建立父進程和多個子進 程的方式來進行處理,可是建立一個進程要花費較大的系統開銷和佔用較多的資源。除外,這些不一樣的用戶子進程在執行的時候涉及到進程上下文切換,上下文切換 是一個複雜的過程。因此,爲了減小進程切換和建立的開銷,提升執行效率和節省資源,人們在操做系統中引入了"線程(thread)"的概念。
第二題:
進程間通信的方式:
幾種方式的比較:
第三題:
線程同步指多個線程同時訪問某資源時,採用一系列的機制以保證同時最多隻能一個線程訪問該資源。線程同步是多線程中必須考慮和解決的問題,由於極可能發生多個線程同時訪問(主要是寫操做)同一資源,若是不進行線程同步,極可能會引發數據混亂,形成線程死鎖等問題;
線程同步的方式:
總結比較:
第四題:
Threadlocal 和其餘全部的同步機制都是爲了解決多線程中的對同一變量的訪問衝突,在普通的同步機制 中,是經過對對象加鎖來實現多個線程對同一變量的安全訪問的。這時該變量是多個線程共享的,使用這種同步機制須要很細緻的分析在何時對變量進行讀寫, 何時須要鎖定某個對象,何時釋放該對象的索等等。全部這些都是由於多個線程共享了該資源形成的。Threadlocal就從另外一個角度來解決多線程的併發訪問,Threadlocal會爲每個線程維護一個和該線程綁定的變量副本,從而隔離了多個線程的數據共享,每個線程都擁有本身的變量副本,從而也就沒有必要對該變量進行同步了。ThreadLocal提供了線程安全的共享對象,在編寫多線程代碼時,能夠把不安全的變量封裝進ThreadLocal。
總結:當 然ThreadLocal並 不能替代同步機制,二者面向的問題領域不一樣。同步機制是爲了同步多個線程對相同資源的併發訪問,是爲了多個線程之間進行通訊的有效方式;而 ThreadLocal是隔離多個線程的數據共享,從根本上就不在多個線程之間共享資源(變量),這樣固然不須要對多個線程進行同步了。因此,若是你須要 進行多個線程之間進行通訊,則使用同步機制;若是須要隔離多個線程之間的共享衝突,可使用ThreadLocal,這將極大地簡化你的程序,使程序更加 易讀、簡潔。
第五題:
首先回答死鎖的定義,所謂死鎖就是一個進程集合中的多個進程由於競爭資源,而形成的互相等待現象。
死鎖的緣由:系統資源不足;多個進程的推動順序不合理
死鎖的必要條件:
處理死鎖的策略:
操做系統常見面試題(答案僅供參考)
1. 什麼是中斷?中斷時CPU作什麼工做?
中斷是指在計算機執行期間,系統內發生任何非尋常的或非預期的急需處理事件,使得CPU暫時中斷當前正在執行的程序而轉去執行相應的事件處理程序。待處理完畢後又返回原來被中斷處繼續執行或調度新的進程執行的過程。
2. CPU在上電後,進入操做系統的main()以前必須作什麼?
加電後,會觸發CPU的reset信號,致使CPU復位,而後CPU會跳到(arm下0x00000000,x86下0xfffffff0)執行指令.主 要是作CPU初始化,肯定CPU的工做模式,mmu初始化。創建頁表段表,初始化中孤單控制器和中斷向量表,初始化輸入和輸出,初始化 nandflash,把OS的TEXT區加載到sdram,而後跳轉到sdram的main()
3. 簡術ISO OSI的物理層Layer1,鏈路層Layer2,網絡層Layer3的任務。
網絡層:資料傳送的目的地尋址,再選擇出傳送資料的最佳路線;
鏈路層:負責網絡上資料封包如何傳送的方式;
物理層:在設備與傳輸媒介之間創建及終止鏈接。參與通信過程使得資源能夠在共享的多用戶中有效分配,對信號進行調製或轉換使得用戶設備中的數字信號定義能與信道上實際傳送的數字信號相匹配
4. makefile文件的做用是什麼?
一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件須要先編譯,哪些文件須要後 編譯,哪些文件須要從新編譯,甚至於進行更復雜的功能操做,由於 makefile就像一個Shell腳本同樣,其中也能夠執行操做系統的命令。makefile帶來的好處就是——「自動化編譯」,一旦寫好,只須要一個 make命令,整個工程徹底自動編譯,極大的提升了軟件開發的效率。make是一個命令工具,是一個解釋makefile中指令的命令工具,通常來講,大 多數的IDE都有這個命令,好比:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成爲了一種在工程方面的編譯方法。
5. UNIX顯示文件夾中文件名的命令是什麼?能使文件內容顯示在屏幕的命令是什麼?
ls cat
type tail
6. Linux文件屬性有哪些?(共十位)
-rw-r--r—1
第一個屬性表明這個文件是【目錄、文件或連結文件】,當爲[ d ]則是目錄,爲[ - ]則是文件,如果[ l ]則表示爲連結檔(link file);
如果[ b ]則表示爲裝置文件裏面的可供儲存的接口設備;
如果[ c ]則表示爲裝置文件裏面的串行端口設備,例如鍵盤、鼠標。接下來的屬性中,三個爲一組,且均爲【rwx】三個參數的組合,其中[r]代可讀、[w]表明可寫、[x]表明可執行:
第一組爲【擁有人的權限】,第二組爲【同羣組的權限】; 第三組爲【其它非本羣組的權限】。
7. Linux中經常使用到的命令
顯示文件目錄命令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中
8. 進程通訊有哪些方式?
管道通訊、消息通訊、內存共享
9. 說說分段和分頁。
頁是信息的物理單位,分頁是爲實現離散分配方式,以消減內存的外零頭,提升內存的利用率;或者說,分頁僅僅是因爲系統管理的須要,而不是用戶的須要。
段是信息的邏輯單位,它含有一組其意義相對完整的信息。分段的目的是爲了能更好的知足用戶的須要。頁的大小固定且由系統肯定,把邏輯地址劃分爲頁號和頁內 地址兩部分,是由機器硬件實現的,於是一個系統只能有一種大小的頁面。 段的長度卻不固定,決定於用戶所編寫的程序,一般由編輯程序在對源程序進行編輯時,根據信息的性質來劃分。
分頁的做業地址空間是維一的,即單一的線性空間,程序員只須利用一個記憶符,便可表示一地址。分段的做業地址空間是二維的,程序員在標識一個地址時,既需給出段名,又需給出段內地址
10.什麼是進程和線程?有何區別?
線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.
線程本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),可是它可與同屬一個進程的其餘的線程共享進程所擁有的所有資源.一個線程能夠建立和撤銷另外一個線程;同一個進程中的多個線程之間能夠併發執行.
11.Windows下的內存是如何管理的?
Window操縱內存能夠分兩個層面:物理內存和虛擬內存。
其中物理內存由系統管理,不容許應用程序直接訪問,應用程序可見的只有一 個2G地址空間,而內存分配是經過堆進行的,對於每一個進程都有本身的默認堆,當一個堆建立後,就經過虛擬內存操做保留了相應大小的地址塊(不佔有實際的內 存,系統消耗很小),當在堆上分配一塊內存時,系統在堆的地址表裏找到一個空閒塊(若是找不到,且堆建立屬性是可擴充的,則擴充堆大小)爲這個空閒塊所包 含的全部內存頁提交物理對象(物理內存上或硬盤上的交換文件上)。這時能夠就訪問這部分地址了。提交時,系統將對全部進程的內存統一調配,若是物理內存不 夠,系統試圖把一部分進程暫時不訪問的頁放入交換文件,以騰出部分物理內存。釋放內存時,只在堆中將所在的頁解除提交(相應的物理對象被解除),繼續保留 地址空間。
若是要知道某個地址是否被佔用/可不能夠訪問,只要查詢此地址的虛擬內存狀VirtualQuery),若是是提交,則能夠訪問。若是僅僅保留,或沒保留,則產生一 個 軟件異常。此外有些內存頁能夠設置各類屬性。若是是隻讀,向內寫也會產生軟件異常
12.操做系統的內容分爲幾塊?什麼叫作虛擬內存?優勢管理屬於操做系統的內容嗎?
13.進程是一個比較重要的概念,那麼進程有哪幾種狀態?
基本狀態有3種,即ready(就緒),running(運行),wait(等待).
14.說出你所知道的保持進程同步的方法?
進程間同步的主要方法有內存屏障,互斥鎖,信號量和鎖,管程,消息,管道
15.OS中如何實現物理地址到邏輯志址的轉換?
16.解釋一下分頁式管理。
用戶程序的地址空間被劃分紅若干固定大小的區域,稱爲「頁」,相應地,內存空間分紅若干個物理塊,頁和塊的大小相等。可將用戶程序的任一頁放在內存的任一塊中,實現了離散分配.
17.什麼是死鎖,其條件是什麼?怎麼避免死鎖?
死鎖是指,在兩個或多個併發進程中,若是每一個進程持有某種資源而又都等待別的進程釋放它們如今保持着的資源,不然就不能向前推動.此時,每一個進程都佔用了 必定的資源可是又不能向前推動,稱這一組進程產生了死鎖. 通俗的講,就是兩個或多個進程無止境的等候着永遠不會成立的條件的一種系統狀態. 其條件是爲
1.互斥:存在這樣一種資源,它在某個時刻只能被分配給一個執行緒使用;
2.持有:當請求的資源已被佔用從而致使執行緒阻塞時,資源佔用者不但無需釋放該資源,並且還能夠繼續請求更多資源;
3.不可剝奪:執行緒得到到的互斥資源不可被強行剝奪,換句話說,只有資源佔用者本身才能釋放資源;
4.環形等待:若干執行緒以不一樣的次序獲取互斥資源,從而在由多個執行緒組成的環形鏈中,每一個執行緒都在等待下一個執行緒釋放它持有的資源。
避免死鎖:按順序訪問,事務最小化
18.什麼是緩衝區溢出?有什麼危害?其緣由是什麼?
緩衝區溢出是指當計算機向緩衝區內填充數據位數時超過了緩衝區自己的容量溢出的數據覆蓋在合法數據上,
危害:在當前網絡與分佈式系統安全中,被普遍利用的50%以上都是緩衝區溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕蟲。而緩衝區溢出中,最爲危險的是堆棧溢出,由於入侵者能夠利用堆棧溢出,在函數返回時改變返回程序的地址,讓其跳轉到任意地址,帶來的危害一種是程序崩潰致使拒絕服務,另一種就是跳轉而且執行一段惡意代碼,好比獲得shell,而後隨心所欲。
經過往程序的緩衝區寫超出其長度的內容,形成緩衝區的溢出,從而破壞程序的堆棧,使程序轉而執行其它指令,以達到攻擊的目的。形成緩衝區溢出的緣由是程序中沒有仔細檢查用戶輸入的參數
19.什麼是臨界區?如何解決衝突?
每一個進程中訪問臨界資源的那段程序稱爲臨界區,每次只准許一個進程進入臨界區,進入後不容許其餘進程進入。
① 若是有若干進程要求進入空閒的臨界區,一次僅容許一個進程進入。
② 任什麼時候候,處於臨界區內的進程不可多於一個。如已有進程進入本身的臨界區,則其它全部試圖進入臨界區的進程必須等待。
③ 進入臨界區的進程要在有限時間內退出,以便其它進程能及時進入本身的臨界區。
④ 若是進程不能進入本身的臨界區,則應讓出CPU,避免進程出現「忙等」現象。
20.解釋一下P操做與V操做。
P就是請求資源,V就是釋放資源
21.中斷和輪詢的特色。
一、什麼是進程(Process)和線程(Thread)?有何區別?
進程是具備必定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位。線程是進程的一個實體,是CPU調度和 分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和 棧),可是它可與同屬一個進程的其餘的線程共享進程所擁有的所有資源。一個線程能夠建立和撤銷另外一個線程,同一個進程中的多個線程之間能夠併發執行。
進程與應用程序的區別在於應用程序做爲一個靜態文件存儲在計算機系統的硬盤等存儲空間中,而進程則是處於動態條件下由操做系統維護的系統資源管理實體。
二、Windows下的內存是如何管理的?
Windows提供了3種方法來進行內存管理:虛擬內存,最適合用來管理大型對象或者結構數組;內存映射文件,最適合用來管理大型數據流(一般來自文件)以及在單個計算機上運行多個進程之間共享數據;內存堆棧,最適合用來管理大量的小對象。
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),若干進程之間造成一種首尾相接的循環等待資源關係。
這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不知足,就不會發生死鎖。
死鎖的解除與預防:理解了死鎖的緣由,尤爲是產生死鎖的四個必要條件,就能夠最大可能地避免、預防和解除死鎖。因此,在系統設計、進程調度等方面注意如 何不讓這四個必要條件成立,如何肯定資源的合理分配算法,避免進程永久佔據系統資源。此外,也要防止進程在處於等待狀態的狀況下佔用資源。所以,對資源的 分配要給予合理的規劃。
死鎖的處理策略:鴕鳥策略、預防策略、避免策略、檢測與恢復策略。