【发布时间】:2018-05-17 02:28:19
【问题描述】:
我必须为一个操作系统项目实现一个帧表,以跟踪物理内存(而不是虚拟内存的页面)中哪些帧正在使用或空闲。其中一件大事是决定用于框架表的数据结构。根据您的经验,框架表通常是如何实现的,以及它们使用什么数据结构?在我的情况下,条目必须保存指向物理内存中帧的指针。你会推荐完全使用数组、列表、哈希表或其他东西吗?
【问题讨论】:
我必须为一个操作系统项目实现一个帧表,以跟踪物理内存(而不是虚拟内存的页面)中哪些帧正在使用或空闲。其中一件大事是决定用于框架表的数据结构。根据您的经验,框架表通常是如何实现的,以及它们使用什么数据结构?在我的情况下,条目必须保存指向物理内存中帧的指针。你会推荐完全使用数组、列表、哈希表或其他东西吗?
【问题讨论】:
Windows 和 Linux 都使用结构数组,其中数组的每个元素描述物理地址空间的页框。因此,如果总共有 128 个页框,则该数组将包含 128 个结构。
在 Windows 上,此数组称为 PFN 数据库。每个结构都描述了帧的状态(无论是分配的还是空闲的)并且通常包括映射到它的那些页表条目的一个或多个物理地址。为了使查找空闲帧比仅仅线性扫描数组更有效,每个元素都包含一个指向相同状态的下一个元素的指针。所以基本上有一个空闲帧的链表。
在 Linux 上,该数组称为 mem_map,系统中的每个 NUMA 节点都有一个这样的数组。
【讨论】: