作業系統面試題目解析

2021-07-28 09:08:29 字數 1465 閱讀 6180

下面的記憶體管理模式中,會產生外零頭的是(b)

a 頁式

b 段式

c 請求頁式

d 請求段式

作業系統在分配記憶體時,有時候會產生一些空閒但是無法被正常使用的記憶體區域,這些就是記憶體碎片,或者稱為記憶體零頭,這些記憶體零頭一共分為兩類:內零頭和外零頭。

內零頭是指程序在向作業系統請求記憶體分配時,系統滿足了程序所需要的記憶體需求後,還額外還多分了一些記憶體給該程序,

也就是說額外多出來的這部分記憶體歸該程序所有,其他程序是無法訪問的。

外零頭是指記憶體中存在著一些空閒的記憶體區域,

這些記憶體區域雖然不歸任何程序所有,但是因為記憶體區域太小,無法滿足其他程序所申請的記憶體大小而形成的記憶體零頭。

頁式儲存管理是以頁為單位(頁面的大小由系統確定,且大小是固定的)向程序分配記憶體的,例如:假設記憶體總共有100k,分為10頁,每頁大小為10k。現在程序a提出申請56k記憶體,

因為頁式儲存管理是以頁為單位程序記憶體分配的,所以系統會向程序a提供6個頁面,也就是60k的記憶體空間,那麼在最後一頁中程序只使用了6k,從而多出了4k的記憶體碎片,但是這4k的記憶體碎片系統已經分配給程序a了,其他程序是無法再訪問這些記憶體區域的,這種記憶體碎片就是內零頭。

段式儲存管理是段(段的大小是程式邏輯確定,且大小不是固定的)為單位向程序進行記憶體分配的,程序申請多少記憶體,系統就給程序分配多少記憶體,這樣就不會產生內零頭,但是段式分配會產生外零頭。

例如:假設記憶體總的大小為100k,現在程序a向系統申請60k的記憶體,系統在滿足了程序a的記憶體申請要求後,還剩下40k的空閒記憶體區域;這時如果程序b向系統申請50k的記憶體區域,而系統只剩下了40k的記憶體區域,雖然這40k的記憶體區域不歸任何程序所有,但是因為大小無法滿足程序b的要求,所以也無法分配給程序b,這樣就產生了外零頭。請求段式儲存管理是在段式儲存管理的基礎上增加了請求調段功能和段置換功能。

請求分頁儲存管理中,頁面置換演算法很多,但只有最佳置換演算法能完全避免程序的抖動,因此目前應用最廣。其他(如改進型clock)演算法雖然也能避免程序的抖動,但其效率一般很低。(b)

a 對 b錯

在頁面置換過程中的最糟糕的一種情形是,剛剛換出的頁面馬上又要換入主存,剛剛換入的頁面馬上就要換出主存,這種頻繁的頁面排程行為稱為 

抖動, 或 

顛簸。最佳置換演算法所選擇的淘汰頁面將是以後永不使用的,或者是在最長時間內不再被訪問的頁面,這樣可以

保證最低的缺頁率

。但是人們目前無法預知程序在記憶體的若干頁面中哪個是未來最長時間不再被訪問的,因而該演算法無法實現。這樣說其完全避免抖動就無從談起了。

幾種常用的頁面置換演算法:

1、先進先出置換演算法(fifo) 2、

最近最久未使用(lru)演算法 3、

clock置換演算法(lru演算法的近似實現) 4、

最少使用(lfu)置換演算法 5、

工作集演算法 6、

工作集時鐘演算法

7、老化演算法(非常類似lru的有效演算法)

8、nru(最近未使用)演算法

9、第二次機會演算法

linux作業系統常用面試題目

請描述一下用多執行緒怎麼實現生產者消費者模型 知道nginx的驚群現象嗎?怎麼解決?請說一下epoll的核心實現,都涉及哪些資料結構?select和epoll的區別?fork 都會做哪些複製?什麼是寫時拷貝?fork以後,父程序開啟的檔案指標位置在子程序裡面是否一樣?你專案中為什麼使用程序池?而不是...

linux作業系統常用面試題目

請描述一下用多執行緒怎麼實現生產者消費者模型 知道nginx的驚群現象嗎?怎麼解決?請說一下epoll的核心實現,都涉及哪些資料結構?select和epoll的區別?fork 都會做哪些複製?什麼是寫時拷貝?fork以後,父程序開啟的檔案指標位置在子程序裡面是否一樣?你專案中為什麼使用程序池?而不是...

linux作業系統常用面試題目

請描述一下用多執行緒怎麼實現生產者消費者模型 知道nginx的驚群現象嗎?怎麼解決?請說一下epoll的核心實現,都涉及哪些資料結構?select和epoll的區別?fork 都會做哪些複製?什麼是寫時拷貝?fork以後,父程序開啟的檔案指標位置在子程序裡面是否一樣?你專案中為什麼使用程序池?而不是...