Archived
finish(maybe...)
This commit is contained in:
@@ -11,7 +11,7 @@ namespace VMdemo.Tests.EditMode
|
||||
{
|
||||
var config = new SimulationConfig
|
||||
{
|
||||
vaBits = 48,
|
||||
vaBits = 24,
|
||||
pageSizeKB = 4,
|
||||
physicalMemoryMB = 64,
|
||||
tlbEntries = 16,
|
||||
@@ -26,7 +26,7 @@ namespace VMdemo.Tests.EditMode
|
||||
Assert.That(derived.PageSizeBytes, Is.EqualTo(4096UL));
|
||||
Assert.That(derived.PhysicalMemoryBytes, Is.EqualTo(67108864UL));
|
||||
Assert.That(derived.OffsetBits, Is.EqualTo(12));
|
||||
Assert.That(derived.VpnBits, Is.EqualTo(36));
|
||||
Assert.That(derived.VpnBits, Is.EqualTo(12));
|
||||
Assert.That(derived.FrameCount, Is.EqualTo(16384UL));
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ namespace VMdemo.Tests.EditMode
|
||||
{
|
||||
var config = new SimulationConfig
|
||||
{
|
||||
vaBits = 40,
|
||||
vaBits = 12,
|
||||
pageSizeKB = 4,
|
||||
physicalMemoryMB = 64,
|
||||
tlbEntries = 16,
|
||||
@@ -54,7 +54,7 @@ namespace VMdemo.Tests.EditMode
|
||||
{
|
||||
var config = new SimulationConfig
|
||||
{
|
||||
vaBits = 32,
|
||||
vaBits = 16,
|
||||
pageSizeKB = 6,
|
||||
physicalMemoryMB = 64,
|
||||
tlbEntries = 16,
|
||||
@@ -73,9 +73,9 @@ namespace VMdemo.Tests.EditMode
|
||||
{
|
||||
var config = new SimulationConfig
|
||||
{
|
||||
vaBits = 32,
|
||||
pageSizeKB = 4 * 1024 * 1024,
|
||||
physicalMemoryMB = 8192,
|
||||
vaBits = 8,
|
||||
pageSizeKB = 1,
|
||||
physicalMemoryMB = 8,
|
||||
tlbEntries = 16,
|
||||
accessCount = 10,
|
||||
pageFaultPenalty = 100
|
||||
@@ -92,7 +92,7 @@ namespace VMdemo.Tests.EditMode
|
||||
{
|
||||
var config = new SimulationConfig
|
||||
{
|
||||
vaBits = 32,
|
||||
vaBits = 16,
|
||||
pageSizeKB = 2048,
|
||||
physicalMemoryMB = 1,
|
||||
tlbEntries = 16,
|
||||
|
||||
@@ -6,9 +6,9 @@ namespace VMdemo.Tests.EditMode
|
||||
{
|
||||
public class Step2AddressSplitTests
|
||||
{
|
||||
[TestCase(32)]
|
||||
[TestCase(48)]
|
||||
[TestCase(64)]
|
||||
[TestCase(8)]
|
||||
[TestCase(16)]
|
||||
[TestCase(24)]
|
||||
public void AddressGenerator_NextVirtualAddress_StaysWithinRange(int vaBits)
|
||||
{
|
||||
var generator = new AddressGenerator(vaBits, seed: 7);
|
||||
@@ -23,8 +23,8 @@ namespace VMdemo.Tests.EditMode
|
||||
[Test]
|
||||
public void AddressGenerator_SameSeed_GeneratesDeterministicSequence()
|
||||
{
|
||||
var a = new AddressGenerator(48, seed: 99);
|
||||
var b = new AddressGenerator(48, seed: 99);
|
||||
var a = new AddressGenerator(24, seed: 99);
|
||||
var b = new AddressGenerator(24, seed: 99);
|
||||
|
||||
for (var i = 0; i < 20; i++)
|
||||
{
|
||||
@@ -35,8 +35,8 @@ namespace VMdemo.Tests.EditMode
|
||||
[Test]
|
||||
public void AddressGenerator_DifferentSeed_GeneratesDifferentSequence()
|
||||
{
|
||||
var a = new AddressGenerator(48, seed: 99);
|
||||
var b = new AddressGenerator(48, seed: 100);
|
||||
var a = new AddressGenerator(24, seed: 99);
|
||||
var b = new AddressGenerator(24, seed: 100);
|
||||
var hasDifference = false;
|
||||
|
||||
for (var i = 0; i < 20; i++)
|
||||
@@ -51,9 +51,9 @@ namespace VMdemo.Tests.EditMode
|
||||
Assert.IsTrue(hasDifference);
|
||||
}
|
||||
|
||||
[TestCase(0x12345ABCUL, 32, 12, 0x12345UL, 0xABCUL, 0x48UL, 0x345UL)]
|
||||
[TestCase(0x0000ABCDEF123456UL, 48, 12, 0xABCDEF123UL, 0x456UL, 0x2AF37UL, 0x2F123UL)]
|
||||
[TestCase(0xFEDCBA9876543210UL, 64, 16, 0xFEDCBA987654UL, 0x3210UL, 0xFEDCBAUL, 0x987654UL)]
|
||||
[TestCase(0xAFUL, 8, 4, 0xAUL, 0xFUL, 0x2UL, 0x2UL)]
|
||||
[TestCase(0xABCDUL, 16, 8, 0xABUL, 0xCDUL, 0xAUL, 0xBUL)]
|
||||
[TestCase(0x123456UL, 24, 8, 0x1234UL, 0x56UL, 0x12UL, 0x34UL)]
|
||||
public void SplitVirtualAddress_SupportedVaBits_ReturnsExpectedParts(
|
||||
ulong va,
|
||||
int vaBits,
|
||||
@@ -75,19 +75,19 @@ namespace VMdemo.Tests.EditMode
|
||||
[Test]
|
||||
public void SplitVirtualAddress_OddVpnBits_UsesCeilFloorBitSplit()
|
||||
{
|
||||
const int vaBits = 32;
|
||||
const int offsetBits = 13;
|
||||
const ulong va = 0xDEADBEEFUL;
|
||||
const int vaBits = 24;
|
||||
const int offsetBits = 5;
|
||||
const ulong va = 0xABCDEFUL;
|
||||
|
||||
var parts = AddressTranslatorUtils.SplitVirtualAddress(va, vaBits, offsetBits);
|
||||
AddressTranslatorUtils.GetPageTableBitLayout(vaBits - offsetBits, out var l1Bits, out var l2Bits);
|
||||
|
||||
Assert.That(l1Bits, Is.EqualTo(10));
|
||||
Assert.That(l2Bits, Is.EqualTo(9));
|
||||
Assert.That(parts.Vpn, Is.EqualTo(0x6F56DUL));
|
||||
Assert.That(parts.Offset, Is.EqualTo(0x1EEFUL));
|
||||
Assert.That(parts.L1Index, Is.EqualTo(0x37AUL));
|
||||
Assert.That(parts.L2Index, Is.EqualTo(0x16DUL));
|
||||
Assert.That(parts.Vpn, Is.EqualTo(0x55E6FUL));
|
||||
Assert.That(parts.Offset, Is.EqualTo(0xFUL));
|
||||
Assert.That(parts.L1Index, Is.EqualTo(0x2AFUL));
|
||||
Assert.That(parts.L2Index, Is.EqualTo(0x6FUL));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -107,7 +107,25 @@ namespace VMdemo.Tests.EditMode
|
||||
public void SplitVirtualAddress_AddressOutOfRange_Throws()
|
||||
{
|
||||
Assert.Throws<System.ArgumentOutOfRangeException>(() =>
|
||||
AddressTranslatorUtils.SplitVirtualAddress(0x1_0000_0000UL, 32, 12));
|
||||
AddressTranslatorUtils.SplitVirtualAddress(0x1_000000UL, 24, 8));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AddressGenerator_SequentialArrayLoop_FollowsClassicForLoopOrderAndWraps()
|
||||
{
|
||||
var generator = new AddressGenerator(
|
||||
vaBits: 16,
|
||||
seed: 7,
|
||||
mode: AddressGenerationMode.SequentialArrayLoop,
|
||||
arrayLengthBytes: 16,
|
||||
arrayElementBytes: 4,
|
||||
arrayBaseAddress: 0x20);
|
||||
|
||||
Assert.That(generator.NextVirtualAddress(), Is.EqualTo(0x20UL));
|
||||
Assert.That(generator.NextVirtualAddress(), Is.EqualTo(0x24UL));
|
||||
Assert.That(generator.NextVirtualAddress(), Is.EqualTo(0x28UL));
|
||||
Assert.That(generator.NextVirtualAddress(), Is.EqualTo(0x2CUL));
|
||||
Assert.That(generator.NextVirtualAddress(), Is.EqualTo(0x20UL));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,6 +40,29 @@ namespace VMdemo.Tests.EditMode
|
||||
Assert.IsFalse(entry.Present);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TwoLevelPageTable_Probe_CanDistinguishLookupReasons()
|
||||
{
|
||||
var pageTable = new TwoLevelPageTable(3, 2);
|
||||
|
||||
var missingL1 = pageTable.Probe(1UL, 0UL);
|
||||
Assert.That(missingL1.Status, Is.EqualTo(PageTableProbeStatus.MissingL1Table));
|
||||
|
||||
pageTable.SetPresent(1UL, 2UL, 7UL);
|
||||
var missingL2 = pageTable.Probe(1UL, 3UL);
|
||||
Assert.That(missingL2.Status, Is.EqualTo(PageTableProbeStatus.MissingL2Entry));
|
||||
|
||||
pageTable.MarkNotPresent(1UL, 2UL);
|
||||
var notPresent = pageTable.Probe(1UL, 2UL);
|
||||
Assert.That(notPresent.Status, Is.EqualTo(PageTableProbeStatus.NotPresentEntry));
|
||||
Assert.IsTrue(notPresent.HasEntry);
|
||||
|
||||
pageTable.SetPresent(1UL, 2UL, 9UL);
|
||||
var present = pageTable.Probe(1UL, 2UL);
|
||||
Assert.That(present.Status, Is.EqualTo(PageTableProbeStatus.PresentEntry));
|
||||
Assert.That(present.Entry.Pfn, Is.EqualTo(9UL));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void PhysicalMemoryManager_AllocateForVpn_EvictsInFifoOrder()
|
||||
{
|
||||
|
||||
@@ -73,7 +73,7 @@ namespace VMdemo.Tests.EditMode
|
||||
{
|
||||
var engine = CreateEngine(frameCountMb: 1, tlbEntries: 2, seed: 99);
|
||||
const ulong va = 0x0000_89ABUL;
|
||||
var parts = AddressTranslatorUtils.SplitVirtualAddress(va, 32, engine.OffsetBits);
|
||||
var parts = AddressTranslatorUtils.SplitVirtualAddress(va, engine.VaBits, engine.OffsetBits);
|
||||
|
||||
engine.PageTable.SetPresent(parts.L1Index, parts.L2Index, pfn: 3UL);
|
||||
engine.SetNextVirtualAddress(va);
|
||||
@@ -109,7 +109,7 @@ namespace VMdemo.Tests.EditMode
|
||||
{
|
||||
var config = new SimulationConfig
|
||||
{
|
||||
vaBits = 32,
|
||||
vaBits = 24,
|
||||
pageSizeKB = 1024, // 1MB per page
|
||||
physicalMemoryMB = 1, // 1 frame total
|
||||
tlbEntries = 4,
|
||||
@@ -178,7 +178,7 @@ namespace VMdemo.Tests.EditMode
|
||||
{
|
||||
var config = new SimulationConfig
|
||||
{
|
||||
vaBits = 32,
|
||||
vaBits = 24,
|
||||
pageSizeKB = 4,
|
||||
physicalMemoryMB = frameCountMb,
|
||||
tlbEntries = tlbEntries,
|
||||
|
||||
@@ -121,7 +121,7 @@ namespace VMdemo.Tests.EditMode
|
||||
{
|
||||
var config = new SimulationConfig
|
||||
{
|
||||
vaBits = 32,
|
||||
vaBits = 24,
|
||||
pageSizeKB = 4,
|
||||
physicalMemoryMB = 1,
|
||||
tlbEntries = 4,
|
||||
|
||||
Reference in New Issue
Block a user