Linux虚拟内存管理基础v2研究报告.ppt

Linux虚拟内存管理基础篇

4

用户地址空间与内核地址空间

Linux将每个进程的4GB的独立地址空间又划分为用户地址空间(0~ 0xBFFFFFFF)和 内核地址空间(0xC0000000 ~ 0xFFFFFFFF)两部分。

操作系统内核代码和数据存放在内核地址空间;每个进程自己私有的代码和数据存放在用户地址空间

虽然Linux的内核代码和数据被映射到了每个进程的地址空间中(所有进程看到的内容是相同的),但在实际的物理内存中,只有内核代码和数据的一份拷贝。

5

用户地址空间与内核地址空间

用户态与核心态

一般现代CPU都有几种不同的指令执行级别

在高执行级别下,代码可以执行特权指令,访问任意的物理地址,这种CPU执行级别就对应着内核态

用户态指相应的低级别执行状态,代码的掌控范围会受到限制,只能执行CPU指令集的一个子集

举例:intel x86 CPU有四种不同的执行级别0-3,Linux只使用了其中的0级和3级分别来表示内核态和用户态

0xc0000000以上的内核地址空间只能在内核态下访问,00xbfffffff的用户地址空间在两种状态下都可以访问

应用程序可以通过Linux系统调用由用户态进入内核态

7

逻辑地址与物理地址

逻辑地址:程序在运行过程中用来访问存储器的地址。程序员在编程时,只需知道逻辑地址,不需考虑该地址与实际物理硬件上的存储单元如何对应。编译器在编译源程序时,也只需考虑逻辑地址。

物理地址:表示物理存储器中一个存储单元的实际位置,地址总线上产生的就是物理地址。(总线地址)

在实地址模式下,逻辑地址等于物理地址。在虚拟地址模式下,逻辑地址不等于物理地址,必须经过查表才能转换为物理地址,因此也叫虚拟地址。

线性地址:2维逻辑地址变为1维地址后,叫线性地址

物理地址

查表 转换

逻辑地址

虚拟页

物理页

0

3

1

null

2

1

3

null

虚拟页

物理页

0

2

1

null

2

1

3

null

虚拟页

物理页

0

null

1

null

2

1

3

null

物理页

taken

进程id

0

N

null

1

Y

os

2

Y

2

3

Y

1

进程 1 的页表

进程id

虚拟页

硬盘文件名

偏移量

进程 2 的页表

进程 3 的页表

内页表

外页表

CR3寄存器

CPU负责查表(虚拟地址->物理地址),查表失败时触发缺页异常(14号);

OS负责填充各个表的内容,并提供缺页中断的中断服务器程序。

9

X86处理器对VM的支持

MMU单元:(1)自动查表,将当期指令中的逻辑地址转化为物理地址; (2)触发缺页异常。

32bitCPU支持2级页表:页目录表,页表。10+10+12

64bitCPU支持4级页表:9+9+9+9+12

专用寄存器CR3中存放了当前有效的页目录表的物理地址。

专用寄存器CR2用于存放触发缺页异常的线性地址。

转换旁视缓冲区TLB:将常用的逻辑/物理转换关系缓存到CPU。当页表被修改,或有效页表切换时需调用专用指令刷新TLB。

flush_tlb_all, flush_tlb_mm, flush_tlb_range, flush_tlb_page

10

32bit Intel x86的页表

在32位CPU上,地址空间为2^32,一个内存页大小为2^12,则共有2^20个页,页编号范围0~2^20-1,因此页表中的一行至少要用3个字节(存储页编号是必须的),但实际上页表中一行占4个字节。

80386CPU中一个页表项的定义如下:

Present标志、Accessed标志、Dirty标志、Read/Write标志、User/Supervisor标志、……

如果present标志为0,分页单元就把这个线性地址存放在处理器的CR2寄存器中,并产生一个14号缺页异常

11

页表项或页目录项中的标志

Present标志:所指内容是否存在

Accessded标志:所指内容被访问之后自动置1

Dirty标志:所指内容被修改后自动置1

Read/Write标志:所指内容的读写权限

User/Supervisor标志:所指内容的访问特权要求

PCD/PWT:是否运行被缓存至Cache

PageSize:页大小:4K,4M,2M

Global标志:防止页从TLB中刷新出去

12

两级页表

为了节省内存,32位CPU采用了两级页表

第一级为页目录,每个表项存储了第二级页表的物理地址。

第二级页表的每个表项存储了一个虚拟页所对应物理页的物理地址。

32位的虚拟地址被分成3个域

目录(directory)最高的10位

页表(Table)中间的10位

页内偏移量(offset)最低的12位

程序

