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