1. 程式人生 > >作業系統--記憶體學習筆記(2)程序記憶體管理--虛擬記憶體

作業系統--記憶體學習筆記(2)程序記憶體管理--虛擬記憶體

虛擬記憶體(virtual memory) = CPU + MMU(Memory Management Unit), MMU是一個CPU上的元器件,它將實體地址對映為虛擬地址,這樣CPU可以之別虛擬地址,而不是實際實體地址了。使用MMU的好處有

1、同一個虛擬地址可以指向不同的實體地址;

2、執行緒之間共享記憶體變得簡單;

當處理器需要訪問一塊不在記憶體中的資料數,會產生一個終端,程序處於阻塞狀態,資料載入後,阻塞狀態變為就緒狀態。

硬體及控制結構

Linux核心用struct page結構表示物理頁,flags域用來表示狀態,包括是不是髒的(修改未落地要實體記憶體)、是不是被鎖定等。_count域存放頁的引用計數。該資料結構的意義在於描述實體記憶體本身,而不是描述其中的資料。

硬體通過slab層管理分配和釋放資料結構(也有很多第三方工具例如tcmalloc取而代之),它扮演的資料結構快取層的角色。

MMU實現方式

不同於上面提到的page和slab。MMU其實就是一張地址對映表,以32位地址為例,4G的記憶體大小,也頁表項為4KB(大部分作業系統中,記憶體分配的最小單元就是4KB),留下12bits做偏移量,10bits留給根頁表,10bits留給4KB頁表。但這種方法有一個致命的缺陷,頁表的大小和虛擬地址空間的大小成正比。另一種實現方法是倒排頁表,下圖摘自《作業系統精髓於設計原理》,總的來說分頁和分段是虛擬記憶體技術的兩種方法。


剛剛想到一個狠2的問題,MMU需要做這麼多對映,不會爆嗎?--當然不會,又不是每個地址都需要對映,只需要對映地址頭部就可以了。

分頁表

分頁表用於記錄每頁中虛擬記憶體對映實際記憶體的資訊以及許可權等,下圖相信會讓你一目瞭然


所以,總的來說,虛擬記憶體就是一個查詢表,這個查詢表在CPU中實現。

作業系統軟體

  • 虛擬記憶體管理方案要求硬體和軟體的支援
    • 硬體:
      1. 虛擬地址動態換成實體地址
      2. 被訪問到的頁不存在記憶體中時,產生一箇中斷
    • 軟體:作業系統處理中斷中的響應,與之相關的問題有
      1. 讀取策略:請求時讀取或者預先讀取,使用蔟的方式一次讀取多頁;
      2. 放置策略:決定一個程序駐留的實際地方,對純粹的扥段系統有一些意義,對分頁系統無意義;
      3. 置換策略:當記憶體滿後,必須決定用哪些頁換哪些頁。大多數策略都基於過去的行為來預測將來的行為。基本演算法有OPT(基於預見未來,只存在理論上的可能)、LRU(開銷大,難以實現)、FIFO(FIFO策略實施起來簡單,但是效能差,因為經常推送錯誤==!)、時鐘(和FIIO唯一不同的是使用為為1的頁框會被跳過,同時需要參考是不是訪問同時是否被修改來設定置換策略)。另外使用緩衝頁技術可以不必真正地將記憶體置換出去;
      4. 清除策略:結合緩衝頁技術,修改過的程序可以在置換的時候被放置到修改頁中,週期寫;
      5. 載入控制:關注任何給定的時刻,駐留在記憶體中的程序數目;
做了如上總結,博主有個問題,程序載入時,所有記憶體都會被載入嗎?其實不是的,程序執行時,只有被呼叫的記憶體才通過缺頁的方式放置到實體記憶體中,因此往往虛擬記憶體大大小要遠遠大於實際所用到的實體記憶體大小

相關推薦

作業系統--記憶體學習筆記2程序記憶體管理--虛擬記憶體

虛擬記憶體(virtual memory) = CPU + MMU(Memory Management Unit), MMU是一個CPU上的元器件,它將實體地址對映為虛擬地址,這樣CPU可以之別虛擬地址,而不是實際實體地址了。使用MMU的好處有 1、同一個虛擬地址可以指向不

Linux核心學習筆記2—— 程序

來源:《Linux核心設計與實現(第2版)》第三章 Robert Love 知識點很少,蝸牛慢慢爬~~~ 1. 什麼是程序? 程序是處於執行期的程式以及它所包含的資源的總稱。所謂的資源,像開啟的檔案、掛起的訊號、核心內部資料、處理器狀態、地址空間、一

linux學習筆記2:檔案管理

1. 建立 建立檔案 touch 檔名 舉例:touch file1 flie2 flie3… 新建目錄 mkdir 目錄名 舉例:mldir dir 建立遞迴目錄 mkdir -p 目錄名/目錄名/目錄名… 舉例:mkdir -p dir1/dir2/dir3 2. 刪除 刪除檔案

【Java】「深入理解Java虛擬機器」學習筆記2-記憶體管理

 一、執行時資料區   JVM在執行Java程式的時候,將其執行時資料區劃分為若干不同區域。它們的用途和建立及銷燬的時間不同。      1、程式計數器(Program Counter Register)     是一塊很小的記憶體空間。當執行緒執行的是Java方法,它記錄的是當前正在執行的

