操作系統(tǒng)

1. 進(jìn)程的常見狀態(tài)伤极?以及各種狀態(tài)之間的轉(zhuǎn)換條件谎懦?

  • 就緒:進(jìn)程已處于準(zhǔn)備好運行的狀態(tài)鲫咽,即進(jìn)程已分配到除CPU外的所有必要資源后签赃,只要再獲得CPU谷异,便可立即執(zhí)行。
  • 執(zhí)行:進(jìn)程已經(jīng)獲得CPU锦聊,程序正在執(zhí)行狀態(tài)晰绎。
  • 阻塞:正在執(zhí)行的進(jìn)程由于發(fā)生某事件(如I/O請求、申請緩沖區(qū)失敗等)暫時無法繼續(xù)執(zhí)行的狀態(tài)括丁。


    image.jpeg

2. 進(jìn)程同步

進(jìn)程同步的主要任務(wù):是對多個相關(guān)進(jìn)程在執(zhí)行次序上進(jìn)行協(xié)調(diào),以使并發(fā)執(zhí)行的諸進(jìn)程之間能有效地共享資源和相互合作伶选,從而使程序的執(zhí)行具有可再現(xiàn)性史飞。

同步機(jī)制遵循的原則:
  (1)空閑讓進(jìn)仰税;
 」棺省(2)忙則等待(保證對臨界區(qū)的互斥訪問);
 ≡纱亍(3)有限等待(有限代表有限的時間吐绵,避免死等);
 『诱馈(4)讓權(quán)等待己单,(當(dāng)進(jìn)程不能進(jìn)入自己的臨界區(qū)時,應(yīng)該釋放處理機(jī)耙饰,以免陷入忙等狀態(tài))

3. 進(jìn)程間的通訊方式

1. 管道(pipe):
管道是一種半雙工的通信方式纹笼,數(shù)據(jù)只能單向流動,而且只能在具有親緣關(guān)系的進(jìn)程間使用苟跪。進(jìn)程的親緣關(guān)系通常是指父子進(jìn)程關(guān)系廷痘。管道是單向的、先進(jìn)先出的件已、無結(jié)構(gòu)的笋额、固定大小的字節(jié)流,它把一個進(jìn)程的標(biāo)準(zhǔn)輸出和另一個進(jìn)程的標(biāo)準(zhǔn)輸入連接在一起篷扩。寫進(jìn)程在管道的尾端寫入數(shù)據(jù)兄猩,讀進(jìn)程在管道的首端讀出數(shù)據(jù)。
2. 命名管道 (named pipe):
命名管道也是半雙工的通信方式鉴未,它克服了管道沒有名字的限制厦滤,并且它允許無親緣關(guān)系進(jìn)程間的通信。命令管道在文件系統(tǒng)中有對應(yīng)的文件名歼狼,命名管道通過命令mkfifo或系統(tǒng)調(diào)用mkfifo來創(chuàng)建掏导。
3. 信號量( semophore ):
信號量是一個計數(shù)器,可以用來控制多個進(jìn)程對共享資源的訪問羽峰。它常作為一種鎖機(jī)制趟咆,防止某進(jìn)程正在訪問共享資源時添瓷,其他進(jìn)程也訪問該資源。因此值纱,主要作為進(jìn)程間以及同一進(jìn)程內(nèi)不同線程之間的同步手段鳞贷。
4. 消息隊列( message queue ):
消息隊列是由消息的鏈表結(jié)構(gòu)實現(xiàn),存放在內(nèi)核中并由消息隊列標(biāo)識符標(biāo)識虐唠。有足夠權(quán)限的進(jìn)程可以向隊列中添加消息搀愧,被賦予讀權(quán)限的進(jìn)程則可以讀走隊列中的消息。消息隊列克服了信號傳遞信息少疆偿、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點咱筛。
5. 信號 ( sinal ):
用于通知接收進(jìn)程某個事件已經(jīng)發(fā)生。除了用于進(jìn)程通信外杆故,進(jìn)程還可以發(fā)送信號給進(jìn)程本身迅箩。
6. 共享內(nèi)存( shared memory ):
共享內(nèi)存就是映射一段能被其他進(jìn)程所訪問的內(nèi)存,這段共享內(nèi)存由一個進(jìn)程創(chuàng)建处铛,但多個進(jìn)程都可以訪問饲趋。共享內(nèi)存是最快的IPC方式,它是針對其他進(jìn)程間通信方式運行效率低而專門設(shè)計的撤蟆。它往往與其他通信機(jī)制奕塑,如信號量配合使用,來實現(xiàn)進(jìn)程間的同步和通信家肯。
7. 套接字( socket ):
也是一種進(jìn)程間通信機(jī)制爵川,與其他通信機(jī)制不同的是,它可用于不同機(jī)器間的進(jìn)程通信息楔。

4.上下文切換

對于單核單線程CPU而言寝贡,在某一時刻只能執(zhí)行一條CPU指令。上下文切換(Context Switch)是一種將CPU資源從一個進(jìn)程分配給另一個進(jìn)程的機(jī)制值依。從用戶角度看圃泡,計算機(jī)能夠并行運行多個進(jìn)程,這恰恰是操作系統(tǒng)通過快速上下文切換造成的結(jié)果愿险。在切換的過程中颇蜡,操作系統(tǒng)需要先存儲當(dāng)前進(jìn)程的狀態(tài)(包括內(nèi)存空間的指針,當(dāng)前執(zhí)行完的指令等等)辆亏,再讀入下一個進(jìn)程的狀態(tài)风秤,然后執(zhí)行此進(jìn)程。

