从零到一手写操作系统(七、内存 4)虚拟内存的分配与释放)
如果追忆会荡起涟漪,那么今天的秋红落叶和晴空万里都归你
https://aeneag.xyz
微信公众号:技术乱舞
艾恩凝
手写操作系统目录
7.6)虚拟内存的分配与释放
虚拟地址空间的划分
由于 x86 CPU 支持虚拟地址空间时,要么开启保护模式,要么开启长模式,保护模式下是 32 位的,有 0~0xFFFFFFFF 个地址,可以使用完整的 4GB 虚拟地址空间。
在保护模式下,对这 4GB 的虚拟地址空间没有进行任何划分,而长模式下是 64 位的虚拟地址空间有 0~0xFFFFFFFFFFFFFFFF 个地址,这个地址空间非常巨大,硬件工程师根据需求设计,把它分成了 3 段,如下图所示。
长模式下,CPU 目前只实现了 48 位地址空间,但寄存器却是 64 位的,CPU 自己用地址数据的第 47 位的值扩展到最高 16 位,所以 64 位地址数据的最高 16 位,要么是全 0,要么全 1.
我们把 0xFFFF800000000000~0xFFFFFFFFFFFFFFFF 虚拟地址空间分给内核,把 0~0x00007FFFFFFFFFFF 虚拟地址空间分给应用,内核占用的称为内核空间,应用占用的就叫应用空间 。
内核空间中有个线性映射区 0xFFFF800000000000~0xFFFF800400000000,这是我们在二级引导器中建立的 MMU 页表映射。
虚拟地址空间设计结构
图示是最好的表示方式,简单清晰
虚拟地址空间的分配释放流程图
清晰图--->https://pic.aeneag.xyz/background/080000.png
手写操作系统目录
吾心信其可行,
则移山填海之难,
终有成功之日!
——孙文
则移山填海之难,
终有成功之日!
——孙文
评论
0 评论