iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 22
0
自我挑戰組

作業系統概論系列 第 22

DAY 22 Virtual Memory(虛擬記憶體) (上)

  • 分享至 

  • xImage
  •  

背景

  • 在前一個章節中,我們提到了physical memory跟logical memory兩種記憶體分別,而在這章的一開始會稍微再提到physical memory的相關觀念。
  • 關於虛擬記憶體呢,其背景就是因為physical memory的大小雖然說並不固定,可是當要執行的process比這個physical memory還要大時,我們就需要使用到所謂的「虛擬記憶體」來解決空間不足的問題。
  • 造成空間不足的原因很簡單,因為physical memory向外宣稱自己的空間很大、很足夠,所以讓使用者跟process都信以為真,但當要執行時卻發現空間不足,因為有些記憶體空間是放在硬碟中,而這時又會出現一個問題--「Page fault」,這個問題我們會在後面加以解釋。
  • 而虛擬記憶體將logical跟physical memory的概念給分開解釋:
  1. 因為logical memory的空間較大,因此可以讓多個process一起共享這個空間。
  2. 如果虛擬記憶體的分配管理妥當,則process在執行上也會順利許多。
  3. 而對於I/O來說,因為大小、速度跟CPU之間都有差別,自然也會連帶影響到執行的流暢度。
  • 在實作中有兩種做法:
  1. Demand paging:就是將process需要的pages切割成一小段一小段的去執行。
  2. Demand segmentation:依照process設計時的邏輯架構進行切分;其優點是因為每一個架構都有自己不同的存取模式,如變數、指令等,所以可依照不同架構去切分;而缺點是從一開始OS分配的空間中執行,變成要依不同架構讓OS去各自分配空間才能執行。
  • 以下這就是virtual memory跟physical memory之間的關係:
    https://ithelp.ithome.com.tw/upload/images/20181106/20112086WUGwrvfv01.png

Demand Paging

  • 其定義很簡單,就是依照需求而得到的page資源。
  • 原則:
  1. 當pages被需要了,而且又在記憶體中,就可以將其順序往上搬,加以使用。
  2. 如果pages已經不被需要、無效了,就將其退出記憶體裡。
  3. 最麻煩的是,如果發現需要的pages不在實際記憶體中,就要去尋找並將它swap in記憶體中。
  • Lazy swapper:定義就是因為資源的有限,無法把所有的pages都swap in記憶體中,所以只能將已確定、即將要使用的pages給swap in記憶體中,而這就叫做「Lazy swapper」。
  • 以下就是Demand paging的示意圖。
    https://ithelp.ithome.com.tw/upload/images/20181106/20112086g2NcloU98w.png

Valid-Invalid Bit

  • 以下是一張示意圖,我們以圖片來解釋:
    https://ithelp.ithome.com.tw/upload/images/20181106/20112086cIF5ZNkbHJ.png
  • 圖片中的valid是代表frame有存在記憶體中;invalid就是表示frame並不在記憶體中。
  • 之所以設計這種分辨方式,是因為base memory的大小跟physiacl memory的大小不同,才設計此方法加以辨識。就是辨識從process到virtual memory的frame是否在記憶體中。
  • 使用時機就是在MMU真的需要執行時,就要到physical address進行translation:
  1. 如果是valid,那沒有問題。
  2. 如果是invalid的話,就會發生page fault。

Page fault

  • 在前面幾段多多少少都有提到這個問題,那這是什麼問題呢?
  • 簡單來說,有兩種情況會產生此問題:
  1. 單純只是程式碼編撰錯誤,那只要刪除就可以解決。
  2. 因為記憶體對外宣稱其空間足以容納process使用,所以當process真的要執行時,發現要求的page是在硬碟中不是在記憶體中,而這種情況就稱為「Page fault」。
  • 解決方法:
  1. 第一種情況的很簡單,刪除程式即可。
  2. 第二種情況較複雜,需要在physical memory中找到free frame使用,但因為資源有限所以有困難度在,因此只能在記憶體中找尋已完成或沒是在等待而被占住的空間,將其swap out,讓該page再swap in記憶體內使用。
  • 以下就是處理page fault的示意圖:
    https://ithelp.ithome.com.tw/upload/images/20181106/20112086ZbLr9b3Myz.png
  • Page Fault Rate(p),在系統中自然不能太高:
  1. 如果p=0的話,沒有page fault的發生。
  2. 如果p=1的話,每個reference都是錯誤的。
  • Effective Access Time(EAT) = (1-p) * memory access+p(page fault overhead+swap page out+swap page in) :
  1. 舉例來說,如果記憶體存取時間是200ns,平均page fault出現的時間為8ms,則EAT = (1-p) * 200+p(8ms) = 200+p * 7999800(ns)。
  • 讓demand paging的效能最佳化,是一件很重要的事情,像是在swap space I/O中,讓做swap out/in時給予特權,且在硬碟中有著重要性的話,將其放置在特別位置、分配順序,就能提高優先權。

上一篇
DAY 21 Memory Management(下)
下一篇
DAY 23 Virtual Memory(虛擬記憶體) (中)
系列文
作業系統概論30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言