5. 進(jìn)程和線程的區(qū)別

  1. 進(jìn)程是對運行時程序的封裝扮叨,是系統(tǒng)進(jìn)行資源調(diào)度和分配的的基本單位缤弦,實現(xiàn)了操作系統(tǒng)的并發(fā);
  2. 線程是進(jìn)程的子任務(wù)彻磁,是CPU調(diào)度和分派的基本單位碍沐,用于保證程序的 實時性狸捅,實現(xiàn)進(jìn)程內(nèi)部的并發(fā);
  3. 一個程序至少有一個進(jìn)程累提,一個進(jìn)程至少有一個線程尘喝,線程依賴于進(jìn)程而存在;
  4. 進(jìn)程在執(zhí)行過程中擁有獨立的內(nèi)存單元斋陪,而多個線程共享進(jìn)程的內(nèi)存朽褪。
  5. 進(jìn)程:每個進(jìn)程都有獨立的代碼和數(shù)據(jù)空間(進(jìn)程上下文),進(jìn)程間的切換會有較大的開銷无虚,一個進(jìn)程包含1–n個線程缔赠。
  6. 線程:同一類線程共享代碼和數(shù)據(jù)空間,每個線程有獨立的運行棧和程序計數(shù)器(PC)骑科,線程切換開銷小。
  7. 線程和進(jìn)程一樣分為五個階段:創(chuàng)建构拳、就緒咆爽、運行、阻塞置森、終止斗埂。

6. 線程同步的方式

互斥量 Synchronized/Lock:采用互斥對象機(jī)制,只有擁有互斥對象的線程才有訪問公共資源的權(quán)限凫海。因為互斥對象只有一個呛凶,所以可以保證公共資源不會被多個線程同時訪問
信號量 Semphare:它允許同一時刻多個線程訪問同一資源,但是需要控制同一時刻訪問此資源的最大線程數(shù)量
事件(信號)行贪,Wait/Notify:通過通知操作的方式來保持多線程同步漾稀,還可以方便的實現(xiàn)多線程優(yōu)先級的比較操作

7. 什么是死鎖?死鎖產(chǎn)生的條件建瘫?

1). 死鎖的概念
  在兩個或者多個并發(fā)進(jìn)程中崭捍,如果每個進(jìn)程持有某種資源而又等待其它進(jìn)程釋放它或它們現(xiàn)在保持著的資源,在未改變這種狀態(tài)之前都不能向前推進(jìn)啰脚,稱這一組進(jìn)程產(chǎn)生了死鎖殷蛇。通俗的講,就是兩個或多個進(jìn)程無限期的阻塞橄浓、相互等待的一種狀態(tài)粒梦。

2). 死鎖產(chǎn)生的四個必要條件
互斥:至少有一個資源必須屬于非共享模式,即一次只能被一個進(jìn)程使用荸实;若其他申請使用該資源匀们,那么申請進(jìn)程必須等到該資源被釋放為止;

占有并等待:一個進(jìn)程必須占有至少一個資源准给,并等待另一個資源昼蛀,而該資源為其他進(jìn)程所占有宴猾;

非搶占:進(jìn)程不能被搶占,即資源只能被進(jìn)程在完成任務(wù)后自愿釋放

循環(huán)等待:若干進(jìn)程之間形成一種頭尾相接的環(huán)形等待資源關(guān)系

3). 死鎖的處理基本策略和常用方法

解決死鎖的基本方法主要有 預(yù)防死鎖叼旋、避免死鎖仇哆、檢測死鎖、解除死鎖 夫植、鴕鳥策略 等讹剔。

(1). 死鎖預(yù)防

死鎖預(yù)防的基本思想是 只要確保死鎖發(fā)生的四個必要條件中至少有一個不成立,就能預(yù)防死鎖的發(fā)生详民,具體方法包括:

打破互斥條件:允許進(jìn)程同時訪問某些資源延欠。但是,有些資源是不能被多個進(jìn)程所共享的沈跨,這是由資源本身屬性所決定的由捎,因此,這種辦法通常并無實用價值饿凛。

打破占有并等待條件:可以實行資源預(yù)先分配策略(進(jìn)程在運行前一次性向系統(tǒng)申請它所需要的全部資源狞玛,若所需全部資源得不到滿足,則不分配任何資源涧窒,此進(jìn)程暫不運行心肪;只有當(dāng)系統(tǒng)能滿足當(dāng)前進(jìn)程所需的全部資源時,才一次性將所申請資源全部分配給該線程)或者只允許進(jìn)程在沒有占用資源時才可以申請資源(一個進(jìn)程可申請一些資源并使用它們纠吴,但是在當(dāng)前進(jìn)程申請更多資源之前硬鞍,它必須全部釋放當(dāng)前所占有的資源)。但是這種策略也存在一些缺點:在很多情況下戴已,無法預(yù)知一個進(jìn)程執(zhí)行前所需的全部資源固该,因為進(jìn)程是動態(tài)執(zhí)行的,不可預(yù)知的糖儡;同時蹬音,會降低資源利用率,導(dǎo)致降低了進(jìn)程的并發(fā)性休玩。

