【Linux】地址映射

一、X86体系的发展历史:

首先先认识以下的寄存器:

DS:数据寄存器

CS:代码寄存器

SS:栈寄存器

IP:偏移寄存器

 

在8086到80186的时候还没有我们的操作系统,他们属于实地址模式:

         DS <<4 + IP = 物理地址;

DS:基地址

IP:偏移地址,偏移量也称逻辑地址;

16位地址的偏移:2^16=64k;  每个段大小16字节~64k之间;IP地址所能记录的偏移是0~64k;段的真实大小的起始位置必须是16的倍数;寻址能力是20位。

保护地址模式:段页式管理

为了保存基地址、段大小和访问权限;在80286后添加了GDTR和LDTR,记录在内存上保存的段描述符表,

GDTR:全局段描述符表寄存器

LDTR:局部段描述符表寄存器

用户进程最多用8180个表项,操作系统默认占据12个表项;

 

GDTR[DS>>3].baseaddr(基地址)(初始化全为0) + IP(逻辑地址)(ip <= size(段大小)) = 线性地址

未开启分页机制,线性地址 == 物理地址

开启分页机制,线性地址—》虚拟地址,虚拟地址通过页面映射才能到达物理地址;

(在这里区分一下虚拟地址和虚拟地址空间)

如何知晓是否开启了分页机制?通过下面的段表项描述符中有以下三种寄存器:

CR0:最高位PG位, 0(未开启)  1(开启)内存是否开启分页机制

CR2:发生缺页异常的虚拟地址

CR3:存储页目录的起始地址

CR4:PAE位,物理地址扩展 0   1

二级页面映射:

二级页面映射,首先通过段表映射到具体的页表,然后再根据分页机制进行地址映射,最终映射到真是的物理内存上的地址。

根页表:存放在内存中

用户页表:一般存放在交换分区中

初始时,操作系统加载时最多占1M的地址空间。强制进入实地址模式,

交换分区:磁盘上开辟空间以内存管理的方式来管理,作为对于内存空间的补充。当内存空间不足时,可以将内存上的部分数据置换到交换分区上。

可以在内存上驻留更多的进程,每个进程都可以将部分数据存储在交换分区上;

可以执行比内存大的进程;

页面置换(选择)算法:最近最久未被使用LRU算法、最佳置换算法(不可实现)、先来先服务算法

页面置换算法不高效带来的影响,系统抖动:操作系统大部分的时间用来进行页面的置换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值