- 热门文章:
- · 儲存空間的族譜
- · 基本的虛擬記憶體概念
- · 實體與虛擬記憶體
- · 處理器能力
- · 頻寬與處理器能力
- · Red Hat Enterprise Linux 的特定資訊
- · 監控何種資源
- · 2.2. 監控系統效能
- · 監控系統的性能
- · 第 2章. 監控資源
- · igenus 不能修改密码的问题
- · Postfix邮件系统完整版
虛擬記憶體:詳細情形
4.4. 虛擬記憶體:詳細情形
首先我們要先介紹一個新概念:虛擬定址空間(virtual address space)。虛擬定址空間指的是應用程式會用到的最大定址空間。虛擬定址空間與系統架構有關,因為虛擬定址空間能用到幾個位元,是由架構所定義的。虛擬定址空間也與作業系統有關,因為它可能會在系統架構之上,加入額外的限制。
虛擬定址空間中的「虛擬」指的是可能會分給這應用程式的總空間,但「不是」安裝在系統中的實體記憶體,或應用程式任何時候可能用到的空間。
以我們剛剛的例子來說,虛擬定址空間為 15,000 位元組。
要製作虛擬記憶體,電腦系統需要有特別的記憶體管理硬體。這硬體通常被稱為記憶體管理單元(MMU,Memory Management Unit)。沒有 MMU 的話,當 CPU 存取記憶體時,實際的記憶體位址永遠不變 — 記憶體位址 123 永遠會在 RAM 的相同位置。
4.4. 虛擬記憶體:詳細情形
首先我們要先介紹一個新概念:虛擬定址空間(virtual address space)。虛擬定址空間指的是應用程式會用到的最大定址空間。虛擬定址空間與系統架構有關,因為虛擬定址空間能用到幾個位元,是由架構所定義的。虛擬定址空間也與作業系統有關,因為它可能會在系統架構之上,加入額外的限制。
虛擬定址空間中的「虛擬」指的是可能會分給這應用程式的總空間,但「不是」安裝在系統中的實體記憶體,或應用程式任何時候可能用到的空間。
以我們剛剛的例子來說,虛擬定址空間為 15,000 位元組。
要製作虛擬記憶體,電腦系統需要有特別的記憶體管理硬體。這硬體通常被稱為記憶體管理單元(MMU,Memory Management Unit)。沒有 MMU 的話,當 CPU 存取記憶體時,實際的記憶體位址永遠不變 — 記憶體位址 123 永遠會在 RAM 的相同位置。
不 過有了 MMU 之後,記憶體位址每次存取前,都會先轉譯過。這表示記憶體位址 123 可能一下會被轉到實際位址 82034,之後又被轉到 20468 去。這樣一來,為了追蹤虛擬到實體位置的轉譯過程,就必須監控成千上萬個記憶體位元組,造成極大的效能負荷。所以,MMU 會將記憶體切割成許多分頁(pages) — 連續的記憶體區段,每段的大小相同,並由 MMU 視為一個個獨立的個體。
紀錄這些分頁及分頁的位址轉譯過程聽起來像是多此一舉。但是,虛擬記憶體卻是非用不可的東西。基於這些原因,請想想以下一點。
還是以剛剛擁有 15,000 位元組虛擬定址空間的應用程式來看,假設應用程式的第一道指令就是存取位於位址 12374 的資料;但電腦所擁有的記憶體位址最多只到 12288,那會發生什麼事呢?
這種情況就叫做分頁錯誤(page fault)。
4.4.1. 分頁錯誤
分頁錯誤指的是當程式試圖存取定址空間中的資料(或程式碼)時,這資料(或程式碼)卻不在系統記憶體裡的一連串情形。作業系統必須把資料放到該在的地方,以處理分頁錯誤的問題;同時也讓程式覺得好像分頁錯誤從來沒有發生過一樣。
以我們剛剛的例子來說,CPU 會把想找的資料位址(12374)傳給 MMU;然而 MMU 卻還未轉譯這個位址,只好向處理器發出中斷訊號,以執行稱為分頁錯誤處理程式(page fault handler)的軟體。這軟體會決定如何處理這分頁錯誤的問題。它會:
找出欲存取的分頁在硬碟的哪個地方,將之讀入(在這情況下,讀入的通常會是程式碼)
確定這分頁已經在主記憶體中(但尚未分配給目前的程序),並設定 MMU 指向這分頁
指向一個完全空白(數值為零)的特殊分頁,如果程序試著寫入該分頁,那就分配一個新的分頁給這程序(這稱為「寫入即複製(copy on write)」分頁,通常給初始值全部為零的分頁使用)
從其他地方取得需要的分頁(我們將在稍待一會兒,為您詳細探討)
前面三項都非常的乾脆直接;但最後一項則否。也因此,我們必須為您多做說明。
4.4.2. 工作集
目前指定給某個特定程序的多個實體記憶體分頁,稱之為該程序的「工作集(working set)」。工作集中的分頁數目會因為系統整體的可用分頁多寡,而隨之消長。
當程序發生分頁錯誤時,工作集就會變大;當可用的分頁愈來愈少,工作集就會變小。為了避免記憶體不足,必須從工作集中移除分頁,並標示為可用的分頁,留待稍後使用。作業系統會用以下方法降低工作集的分頁大小:
把一些修改過的分頁寫到硬碟的某個特定區域(通常叫做置換(swapping)或分頁(paging)空間)去
釋出未修改過的分頁(因為資料沒有變動,所以不需要寫入這些分頁)
要 為所有的程序決定適當的工作集大小,作業系統必須紀錄所有分頁的使用情形。這樣一來,作業系統就可以知道哪些分頁使用頻繁(所以必須保留在記憶體中),哪 些分頁則否(所以可以從記憶體中移除)。在大部分情形下,演算法則會找出最不常用到的分頁,並將這分頁從工作集中移除。
4.4.3. 置換
雖然置換(將修改過的分頁寫到系統置換空間去)是系統運作很正常的一環,但有時置換動作會太過頻繁。我們擔心是因為過度的置換很容易導致以下情況不斷發生:
某個程序的分頁被置換到磁碟上
該程序獲得執行權,並試圖存取剛剛被置換出去的分頁
這分頁被讀回記憶體中(這通常會導致另一個程序的分頁被置換出去)
過了一會兒,這分頁又被置換出去
如果這一連串動作不斷發生,那就稱為 thrashing(猛移;崩潰),表示記憶體的數量不足以支撐目前的工作量。Thrashing 對系統效能有極為負面的影響,因為 CPU 與 I/O 負載會重到影響系統平時的工作。最糟的情形是系統什麼事也不做,只把所有資源都花費在置換分頁
- · IGENUS FAQ
- · Hashcash
- · 用 hashcash 打击垃圾邮件
- · CCERT中文垃圾邮件过滤规则集Chinese_rules.cf
- · Maia Mailguard
- · 导邮件用户脚本
- · SpamAssassin使用中需要注意的
- · Mail 系統概論
- · sendmail 十问 (abelyang 做)
- · 使用RedHat Linux GRUB 方式引导并做了软RAID…
- · 1.10. Red Hat Enterprise Linux-特定資訊
- · 1.8. 事先規劃
- · 1.7. 安全不能是馬後炮
- · 1.5. 通曉您的使用者
- · 1.4. 熟知您的資源
- · 1.3 儘可能的與他人溝通
- · Red Hat Enterprise Linux 4: 系統管理導論
- · 欢迎加入“学位邮箱”创业团队!
- · 多服务器的日志合并统计——apache日志的cron…
- · 用date取昨天日期
- · yum apt redhat 7.3
- · snmp 服务配置
- · 解决qmail经常收到来至<#@[]>这样的邮件!
- · Email邮件头揭密
- · 全面剖析E-mail收发失败的原因
- · Lotus Domino/Notes 中的安全技术
- · notes邮件导出用户名密码!
- · 从File类开始java IO 系统介绍
- · 退学吧,这样你还有得救--历史上最nb的校园演…
- · 从高考落榜生到网络专家
- · 你尽力了吗??
- · WIN_DOS经典大全
- · ★Windows NT/2000应急响应不完全指南
- · 怎样防止域欺骗——阻止域名劫持
- · DNS资料大全
- · DNS入门
- · UPS的使用
- · 【转贴】献给曾经迷惘和至今仍在迷惘的英语学…