打破非搶占條件:允許進(jìn)程強(qiáng)行從占有者哪里奪取某些資源著淆。也就是說,但一個進(jìn)程占有了一部分資源拴疤,在其申請新的資源且得不到滿足時永部,它必須釋放所有占有的資源以便讓其它線程使用。這種預(yù)防死鎖的方式實現(xiàn)起來困難呐矾,會降低系統(tǒng)性能苔埋。

打破循環(huán)等待條件:實行資源有序分配策略。對所有資源排序編號蜒犯,所有進(jìn)程對資源的請求必須嚴(yán)格按資源序號遞增的順序提出组橄,即只有占用了小號資源才能申請大號資源荞膘,這樣就不回產(chǎn)生環(huán)路,預(yù)防死鎖的發(fā)生玉工。

(2). 死鎖避免的基本思想

死鎖避免的基本思想是動態(tài)地檢測資源分配狀態(tài)羽资,以確保循環(huán)等待條件不成立,從而確保系統(tǒng)處于安全狀態(tài)遵班。所謂安全狀態(tài)是指:如果系統(tǒng)能按某個順序為每個進(jìn)程分配資源(不超過其最大值)屠升,那么系統(tǒng)狀態(tài)是安全的,換句話說就是狭郑,如果存在一個安全序列腹暖,那么系統(tǒng)處于安全狀態(tài)。資源分配圖算法和銀行家算法是兩種經(jīng)典的死鎖避免的算法翰萨,其可以確保系統(tǒng)始終處于安全狀態(tài)脏答。其中,資源分配圖算法應(yīng)用場景為每種資源類型只有一個實例(申請邊亩鬼,分配邊殖告,需求邊,不形成環(huán)才允許分配)辛孵,而銀行家算法應(yīng)用于每種資源類型可以有多個實例的場景丛肮。

(3). 死鎖解除

死鎖解除的常用兩種方法為進(jìn)程終止和資源搶占赡磅。所謂進(jìn)程終止是指簡單地終止一個或多個進(jìn)程以打破循環(huán)等待魄缚,包括兩種方式:終止所有死鎖進(jìn)程和一次只終止一個進(jìn)程直到取消死鎖循環(huán)為止;所謂資源搶占是指從一個或多個死鎖進(jìn)程那里搶占一個或多個資源焚廊,此時必須考慮三個問題:

(I). 選擇一個犧牲品

(II). 回滾:回滾到安全狀態(tài)

(III). 饑餓(在代價因素中加上回滾次數(shù)冶匹,回滾的越多則越不可能繼續(xù)被作為犧牲品,避免一個進(jìn)程總是被回滾)

8. 線程有幾種狀態(tài)

在 Java虛擬機(jī) 中咆瘟,線程從最初的創(chuàng)建到最終的消亡嚼隘,要經(jīng)歷若干個狀態(tài):創(chuàng)建(new)、就緒(runnable/start)袒餐、運行(running)飞蛹、阻塞(blocked)、等待(waiting)灸眼、時間等待(time waiting) 和 消亡(dead/terminated)卧檐。在給定的時間點上,一個線程只能處于一種狀態(tài)

9. 分頁和分段有什么區(qū)別(內(nèi)存管理)

段式存儲管理是一種符合用戶視角的內(nèi)存分配管理方案焰宣。在段式存儲管理中霉囚,將程序的地址空間劃分為若干段(segment),如代碼段匕积,數(shù)據(jù)段盈罐,堆棧段榜跌;這樣每個進(jìn)程有一個二維地址空間,相互獨立盅粪,互不干擾钓葫。段式管理的優(yōu)點是:沒有內(nèi)碎片(因為段大小可變,改變段大小來消除內(nèi)碎片)湾揽。但段換入換出時瓤逼,會產(chǎn)生外碎片(比如4k的段換5k的段,會產(chǎn)生1k的外碎片)

頁式存儲管理方案是一種用戶視角內(nèi)存與物理內(nèi)存相分離的內(nèi)存分配管理方案库物。在頁式存儲管理中霸旗,將程序的邏輯地址劃分為固定大小的頁(page),而物理內(nèi)存劃分為同樣大小的幀戚揭,程序加載時诱告,可以將任意一頁放入內(nèi)存中任意一個幀,這些幀不必連續(xù)民晒,從而實現(xiàn)了離散分離精居。頁式存儲管理的優(yōu)點是:沒有外碎片(因為頁的大小固定),但會產(chǎn)生內(nèi)碎片(一個頁可能填充不滿)潜必。

兩者的不同點:

目的不同:分頁是由于系統(tǒng)管理的需要而不是用戶的需要靴姿,它是信息的物理單位;分段的目的是為了能更好地滿足用戶的需要磁滚,它是信息的邏輯單位佛吓,它含有一組其意義相對完整的信息;

大小不同:頁的大小固定且由系統(tǒng)決定垂攘,而段的長度卻不固定维雇,由其所完成的功能決定;

地址空間不同: 段向用戶提供二維地址空間晒他;頁向用戶提供的是一維地址空間吱型;

信息共享:段是信息的邏輯單位,便于存儲保護(hù)和信息的共享陨仅,頁的保護(hù)和共享受到限制津滞;