linux虚拟内存 ppt,Linux虚拟内存管理基础v2研究报告.ppt相关推荐

  1. 计算机编程入门课件,PPT课件大学计算机基础编程入门.ppt

    PPT课件大学计算机基础编程入门 大学计算机基础B 主讲教师:赵晓安 讲 课 内 容 一.程序设计的基本概念 1.程序设计语言 2.程序设计的方法 二.计算机算法基本知识 1.算法的概念 2.流程图? ...

  2. c语言基础知识点总结ppt,《C语言基础知识》PPT课件.ppt

    <<C语言基础知识>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<C语言基础知识>PPT课件.ppt(29页珍藏版)>请在人人文库网上搜索. ...

  3. 课件属于计算机应用中的什么,ppt课件-《计算机应用基础》课件.ppt

    ppt课件-<计算机应用基础>课件 <计算机应用基础>课件 计算机应用基础总目录 第一篇:计算机基础 第二篇:Windows 2000 第三篇:Word 2000 第四篇:Ex ...

  4. 计算机网络硬件ppt,4计算机网络硬件基础全解.ppt

    [摘要]4 计算机网络硬件基础 4.1主要网络终端设备 4.1.2工作站 工作站(Client)又称客户机,是指连入网络.并且接收网络服务器控制和管理的,共享网络资源的计算机. 客户机与服务器不同,服 ...

  5. 计算机ppt操作知识,计算机基础知识:PPT常用操作(三)

    [导语]在事业单位考试中,计算机专业知识的复习向来是考生复习备考阶段的一大重点,其中中公事业单位考试网为计算机基础知识的复习为考生提供知识点梳理,帮助考生备考! 一.快速选择多个对象 在powerpo ...

  6. ppt讲解html,HTML基础教程讲解.ppt

    HTML语法 §1 HTML基础 HTML 建立与测试网页 标记符 Web页的结构 设置页面属性 添加注释 显示特殊字符 一.HTML(HyperText Markup Language) --超文本 ...

  7. 【Linux 内核】Linux 内核特性 ( 组织形式 | 进程调度 | 内核线程 | 多平台虚拟内存管理 | 虚拟文件系统 | 内核模块机制 | 定制系统调用 | 网络模块架构 )

    文章目录 一.Linux 内核特性 1.Linux 内核组织形式 2.Linux 进程调度 3.Linux 内核线程 4.Linux 内核多平台虚拟内存管理 5.Linux 虚拟文件系统 6.Linu ...

  8. linux物理内存虚拟内存一致,Liunx内存管理的调用和实现

    下面我们探讨一下关于内存管理的系统调用方式.事实上,POSIX 并没有给内存管理指定任何的系统调用.然而,Linux 却有自己的内存系统调用,主要系统调用如下 系统调用描述s = brk(addr)改 ...

  9. linux内存管理的主要概念是虚拟内存,有关linux内存管理机制的相关内容,linux物理内存和虚拟内存,深入了解Linux内存运行 ......

    在linux中空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然. 这是Linux内存管理的一个优秀特性,区别于Windows的内存管理. 主要特点: 无论物理内存有多大,L ...

最新文章

  1. python使用matplotlib可视化、使用matplotlib可视化scipy.misc图像、自定义使用grey灰色映射、将不同亮度映射到不同的色彩、并添加颜色标尺
  2. php与ajax技术
  3. sprintf,sscanf,snprintf
  4. Geometric-Transformations图像几何变换halcon算子,持续更新
  5. [能力提升][费曼学习法]学习方法
  6. cocos2d c 调用java_cocos2d-x之C++ 调用Java函数并接收返回值
  7. 微信小程序 ----- this.getOpenerEventChannel is not a function
  8. CSS百分比实现高度占位自适应
  9. dataframe先分组再画图
  10. python -m以模块方式启动,python命令加上-u(unbuffered)参数后会强制其标准输出
  11. centos7 虚拟机系统磁盘扩容
  12. linux aria2磁力链接,Linux一键安装Aria2+Yaaw+FileManager实现BT磁力下载,并在线查看/观看...
  13. c语言中常用数学符号,C语言入门知识:运算符
  14. ps -ef和ps -aux的区别
  15. java opencv 去噪,opencv教程-图像去噪与修复
  16. 易诚互动在创业板更新招股书:上半年出现亏损,极其依赖阿里云
  17. Micropython开发之TPYBoard制作声光控开关教程实例
  18. cadence自动生成铺铜_Cadence Allegro简易手册连载7:内层及铺铜
  19. android 编译 libjpeg,Android 编译libjpeg
  20. R语言学习 day_8

热门文章

  1. 如何查看开发者账号何时到期
  2. 《Shell脚本学习指南》第四章 文本处理工具
  3. qt char*转int_Qt在Linux下绘制文字原理-使用FreeType来绘制字形
  4. 用分类映射的办法分类两条夹角为0.3度的直线
  5. WEB开发者应该有哪些必备的技能?
  6. linux中的查找文件夹
  7. 【PC工具】大神级代码注释,漂亮实用的代码注释工具代码logo工具
  8. 二十、SPI设备驱动及应用(一)
  9. Linux中expect实现自动登录
  10. Zabbix基础概念