MCPcopy Create free account
hub / github.com/YatSenOS/YatSenOS-Tutorial-Volume-1 / releasePages

Method releasePages

lab7/src/5/src/kernel/memory.cpp:260–276  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

258}
259
260void MemoryManager::releasePages(enum AddressPoolType type, const int virtualAddress, const int count)
261{
262 int vaddr = virtualAddress;
263 int *pte;
264 for (int i = 0; i < count; ++i, vaddr += PAGE_SIZE)
265 {
266 // 第一步,对每一个虚拟页,释放为其分配的物理页
267 releasePhysicalPages(type, vaddr2paddr(vaddr), 1);
268
269 // 设置页表项为不存在,防止释放后被再次使用
270 pte = (int *)toPTE(vaddr);
271 *pte = 0;
272 }
273
274 // 第二步,释放虚拟页
275 releaseVirtualPages(type, virtualAddress, count);
276}
277
278int MemoryManager::vaddr2paddr(int vaddr)
279{

Callers 1

first_threadFunction · 0.45

Calls

no outgoing calls

Tested by

no test coverage detected