操作系統常見面試題及答案

操作系統常見面試題及答案
1. 什麼是進程(Process)和線程(Thread)?

有何區別? 進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位。線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以併發執行。 進程與應用程序的區別在於應用程序作爲一個靜態文件存儲在計算機系統的硬盤等存儲空間中,而進程則是處於動態條件下由操作系統維護的系統資源管理實體
2. Windows下的內存是如何管理的?
Windows提供了3種方法來進行內存管理:虛擬內存,最適合用來管理大型對象或者結構數組;內存映射文件,最適合用來管理大型數據流(通常來自文件)以及在單個計算機上運行多個進程之間共享數據;內存堆棧,最適合用來管理大量的小對象。
Window操縱內存可以分兩個層面:物理內存和虛擬內存。
其中物理內存由系統管理,不允許應用程序直接訪問,應用程序可見的只有一個2G地址空間,而內存分配是通過堆進行的,對於每個進程都有自己的默認堆,當一個堆創建後,就通過虛擬內存操作保留了相應大小的地址塊(不佔有實際的內存,系統消耗很小),當在堆上分配一塊內存時,系統在堆的地址表裏找到一個空閒塊(如果找不到,且堆創建屬性是可擴充的,則擴充堆大小)爲這個空閒塊所包含的所有內存頁提交物理對象(物理內存上或硬盤上的交換文件上)。這時可以就訪問這部分地址了。提交時,系統將對所有進程的內存統一調配,如果物理內存不夠,系統試圖把一部分進程暫時不訪問的頁放入交換文件,以騰出部分物理內存。釋放內存時,只在堆中將所在的頁解除提交(相應的物理對象被解除),繼續保留地址空間。
如果要知道某個地址是否被佔用/可不可以訪問,只要查詢此地址的虛擬內存狀VirtualQuery),如果是提交,則可以訪問。如果僅僅保留,或沒保留,則產生一個軟件異常。此外有些內存頁可以設置各種屬性。如果是隻讀,向內寫也會產生軟件異常。

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. 什麼是臨界區?如何解決衝突?
每個進程中訪問臨界資源的那段程序稱爲臨界區,每次只准許一個進程進入臨界區,進入後不允許其他進程進入。
① 如果有若干進程要求進入空閒的臨界區,一次僅允許一個進程進入。
② 任何時候,處於臨界區內的進程不可多於一個。如已有進程進入自己的臨界區,則其它所有試圖進入臨界區的進程必須等待。
③ 進入臨界區的進程要在有限時間內退出,以便其它進程能及時進入自己的臨界區。
④ 如果進程不能進入自己的臨界區,則應讓出CPU,避免進程出現“忙等”現象。

7. 說說分段和分頁
頁是信息的物理單位,分頁是爲實現離散分配方式,以消減內存的外零頭,提高內存的利用率;或者說,分頁僅僅是由於系統管理的需要,而不是用戶的需要。
段是信息的邏輯單位,它含有一組其意義相對完整的信息。分段的目的是爲了能更好的滿足用戶的需要。頁的大小固定且由系統確定,把邏輯地址劃分爲頁號和頁內地址兩部分,是由機器硬件實現的,因而一個系統只能有一種大小的頁面。 段的長度卻不固定,決定於用戶所編寫的程序,通常由編輯程序在對源程序進行編輯時,根據信息的性質來劃分。
分頁的作業地址空間是維一的,即單一的線性空間,程序員只須利用一個記憶符,即可表示一地址。分段的作業地址空間是二維的,程序員在標識一個地址時,既需給出段名,又需給出段內地址

8. 進程通信有哪些方式?
管道通信、消息通信、內存共享
9. 說出你所知道的保持進程同步的方法?
進程間同步的主要方法有內存屏障,互斥鎖,信號量和鎖,管程,消息,管道。
10. 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中

11. Linux文件屬性有哪些?(共十位)
-rw-r--r-l
那個是權限符號,總共是- --- --- ---這幾個位
第一個短橫處是文件類型識別符:-表示普通文件;c表示字符設備(character);b表示塊
設備(block);d表示目錄(directory);l表示鏈接文件(link)
後面第一個三個連續的短橫是用戶權限位(User),第二個三個連續短橫是組權限位(Group),第三個三個連續短橫是其他權限位(Other)。每個權限位有三個權限,r(讀權限),w(寫權限),x(執行權限)。如果每個權限位都有權限存在,那麼滿權限的情況就是:-rwxrwxrwx;權限爲空的情況就是- --- --- ---。
權限的設定可以用chmod命令,其格式位:chomod ugo+/-/=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

