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)
blank

相关推荐

  • strlen函数用法举例(strlen字符串)

    strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到’\0’停止。charaa[10];cout<charaa[10]={‘\0’};cout<charaa[10]=”jun”;cout<而sizeof()返回的是变量声明后所占的内存数,不是实际长…

  • 外地人在北京的真实状态(漫画)

    这就是外地人在北京的真实状态! 北京这个城市看似中国的首都,实则在这里很不容易,但是感谢阿Q的存在,能把这种苦逼包装成一种高大上的状态。早上每天5:30起床睡眠不足,我们包装成早期…

  • 现在90,00后经常上哪些网站?喜欢看啥网站?

    现在90,00后经常上哪些网站?喜欢看啥网站?现在90,00后经常上哪些网站?喜欢看啥网站?13页PPT:揭秘90后最全研究报告!|网站运营http://www.iyunying.org/seo/sjfx/61716.html90后男生明显比90后女生更愿意在天猫上购买服装和鞋。在天猫上,男装的购买偏好为49%,女装为35%;男鞋的购物偏好为40%,女鞋为31%。90后最渴望的事情是旅行,其中旅行愿望最为迫切的是工作中的90后,达50…

  • C#计算矩阵的秩

    C#计算矩阵的秩

  • traceroute和tracert原理

    traceroute和tracert原理一、Traceroutetraceroute命令用IP生存时间(TTL)字段和ICMP错误消息来确定从一个主机到网络上其他主机的路由。路由器收到TTL为1的包文减1后直接丢弃,然后回复ICMP(type=11,code=0,TTLequals0duringtransit——传输期间生存时间为0)。目标主机收到traceroute的UDP探测包回复ICMP(type=3,code=3,端口不可达)。Linux上称之为traceroute,Windos类似的功能为trace

  • ES6—new Promise()讲解,Promise对象是用来干嘛的?应该怎么用?使用场景有哪些?

    ES6—new Promise()讲解,Promise对象是用来干嘛的?应该怎么用?使用场景有哪些?ES6Promise先拉出来遛遛复杂的概念先不讲,我们先简单粗暴地把Promise用一下,有个直观感受。那么第一个问题来了,Promise是什么玩意呢?是一个类?对象?数组?函数?别猜了,直接打印出来看看吧,console.dir(Promise),就这么简单粗暴。这么一看就明白了,Promise是…

发表回复

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

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