Пример #1
0
        }//FIN de Fallo de Cache

        static void Main()
        {
            Console.WriteLine("Hello World!"); //Escribir en consola
           
            //**Bloque de creacion**//

            memDatos = new int[96]; // 384/4
            memInstruc = new int[640]; // 40 bloques * 4 *4
            cola = new Contextos();
            finalizados = new Contextos();

            RL1 = new int[1];
            RL2 = new int[1];
            RL3 = new int[1];
            busD = new int[1];
            busI = new int[1];

            cacheDatos1 = new int[6, 4]; //Preguntar si es recomendable recorrerlas por filas
            cacheDatos2 = new int[6, 4];
            cacheDatos3 = new int[6, 4];
            //*******************Fin de Bloque***********************//

            //*************Bloque de inicializacion******************//
            reloj = 0;
            for (int i = 0; i < 96; ++i) // memoria principal inicilizada en uno
            {
                memDatos[i] = 1;
                memInstruc[i] = 1;
            }
            for (int i = 96; i < 640; ++i) // memoria principal inicilizada en uno
            {
                memInstruc[i] = 1;
            }

            for (int i = 0; i < 4; ++i) //las caches se inicializadas en cero
            {
                for (int j = 0; j < 4; ++j)
                {
                    cacheDatos3[i, j] = 0;
                    cacheDatos2[i, j] = 0;
                    cacheDatos1[i, j] = 0;
                }
            }
            for (int i = 4; i < 6; ++i) //las caches se inicializadas en invalidas
            {
                for (int j = 0; j < 4; ++j)
                {
                    cacheDatos3[i, j] = -1;
                    cacheDatos2[i, j] = -1;
                    cacheDatos1[i, j] = -1;
                }
            }
            //*****************Fin de Bloque*************************//

            Console.Write("Ingrese el quantum");
            quantumTotal = int.Parse(Console.ReadLine());
            Console.Write("\nIngrese el numero de hilillos Totales");
            total = int.Parse(Console.ReadLine());

            /*int indice = 0;
            int counter = 0;
            string linea;
            for (int j = 0; j < total; ++j)
            {
                //obtener archivo
                cola.Encolar(indice); //Solo agrega el PC para iniciar las intrucciones


                // Read the file and display it line by line.
                System.IO.StreamReader file = new System.IO.StreamReader(@"c:\test.txt");
                while ((line = file.ReadLine()) != null)
                {
                    linea


                    counter++;
                }

                file.Close();
                System.Console.WriteLine("There were {0} lines.", counter);
                // Suspend the screen.
                System.Console.ReadLine();

            }*/
 
            for(int i = 0; i < 8; ++i)
            {
                memInstruc[i] = int.Parse(Console.ReadLine());
            }
            cola.Encolar(0);

            Console.Write("Segundo hilo");
            for (int i = 0; i < 9; ++i)
            {
                memInstruc[i] = int.Parse(Console.ReadLine());
            }
            cola.Encolar(8);

            //*****************Leer archivo termina aqui*********************////


            //Creacion de los 3 hilos que emulan los nucleos
            Thread thread1 = new Thread(() => Nucleos(quantumTotal));
            Thread thread2 = new Thread(() => Nucleos(quantumTotal));
            Thread thread3 = new Thread(() => Nucleos(quantumTotal));
            //Se les asigna un "id" a los hilos
            thread1.Name = "1";
            thread2.Name = "2";
            thread3.Name = "3";
            //Se inician los hilos
            thread1.Start();
            thread2.Start();
            thread3.Start();


            //Verificar que todos los hilillos finalizaron
            int cardinalidad;
            cardinalidad = 0;
            while (cardinalidad < total)
            {
                if (!Monitor.TryEnter(finalizados))
                {
                    TicReloj();
                }
                else
                {
                    TicReloj();
                    cardinalidad = finalizados.Cantidad();
                    Monitor.Exit(finalizados);
                }               
            }

            //Finaliza los 3 hilos que emulan los nucleos               //Preguntar, depues de matar los hilos, debo segui dando tic de reloj??
            thread1.Abort();
            thread2.Abort();
            thread3.Abort();

           finalizados.Imprimir();

        }//FIN de Main