12. UNIX顯示文件夾中文件名的命令是什麼?能使文件內容顯示在屏幕的命令是什麼?
ls cat
type tail

13. makefile文件的作用是什麼?
一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要後編譯,哪些文件需要重新編譯,甚至於進行更復雜的功能操作,因爲 makefile就像一個Shell腳本一樣,其中也可以執行操作系統的命令。makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成爲了一種在工程方面的編譯方法。
14. 簡術ISO OSI的物理層Layer1,鏈路層Layer2,網絡層Layer3的任務
網絡層:資料傳送的目的地尋址,再選擇出傳送資料的最佳路線;
鏈路層:負責網絡上資料封包如何傳送的方式;
物理層:在設備與傳輸媒介之間建立及終止連接。參與通訊過程使得資源可以在共享的多用戶中有效分配,對信號進行調製或轉換使得用戶設備中的數字信號定義能與信道上實際傳送的數字信號相匹配。
15. CPU在上電後,進入操作系統的main()之前必須做什麼?
加電後,會觸發CPU的reset信號,導致CPU復位,然後CPU會跳到(arm下0x00000000,x86下0xfffffff0)執行指令。主要是做CPU初始化,確定CPU的工作模式,mmu初始化。建立頁表段表,初始化中孤單控制器和中斷向量表,初始化輸入和輸出,初始化nandflash,把OS的TEXT區加載到sdram,然後跳轉到sdram的main()
16. 什麼是中斷?中斷時CPU做什麼工作?
中斷是指在計算機執行期間,系統內發生任何非尋常的或非預期的急需處理事件,使得CPU暫時中斷當前正在執行的程序而轉去執行相應的事件處理程序。待處理完畢後又返回原來被中斷處繼續執行或調度新的進程執行的過程。
17. 存儲過程是什麼?有什麼用?有什麼優點?
存儲過程(Stored Procedure)是一組爲了完成特定功能的SQL 語句集,經編譯後存儲在數據庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是SQL 語句和可選控制流語句的預編譯集合,以一個名稱存儲並作爲一個單元處理。存儲過程存儲在數據庫內,可由應用程序通過一個調用執行,而且允許用戶聲明變量、有條件執行以及其它強大的編程功能。存儲過程在創建時即在服務器上進行編譯,所以執行起來比單個SQL語句快。
存儲過程的優點:(1)存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高數據庫執行速度;(2)當對數據庫進行復雜操作時(如對多個表進行Update, Insert, Query, Delete時),可將此複雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用;(3)存儲過程可以重複使用,可減少數據庫開發人員的工作量;(4)安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權。
存儲過程的缺點:(1)如果更改範圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則您仍需要更新程序集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣了。(2)可移植性差。由於存儲過程將應用程序綁定到 SQL Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。
18. 你知道操作系統的內容分爲幾塊嗎?什麼叫做虛擬內存?他和主存的關係如何?內存管理屬於操作系統的內容嗎?
操作系統的主要組成部分:進程和線程的管理,存儲管理,設備管理,文件管理。
虛擬內存是一些系統頁文件,存放在磁盤上,每個系統頁文件大小也爲4K,物理內存也被分頁,每個頁大小也爲4K,這樣虛擬頁文件和物理內存頁就可以對應,實際上虛擬內存就是用於物理內存的臨時存放的磁盤空間。頁文件就是內存頁,物理內存中每頁叫物理頁,磁盤上的頁文件叫虛擬頁,物理頁+虛擬頁就是系統所以使用的頁文件的總和。屬於。
19. 進程是一個比較重要的概念,那麼進程有哪幾種狀態嗎?
基本狀態有3種,即ready(就緒),running(運行),wait(等待).
20. OS中如何實現物理地址到邏輯地址的轉換?
CPU要利用其段式內存管理單元,先將邏輯地址轉換成一個線程地址,再利用其頁式內存管理單元,轉換爲最終物理地址。
21. 堆和棧的區別?
棧區,由編譯器自動分配釋放,存放函數的參數值,局部變量的值等。其操作方式類似於數據結構中的棧。堆:一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。注意它與數據結構中的堆是兩回事,分配方式是類似於鏈表。可能用到的關鍵字如下:new、malloc、delete、free等等。
22. 線程是否具有相同的堆棧?dll是否有獨立的堆棧?
每個線程有自己的堆棧。
DLL中有沒有獨立的堆棧,這個問題不好回答,或者說這個問題本身是否有問題。因爲DLL中的代碼是被某些線程所執行,只有線程擁有堆棧,如果DLL中的代碼是EXE中的線程所調用,那麼這個時候是不是說這個DLL沒有自己獨立的堆棧?如果DLL中的代碼是由DLL自己創建的線程所執行,那麼是不是說DLL有獨立的堆棧?
以上講的是堆棧,如果對於堆來說,每個DLL有自己的堆,所以如果是從DLL中動態分配的內存,最好是從DLL中刪除,如果你從DLL中分配內存,然後在EXE中,或者另外一個DLL中刪除,很有可能導致程序崩潰。
23. 網絡編程中設計併發服務器,使用“多進程”與“多線程”,請問有什麼區別?
進程:子進程是父進程的複製品。子進程獲得父進程數據空間、堆和棧的複製品。
線程:相對與進程而言,線程是一個更加接近與執行體的概念,它可以與同進程的其他線程共享數據,但擁有自己的棧空間,擁有獨立的執行序列。
兩者都可以提高程序的併發度,提高程序運行效率和響應時間。
線程和進程在使用上各有優缺點:線程執行開銷小,但不利於資源管理和保護;而進程正相反。同時,線程適合於在SMP機器上運行,而進程則可以跨機器遷移。
24. 解釋一下分頁式管理.
用戶程序的地址空間被劃分成若干固定大小的區域,稱爲“頁”,相應地,內存空間分成若干個物理塊,頁和塊的大小相等。可將用戶程序的任一頁放在內存的任一塊中,實現了離散分配。
25. 解釋一下P操作與V操作
P就是請求資源,V就是釋放資源
26. 什麼是緩衝區溢出?有什麼危害?其原因是什麼?
緩衝區溢出是指當計算機向緩衝區內填充數據位數時超過了緩衝區本身的容量溢的數據覆蓋在合法數據上,
危害:在當前網絡與分佈式系統安全中,被廣泛利用的50%以上都是緩衝區溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕蟲。而緩衝區溢出中,最爲危險的是堆棧溢出,因爲***者可以利用堆棧溢出,在函數返回時改變返回程序的地址,讓其跳轉到任意地址,帶來的危害一種是程序崩潰導致拒絕服務,另外一種就是跳轉並且執行一段惡意代碼,比如得到shell,然後爲所欲爲。通過往程序的緩衝區寫超出其長度的內容,造成緩衝區的溢出,從而破壞程序的堆棧,使程序轉而執行其它指令,以達到***的目的。
造成緩衝區溢出的原因是程序中沒有仔細檢查用戶輸入的參數
27. 什麼是死鎖?其條件是什麼?怎樣避免死鎖?
死鎖的概念:在兩個或多個併發進程中,如果每個進程持有某種資源而又都等待別的進程釋放它們現在保持着的資源,否則就不能向前推進。此時,每個進程都佔用了一定的資源但是又不能向前推進,稱這一組進程產生了死鎖。 通俗的講,就是兩個或多個進程無止境的等候着永遠不會成立的條件的一種系統狀態。
死鎖產生的原因主要是:(1)系統資源不足;(2)進程運行推進的順序不合適;(3)資源分配不當。
產生死鎖的必要條件:(1)互斥(mutual exclusion),一個資源每次只能被一個進程使用;(2)佔有且等待(hold and wait),一個進程因請求資源而阻塞時,對已獲得的資源保持不放;(3)不可搶佔(no preemption),進程已獲得的資源,在未使用完之前,不能強行剝奪;(4)環形等待(circular wait),若干進程之間形成一種首尾相接的循環等待資源關係。這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。
死鎖的解除與預防:理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和 解除死鎖。所以,在系統設計、進程調度等方面注意如何不讓這四個必要條件成立,如何確定資源的合理分配算法,避免進程永久佔據系統資源。此外, 也要防止進程在處於等待狀態的情況下佔用資源。因此,對資源的分配要給予合理的規劃。
死鎖的處理策略:鴕鳥策略、預防策略、避免策略、檢測與解除死鎖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章