內(nèi)存碎片:頁式存儲管理的優(yōu)點是沒有外碎片(因為頁的大小固定),但會產(chǎn)生內(nèi)碎片(一個頁可能填充不滿)灼伤;而段式管理的優(yōu)點是沒有內(nèi)碎片(因為段大小可變触徐,改變段大小來消除內(nèi)碎片)。但段換入換出時饺蔑,會產(chǎn)生外碎片(比如4k的段換5k的段锌介,會產(chǎn)生1k的外碎片)。

10、操作系統(tǒng)中進(jìn)程調(diào)度策略有哪幾種孔祸?

FCFS(先來先服務(wù)隆敢,隊列實現(xiàn),非搶占的):先請求CPU的進(jìn)程先分配到CPU
SJF(最短作業(yè)優(yōu)先調(diào)度算法):平均等待時間最短崔慧,但難以知道下一個CPU區(qū)間長度

優(yōu)先級調(diào)度算法(可以是搶占的拂蝎,也可以是非搶占的):優(yōu)先級越高越先分配到CPU,相同優(yōu)先級先到先服務(wù)惶室,存在的主要問題是:低優(yōu)先級進(jìn)程無窮等待CPU温自,會導(dǎo)致無窮阻塞或饑餓;解決方案:老化

時間片輪轉(zhuǎn)調(diào)度算法(可搶占的):隊列中沒有進(jìn)程被分配超過一個時間片的CPU時間皇钞,除非它是唯一可運行的進(jìn)程悼泌。如果進(jìn)程的CPU區(qū)間超過了一個時間片,那么該進(jìn)程就被搶占并放回就緒隊列夹界。

多級隊列調(diào)度算法:將就緒隊列分成多個獨立的隊列馆里,每個隊列都有自己的調(diào)度算法,隊列之間采用固定優(yōu)先級搶占調(diào)度可柿。其中鸠踪,一個進(jìn)程根據(jù)自身屬性被永久地分配到一個隊列中。

多級反饋隊列調(diào)度算法:與多級隊列調(diào)度算法相比复斥,其允許進(jìn)程在隊列之間移動:若進(jìn)程使用過多CPU時間营密,那么它會被轉(zhuǎn)移到更低的優(yōu)先級隊列;在較低優(yōu)先級隊列等待時間過長的進(jìn)程會被轉(zhuǎn)移到更高優(yōu)先級隊列目锭,以防止饑餓發(fā)生评汰。

11、說一說進(jìn)程同步有哪幾種機(jī)制

原子操作侣集、信號量機(jī)制键俱、自旋鎖管程兰绣、會合世分、分布式系統(tǒng)

12、什么是虛擬內(nèi)存缀辩?

1).內(nèi)存的發(fā)展歷程

沒有內(nèi)存抽象(單進(jìn)程臭埋,除去操作系統(tǒng)所用的內(nèi)存之外,全部給用戶程序使用) —> 有內(nèi)存抽象(多進(jìn)程臀玄,進(jìn)程獨立的地址空間瓢阴,交換技術(shù)(內(nèi)存大小不可能容納下所有并發(fā)執(zhí)行的進(jìn)程)

)—> 連續(xù)內(nèi)存分配(固定大小分區(qū)(多道程序的程度受限),可變分區(qū)(首次適應(yīng)健无,最佳適應(yīng)荣恐,最差適應(yīng)),碎片) —> 不連續(xù)內(nèi)存分配(分段,分頁叠穆,段頁式少漆,虛擬內(nèi)存)

2).虛擬內(nèi)存

虛擬內(nèi)存允許執(zhí)行進(jìn)程不必完全在內(nèi)存中。虛擬內(nèi)存的基本思想是:每個進(jìn)程擁有獨立的地址空間硼被,這個空間被分為大小相等的多個塊示损,稱為頁(Page),每個頁都是一段連續(xù)的地址嚷硫。這些頁被映射到物理內(nèi)存检访,但并不是所有的頁都必須在內(nèi)存中才能運行程序。當(dāng)程序引用到一部分在物理內(nèi)存中的地址空間時仔掸,由硬件立刻進(jìn)行必要的映射脆贵;當(dāng)程序引用到一部分不在物理內(nèi)存中的地址空間時,由操作系統(tǒng)負(fù)責(zé)將缺失的部分裝入物理內(nèi)存并重新執(zhí)行失敗的命令起暮。這樣丹禀,對于進(jìn)程而言,邏輯上似乎有很大的內(nèi)存空間鞋怀,實際上其中一部分對應(yīng)物理內(nèi)存上的一塊(稱為幀双泪,通常頁和幀大小相等),還有一些沒加載在內(nèi)存中的對應(yīng)在硬盤上密似,如圖5所示焙矛。

注意,請求分頁系統(tǒng)残腌、請求分段系統(tǒng)和請求段頁式系統(tǒng)都是針對虛擬內(nèi)存的村斟,通過請求實現(xiàn)內(nèi)存與外存的信息置換。


image.jpeg

由圖5可以看出抛猫,虛擬內(nèi)存實際上可以比物理內(nèi)存大蟆盹。當(dāng)訪問虛擬內(nèi)存時,會訪問MMU(內(nèi)存管理單元)去匹配對應(yīng)的物理地址(比如圖5的0闺金,1逾滥,2)。如果虛擬內(nèi)存的頁并不存在于物理內(nèi)存中(如圖5的3,4)败匹,會產(chǎn)生缺頁中斷寨昙,從磁盤中取得缺的頁放入內(nèi)存,如果內(nèi)存已滿掀亩,還會根據(jù)某種算法將磁盤中的頁換出舔哪。

