The Pedigree Project  0.1
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | Friends | List of all members
HostedPhysicalMemoryManager Class Reference

Implementation of the PhysicalMemoryManager for common x86. More...

#include <PhysicalMemoryManager.h>

+ Inheritance diagram for HostedPhysicalMemoryManager:
+ Collaboration diagram for HostedPhysicalMemoryManager:

Classes

struct  page
 
class  PageHashable
 
class  PageStack
 The Stack of pages (below4GB, below64GB, no constraint). More...
 

Public Member Functions

virtual physical_uintptr_t allocatePage ()
 
virtual void freePage (physical_uintptr_t page)
 
virtual bool allocateRegion (MemoryRegion &Region, size_t cPages, size_t pageConstraints, size_t Flags, physical_uintptr_t start=-1)
 
virtual void pin (physical_uintptr_t page)
 
void initialise (const BootstrapStruct_t &Info) INITIALISATION_ONLY
 
void initialisationDone ()
 
- Public Member Functions inherited from PhysicalMemoryManager
virtual physical_uintptr_t allocatePage (size_t pageConstraints=0)=0
 
void allocateMemoryRegionList (Vector< MemoryRegionInfo * > &MemoryRegions)
 
void freeMemoryRegionList (Vector< MemoryRegionInfo * > &MemoryRegions)
 
virtual size_t freePageCount () const
 

Static Public Member Functions

static HostedPhysicalMemoryManagerinstance ()
 
- Static Public Member Functions inherited from PhysicalMemoryManager
static PhysicalMemoryManagerinstance ()
 
static size_t getPageSize () PURE
 

Protected Member Functions

 HostedPhysicalMemoryManager () INITIALISATION_ONLY
 
virtual ~HostedPhysicalMemoryManager ()
 
- Protected Member Functions inherited from PhysicalMemoryManager
 PhysicalMemoryManager ()
 
virtual ~PhysicalMemoryManager ()
 

Private Member Functions

 HostedPhysicalMemoryManager (const HostedPhysicalMemoryManager &)
 
HostedPhysicalMemoryManageroperator= (const HostedPhysicalMemoryManager &)
 
int getBackingFile () const
 
void unmapRegion (MemoryRegion *pRegion)
 
virtual void freePageUnlocked (physical_uintptr_t page)
 

Private Attributes

PageStack m_PageStack
 
RangeList< uint64_t > m_PhysicalRanges
 
RangeList< uintptr_t > m_MemoryRegions
 
Spinlock m_Lock
 
Spinlock m_RegionLock
 
struct pagem_PageMetadata
 
int m_BackingFile
 

Static Private Attributes

static HostedPhysicalMemoryManager m_Instance
 

Friends

class CacheManager
 
class Cache
 
class HostedVirtualAddressSpace
 

Additional Inherited Members

- Static Public Attributes inherited from PhysicalMemoryManager
static const size_t continuous = 1 << 0
 
static const size_t nonRamMemory = 1 << 1
 
static const size_t force = 1 << 2
 
static const size_t virtualOnly = 1 << 3
 
static const size_t below1MB = 1 << 4
 
static const size_t below16MB = 1 << 5
 
static const size_t below4GB = 1 << 6
 
static const size_t below64GB = 1 << 7
 
static const size_t addressConstraints
 
static const size_t anonymous = 1 << 8
 
- Protected Attributes inherited from PhysicalMemoryManager
Vector< MemoryRegion * > m_MemoryRegions
 

Detailed Description

Implementation of the PhysicalMemoryManager for common x86.

The common x86 implementation of the PhysicalMemoryManager

Definition at line 37 of file kernel/core/processor/hosted/PhysicalMemoryManager.h.

Constructor & Destructor Documentation

HostedPhysicalMemoryManager::HostedPhysicalMemoryManager ( )
protected

The constructor

Definition at line 353 of file hosted/PhysicalMemoryManager.cc.

References m_BackingFile.

Referenced by instance().

+ Here is the caller graph for this function:

HostedPhysicalMemoryManager::~HostedPhysicalMemoryManager ( )
protectedvirtual

The destructor

Definition at line 363 of file hosted/PhysicalMemoryManager.cc.

References Vector< T >::clear(), m_BackingFile, PhysicalMemoryManager::m_MemoryRegions, and m_PageMetadata.

Referenced by instance().

+ Here is the caller graph for this function:

HostedPhysicalMemoryManager::HostedPhysicalMemoryManager ( const HostedPhysicalMemoryManager )
private

The copy-constructor

Note
Not implemented (singleton)

Member Function Documentation

bool HostedPhysicalMemoryManager::allocateRegion ( MemoryRegion Region,
size_t  cPages,
size_t  pageConstraints,
size_t  Flags,
physical_uintptr_t  start = -1 
)
virtual

Allocate a memory-region with specific constraints the pages need to fullfill.

Parameters
[in]Regionreference to the MemoryRegion object
[in]cPagesthe number of pages to allocate for the MemoryRegion object
[in]pageConstraintsthe constraints the pages have to fullfill
[in]Flagsflags from the VirtualAddressSpace class namespace
[in]startthe physical address of the beginning of the region (optional)
Returns
true, if a valid MemoryRegion object is created, false otherwise

Implements PhysicalMemoryManager.

Definition at line 198 of file hosted/PhysicalMemoryManager.cc.

References PhysicalMemoryManager::getPageSize(), Processor::information(), PhysicalMemoryManager::m_MemoryRegions, MemoryRegion::m_PhysicalAddress, MemoryRegion::m_Size, MemoryRegion::m_VirtualAddress, VirtualAddressSpace::map(), panic(), Vector< T >::pushBack(), and WARNING.

Referenced by instance().

+ Here is the caller graph for this function:

void HostedPhysicalMemoryManager::freePage ( physical_uintptr_t  page)
virtual

Free a page allocated with the allocatePage() function

Parameters
[in]pagephysical address of the page

Implements PhysicalMemoryManager.

Definition at line 132 of file hosted/PhysicalMemoryManager.cc.

Referenced by instance().

+ Here is the caller graph for this function:

void HostedPhysicalMemoryManager::freePageUnlocked ( physical_uintptr_t  page)
privatevirtual

Same as freePage, but without the lock. Will panic if the lock is unlocked.

Note
Use in the wrong place and you die.

Implements PhysicalMemoryManager.

Definition at line 138 of file hosted/PhysicalMemoryManager.cc.

References FATAL.

Referenced by instance().

+ Here is the caller graph for this function:

void HostedPhysicalMemoryManager::initialisationDone ( )

Unmap & free the .init section

Definition at line 348 of file hosted/PhysicalMemoryManager.cc.

References NOTICE.

Referenced by Processor::initialisationDone(), and instance().

+ Here is the caller graph for this function:

void HostedPhysicalMemoryManager::initialise ( const BootstrapStruct_t Info)

Initialise the page stack

Parameters
[in]Inforeference to the multiboot information structure

Definition at line 314 of file hosted/PhysicalMemoryManager.cc.

References Hex, and NOTICE.

Referenced by Processor::initialisationDone(), and instance().

+ Here is the caller graph for this function:

static HostedPhysicalMemoryManager& HostedPhysicalMemoryManager::instance ( )
inlinestatic
HostedPhysicalMemoryManager& HostedPhysicalMemoryManager::operator= ( const HostedPhysicalMemoryManager )
private

The copy-constructor

Note
Not implemented (singleton)

Referenced by instance().

+ Here is the caller graph for this function:

void HostedPhysicalMemoryManager::pin ( physical_uintptr_t  page)
virtual

"Pin" a page, increasing its refcount.

Every time a pinned page is passed to freePage, its refcount is decreased, and the page is only freed once the refcount hits zero.

Note that an unpin function is not provided, as freePage offers the right semantics.

Implements PhysicalMemoryManager.

Definition at line 176 of file hosted/PhysicalMemoryManager.cc.

Referenced by instance().

+ Here is the caller graph for this function:

void HostedPhysicalMemoryManager::unmapRegion ( MemoryRegion pRegion)
privatevirtual

Friends And Related Function Documentation

friend class HostedVirtualAddressSpace
friend

For getBackingFile()

Definition at line 42 of file kernel/core/processor/hosted/PhysicalMemoryManager.h.

Member Data Documentation

int HostedPhysicalMemoryManager::m_BackingFile
private

Hosted: backing file for physical memory.

Definition at line 209 of file kernel/core/processor/hosted/PhysicalMemoryManager.h.

Referenced by HostedPhysicalMemoryManager(), instance(), and ~HostedPhysicalMemoryManager().

HostedPhysicalMemoryManager HostedPhysicalMemoryManager::m_Instance
staticprivate

Static instance.

Definition at line 212 of file kernel/core/processor/hosted/PhysicalMemoryManager.h.

Referenced by instance().

Spinlock HostedPhysicalMemoryManager::m_Lock
private

To guard against multiprocessor reentrancy.

Definition at line 162 of file kernel/core/processor/hosted/PhysicalMemoryManager.h.

RangeList<uintptr_t> HostedPhysicalMemoryManager::m_MemoryRegions
private

Virtual-memory available for MemoryRegions

Todo:
rename this member (conflicts with PhysicalMemoryManager::m_MemoryRegions)

Definition at line 159 of file kernel/core/processor/hosted/PhysicalMemoryManager.h.

Referenced by unmapRegion().

struct page* HostedPhysicalMemoryManager::m_PageMetadata
private

Page metadata table

Definition at line 206 of file kernel/core/processor/hosted/PhysicalMemoryManager.h.

Referenced by ~HostedPhysicalMemoryManager().

PageStack HostedPhysicalMemoryManager::m_PageStack
private

The page stack

Definition at line 151 of file kernel/core/processor/hosted/PhysicalMemoryManager.h.

Referenced by unmapRegion().

RangeList<uint64_t> HostedPhysicalMemoryManager::m_PhysicalRanges
private

RangeList of free physical memory

Definition at line 154 of file kernel/core/processor/hosted/PhysicalMemoryManager.h.

Referenced by unmapRegion().


The documentation for this class was generated from the following files: