Kernel: Shell 'memory' now prints heap memory usage

This commit is contained in:
Bananymous
2023-06-03 02:22:18 +03:00
parent d4289f9e74
commit 2b901abfb1
5 changed files with 40 additions and 1 deletions

View File

@@ -74,4 +74,22 @@ namespace Kernel
ASSERT_NOT_REACHED();
}
size_t Heap::used_pages() const
{
LockGuard _(m_lock);
size_t result = 0;
for (const auto& range : m_physical_ranges)
result += range.used_pages();
return result;
}
size_t Heap::free_pages() const
{
LockGuard _(m_lock);
size_t result = 0;
for (const auto& range : m_physical_ranges)
result += range.free_pages();
return result;
}
}

View File

@@ -37,6 +37,9 @@ namespace Kernel
m_list_pages = BAN::Math::div_round_up<uint64_t>(m_total_pages * sizeof(node), PAGE_SIZE);
m_reservable_pages = m_total_pages - m_list_pages;
m_used_pages = 0;
m_free_pages = m_reservable_pages;
PageTable::kernel().identity_map_range(m_start, m_list_pages * PAGE_SIZE, PageTable::Flags::ReadWrite | PageTable::Flags::Present);
// Initialize page list so that every page points to the next one
@@ -72,6 +75,9 @@ namespace Kernel
page->prev = m_used_list;
m_used_list = page;
m_used_pages++;
m_free_pages--;
return page_address(page);
}
@@ -95,6 +101,9 @@ namespace Kernel
if (m_free_list)
m_free_list->next = page;
m_free_list = page;
m_used_pages--;
m_free_pages++;
}
paddr_t PhysicalRange::page_address(const node* page) const

View File

@@ -415,6 +415,9 @@ argument_done:
return {};
}
kmalloc_dump_info();
TTY_PRINTLN("heap:");
TTY_PRINTLN(" used: 0x{8H}", Heap::get().used_pages() * PAGE_SIZE);
TTY_PRINTLN(" free: 0x{8H}", Heap::get().free_pages() * PAGE_SIZE);
}
else if (arguments.front() == "sleep")
{