操作系統(tǒng)常見面試問題

一秃臣、操作系統(tǒng)基礎(chǔ)

1豺妓、請你說一說并發(fā)(concurrency)和并行(parallelism)

并發(fā)(concurrency):指宏觀上看起來兩個(gè)程序在同時(shí)運(yùn)行,比如說在單核cpu上的多任務(wù)。但是從微觀上看兩個(gè)程序的指令是交織著運(yùn)行的翎朱,你的指令之間穿插著我的指令,我的指令之間穿插著你的尺铣,在單個(gè)周期內(nèi)只運(yùn)行了一個(gè)指令拴曲。這種并發(fā)并不能提高計(jì)算機(jī)的性能,只能提高效率凛忿。

并行(parallelism):指嚴(yán)格物理意義上的同時(shí)運(yùn)行澈灼,比如多核cpu,兩個(gè)程序分別運(yùn)行在兩個(gè)核上,兩者之間互不影響叁熔,單個(gè)周期內(nèi)每個(gè)程序都運(yùn)行了自己的指令委乌,也就是運(yùn)行了兩條指令。這樣說來并行的確提高了計(jì)算機(jī)的效率荣回。所以現(xiàn)在的cpu都是往多核方面發(fā)展遭贸。

2、操作系統(tǒng)的功能

(1)管理

處理機(jī)管理

存儲器管理

文件管理

設(shè)備管理

(2)接口

命令接口

程序接口

3心软、操作系統(tǒng)特征:

并發(fā)壕吹、共享、虛擬糯累、異步

4算利、一個(gè)程序從開始運(yùn)行到結(jié)束的完整過程(四個(gè)過程)

1、預(yù)處理:條件編譯泳姐,頭文件包含效拭,宏替換的處理,生成.i文件胖秒。

2缎患、編譯:將預(yù)處理后的文件轉(zhuǎn)換成匯編語言,生成.s文件

3阎肝、匯編:匯編變?yōu)槟繕?biāo)代碼(機(jī)器代碼)生成.o的文件

4挤渔、鏈接:連接目標(biāo)代碼,生成可執(zhí)行程序

5、中斷與系統(tǒng)調(diào)用

所謂的中斷就是在計(jì)算機(jī)執(zhí)行程序的過程中风题,由于出現(xiàn)了某些特殊事情判导,使得CPU暫停對程序的執(zhí)行,轉(zhuǎn)而去執(zhí)行處理這一事件的程序沛硅。等這些特殊事情處理完之后再回去執(zhí)行之前的程序眼刃。中斷一般分為三類:

由計(jì)算機(jī)硬件異常或故障引起的中斷摇肌,稱為內(nèi)部異常中斷擂红;

由程序中執(zhí)行了引起中斷的指令而造成的中斷,稱為軟中斷(這也是和我們將要說明的系統(tǒng)調(diào)用相關(guān)的中斷)围小;

由外部設(shè)備請求引起的中斷昵骤,稱為外部中斷。簡單來說肯适,對中斷的理解就是對一些特殊事情的處理变秦。

與中斷緊密相連的一個(gè)概念就是中斷處理程序了。當(dāng)中斷發(fā)生的時(shí)候框舔,系統(tǒng)需要去對中斷進(jìn)行處理伴栓,對這些中斷的處理是由操作系統(tǒng)內(nèi)核中的特定函數(shù)進(jìn)行的,這些處理中斷的特定的函數(shù)就是我們所說的中斷處理程序了。

另一個(gè)與中斷緊密相連的概念就是中斷的優(yōu)先級钳垮。中斷的優(yōu)先級說明的是當(dāng)一個(gè)中斷正在被處理的時(shí)候,處理器能接受的中斷的級別额港。中斷的優(yōu)先級也表明了中斷需要被處理的緊急程度饺窿。每個(gè)中斷都有一個(gè)對應(yīng)的優(yōu)先級,當(dāng)處理器在處理某一中斷的時(shí)候移斩,只有比這個(gè)中斷優(yōu)先級高的中斷可以被處理器接受并且被處理肚医。優(yōu)先級比這個(gè)當(dāng)前正在被處理的中斷優(yōu)先級要低的中斷將會被忽略马昨。

典型的中斷優(yōu)先級如下所示:

機(jī)器錯(cuò)誤 > 時(shí)鐘 > 磁盤 > 網(wǎng)絡(luò)設(shè)備 > 終端 > 軟件中斷

在講系統(tǒng)調(diào)用之前颈抚,先說下進(jìn)程的執(zhí)行在系統(tǒng)上的兩個(gè)級別:用戶級和核心級庶骄,也稱為用戶態(tài)和系統(tǒng)態(tài)(user mode and kernel mode)帮辟。

用戶空間就是用戶進(jìn)程所在的內(nèi)存區(qū)域谍肤,相對的尺上,系統(tǒng)空間就是操作系統(tǒng)占據(jù)的內(nèi)存區(qū)域瞬沦。用戶進(jìn)程和系統(tǒng)進(jìn)程的所有數(shù)據(jù)都在內(nèi)存中醒颖。處于用戶態(tài)的程序只能訪問用戶空間朱躺,而處于內(nèi)核態(tài)的程序可以訪問用戶空間和內(nèi)核空間刁赖。

用戶態(tài)切換到內(nèi)核態(tài)的方式如下:

系統(tǒng)調(diào)用:程序的執(zhí)行一般是在用戶態(tài)下執(zhí)行的,但當(dāng)程序需要使用操作系統(tǒng)提供的服務(wù)時(shí)长搀,比如說打開某一設(shè)備宇弛、創(chuàng)建文件、讀寫文件(這些均屬于系統(tǒng)調(diào)用)等源请,就需要向操作系統(tǒng)發(fā)出調(diào)用服務(wù)的請求枪芒,這就是系統(tǒng)調(diào)用。

異常:當(dāng)CPU在執(zhí)行運(yùn)行在用戶態(tài)下的程序時(shí)谁尸,發(fā)生了某些事先不可知的異常舅踪,這時(shí)會觸發(fā)由當(dāng)前運(yùn)行進(jìn)程切換到處理此異常的內(nèi)核相關(guān)程序中,也就轉(zhuǎn)到了內(nèi)核態(tài)症汹,比如缺頁異常硫朦。

外圍設(shè)備的中斷:當(dāng)外圍設(shè)備完成用戶請求的操作后,會向CPU發(fā)出相應(yīng)的中斷信號背镇,這時(shí)CPU會暫停執(zhí)行下一條即將要執(zhí)行的指令轉(zhuǎn)而去執(zhí)行與中斷信號對應(yīng)的處理程序咬展,如果先前執(zhí)行的指令是用戶態(tài)下的程序,那么這個(gè)轉(zhuǎn)換的過程自然也就發(fā)生了由用戶態(tài)到內(nèi)核態(tài)的切換瞒斩。比如硬盤讀寫操作完成破婆,系統(tǒng)會切換到硬盤讀寫的中斷處理程序中執(zhí)行后續(xù)操作等。

用戶態(tài)和核心態(tài)(內(nèi)核態(tài))之間的區(qū)別是什么呢胸囱?

? ? ? ?權(quán)限不一樣祷舀。

? ?????用戶態(tài)的進(jìn)程能存取它們自己的指令和數(shù)據(jù),但不能存取內(nèi)核指令和數(shù)據(jù)(或其他進(jìn)程的指令和數(shù)據(jù))。

? ?????核心態(tài)下的進(jìn)程能夠存取內(nèi)核和用戶地址某些機(jī)器指令是特權(quán)指令裳扯,在用戶態(tài)下執(zhí)行特權(quán)指令會引起錯(cuò)誤抛丽。在系統(tǒng)中內(nèi)核并不是作為一個(gè)與用戶進(jìn)程平行的估計(jì)的進(jìn)程的集合。

6饰豺、中斷分類

1. 外中斷

CPU 執(zhí)行指令以外的事件引起亿鲜,如 I/O 完成中斷,表示設(shè)備輸入/輸出處理已經(jīng)完成冤吨,處理器能夠發(fā)送下一個(gè)輸入/輸出請求蒿柳。此外還有時(shí)鐘中斷、控制臺中斷等漩蟆。

2. 異常

CPU 執(zhí)行指令的內(nèi)部事件引起垒探,如非法操作碼、地址越界怠李、算術(shù)溢出等圾叼。

3. 陷入

在用戶程序中使用系統(tǒng)調(diào)用

7扔仓、什么是中斷褐奥?中斷時(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í)行的過程版保。

二呜笑、進(jìn)程管理

1、進(jìn)程彻犁、線程的區(qū)別

進(jìn)程:是具有一定獨(dú)立功能的程序叫胁、它是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位,重點(diǎn)在系統(tǒng)調(diào)度和單獨(dú)的單位汞幢,也就是說進(jìn)程是可以獨(dú)立運(yùn)行的一段程序驼鹅。

線程:是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位森篷,比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位输钩,線程自己基本上不擁有系統(tǒng)資源,在運(yùn)行時(shí)仲智,只是暫用一些計(jì)數(shù)器买乃、寄存器和棧 。線程有自己的堆棧和局部變量钓辆,但線程之間沒有單獨(dú)的地址空間剪验。

一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程。

2功戚、請你說一下多進(jìn)程娶眷、多線程,操作系統(tǒng)層面的差別和聯(lián)系

進(jìn)程:進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集上的一次動態(tài)執(zhí)行的過程疫铜,是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位茂浮,是應(yīng)用程序運(yùn)行的載體。進(jìn)程是一種抽象的概念壳咕,從來沒有統(tǒng)一的標(biāo)準(zhǔn)定義。進(jìn)程一般由程序顽馋、數(shù)據(jù)集合和進(jìn)程控制塊三部分組成谓厘。程序用于描述進(jìn)程要完成的功能,是控制進(jìn)程執(zhí)行的指令集寸谜;數(shù)據(jù)集合是程序在執(zhí)行時(shí)所需要的數(shù)據(jù)和工作區(qū)竟稳;程序控制塊(Program Control Block,簡稱PCB)熊痴,包含進(jìn)程的描述信息和控制信息他爸,是進(jìn)程存在的唯一標(biāo)志。

線程:在早期的操作系統(tǒng)中并沒有線程的概念果善,進(jìn)程是能擁有資源和獨(dú)立運(yùn)行的最小單位诊笤,也是程序執(zhí)行的最小單位。任務(wù)調(diào)度采用的是時(shí)間片輪轉(zhuǎn)的搶占式調(diào)度方式巾陕,而進(jìn)程是任務(wù)調(diào)度的最小單位讨跟,每個(gè)進(jìn)程有各自獨(dú)立的一塊內(nèi)存,使得各個(gè)進(jìn)程之間內(nèi)存地址相互隔離鄙煤。后來晾匠,隨著計(jì)算機(jī)的發(fā)展,對CPU的要求越來越高梯刚,進(jìn)程之間的切換開銷較大凉馆,已經(jīng)無法滿足越來越復(fù)雜的程序的要求了。于是就發(fā)明了線程亡资,線程是程序執(zhí)行中一個(gè)單一的順序控制流程澜共,是程序執(zhí)行流的最小單元,是處理器調(diào)度和分派的基本單位沟于。一個(gè)進(jìn)程可以有一個(gè)或多個(gè)線程咳胃,各個(gè)線程之間共享程序的內(nèi)存空間(也就是所在進(jìn)程的內(nèi)存空間)。一個(gè)標(biāo)準(zhǔn)的線程由線程ID旷太、當(dāng)前指令指針(PC)展懈、寄存器和堆棧組成销睁。而進(jìn)程由內(nèi)存空間(代碼、數(shù)據(jù)存崖、進(jìn)程空間冻记、打開的文件)和一個(gè)或多個(gè)線程組成。

差別:1.線程是程序執(zhí)行的最小單位来惧,而進(jìn)程是操作系統(tǒng)分配資源的最小單位冗栗;2.一個(gè)進(jìn)程由一個(gè)或多個(gè)線程組成,線程是一個(gè)進(jìn)程中代碼的不同執(zhí)行路線供搀;3.進(jìn)程之間相互獨(dú)立隅居,但同一進(jìn)程下的各個(gè)線程之間共享程序的內(nèi)存空間(包括代碼段、數(shù)據(jù)集葛虐、堆等)及一些進(jìn)程級的資源(如打開文件和信號)胎源,某進(jìn)程內(nèi)的線程在其它進(jìn)程不可見;4.調(diào)度和切換:線程上下文切換比進(jìn)程上下文切換要快得多屿脐。

聯(lián)系:原則上一個(gè)CPU只能分配給一個(gè)進(jìn)程涕蚤,以便運(yùn)行這個(gè)進(jìn)程。通常使用的計(jì)算機(jī)中只有一個(gè)CPU的诵,同時(shí)運(yùn)行多個(gè)進(jìn)程万栅,就必須使用并發(fā)技術(shù)。通常采用時(shí)間片輪轉(zhuǎn)進(jìn)程調(diào)度算法西疤,在操作系統(tǒng)的管理下烦粒,所有正在運(yùn)行的進(jìn)程輪流使用CPU,每個(gè)進(jìn)程允許占用CPU的時(shí)間非常短(比如10毫秒)瘪阁,這樣用戶根本感覺不出來CPU是在輪流為多個(gè)進(jìn)程服務(wù)撒遣,就好象所有的進(jìn)程都在不間斷地運(yùn)行一樣。但實(shí)際上在任何一個(gè)時(shí)間內(nèi)有且僅有一個(gè)進(jìn)程占有CPU管跺。如果一臺計(jì)算機(jī)有多個(gè)CPU义黎,情況就不同了,如果進(jìn)程數(shù)小于CPU數(shù)豁跑,則不同的進(jìn)程可以分配給不同的CPU來運(yùn)行廉涕,這樣,多個(gè)進(jìn)程就是真正同時(shí)運(yùn)行的艇拍,這便是并行狐蜕。但如果進(jìn)程數(shù)大于CPU數(shù),則仍然需要使用并發(fā)技術(shù)卸夕。在Windows中层释,進(jìn)行CPU分配是以線程為單位的,一個(gè)進(jìn)程可能由多個(gè)線程組成快集。操作系統(tǒng)將CPU的時(shí)間片分配給多個(gè)線程,每個(gè)線程在操作系統(tǒng)指定的時(shí)間片內(nèi)完成(注意,這里的多個(gè)線程是分屬于不同進(jìn)程的).操作系統(tǒng)不斷的從一個(gè)線程的執(zhí)行切換到另一個(gè)線程的執(zhí)行,如此往復(fù),宏觀上看來,就好像是多個(gè)線程在一起執(zhí)行.由于這多個(gè)線程分屬于不同的進(jìn)程,就好像是多個(gè)進(jìn)程在同時(shí)執(zhí)行,這樣就實(shí)現(xiàn)了多任務(wù)贡羔×祝總線程數(shù)<=CPU數(shù)量時(shí)并行運(yùn)行,總線程數(shù)>CPU數(shù)量時(shí)并發(fā)運(yùn)行乖寒。并行運(yùn)行的效率顯然高于并發(fā)運(yùn)行猴蹂,所以在多CPU的計(jì)算機(jī)中,多任務(wù)的效率比較高楣嘁。但是磅轻,如果在多CPU計(jì)算機(jī)中只運(yùn)行一個(gè)進(jìn)程(線程),就不能發(fā)揮多CPU的優(yōu)勢逐虚。

3聋溜、?請你說一下進(jìn)程與線程的概念,以及為什么要有進(jìn)程線程叭爱,其中有什么區(qū)別勤婚,他們各自又是怎么同步的

(1)概念

進(jìn)程是對運(yùn)行時(shí)程序的封裝,是系統(tǒng)進(jìn)行資源調(diào)度和分配的的基本單位涤伐,實(shí)現(xiàn)了操作系統(tǒng)的并發(fā);

線程是進(jìn)程的子任務(wù)缨称,是CPU調(diào)度和分派的基本單位凝果,用于保證程序的實(shí)時(shí)性,實(shí)現(xiàn)進(jìn)程內(nèi)部的并發(fā)睦尽;線程是操作系統(tǒng)可識別的最小執(zhí)行和調(diào)度單位器净。每個(gè)線程都獨(dú)自占用一個(gè)虛擬處理器:獨(dú)自的寄存器組,指令計(jì)數(shù)器和處理器狀態(tài)当凡。每個(gè)線程完成不同的任務(wù)山害,但是共享同一地址空間(也就是同樣的動態(tài)內(nèi)存,映射文件沿量,目標(biāo)代碼等等)浪慌,打開的文件隊(duì)列和其他內(nèi)核資源。

(2)區(qū)別:

1.一個(gè)線程只能屬于一個(gè)進(jìn)程朴则,而一個(gè)進(jìn)程可以有多個(gè)線程权纤,但至少有一個(gè)線程。線程依賴于進(jìn)程而存在乌妒。

2.進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元汹想,而多個(gè)線程共享進(jìn)程的內(nèi)存。(資源分配給進(jìn)程撤蚊,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源古掏。同一進(jìn)程中的多個(gè)線程共享代碼段(代碼和常量),數(shù)據(jù)段(全局變量和靜態(tài)變量)侦啸,擴(kuò)展段(堆存儲)槽唾。但是每個(gè)線程擁有自己的棧段丧枪,棧段又叫運(yùn)行時(shí)段,用來存放所有局部變量和臨時(shí)變量夏漱。)

3.進(jìn)程是資源分配的最小單位豪诲,線程是CPU調(diào)度的最小單位;

4.系統(tǒng)開銷: 由于在創(chuàng)建或撤消進(jìn)程時(shí)挂绰,系統(tǒng)都要為之分配或回收資源屎篱,如內(nèi)存空間、I/o設(shè)備等葵蒂。因此交播,操作系統(tǒng)所付出的開銷將顯著地大于在創(chuàng)建或撤消線程時(shí)的開銷。類似地践付,在進(jìn)行進(jìn)程切換時(shí)秦士,涉及到整個(gè)當(dāng)前進(jìn)程CPU環(huán)境的保存以及新被調(diào)度運(yùn)行的進(jìn)程的CPU環(huán)境的設(shè)置。而線程切換只須保存和設(shè)置少量寄存器的內(nèi)容永高,并不涉及存儲器管理方面的操作隧土。可見命爬,進(jìn)程切換的開銷也遠(yuǎn)大于線程切換的開銷曹傀。

5.通信:由于同一進(jìn)程中的多個(gè)線程具有相同的地址空間,致使它們之間的同步和通信的實(shí)現(xiàn)饲宛,也變得比較容易皆愉。進(jìn)程間通信IPC,線程間可以直接讀寫進(jìn)程數(shù)據(jù)段(如全局變量)來進(jìn)行通信——需要進(jìn)程同步和互斥手段的輔助艇抠,以保證數(shù)據(jù)的一致性幕庐。在有的系統(tǒng)中,線程的切換家淤、同步和通信都無須操作系統(tǒng)內(nèi)核的干預(yù)

6.進(jìn)程編程調(diào)試簡單可靠性高异剥,但是創(chuàng)建銷毀開銷大;線程正相反媒鼓,開銷小届吁,切換速度快,但是編程調(diào)試相對復(fù)雜绿鸣。

7.進(jìn)程間不會相互影響 疚沐;線程一個(gè)線程掛掉將導(dǎo)致整個(gè)進(jìn)程掛掉

8.進(jìn)程適應(yīng)于多核、多機(jī)分布潮模;線程適用于多核

(3)進(jìn)程間通信的方式:

進(jìn)程間通信主要包括管道亮蛔、系統(tǒng)IPC(包括消息隊(duì)列、信號量擎厢、信號究流、共享內(nèi)存等)辣吃、以及套接字socket。

1.管道:

管道主要包括無名管道和命名管道:管道可用于具有親緣關(guān)系的父子進(jìn)程間的通信芬探,有名管道除了具有管道所具有的功能外神得,它還允許無親緣關(guān)系進(jìn)程間的通信

1.1 普通管道PIPE:

1)它是半雙工的(即數(shù)據(jù)只能在一個(gè)方向上流動),具有固定的讀端和寫端

2)它只能用于具有親緣關(guān)系的進(jìn)程之間的通信(也是父子進(jìn)程或者兄弟進(jìn)程之間)

3)它可以看成是一種特殊的文件偷仿,對于它的讀寫也可以使用普通的read哩簿、write等函數(shù)。但是它不是普通的文件酝静,并不屬于其他任何文件系統(tǒng)节榜,并且只存在于內(nèi)存中。

1.2 命名管道FIFO:

1)FIFO可以在無關(guān)的進(jìn)程之間交換數(shù)據(jù)

2)FIFO有路徑名與之相關(guān)聯(lián)别智,它以一種特殊設(shè)備文件形式存在于文件系統(tǒng)中宗苍。

2. 系統(tǒng)IPC:

2.1 消息隊(duì)列

消息隊(duì)列,是消息的鏈接表薄榛,存放在內(nèi)核中讳窟。一個(gè)消息隊(duì)列由一個(gè)標(biāo)識符(即隊(duì)列ID)來標(biāo)記。 (消息隊(duì)列克服了信號傳遞信息少敞恋,管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等特點(diǎn))具有寫權(quán)限得進(jìn)程可以按照一定得規(guī)則向消息隊(duì)列中添加新信息挪钓;對消息隊(duì)列有讀權(quán)限得進(jìn)程則可以從消息隊(duì)列中讀取信息;

特點(diǎn):

1)消息隊(duì)列是面向記錄的耳舅,其中的消息具有特定的格式以及特定的優(yōu)先級。

2)消息隊(duì)列獨(dú)立于發(fā)送與接收進(jìn)程倚评。進(jìn)程終止時(shí)浦徊,消息隊(duì)列及其內(nèi)容并不會被刪除。

3)消息隊(duì)列可以實(shí)現(xiàn)消息的隨機(jī)查詢,消息不一定要以先進(jìn)先出的次序讀取,也可以按消息的類型讀取天梧。

2.2 信號量semaphore

信號量(semaphore)與已經(jīng)介紹過的 IPC 結(jié)構(gòu)不同盔性,它是一個(gè)計(jì)數(shù)器,可以用來控制多個(gè)進(jìn)程對共享資源的訪問呢岗。信號量用于實(shí)現(xiàn)進(jìn)程間的互斥與同步冕香,而不是用于存儲進(jìn)程間通信數(shù)據(jù)。

特點(diǎn):

1)信號量用于進(jìn)程間同步后豫,若要在進(jìn)程間傳遞數(shù)據(jù)需要結(jié)合共享內(nèi)存悉尾。

2)信號量基于操作系統(tǒng)的 PV 操作,程序?qū)π盘柫康牟僮鞫际窃硬僮鳌?/p>

3)每次對信號量的 PV 操作不僅限于對信號量值加 1 或減 1挫酿,而且可以加減任意正整數(shù)构眯。

4)支持信號量組。

2.3 信號signal

信號是一種比較復(fù)雜的通信方式早龟,用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生惫霸。

2.4 共享內(nèi)存(Shared Memory)

它使得多個(gè)進(jìn)程可以訪問同一塊內(nèi)存空間,不同進(jìn)程可以及時(shí)看到對方進(jìn)程中對共享內(nèi)存中數(shù)據(jù)得更新。這種方式需要依靠某種同步操作罩锐,如互斥鎖和信號量等

特點(diǎn):

1)共享內(nèi)存是最快的一種IPC求泰,因?yàn)檫M(jìn)程是直接對內(nèi)存進(jìn)行存取

2)因?yàn)槎鄠€(gè)進(jìn)程可以同時(shí)操作,所以需要進(jìn)行同步

3)信號量+共享內(nèi)存通常結(jié)合在一起使用硅卢,信號量用來同步對共享內(nèi)存的訪問

3.套接字SOCKET:

socket也是一種進(jìn)程間通信機(jī)制射窒,與其他通信機(jī)制不同的是,它可用于不同主機(jī)之間的進(jìn)程通信老赤。

(4)線程間通信的方式:

臨界區(qū):通過多線程的串行化來訪問公共資源或一段代碼轮洋,速度快,適合控制數(shù)據(jù)訪問抬旺;

互斥量Synchronized/Lock:采用互斥對象機(jī)制弊予,只有擁有互斥對象的線程才有訪問公共資源的權(quán)限。因?yàn)榛コ鈱ο笾挥幸粋€(gè)开财,所以可以保證公共資源不會被多個(gè)線程同時(shí)訪問

信號量Semphare:為控制具有有限數(shù)量的用戶資源而設(shè)計(jì)的汉柒,它允許多個(gè)線程在同一時(shí)刻去訪問同一個(gè)資源,但一般需要限制同一時(shí)刻訪問此資源的最大線程數(shù)目责鳍。

事件(信號)Wait/Notify:通過通知操作的方式來保持多線程同步碾褂,還可以方便的實(shí)現(xiàn)多線程優(yōu)先級的比較操作

4、實(shí)現(xiàn)進(jìn)程同步的方法

(1)历葛、臨界區(qū)(Critical Section)

通過對多線程的串行化來訪問公共資源或一段代碼正塌,速度快,適合控制數(shù)據(jù)訪問恤溶。

優(yōu)點(diǎn):保證在某一時(shí)刻只有一個(gè)線程能訪問數(shù)據(jù)的簡便辦法

缺點(diǎn):雖然臨界區(qū)同步速度很快乓诽,但卻只能用來同步本進(jìn)程內(nèi)的線程,而不可用來同步多個(gè)進(jìn)程中的線程咒程。

(2)鸠天、互斥量(Mutex)

為協(xié)調(diào)共同對一個(gè)共享資源的單獨(dú)訪問而設(shè)計(jì)的。

互斥量跟臨界區(qū)很相似帐姻,比臨界區(qū)復(fù)雜稠集,互斥對象只有一個(gè),只有擁有互斥對象的線程才具有訪問資源的權(quán)限饥瓷。

優(yōu)點(diǎn):使用互斥不僅僅能夠在同一應(yīng)用程序不同線程中實(shí)現(xiàn)資源的安全共享剥纷,而且可以在不同應(yīng)用程序的線程之間實(shí)現(xiàn)對資源的安全共享。

缺點(diǎn):①互斥量是可以命名的呢铆,也就是說它可以跨越進(jìn)程使用筷畦,所以創(chuàng)建互斥量需要的資源更多,所以如果只為了在進(jìn)程內(nèi)部是用的話使用臨界區(qū)會帶來速度上的優(yōu)勢并能夠減少資源占用量。因?yàn)榛コ饬渴强邕M(jìn)程的互斥量一旦被創(chuàng)建鳖宾,就可以通過名字打開它吼砂。

②通過互斥量可以指定資源被獨(dú)占的方式使用,但如果有下面一種情況通過互斥量就無法處理鼎文,比如現(xiàn)在一位用戶購買了一份三個(gè)并發(fā)訪問許可的數(shù)據(jù)庫系統(tǒng)渔肩,可以根據(jù)用戶購買的訪問許可數(shù)量來決定有多少個(gè)線程/進(jìn)程能同時(shí)進(jìn)行數(shù)據(jù)庫操作,這時(shí)候如果利用互斥量就沒有辦法完成這個(gè)要求拇惋,信號量對象可以說是一種資源計(jì)數(shù)器周偎。

(3)、信號量(Semaphore)【最常用】

為控制一個(gè)具有有限數(shù)量用戶資源而設(shè)計(jì)撑帖。它允許多個(gè)線程在同一時(shí)刻訪問同一資源蓉坎,但是需要限制在同一時(shí)刻訪問此資源的最大線程數(shù)目『伲互斥量是信號量的一種特殊情況蛉艾,當(dāng)信號量的最大資源數(shù)=1就是互斥量了。

優(yōu)點(diǎn):適用于對Socket(套接字)程序中線程的同步衷敌。(例如勿侯,網(wǎng)絡(luò)上的HTTP服務(wù)器要對同一時(shí)間內(nèi)訪問同一頁面的用戶數(shù)加以限制,只有不大于設(shè)定的最大用戶數(shù)目的線程能夠進(jìn)行訪問缴罗,而其他的訪問企圖則被掛起助琐,只有在有用戶退出對此頁面的訪問后才有可能進(jìn)入。)

缺點(diǎn):①信號量機(jī)制必須有公共內(nèi)存面氓,不能用于分布式操作系統(tǒng)兵钮,這是它最大的弱點(diǎn);

②信號量機(jī)制功能強(qiáng)大舌界,但使用時(shí)對信號量的操作分散矢空,?而且難以控制,讀寫和維護(hù)都很困難禀横,加重了程序員的編碼負(fù)擔(dān);

③核心操作P-V分散在各用戶程序的代碼中粥血,不易控制和管理柏锄,一旦錯(cuò)誤,后果嚴(yán)重复亏,且不易發(fā)現(xiàn)和糾正趾娃。

(4)、事件(Event)

用來通知線程有一些事件已發(fā)生缔御,從而啟動后繼任務(wù)的開始抬闷。

優(yōu)點(diǎn):事件對象通過通知操作的方式來保持線程的同步,并且可以實(shí)現(xiàn)不同進(jìn)程中的線程同步操作。

5笤成、進(jìn)程間通信的方式

(1)信號量

(2)消息隊(duì)列

(3)共享內(nèi)存

(4)管道


(5)信號

(6)套接字

6评架、請你說一說死鎖發(fā)生的條件以及如何解決死鎖

死鎖是指兩個(gè)或兩個(gè)以上進(jìn)程在執(zhí)行過程中,因爭奪資源而造成的下相互等待的現(xiàn)象炕泳。

死鎖發(fā)生的四個(gè)必要條件如下:

互斥條件:進(jìn)程對所分配到的資源不允許其他進(jìn)程訪問纵诞,若其他進(jìn)程訪問該資源,只能等待培遵,直至占有該資源的進(jìn)程使用完成后釋放該資源浙芙;

不可剝奪條件:進(jìn)程已獲得的資源,在未完成使用之前籽腕,不可被剝奪嗡呼,只能在使用后自己釋放

請求和保持條件:進(jìn)程獲得一定的資源后,又對其他資源發(fā)出請求皇耗,但是該資源可能被其他進(jìn)程占有南窗,此時(shí)請求阻塞,但該進(jìn)程不會釋放自己已經(jīng)占有的資源

環(huán)路等待條件:進(jìn)程發(fā)生死鎖后廊宪,必然存在一個(gè)進(jìn)程-資源之間的環(huán)形鏈

解決死鎖的方法即破壞上述四個(gè)條件之一矾瘾,主要方法如下:

(1)死鎖預(yù)防

資源一次性分配,從而剝奪請求和保持條件

可剝奪資源:即當(dāng)進(jìn)程新的資源未得到滿足時(shí)箭启,釋放已占有的資源壕翩,從而破壞不可剝奪的條件

資源有序分配法:系統(tǒng)給每類資源賦予一個(gè)序號,每個(gè)進(jìn)程按編號遞增的請求資源傅寡,釋放則相反放妈,從而破壞環(huán)路等待的條件

(2)死鎖避免

銀行家算法

(3)死鎖檢測

資源分配圖

資源剝奪法

撤銷進(jìn)程法

進(jìn)程回退法

7、進(jìn)程有哪幾種狀態(tài)荐操?

就緒狀態(tài):進(jìn)程已獲得除處理機(jī)以外的所需資源芜抒,等待分配處理機(jī)資源

運(yùn)行狀態(tài):占用處理機(jī)資源運(yùn)行,處于此狀態(tài)的進(jìn)程數(shù)小于等于CPU數(shù)

阻塞狀態(tài): 進(jìn)程等待某種條件托启,在條件滿足之前無法執(zhí)行

8宅倒、內(nèi)存池、進(jìn)程池屯耸、線程池拐迁。

首先介紹一個(gè)概念“池化技術(shù) ”。池化技術(shù)就是:提前保存大量的資源疗绣,以備不時(shí)之需以及重復(fù)使用线召。池化技術(shù)應(yīng)用廣泛,如內(nèi)存池多矮,線程池缓淹,連接池等等。內(nèi)存池相關(guān)的內(nèi)容,建議看看Apache讯壶、Nginx等開源web服務(wù)器的內(nèi)存池實(shí)現(xiàn)料仗。

??  由于在實(shí)際應(yīng)用當(dāng)做,分配內(nèi)存鹏溯、創(chuàng)建進(jìn)程罢维、線程都會設(shè)計(jì)到一些系統(tǒng)調(diào)用,系統(tǒng)調(diào)用需要導(dǎo)致程序從用戶態(tài)切換到內(nèi)核態(tài)丙挽,是非常耗時(shí)的操作肺孵。因此,當(dāng)程序中需要頻繁的進(jìn)行內(nèi)存申請釋放颜阐,進(jìn)程平窘、線程創(chuàng)建銷毀等操作時(shí),通常會使用內(nèi)存池凳怨、進(jìn)程池瑰艘、線程池技術(shù)來提升程序的性能。

線程池:線程池的原理很簡單肤舞,類似于操作系統(tǒng)中的緩沖區(qū)的概念紫新,它的流程如下:先啟動若干數(shù)量的線程,并讓這些線程都處于睡眠狀態(tài)李剖,當(dāng)需要一個(gè)開辟一個(gè)線程去做具體的工作時(shí)芒率,就會喚醒線程池中的某一個(gè)睡眠線程,讓它去做具體工作篙顺,當(dāng)工作完成后偶芍,線程又處于睡眠狀態(tài),而不是將線程銷毀德玫。

進(jìn)程池與線程池同理匪蟀。

內(nèi)存池:內(nèi)存池是指程序預(yù)先從操作系統(tǒng)申請一塊足夠大內(nèi)存,此后宰僧,當(dāng)程序中需要申請內(nèi)存的時(shí)候材彪,不是直接向操作系統(tǒng)申請,而是直接從內(nèi)存池中獲惹俣段化;同理,當(dāng)程序釋放內(nèi)存的時(shí)候凤类,并不真正將內(nèi)存返回給操作系統(tǒng),而是返回內(nèi)存池普气。當(dāng)程序退出(或者特定時(shí)間)時(shí)谜疤,內(nèi)存池才將之前申請的內(nèi)存真正釋放。

9、同步和互斥的區(qū)別

??????? 當(dāng)有多個(gè)線程的時(shí)候夷磕,經(jīng)常需要去同步這些線程以訪問同一個(gè)數(shù)據(jù)或資源履肃。例如,假設(shè)有一個(gè)程序坐桩,其中一個(gè)線程用于把文件讀到內(nèi)存尺棋,而另一個(gè)線程用于統(tǒng)計(jì)文件中的字符數(shù)。當(dāng)然绵跷,在把整個(gè)文件調(diào)入內(nèi)存之前膘螟,統(tǒng)計(jì)它的計(jì)數(shù)是沒有意義的。但是碾局,由于每個(gè)操作都有自己的線程荆残,操作系統(tǒng)會把兩個(gè)線程當(dāng)作是互不相干的任務(wù)分別執(zhí)行,這樣就可能在沒有把整個(gè)文件裝入內(nèi)存時(shí)統(tǒng)計(jì)字?jǐn)?shù)净当。為解決此問題内斯,你必須使兩個(gè)線程同步工作。

所謂同步像啼,是指散步在不同進(jìn)程之間的若干程序片斷俘闯,它們的運(yùn)行必須嚴(yán)格按照規(guī)定的某種先后次序來運(yùn)行,這種先后次序依賴于要完成的特定的任務(wù)忽冻。如果用對資源的訪問來定義的話真朗,同步是指在互斥的基礎(chǔ)上(大多數(shù)情況),通過其它機(jī)制實(shí)現(xiàn)訪問者對資源的有序訪問甚颂。在大多數(shù)情況下蜜猾,同步已經(jīng)實(shí)現(xiàn)了互斥,特別是所有寫入資源的情況必定是互斥的振诬。少數(shù)情況是指可以允許多個(gè)訪問者同時(shí)訪問資源蹭睡。

所謂互斥,是指散布在不同進(jìn)程之間的若干程序片斷赶么,當(dāng)某個(gè)進(jìn)程運(yùn)行其中一個(gè)程序片段時(shí)肩豁,其它進(jìn)程就不能運(yùn)行它們之中的任一程序片段,只能等到該進(jìn)程運(yùn)行完這個(gè)程序片段后才可以運(yùn)行辫呻。如果用對資源的訪問來定義的話清钥,互斥某一資源同時(shí)只允許一個(gè)訪問者對其進(jìn)行訪問,具有唯一性和排它性放闺。但互斥無法限制訪問者對資源的訪問順序祟昭,即訪問是無序的。

10怖侦、守護(hù)篡悟、僵尸谜叹、孤兒進(jìn)程的概念

守護(hù)進(jìn)程:運(yùn)行在后臺的一種特殊進(jìn)程,獨(dú)立于控制終端并周期性地執(zhí)行某些任務(wù)搬葬。

僵尸進(jìn)程:一個(gè)進(jìn)程 fork 子進(jìn)程荷腊,子進(jìn)程退出,而父進(jìn)程沒有wait/waitpid子進(jìn)程急凰,那么子進(jìn)程的進(jìn)程描述符仍保存在系統(tǒng)中女仰,這樣的進(jìn)程稱為僵尸進(jìn)程。

孤兒進(jìn)程:一個(gè)父進(jìn)程退出抡锈,而它的一個(gè)或多個(gè)子進(jìn)程還在運(yùn)行疾忍,這些子進(jìn)程稱為孤兒進(jìn)程。(孤兒進(jìn)程將由 init 進(jìn)程收養(yǎng)并對它們完成狀態(tài)收集工作)

11企孩、Semaphore(信號量) Vs Mutex(互斥鎖)

當(dāng)用戶創(chuàng)立多個(gè)線程/進(jìn)程時(shí)锭碳,如果不同線程/進(jìn)程同時(shí)讀寫相同的內(nèi)容,則可能造成讀寫錯(cuò)誤勿璃,或者數(shù)據(jù)不一致擒抛。此時(shí),需要通過加鎖的方式补疑,控制臨界區(qū)(critical section)的訪問權(quán)限歧沪。對于semaphore而言,在初始化變量的時(shí)候可以控制允許多少個(gè)線程/進(jìn)程同時(shí)訪問一個(gè)臨界區(qū)莲组,其他的線程/進(jìn)程會被堵塞诊胞,直到有人解鎖。

Mutex相當(dāng)于只允許一個(gè)線程/進(jìn)程訪問的semaphore锹杈。此外撵孤,根據(jù)實(shí)際需要,人們還實(shí)現(xiàn)了一種讀寫鎖(read-write lock)竭望,它允許同時(shí)存在多個(gè)閱讀者(reader)邪码,但任何時(shí)候至多只有一個(gè)寫者(writer),且不能于讀者共存咬清。

12闭专、線程是否具有相同的堆棧?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ú)立的堆棧昂勉?

  以上講的是堆棧,如果對于堆來說扫腺,每個(gè)dll有自己的堆岗照,所以如果是從dll中動態(tài)分配的內(nèi)存,最好是從dll中刪除笆环;如果你從dll中分配內(nèi)存攒至,然后在exe中,或者另外一個(gè)dll中刪除躁劣,很有可能導(dǎo)致程序崩潰迫吐。

13、 進(jìn)程與線程的區(qū)別

(1)??????粒度性分析:線程的粒度小于進(jìn)程账忘。

(2)??????調(diào)度性分析:進(jìn)程是資源擁有的基本單位志膀,線程是獨(dú)立調(diào)度與獨(dú)立運(yùn)行的基本單位,出了寄存器鳖擒,程序計(jì)數(shù)器等必要的資源外基本不擁有其他資源溉浙。

(3)??????系統(tǒng)開銷分析:由于線程基本不擁有系統(tǒng)資源,所以在進(jìn)行切換時(shí)蒋荚,線程切換的開銷遠(yuǎn)遠(yuǎn)小于進(jìn)程戳稽。

三、處理器管理

1期升、?操作系統(tǒng)中進(jìn)程調(diào)度策略有哪幾種惊奇?

(1)先來先服務(wù)和段作業(yè)優(yōu)先算法(a.先來先服務(wù)調(diào)度算法;b播赁。短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法)

(2)高優(yōu)先權(quán)優(yōu)先調(diào)度算法(a.非搶占式優(yōu)先權(quán)算法颂郎;b.搶占式優(yōu)先權(quán)調(diào)度算法;c.高響應(yīng)比優(yōu)先調(diào)度算法)

(3)基于時(shí)間片的輪轉(zhuǎn)調(diào)度算法(a.時(shí)間片輪轉(zhuǎn)法行拢;b.多級反饋隊(duì)列調(diào)度算法)

2祖秒、什么是上下文切換

對于單核單線程CPU而言,在某一時(shí)刻只能執(zhí)行一條CPU指令舟奠。上下文切換(Context Switch)是一種將CPU資源從一個(gè)進(jìn)程分配給另一個(gè)進(jìn)程的機(jī)制竭缝。從用戶角度看,計(jì)算機(jī)能夠并行運(yùn)行多個(gè)進(jìn)程沼瘫,這恰恰是操作系統(tǒng)通過快速上下文切換造成的結(jié)果抬纸。在切換的過程中,操作系統(tǒng)需要先存儲當(dāng)前進(jìn)程的狀態(tài)(包括內(nèi)存空間的指針耿戚,當(dāng)前執(zhí)行完的指令等等)湿故,再讀入下一個(gè)進(jìn)程的狀態(tài)阿趁,然后執(zhí)行此進(jìn)程。

3坛猪、進(jìn)程調(diào)度算法

先來先服務(wù)調(diào)度算法FCFS:既可以作為作業(yè)調(diào)度算法也可以作為進(jìn)程調(diào)度算法脖阵;按作業(yè)或者進(jìn)程到達(dá)的先后順序依次調(diào)度;因此對于長作業(yè)比較有利墅茉;

短作業(yè)優(yōu)先調(diào)度算法SJF:作業(yè)調(diào)度算法命黔,算法從就緒隊(duì)列中選擇估計(jì)時(shí)間最短的作業(yè)進(jìn)行處理,直到得出結(jié)果或者無法繼續(xù)執(zhí)行就斤;缺點(diǎn):不利于長作業(yè)悍募;未考慮作業(yè)的重要性;運(yùn)行時(shí)間是預(yù)估的洋机,并不靠譜 坠宴;

高相應(yīng)比算法HRN:響應(yīng)比=(等待時(shí)間+要求服務(wù)時(shí)間)/要求服務(wù)時(shí)間;

時(shí)間片輪轉(zhuǎn)調(diào)度RR:按到達(dá)的先后對進(jìn)程放入隊(duì)列中绷旗,然后給隊(duì)首進(jìn)程分配CPU時(shí)間片喜鼓,時(shí)間片用完之后計(jì)時(shí)器發(fā)出中斷,暫停當(dāng)前進(jìn)程并將其放到隊(duì)列尾部衔肢,循環(huán) ;

多級反饋隊(duì)列調(diào)度算法:目前公認(rèn)較好的調(diào)度算法颠通;設(shè)置多個(gè)就緒隊(duì)列并為每個(gè)隊(duì)列設(shè)置不同的優(yōu)先級,第一個(gè)隊(duì)列優(yōu)先級最高膀懈,其余依次遞減顿锰。優(yōu)先級越高的隊(duì)列分配的時(shí)間片越短,進(jìn)程到達(dá)之后按FCFS放入第一個(gè)隊(duì)列启搂,如果調(diào)度執(zhí)行后沒有完成硼控,那么放到第二個(gè)隊(duì)列尾部等待調(diào)度,如果第二次調(diào)度仍然沒有完成胳赌,放入第三隊(duì)列尾部…牢撼。只有當(dāng)前一個(gè)隊(duì)列為空的時(shí)候才會去調(diào)度下一個(gè)隊(duì)列的進(jìn)程。

四疑苫、內(nèi)存管理

1熏版、請你說一說Linux虛擬地址空間

為了防止不同進(jìn)程同一時(shí)刻在物理內(nèi)存中運(yùn)行而對物理內(nèi)存的爭奪和踐踏,采用了虛擬內(nèi)存。

虛擬內(nèi)存技術(shù)使得不同進(jìn)程在運(yùn)行過程中,它所看到的是自己獨(dú)自占有了當(dāng)前系統(tǒng)的4G內(nèi)存秒梅。所有進(jìn)程共享同一物理內(nèi)存奸柬,每個(gè)進(jìn)程只把自己目前需要的虛擬內(nèi)存空間映射并存儲到物理內(nèi)存上雏胃。 事實(shí)上,在每個(gè)進(jìn)程創(chuàng)建加載時(shí),內(nèi)核只是為進(jìn)程“創(chuàng)建”了虛擬內(nèi)存的布局棚放,具體就是初始化進(jìn)程控制表中內(nèi)存相關(guān)的鏈表禾嫉,實(shí)際上并不立即就把虛擬內(nèi)存對應(yīng)位置的程序數(shù)據(jù)和代碼(比如.text .data段)拷貝到物理內(nèi)存中灾杰,只是建立好虛擬內(nèi)存和磁盤文件之間的映射就好(叫做存儲器映射),等到運(yùn)行到對應(yīng)的程序時(shí)熙参,才會通過缺頁異常艳吠,來拷貝數(shù)據(jù)。還有進(jìn)程運(yùn)行過程中孽椰,要?jiǎng)討B(tài)分配內(nèi)存讲竿,比如malloc時(shí),也只是分配了虛擬內(nèi)存弄屡,即為這塊虛擬內(nèi)存對應(yīng)的頁表項(xiàng)做相應(yīng)設(shè)置,當(dāng)進(jìn)程真正訪問到此數(shù)據(jù)時(shí)鞋诗,才引發(fā)缺頁異常膀捷。

【王道】

定義:基于局部性原理,在程序裝入時(shí)削彬,將程序的一部分裝入內(nèi)存全庸,而將其與部分留在外存,就可啟動程序執(zhí)行融痛。在程序執(zhí)行過程中壶笼,當(dāng)所訪問的信息不在內(nèi)存時(shí),由操作系統(tǒng)將所需要的部分調(diào)入內(nèi)存雁刷,然后繼續(xù)執(zhí)行程序覆劈。另一方面,操作系統(tǒng)將內(nèi)存中暫時(shí)不使用的內(nèi)容換出到外存上沛励,從而騰出空間存放將要調(diào)入內(nèi)存的信息责语。這樣,系統(tǒng)好像為用戶提供了一個(gè)比實(shí)際內(nèi)存大得多的存儲器目派,成為虛擬存儲器坤候。

實(shí)現(xiàn)方式:分段,分頁企蹭,段頁

2白筹、請你說一說操作系統(tǒng)中的缺頁中斷

定義:在請求分頁系統(tǒng)中,每當(dāng)所要訪問的頁面不在內(nèi)存中時(shí)谅摄,便產(chǎn)生一個(gè)缺頁中斷徒河,請求操作系統(tǒng)將所缺的頁調(diào)入內(nèi)存。此時(shí)應(yīng)將缺頁的進(jìn)程阻塞(調(diào)頁完成喚醒)送漠,若內(nèi)存中有空閑塊虚青,則分配一個(gè)塊,將要調(diào)入的頁裝入該塊螺男,并修改頁表中的相應(yīng)頁表項(xiàng)棒厘,若此時(shí)內(nèi)存中沒有空閑塊纵穿,則要淘汰某頁(若被淘汰頁在內(nèi)存期間被修改過,則要將其寫回外存)奢人。

處理機(jī)制:

1谓媒、保護(hù)CPU現(xiàn)場

2、分析中斷原因

3何乎、轉(zhuǎn)入缺頁中斷處理程序進(jìn)行處理

4句惯、恢復(fù)CPU現(xiàn)場,繼續(xù)執(zhí)行

但是缺頁中斷是由于所要訪問的頁面不存在于內(nèi)存時(shí)支救,由硬件所產(chǎn)生的一種特殊的中斷抢野,因此,與一般的中斷存在區(qū)別:

1各墨、在指令執(zhí)行期間產(chǎn)生和處理缺頁中斷信號

2指孤、一條指令在執(zhí)行期間,可能產(chǎn)生多次缺頁中斷