3). 頁面置換算法

FIFO先進(jìn)先出算法:在操作系統(tǒng)中經(jīng)常被用到,比如作業(yè)調(diào)度(主要實現(xiàn)簡單槽棍,很容易想到)捉蚤;

LRU(Least recently use)最近最少使用算法:根據(jù)使用時間到現(xiàn)在的長短來判斷抬驴;

LFU(Least frequently use)最少使用次數(shù)算法:根據(jù)使用次數(shù)來判斷;

OPT(Optimal replacement)最優(yōu)置換算法:理論的最優(yōu)缆巧,理論怎爵;就是要保證置換出去的是不再被使用的頁,或者是在實際內(nèi)存中最晚使用的算法盅蝗。

4). 虛擬內(nèi)存的應(yīng)用與優(yōu)點

虛擬內(nèi)存很適合在多道程序設(shè)計系統(tǒng)中使用鳖链,許多程序的片段同時保存在內(nèi)存中。當(dāng)一個程序等待它的一部分讀入內(nèi)存時墩莫,可以把CPU交給另一個進(jìn)程使用芙委。虛擬內(nèi)存的使用可以帶來以下好處:

在內(nèi)存中可以保留多個進(jìn)程,系統(tǒng)并發(fā)度提高

解除了用戶與內(nèi)存之間的緊密約束狂秦,進(jìn)程可以比內(nèi)存的全部空間還大

Windows下的內(nèi)存是如何管理的灌侣?

Windows提供了3種方法來進(jìn)行內(nèi)存管理:

虛擬內(nèi)存,最適合用來管理大型對象或者結(jié)構(gòu)數(shù)組裂问;

內(nèi)存映射文件侧啼,最適合用來管理大型數(shù)據(jù)流(通常來自文件)以及在單個計算機(jī)上運行多個進(jìn)程之間共享數(shù)據(jù);

內(nèi)存堆棧堪簿,最適合用來管理大量的小對象痊乾。

Windows操縱內(nèi)存可以分兩個層面:物理內(nèi)存和虛擬內(nèi)存。

其中物理內(nèi)存由系統(tǒng)管理椭更,不允許應(yīng)用程序直接訪問哪审,應(yīng)用程序可見的只有一個2G地址空間,而內(nèi)存分配是通過堆進(jìn)行的虑瀑。對于每個進(jìn)程都有自己的默認(rèn)堆湿滓,當(dāng)一個堆創(chuàng)建后,就通過虛擬內(nèi)存操作保留了相應(yīng)大小的地址塊(不占有實際的內(nèi)存舌狗,系統(tǒng)消耗很羞窗隆)。當(dāng)在堆上分配一塊內(nèi)存時痛侍,系統(tǒng)在堆的地址表里找到一個空閑塊(如果找不到朝氓,且堆創(chuàng)建屬性是可擴(kuò)充的,則擴(kuò)充堆大辛等铡)膀篮,為這個空閑塊所包含的所有內(nèi)存頁提交物理對象(在物理內(nèi)存上或硬盤的交換文件上)嘹狞,這時就可以訪問這部分地址岂膳。提交時,系統(tǒng)將對所有進(jìn)程的內(nèi)存統(tǒng)一調(diào)配磅网,如果物理內(nèi)存不夠谈截,系統(tǒng)試圖把一部分進(jìn)程暫時不訪問的頁放入交換文件,以騰出部分物理內(nèi)存。釋放內(nèi)存時簸喂,只在堆中將所在的頁解除提交(相應(yīng)的物理對象被解除)毙死,繼續(xù)保留地址空間。

如果要知道某個地址是否被占用/可不可以訪問喻鳄,只要查詢此地址的虛擬內(nèi)存狀態(tài)即可扼倘。如果是提交,則可以訪問除呵。如果僅僅保留再菊,或沒保留,則產(chǎn)生一個軟件異常颜曾。此外纠拔,有些內(nèi)存頁可以設(shè)置各種屬性。如果是只讀泛豪,向內(nèi)存寫也會產(chǎn)生軟件異常稠诲。

3、Windows消息調(diào)度機(jī)制是诡曙?

A)指令隊列臀叙;B)指令堆棧;C)消息隊列价卤;D)消息堆棧

答案:C

處理消息隊列的順序匹耕。首先Windows絕對不是按隊列先進(jìn)先出的次序來處理的,而是有一定優(yōu)先級的荠雕。優(yōu)先級通過消息隊列的狀態(tài)標(biāo)志來實現(xiàn)的稳其。首先,最高優(yōu)先級的是別的線程發(fā)過來的消息(通過sendmessage)炸卑;其次既鞠,處理登記消息隊列消息;再次處理QS_QUIT標(biāo)志盖文,處理虛擬輸入隊列嘱蛋,處理wm_paint;最后是wm_timer五续。

4洒敏、描述實時系統(tǒng)的基本特性

在特定時間內(nèi)完成特定的任務(wù),實時性與可靠性疙驾。

