内存虚拟化

1、实地址是没有内存保护的,一个程序可以访问整个1M的地址空间

2、最开始的8086地址线有20根数据总线最大宽度是16,正常只能寻址2^16,后面的实模式下的逻辑地址的计算都是基地址加偏移地址来算,深度探索linux系统虚拟化这本书里写了最开始是搞了四个段寄存器 cs ds es ss,个人理解就是最开始你可以选哪个段,物理地址被分成了几段,然后每一段你都可以去寻1M的地址。

不过后续都是平坦内存模型了已经不用上面这个了

什么是平坦内存模型呢?

郭健: Linux内存模型——平坦、非连续与稀疏_Linux阅码场的博客-CSDN博客

这里可以先去看一下这个博客了解一些基础。

平坦内存模型,介绍最多的就是段基地址是0,也就是说我的物理内存的寻址方式的,基地址都是0,那会不会就导致寻址范围变小呢?

首先平坦内存模型建立了四个段:

特权级3的用户代码段 数据段

特权级0的内核代码段 数据段

这4个段基地址都是0,很奇怪是吧

他咋区分,咋去访问地址呢?

这里引入了段描述符的概念

31~24就是刚刚的基地址他是0

G是单位设置 0就是以字节为单位 1就是以4KB为单位

TYPE表示是代码段还是数据段

段界限表示段的长度单位依赖于TYPE

这里我们上面说了他分四段,内核用户的代码和数据段,怎么分的呢?

看段描述符的0~15位,这里他有个名字叫做段选择子,这里配置了我们是内核用户的哪一段,还有我们是GDT 还是LDT,全局还是局部描述符,这两个概念要记住只有在保护模式里才有,因为这个段描述符里涉及了一些权限的东西,实模式没有这些,没有内存保护。

此外我看到这还有个疑问这个能寻多大的地址呢?

这里主要是看G的粒度0以字节为单位就比较小1·1M,1以4KB为单位就是4K~4G

这里想到段机制和我的分页机制的区别是什么呢?

首先实模式是生成逻辑地址

段机制是保护模式里面的(看上下猜这里是生成虚拟地址也就是线性地址的地方),但是这里要记住我如果没有分页,那段机制的生成的线性地址就是物理地址。(补充下:线性地址特指段模式生成的地址,他可以是虚拟地址也可以是物理地址)

页表机制是将虚拟地址转为逻辑地址

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值