VMM基础

2023-11-13

复杂度3/5
机密度3/5

最后更新2021/04/20

VMM Virtual Memory Management是所有操作系统都要解决的问题,也是非常硬件相关的问题,必须从硬件CPU的地址管理开始谈起。我们先了解一些术语:

Page 内存页,特定长度的一段内存,在AIX一般是4096Bytes, AIX/Power CPU现在支持small (4K), medium(64k), Large(16M), Scale(16G)大小的page,但需要AIX版本和Power CPU版本之间一定的配合关系,目前只以4K为page size讲述,以后将专题介绍如何设置、使用其它大小的page,以及其具体使用或访问方式。page size越大,对于消耗内存非常多的数据库或大型计算程序,可以降低OS管理内存的额外开销,提升内存使用率。
Page frame 与page对应的一段real memory(实内存),所谓实内存是通过服务器物理内存直接接驳的地址可以直接访问的内存
Page table 内存页映射表,用于实现虚拟内存页和real memory (page frames)或者磁盘(交换区、文件)进行映射
Paging space 交换区,是磁盘上保留的一块空间,用于保存内存页内的数据
Physical/real memory 物理/实内存,是服务器的真实RAM
Address space 地址空间,其中保存着数据的一段地址区间
AIX内存地址映射上图中可以看到有两个进程,都有自己的地址区间,甚至可能有相同的一段地址区间,但通过映射,会对应到不同的物理内存区间。也就是每个进程有自己独立的地址区间,他们通过映射进行区分。

Power CPU也就是AIX的载体支持两种地址映射模式,被称为translate on或off。如果translate off,则为实模式,这时所说的地址都是实地址,既real memory,无需进行地址映射。反之,translate on则实虚拟模式(可能通过多级映射),既上图显示的那种映射模式。

Power CPU通过MSR(Machine State Register)控制指令地址和数据地址的translate on/off状态:
如果设置了MSR_IR位,则指令重定向(映射),指令地址指针iar中的地址被当作实虚拟地址,反之则是实地址;
如果设置了MSR_DR位,则数据重定向(映射),load/stores的数据地址被当作虚拟地址

Power CPU / AIX支持3个地址空间:有效地址空间effective address space; 虚拟地址空间virtual address space和实/逻辑地址空间real/logical address space

在aix使用/管理内存时,会经过两次地址映射:有效地址空间地址映射为虚拟地址空间地址,虚拟空间地址再映射到实地址空间。

如前所述,每个(用户)进程都有它自己的有效地址空间,内核也有自己的有效地址空间。其中每个进程所涉及到的地址都是有效地址空间内的地址。然后,只有translation off的时候,内核的地址才是有效地址。

对于用户进程,不能把自己的有效地址和物理地址直接映射,因此上图的映射关系是省略了中间一个从虚拟地址到实地址映射环节的最终映射关系,真实情况还要增加一级映射过程,如下图所示:
三空间地址映射关系图下面我们来看一下具体的映射过程。还是要先说一些概念:

Physical/Real Address Space 物理地址、实地址空间,这是服务器内存条接驳的地址线路标记的地址区间,这个地址空间大小由物理内存大小决定,可以在内核disable translation的时候访问这个地址(两个前提,只有内核可以访问,必须关掉translation)。

无论是否可以直接访问实地址空间,虚拟地址空间的数据都是映射在对应的实地址空间内的物理内存条中的。这就类似一个人的绰号,这个人的大名和绰号各有各的适用称呼圈子,在不同的圈子里可能使用不同的称呼,但这两个名字其实都对应他一个人,只是场合不同,想要找到他的称呼也可能不同。

地址空间分配和映射以page为单位,就是一次分配或使用一块内存的最小单位是page。在实/物理地址空间,每一块的访问地址都通过一个页面号标识,这个页面号被称为Real Page Number (RPN)。

但是有效地址到虚拟地址的映射不能一页对一页映射,而是以segment为单位做的映射。此目的是为了减少映射表空间大小。如果以页为单位,则每一页都需要几个字节去标记有效地址页和虚拟地址页的对应关系,而且后面还有虚拟地址页到实/物理地址页的映射表,前一级有效地址到虚拟地址映射完全没有必要使用非常细的颗粒度。其实有效地址到虚拟地址映射的目的是分割地址空间,增加安全性管理,使得普通进程在CPU处理时缺省就无法越界访问(只能访问自己所在有效空间的数据),而且,普通用户进程通常也无需访问过大的地址空间。实际上,只有涉及到进程之间直接通信(mmap)或者进程访问内核,内核操作驱动程序做IO的时候,才有跨越不同进程各自有效地址空间访问的需求。

基于这些考虑,有效地址空间到虚拟地址空间的分配粒度时segment段,每段大小为256MB。这样就可以使用一个比较小的映射表(SLB,segment lookaside buffer),同时,对于内存访问授权的限制也以segment为单位,在同一个segment内的所有page,具有相同的被访问授权。换句话说,相同特性的page会在相同的segment中分配。而每个segment都有自己的SCB segment control block标记此segment的访问特性。

segment类型并不多,只有这么几种:

  • Working storage segment
    用于保存变化数据页,这些数据和磁盘地址可以有对应关系,能够交换到磁盘交换区。例如进程/内核数据和堆栈
  • Persistent storage segment
    用于缓存JFS文件系统数据(由于现在几乎没有使用JFS的场景,这种类型segment也许要被淘汰了)
  • Client storage segment
    用于缓存client 文件系统数据,JFS2,NFS,Veritas文件系统都使用这种方式
  • Mapping segment
    用于mmap,既进程之间共享内存
  • RMMAP segment
    用于I/O通信编程,特别是设备驱动程序

下一篇继续介绍:
VMM地址映射

