OS-virtual-memory 之 linear page table

virtual memory

例子分析:
page size = 4K
address space = 16K
physical memroy = 64K
page table entry = 4Bytes 假定 valid bit(1bit) + PFN(31bits)

address translation 图解

Linear page table

在这里插入图片描述

virtual address space(16K)
  1. bits(virtual address space) = log2(virtual memory address space) = log216K = 14
  2. 总页数 = virtual address space / page size = 16K / 4K = 4,可知需要 2bits 表示页数(Virtual Page Number)
  3. offset = log2(page size) = log2(4K) = 12
Virtual Page Number bitsoffset bits
212
physical memory (64K)
  1. bits(virtual address space) = log2(virtual memory address space) = log264K = 16
  2. 总页数 = virtual address space / page size = 64K / 4K = 16,可知需要 4bits 表示页数(Physical Frame Number)
  3. offset = log2(page size) = log2(4K) = 12
Physical Frame Number bitsoffset bits
412
linear page table 记录啥?

记录从 VPNPFN 的映射。那么记录(Page Table Entry)格式是怎样的呢?
该示例使用的记录格式是:

valid bitPFN bits
131

valid bit = 1 该 entry 是一个有效的 VPN -> PFN 映射。
valid bit = 0 该 entry 是一个无效的 VPN -> PFN 映射。

linear page table 就是一维数组,数组 index 作为 VPN。数组每一个元素就是一个 Page Table Entry。

实例 Address Translation

在这里插入图片描述

Page table 例子
Page Table (from entry 0 down to the max size)
  [       0]  0x8000000c
  [       1]  0x00000000
  [       2]  0x00000000
  [       3]  0x80000006
virtual address 例子
Virtual Address Trace
  VA 0x00003229 (decimal:    12841) --> PA or invalid address? (1)
  VA 0x00001369 (decimal:     4969) --> PA or invalid address? (2)
  VA 0x00001e80 (decimal:     7808) --> PA or invalid address? (3)
  VA 0x00002556 (decimal:     9558) --> PA or invalid address? (4)
  VA 0x00003a1e (decimal:    14878) --> PA or invalid address? (5)

(1) VA 0x00003229 (decimal: 12841) 虚拟地址翻译过程。

  1. 计算 VPN = VA / page size = 12841 / 4K = 3,即是线性页表的 index
  2. 计算 offset = VA % page size = 553
  3. 查看 Page Table[VPN] = Page Table[3] = 0x80000006
  4. 判断该 Page Table Entry 是否有效,该 VPN -> PFN 是有效映射。根据 page table entry 格式可以得到 PFN = 6。
  5. 计算物理地址:PFN * page size + offset = 6 * 4K + 553 = 25129。虚拟地址翻译完毕。
    综上步骤可知:地址翻译主要是找到 VPN 到 PFN 的过程。这个关系存储在 Linear Page Table 之中。

References

  1. decimal-to-binary
  2. vm-paging
`el-table` 是 Element UI 提供的一个表格组件,用于展示结构化的数据。然而,在处理大量数据时,原生 `el-table` 的性能可能会受到影响。为了提升性能和优化大列表渲染体验,可以引入虚拟滚动技术。 而 **vue-virtual-table** 并不是一个官方插件或主流库名称,但如果是指类似功能的第三方解决方案(如 vue-virtual-scroller 或其他基于虚拟化技术的 Vue 插件),那么它可以帮助我们实现高性能的大规模数据渲染能力,并将其集成到 `el-table` 中。 以下是将虚拟化技术应用于 `el-table` 的一些关键点: ### 虚拟化的基本原理 虚拟化的核心思想是在视口内仅渲染当前可见的数据行,而不是一次性加载整个数据集的所有行。通过这种方式减少 DOM 元素的数量并提高性能。 ### 使用步骤 #### 1. 安装依赖项 假设你选择了某个支持虚拟化的库(例如 [vue-virtual-scroller](https://github.com/Akryum/vue-virtual-scroller)),首先需要安装对应的 npm 包: ```bash npm install vue-virtual-scroller --save ``` #### 2. 集成至项目中 结合 `el-table` 和虚拟滚动效果的关键在于替换默认的内容区域 (`<tbody>`) 为一个自定义渲染器,该渲染器会动态生成可视范围内的每一行内容。 示例代码片段如下所示: ```html <recycle-list ref="list" :items="tableData"> <template v-slot="{ item }"> <!-- 每一行对应于 tableData 数组中的单个元素 --> <div class="virtual-row"> {{ item.name }} - {{ item.value }} </div> </template> </recycle-list> <!-- 将其插入 el-table 内部 --> <el-table height="400px" border stripe style="width: 100%"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="value" label="值"></el-table-column> <slot name="custom-body"/> </el-table> ``` 注意:实际操作过程中需调整样式及属性以适配你的布局需求;此外还应考虑如何同步分页状态、排序规则等逻辑与基础表关联起来。 --- 如果您确实提到的具体包名为“vue-virtual-table”,则可能需要查找确切文档链接确认其实现细节哦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值