1. 什么是TLB
TLB(Translation Lookaside Buffer)是一个高速缓存,用于优化从虚拟内存到物理内存的地址转换过程。当一个程序需要访问内存时,它会提供一个虚拟地址,然后硬件需要将这个虚拟地址转换成物理地址。此过程通常涉及查找页表(Page Table)并进行一些计算,这是一项相对繁重的操作
。(意思就是将虚拟地址转换为物理地址这个过程也会多次访问内存
) 如果每次地址转换都要完整进行这样的流程,那么内存访问几乎会变得无法接受地慢。
为了优化这个过程,硬件提供了TLB,一个存储最近的虚拟到物理地址映射的小型、高速缓存。当我们需要进行地址转换时,硬件首先查看TLB是否包含所需的映射。如果包含(称为TLB命中),那么就可以立即获取物理地址,无需查找页表。如果TLB不包含所需的映射(称为TLB缺失),硬件必须查找页表来获取映射,然后通常会将新的映射存储在TLB中,供后续使用。
总的来说,TLB作为硬件和操作系统都参与的高效机制,是提升内存访问速度,特别是在使用虚拟内存系统时,不可或缺的重要组成部分。(利用上了局部性原理
)
2. 什么是Linux的伙伴系统
Linux中的伙伴系统(Buddy System)是一种内存分配策略,该策略主要用于满足内存分配请求并减少内存碎片。
在伙伴系统中,内存被分为多个连续的区块(例如,2^N个连续的页框),这些区块被称为“区”。每次内存分配请求到来时,系统会选择一个最小且符合大小需求的区来满足该请求,并且这个区的大小总是2的幂。如果选中区的大小超过了请求的内存大小,那么这个区将被分割为两个大小相等的子区,这对子区被称为“伙伴”。其中一块将被用于满足内存请求,另一块则保留以供未来使用。
在内存被归还(释放)时,系统会检查归还区的伙伴区是否也处于空闲状态。如果是,则系统会将这对伙伴区合并为一个更大的区。此过程将继续进行,直到不能找到更大的伙伴,或者已经达到了区的最大大小为止。通过这种方式,伙伴系统就能够有效地管理内存分配,并尽可能地减少内存碎片。
总的来说,虽然伙伴系统可能无法完全避免内存碎片,但它通过不断地合并和分割区块,确实能够有效地控制内存碎片的数量和大小。同时,伙伴系统的设计也使得内存分配和回收过程非常高效,它是操作系统内存管理的重要策略之一。
举例说明
首先,假设操作系统管理的整个内存空间初始为8页大小(即,单位为页面大小的整块连续内存区域),作为最大的一个块,设占8页大小。
-
内存分配&#