内存管理与二级页面映射

本文深入探讨了内存管理的不同方案,包括分区、分页、分段、伙伴系统和交换分区。详细阐述了X86架构下的地址映射,从实地址模式到保护地址模式的转变,强调了段基址和逻辑地址在寻址过程中的作用,以及内存管理和安全性方面的改进。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内存管理
我们下面讨论的内存均为物理内存。
内存管理方案:
1、分区:程序加载时,将程序加载到一块分区上。
(1)、固定分区(内部碎片;操作系统启动前已经分配好)
大小相等的固定分区
大小不等的固定分区
(2)、动态分区(外部碎片;进程执行时,才会动态分配内存空间)
2、分页
类似于大小相等的固定分区,系统初始化时,将内存划分为大小相等的页帧(4k),程序在磁盘上的存储,也是按照4k的页面进行存储。加载程序时,操作系统为每一个进程维护一个页表。一个进程可以不连续的在内存上占据多个页帧
3、分段
加载程序时,根据程序的段,将程序加载到内存上,操作系统为每一个进程维护一个段表,一个进程可以不连续的在内存上占据多个段。

分页与分段的区别:每一个页帧的大小是固定的,而每个段是根据程序的段分大小,大小不固定。

4、伙伴系统
分配时,根据请求的大小将内存空间不断地折半,直到以最小的空间分配给请求的进程,回收空间时,如果左或者右又跟它大小相等的空闲区块就合并成一个大的区块,可以一直合并,直到左右没有等大的空闲区块为止。(实现时可使用二叉树)
5、交换分区
交换分区就是在磁盘上扩展的内存空间,但是这块空间是以内存的方式来管理的,作为对内存的补充。当内存空间不足时,才会将内存上的部分数据交换到交换分区上,这种交换的方法成为MMU,使得内存上驻留更多的进程,也可以执行比内存大的进程。

X86下的地址映射
在这里插入图片描述
1、实地址模式:
DS << 4 + IP = 物理地址
段基址 逻辑地址/偏移地址/偏移量
80386之前 没有操作系统时
在这里插入图片描述
为了防止恶意篡改IP值导致系统崩溃,从80386有了操作系统之后开始更新成了保存基址大小权限的方式寻址

在原有的基础上加了GDTR(存放基址大小和权限)、LDTR,并将原16位IP寄存器换成了IPE 32位的寄存器,原来的DS,CS,SS寄存器就用来存放GDTR数组的下标值(前13位)
在这里插入图片描述
GDTR(32位):全局段描述符表寄存器
LDTR(32位):局部段描述符表寄存器
在这里插入图片描述
2、保护地址模式:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值