Anda di halaman 1dari 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

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 alta que 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.

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:

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.

CODIGO FUENTE Codigo del formulario:


public partial class Form1 : Form { Cola cola_proc; Random numeros; DataTable Tabla = new DataTable(); DataRow Renglon; int contador = 0; public Form1() { InitializeComponent(); // agregar.Visible = false; eliminar.Visible = false; cola_proc = new Cola(); numeros = new Random(); }

private void Form1_Load(object sender, EventArgs e) { Tabla.Columns.Add(new DataColumn("Prioridad")); Tabla.Columns.Add(new DataColumn("Nombre del proceso")); Tabla.Columns.Add(new DataColumn("estado")); Tabla.Columns.Add(new DataColumn("Tiempo de ejecucion")); } private void 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(); } public void 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(); }

private void eliminar_Click(object sender, EventArgs e) { contador = 0; cola_proc = new Cola(); llenarTabla(); } private void 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(); } else if (aux.getEstado() == "Terminado") aux = aux.getSig(); } dataGridView1.Refresh(); eliminar.Visible = true; } }

Anda mungkin juga menyukai