VMM偷页算法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VMM基础 的相关文章

  • 定义新的套接字选项以在 TCP 内核代码中使用

    我正在尝试向 TCP 内核代码添加一些功能 在tcp input c 我希望我实现的代码仅在某些情况下运行 我想添加一个控制标志 可以从用户空间应用程序设置它 我 认为我 需要添加一个新的套接字选项 以便我可以完成以下操作setsockop
  • 如何在 OS161 中添加 open 系统调用的两个变体?

    从手册页OS161 Synopsis include
  • 对内核模块代码进行单元测试是否可行?

    如果是这样我应该使用什么技术 我正在考虑使用 hippomock 因为它们可以用来模拟 C 方法 还有更好的方法吗 如果是这样 任何人都可以提供建议 或者您认为内核的单元测试是否太过分了 从 Linux 内核版本 5 5 开始KUnit可用
  • Linux 内核:Spinlock SMP:为​​什么 spin_lock_irq SMP 版本中有 preempt_disable()?

    Linux内核中的原始代码是 static inline void raw spin lock irq raw spinlock t lock local irq disable preempt disable spin acquire l
  • Linux 中 NDIS 过滤器的类似物是什么?

    我正在研究一个as close to real time我在linux中尽可能地使用系统 并且需要在收到特定数据包后立即发送大约600 800字节的TCP数据包 为了获得最佳的延迟 我希望这个数据包直接从内核发送 而不是将接收到的数据包一直
  • Java 无法从 AIX 解析 DNS 地址:UnknownHostException

    我遇到了这个奇怪的错误 在 AIX 上 如果我可以从命令行访问我的服务器 使用 ping telnet 但是如果我尝试使用 java 我会遇到 UnknownHostException 这是因为 Java 无法以某种方式 使用 DNS 但我
  • Alsa 带有来自调制解调器的 PCM 接口

    我有一个基于 imx28 CPU 的定制板 CPU 的串行端口连接到调制解调器的 PCM 输出 我必须为调制解调器的 PCM 接口开发一个驱动程序 使其成为 ALSA SoC 的一部分 您能指出内核树 中与我的设置重新组合的一些驱动程序吗
  • java.sql.SQLException: ORA-01005: 给定的密码为空;登录被拒绝

    我在尝试连接到数据库时遇到以下异常 java sql SQLException ORA 01005 null password given logon denied at oracle jdbc driver T4CTTIoer proce
  • 没有设备的设备驱动程序?

    我正在创建一个需要使用一些内核级模块的应用程序 为此我将应用程序分为 2 个 一个用户级程序和一个内核级程序 在阅读了有关设备驱动程序并浏览一些教程后 我有点困惑 是否可以存在没有任何特定设备与之关联的设备驱动程序 除了设备驱动程序 内核代
  • 选择 c 和 gamma 值

    您好 我正在使用 SMO 执行 SVM 分类 其中我的内核是 RBF 现在我想选择c and sigma值 使用网格搜索和交叉验证 我是内核函数的新手 请帮助 一步一步的过程 选择一些您认为有趣的 C 和 sigma 值 例如 C 1 10
  • 每个进程每个线程的时间量

    我有一个关于 Windows 和 Linux 中进程和线程的时间量子的问题 我知道操作系统通常为每个线程提供固定的时间量 我知道时间量根据前台或后台线程而变化 也可能根据进程的优先级而变化 每个进程有固定的时间量吗 例如 如果操作系统为每个
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • C#驱动开发?

    在我一头扎进 C 之前 我一直认为 C 或 C 最适合在 Windows 上开发驱动程序 我不喜欢在 NET 机器上开发驱动程序的想法 但 NET 似乎是 MS 应用程序开发的方向 所以我现在想知道 人们正在使用 C 来开发驱动程序吗 您是
  • 如何编译一个简单的 multiboot2 裸机可执行文件?

    我想开始写一个操作系统内核 然后 我找到了一个document http nongnu askapache com grub phcoder multiboot pdf引入 multiboot2 规范 有三个示例代码文件 名为boot S
  • 使用 strace 修复挂起内存问题

    我有一个在 RHEL6 x 64 位 上运行的多线程进程 我发现当我尝试启动该进程时 该进程挂起并且大多数线程 同一进程的 崩溃 有些线程等待线程之间的共享内存被创建 我可以看到所有的共享内存都没有被创建 但是当我使用 strace 时 进
  • 点击界面没有出现

    我决定添加一个点击界面并在我的代码中使用它 但我能够得到它的状态 sudo ip f link tuntap add tap10 mode tap sudo ip link set tap10 up 之后当我执行 ip link 时 tap
  • 使用“kde”函数进行 R 中的 5-D 核密度估计

    我想通过使用 R 的 ks 库中的 kde 函数来执行 5 维数据 x y z 时间 大小 的核密度估计 在它的手册中 它说它可以执行核密度估计1 至 6 维数据 手册第 24 页 http cran r project org web p
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 内核的panic()函数是否完全冻结所有其他进程?

    我想确认内核的panic 功能和其他类似kernel halt and machine halt 一旦触发 保证机器完全冻结 那么 所有的内核和用户进程都被冻结了吗 是panic 可以被调度程序中断吗 中断处理程序仍然可以执行吗 用例 如果

