深入解析分段与分页

文章已收录我的仓库:Java学习笔记与免费书籍分享

分段、分页

引言

什么是碎片?

碎片分为内部碎片与外部碎片,都是指浪费而不能使用的空间。

内部碎片是指**已分配但未被使用的地址空间。**例如在64位空间内,你只适用7字节但由于内存对齐不得不为你分配8字节空间,这就产生了1字节内部碎片。

外部碎片是指**未分配且未使用的地址空间。**例如,你申请4字节的Int类型,再申请8字节的long类型,为了内存对齐,其中4字节无法装入8字节类型,这就产生了4字节的外部碎片,如下图所示。

内部碎片是已被分配的空间,是操作系统不可利用的空间;外部碎片是未被分配的,是可分配的,但该空间过小(碎片的含义)无法装入资源,导致不可利用,但外部碎片是可解决的,可以将多个外部碎片紧凑成一个大的空闲空间,但这需要大量成本。

外部碎片

段式模型的前身:基址加界限寄存器(动态重定位)

要想理解分段与分页,必须先谈谈早期的虚拟内存模型。

在经历了纯物理地址后,科学家们期望解决这种内存模型难以统一的问题,于是虚拟内存技术孕育而生,但困扰科学家们的是,如何将虚拟地址转换成物理地址。

早期的科学家们很容易的想到将整个程序作为一个整体,并为每个进程分配一个基址寄存器和界限寄存器,基址寄存器存放该虚拟地址在实际物理地址的起点,而界限寄存器则用以判定程序是否访问非法地址。

通过这种方式,实际的地址很好计算:

实际地址=虚拟地址+基址实际地址 = 虚拟地址 + 基址

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享