分页¶
ia32¶
usize mk_linear_addr3(usize table, usize page, [usize off])
| Position | Size | Description | 描述 |
|---|---|---|---|
| 0 | 1 | present | 存在 |
| 1 | 1 | writeable | 可写 |
| 2 | 1 | user-accessible | 用户可访问 |
| 3 | 1 | write-through | 直写 |
| 4 | 1 | cache-disable | 禁用缓存 |
| 5 | 1 | accessed | 已访问 |
| 6 | 1 | dirty | 脏页 |
| 7 | 1 | page-size | 页大小 |
| 8 | 1 | global | 全局 |
| 9-11 | 3 | available | 可用 |
| 12-31 | 20 | address | 地址 |
9-11 位可用于存储一些额外的信息,在 plos 中如下:
| Position | Description | 描述 |
|---|---|---|
| 9 | user-writable | 用户可写 |
| 10 | shared | 共享 |
| 11 | reserved | 保留位 |
user-writable 的存在是因为用户空间中的页面会被设置为只读以便实现写时复制,复制完成后应该按照 user-writable 位的值来设置页面的写权限。
amd64¶
usize mk_linear_addr(usize pml4, usize pdpt, [usize pd, [usize pt, [usize off]]])
| Position | Size | Description | 描述 |
|---|---|---|---|
| 0 | 1 | present | 存在 |
| 1 | 1 | writeable | 可写 |
| 2 | 1 | user-accessible | 用户可访问 |
| 3 | 1 | write-through | 直写 |
| 4 | 1 | cache-disable | 禁用缓存 |
| 5 | 1 | accessed | 已访问 |
| 6 | 1 | dirty | 脏页 |
| 7 | 1 | page-size | 页大小 |
| 8 | 1 | global | 全局 |
| 9-11 | 3 | available | 可用 |
| 12-51 | 40 | address | 地址 |
| 52-62 | 11 | available | 可用 |
| 63 | 1 | no-execute | 不可执行 |
9-11 52-62 位可用于存储一些额外的信息,在 plos 中如下:
| Position | Description | 描述 |
|---|---|---|
| 9 | user-writable | 用户可写 |
| 10 | shared | 共享 |
| 11 | reserved | 保留位 |
| 52-62 | reserved | 保留位 |
user-writable 的存在是因为用户空间中的页面会被设置为只读以便实现写时复制,复制完成后应该按照 user-writable 位的值来设置页面的写权限。