随机推荐

  • pandas--实战以及使用pyecharts绘图,(面向对象)

    实战9 covid approval toplines csv subject 与covid 19处理有关的 Trump modeldate 日期 party 政党 approve estimate 赞成 disapprove estima
  • matplotlib colors table/matplotlib 颜色表

    官网 https matplotlib org stable gallery color named colors html 可直接在线复制 https www kdocs cn l cnxPATUkMDCE 第一列 第二列 第三列 第四列
  • STL详解(很全)

    目录 概述 STL六大组件简介 三大组件介绍 1 容器 2 算法 3 迭代器 常用容器 1 string容器 string容器基本概念 string容器常用操作 2 vector容器 vector容器基本概念 vector迭代器 vecto
  • java调用存储过程超时及DBCP参数配置说明

    问题 生产环境实时打标超时 分析原因 实时打标java服务中 只创建数据库Connection 没有关闭数据库Connection 导致数据库连接池耗尽 无法再次获取数据库链接 解决 实时打标java服务中 增加 关闭数据库Connecti
  • 详细讲解MMU——为什么嵌入式linux没他不行?

    MMU内存管理 MMU Memory Management Unit 内存管理单元 是一种硬件模块 用于在CPU和内存之间实现虚拟内存管理 其主要功能是将虚拟地址转换为物理地址 同时提供访问权限的控制和缓存管理等功能 MMU是现代计算机操作
  • Git安装详解(写吐了,看完不后悔)

    Git 是一个非常流行的分布式版本控制系统 它帮助开发者管理和跟踪项目中的代码变化 通俗地说 可以认为 Git 就像是一个代码的时间机器 它记录了项目从开始到结束的每一次代码变动 无论你是个人开发者还是团队成员 掌握 Git 都能提高你的工
  • 2023年深圳杯A题完整版论文

    专栏内已发布ABCD篇 论文 思路 代码 订阅即可看到
  • 单元测试简单示例:python+unittest+ddt+HTMLTestRunner+config配置文件(重在思路)

    这是一个基于数学运算加减法的单元测试示例 重点在于单元测试的设计思路梳理 目的 测试数据从excel中获取 执行后并将结果写入excel 并生成报告 重点 可根据代码中的注释进行帮助理解设计思路 下面是我的测试结构 下面来解释一下各个目录及
  • 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三

    http blog csdn net xujiezhige article details 41115453
  • 5G时代的应用场景及商业模式和财富商机

    原创文章 转载请与作者联系 0 前言 互联网兴起 诞生了一批富翁 如马云 马化腾 移动互联网兴起后 3G时代 有人做电商发财了 4G时代 有人写公众号月入六位数 有人主播卖货日进斗金 有人靠着短视频实现了财务自由 5G将开启充满机会的时代
  • Hadoop的安装(单机、伪分布、完全分布)

    安装单机模式 1 设置Hadoop配置文件 进入Hadoop配置文件所在目录 修改hadoop env sh文件 2 测试Hadoop 创建输入文件 input 在data txt中写下内容 运行Mapreduce WordCount例子
  • USB接口针式打印机

    1 针式打印机原理 针式打印机16针是纵向排列 每次打印垂直的16bit 然后右移一bit 继续下列打印 字节的MSB表示最上面的点 字节LSB表示最下面的点 由于汉字字模的点阵是横向排列的 而提供给打印头的信息却需要按纵向排列 所以必须再
  • 合并两个链表

    输入两个单调递增的链表 输出两个链表合成后的链表 当然我们需要合成后的链表满足单调不减规则 public class Solution public ListNode Merge ListNode list1 ListNode list2
  • IDEA创建Javaweb项目之方法3之使用JavaEnterprise

    目录 1 file project enterprise 2 结构如下 3 配置Tomcat服务器 4 重要部署不要忘记 ps idea中别配置错Tomcat 1 file project enterprise 无脑默认即可 2 结构如下
  • Linux命令_netstat & 接口、端口、路由统计

    简介 netstat用于打印网络连接 路由表 接口统计信息 伪装连接和多播成员关系 netstat打印关于Linux网络子系统的信息 打印信息的类型由第一个参数控制 语法 netstat veenNcCF
  • maven打成jar包

    还是实践出真知啊
  • 算法题目练习(C/c++/java)

    记录做过的经典题型 以便于以后查看 目录 二分法 1 二分查找一个数 2 二分查找左边界 3 二分查找右边界 计算最大公约数 辗转相除 递归辗转 链表的逆置 前缀和求法 一维前缀和 二维前缀和 包子凑数 扩展欧几里得算法 例子 青蛙的约会
  • 【全民编程】《软件编程-讲课视频》【零基础入门到实战应用】

    第一阶段 零基础编程到入门 视频讲解 第二阶段 工作实操指导
  • EC变色玻璃介绍

    EC Electrochromic 全称电致变色 最外层的两层EC器件基底将所有材料包裹起来 EC器件基底大部分为玻璃 变色玻璃组成 EC变色的本质是在电压作用下材料的光学性质 透过率 反射率 吸收率等 发生稳定 可逆的变化 在EC薄膜两边
  • VMM基础

    复杂度3 5 机密度3 5 最后更新2021 04 20 VMM Virtual Memory Management是所有操作系统都要解决的问题 也是非常硬件相关的问题 必须从硬件CPU的地址管理开始谈起 我们先了解一些术语 Page 内存