操作系統面試題


本文摘抄自http://www.cnblogs.com/heyonggang/p/3172570.html

1、線程與進程的區別聯系

2、進程通信方式有哪些?

3、同步的方式有哪些?

4、ThreadLocal與其它同步機制的比較

5、進程死鎖的條件

第一題:

(1)線程是進程的一個實體,一個進程可以擁有多個線程,多個線程也可以並發執行。一個沒有線程的進程也可以看做是單線程的,同樣線程也經常被看做是一種輕量級的進程。並且進程可以不依賴於線程而單獨存在,而線程則不然。

(2)進程是並發程序在一個數據集合上的一次執行過程,進程是系統進行資源分配和調度的獨立單位,線程是進程的實體,它是比進程更小的能夠獨立執行的基本單元,線程自己不擁有任何系統資源,但是它可以訪問其隸屬進程的全部資源。

(3) 與進程的控制表PCB相似,線程也有自己的控制表TCB,但是TCB中所保存的線程狀態比PCB表少得多。

進程的作用與定義:是為了提高CPU的執行效率,為了避免因等待而造成CPU空轉以及其他計算機硬件資源的浪費而提出來的。

線程的引入:例如,有一個Web服務器要進程的方式並發地處理來自不同用戶的網頁訪問請求的話,可以創建父進程和多個子進 程的方式來進行處理,但是創建一個進程要花費較大的系統開銷和占用較多的資源。除外,這些不同的用戶子進程在執行的時候涉及到進程上下文切換,上下文切換 是一個復雜的過程。所以,為了減少進程切換和創建的開銷,提高執行效率和節省資源,人們在操作系統中引入了"線程(thread)"的概念。

第二題:

進程間通訊的方式:

  • 管道中還有命名管道和非命名管道之分,非命名管道只能用於父子進程通訊,命名管道可用於非父子進程,命名管道就是FIFO,管道是先 進先出的通訊方式。FIFO是一種先進先出的隊列。它類似於一個管道,只允許數據的單向流動。每個FIFO都有一個名字,允許不相關的進程訪問同一個 FIFO,因此也成為命名管。
  • 消息隊列:是用於 兩個進程之間的通訊,首先在一個進程中創建一個消息隊列,然后再往消息隊列中寫數據,而另一個進程則從那個消息隊列 中取數據。需要注意的是,消息隊列是用創建文件的方式建立的,如果一個進程向某個消息隊列中寫入了數據之后,另一個進程並沒有取出數據,即使向消息隊列中 寫數據的進程已經結束,保存在消息隊列中的數據並沒有消失,也就是說下次再從這個消息隊列讀數據的時候,就是上次的數據!!!
  • 信號量, 不能傳遞復雜消息,只能用來同步
  • 共享內存,只要首先創建一個共享內存區,其它進程按照一定的步驟就能訪問到這個共享內存區中的數據,當然可讀可寫;

幾種方式的比較:

  • 管道:速度慢,容量有限
  • 消息隊列:容量受到系統限制,且要注意第一次讀的時候,要考慮上一次沒有讀完數據的問題。
  • 信號量:不能傳遞復雜消息,只能用來同步
  • 共享內存區:能夠很容易控制容量,速度快,但要保持同步,比如一個進程在寫的時候,另一個進程要注意讀寫的問題,相當於線程中的線程安全,當然,共享內存區同樣可以用作線程間通訊,不過沒這個必要,線程間本來就已經共享了一塊內存的。

第三題:

線程同步指多個線程同時訪問某資源時,采用一系列的機制以保證同時最多只能一個線程訪問該資源。線程同步是多線程中必須考慮和解決的問題,因為很可能發生多個線程同時訪問(主要是寫操作)同一資源,如果不進行線程同步,很可能會引起數據混亂,造成線程死鎖等問題;

線程同步的方式:

  • 臨界區:通過對多線程的串行化來訪問公共資源或者一段代碼,速度快,適合控制數據訪問
  • 互斥量:采用互斥對象機制,只有擁有互斥對象的線程才有訪問公共資源的權限,因為互斥對象只有一個,所以可以保證公共資源不會同時被多個線程訪問
  • 信號量:它允許多個線程同一時刻訪問同一資源,但是需要限制同一時刻訪問此資源的最大線程數目。信號量對象對線程的同步方式與前面幾種方法不同,信號允許多個線程同時使用共享資源,這與操作系統中PV操作相似。
  • 事件(信號):通過通知操作的方式來保持多線程的同步,還可以方便的實現多線程的優先級比較的操作

