操作系统-虚拟内存的一些思考

为什么 32 位最大寻址内存空间为 4GB 呢

32 位代表有32最小是32个0,最大是32个1 ,这样可以表示的空间数量,那这个数量有多少呢? 有2的32次方,假如我们以字节(Byte)作为单位,
也就是说 32位用来寻址到2的32次方个字节 , 也就是 4GB

已知页的大小为 4KB , 计算一下大概需要多大的页表 ,每一页的页表项为 4Byte

4GB 的空间,页大小为 4KB , 共分成了2的20次方个页 , 假如用一个页表项来表示一页,那么就会有2的20次方个页表项,一个页表项为 4Byte ,所以所有页表项的
大小就为 4 乘以 2的20次方 的Byte , 也就是 4MB , 假如我们的页表也是从磁盘中加载的话, 4MB 换算成页,共需要 1024 页 ,

这样的话 ,我们的页表项数量太多了,放在一张页表中 ,所以一般的操作系统系统都使用“多级页表” , 如下图 :

1297993-20211103193929504-616088899.png

于是出现了“根目录”和“分级目录” , 现在我们将 4MB 的大页表继续集成到小一点的页表,这个小一点的页表也是“根目录” ,根目录的大小为 4KB ,刚好是一个页的大小 , 所以当我们在缺页的时候 ,而该进程从来就没加载过 ,那么最多只需要加载两次, 一个根目录,一个分级目录,就可以找到对应的页框号

这里需要注意 , 我们上面讲到我们已经通过页表,页表项找到对应的页框号, 页表项中有一项是来表示“该页”是否在内存中的, 假如不在那么就需要通知磁盘去加载页到内存中去, 这个过程都是由 MMU 来完成的 。

过程如下 :

1297993-20211103221816971-1233187490.png

1297993-20211103221908532-503426218.png

页表在哪里

描述来自[知乎](https://www.zhihu.com/question/63375062),非原创

页表在哪里?一般来说,任何进程切换都会暗示着更换活动页表集。Linux内核为每一个进程维护一个task_struct结构体(即进程描述符PCB),task_struct->mm_struct结构体成员用来保存该进程的页表。在进程切换的过程中,内核把新的页表的地址写入CR3控制寄存器。CR3中含有页目录表的物理内存基地址,因此该寄存器也被称为页目录基地址寄存器PDBR(Page-Directory Base address Register)。

虚拟地址怎么转化为物理地址?

描述来自[知乎](https://www.zhihu.com/question/63375062),非原创

对于每次转换,MMU首先在TLB中检查现有的缓存。如果没有命中,根据CR3寄存器,Table Walk Unit将从内存中的页表查询。

1297993-20211103225712627-1920617830.jpg

MMU 相关

MMU 的工作如下 :

1297993-20211103224659437-1669130.png

MMU 是一个硬件来的,那么为什么不能用软件来实现 MMU 呢? 可以参考这个问题

主要的原因在于防止程序的跨域访问不该访问的内存空间这一点。

MMU 的作用

下面引用自 : https://whatis.techtarget.com/definition/memory-management-unit-MMU
讲述 MMU 的三个作用
The work of the MMU can be divided into three major categories:

- Hardware memory management, which oversees and regulates the processor's use of RAM (random access memory) and cache memory.
- OS (operating system) memory management, which ensures the availability of adequate memory resources for the objects and data structures of each running program at all times.
- Application memory management, which allocates each individual program's required memory, and then recycles freed-up memory space when the operation concludes.

参考资料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章