技術問答
技術文章
iT 徵才
Tag
聊天室
2024 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2019 iT 邦幫忙鐵人賽
DAY
22
0
自我挑戰組
作業系統概論
系列 第
22
篇
DAY 22 Virtual Memory(虛擬記憶體) (上)
2019鐵人賽
betty1005
團隊
77乳加巧克力
2018-11-06 16:38:45
13811 瀏覽
分享至
背景
在前一個章節中,我們提到了physical memory跟logical memory兩種記憶體分別,而在這章的一開始會稍微再提到physical memory的相關觀念。
關於虛擬記憶體呢,其背景就是因為physical memory的大小雖然說並不固定,可是當要執行的process比這個physical memory還要大時,我們就需要使用到所謂的「虛擬記憶體」來解決空間不足的問題。
造成空間不足的原因很簡單,因為physical memory向外宣稱自己的空間很大、很足夠,所以讓使用者跟process都信以為真,但當要執行時卻發現空間不足,因為有些記憶體空間是放在硬碟中,而這時又會出現一個問題--「Page fault」,這個問題我們會在後面加以解釋。
而虛擬記憶體將logical跟physical memory的概念給分開解釋:
因為logical memory的空間較大,因此可以讓多個process一起共享這個空間。
如果虛擬記憶體的分配管理妥當,則process在執行上也會順利許多。
而對於I/O來說,因為大小、速度跟CPU之間都有差別,自然也會連帶影響到執行的流暢度。
在實作中有兩種做法:
Demand paging:就是將process需要的pages切割成一小段一小段的去執行。
Demand segmentation:依照process設計時的邏輯架構進行切分;其優點是因為每一個架構都有自己不同的存取模式,如變數、指令等,所以可依照不同架構去切分;而缺點是從一開始OS分配的空間中執行,變成要依不同架構讓OS去各自分配空間才能執行。
以下這就是virtual memory跟physical memory之間的關係:
Demand Paging
其定義很簡單,就是依照需求而得到的page資源。
原則:
當pages被需要了,而且又在記憶體中,就可以將其順序往上搬,加以使用。
如果pages已經不被需要、無效了,就將其退出記憶體裡。
最麻煩的是,如果發現需要的pages不在實際記憶體中,就要去尋找並將它swap in記憶體中。
Lazy swapper:定義就是因為資源的有限,無法把所有的pages都swap in記憶體中,所以只能將已確定、即將要使用的pages給swap in記憶體中,而這就叫做「Lazy swapper」。
以下就是Demand paging的示意圖。
Valid-Invalid Bit
以下是一張示意圖,我們以圖片來解釋:
圖片中的valid是代表frame有存在記憶體中;invalid就是表示frame並不在記憶體中。
之所以設計這種分辨方式,是因為base memory的大小跟physiacl memory的大小不同,才設計此方法加以辨識。就是辨識從process到virtual memory的frame是否在記憶體中。
使用時機就是在MMU真的需要執行時,就要到physical address進行translation:
如果是valid,那沒有問題。
如果是invalid的話,就會發生page fault。
Page fault
在前面幾段多多少少都有提到這個問題,那這是什麼問題呢?
簡單來說,有兩種情況會產生此問題:
單純只是程式碼編撰錯誤,那只要刪除就可以解決。
因為記憶體對外宣稱其空間足以容納process使用,所以當process真的要執行時,發現要求的page是在硬碟中不是在記憶體中,而這種情況就稱為「Page fault」。
解決方法:
第一種情況的很簡單,刪除程式即可。
第二種情況較複雜,需要在physical memory中找到free frame使用,但因為資源有限所以有困難度在,因此只能在記憶體中找尋已完成或沒是在等待而被占住的空間,將其swap out,讓該page再swap in記憶體內使用。
以下就是處理page fault的示意圖:
Page Fault Rate(p),在系統中自然不能太高:
如果p=0的話,沒有page fault的發生。
如果p=1的話,每個reference都是錯誤的。
Effective Access Time(EAT) = (1-p) * memory access+p(page fault overhead+swap page out+swap page in) :
舉例來說,如果記憶體存取時間是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
篇
目錄
RSS系列文
訂閱系列文
46
人訂閱
26
DAY 26 File-System(檔案系統) (上)
27
DAY 27 File System(檔案系統) (下)
28
DAY 28 Implementing File Systems(檔案系統執行) (上)
29
DAY 29 Implementing File System(檔案執行系統) (中)
30
DAY 30 Implementing File System(檔案執行系統) (下)
完整目錄
直播研討會
{{ item.subject }}
{{ item.channelVendor }}
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
1064
組
團體組數
40
組
累計文章數
22195
篇
完賽人數
600
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
windows server
linux
css
react
vue.js
熱門問題
請問內網IP如何轉外網IP?
新手學習編程,哪種編程語言好?
如何寫公式才能利用excel 觸發一個數據時傳送一個訊息給 自已的line呢?有沒有可以用其它方式,來取代line notify 的方法,因為line 開始收費
Windows7升級Windows10後網路功能異常
python爬蟲 動態生成網頁104人力銀行
區域網路問題提問
vmware 虛擬機(windows)裡顯示使用容量與實際檔案容量不符合
防火牆與DNS請教
FORTI 防火牆使用 RADIUS 認證問題請教
2台 Hyper-V 2008 R2 叢集主機(硬體規格相同), 如何加入一台新機? 謝謝.
熱門回答
請問內網IP如何轉外網IP?
防火牆與DNS請教
這樣的物件設計好嗎?
新手學習編程,哪種編程語言好?
區域網路問題提問
熱門文章
每日一篇學習筆記 直到我做完專題 :( [Day33]
每日一篇學習筆記 直到我做完專題 :( [Day34]
每日一篇學習筆記 直到我做完專題 :( [Day35]
每日一篇學習筆記 直到我做完專題 :( [Day36]
EPS 到 JPG 的高效轉檔策略:Python 實作範例
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}