using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace Cosmos.Kernel.MM
{
///
/// 64 bit address uni processor multiple threads ( single thread CPUs could use a more efficient locking system
///
///
///
internal class HardwarePageManager : IPagingManager
{
private event EventHandler> memoryPressureChanged;
//HardwareMM pageTable;
Mutex pageTableMutex;
uint m_pageSizeTier1 = 1 << 12; //TODO get from hardware
uint m_pageSizeTier2 = 1 << 20;
internal HardwarePageManager( UIntPtr baseAddress, ulong managedMemory)
{
pageTableMutex = new Mutex(true, "SimplePageManager" + baseAddress.ToString());
// pageTable = new MemoryPageTable(baseAddress, numPages, m_pageSize);
pageTableMutex.ReleaseMutex();
}
bool IPagingManager.ReAllocatesMemory
{
get { return true; }
}
protected void OnMemoryPressureChanged(object sender, EventArgs args)
{
if (memoryPressureChanged != null)
memoryPressureChanged(sender, args);
}
#region IPagingManager Members
MemoryUsage IPagingManager.Details
{
get { throw new NotImplementedException(); }
}
event EventHandler> IPagingManager.MemoryPressureChanged
{
add { throw new NotImplementedException(); }
remove { throw new NotImplementedException(); }
}
UIntPtr IPagingManager.RequestPages(MemoryAllocationRequest request)
{
throw new NotImplementedException();
}
void IPagingManager.FreePages(Cosmos.Kernel.Dispatch.Process process)
{
throw new NotImplementedException();
}
void IPagingManager.FreePages(Cosmos.Kernel.Dispatch.Process process, PageRegion region)
{
throw new NotImplementedException();
}
PageEntry IPagingManager.QueryPage(UIntPtr page)
{
throw new NotImplementedException();
}
#endregion
}
}