操作系统实现之内存分页机制.虚拟空间

内存虚拟存储主要是为了将一个进程分为不同页.存储到不同物理页中.然而不同进程的虚拟地址是可以相同的.因为MMU把进程的虚拟地址映射到各个不同的物理地址中.

以下操作系统采用二级分页.一开始CS:IP寄存器.将CS的基地址跟IP的偏移地址进行相加.得到线性地址.接着.线性地址的高10位用于当作页目录表的索引.页目录表保存的是页表的物理地址.接着.线性地址的低10位用于当作页表的索引.页表保存的是4k大小的页块.线性地址低10位那就是页块的偏移地址.由此虚拟地址->物理地址转换结束.当然操作系统在创建页目录表的时候.要把页目录表的物理地址给加载到cr3寄存器中.
开启分页机制分为3件事.
(1)设置页目录表跟页表
(2)把页目录表的地址加载到cr3寄存器中
(3)将寄存器的cr0的PG位置为1表示开启了分页机制

规划页目录表跟页表位置
在用户进程.高3G部分给操作系统.而0~3G是用户的空间.每个进程都有页表.然后一个用户进程的功能完成是需要内核配合的.于是所有用户进程应该共享内核.也就是等于3G-4g的所有用户进程空间指向的都是同一个物理页地址

这里我们将把页目录表放在0x100000处.页表也挨着页目录表放在0x101000处(第二个页表.当然在此之前应该把物理内存给算出来.这里可以使用bios中断来获取物理内存

%include "boot.inc"
section loader vstart=loader_base_addr
;------------全局描述符表的定义 
gdt_base: 
	 dd 0x00000000    ;全局描述表.第一个描述符要为空
     dd 0x00000000
code_base: 
     dd 0x0000FFFF
     dd desc_code_high4
data_stack_desc:
	dd 0x0000ffff
	dd de
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值