VMM基础_MTM方法

VMM基础_MTM方法复杂度3/5机密度3/5最后更新2021/04/20VMMVirtualMemoryManagement是所有操作系统都要解决的问题,也是非常硬件相关的问题,必须从硬件CPU的地址管理开始谈起。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

复杂度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偷页算法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190717.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java截取字符串方法_java通过split截取字符串

    Java截取字符串方法_java通过split截取字符串主要有以下几种方法:1、通过subString()方法来进行字符串截取(最常用)2、通过StringUtils提供的方法3、split()+正则表达式来进行截取先来介绍最常用的一种1、通过subString()方法来进行字符串截取,返回字符串中的子字符串,在java中有两种用法第一种,传递一个参数:publicStringsubstring(intbeginIndex)//该子字符串从指定索引处的字符开始,直到此字符串末尾。第二种,传递两个参数:

  • 【小程序】手把手带你完成微信小程序开发实践

    【小程序】手把手带你完成微信小程序开发实践帐号相关流程注册范围企业政府媒体其他组织换句话讲就是不让个人开发者注册。:)填写企业信息不能使用和之前的公众号账户相同的邮箱,也就是说小程序是和微信公众号一个层级的。填写公司机构信息,对公账户信息绑定管理员微信企业认证公司对公账户对微信进行打款账户自动验证后,自动认证通过,并将认证资金退回公司对公账户,费用在1元内随机小程序发布流程开发实践这次的demo项目为农历和公历的转换器,重在体验

  • 关于色带管理_色带怎么安装

    关于色带管理_色带怎么安装转载自https://tieba.baidu.com/p/1929685584?red_tag=3141090095Banding看上去像是颜色分层、条状带。产生的原因是因为颜色数据的丢失。母带(RGB10bit)→DVDISO/BDMV(YUV4:2:08bit)就会产生很严重的banding,不过后期公司也有应对banding的方法。banding一般出现在:较暗的场景、颜…

    2022年10月13日
  • pycharm注释的快捷键_pycharm快捷键大全

    pycharm注释的快捷键_pycharm快捷键大全用鼠标选中需要注释的代码,三次按下:shift+‘即可快速注释

  • kafuka 的安装以及基本使用

    kafuka 的安装以及基本使用最近因为项目需要所以需要使用kafka所以自己最近也实践了下。下面为大家简单介绍下在windows下的安装使用因为它是基于zookepper的使用也要安装zookepper1.安装ZookeeperKafka的运行依赖于Zookeeper,所以在运行Kafka之前我们需要安装并运行Zookeeper1.1下载安装文件:http://mirror.bit.edu.cn/apache…

  • 进销存软件开发视频教程(C#版,共70讲)

    进销存软件开发视频教程(C#版,共70讲)课程出处:学途无忧网课程观看地址:http://www.xuetuwuyou.com/course/28  本教程以进销存管理实务为基础,采用时下主流的开发工具(VisualStudio2008+SQLServer2005),使用流行的C#语言。涵盖软件开发的全部过程,包括需求分析、数据库设计、架构设计、程序编码、软件发布。讲解以深入浅出为主,同时循序渐进。对软件开发过

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号