操作系統(tǒng)面試題及答案
操作系統(tǒng)面試題及答案
許多面試操作系統(tǒng)方面的用戶經(jīng)常在面試的時(shí)候遇到很多問題,下面由學(xué)習(xí)啦小編為大家整理了操作系統(tǒng)面試題及答案,希望對(duì)大家有幫助。
操作系統(tǒng)面試題及答案一
1、什么是進(jìn)程(Process)和線程(Thread)?有何區(qū)別?
進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。線程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位。線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源。一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程,同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。
進(jìn)程與應(yīng)用程序的區(qū)別在于應(yīng)用程序作為一個(gè)靜態(tài)文件存儲(chǔ)在計(jì)算機(jī)系統(tǒng)的硬盤等存儲(chǔ)空間中,而進(jìn)程則是處于動(dòng)態(tài)條件下由操作系統(tǒng)維護(hù)的系統(tǒng)資源管理實(shí)體。
2、Windows下的內(nèi)存是如何管理的?
Windows提供了3種方法來進(jìn)行內(nèi)存管理:虛擬內(nèi)存,最適合用來管理大型對(duì)象或者結(jié)構(gòu)數(shù)組;內(nèi)存映射文件,最適合用來管理大型數(shù)據(jù)流(通常來自文件)以及在單個(gè)計(jì)算機(jī)上運(yùn)行多個(gè)進(jìn)程之間共享數(shù)據(jù);內(nèi)存堆棧,最適合用來管理大量的小對(duì)象。
Windows操縱內(nèi)存可以分兩個(gè)層面:物理內(nèi)存和虛擬內(nèi)存。
其中物理內(nèi)存由系統(tǒng)管理,不允許應(yīng)用程序直接訪問,應(yīng)用程序可見的只有一個(gè)2G地址空間,而內(nèi)存分配是通過堆進(jìn)行的。對(duì)于每個(gè)進(jìn)程都有自己的默認(rèn)堆,當(dāng)一個(gè)堆創(chuàng)建后,就通過虛擬內(nèi)存操作保留了相應(yīng)大小的地址塊(不占有實(shí)際的內(nèi)存,系統(tǒng)消耗很小)。當(dāng)在堆上分配一塊內(nèi)存時(shí),系統(tǒng)在堆的地址表里找到一個(gè)空閑塊(如果找不到,且堆創(chuàng)建屬性是可擴(kuò)充的,則擴(kuò)充堆大小),為這個(gè)空閑塊所包含的所有內(nèi)存頁提交物理對(duì)象(在物理內(nèi)存上或硬盤的交換文件上),這時(shí)就可以訪問這部分地址。提交時(shí),系統(tǒng)將對(duì)所有進(jìn)程的內(nèi)存統(tǒng)一調(diào)配,如果物理內(nèi)存不夠,系統(tǒng)試圖把一部分進(jìn)程暫時(shí)不訪問的頁放入交換文件,以騰出部分物理內(nèi)存。釋放內(nèi)存時(shí),只在堆中將所在的頁解除提交(相應(yīng)的物理對(duì)象被解除),繼續(xù)保留地址空間。
如果要知道某個(gè)地址是否被占用/可不可以訪問,只要查詢此地址的虛擬內(nèi)存狀態(tài)即可。如果是提交,則可以訪問。如果僅僅保留,或沒保留,則產(chǎn)生一個(gè)軟件異常。此外,有些內(nèi)存頁可以設(shè)置各種屬性。如果是只讀,向內(nèi)存寫也會(huì)產(chǎn)生軟件異常。
3、Windows消息調(diào)度機(jī)制是?
A)指令隊(duì)列;B)指令堆棧;C)消息隊(duì)列;D)消息堆棧
答案:C
處理消息隊(duì)列的順序。首先Windows絕對(duì)不是按隊(duì)列先進(jìn)先出的次序來處理的,而是有一定優(yōu)先級(jí)的。優(yōu)先級(jí)通過消息隊(duì)列的狀態(tài)標(biāo)志來實(shí)現(xiàn)的。首先,最高優(yōu)先級(jí)的是別的線程發(fā)過來的消息(通過sendmessage);其次,處理登記消息隊(duì)列消息;再次處理QS_QUIT標(biāo)志,處理虛擬輸入隊(duì)列,處理wm_paint;最后是wm_timer。
4、描述實(shí)時(shí)系統(tǒng)的基本特性
在特定時(shí)間內(nèi)完成特定的任務(wù),實(shí)時(shí)性與可靠性。
所謂“實(shí)時(shí)操作系統(tǒng)”,實(shí)際上是指操作系統(tǒng)工作時(shí),其各種資源可以根據(jù)需要隨時(shí)進(jìn)行動(dòng)態(tài)分配。由于各種資源可以進(jìn)行動(dòng)態(tài)分配,因此,其處理事務(wù)的能力較強(qiáng)、速度較快。
5、中斷和輪詢的特點(diǎn)
對(duì)I/O設(shè)備的程序輪詢的方式,是早期的計(jì)算機(jī)系統(tǒng)對(duì)I/O設(shè)備的一種管理方式。它定時(shí)對(duì)各種設(shè)備輪流詢問一遍有無處理要求。輪流詢問之后,有要求的,則加以處理。在處理I/O設(shè)備的要求之后,處理機(jī)返回繼續(xù)工作。盡管輪詢需要時(shí)間,但輪詢要比I/O設(shè)備的速度要快得多,所以一般不會(huì)發(fā)生不能及時(shí)處理的問題。當(dāng)然,再快的處理機(jī),能處理的輸入輸出設(shè)備的數(shù)量也是有一定限度的。而且,程序輪詢畢竟占據(jù)了CPU相當(dāng)一部分處理時(shí)間,因此,程序輪詢是一種效率較低的方式,在現(xiàn)代計(jì)算機(jī)系統(tǒng)中已很少應(yīng)用。
程序中斷通常簡稱中斷,是指CPU在正常運(yùn)行程序的過程中,由于預(yù)先安排或發(fā)生了各種隨機(jī)的內(nèi)部或外部事件,使CPU中斷正在運(yùn)行的程序,而轉(zhuǎn)到為響應(yīng)的服務(wù)程序去處理。
輪詢——效率低,等待時(shí)間很長,CPU利用率不高。
中斷——容易遺漏一些問題,CPU利用率高。
6、什么是臨界區(qū)?如何解決沖突?
每個(gè)進(jìn)程中訪問臨界資源的那段程序稱為臨界區(qū),每次只準(zhǔn)許一個(gè)進(jìn)程進(jìn)入臨界區(qū),進(jìn)入后不允許其他進(jìn)程進(jìn)入。
(1)如果有若干進(jìn)程要求進(jìn)入空閑的臨界區(qū),一次僅允許一個(gè)進(jìn)程進(jìn)入;
(2)任何時(shí)候,處于臨界區(qū)內(nèi)的進(jìn)程不可多于一個(gè)。如已有進(jìn)程進(jìn)入自己的臨界區(qū),則其它所有試圖進(jìn)入臨界區(qū)的進(jìn)程必須等待;
(3)進(jìn)入臨界區(qū)的進(jìn)程要在有限時(shí)間內(nèi)退出,以便其它進(jìn)程能及時(shí)進(jìn)入自己的臨界區(qū);
(4)如果進(jìn)程不能進(jìn)入自己的臨界區(qū),則應(yīng)讓出CPU,避免進(jìn)程出現(xiàn)“忙等”現(xiàn)象。
7、說說分段和分頁
頁是信息的物理單位,分頁是為實(shí)現(xiàn)離散分配方式,以消減內(nèi)存的外零頭,提高內(nèi)存的利用率;或者說,分頁僅僅是由于系統(tǒng)管理的需要,而不是用戶的需要。
段是信息的邏輯單位,它含有一組其意義相對(duì)完整的信息。分段的目的是為了能更好的滿足用戶的需要。
頁的大小固定且由系統(tǒng)確定,把邏輯地址劃分為頁號(hào)和頁內(nèi)地址兩部分,是由機(jī)器硬件實(shí)現(xiàn)的,因而一個(gè)系統(tǒng)只能有一種大小的頁面。段的長度卻不固定,決定于用戶所編寫的程序,通常由編輯程序在對(duì)源程序進(jìn)行編輯時(shí),根據(jù)信息的性質(zhì)來劃分。
分頁的作業(yè)地址空間是一維的,即單一的線性空間,程序員只須利用一個(gè)記憶符,即可表示一地址。分段的作業(yè)地址空間是二維的,程序員在標(biāo)識(shí)一個(gè)地址時(shí),既需給出段名,又需給出段內(nèi)地址。
8、說出你所知道的保持進(jìn)程同步的方法?
進(jìn)程間同步的主要方法有原子操作、信號(hào)量機(jī)制、自旋鎖、管程、會(huì)合、分布式系統(tǒng)等。
9、Linux中常用到的命令
顯示文件目錄命令ls 如ls
改變當(dāng)前目錄命令cd 如cd /home
建立子目錄mkdir 如mkdir xiong
刪除子目錄命令rmdir 如rmdir /mnt/cdrom
刪除文件命令rm 如rm /ucdos.bat
文件復(fù)制命令cp 如cp /ucdos /fox
獲取幫助信息命令man 如man ls
顯示文件的內(nèi)容less 如less mwm.lx
重定向與管道type 如type readme>>direct,將文件readme的內(nèi)容追加到文direct中
10、linux文件屬性有哪些?(共十位)
-rw-r--r--那個(gè)是權(quán)限符號(hào),總共是- --- --- ---這幾個(gè)位。
第一個(gè)短橫處是文件類型識(shí)別符:-表示普通文件;c表示字符設(shè)備(character);b表示塊設(shè)備(block);d表示目錄(directory);l表示鏈接文件(link);后面第一個(gè)三個(gè)連續(xù)的短橫是用戶權(quán)限位(User),第二個(gè)三個(gè)連續(xù)短橫是組權(quán)限位(Group),第三個(gè)三個(gè)連續(xù)短橫是其他權(quán)限位(Other)。每個(gè)權(quán)限位有三個(gè)權(quán)限,r(讀權(quán)限),w(寫權(quán)限),x(執(zhí)行權(quán)限)。如果每個(gè)權(quán)限位都有權(quán)限存在,那么滿權(quán)限的情況就是:-rwxrwxrwx;權(quán)限為空的情況就是- --- --- ---。
權(quán)限的設(shè)定可以用chmod命令,其格式位:chmod ugoa+/-/=rwx filename/directory。例如:
一個(gè)文件aaa具有完全空的權(quán)限- --- --- ---。
chmod u+rw aaa(給用戶權(quán)限位設(shè)置讀寫權(quán)限,其權(quán)限表示為:- rw- --- ---)
chmod g+r aaa(給組設(shè)置權(quán)限為可讀,其權(quán)限表示為:- --- r-- ---)
chmod ugo+rw aaa(給用戶,組,其它用戶或組設(shè)置權(quán)限為讀寫,權(quán)限表示為:- rw- rw- rw-)
如果aaa具有滿權(quán)限- rwx rwx rwx。
chmod u-x aaa(去掉用戶可執(zhí)行權(quán)限,權(quán)限表示為:- rw- rwx rwx)
如果要給aaa賦予制定權(quán)限- rwx r-x r-x,命令為:
chmod u=rwx,Go=rx aaa
11、makefile文件的作用是什么?
一個(gè)工程中的源文件不計(jì)其數(shù),其按類型、功能、模塊分別放在若干個(gè)目錄中。makefile定義了一系列的規(guī)則來指定哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作。因?yàn)閙akefile就像一個(gè)Shell腳本一樣,其中也可以執(zhí)行操作系統(tǒng)的命令。makefile帶來的好處就是——“自動(dòng)化編譯”。一旦寫好,只需要一個(gè)make命令,整個(gè)工程完全自動(dòng)編譯,極大地提高了軟件開發(fā)的效率。make是一個(gè)命令工具,是一個(gè)解釋makefile中指令的命令工具。一般來說,大多數(shù)的IDE都有這個(gè)命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make??梢姡琺akefile都成為了一種在工程方面的編譯方法。
12、簡術(shù)OSI的物理層Layer1,鏈路層Layer2,網(wǎng)絡(luò)層Layer3的任務(wù)。
網(wǎng)絡(luò)層:通過路由選擇算法,為報(bào)文或分組通過通信子網(wǎng)選擇最適當(dāng)?shù)穆窂健?/p>
鏈路層:通過各種控制協(xié)議,將有差錯(cuò)的物理信道變?yōu)闊o差錯(cuò)的、能可靠傳輸數(shù)據(jù)幀的數(shù)據(jù)鏈路。
物理層:利用傳輸介質(zhì)為數(shù)據(jù)鏈路層提供物理連接,實(shí)現(xiàn)比特流的透明傳輸。
13、什么是中斷?中斷時(shí)CPU做什么工作?
中斷是指在計(jì)算機(jī)執(zhí)行期間,系統(tǒng)內(nèi)發(fā)生任何非尋常的或非預(yù)期的急需處理事件,使得CPU暫時(shí)中斷當(dāng)前正在執(zhí)行的程序而轉(zhuǎn)去執(zhí)行相應(yīng)的事件處理程序。待處理完畢后又返回原來被中斷處繼續(xù)執(zhí)行或調(diào)度新的進(jìn)程執(zhí)行的過程。
14、你知道操作系統(tǒng)的內(nèi)容分為幾塊嗎?什么叫做虛擬內(nèi)存?他和主存的關(guān)系如何?內(nèi)存管理屬于操作系統(tǒng)的內(nèi)容嗎?
操作系統(tǒng)的主要組成部分:進(jìn)程和線程的管理,存儲(chǔ)管理,設(shè)備管理,文件管理。虛擬內(nèi)存是一些系統(tǒng)頁文件,存放在磁盤上,每個(gè)系統(tǒng)頁文件大小為4K,物理內(nèi)存也被分頁,每個(gè)頁大小也為4K,這樣虛擬頁文件和物理內(nèi)存頁就可以對(duì)應(yīng),實(shí)際上虛擬內(nèi)存就是用于物理內(nèi)存的臨時(shí)存放的磁盤空間。頁文件就是內(nèi)存頁,物理內(nèi)存中每頁叫物理頁,磁盤上的頁文件叫虛擬頁,物理頁+虛擬頁就是系統(tǒng)所有使用的頁文件的總和。
15、線程是否具有相同的堆棧?dll是否有獨(dú)立的堆棧?
每個(gè)線程有自己的堆棧。
dll是否有獨(dú)立的堆棧?這個(gè)問題不好回答,或者說這個(gè)問題本身是否有問題。因?yàn)閐ll中的代碼是被某些線程所執(zhí)行,只有線程擁有堆棧。如果dll中的代碼是exe中的線程所調(diào)用,那么這個(gè)時(shí)候是不是說這個(gè)dll沒有獨(dú)立的堆棧?如果dll中的代碼是由dll自己創(chuàng)建的線程所執(zhí)行,那么是不是說dll有獨(dú)立的堆棧?
以上講的是堆棧,如果對(duì)于堆來說,每個(gè)dll有自己的堆,所以如果是從dll中動(dòng)態(tài)分配的內(nèi)存,最好是從dll中刪除;如果你從dll中分配內(nèi)存,然后在exe中,或者另外一個(gè)dll中刪除,很有可能導(dǎo)致程序崩潰。
16、什么是緩沖區(qū)溢出?有什么危害?其原因是什么?
緩沖區(qū)溢出是指當(dāng)計(jì)算機(jī)向緩沖區(qū)內(nèi)填充數(shù)據(jù)時(shí)超過了緩沖區(qū)本身的容量,溢出的數(shù)據(jù)覆蓋在合法數(shù)據(jù)上。
危害:在當(dāng)前網(wǎng)絡(luò)與分布式系統(tǒng)安全中,被廣泛利用的50%以上都是緩沖區(qū)溢出,其中最著名的例子是1988年利用fingerd漏洞的蠕蟲。而緩沖區(qū)溢出中,最為危險(xiǎn)的是堆棧溢出,因?yàn)槿肭终呖梢岳枚褩R绯觯诤瘮?shù)返回時(shí)改變返回程序的地址,讓其跳轉(zhuǎn)到任意地址,帶來的危害一種是程序崩潰導(dǎo)致拒絕服務(wù),另外一種就是跳轉(zhuǎn)并且執(zhí)行一段惡意代碼,比如得到shell,然后為所欲為。通過往程序的緩沖區(qū)寫超出其長度的內(nèi)容,造成緩沖區(qū)的溢出,從而破壞程序的堆棧,使程序轉(zhuǎn)而執(zhí)行其它指令,以達(dá)到攻擊的目的。
造成緩沖區(qū)溢出的主原因是程序中沒有仔細(xì)檢查用戶輸入的參數(shù)。
17、什么是死鎖?其條件是什么?怎樣避免死鎖?
死鎖的概念:在兩個(gè)或多個(gè)并發(fā)進(jìn)程中,如果每個(gè)進(jìn)程持有某種資源而又都等待別的進(jìn)程釋放它或它們現(xiàn)在保持著的資源,在未改變這種狀態(tài)之前都不能向前推進(jìn),稱這一組進(jìn)程產(chǎn)生了死鎖。通俗地講,就是兩個(gè)或多個(gè)進(jìn)程被無限期地阻塞、相互等待的一種狀態(tài)。
死鎖產(chǎn)生的原因主要是:? 系統(tǒng)資源不足;? 進(jìn)程推進(jìn)順序非法。
產(chǎn)生死鎖的必要條件:
(1)互斥(mutualexclusion),一個(gè)資源每次只能被一個(gè)進(jìn)程使用;
(2)不可搶占(nopreemption),進(jìn)程已獲得的資源,在未使用完之前,不能強(qiáng)行剝奪;
(3)占有并等待(hold andwait),一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放;
(4)環(huán)形等待(circularwait),若干進(jìn)程之間形成一種首尾相接的循環(huán)等待資源關(guān)系。
這四個(gè)條件是死鎖的必要條件,只要系統(tǒng)發(fā)生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會(huì)發(fā)生死鎖。
死鎖的解除與預(yù)防:理解了死鎖的原因,尤其是產(chǎn)生死鎖的四個(gè)必要條件,就可以最大可能地避免、預(yù)防和解除死鎖。所以,在系統(tǒng)設(shè)計(jì)、進(jìn)程調(diào)度等方面注意如何不讓這四個(gè)必要條件成立,如何確定資源的合理分配算法,避免進(jìn)程永久占據(jù)系統(tǒng)資源。此外,也要防止進(jìn)程在處于等待狀態(tài)的情況下占用資源。因此,對(duì)資源的分配要給予合理的規(guī)劃。
死鎖的處理策略:鴕鳥策略、預(yù)防策略、避免策略、檢測與恢復(fù)策略。
操作系統(tǒng)面試題及答案二
1、程序和進(jìn)程
進(jìn)程由兩個(gè)部分組成:1)操作系統(tǒng)用來管理進(jìn)程的內(nèi)核對(duì)象。內(nèi)核對(duì)象也是系統(tǒng)用來存放關(guān)于進(jìn)程的統(tǒng)計(jì)信息的地方。2)地址空間。它包含所有可執(zhí)行模塊或DLL模塊的代碼和數(shù)據(jù)。它還包含動(dòng)態(tài)內(nèi)存分配的空間。如線程堆棧和堆分配空間。
定義 | 使用系統(tǒng)運(yùn)行資源情況 | |
程序 | 計(jì)算機(jī)指令的集合,它以文件的形式存儲(chǔ)在磁盤上。程序是靜態(tài)實(shí)體(passive Entity),在多道程序系統(tǒng)中,它是不能獨(dú)立運(yùn)行的,更不能與其他程序并發(fā)執(zhí)行。 | 不使用【程序不能申請(qǐng)系統(tǒng)資源,不能被系統(tǒng)調(diào)度,也不能作為獨(dú)立運(yùn)行的單位,因此,它不占用系統(tǒng)的運(yùn)行資源】。 |
進(jìn)程 | 通常被定義為一個(gè)正在運(yùn)行的程序的實(shí)例,是一個(gè)程序在其自身的地址空間中的一次執(zhí)行活動(dòng)。 定義:進(jìn)程是進(jìn)程實(shí)體(包括:程序段、相關(guān)的數(shù)據(jù)段、進(jìn)程控制塊PCB)的運(yùn)行過程,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。 | 使用【進(jìn)程是資源申請(qǐng)、調(diào)度和獨(dú)立運(yùn)行的單位,因此,它使用系統(tǒng)中的運(yùn)行資源?!?/span> |
2、進(jìn)程與線程
如果說操作系統(tǒng)引入進(jìn)程的目的是為了提高程序并發(fā)執(zhí)行,以提高資源利用率和系統(tǒng)吞吐量。那么操作系統(tǒng)中引入線程的目的,則是為了減少進(jìn)程并發(fā)執(zhí)行過程中所付出的時(shí)空開銷,使操作系統(tǒng)能很好的并發(fā)執(zhí)行。
進(jìn)程process定義了一個(gè)執(zhí)行環(huán)境,包括它自己私有的地址空間、一個(gè)句柄表,以及一個(gè)安全環(huán)境;線程則是一個(gè)控制流,有他自己的調(diào)用棧call stack,記錄了它的執(zhí)行歷史。
線程由兩個(gè)部分組成:1)線程的內(nèi)核對(duì)象,操作系統(tǒng)用它來對(duì)線程實(shí)施管理。內(nèi)核對(duì)象也是系統(tǒng)用來存放線程統(tǒng)計(jì)信息的地方。2)線程堆棧,它用于維護(hù)線程在執(zhí)行代碼時(shí)需要的所有參數(shù)和局部變量。當(dāng)創(chuàng)建線程時(shí),系統(tǒng)創(chuàng)建一個(gè)線程內(nèi)核對(duì)象。該線程內(nèi)核對(duì)象不是線程本身,而是操作系統(tǒng)用來管理線程的較小的數(shù)據(jù)結(jié)構(gòu)??梢詫⒕€程內(nèi)核對(duì)象視為由關(guān)于線程的統(tǒng)計(jì)信息組成的一個(gè)小型數(shù)據(jù)結(jié)構(gòu)。
進(jìn)程與線程的比較如下:
比較 | 進(jìn)程 | 線程 |
活潑性 | 不活潑(只是線程的容器) | 活潑 |
地址空間 | 系統(tǒng)賦予的獨(dú)立的虛擬地址空間(對(duì)于32位進(jìn)程來說,這個(gè)地址空間是4GB) | 在進(jìn)程的地址空間執(zhí)行代碼。線程只有一個(gè)內(nèi)核對(duì)象和一個(gè)堆棧,保留的記錄很少,因此所需要的內(nèi)存也很少。因?yàn)榫€程需要的開銷比進(jìn)程少 |
調(diào)度 | 僅是資源分配的基本單位 | 獨(dú)立調(diào)度、分派的基本單位 |
并發(fā)性 | 僅進(jìn)程間并發(fā)(傳統(tǒng)OS) | 進(jìn)程間、線程間并發(fā) |
擁有資源 | 資源擁有的基本單位 | 基本上不擁有資源 |
系統(tǒng)開銷 | 創(chuàng)建、撤銷、切換開銷大 | 僅保存少量寄存器內(nèi)容,開銷小。 |
3、進(jìn)程同步
進(jìn)程同步的主要任務(wù):是對(duì)多個(gè)相關(guān)進(jìn)程在執(zhí)行次序上進(jìn)行協(xié)調(diào),以使并發(fā)執(zhí)行的諸進(jìn)程之間能有效地共享資源和相互合作,從而使程序的執(zhí)行具有可再現(xiàn)性。
同步機(jī)制遵循的原則:
(1)空閑讓進(jìn);
(2)忙則等待(保證對(duì)臨界區(qū)的互斥訪問);
(3)有限等待(有限代表有限的時(shí)間,避免死等);
(4)讓權(quán)等待,(當(dāng)進(jìn)程不能進(jìn)入自己的臨界區(qū)時(shí),應(yīng)該釋放處理機(jī),以免陷入忙等狀態(tài))。
4、進(jìn)程間的通信是如何實(shí)現(xiàn)的?
進(jìn)程通信,是指進(jìn)程之間的信息交換(信息量少則一個(gè)狀態(tài)或數(shù)值,多者則是成千上萬個(gè)字節(jié))。因此,對(duì)于用信號(hào)量進(jìn)行的進(jìn)程間的互斥和同步,由于其所交換的信息量少而被歸結(jié)為低級(jí)通信。
所謂高級(jí)進(jìn)程通信指:用戶可以利用操作系統(tǒng)所提供的一組通信命令傳送大量數(shù)據(jù)的一種通信方式。操作系統(tǒng)隱藏了進(jìn)程通信的實(shí)現(xiàn)細(xì)節(jié)。或者說,通信過程對(duì)用戶是透明的。
高級(jí)通信機(jī)制可歸結(jié)為三大類:
(1)共享存儲(chǔ)器系統(tǒng)(存儲(chǔ)器中劃分的共享存儲(chǔ)區(qū));實(shí)際操作中對(duì)應(yīng)的是“剪貼板”(剪貼板實(shí)際上是系統(tǒng)維護(hù)管理的一塊內(nèi)存區(qū)域)的通信方式,比如舉例如下:word進(jìn)程按下ctrl+c,在ppt進(jìn)程按下ctrl+v,即完成了word進(jìn)程和ppt進(jìn)程之間的通信,復(fù)制時(shí)將數(shù)據(jù)放入到剪貼板,粘貼時(shí)從剪貼板中取出數(shù)據(jù),然后顯示在ppt窗口上。
(2)消息傳遞系統(tǒng)(進(jìn)程間的數(shù)據(jù)交換以消息(message)為單位,當(dāng)今最流行的微內(nèi)核操作系統(tǒng)中,微內(nèi)核與服務(wù)器之間的通信,無一例外地都采用了消息傳遞機(jī)制。應(yīng)用舉例:郵槽(MailSlot)是基于廣播通信體系設(shè)計(jì)出來的,它采用無連接的不可靠的數(shù)據(jù)傳輸。郵槽是一種單向通信機(jī)制,創(chuàng)建郵槽的服務(wù)器進(jìn)程讀取數(shù)據(jù),打開郵槽的客戶機(jī)進(jìn)程寫入數(shù)據(jù)。
(3)管道通信系統(tǒng)(管道即:連接讀寫進(jìn)程以實(shí)現(xiàn)他們之間通信的共享文件(pipe文件,類似先進(jìn)先出的隊(duì)列,由一個(gè)進(jìn)程寫,另一進(jìn)程讀))。實(shí)際操作中,管道分為:匿名管道、命名管道。匿名管道是一個(gè)未命名的、單向管道,通過父進(jìn)程和一個(gè)子進(jìn)程之間傳輸數(shù)據(jù)。匿名管道只能實(shí)現(xiàn)本地機(jī)器上兩個(gè)進(jìn)程之間的通信,而不能實(shí)現(xiàn)跨網(wǎng)絡(luò)的通信。命名管道不僅可以在本機(jī)上實(shí)現(xiàn)兩個(gè)進(jìn)程間的通信,還可以跨網(wǎng)絡(luò)實(shí)現(xiàn)兩個(gè)進(jìn)程間的通信。
同一機(jī)器兩個(gè)進(jìn)程間通信 | 跨網(wǎng)絡(luò)通信 | |
剪貼板Clipboard | 可以 | 不可以 |
匿名管道Pipe | 可以 | 不可以 |
命名管道(點(diǎn)對(duì)點(diǎn)單一通信,數(shù)據(jù)量可較大)Namedpipe | 可以 | 可以 |
郵槽(一對(duì)多,數(shù)據(jù)量較小,424字節(jié)以下)Mailslot | 可以 | 可以 |
5、線程同步
根據(jù)用戶模式及內(nèi)核模式下的同步方式的不同,分類及對(duì)比如下:
內(nèi)核對(duì)象/ 非內(nèi)核對(duì)象 | 含義 | 缺點(diǎn) | 適用 | |
關(guān)鍵代碼段(臨界區(qū))CriticalSection | 非內(nèi)核對(duì)象,工作在用戶方式下,為用戶模式對(duì)象 | 從程序代碼的角度來控制線程的并發(fā)性 | 1.因?yàn)樵诘却M(jìn)入關(guān)鍵代碼段時(shí)無法設(shè)定超時(shí)值,所以其很容易進(jìn)入死鎖狀態(tài)。2.不能跨進(jìn)程使用。 | 單個(gè)進(jìn)程中線程間的同步(同步速度快) |
事件對(duì)象Event | 內(nèi)核對(duì)象 | 所有內(nèi)核對(duì)象中最基本的。 | 速度較慢(相比用戶模式實(shí)現(xiàn)線程同步) | 多個(gè)進(jìn)程間的各個(gè)線程間實(shí)現(xiàn)同步 |
互斥對(duì)象Mutex | 內(nèi)核對(duì)象 | 代表對(duì)一個(gè)資源的獨(dú)占式訪問 | ||
信號(hào)量 Semaphore | 內(nèi)核對(duì)象 | 使用計(jì)數(shù)器來控制程序?qū)σ粋€(gè)共享資源的訪問 |
由于進(jìn)程同步產(chǎn)生了一系列經(jīng)典的同步問題“生產(chǎn)者-消費(fèi)者”問題,“哲學(xué)家進(jìn)餐”問題,“讀者-寫者”問題。