利用系统:内存管理计谋

打印 上一主题 下一主题

主题 985|帖子 985|积分 2957

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
外部碎片

当应用程序启动时,由利用系统负责给该应用程序分配其内存空间,假设此时启动了三个应用程序,利用系统分别给其分配了100m,10m和50m的内存,内存环境如下图

此时如果程序B下线,程序A和程序C之间便会空出10m内存,此时如果没有10m以下的应用启动来添补这部分内存,那么这部分内存资源便会被浪费。
 

这便是内存的外部碎片问题,为了解决内存的外部碎片问题,利用系统利用页式内存管理方式,尽可能减少外部碎片的巨细(无法完全清除),通过将内存分为巨细同等的内存页,将一个应用程序拆开,存储在不同页中,当下电脑64位和32位就是根据分页巨细不同界说的(分别时8k和4k)。
页式存储

利用系统将内存分配8k或4k巨细的内存页,我们这里称其位物理内存页,当一个应用程序启动时,利用系统将不会在刻意的给其分配连续的内存空间,而是随机分配给应用程序不一定是连续的内存页。

通过这样利用,外部碎片的问题是解决了,不过散落在内存各处的应用程序碎片,cpu实行时该怎样探求呢?利用系统提供了页表布局。
起首,应用程序内部利用一种虚拟地点。虚拟地点是连续的,其中高位表现当前物理内存页的页号,而低位则表现当前物理内存也中,当前地点距离当前物理内存页的物理页框号(物理内存页的第一行的真实物理地点)的偏移量。而页表内部则是记录页号和物理页框号的位置。
当cpu实行当前应用程序的机器码时,起首它会根据连续的虚拟地点去页表中查找真实的物理内存页,再通过低位去找到物理内存页的对应偏移量的真实物理地点。

 通过这种方式,将应用程序所需内存拆分为8k巨细,分配给内存中8k巨细的页,然后通过页表记录虚拟地点和真实物理地点之见的映射关系,可以很好的解决外部碎片问题,外部碎片最大不会超过8k。不过内存可以分为大量8k巨细的物理内存页,通过页表记录这些大量的内存页,也必要大量的内存控制,这些内存空间也注定会超过8k,以是纵然是页表,也必要进行分页,这就是多级页表。
多级页表将页表拆分为多个8k巨细,分配8k物理内存页,在由另一个页表记录当前页表的虚拟地点和真实物理地点的关系,通过一个利用系统,必要三四级页表,才能记录全部页表信息。
动态内存分配及页表生成

利用系统会分配给一个应用程序固定的内存巨细,纵然是页式内存管理下也不例外。但一个应用程序通常不会完全利用利用系统分配的内存,当利用系统为应用程序没有利用的内存分配物理内存页时,便会造成内存浪费。

为了解决这个问题,利用系统接纳不给应用程序未利用的空间分配物理内存页,甚至页表的初始状态只有第一级的页表,页表内部也只有虚拟地点没有与其映射的页框地点,以及程序的第一行物理地点等,其余大部分页表信息都是在访问程序时才对页表进行添补。
当cpu必要实行应用程序的机器码时,必要通过页表查询真实物理地点,第一次访问时页表并没有记录相关信息,此时会触发页面错误。利用系统在捕获到这个错误后,会跳转到应用程序的内核态,获取对应的页框添补页表信息,也就是说只有当页面虚拟地点被访问时,其页表中的虚拟地点映射的页框才会被添补。

其中空闲区域的虚拟地点也会在页表中表现,不过多级页表中,记录虚拟地点的页表也是动态生成的,以是连续的空闲区域的虚拟地点实际上并不会访问,也就不会生成对应页表,对应页表的内存资源也会被节省。
TLB缓存

一个应用程序所占利用的物理地点极多,每次实行对应地点的机器码,都必要区页表中查找,页表生存在内存中,固然内存的访问速度较快,不过在实行程序过程中,必要大量的访问页表,内存的访问速度也无法保证程序的快速运行,以是我们必要一个IO速度更快的存储单位。
TLB缓存是CPU上的硬件单元,TLB缓存的IO速度极快,是内存的几十倍到一百倍,访问速度接进于寄存器,不过其存储空间仍然有限,不敷以存下整个页表,以是他只能存储部分页表,当CPU访问页表时,会起首访问TLB缓存,如果存在虚拟地点和页框的对应关系,则直接利用,如果没有则取访问页表,并将本次访问的虚拟地点和页框关系记录在TLB中,更换掉旧的记录。
以是我们在一样平常写代码应该只管连续访问连续内存数据,这样可以只管使两个机器码在同一物理内存页中,提高TLB的命中率,进而提高程序性能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

祗疼妳一个

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表