planificacion por prioridad reporte

Upload: zenitram-mrtz

Post on 03-Apr-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/28/2019 Planificacion Por Prioridad Reporte

    1/6

    INSTITUTO TECNOLOGICO DE

    TEHUACAN

    ING. EN SISTEMAS COMPUTACIONALES

    SISTEMAS OPERATIVOS

    ALGORITMOS DE ADMINISTRACION DE PROCESOS

    CATEDRATICO: MTI. FELIPE RODRIGUEZ VARGAS

    INTEGRANTES DEL EQUIPO:

    FERNANDO HERNANDEZ 10360538

    JULIETA OSRIO MEDRANO 09360607

    FABIOLA AGUILAR MARTINEZ 09360099

    ALEJANDRO GAMALIEL ANZURES OLAYA 10360543

    11 DE MARZO DE 2013

  • 7/28/2019 Planificacion Por Prioridad Reporte

    2/6

    PLANIFICACION POR PRIORIDAD

    En este algoritmo a cada proceso se le asocia un nmero entero de prioridad.

    Mientras menor sea este entero pues mayor prioridad tiene el proceso, por lo que

    la esencia del algoritmo es planificar la entrada de procesos a la CPU de acuerdo a

    la prioridad asociada de cada uno de ellos.

    El funcionamiento del algoritmo se muestra en la siguiente figura:

    En el siguiente ejemplo se tienen 4 procesos (P1, P2,P3 y P4). La tabla muestra los

    tiempos de ejecucin de cada uno y su prioridad.

    Uno de los problemas que puede presentar esta planificacin es la de un bloqueo

    indefinido. Es decir, pudiera darse el caso que existan procesos de prioridad altaque haran que los procesos de prioridad baja queden bloqueados esperando por

    ellos, solo se desbloquearan cuando estos procesos de prioridad baja logren

    colocarse en la CPU y por ello puede darse una espera indefinida.

    El programa que se muestra a continuacin fue realizado en el lenguaje c# en

    visual studio 2010.

  • 7/28/2019 Planificacion Por Prioridad Reporte

    3/6

    FUNCIONAMIENTO

    Se implement una cola simple, y se fue insertando en ella de acuerdo a la

    prioridad, el programa funciona de la siguiente manera:

    Al ejecutar la aplicacin aparece la siguiente pantalla:

    Al dar clic en el botn Agregar un nuevo proceso automticamente se generara

    uno, con los atributos: nombre, prioridad, estado en el que se encuentra y tiempo

    que tardara en ejecutarse. Se pueden crear tantos procesos como guste:

  • 7/28/2019 Planificacion Por Prioridad Reporte

    4/6

    Al dar clic en el botn Iniciar simulacin se irn ejecutando los procesos y

    cambiaran de estado.

    Por ultimo al dar clic en el botn Eliminar todos los procesos se borraran todos

    los elementos que estn en la cola y se podr volver a iniciar la simulacin.

  • 7/28/2019 Planificacion Por Prioridad Reporte

    5/6

    CODIGO FUENTE

    Codigo del formulario:

    publicpartialclassForm1 : Form{

    Cola cola_proc;Random numeros;DataTable Tabla = newDataTable();

    DataRow Renglon;int contador = 0;public Form1()

    {InitializeComponent();

    // agregar.Visible = false;eliminar.Visible = false;cola_proc = newCola();numeros = newRandom();

    }

    privatevoid Form1_Load(object sender, EventArgs e)

    {Tabla.Columns.Add(newDataColumn("Prioridad"));Tabla.Columns.Add(newDataColumn("Nombre del proceso"));Tabla.Columns.Add(newDataColumn("estado"));

    Tabla.Columns.Add(newDataColumn("Tiempo de ejecucion"));}

    privatevoid agregar_Click(object sender, EventArgs e){/*int prior, string nom, string edo, string t_eje*/

    cola_proc.insercionOrdenada(numeros.Next(5), "Proceso " + contador,

    "Inactivo", numeros.Next(100, 1000));

    contador++;llenarTabla();

    }

    publicvoid llenarTabla()

    {// dataGridView1 = new DataGridView();

    Tabla.Clear();Nodo aux = cola_proc.primero;

    while (aux != null){

    Renglon = Tabla.NewRow();

    Renglon[0] = aux.getPrior();

    Renglon[1] = aux.getNom();Renglon[2] = aux.getEstado();Renglon[3] = aux.getTiempo_ejec();

    Tabla.Rows.Add(Renglon);dataGridView1.DataSource = Tabla;aux = aux.getSig();

    }dataGridView1.Refresh();

    }

  • 7/28/2019 Planificacion Por Prioridad Reporte

    6/6

    privatevoid eliminar_Click(object sender, EventArgs e)

    {contador = 0;cola_proc = newCola();llenarTabla();

    }

    privatevoid iniciar_Click(object sender, EventArgs e){

    Tabla.Clear();Nodo aux = cola_proc.primero;for (int i = 0; i < contador; i++)

    {if (aux.getEstado() == "Inactivo"){

    aux.setEstado("activo");llenarTabla();int tiempo = aux.getTiempo_ejec();Thread.Sleep(tiempo);

    aux.setEstado("Terminado");aux = aux.getSig();

    }elseif (aux.getEstado() == "Terminado")

    aux = aux.getSig();}

    dataGridView1.Refresh();eliminar.Visible = true;

    }

    }