jueves, 25 de febrero de 2010

Simulación de Estados de Procesos

Introducción

En los procesadores multiprocesos se pueden distinguir 4 estados principales (listo, bloqueado, suspendido y nuevo).

En ese post se analiza los 4 estados de los procesos en el cual se detalla su descripción como ejemplo de uso y análisis del funcionamiento del sistema operativos multiprocesos.

Además un programa en código C que emula el funcionamiento de los estados de los procesos, si quieren la fuente de este programa, sólo tienen que pedirlo...

clip_image002

Estructura de Datos: Los cuatro estados que puede tener un proceso son: nuevo, listo, suspendido, bloqueado cada estado representa una cola única, y estas se manejan a través de una lista enlazada, por tanto se crea una estructura Nodo y una estructura lista a través de los TAD correspondientes, el código es el siguiente.

Estructura de los Nodos

typedef struct ListaNodo

{

int info;

struct ListaNodo *ant, *sig;

} *pListaNodo,ListaNodo;

typedef struct Estructura de las Listas

{

pListaNodo primero, ultimo, ventana;

int longitud;

} TLista, *Lista;

typedef pListaNodo Ventana;

además se crean varias funciones de implementación de la estructura como iniciar lista, anexar lista , primer lista, ultimo lista , siguiente lista, etc., estas funciones están implementadas en la cabecera tadlista.h

Colas: Para el manejo de las colas se crea una cabecera colas.h, la cual ocupa la lista enlazada y generando nuevas funciones para la implementación de la cola, para ello se crea una variable tipo lista de nombre cola.

typedef Lista Cola;

Luego se crean varias funciones de implementación como iniciar Cola, Vaciar Cola, información de la Cola, etc.

Veamos algunos Ejemplos:

La función adicCola sitúa un nuevo elemento de la cola al final de ésta

void adicCola( Cola col, int elem )

{

ultLista(col);

anxLista(col,elem);

}

La función elimCola elimina el primer elemento de la cola

void elimCola( Cola col )

{

primLista(col);

elimLista(col);

}

int longCola( Cola col ) Retorna la longitud de la cola

{

return col->longitud;

}

Estas funciones son muy importantes para facilitar el manejo de las colas y para el buen funcionamiento del programa.

Estructura del Proceso: cada proceso es una estructura con sus propias variables y a cada

Proceso se le asigna una letra única de identificación, los procesos poseen un valor, una linea de instrucción, un estado y una dirección de memoria.

Cada proceso puede tener un máximo de 10 líneas de instrucción y le corresponde una única dirección de memoria de 10 espacios la cual posee en toda su vida activa

El código de la estructura de los procesos es el siguiente

typedef struct est_procesos

{

int n; Valor del proceso

int linea[10]; linea de instrucción

int bcp; dirección del bcp

char estado; estado del proceso

int mem; linea de memoria asignada

} tproceso,*proceso;

Crear proceso: esta función se encarga de crear un proceso e inicia sus valores iniciales

Cada proceso creado se guarda en un vector de procesos PRO [] este vector es muy importante por que sirve para guardar todos los procesos creados y permite al programa recoger información de un proceso en cualquier momento, los valores del proceso es también su dirección en este Vector

proceso crear_proceso(int n,int l,int memoria)

{

Proceso A; Crea el proceso

A = (proceso) malloc (sizeof (tproceso)); asigna memoria

A->n = 1; valor del proceso

A=vaciar_linea(A);

A->linea[l]=1; linea de instrucción leída

A->estado='n'; estado nuevo

A->mem=memoria; espacio de dirección asignada

return A; retorna el proceso al vector PRO[]

}

Asignación de memoria: Cada proceso tiene asignada una porción de porción de memoria fija de 10 celdas y solo puede ocupar esa parte de la memoria

int memoria [200]; este vector simula la memoria del computador en total puede almacenar 20 porciones de memoria para 20 procesos, por ejemplo un proceso X puede tomar una celda de [10 -19]

Para garantizar que este espacio de memoria sea único para cada proceso se encuentra la función vacio_mem.

La variable mem es una dirección aleatoria de memoria, si esta libre el espacio de memoria retornara la misma dirección, en caso que la dirección esté ocupada buscara la próxima dirección siguiente vacía.

El vector Vacio [] se encarga de almacenar las direcciones no ocupadas

mem=vacio_mem(mem,dato); la función vacio_mem retornara la dirección de memoria a

La variable mem que más tarde se le asignara al proceso

Correspondiente.

int vacio_mem(int n,int dato)

{

int i;

if(memoria[n]==0)

{

memoria[n]=dato; si la memoria no esta asignada retorna la misma

Dirección

return n;

}

else

{

for(i=1;i<=20;i++) En caso contrario busca un espacio de memoria

Vacía

{

if(vacio[i]==0)

{

vacio[i]=dato;

return i*10;

}

}

}

Return 0; en el caso que no haya memoria disponible

Retornara un valor cero

}

Estados del proceso:

Nuevo: es la cola donde se alojan los procesos que se van generando aleatoria mente

clip_image004

Listo: Son los procesos que interactúan con el procesador y lo hacen hasta terminar sus

Instrucciones

clip_image006

Bloqueado: son los procesos que solicitan un recurso de Entrada y salida

clip_image008

Suspendidos: Son los procesos que no tienen asignada una dirección de memoria

clip_image010

Planificador: Una vez cargados todos los procesos a la cola de tipo nueva se pone en marcha la función Planificador, La función planificador se encarga de de seleccionar el proceso que pasara de su estado nuevo a listo, dependiendo de la antigüedad del proceso, siendo seleccionado el proceso a través de una política FIFO (primero que entra primero que sale)

Aquí llama a la función planificador y retornara a la cola listo

listo=planificador(nuevo,listo);

Lista planificador(Lista col,Lista cola)

{

proceso proces;

proces=pro[infoCola(col)]; se recupera el proceso a través del vector PRO []

Confirma que tiene memoria seleccionada

if(proces->mem!=0)

{

primLista(col); primero de la lista

adicCola(cola,infoCola(col)); adiciona a la cola listo

elimCola(col); elimina el proceso de la cola nuevo

flechas();

}

Return cola; retorna la cola a la cola listo

}

Suspendor: esta función se encarga de seleccionar el proceso que no tiene memoria y lo pasa a la cola de estado suspendido.

Aquí llama a la función suspendor y se devuelve a la cola suspendida

suspendido= suspendor(nuevo,suspendido); procesos que no tienen asignada memoria

Lista suspendor(Lista col,Lista sus)

