网站首页 > 文章精选 正文
在很久很久以前,设计者认为20位的地址线已经足够用了,最大地址空间是0xFFFFF,不会超过16M的内存。
在分页机制下,1个页目录表最多有1024个页目录项(页表)1个页表最多包含1024个页表项(页)1页是4KB,因为有12位偏移地址
所以1个页目录表 + 4个页表就能表达 16M的地址空间。
4(页表数)* 1024(页表项数) * 4KB(一页大小)= 16MB
所以就先把页目录表放在内存的最前面,这样就把system那部分代码覆盖了。
_pg_dir:
_startup_32:
mov eax,0x10
mov ds,ax
...
在后面放4个页表。
.org 0x1000 pg0:
.org 0x2000 pg1:
.org 0x3000 pg2:
.org 0x4000 pg3:
.org 0x5000
接着开启分页机制。
接着我们就要告诉CPU这些页表的位置了。
xor eax,eax
mov cr3,eax
setup_paging:
...
mov eax,_pg_dir
mov [eax],pg0+7
mov [eax+4],pg1+7
mov [eax+8],pg2+7
mov [eax+12],pg3+7
mov edi,pg3+4092
mov eax,00fff007h
std
L3: stosd
sub eax, 1000h
jpe L3
...
这段代码主要是映射内存的情况。 先是指向了4个页表。 比如 mov [eax],pg0+7
这里的pg0+7 因为页表地址为0x1000,页属性为0x07,所以最终地址是 0x00001007。
这里页属性是0x07 二进制表示是111
- 该页存在(P=1)
- 用户可读写(RW=1)
- 特权为用户态(US=1)
后面的代码是填充4个页表里的 每一项。
地址转换
逻辑地址、线性地址、物理地址、虚拟地址。 线性地址空间、物理地址空间、虚拟地址空间。 傻傻分不清?
Intel体系的内存管理的两大部分是分段和分页
- 分段:目的是为了让每个程序有自己单独的 代码段(cs),数据段(ds),栈段(ss),起到隔离的作用。
- 分页:目的是按需使用物理内存,同时可以在多任务时,起到隔离作用(怎么做到的?)。
各种地址及空间
- 逻辑地址:我们程序员写代码时给出的地址叫逻辑地址,其中包含段选择子和偏移地址两部分。
- 线性地址:通过分段机制,将逻辑地址转换后的地址,叫做线性地址。而这个线性地址是有个范围的,这个范围就叫做线性地址空间,32 位模式下,线性地址空间就是 4G。
- 物理地址:就是真正在内存中的地址,它也是有范围的,叫做物理地址空间。那这个范围的大小,就取决于你的内存有多大了。
- 虚拟地址:如果没有开启分页机制,那么线性地址就和物理地址是一一对应的,可以理解为两者相等。如果开启了分页机制,那么线性地址将被视为虚拟地址,这个虚拟地址将会通过分页机制的转换,最终转换成物理地址。
这么一说 还真是清楚了不少。
如果你觉得有点收获,欢迎点个关注, 也欢迎分享给你身边的朋友。
猜你喜欢
- 2025-05-03 物理内存32GB了,虚拟内存要关吗?可以关吗?
- 2025-05-03 Windows调大虚拟内存来代替升级物理运行内存(RAM)真的有用吗?
- 2025-05-03 VPN连接后 上网数据走物理网卡的设置方法
- 2025-05-03 物理虚拟实验室,仿真模拟实验过程
- 2025-05-03 在VLAN虚拟局域网中,通常是一个物理接口对应一个 VLAN
- 2025-05-03 还记得虚拟内存吗?可能就是你电脑故障的罪魁祸首
- 2025-05-03 酷酷云:浅析VPS、物理服务器、虚拟主机、云服务器之间的区别
- 2025-05-03 耳机7.1声道和双声道的区别(耳机7.1声道有什么优势)
- 2025-05-03 交换机常见的物理接口,虚拟端口及其配置案例
- 2025-05-03 厉害,iPhone 物理转换 eSIM 虚拟卡,将不是梦
- 05-05MyBatis的三种分页方式,你学废了吗?
- 05-05如何写一个简单的分页(最简单的分页)
- 05-05详解如何使用Spring Data JPA进行数据的分页与排序
- 05-05手速太快引发分页翻车?前端竞态陷阱揭秘
- 05-05前端分页机制的具体实现(分页前端需要做什么)
- 05-05一个后勾腿动作,有效疏通血管,改善下肢发麻,促进全身燃脂
- 05-05大型调相机起动及并网研究(什么是调相机,与发电机区别)
- 05-05你们都是托:动态对比度其实是骗你的
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)