Exemple #1
0
        /// <summary>
        /// Executes the algorithm.
        /// </summary>
        /// <param name="virtualMemory">Virtual memory to use</param>
        /// <param name="pageSequence">Page sequence to use</param>
        /// <returns>Amount of misses</returns>
        public int Execute(VirtualMemory virtualMemory, string[] pageSequence)
        {
            var missCount = 0;
            var i         = 0;
            var clockList = new ClockList(virtualMemory.PageCount);

            foreach (var page in pageSequence)
            {
                Console.WriteLine("==========================================================");
                Console.WriteLine($"CLK Solicitud del procesador para ingresar página {page}");
                Console.WriteLine($"Memoria disponible: {virtualMemory.GetCurrentFreeCapacity()} [KB]");
                // While the virtual memory is not full
                if (i < virtualMemory.PageCount)
                {
                    virtualMemory[i++] = page;
                    Console.WriteLine($"Página {page} agregada a la memoria virtual en la posición {i}");
                    clockList.InsertPage(page);
                    Console.WriteLine($"Página {page} insertada en la lista circular");
                    continue;
                }
                // While the virtual memory is full and we have a miss
                if (virtualMemory.FindPage(page) == -1)
                {
                    Console.WriteLine("(i) Miss (i)");
                    var pageToReplace = clockList.ReplacePage(page);
                    Console.WriteLine($"Página {pageToReplace} reemplazada por {page} en la lista circular");
                    Console.WriteLine($"Página a reemplazar: {pageToReplace}");
                    var indexToReplace = virtualMemory.FindPage(pageToReplace);
                    Console.WriteLine($"Posición a reemplazar dentro de la memoria virtual: {indexToReplace}");
                    virtualMemory[indexToReplace] = page;
                    missCount++;
                }
                else
                {
                    Console.WriteLine("(i) Hit (i)");
                }
            }
            return(missCount);
        }