Exemplo n.º 1
0
        } //botao acessar - pega o dado digitado pro usuario e acessa o bloco na ram e passa para cache

        private void BotaoGO_Click(object sender, EventArgs e)
        {
            if (!ValidaCampos())
            {
                MessageBox.Show("Preencha Todos os Campos.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }

            else
            {
                tamanhoMR    = Convert.ToInt32(this.textBox1.Text);
                tamanhoBloco = Convert.ToInt32(this.textBox2.Text);
                n            = Convert.ToInt32(this.textBox3.Text);
                linhasCache  = Convert.ToInt32(this.textBox4.Text);

                if (!(tamanhoMR < tamanhoBloco) && tamanhoMR % tamanhoBloco != 0 && linhasCache % n != 0) //valida se bloco é maior que a memoria e se valores são multiplos do tamanho da MR
                {
                    if (tamanhoMR % tamanhoBloco != 0)                                                    //valida multiplo ram e bloco
                    {
                        MessageBox.Show("Tamanho da memoria RAM deve ser MULTIPLO do tamanho do Bloco", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }

                    else
                    {
                        MessageBox.Show("Bloco NÃO pode ser maior que a Memoria.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }

                    if (linhasCache % n != 0) //valida multiplo cache e N
                    {
                        MessageBox.Show("Numero de linhas da Cache DEVE ser multiplo do Numero de conjuntos (N)", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    Ram.Columns.Add("bloco", "Bloco");                      //
                    Ram.Columns.Add("dado", "Dado");                        // cria coluna datagrid RAM
                    Ram.Columns.Add("endereço", "Endereço");                //


                    Cache.Columns.Add("cor", "N");                          //
                    Cache.Columns.Add("tag", "Tag");                        //
                    Cache.Columns.Add("bloco", "Bloco");                    // cria coluna datagrid Cache
                    Cache.Columns.Add("hora", "Hora Carregada");            //
                    Cache.Columns.Add("ultima", "Ultima Hora Usada");       //
                    Cache.Columns.Add("acessos", "Acessos");                //

                    WidthChanger();

                    blocos        = new int[tamanhoMR / tamanhoBloco];  //numero de linhas do bloco
                    ContAcesso    = new int[tamanhoMR / tamanhoBloco];  //contador de acesso para cada linha
                    DataAcesso    = new string[linhasCache];            //date visita para cada linha
                    HoraCarregada = new string[linhasCache];            //


                    for (int i = 1; i <= blocos.Length; i++) //preenche o datagrid Ram
                    {
                        string data = Alfanumerico_aleatorio(tamanhoBloco);
                        ContAcesso[i - 1] = 0;
                        Ram.Rows.Add(i, data, (i - 1) * tamanhoBloco);
                        blocos[i - 1] = i - 1;
                    }

                    for (int i = 1; i <= linhasCache; i++) //cria tamanho grid cache
                    {
                        Cache.Rows.Add(null, null, null, null);
                        Cache.Rows[i].Height = 30;
                    }

                    int k        = 0; //n
                    int aux      = 0;
                    int contador = 0;
                    for (int i = 0; i < linhasCache / n; i++) //preenche datagrid cache
                    {
                        for (int j = 0; j < n; j++)
                        {
                            contador++;
                            if (contador == 1)
                            {
                                aux = i;
                            }
                            Cache.Rows[aux].Cells[0].Value = k;
                            aux++;
                        }
                        k++;
                    }

                    for (int i = 0; i < linhasCache; i += n) //colore N
                    {
                        CacheColorChanger(i, 0, n, linhasCache);
                    }
                }
            }
            Cache.ClearSelection();
            Ram.ClearSelection();
        }      //botao go - valida os dados digitados e se estiver tudo ok, cria os datagrids e começa o simulador