一道麵試題:操作係統常見麵試題總結
FROM:qitian0008(https://blog.csdn.net/qitian0008/article/details/7887168)
1什麼是進程Process和線程Thread有何區別
進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動進程是係統進行資源分配和調度的一個獨立單位。線程是進程的一個實體是CPU調度和分派的基本單位它是比進程更小的能獨立運行的基本單位。線程自己基本上不擁有係統資源隻擁有一點在運行中必不可少的資源如程序計數器一組寄存器和棧但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。一個線程可以創建和撤銷另一個線程同一個進程中的多個線程之間可以並發執行。
進程與應用程序的區別在於應用程序作為一個靜態文件存儲在計算機係統的硬盤等存儲空間中而進程則是處於動態條件下由操作係統維護的係統資源管理實體。
2Windows下的內存是如何管理的
Windows提供了3種方法來進行內存管理虛擬內存最適合用來管理大型對象或者結構數組內存映射文件最適合用來管理大型數據流通常來自文件以及在單個計算機上運行多個進程之間共享數據內存堆棧最適合用來管理大量的小對象。
Windows操縱內存可以分兩個層麵物理內存和虛擬內存。
其中物理內存由係統管理不允許應用程序直接訪問應用程序可見的隻有一個2G地址空間而內存分配是通過堆進行的。對於每個進程都有自己的默認堆當一個堆創建後就通過虛擬內存操作保留了相應大小的地址塊不占有實際的內存係統消耗很小。當在堆上分配一塊內存時係統在堆的地址表裏找到一個空閑塊如果找不到且堆創建屬性是可擴充的則擴充堆大小為這個空閑塊所包含的所有內存頁提交物理對象在物理內存上或硬盤的交換文件上這時就可以訪問這部分地址。提交時係統將對所有進程的內存統一調配如果物理內存不夠係統試圖把一部分進程暫時不訪問的頁放入交換文件以騰出部分物理內存。釋放內存時隻在堆中將所在的頁解除提交相應的物理對象被解除繼續保留地址空間。
如果要知道某個地址是否被占用/可不可以訪問隻要查詢此地址的虛擬內存狀態即可。如果是提交則可以訪問。如果僅僅保留或沒保留則產生一個軟件異常。此外有些內存頁可以設置各種屬性。如果是隻讀向內存寫也會產生軟件異常。
3Windows消息調度機製是?
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說出你所知道的保持進程同步的方法?
進程間同步的主要方法有原子操作、信號量機製、自旋鎖、管程、會合、分布式係統等。
9Linux中常用到的命令
顯示文件目錄命令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中
10Linux文件屬性有哪些共十位
-rw-r--r--那個是權限符號總共是- --- --- ---這幾個位。
第一個短橫處是文件類型識別符-表示普通文件c表示字符設備characterb表示塊設備blockd表示目錄directoryl表示鏈接文件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
11makefile文件的作用是什麼
一個工程中的源文件不計其數其按類型、功能、模塊分別放在若幹個目錄中。makefile定義了一係列的規則來指定哪些文件需要先編譯哪些文件需要後編譯哪些文件需要重新編譯甚至於進行更複雜的功能操作。因為makefile就像一個Shell腳本一樣其中也可以執行操作係統的命令。makefile帶來的好處就是——“自動化編譯”。一旦寫好隻需要一個make命令整個工程完全自動編譯極大地提高了軟件開發的效率。make是一個命令工具是一個解釋makefile中指令的命令工具。一般來說大多數的IDE都有這個命令比如Delphi的makeVisual C++的nmakeLinux下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若幹進程之間形成一種首尾相接的循環等待資源關係。
這四個條件是死鎖的必要條件隻要係統發生死鎖這些條件必然成立而隻要上述條件之一不滿足就不會發生死鎖。
死鎖的解除與預防理解了死鎖的原因尤其是產生死鎖的四個必要條件就可以最大可能地避免、預防和解除死鎖。所以在係統設計、進程調度等方麵注意如何不讓這四個必要條件成立如何確定資源的合理分配算法避免進程永久占據係統資源。此外也要防止進程在處於等待狀態的情況下占用資源。因此對資源的分配要給予合理的規劃。
死鎖的處理策略鴕鳥策略、預防策略、避免策略、檢測與恢複策略。
最後更新:2017-04-03 18:52:08