所謂“實時操作系統(tǒng)”凶伙,實際上是指操作系統(tǒng)工作時,其各種資源可以根據(jù)需要隨時進(jìn)行動態(tài)分配它碎。由于各種資源可以進(jìn)行動態(tài)分配函荣,因此显押,其處理事務(wù)的能力較強(qiáng)、速度較快傻挂。

5乘碑、中斷和輪詢的特點

對I/O設(shè)備的程序輪詢的方式,是早期的計算機(jī)系統(tǒng)對I/O設(shè)備的一種管理方式金拒。它定時對各種設(shè)備輪流詢問一遍有無處理要求兽肤。輪流詢問之后,有要求的绪抛,則加以處理轿衔。在處理I/O設(shè)備的要求之后,處理機(jī)返回繼續(xù)工作睦疫。盡管輪詢需要時間害驹,但輪詢要比I/O設(shè)備的速度要快得多,所以一般不會發(fā)生不能及時處理的問題蛤育。當(dāng)然宛官,再快的處理機(jī),能處理的輸入輸出設(shè)備的數(shù)量也是有一定限度的瓦糕。而且底洗,程序輪詢畢竟占據(jù)了CPU相當(dāng)一部分處理時間,因此咕娄,程序輪詢是一種效率較低的方式亥揖,在現(xiàn)代計算機(jī)系統(tǒng)中已很少應(yīng)用。

程序中斷通常簡稱中斷圣勒,是指CPU在正常運行程序的過程中费变,由于預(yù)先安排或發(fā)生了各種隨機(jī)的內(nèi)部或外部事件,使CPU中斷正在運行的程序圣贸,而轉(zhuǎn)到為響應(yīng)的服務(wù)程序去處理挚歧。

輪詢——效率低,等待時間很長吁峻,CPU利用率不高滑负。

中斷——容易遺漏一些問題,CPU利用率高用含。

6矮慕、什么是臨界區(qū)?如何解決沖突?

每個進(jìn)程中訪問臨界資源的那段程序稱為臨界區(qū),每次只準(zhǔn)許一個進(jìn)程進(jìn)入臨界區(qū),進(jìn)入后不允許其他進(jìn)程進(jìn)入。

(1)如果有若干進(jìn)程要求進(jìn)入空閑的臨界區(qū),一次僅允許一個進(jìn)程進(jìn)入扁藕;

(2)任何時候,處于臨界區(qū)內(nèi)的進(jìn)程不可多于一個。如已有進(jìn)程進(jìn)入自己的臨界區(qū)槽华,則其它所有試圖進(jìn)入臨界區(qū)的進(jìn)程必須等待;

(3)進(jìn)入臨界區(qū)的進(jìn)程要在有限時間內(nèi)退出趟妥,以便其它進(jìn)程能及時進(jìn)入自己的臨界區(qū)猫态;

(4)如果進(jìn)程不能進(jìn)入自己的臨界區(qū),則應(yīng)讓出CPU披摄,避免進(jìn)程出現(xiàn)“忙等”現(xiàn)象亲雪。

7、說說分段和分頁

頁是信息的物理單位疚膊,分頁是為實現(xiàn)離散分配方式义辕,以消減內(nèi)存的外零頭,提高內(nèi)存的利用率寓盗;或者說灌砖,分頁僅僅是由于系統(tǒng)管理的需要,而不是用戶的需要傀蚌。

段是信息的邏輯單位基显,它含有一組其意義相對完整的信息。分段的目的是為了能更好的滿足用戶的需要善炫。

頁的大小固定且由系統(tǒng)確定撩幽,把邏輯地址劃分為頁號和頁內(nèi)地址兩部分,是由機(jī)器硬件實現(xiàn)的箩艺,因而一個系統(tǒng)只能有一種大小的頁面窜醉。段的長度卻不固定,決定于用戶所編寫的程序艺谆,通常由編輯程序在對源程序進(jìn)行編輯時酱虎,根據(jù)信息的性質(zhì)來劃分。

分頁的作業(yè)地址空間是一維的擂涛,即單一的線性空間读串,程序員只須利用一個記憶符,即可表示一地址撒妈。分段的作業(yè)地址空間是二維的恢暖,程序員在標(biāo)識一個地址時,既需給出段名狰右,又需給出段內(nèi)地址杰捂。

8.什么是中斷?中斷時CPU做什么工作棋蚌?

中斷是指在計算機(jī)執(zhí)行期間嫁佳,系統(tǒng)內(nèi)發(fā)生任何非尋常的或非預(yù)期的急需處理事件挨队,使得CPU暫時中斷當(dāng)前正在執(zhí)行的程序而轉(zhuǎn)去執(zhí)行相應(yīng)的事件處理程序。待處理完畢后又返回原來被中斷處繼續(xù)執(zhí)行或調(diào)度新的進(jìn)程執(zhí)行的過程蒿往。

9.線程是否具有相同的堆棧盛垦?dll是否有獨立的堆棧?

每個線程有自己的堆棧瓤漏。

dll是否有獨立的堆棧腾夯?這個問題不好回答,或者說這個問題本身是否有問題蔬充。因為dll中的代碼是被某些線程所執(zhí)行蝶俱,只有線程擁有堆棧。如果dll中的代碼是exe中的線程所調(diào)用饥漫,那么這個時候是不是說這個dll沒有獨立的堆棧榨呆?如果dll中的代碼是由dll自己創(chuàng)建的線程所執(zhí)行,那么是不是說dll有獨立的堆棧庸队?

以上講的是堆棧积蜻,如果對于堆來說,每個dll有自己的堆皿哨,所以如果是從dll中動態(tài)分配的內(nèi)存浅侨,最好是從dll中刪除;如果你從dll中分配內(nèi)存证膨,然后在exe中如输,或者另外一個dll中刪除,很有可能導(dǎo)致程序崩潰央勒。

10.什么是緩沖區(qū)溢出不见?有什么危害?其原因是什么崔步?

緩沖區(qū)溢出是指當(dāng)計算機(jī)向緩沖區(qū)內(nèi)填充數(shù)據(jù)時超過了緩沖區(qū)本身的容量稳吮,溢出的數(shù)據(jù)覆蓋在合法數(shù)據(jù)上。

危害:在當(dāng)前網(wǎng)絡(luò)與分布式系統(tǒng)安全中井濒,被廣泛利用的50%以上都是緩沖區(qū)溢出灶似,其中最著名的例子是1988年利用fingerd漏洞的蠕蟲。而緩沖區(qū)溢出中瑞你,最為危險的是堆棧溢出酪惭,因為入侵者可以利用堆棧溢出,在函數(shù)返回時改變返回程序的地址者甲,讓其跳轉(zhuǎn)到任意地址春感,帶來的危害一種是程序崩潰導(dǎo)致拒絕服務(wù),另外一種就是跳轉(zhuǎn)并且執(zhí)行一段惡意代碼,比如得到shell鲫懒,然后為所欲為嫩实。通過往程序的緩沖區(qū)寫超出其長度的內(nèi)容,造成緩沖區(qū)的溢出窥岩,從而破壞程序的堆棧甲献,使程序轉(zhuǎn)而執(zhí)行其它指令,以達(dá)到攻擊的目的谦秧。

造成緩沖區(qū)溢出的主原因是程序中沒有仔細(xì)檢查用戶輸入的參數(shù)竟纳。

11.OS如何實現(xiàn)內(nèi)存的管理撵溃?

  1. 虛擬內(nèi)存

  2. 內(nèi)存頁

1. 并發(fā)

并發(fā)是指宏觀上在一段時間內(nèi)能同時運行多個程序疚鲤,而并行則指同一時刻能運行多個指令。

并行需要硬件支持缘挑,如多流水線集歇、多核處理器或者分布式計算系統(tǒng)。

操作系統(tǒng)通過引入進(jìn)程和線程语淘,使得程序能夠并發(fā)運行诲宇。

2. 共享

共享是指系統(tǒng)中的資源可以被多個并發(fā)進(jìn)程共同使用。

有兩種共享方式:互斥共享和同時共享惶翻。

互斥共享的資源稱為臨界資源姑蓝,例如打印機(jī)等,在同一時刻只允許一個進(jìn)程訪問吕粗,需要用同步機(jī)制來實現(xiàn)互斥訪問纺荧。

3. 虛擬

虛擬技術(shù)把一個物理實體轉(zhuǎn)換為多個邏輯實體。

主要有兩種虛擬技術(shù):時(時間)分復(fù)用技術(shù)和空(空間)分復(fù)用技術(shù)颅筋。

多個進(jìn)程能在同一個處理器上并發(fā)執(zhí)行使用了時分復(fù)用技術(shù)宙暇,讓每個進(jìn)程輪流占用處理器,每次只執(zhí)行一小個時間片并快速切換议泵。

虛擬內(nèi)存使用了空分復(fù)用技術(shù)占贫,它將物理內(nèi)存抽象為地址空間,每個進(jìn)程都有各自的地址空間先口。地址空間的頁被映射到物理內(nèi)存型奥,地址空間的頁并不需要全部在物理內(nèi)存中,當(dāng)使用到一個沒有在物理內(nèi)存的頁時碉京,執(zhí)行頁面置換算法厢汹,將該頁置換到內(nèi)存中。

4. 異步

異步指進(jìn)程不是一次性執(zhí)行完畢收夸,而是走走停停坑匠,以不可知的速度向前推進(jìn)。

基本功能

1. 進(jìn)程管理

進(jìn)程控制卧惜、進(jìn)程同步厘灼、進(jìn)程通信夹纫、死鎖處理、處理機(jī)調(diào)度等设凹。

2. 內(nèi)存管理

內(nèi)存分配舰讹、地址映射、內(nèi)存保護(hù)與共享闪朱、虛擬內(nèi)存等月匣。

3. 文件管理

文件存儲空間的管理、目錄管理奋姿、文件讀寫管理和保護(hù)等锄开。

4. 設(shè)備管理

完成用戶的 I/O 請求,方便用戶使用各種設(shè)備称诗,并提高設(shè)備的利用率萍悴。

主要包括緩沖管理、設(shè)備分配寓免、設(shè)備處理癣诱、虛擬設(shè)備等。

靜態(tài)鏈接庫和動態(tài)鏈接庫的區(qū)別

靜態(tài)連接庫就是把(lib)文件中用到的函數(shù)代碼直接鏈接進(jìn)目標(biāo)程序袜香,程序運行的時候不再需要其它的庫文件撕予。

