Beispiel #1
0
        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");
        }
Beispiel #2
0
        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");
        }