Main memory
在计算机系统中,内存碎片通常分为两种类型:内部碎片和外部碎片。它们都与内存的分配和使用方式有关,但表现形式和影响不同。
碎片(fragment)
1. 内部碎片(Internal Fragmentation)
内部碎片指的是分配给程序或进程的内存块中的“浪费空间”。这种情况发生在内存分配的块大于实际需求时,导致一部分内存未被有效利用。
2. 外部碎片(External Fragmentation)
外部碎片是指内存中有多个不连续的空闲块,虽然空闲内存总量足够,但由于这些空闲块并不连续,导致无法分配给大的程序或数据。
页框(page frame)
-
页框是物理内存的基本分配单位。当操作系统从虚拟内存中请求某一页的内容时,它会将该虚拟页映射到一个物理页框中。
-
页框是物理内存的划分方式,与虚拟页相对应。操作系统通过页表将虚拟地址空间映射到这些物理页框。
页表(page table)
页表是操作系统中用于实现虚拟内存与物理内存映射的数据结构。它将虚拟地址空间中的虚拟页(Page)与物理地址空间中的物理页框(Page Frame)建立映射关系。现代系统中,页表通常采用多级结构(如二级页表、三级页表等)来减少内存开销。
页表项(Page Table Entry,PTE)
每一项通常包含虚拟页到物理页框的映射信息,可能还包含其他控制信息(如权限位、有效位等),具体为: - 物理页框号(PFN) - 有效位:有效位为 1 表示该条目有效且页面已经映射到物理内存中 - 权限位(读、写、执行权限等):通过控制对内存页面的访问权限,实现内存隔离,防止非法访问 - 脏位:标记页面是否被修改。如果页面在内存中被修改过,脏位将被设置为 1。脏位的作用是告知操作系统,页面需要在从内存交换到磁盘时进行写回。 - 引用位:引用位用于表示页面是否在一定时间内被访问过。当页面被访问时,操作系统会将该位设置为 1。这有助于操作系统实现页面替换策略,例如 LRU(Least Recently Used) 替换策略。 - 用户/内核访问控制 - 缓存控制和页大小等
TLB(Translation Lookaside Buffer)
TLB:转译后备缓冲区。硬件缓存,存储最近使用的虚拟页到物理页框的映射,以减少每次访问内存时对页表的查询,从而提高内存访问速度。
- 字段:包括页表条目中部分信息
- 虚拟页号(VPN,Virtual Page Number):虚拟地址的页号部分,用于查找页表的映射。
- 物理页框号(PFN,Physical Frame Number):虚拟页映射到的物理页框号。
- 标志位:如有效位(valid bit)、权限位(如读/写权限)等。
- 替换策略信息:如 LRU 计数等,用于决定哪个条目应当被替换。
内存共享
在多个进程之间共享内存时,多个虚拟地址空间可能映射到相同的物理内存页。例如,不同的进程可以通过映射相同的物理内存来共享数据,这样就可以实现进程间的高效数据交换。
分层页表(Hierarchical Page Tables)
- 引入原因:在传统的单层页表(如 单级页表)中,虚拟地址空间的每一页都需要一个对应的物理页面地址,页表本身通常是一个巨大的数据结构,随着虚拟地址空间的增大,页表的大小也会急剧增加,这会导致存储和查找效率的下降。
为了解决这一问题,操作系统引入了 分层页表 结构,这样每个页表条目指向下一级页表,最终通过多级结构映射到物理内存。 2. 原理:
- 多级结构:将页表划分为多级(如两级、四级),虚拟地址分段用于各级索引。
示例(32位两级页表): - 虚拟地址分为:10位页目录索引 + 10位页表索引 + 12位页内偏移。 - 页目录(Page Directory):1024项,每项指向一个页表(4KB)。 - 页表(Page Table):1024项,每项指向物理页框(4KB页)。 - 按需分配:仅分配实际使用的页表,未使用的页目录项标记为无效,节省内存。
哈希页表(Hashed page table)
-
通过使用哈希表来管理虚拟地址到物理地址的映射,特别适合于虚拟地址空间稀疏的场景。它能显著减少内存消耗并提高查找效率,尤其在大虚拟地址空间的情况下。然而,哈希冲突和内存管理的复杂性也可能影响其性能。
-
哈希页表的关键思想是利用哈希表的结构来存储页表项。在哈希页表中,虚拟地址的页号(VPN, Virtual Page Number)通过哈希函数映射到哈希表中的一个桶(bucket)。每个桶包含一个链表,链表中的每个元素存储一个虚拟页号与物理页号之间的映射。
EAT(effective access time)
即有效访问时间,是衡量内存访问延迟的一个指标,尤其是在虚拟内存系统中,综合考虑了 缓存命中率 和 页故障率 等因素后,计算一次内存访问所需的平均时间。
有效访问时间通常是用来评估操作系统在内存管理中的性能,特别是在分页和虚拟内存环境下。它考虑了 缓存访问、页表查询、以及 缺页中断(page fault)等因素。
EAT 的基本公式
有效访问时间(EAT)可以通过以下公式来计算:
其中: - \( p \) 是 页故障率(Page Fault Rate),即访问的虚拟地址发生页故障的概率。 - \( T_{hit} \) 是 缓存命中的时间(Time to access memory when there is no page fault),即访问内存时,不发生页故障的时间(通常是对 TLB 或一级缓存的访问时间)。 - \( T_{fault} \) 是 页故障时间(Time to access memory when a page fault occurs),即发生页故障时的访问时间,包括查找页表、磁盘 I/O 等时间。