mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 08:17:35 +00:00
parent
527c8047fe
commit
f48feae0b2
44 changed files with 184 additions and 146 deletions
|
@ -39,6 +39,7 @@
|
|||
#include <Kernel/VM/PhysicalRegion.h>
|
||||
#include <Kernel/VM/PurgeableVMObject.h>
|
||||
#include <Kernel/VM/SharedInodeVMObject.h>
|
||||
#include <Kernel/Singleton.h>
|
||||
#include <Kernel/StdLib.h>
|
||||
|
||||
//#define MM_DEBUG
|
||||
|
@ -50,7 +51,7 @@ extern FlatPtr end_of_kernel_bss;
|
|||
|
||||
namespace Kernel {
|
||||
|
||||
static MemoryManager* s_the;
|
||||
static auto s_the = make_singleton<MemoryManager>();
|
||||
RecursiveSpinLock s_mm_lock;
|
||||
|
||||
MemoryManager& MM
|
||||
|
@ -60,6 +61,8 @@ MemoryManager& MM
|
|||
|
||||
MemoryManager::MemoryManager()
|
||||
{
|
||||
ASSERT(!s_the.is_initialized());
|
||||
|
||||
ScopedSpinLock lock(s_mm_lock);
|
||||
m_kernel_page_directory = PageDirectory::create_kernel_page_directory();
|
||||
parse_memory_map();
|
||||
|
@ -217,7 +220,7 @@ void MemoryManager::initialize(u32 cpu)
|
|||
Processor::current().set_mm_data(*mm_data);
|
||||
|
||||
if (cpu == 0)
|
||||
s_the = new MemoryManager;
|
||||
s_the.ensure_instance();
|
||||
}
|
||||
|
||||
Region* MemoryManager::kernel_region_from_vaddr(VirtualAddress vaddr)
|
||||
|
|
|
@ -85,6 +85,7 @@ class MemoryManager {
|
|||
friend Optional<KBuffer> procfs$memstat(InodeIdentifier);
|
||||
|
||||
public:
|
||||
MemoryManager();
|
||||
static MemoryManager& the();
|
||||
|
||||
static void initialize(u32 cpu);
|
||||
|
@ -160,7 +161,6 @@ public:
|
|||
PageDirectory& kernel_page_directory() { return *m_kernel_page_directory; }
|
||||
|
||||
private:
|
||||
MemoryManager();
|
||||
~MemoryManager();
|
||||
|
||||
enum class AccessSpace { Kernel,
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include <AK/Memory.h>
|
||||
#include <Kernel/Process.h>
|
||||
#include <Kernel/Random.h>
|
||||
#include <Kernel/Singleton.h>
|
||||
#include <Kernel/Thread.h>
|
||||
#include <Kernel/VM/MemoryManager.h>
|
||||
#include <Kernel/VM/PageDirectory.h>
|
||||
|
@ -37,13 +38,12 @@ static const FlatPtr userspace_range_base = 0x00800000;
|
|||
static const FlatPtr userspace_range_ceiling = 0xbe000000;
|
||||
static const FlatPtr kernelspace_range_base = 0xc0800000;
|
||||
|
||||
static auto s_cr3_map = make_singleton<HashMap<u32, PageDirectory*>>();
|
||||
|
||||
static HashMap<u32, PageDirectory*>& cr3_map()
|
||||
{
|
||||
ASSERT_INTERRUPTS_DISABLED();
|
||||
static HashMap<u32, PageDirectory*>* map;
|
||||
if (!map)
|
||||
map = new HashMap<u32, PageDirectory*>;
|
||||
return *map;
|
||||
return *s_cr3_map;
|
||||
}
|
||||
|
||||
RefPtr<PageDirectory> PageDirectory::find_by_cr3(u32 cr3)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue