private RealPage FindFreePage() { int startPage = random.Next(0, Settings.Default.RealPagesCount); int currentPage = startPage; do { if (!_realMachine.IsPageAllocated(currentPage)) { return(_realMachine.MemoryPages[currentPage]); } currentPage++; //find pages circular, e.g. do not cross over Settings.Default.RealPagesCount currentPage %= Settings.Default.RealPagesCount; } while (currentPage != startPage); throw new InsufficientMemoryException("Could not find free page"); }
private RealPage FindFreePage() { int startPage = random.Next(0, Settings.Default.RealPagesCount); int currentPage = startPage; do { if (!rm.IsPageAllocated(currentPage)) { return(rm.MemoryPages[currentPage]); } currentPage++; currentPage %= Settings.Default.RealPagesCount; } while (currentPage != startPage); throw new InsufficientMemoryException("could not find free page"); }