磁盤調度算法,內存調度,內存分配策略

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

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,最近最久未使用
  比較好的算法,但要求系統中有較多的支持硬件
  爲了瞭解一個進程在內存中的各個頁面各有多少時間未被進程訪問,以及如何快速的直到那一頁是最近最久未使用的頁面。必須有兩類硬件的支持:棧和寄存器。

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