| 222 | } |
| 223 | |
| 224 | void MemoryManager::releasePages(enum AddressPoolType type, const int virtualAddress, const int count) |
| 225 | { |
| 226 | int vaddr = virtualAddress; |
| 227 | int *pte; |
| 228 | for (int i = 0; i < count; ++i, vaddr += PAGE_SIZE) |
| 229 | { |
| 230 | // 第一步,对每一个虚拟页,释放为其分配的物理页 |
| 231 | releasePhysicalPages(type, vaddr2paddr(vaddr), 1); |
| 232 | |
| 233 | // 设置页表项为不存在,防止释放后被再次使用 |
| 234 | pte = (int *)toPTE(vaddr); |
| 235 | *pte = 0; |
| 236 | } |
| 237 | |
| 238 | // 第二步,释放虚拟页 |
| 239 | releaseVirtualPages(type, virtualAddress, count); |
| 240 | } |
| 241 | |
| 242 | int MemoryManager::vaddr2paddr(int vaddr) |
| 243 | { |
nothing calls this directly
no outgoing calls
no test coverage detected