操作系統筆記(2)

內存

內存關係需求

重定位
邏輯組織
保護
物理組織
共享

內存分區

內存管理的主要操作的主要操作時處理器把程序裝入內存中執行,設計一種稱爲虛存(虛擬內存)的複雜方案。
虛存基於分段和分頁這兩種基本技術,或基於這兩種技術中的一種。

固定分區

大多是內存管理都假定操作系統佔據內存中,而內存中的其餘部分則共多個用戶進程使用。管理用戶內存空間的最簡方案就是對他分區,以形成若干邊界固定的區域。

分區大小

固定分區的項中選擇,一種是使用大小相等的風趣,此時≤分區大小的任何進程都可裝入任何可用的分區中。
如果所有分區已滿且沒有進程處於就緒態或者運行態,則操作系統可以換出一個進程的所有分區,並裝入另一個進程,使得處理器有事可做。

放置算法

對於大小相等的分區策略,進程在內存中的放置非常簡單。只要存在可用的分區,進程就能裝入分區。如果所有的分區都被處於不可運行的狀態佔據,那麼這些進程中的一個必須被換出,以便爲新進程讓出空間。

對於大小不等的分度策略,把進程分配到分區有兩種方法。

①最簡單的方法:把每個進程分配到可以容納他的最小分區。這種情況下,每個分區都需要維護一個調度隊列,用於保存從這個分區患處的進程。
優點是,若所有進程都按這種方式分配,可以是每個分區內部浪費的空間(內部碎片)最少化。
缺點是,這樣對於很多更小的進程,一些較大的分區會保持閒置
②改進方式:只提供一個調度隊列面向所有分區,當一個進程需要裝入內存時,選擇可以容納該進程的最小可用分區。若所有分區都已被佔據,則必須進行交換。一般優先考慮換出能容按新進程的最小分區中的進程,或考慮一些諸如優先級之類的其他因素。也可以優先選擇換出被阻塞的進程而非就緒進程。

動態分區

固定夫存在缺點,爲了克服這些缺點,人們提出了一種動態分區的方法。

對於動態分區而言,分區的長度和數量是可變的。最初進程裝入內存時,系統會給其分配一塊與其所需容量完全相等的內存空間。

這樣不斷分配之後,內存末尾會剩下一塊剩餘空間,當裝入一個新進程而剩餘空間對於其來說太小時,需要換出佔用內存比其大的進程,被換出的內存處於就緒掛起狀態。另一個時刻,內存中沒有一個進程時就虛的,但是處於就緒掛起狀態的進程可用。由於內存中沒有足夠空間容納該進程,就再換出一個進程,進入該進程。
無標題.png
如上,動態分區方法不錯,但是容易形成很多剩餘內存空間,造成內存利用率下降。這種現象稱之爲外部碎片,指在所有分區外的存儲空間變成了越來越多的碎片。

克服這種缺點的一種技術就是壓縮:操作系統不時地移動進程,使得進程佔用空間連續,所有空閒空間連成一片。但是壓縮的困難之處在於這是一個非常費時的過程,且會浪費處理器時間。另外壓縮需要動態重定位的能力,也就是必須能夠把程序從內存的一塊區域移動到另一塊區域。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章