總結比較: 

  • 互斥量與臨界區的作用非常相似,但互斥量是可以命名的,也就是說它可以跨越進程使用。所以創建互斥量需要的資源更多,所以如果只為了在進程內部是用的話使用臨界區會帶來速度上的優勢並能夠減少資源占用量。因為互斥量是跨進程的互斥量一旦被創建,就可以通過名字打開它。
  • 互斥量(Mutex),信號燈(Semaphore),事件(Event)都可以被跨越進程使用來進行同步數據操作,而其他的對象與 數據同步操作無關,但對於進程和線程來講,如果進程和線程在運行狀態則為無信號狀態,在退出后為有信號狀態。所以可以使用 WaitForSingleObject來等待進程和線程退出。
  • 通過互斥量可以指定資源被獨占的方式使用,但如果有下面一種情況通過互斥量就無法處理,比如現在一位用戶購買了一份三個並發訪問許可 的數據庫系統,可以根據用戶購買的訪問許可數量來決定有多少個線程/進程能同時進行數據庫操作,這時候如果利用互斥量就沒有辦法完成這個要求,信號燈對象 可以說是一種資源計數器。

第四題:

     Threadlocal 和其他所有的同步機制都是為了解決多線程中的對同一變量的訪問沖突,在普通的同步機制 中,是通過對對象加鎖來實現多個線程對同一變量的安全訪問的。這時該變量是多個線程共享的,使用這種同步機制需要很細致的分析在什么時候對變量進行讀寫, 什么時候需要鎖定某個對象,什么時候釋放該對象的索等等。所有這些都是因為多個線程共享了該資源造成的。Threadlocal就從另一個角度來解決多線程的並發訪問,Threadlocal會為每一個線程維護一個和該線程綁定的變量副本,從而隔離了多個線程的數據共享,每一個線程都擁有自己的變量副本,從而也就沒有必要對該變量進行同步了。ThreadLocal提供了線程安全的共享對象,在編寫多線程代碼時,可以把不安全的變量封裝進ThreadLocal。

     總結:當 然ThreadLocal並 不能替代同步機制,兩者面向的問題領域不同。同步機制是為了同步多個線程對相同資源的並發訪問,是為了多個線程之間進行通信的有效方式;而 ThreadLocal是隔離多個線程的數據共享,從根本上就不在多個線程之間共享資源(變量),這樣當然不需要對多個線程進行同步了。所以,如果你需要 進行多個線程之間進行通信,則使用同步機制;如果需要隔離多個線程之間的共享沖突,可以使用ThreadLocal,這將極大地簡化你的程序,使程序更加 易讀、簡潔。

第五題:

   首先回答死鎖的定義,所謂死鎖就是一個進程集合中的多個進程因為競爭資源,而造成的互相等待現象。

   死鎖的原因:系統資源不足;多個進程的推進順序不合理

   死鎖的必要條件:

  • 互斥條件(Mutual exclusion):資源不能被共享,只能由一個進程使用。
  • 請求與保持條件(Hold and wait):已經得到資源的進程可以再次申請新的資源。
  • 非剝奪條件(No pre-emption):已經分配的資源不能從相應的進程中被強制地剝奪。
  • 循環等待條件(Circular wait):系統中若干進程組成環路,改環路中每個進程都在等待相鄰進程正占用的資源。

處理死鎖的策略:

  • 忽略該問題。例如鴕鳥算法,該算法可以應用在極少發生死鎖的情況下。傳說中,鴕鳥看到危險就把頭深埋地下,這是顯然是一種很消極的策略。
  • 檢測死鎖並且恢復。
  • 通過對資源有序分配,以避免循環等待的“環路”發生。
  • 通過破壞死鎖的必要條件,來防止死鎖的產生。

操作系統常見面試題(答案僅供參考)
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.中斷和輪詢的特點。

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),若干進程之間形成一種首尾相接的循環等待資源關系。

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM