Cosmos/source/Cosmos.MM/HardwarePageManager.cs
bklooste_cp 7c3b55273d
2009-07-21 05:09:58 +00:00

87 lines
2.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace Cosmos.Kernel.MM
{
/// <summary>
/// 64 bit address uni processor multiple threads ( single thread CPUs could use a more efficient locking system
///
///
/// </summary>
internal class HardwarePageManager : IPagingManager
{
private event EventHandler<EventArgs<MemoryPressure>> 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<MemoryPressure> args)
{
if (memoryPressureChanged != null)
memoryPressureChanged(sender, args);
}
#region IPagingManager Members
MemoryUsage IPagingManager.Details
{
get { throw new NotImplementedException(); }
}
event EventHandler<EventArgs<MemoryPressure>> 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
}
}