操作系統面試題及答案
操作系統面試題及答案
許多面試操作系統方面的用戶經常在面試的時候遇到很多問題,下面由學習啦小編為大家整理了操作系統面試題及答案,希望對大家有幫助。
操作系統面試題及答案一
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),若干進程之間形成一種首尾相接的循環等待資源關系。
這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。
死鎖的解除與預防:理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖。所以,在系統設計、進程調度等方面注意如何不讓這四個必要條件成立,如何確定資源的合理分配算法,避免進程永久占據系統資源。此外,也要防止進程在處于等待狀態的情況下占用資源。因此,對資源的分配要給予合理的規劃。
死鎖的處理策略:鴕鳥策略、預防策略、避免策略、檢測與恢復策略。
操作系統面試題及答案二
1、程序和進程
進程由兩個部分組成:1)操作系統用來管理進程的內核對象。內核對象也是系統用來存放關于進程的統計信息的地方。2)地址空間。它包含所有可執行模塊或DLL模塊的代碼和數據。它還包含動態內存分配的空間。如線程堆棧和堆分配空間。
定義 | 使用系統運行資源情況 | |
程序 | 計算機指令的集合,它以文件的形式存儲在磁盤上。程序是靜態實體(passive Entity),在多道程序系統中,它是不能獨立運行的,更不能與其他程序并發執行。 | 不使用【程序不能申請系統資源,不能被系統調度,也不能作為獨立運行的單位,因此,它不占用系統的運行資源】。 |
進程 | 通常被定義為一個正在運行的程序的實例,是一個程序在其自身的地址空間中的一次執行活動。 定義:進程是進程實體(包括:程序段、相關的數據段、進程控制塊PCB)的運行過程,是系統進行資源分配和調度的一個獨立單位。 | 使用【進程是資源申請、調度和獨立運行的單位,因此,它使用系統中的運行資源?!?/span> |
2、進程與線程
如果說操作系統引入進程的目的是為了提高程序并發執行,以提高資源利用率和系統吞吐量。那么操作系統中引入線程的目的,則是為了減少進程并發執行過程中所付出的時空開銷,使操作系統能很好的并發執行。
進程process定義了一個執行環境,包括它自己私有的地址空間、一個句柄表,以及一個安全環境;線程則是一個控制流,有他自己的調用棧call stack,記錄了它的執行歷史。
線程由兩個部分組成:1)線程的內核對象,操作系統用它來對線程實施管理。內核對象也是系統用來存放線程統計信息的地方。2)線程堆棧,它用于維護線程在執行代碼時需要的所有參數和局部變量。當創建線程時,系統創建一個線程內核對象。該線程內核對象不是線程本身,而是操作系統用來管理線程的較小的數據結構??梢詫⒕€程內核對象視為由關于線程的統計信息組成的一個小型數據結構。
進程與線程的比較如下:
比較 | 進程 | 線程 |
活潑性 | 不活潑(只是線程的容器) | 活潑 |
地址空間 | 系統賦予的獨立的虛擬地址空間(對于32位進程來說,這個地址空間是4GB) | 在進程的地址空間執行代碼。線程只有一個內核對象和一個堆棧,保留的記錄很少,因此所需要的內存也很少。因為線程需要的開銷比進程少 |
調度 | 僅是資源分配的基本單位 | 獨立調度、分派的基本單位 |
并發性 | 僅進程間并發(傳統OS) | 進程間、線程間并發 |
擁有資源 | 資源擁有的基本單位 | 基本上不擁有資源 |
系統開銷 | 創建、撤銷、切換開銷大 | 僅保存少量寄存器內容,開銷小。 |
3、進程同步
進程同步的主要任務:是對多個相關進程在執行次序上進行協調,以使并發執行的諸進程之間能有效地共享資源和相互合作,從而使程序的執行具有可再現性。
同步機制遵循的原則:
(1)空閑讓進;
(2)忙則等待(保證對臨界區的互斥訪問);
(3)有限等待(有限代表有限的時間,避免死等);
(4)讓權等待,(當進程不能進入自己的臨界區時,應該釋放處理機,以免陷入忙等狀態)。
4、進程間的通信是如何實現的?
進程通信,是指進程之間的信息交換(信息量少則一個狀態或數值,多者則是成千上萬個字節)。因此,對于用信號量進行的進程間的互斥和同步,由于其所交換的信息量少而被歸結為低級通信。
所謂高級進程通信指:用戶可以利用操作系統所提供的一組通信命令傳送大量數據的一種通信方式。操作系統隱藏了進程通信的實現細節?;蛘哒f,通信過程對用戶是透明的。
高級通信機制可歸結為三大類:
(1)共享存儲器系統(存儲器中劃分的共享存儲區);實際操作中對應的是“剪貼板”(剪貼板實際上是系統維護管理的一塊內存區域)的通信方式,比如舉例如下:word進程按下ctrl+c,在ppt進程按下ctrl+v,即完成了word進程和ppt進程之間的通信,復制時將數據放入到剪貼板,粘貼時從剪貼板中取出數據,然后顯示在ppt窗口上。
(2)消息傳遞系統(進程間的數據交換以消息(message)為單位,當今最流行的微內核操作系統中,微內核與服務器之間的通信,無一例外地都采用了消息傳遞機制。應用舉例:郵槽(MailSlot)是基于廣播通信體系設計出來的,它采用無連接的不可靠的數據傳輸。郵槽是一種單向通信機制,創建郵槽的服務器進程讀取數據,打開郵槽的客戶機進程寫入數據。
(3)管道通信系統(管道即:連接讀寫進程以實現他們之間通信的共享文件(pipe文件,類似先進先出的隊列,由一個進程寫,另一進程讀))。實際操作中,管道分為:匿名管道、命名管道。匿名管道是一個未命名的、單向管道,通過父進程和一個子進程之間傳輸數據。匿名管道只能實現本地機器上兩個進程之間的通信,而不能實現跨網絡的通信。命名管道不僅可以在本機上實現兩個進程間的通信,還可以跨網絡實現兩個進程間的通信。
同一機器兩個進程間通信 | 跨網絡通信 | |
剪貼板Clipboard | 可以 | 不可以 |
匿名管道Pipe | 可以 | 不可以 |
命名管道(點對點單一通信,數據量可較大)Namedpipe | 可以 | 可以 |
郵槽(一對多,數據量較小,424字節以下)Mailslot | 可以 | 可以 |
5、線程同步
根據用戶模式及內核模式下的同步方式的不同,分類及對比如下:
內核對象/ 非內核對象 | 含義 | 缺點 | 適用 | |
關鍵代碼段(臨界區)CriticalSection | 非內核對象,工作在用戶方式下,為用戶模式對象 | 從程序代碼的角度來控制線程的并發性 | 1.因為在等待進入關鍵代碼段時無法設定超時值,所以其很容易進入死鎖狀態。2.不能跨進程使用。 | 單個進程中線程間的同步(同步速度快) |
事件對象Event | 內核對象 | 所有內核對象中最基本的。 | 速度較慢(相比用戶模式實現線程同步) | 多個進程間的各個線程間實現同步 |
互斥對象Mutex | 內核對象 | 代表對一個資源的獨占式訪問 | ||
信號量 Semaphore | 內核對象 | 使用計數器來控制程序對一個共享資源的訪問 |
由于進程同步產生了一系列經典的同步問題“生產者-消費者”問題,“哲學家進餐”問題,“讀者-寫者”問題。