動態(tài)鏈接就是把調(diào)用的函數(shù)所在文件模塊(DLL)和調(diào)用函數(shù)在文件中的位置等信息鏈接進(jìn)目標(biāo)程序,程序運行的時候再從DLL中尋找相應(yīng)函數(shù)代碼蜈首,因此需要相應(yīng)DLL文件的支持实抡。

靜態(tài)庫和動態(tài)庫的區(qū)別

1、 靜態(tài)鏈接庫的后綴名為lib疾就,動態(tài)鏈接庫的導(dǎo)入庫的后綴名也為lib澜术。不同的是,靜態(tài)庫中包含了函數(shù)的實際執(zhí)行代碼猬腰,而對于導(dǎo)入庫而言鸟废,其實際的執(zhí)行代碼位于動態(tài)庫中,導(dǎo)入庫只包含了地址符號表等姑荷,確保程序找到對應(yīng)函數(shù)的一些基本地址信息盒延;

2、由于靜態(tài)庫是在編譯期間直接將代碼合到可執(zhí)行程序中鼠冕,而動態(tài)庫是在執(zhí)行期時調(diào)用DLL中的函數(shù)體添寺,所以執(zhí)行速度比動態(tài)庫要快一點;

3懈费、 靜態(tài)庫鏈接生成的可執(zhí)行文件體積較大计露,且包含相同的公共代碼,造成內(nèi)存浪費;

4票罐、 使用動態(tài)鏈接庫的應(yīng)用程序不是自完備的叉趣,它依賴的DLL模塊也要存在,如果使用載入時動態(tài)鏈接该押,程序啟動時發(fā)現(xiàn)DLL不存在疗杉,系統(tǒng)將終止程序并給出錯誤信息。而使用運行時動態(tài)鏈接蚕礼,系統(tǒng)不會終止烟具,但由于DLL中的導(dǎo)出函數(shù)不可用,程序會加載失數斓拧朝聋;

5、 DLL文件與EXE文件獨立罩润,只要輸出接口不變(即名稱玖翅、參數(shù)翼馆、返回值類型和調(diào)用約定不變)割以,更換DLL文件不會對EXE文件造成任何影響,因而極大地提高了可維護(hù)性和可擴(kuò)展性应媚,適用于大規(guī)模的軟件開發(fā)严沥,使開發(fā)過程獨立、耦合度小中姜,便于不同開發(fā)者和開發(fā)組織之間進(jìn)行開發(fā)和測試消玄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市丢胚,隨后出現(xiàn)的幾起案子翩瓜,更是在濱河造成了極大的恐慌,老刑警劉巖携龟,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兔跌,死亡現(xiàn)場離奇詭異,居然都是意外死亡峡蟋,警方通過查閱死者的電腦和手機(jī)坟桅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蕊蝗,“玉大人仅乓,你說我怎么就攤上這事∨钇荩” “怎么了夸楣?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我豫喧,道長洞慎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任嘿棘,我火速辦了婚禮劲腿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸟妙。我一直安慰自己焦人,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布重父。 她就那樣靜靜地躺著花椭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪房午。 梳的紋絲不亂的頭發(fā)上矿辽,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音郭厌,去河邊找鬼袋倔。 笑死,一個胖子當(dāng)著我的面吹牛折柠,可吹牛的內(nèi)容都是我干的宾娜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼扇售,長吁一口氣:“原來是場噩夢啊……” “哼前塔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起承冰,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤华弓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后困乒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寂屏,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年顶燕,在試婚紗的時候發(fā)現(xiàn)自己被綠了凑保。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡涌攻,死狀恐怖欧引,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情恳谎,我是刑警寧澤芝此,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布憋肖,位于F島的核電站,受9級特大地震影響婚苹,放射性物質(zhì)發(fā)生泄漏岸更。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一膊升、第九天 我趴在偏房一處隱蔽的房頂上張望怎炊。 院中可真熱鬧,春花似錦廓译、人聲如沸评肆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓜挽。三九已至,卻和暖如春征绸,著一層夾襖步出監(jiān)牢的瞬間久橙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工管怠, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留淆衷,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓排惨,卻偏偏與公主長得像吭敢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子暮芭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1.內(nèi)存的頁面置換算法 (1)最佳置換算法(OPT)(理想置換算法):從主存中移出永遠(yuǎn)不再需要的頁面砾莱;如無這樣的...
    杰倫哎呦哎呦閱讀 3,227評論 1 9
  • 前言 北大《操作系統(tǒng)原理》[https://www.coursera.org/learn/os-pku]課堂筆記瑞筐,...
    尤汐Yogy閱讀 2,648評論 0 11
  • 第一章:概述 什么是操作系統(tǒng)? 是一段一直運行在計算機(jī)上的程序 是資源的分配者 向上管理軟件向下管理硬件 為用戶提...
    Moonsmile閱讀 2,301評論 0 4
  • 我的心里如果沒有溫柔腊瑟, 再溫和的話語也只是一把暗利的塵沙聚假。 若我的雙眼沒有靈動的期盼, 再美麗的景色也寫不出詩行闰非。...
    營盤閱讀 351評論 5 9
  • 哈嘍~大家好膘格,我是野生手繪小能手——葉小繪(*^ω^*)全新的主題手繪教程分享強(qiáng)勢回歸,期待你的積極行動财松! 這是一...
    一張葉小繪閱讀 576評論 0 5