{

proceso proces;

proces=pro[infoCola(col)];

if(proces->mem==0) confirma que el proceso no tenga asignada

Memoria

{

primLista(col);

adicCola(sus,infoCola(col)); mueve el proceso a la cola de estado

Suspendido

ElimCola (col);

}

Bloqueador: esta función selecciona a los procesos que requieren recursos de entrada y salida y pasa el proceso de la cola listo a la cola de estado Bloqueado

Lista bloqueador(Lista col, Lista blo)

{

proceso proces;

proces=pro[infoCola(col)]; recupera el proceso

if(proces->linea[proces->n]==1) pregunta si es del tipo entrada

Salida (1)

{

adicCola(blo,infoCola(col)); pasa el proceso al estado

bloqueado

if(!vaciaCola(col))elimCola(col);

}

return blo; retorna la cola bloqueado

}

Procesador: el procesador se encarga de leer la linea de instrucción del proceso e incrementa en una unidad, solo es capaz de leer un proceso a la vez, y retorna el proceso al final de la cola tipo listo.

Cuando un proceso llega al límite de instrucción que son 10 instrucciones el proceso se elimina automáticamente liberando su memoria para poder ingresar otro proceso

proceso actualizar_proceso(proceso A) función de procesador que actualiza los

{ Datos del proceso

int j;

j=A->n;

j++;

A>n=j; aumenta en uno la instrucción del proceso

A->estado='l';

return A; retorna el proceso

}

Ejemplo:

clip_image012

Este ejemplo es un procesador ejecutando un proceso M

Informaciones Generales Sobre los procesos

En el programa se muestran dos recuadros que muestran toda la información sobre los procesos en ejecución, el recuadro estadística se muestra los valores que posee el proceso en el instante de su ejecución y el recuadro memoria muestra la porción de memoria asignada a ese proceso.

Cuadro Estadísticas: muestras los datos referentes a cada proceso en ejecución:

Proceso: Letra asignada

Instrucción: número de linea de la instrucción que se esta ejecutando

Linea [6] = tipo de instrucción o [E/S]. Si la instrucción no requiere ningún recurso

Externo, entonces se imprime Instruc. En caso de que requiera una

Instrucción [E/S] entonces se imprime [E/S] y el proceso pasaría a estado

Bloqueado.

Estado = muestra su estado listo

clip_image014

Memoria: muestra la porción de memoria asignada a cada proceso en ejecución, en este caso el proceso solo puede ocupar su porción de memoria de 10 celdas que es de 140 a 149

clip_image016

Políticas Generales del programa

En un sistema operativo se utilizan varias políticas de ejecución de sus tareas como es la asignación de memoria, el tipo de prio ridad de los procesos, etc. El uso de estas políticas define y afecta el comportamiento general del sistema.

En este programa se usan varios manejos de implementación para definir el comportamiento de los procesos como son las políticas de asignación de memoria o políticas de prioridad de los procesos.

Políticas sobre la memoria: se ha creado una memoria de 200 celdas de tamaño fijo, la cual puede albergar a 20 procesos activos, cada proceso tiene asignado 10 celdas de memoria y solo puede ocupar esa porción de memoria asignada.

Procesos

0

1

2

3

4

5

6

7

8

9

A

B

.

.

Y

Z

Políticas de Prioridad: Para el manejo de los procesos se ha asignado la prioridad FIFO

(First in First out), primero que entra primero que sale, por tanto los procesos mas antiguos en la cola son los primeros que se ejecutan en el procesador

clip_image017

Vista general del programa:

clip_image019

Conclusión

Este post ha tratado de los distintos estados que puede tener un proceso a lo largo de su ejecución, la simulación se ha realizado a través de un programa escrito en C++.

En el software de simulación se ha divido en un archivo con extensión CPP y 4 cabeceras header, la cual la cabecera interface contiene todas las interfaces del programa, las cabeceras cola.h y tadlista.h, contienen toda la estructura de datos del programa.

44 comentarios:

CGOROZCO dijo...

que tal Oscar Sandoval, es muy util tu informacion y me gustaria poder enterde mas a fondo sobre tu programa, ya que tngo un proyecto en el curso de Estructura de Datos, que necesito bases de como empezar a realizarlo. te agradeceria mucho si pudieras mandarme tu codigo fuente al correo yemo_orozco@hotmail.com, Gracias de antemano...

insistente dijo...

es de gran ayuda tu pagina para entender la simulacion de estados de procesos, pero en el curso que llevo no esta profundo y no logro entender como hacerlo o codificarlo, serias tan amable de enviarme el codigo fuente del de como se hace esa simulacuion mi correo es ordonezcajas@gmail.com

Yovani dijo...

es buena tu informacion Oscar S. Agradecere mucho tu amabilidad de mandarme el codigo fuente q tienes en C, es que lo necesito.
mi correo es: yova.net@gmail.com

GRACIAS!!!

Yovani dijo...

es buena tu informacion Oscar S. Agradecere mucho tu amabilidad de mandarme el codigo fuente q tienes en código C que emula el funcionamiento de los estados de los procesos, es que si lo necesito.
mi correo es: yova.net@gmail.com

GRACIAS!!!

Oscar Sandoval dijo...

Hola!.. primero que todo disculpen la demora y gracias por visitar mi blog.. no había revisado los comentarios.. enviaré el código fuente a cada uno de ustedes, espero no sea demasiado tarde!

Saludos

Freddy dijo...

Muy interesante el post. Te agradecería me facilitaras el código fuente, pues me sería muy útil para fines académicos.

Mail: fveloz75@hotmail.com

Anónimo dijo...

Hola espero que tenga un buen dia me parece bastante util la informacion que has compartido y bueno me preguntaba si seria posible que compartas el codigo fuente. cro_ver@hotmail.com y agradeciendo mucho por dedicar parte de tu tiempo en colgar cosas como esta en la web.

saludos

Anónimo dijo...

Saludos Oscar, te agradeceria me enviaras el codigo empaquetado a esta direccion r_ask_2@hotmail.com, muy bueno tu blog, gran aporte, que estes bien

Anónimo dijo...

muy buena tu informacion pero me gustaria conocer el codigo de antemano muchas gracias danielmalaca@hotmai.com

sute dijo...

Hola oscar sandoval, esta muy padre esta información me ayudo a entender un poco mas los procesos de los estados. Agradeceria mucho si me pudieras enviar el codigo fuente a esta direccion sute03@hotmail.com. De antemano muchas gracias y ojala haya mas publicaciones buenas como la tuya =D

Anónimo dijo...

hola k tal buen dia

mepodria pasar el codigo fuente a
alejandro_77_77@hotmail.com

esta muy interesante su post... me ha ayudado demaciado

ivonne dijo...

HOLA: me encanto tu post me dejo muy clara algunas cosas . pero me podrias enviar tu codigo fuente si es que no es mucha la molestia este es mi correo kat.13.2@hotmail.com.. si puedes te lo agredeceria un monton gracias.

rioshinta dijo...

hola Oscar Sandoval me gusto tu post de los los 4 estados de los procesos me gustaria entender un poco mas tu codigo, si fueras tan amable de enviarmelo a mi correo rioshinta@hotmail.com gracias

Anónimo dijo...

hola que tal pordrias enviarme el codigo del programa de los estados de los proceso mi correo es marycar1330@hotmail.com

Anónimo dijo...

Si pudieras mandarme tu codigo te lo agradecería demasiado, mi correo es carlosonlifemusic@hotmail.com

Anónimo dijo...

ola me parece muy buena tu explicacion pues en estos momentos eso es lo que estoy viendo en la escuela, serias tan amable de mandarme tu codigo a mi correo love_aries_91@hotmail. te lo agradece, gracias

Anónimo dijo...

hola! me gusta mucho tu explicacion, crees que me puedes enviar tu codigo?
te lo agradecere y me salvaras la vida.....saloelima@yahoo.com

Gabris dijo...

Hola Oscar, tu información que compartes con nosotros es muy útil, me gustaria ver si me puedes proporcionar el código fuente para fines academicos, me seria de gran ayuda, mi correo electronico es gaby_hl7@hotmail.com, de ante mano gracias.

Anónimo dijo...

Huy Oscar, Excelente!!! de verdad eres un duro con esto. ¿Me podrías ayudar con el código fuente? Debo explicar planificadores en clase de Sistemas Operativos. Mi correo es capra0169@yahoo.com y wilgch@gmail.com
Gracias!!!

yam dijo...

hola.. el sitio está super interesante. como tu lo dices en el contenido, puedo solicitarte el código de la simulación de estados de procesos, te agradecería si me lo puedes facilitar, es que necesito hacer algo parecido y necesito tener algunas bases. muchas gracias anticipadamente.
mi correo es armando14021992@gmail.com

Erika Quiroz dijo...

hola Oscar; que bueno contar con un aporte como el tuyo; me gustaría tener acceso al código fuente; ya que soy estudiante principiante y quiero aprender como esta desarrollado tu proyecto.

Anónimo dijo...

hola oscar muy interesante el programa me gustaria poder ver el codigo fuente, haber si me lo puedes mandar a mi correo blanco.d@hotmail.com

Anónimo dijo...

Hola Oscar, la verdad muy bueno este material de apoyo para nosotros, te agradeceria si pudieras compartirlo, es que necesito entregar un proyecto similar y pues el tuyo me seria de mucha utilidad y te lo agradeceria muchisimo, mi correo es alfredo_ottoniel@hotmail.com


gracias


saludos

Anónimo dijo...

q tal mucho gusto, exelente tu aporte compañero la verdad es muy util sera que me puedes enviar el codigo fuente gracias mi correo es everto.perez@gmail.com

Anónimo dijo...

que tal Oscar , muy útil tu información, necesito hacer algo parecido, me podrias enviar el codigo para darme una idea, mi correo es seeman27_@hotmail.com

Anónimo dijo...

Que tal oscar es muy interesante como es que nos puedes simular un proceso me podrias hacer el favor de poder enviarme el codigo fuente de tu programa para poder ver como esta estructurado ya que nesesito hacer algo pareceido a principe.tecnologia@gmail.com gracias por el aporte....

Anónimo dijo...

muy buena la infoo necesito ese codigo carmiri_23@hotmail.com

Anónimo dijo...

hola oscar tu aporte esta buenísimo mandamelos a mi correo henryb_86@hotmail.com

Juan dijo...

Hola Oscar Sandoval gracias por compartir este gran aporte, me podrias hacer el favor de mandarme el codigo fuente a mi correo de antemano gracias!!

el correo es: kakashimx23@gmail.com

Anónimo dijo...

me porias mandar el codigo fuente a francko2390@gmail.com?

Anónimo dijo...

Muy interesante el post. Te agradecería me facilitaras el código fuente. eedf19@hotmail.com
Te lo agradecería...

Carlos Solorzano dijo...

Hola oscar, es muy util tu programa, podrias enviarme el codigo fuente, ya que mi profesor me mando hacer eso, gracias mi correo es: cabascarlosandres@gmail.com

memily dijo...

me puedes mandar el codigo porfis dennissescobar@gmail.com

Oscar Suarez dijo...

Hola Oscar, me perece ,muy interesante tu publicación, he estado buscando algo similar, pero me aclaraste muchas dudas, me interesa tu código fuente, estoy apenas aprendiendo a programar y me gustaria analizarlo mi correo es oscarsuarez@outlook.com

anonimo dijo...

Me parece muy buena tu aportación, me podrías compartir tu código fuente para poder analizarlo, te agradecería mucho vaxfer@gmail.com

Jimmy d' Tenue Smile dijo...

Que tal Oscar S. Esta intersante tu post: Me gustaria que me facilitarias el codigo fuente a mi correo c.jazz@live.com, Gracias de antemano.

R. Cabrera dijo...

Hola me pueden mandar el código para correrlo por favor. Mi correo es rcabrera@rdistmo.com

R. Cabrera dijo...

Hola necesito el código para poderlo correr enC gracias

R. Cabrera dijo...

Necesito el código si me ve en favor mi correo es rcabrera@rdistmo.com gracias

Anónimo dijo...

Podrias enviarme tu codigo por favor mi correo es noid.roid@hotmail.com

Anónimo dijo...

me puedes enviar el código lmunozaq@hotmail.com

Anónimo dijo...

me podrias enviar tu codigo? de antemano muchas gracias denisogc@gmail.com

Anónimo dijo...

Que tal amigo, muchas gracias por el post, me parece un buen proyecto, podrias compartir tu codigo fuente y asi poder realizar un proyecto parecido para la u, muchas gracias cristianemmanuel22@gmail.com

Adrián Sánchez Contreras dijo...

Hola Oscar, me podrías proporcionar el código fuente de tu programa en c, mi correo es adriallison9@gmail.com

Emprendedores: ¿Quién es tu cliente?

“Hay dos tipos de personas en el mundo: hay personas que inventan excusas, y hay empresarios” Hace poco termine de leer el libro  Disc...