从零到一手写操作系统(七、内存 4)虚拟内存的分配与释放)

image.png

如果追忆会荡起涟漪,那么今天的秋红落叶和晴空万里都归你
https://aeneag.xyz
微信公众号:技术乱舞
艾恩凝

手写操作系统目录

7.6)虚拟内存的分配与释放

虚拟地址空间的划分

由于 x86 CPU 支持虚拟地址空间时,要么开启保护模式,要么开启长模式,保护模式下是 32 位的,有 0~0xFFFFFFFF 个地址,可以使用完整的 4GB 虚拟地址空间。

在保护模式下,对这 4GB 的虚拟地址空间没有进行任何划分,而长模式下是 64 位的虚拟地址空间有 0~0xFFFFFFFFFFFFFFFF 个地址,这个地址空间非常巨大,硬件工程师根据需求设计,把它分成了 3 段,如下图所示。
078000.png

长模式下,CPU 目前只实现了 48 位地址空间,但寄存器却是 64 位的,CPU 自己用地址数据的第 47 位的值扩展到最高 16 位,所以 64 位地址数据的最高 16 位,要么是全 0,要么全 1.

我们把 0xFFFF800000000000~0xFFFFFFFFFFFFFFFF 虚拟地址空间分给内核,把 0~0x00007FFFFFFFFFFF 虚拟地址空间分给应用,内核占用的称为内核空间,应用占用的就叫应用空间 。

内核空间中有个线性映射区 0xFFFF800000000000~0xFFFF800400000000,这是我们在二级引导器中建立的 MMU 页表映射。
079000.png

虚拟地址空间设计结构

图示是最好的表示方式,简单清晰
077000.png

虚拟地址空间的分配释放流程图
清晰图--->https://pic.aeneag.xyz/background/080000.png
080000.png

手写操作系统目录


    


公众号'艾恩凝'
个人公众号
个人微信
个人微信
    吾心信其可行,
          则移山填海之难,
                  终有成功之日!
                                  ——孙文
    评论
    0 评论
avatar

取消