iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 25
1
自我挑戰組

作業系統概論系列 第 25

DAY 25 Virtual Memory(虛擬記憶體) (下)

  • 分享至 

  • xImage
  •  

今天將接著繼續談論關於虛擬記憶體剩下的部分!

Memory-Mapped Files(記憶體映射檔案)

  • 它是一個讓一段虛擬記憶體對應到一個檔案,而且將I/O檔案視為一般、經常性的記憶來進行存取,而非一般的system call。
  • 這個對應的檔案在一開始時的read是使用demand paging。而且對檔案的read、write被當作是一般記憶體存取,並非透過read()、write()這兩個指令,但也因此簡化其使用跟存取。
  • 對於I/O的技術而言,一些OS會使用記憶體mapped檔案,再加上標準的I/O裝置會使用有效率的記憶體管理子系統,也才能避免需要分割子系統的情況出現。
  • 以下為示意圖:
    https://ithelp.ithome.com.tw/upload/images/20181109/20112086MLTOUlTADA.png

Shared Memory in Windows API

  • 簡單的說就是在Windows API中新增一個記憶體mapping檔案的共同記憶體區域。
  • 其步驟就是先新增一個對映的檔案來被對映,然後再建立其view在virtual address space中。
  • 為了建立記憶體對映檔案,process會使用Create1File()來打開檔案,再回傳HANDE給被開啟的檔案,接著透過CreateFileMapping()來新增HANDE的對映及一個名為共享記憶體的物件;如果要產生一個view的話就使用MapViewOfFile()語法即可。

Allocating Kernal Memory

  • 從使用者記憶體中有著不同的對待方式。
  • 當kernel在請求memory時,通常是從free-memory pool中依照不同的尺寸架構來分配,而一些kernel memory是需要連續的。
    接下來就介紹一些分配的方法吧!!
  • Buddy System:
  1. 是由physical-contiguous pages所組成的固定尺寸segment來分配記憶體到kernel中。
  2. 其分配方法是使用power-of-2 allcator。也就是當被需要分配的小於可用的,就將當前的chunk給分裂成兩個下一個較小權力的buddies of 2。
  3. 好處是利用一種稱為「coalesce(合併)」的技術,可以快速地將未使用的chunks給合併成更大的chunk。
  4. 以下為示意圖:
    https://ithelp.ithome.com.tw/upload/images/20181109/20112086JWxO1DC4F9.png
  • Slab Allocator:
  1. Slab是一個或多個的連續page;然後再由一個或多個slab來組成cache(快取)。
  2. 單一個快取是要給每個獨特的kernel數據架構使用,且在快取當中充滿了objects。
  3. 當快取被新增時,這些物件就會被標記為free;而當架構被存取時則被標記成used。
    所以如果slab充斥著used的物件,下一個物件就會被分配給空著的slab,倘若也沒有空著的slab,就會產生個新的來接收。
  4. 好處是沒有碎片的產生,就能快速地滿足記憶的需求。
  5. 以下為示意圖:
    https://ithelp.ithome.com.tw/upload/images/20181109/20112086GGIBXzH8V4.png

現在就來說明一些其他的考慮因素吧!

Other Considerations

  • Prepaging:
  1. 為了減少在process startup時發生page fault的最大次數。
  2. 在被referenced前,會有一些或是全部的prepage被一個process所需要。
  3. 但如果prepage沒被使用的話,I/O和記憶體就會被浪費掉。
  • Page Size:
  1. 有時候OS的設計者才會有機會可以選擇page大小,特別是在custom-bulit CPU執行時。
  2. 而page的選項包含fragmentation、page table size、resolution等等會被加入考慮。
  • TLB Reach:
  1. 其意思就是從TLB中記憶體可存取的數量有多少;公式為(TLB size) * (Page size)。
  2. 在理想中,每個process的working set可以被儲存在TLB中,但也等於說有很大的機率會產生page fault。
  3. 因此要增加page size跟提供multiple page size。

接下來就是一些其他的議題了!

  • Program Structure:
  1. 因為demand paging是設計成對使用者來說非常簡潔的樣式,所以如果能對基本的demand paging有了解的話,在系統的性能上就會有很大的幫助。
  • I/O interlock:
  1. 有時候當我們在使用demand paging方法的時候,會造成一些被需要的page被locked在記憶體中。
  2. 在考慮I/O時,必須要locked從裝置複製檔案的page,以便通過page replacement algorithm
  3. 以下為示意圖:
    https://ithelp.ithome.com.tw/upload/images/20181109/20112086AaU0KYtvWG.png

關於虛擬記憶體的介紹就到這裡告一段落了,這跟記憶體管理一樣都是既複雜又很多內容的章節,而我只是將我所理解的內容盡量以簡單的方式告訴大家,希望大家都能學好虛擬記憶體喔~那明天就繼續新的章節吧!


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

尚未有邦友留言

立即登入留言