作業系統第四章學習筆記 2儲存器管理 連續分配儲存管理方式

連續分配方式:為一個使用者程式分配一個連續的記憶體空間 :單一連續分配                 記憶體分為系統區和使用者區兩部分:        

OpenCV 2.4.9 學習筆記2—— OpenCV記憶體自動管理

  1、OpenCV函式中輸出影象的記憶體分配是自動完成的(如果不特別指定的話)。   2、使用OpenCV的C++介面時不需要考慮記憶體釋放問題。   3、賦值運算子和拷貝建構函式( ctor )只拷貝資訊頭。 上述部分內容參考了OpenCV的中文教程。(http://www.opencv

作業系統精髓與設計原理(原書第6版)——學習筆記2

 1.3.1 取指令和執行指令 指令暫存器(InstructionRegister,IR)放置取到的指令。指令中包含確定處理器要執行的操作位,處理器解釋指令並執行對應的操作。大體上,這些操作可

《JavaScript高階程式設計》學習筆記2——第四章 變數、作用域和記憶體問題

基本型別和引用型別的值基本型別值指的是簡單的資料段,而引用型別值指那些可能由多個值構成的物件。區域性物件會在函式執行完畢後立即被銷燬。 檢測型別:instanceof操作符result = variable instanceof constructor如果變數是給定引用型別(

學習筆記2---Matlab 圖像處理相關函數命令大全

緩沖 操作 .... 命令 tor ace trac cati msh Matlab 圖像處理相關函數命令大全 一、通用函數: colorbar 顯示彩色條 語法:colorbar \ colorbar(‘vert‘) \ colorbar(‘horiz‘) \ co

5.27:cocos2d-x初探學習筆記2--重要概念及Test樣例結構(轉)

這樣的 發生 菜單 add css 基礎 dsm 人的 添加 1.幾個重要概念 在cocos2d引擎中,有幾個概念,各自是導演。場景,布景和人物角色。 導演(CCDirector):在cocos2d-x引擎中,導演類是遊戲的組織者和領導者。導演制定規則讓遊戲內的場

WPF學習筆記2——動畫效果按鈕變長

anim aud tor col log 筆記 wpf style 分享 說明(2017-6-12 11:26:48): 1. 視頻教程裏是把一個按鈕點擊一下,慢慢變長: 註意幾個方面: (1)RoutedEvent="Button.Click",這裏面要用Button,是

bootstrap 學習筆記2---- 排版

-i 排列 分段函數 class 總結 capital src 設置 per 安裝和柵格系統學完,這篇寫的是排版手冊中排版的目錄如下圖 《標題,頁面主題,內聯文本元素,對齊,改變大小寫,縮略語,地址,引用,列表》手冊中介紹那麽多,其實並不是所有的都要去看看。很多都是沒有必

jQuery源碼學習筆記2

dom src asc turn rdo dom節點 defer ++ des 我們會認識到jQuery中一個叫做domManip的函數,這個函數的作用主要是處理DOM相關的操作,讓傳入的參數更加“幹凈”。 為什麽需要用這個domManip函數呢? 我們知道節點操作瀏覽

後盾網-CI框架實例教程-馬振宇 - 學習筆記2

welcom index 如何 ech lin bsp 後臺模板 back href 第三節視頻:   1、配置自動加載輔助函數URL:     在application/config/autoload.php中設置:       $autoload[‘helper‘] =

linux學習筆記2

linux配置IP進入操作系統界面後,輸入root用戶密碼。<[email protected] ~># root為用戶localhost為主機名(可修改)root用戶後跟的是# 其他用戶為$===============================================

Halcon學習筆記2 VS2010 + Halcon12 C#鏈接相機

operator debug ets generic code locate != 目錄 empty 1.打開Halcon, 使用圖像采集助手獲取相機實時圖像:      1.1 獲取實時圖像:          1.2 插入采集實時圖像的Halcon代碼,並導出:    

Byte of Python學習筆記2——回文練習

span forbidden you 一點 學習筆記 成員 reverse 大小寫 lis   Byte of Python 第111頁有關回文的作業練習,原題為:要想檢查文本是否屬於回文需要忽略其中的標點、空格與大小寫。例如,“Rise to vote, sir.”是一段

來換項目系列Spring學習筆記2

servlet span on() 購物車 集成 因此 proxy center str 3.1.1 配置profile bean 使用@profile 註解 例如 @Configuration @Profile("dev") public class xxxConfig{

Linux第一周學習筆記2

內核 images 百度 互聯網公司 pac 特性 傳播 選擇 ffffff Linux第一周學習筆記(2)1.3認識Linux(1).什麽是LinuxLinux是一個操作系統,比如說微軟的winodws、蘋果電腦的masOS、早於Linux發行的unix;我們平時使用的P

ryu學習筆記2 之 ryu-manager運行報錯

.com 其他 nbsp -i OS in use 分配 art -s http://blog.csdn.net/haimianxiaojie/article/details/48769653 ryu在使用的時候最常出現的報錯是:address already in