1. 程式人生 > >磁碟排程演算法,記憶體排程,記憶體分配策略

磁碟排程演算法,記憶體排程,記憶體分配策略

磁碟是可供多個程序共享的裝置,當有多個程序都要求訪問磁碟時,應採用一種最佳排程演算法,以使各程序對磁碟的平均訪問時間最小。由於在訪問磁碟的時間中,主要是尋道時間。因此:
磁碟排程演算法的目標是使磁碟的平均尋道時間最少

1,先來先服務(FIFS,first come first served)
  根據程序請求訪問磁碟的先後順序進行排程。公平,簡單,每個程序都能依次得到處理,不會出現某一程序的請求長期得不到滿足的情況。但演算法由於未對尋道進行優化,致使平均尋道時間可能很長

2,最短尋道時間優先(SSTF,shortest seek time first)
  要求訪問的磁軌與當前磁頭所在的磁軌距離最近,以使每次的尋道時間最短。但是這種演算法不能保證平均尋道時間最短。

  雖然能獲得較好的效能,但卻可能導致某個程序發生“飢餓”現象。只要不斷有新程序的請求到達,且其所要訪問的磁軌與磁頭當前的距離較近,這種新程序的I/O請求必然優先得到滿足

3,電梯演算法(SCAN)
不僅考慮到預訪問的磁頭與當前磁軌間的距離,更優先考慮的是磁頭當前的移動方向。例如:當磁頭正在自裡向外移動時,SCAN演算法所考慮的下一個訪問物件應該是在當前磁軌之外,又是距離最近的。這樣的自裡向外的訪問,直至再無更外的磁軌需要訪問時,才將磁臂換為自外向裡移動。這樣“避免了飢餓現象”。

區域性性原理

時間侷限性:
如果程式中某條指令一旦執行,則不久後該指令可能再次執行;如果某資料被訪問過,則不久後該資料可能再次被訪問。產生時間侷限性的典型原因是由於:存在著大量的迴圈操作
空間侷限性:
一旦程式訪問某個儲存單元,在不久後,其附近的儲存單元也將被訪問,即一段時間內所訪問的地址,可能集中在一定的範圍。程式的順序執行和順序儲存

虛擬儲存器:具有請求調入功能和置換功能,能從邏輯上對記憶體容量加以擴充的一種儲存器系統
每個頁表:

頁號,物理塊號,狀態位p,訪問欄位A,修改位M,外存地址

如果系統的頁大小為4KB(2^12B),那麼頁表可以擁有2^(32-12)個
狀態位p:是不是已經調入了記憶體
訪問欄位A:記錄被訪問的次數,供換出頁面時參考
修改位M:該頁在調入記憶體後是不是被修改過,若修改,則需要重寫到外存

分頁系統中的地址變換過程:

1,檢索塊表(若找到,修改頁表項中的訪問位)
2,沒有找到,到記憶體中去查詢頁表(查詢狀態位p,已調入,則將頁表寫入快表,當快表滿時,應先按照某種演算法換出,寫入)
3,若未調入,則產生缺頁中斷,請求OS從外存把該頁調入記憶體

記憶體分配策略和分配演算法

在為程序分配記憶體時,將涉及到三個問題
1,最小物理塊數的確定
2,物理塊的分配策略
3,物理塊的分配演算法

1,這裡的最小物理塊數,是指能保證程序正常執行所需的最小物理塊數。當系統為程序分配的物理塊數少於此值的時候,程序將無法進行。如果過多的話,那麼將可能造成記憶體的浪費。
對於某些功能較強的機器,其指令長度可能要兩個或多於兩個位元組,因而其指令本身有可能跨兩個頁面,且源地址和目的地址所涉及的區域也有可能跨2個頁面。所以要至少分配6個頁面
2,物理塊分配策略
  1,固定分配區域性置換:(基於程序的型別)或根據程式設計師,管理員的建議,為每個程序分配一定數目的物理塊,在整個執行期間都不再改變。採用該策略,如果程序在執行中發現缺頁,則只能從程序在記憶體n個頁面中選出一個頁換出,然後再調入一個頁,以保證分配給該程序的記憶體空間不變。但是:為某個程序分配的物理塊難以確定

  2,可變分配全域性變數:這可能是最易於實現的一種物理塊分配和置換策略,已用於若干OS。在採用這種策略時,先為系統中的每個程序分配一定數目的物理塊,而os中也保持一個空閒物理塊佇列。當某程序發現缺頁時,由系統從空閒物理塊佇列中取出一個物理塊分配給該程序,並將欲調入的頁裝入其中。這樣,凡是產生缺頁中斷,都將獲得新的物理塊。僅當空閒物理塊佇列中的物理塊用完時,OS才能從記憶體中選擇一頁調出。(隨機調出)

  3,可變分配區域性置換:為每個程序分配一定數目的物理塊,但當某程序發現缺頁時,只允許從該程序在記憶體的頁面中選出一頁換出。這樣,就不會影響其它程序的執行。如果程序在執行中頻繁的發生缺頁中斷,則系統必須為該程序分配若干附加的物理塊,直至該程序的缺頁率減少到合適的程度為止。同樣,若一個程序的執行過程中的缺頁率特別低,則此時可適當減少分配給該程序的物理塊數

3,物理塊分配演算法

 1,平均分配演算法(可供分配的物理塊平均分配給各個程序)
 2,按比例分配演算法(根據程序的大小按比例分配物理塊演算法)
 3,考慮優先權的分配演算法(為了重要的,緊迫的作業能儘快完成,應為他分配較多的記憶體空間。通常採取的方法把記憶體中供分配的所有物理塊分為兩部分:一部分按比例分配給各程序;另一部分根據各程序的優先權,適當的增加其相應份額,分配給各程序)

記憶體排程

在程序執行過程中,若所要訪問的頁面不在記憶體而需要把它們調入記憶體,但記憶體已沒有空間,系統必須從記憶體中調出一頁。
置換演算法的好壞,直接影響系統的效能。

1,最佳置換演算法(理想化的演算法,難於實現)
(淘汰的頁面將是以後永不使用的,或許是最長(未來時間不再被訪問的)),可以獲得最低的缺頁率

2,先進先出頁面置換演算法(總是淘汰最先進入記憶體的頁面)

3,最近最久未使用
  比較好的演算法,但要求系統中有較多的支援硬體
  為了瞭解一個程序在記憶體中的各個頁面各有多少時間未被程序訪問,以及如何快速的直到那一頁是最近最久未使用的頁面。必須有兩類硬體的支援:棧和暫存器。