3贬堵、缺頁中斷返回是恃轩,執(zhí)行產(chǎn)生中斷的一條指令,而一般的中斷返回是黎做,執(zhí)行下一條指令叉跛。

3、請你說一說OS缺頁置換算法

當(dāng)訪問一個(gè)內(nèi)存中不存在的頁蒸殿,并且內(nèi)存已滿筷厘,則需要從內(nèi)存中調(diào)出一個(gè)頁或?qū)?shù)據(jù)送至磁盤對換區(qū),替換一個(gè)頁宏所,這種現(xiàn)象叫做缺頁置換敞掘。當(dāng)前操作系統(tǒng)最常采用的缺頁置換算法如下:

先進(jìn)先出(FIFO)算法:置換最先調(diào)入內(nèi)存的頁面,即置換在內(nèi)存中駐留時(shí)間最久的頁面楣铁。按照進(jìn)入內(nèi)存的先后次序排列成隊(duì)列玖雁,從隊(duì)尾進(jìn)入,從隊(duì)首刪除盖腕。

最近最少使用(LRU)算法: 置換最近一段時(shí)間以來最長時(shí)間未訪問過的頁面赫冬。根據(jù)程序局部性原理,剛被訪問的頁面溃列,可能馬上又要被訪問劲厌;而較長時(shí)間內(nèi)沒有被訪問的頁面,可能最近不會被訪問听隐。

當(dāng)前最常采用的就是LRU算法补鼻。f

4、你怎么理解操作系統(tǒng)里的內(nèi)存碎片,有什么解決辦法风范?

內(nèi)存碎片分為:內(nèi)部碎片和外部碎片咨跌。

內(nèi)部碎片就是已經(jīng)被分配出去(能明確指出屬于哪個(gè)進(jìn)程)卻不能被利用的內(nèi)存空間;

內(nèi)部碎片是處于區(qū)域內(nèi)部或頁面內(nèi)部的存儲塊硼婿。占有這些區(qū)域或頁面的進(jìn)程并不使用這個(gè)存儲塊锌半。而在進(jìn)程占有這塊存儲塊時(shí)寇漫,系統(tǒng)無法利用它记焊。直到進(jìn)程釋放它腐缤,或進(jìn)程結(jié)束時(shí)特笋,系統(tǒng)才有可能利用這個(gè)存儲塊。

單道連續(xù)分配只有內(nèi)部碎片。多道固定連續(xù)分配既有內(nèi)部碎片,又有外部碎片榔至。

外部碎片指的是還沒有被分配出去(不屬于任何進(jìn)程)划提,但由于太小了無法分配給申請內(nèi)存空間的新進(jìn)程的內(nèi)存空閑區(qū)域驼仪。

外部碎片是出于任何已分配區(qū)f域或頁面外部的空閑存儲塊掸犬。這些存儲塊的總和可以滿足當(dāng)前申請的長度要求,但是由于它們的地址不連續(xù)或其他原因绪爸,使得系統(tǒng)無法滿足當(dāng)前申請湾碎。

使用伙伴系統(tǒng)算法。

5奠货、抖動

在頁面置換過程中介褥,一種最糟糕的情形是剛剛換出的頁面馬上又要換入主存,剛剛換入的頁面馬上又要換出主存递惋,這種頻繁的頁面調(diào)度行為稱為抖動或頻繁柔滔。

6、分頁和分段有什么區(qū)別萍虽?

段是信息的邏輯單位睛廊,它是根據(jù)用戶的需要?jiǎng)澐值模虼硕螌τ脩羰强梢姷?杉编;頁是信息的物理單位超全,是為了管理主存的方便而劃分的,對用戶是透明的邓馒。

段的大小不固定嘶朱,有它所完成的功能決定;頁大大小固定光酣,由系統(tǒng)決定

向用戶提供二維地址空間疏遏;頁向用戶提供的是一維地址空間【頁號P 頁內(nèi)位移量W】

(分頁的作業(yè)地址空間是一維的.分段的地址空間是二維的)

段是信息的邏輯單位,便于存儲保護(hù)和信息的共享救军,頁的保護(hù)和共享受到限制改览。

7、局部性原理

(1). 時(shí)間上的局部性:最近被訪問的頁在不久的將來還會被訪問缤言;

(2). 空間上的局部性:內(nèi)存中被訪問的頁周圍的頁也很可能被訪問宝当。

五、輸入輸出管理

1胆萧、什么是緩沖區(qū)溢出庆揩?有什么危害俐东?其原因是什么?

緩沖區(qū)溢出是指當(dāng)計(jì)算機(jī)向緩沖區(qū)填充數(shù)據(jù)時(shí)超出了緩沖區(qū)本身的容量订晌,溢出的數(shù)據(jù)覆蓋在合法數(shù)據(jù)上虏辫。

危害有以下兩點(diǎn):

程序崩潰,導(dǎo)致拒絕額服務(wù)

跳轉(zhuǎn)并且執(zhí)行一段惡意代碼

造成緩沖區(qū)溢出的主要原因是程序中沒有仔細(xì)檢查用戶輸入锈拨。

網(wǎng)圖


網(wǎng)圖

附錄:

知識點(diǎn):

【最全】https://www.bookstack.cn/read/Interview-Notebook/notes-%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md

https://blog.csdn.net/LonelyPlanet_/article/details/89115669?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase

https://cloud.tencent.com/developer/article/1427292

https://my.oschina.net/u/1186503/blog/1632610

https://cloud.tencent.com/developer/article/1383230

https://juejin.im/entry/592257b62f301e006b183b95

https://blog.csdn.net/eseaqyq/article/details/7887168?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末砌庄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奕枢,更是在濱河造成了極大的恐慌娄昆,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缝彬,死亡現(xiàn)場離奇詭異萌焰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谷浅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門扒俯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人一疯,你說我怎么就攤上這事撼玄。” “怎么了墩邀?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵掌猛,是天一觀的道長。 經(jīng)常有香客問我磕蒲,道長留潦,這世上最難降的妖魔是什么只盹? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任辣往,我火速辦了婚禮,結(jié)果婚禮上殖卑,老公的妹妹穿的比我還像新娘站削。我一直安慰自己,他們只是感情好孵稽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布许起。 她就那樣靜靜地躺著,像睡著了一般菩鲜。 火紅的嫁衣襯著肌膚如雪园细。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天接校,我揣著相機(jī)與錄音猛频,去河邊找鬼狮崩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鹿寻,可吹牛的內(nèi)容都是我干的睦柴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼毡熏,長吁一口氣:“原來是場噩夢啊……” “哼坦敌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起痢法,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤狱窘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后疯暑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體训柴,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年妇拯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了幻馁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡越锈,死狀恐怖仗嗦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情甘凭,我是刑警寧澤稀拐,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站丹弱,受9級特大地震影響德撬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躲胳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一蜓洪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坯苹,春花似錦隆檀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至为鳄,卻和暖如春裳仆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孤钦。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工歧斟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留记某,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓构捡,卻偏偏與公主長得像液南,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子勾徽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354