Kernel: All process' memory areas can report their virtual mem usage
This commit is contained in:
parent
38320018dc
commit
f88ad7efcd
|
@ -124,6 +124,8 @@ namespace LibELF
|
||||||
dprintln("Invalid program header");
|
dprintln("Invalid program header");
|
||||||
return BAN::Error::from_errno(EINVAL);
|
return BAN::Error::from_errno(EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_virtual_page_count += BAN::Math::div_round_up<size_t>((pheader.p_vaddr % PAGE_SIZE) + pheader.p_memsz, PAGE_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
|
|
|
@ -33,6 +33,8 @@ namespace LibELF
|
||||||
|
|
||||||
BAN::ErrorOr<BAN::UniqPtr<LoadableELF>> clone(Kernel::PageTable&);
|
BAN::ErrorOr<BAN::UniqPtr<LoadableELF>> clone(Kernel::PageTable&);
|
||||||
|
|
||||||
|
size_t virtual_page_count() const { return m_virtual_page_count; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
LoadableELF(Kernel::PageTable&, BAN::RefPtr<Kernel::Inode>);
|
LoadableELF(Kernel::PageTable&, BAN::RefPtr<Kernel::Inode>);
|
||||||
BAN::ErrorOr<void> initialize();
|
BAN::ErrorOr<void> initialize();
|
||||||
|
@ -42,6 +44,7 @@ namespace LibELF
|
||||||
Kernel::PageTable& m_page_table;
|
Kernel::PageTable& m_page_table;
|
||||||
ElfNativeFileHeader m_file_header;
|
ElfNativeFileHeader m_file_header;
|
||||||
BAN::Vector<ElfNativeProgramHeader> m_program_headers;
|
BAN::Vector<ElfNativeProgramHeader> m_program_headers;
|
||||||
|
size_t m_virtual_page_count = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
|
@ -37,6 +37,8 @@ namespace Kernel
|
||||||
size_t size() const { return m_size; }
|
size_t size() const { return m_size; }
|
||||||
vaddr_t vaddr() const { return m_vaddr; }
|
vaddr_t vaddr() const { return m_vaddr; }
|
||||||
|
|
||||||
|
size_t virtual_page_count() const { return BAN::Math::div_round_up<size_t>(m_size, PAGE_SIZE); }
|
||||||
|
|
||||||
// Returns error if no memory was available
|
// Returns error if no memory was available
|
||||||
// Returns true if page was succesfully allocated
|
// Returns true if page was succesfully allocated
|
||||||
// Returns false if page was already allocated
|
// Returns false if page was already allocated
|
||||||
|
|
|
@ -83,6 +83,8 @@ namespace Kernel
|
||||||
|
|
||||||
bool is_userspace() const { return m_is_userspace; }
|
bool is_userspace() const { return m_is_userspace; }
|
||||||
|
|
||||||
|
size_t virtual_page_count() const { return m_stack->size() / PAGE_SIZE; }
|
||||||
|
|
||||||
#if __enable_sse
|
#if __enable_sse
|
||||||
void save_sse() { asm volatile("fxsave %0" :: "m"(m_sse_storage)); }
|
void save_sse() { asm volatile("fxsave %0" :: "m"(m_sse_storage)); }
|
||||||
void load_sse() { asm volatile("fxrstor %0" :: "m"(m_sse_storage)); }
|
void load_sse() { asm volatile("fxrstor %0" :: "m"(m_sse_storage)); }
|
||||||
|
|
Loading…
Reference in New Issue