syscalls: start adding exit syscall, not done yet
This commit is contained in:
@@ -146,3 +146,27 @@ uint32_t* create_page_dir()
|
||||
|
||||
return new_pd;
|
||||
}
|
||||
|
||||
void destroy_page_dir(uint32_t* page_dir) {
|
||||
// Iterate through all page directory entries
|
||||
for (int i = 0; i < 1024; i++) {
|
||||
if (page_dir[i] & 1) { // If page table exists
|
||||
uint32_t* page_table = (uint32_t*)(page_dir[i] & 0xFFFFF000);
|
||||
|
||||
// Free all user pages (0-767)
|
||||
if (i < 768) {
|
||||
for (int j = 0; j < 1024; j++) {
|
||||
if (page_table[j] & 1) {
|
||||
free_page((void*)(page_table[j] & 0xFFFFF000));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Free the page table itself
|
||||
free_page(page_table);
|
||||
}
|
||||
}
|
||||
|
||||
// Free the page directory
|
||||
free_page(page_dir);
|
||||
}
|
||||
Reference in New Issue
Block a user