You are on page 1of 15

INTRODUCCIN AL PROGRAMA.- El programa bsicamente est diseado para mostrarnos el funcionamiento de los estados de un (administrador de procesos) de un S.O.

, para as ver cmo funciona o por lo menos ver cmo trabaja este un administrador de procesos, en el programa estamos considerando tres estados muy importantes, el estado de LISTOS, le estado de EJECUCION, el estado de BLOQUEADO ya mostraremos a detalle en un grfico los estado y sus subprocesos que tendra que tener este.

bloqueado Proceso que vuelve de bloqueado procesos mandados a TERminado

Vuelve a listo por alguna interrupcin listos ejecucion

Cada 10 sg. Se manda un proceso

Podemos ver en la grfica los estados de los procesos que van a estar listos, van a ejecutar de y, van a estar bloqueados. Dicho esto vamos a comenzar con una descripcin del programa. DESCRIPCIN DEL PROGRAMA.Cargar el nombre del proceso.- Es aqu donde se cargan todos los procesos que queramos almacenar en el vertor [] vec1=new String[100]; //vector de nombre de proceso, donde el vector tiene un lmite de 100. Describiremos en el siguiente dibujo como es que estaran almacenados los procesos: Nombre proceso gloogle Facebok Block wikipedia vec1

0 1 2 3

Y as estaramos guardando los nombres de los procesos en ese vector ya para despus ser ejecutado en estado de listos.

ESTADO DE LISTOS.- En este estado el programa asigna un valor aleatorio a cada proceso de un rango no < 20 ni >100 segn esto el programa va ordenando a cada proceso segn su t-resT o cuantum de menor a mayor , tambin podemos ingresar nuevos procesos este proceso nuevo al ingresar el programa se actualizara automticamente para luego este tenga su cuantum que ser aleatoriamente igual que los dems.

Nombre proceso

t-rest o cuantum 29 53 70 87

Facebok Block wikipedia gloogle

En la figura podemos ver que los nombres de los procesos fueron cambiados de orden y Por qu su cedi esto? , pues por anterior mente dijimos que cada proceso tendr su cuantum aleatoriamente y que adems este va ser ordenado de menor a mayor por eso fue que cambio, tambin podemos agregar que este estado ser actualizado cada 10seg ya que en este estado vendrn otros desde bloqueado, ejecutar, y un nuevo proceso. Estado de ejecucin.- En el estado de ejecucin solo podr ingresar un proceso a la vez, ya que en aqu se designa un numero aleatoria entre 0 y 1 a los vectores recurso y interrupcin que son los vectores(vec3 ,vec5 ),ejemplo:

inter 0 1

recur 1 0 Pasar a ser bloqueado por falta de recursos Sigue ejecutndose pasa alisto pero se le descuenta -10 al cuantum Pasa al estado listo ,restndole al cuantum -10 Sigue ejecutndose y se le resta -10

1 0

1 0

Entonces su entrada en ejecucion del primer proceso seria este: Nombre proceso t-rest o inter cuantum 29 0 recur

Facebok

El proceso facebok estaria bloqueado y no sele restaria nada asu cuantum. En ese caso pasaria al siguiente proceso block este tiene una interupcion de 0 y su recurso 1 quiere decir que no tiene ninguna interrupcion pero le falta recursos este volveria a listos pero con su resta de 10 asu cuantum o t-rest estaria asi :

Nombre proceso

t-rest o inter cuantum 53 1

recur

block

Al actualizarse en listos quedaria asi cambiando su cuantum y volviendo aser aleatorio su interrumcion y recurso: Nombre proceso t-rest o inter cuantum 43 0 recur

block

El estado de ejecucion tendria tres salidas una que volveria al estado listo, otra asi el estado de bloqueado,y la otra seria el de terminado. ESTADO DE BLOQUEADO.- Al estado de bloqueado solo llegan los procesos que les faltan recursos , es importante mensionar que en este quedan almacenados el nombre del proceso y su cuantum o t -rest,y solo tres procesos pueden dormir en el estado de bloqueados ,cuando llegue el cuarto el primero de los tres bloqueados ira al estado de listos.ejemplo Bloqueado 0 facebok 29 Bloqueado 1 gloogle 87 Bloqueado 2 wikipedia 70 bloqueado 4 Proceso x y

En el grafico podemos ver que un cuarto bloqueado quiere ingresar al estado de bloqueado pero antes de ingresar,el primero debera irse hasi el estado de listos. Apresiaremos en la siguiente figura como el primero que estaba en el estado de bloqueado ,ahora pasa al estado de listos ya actualizado el programa , el proceso sigue con su mismo cuantum o T-rest ,pero su interrupcion y recursos cambian de forma aleatoria otra vez podemos ver claramente su cambio ademas de ver que todos fueron cambiados .

Nombre proceso Facebok Block wikipedia gloogle

t-rest o cuantum 29 43 70 87

inter

recur

0 1 1 0

0 1 1 0

PROCESO TERMINADO.- Es aqu donde un proceso termina ,dicho proceso estara terminado siempre y cuando su cuantum o T-rest sea 0 ,para luego pase otro proceso al estado de ejecucion y seguir hasta que se acaben todos los procesos. Nombre proceso Facebok t-rest o cuantum 0 inter recur Estado

terminado

El proceso facebook estaria terminado ya que su cuantum es cero 0 claramente veremos en estado que tipo de estado tiene,si talves esta en listo, bloqueado,o terminado. FUNCIONAMIENTO DEL PROGRAMA. Aqu veremos cmo funciona el programa realmente, paso a paso le explicaremos lo que se debe hacer y mostrando las diferentes opciones que tiene el programa.

CARGA DE PROCESOS EN EL PROGRAMA.- En esta primera instancia es donde se cargan los nombres de los procesos, el programa puede almacenar hasta 100 nombres de procesos, (apretamos la tecla ENTER para poder seguir cargando procesos).

Nombre del proceso

ndice de los nombres de los procesos

Fig.1

Una vez apretado enter nos aparece el siguiente dialogo de color rojo que est marcado con un circulo, en el dialogo quiere seguir ingresando: tenemos dos opciones SI y NO, si tecleamos (si) podremos seguir ingresando los nombres de los procesos vea fig.3.

fig.2

fig.3

Pero si tecleamos (no) el programa nos mostrara los nombres ya ordenados segn su l tamao que el programa mismo designa aleatoriamente a cada proceso ,este estar ordenado de (menor a mayor) tambin tendr su tiempo restante que tendra la misma cantidad que el tamao, el tiempo restante seria el tiempo que necesitara para que el proceso este ya terminado definitivamente, tambin tendramos su interrupcin y su recurso de cada proceso ,estos dos sern generados aleatoriamente entre (0 y 1),tendremos tambin un estado en el cual podremos ver el estado en el que se encuentra cada proceso, y un bloqueado en el cual se mostraran los nombres de los procesos que se encuentran bloqueados . Para que el programa empieza teclearemosENTER vea fig.5

fig.4

Como podemos ver en esta figura el programa ya fue ejecutado, claramente podemos observar que inter y recu ya tienen un numero aleatorio entre (0 y 1), tambin en el estado podemos ver los procesos que estn bloqueados,listos,corriendo, por otra parte en bloqueado podemos observar que solo el proceso ( facebok) est bloqueado ya que le falta un recurso o recur. Podemos decir que cundo tenga un:

inter 0 1

recur 1 0 Pasar a ser bloqueado por falta de recursos Sigue ejecutndose pasa alisto pero se le descuenta -10 al cuantum Pasa al estado listo ,restndole al cuantum -10 Sigue ejecutndose y se le resta -10

1 0

1 0

Adems aqu nos da la opcin de poder ingresar un nuevo proceso siempre y cuando queramos este proceso.

Su t-rest o cuantum no fue restado -10 porque esta bloqueado

cuantum es restado 10 siempre y cuando no este bloqueado

Fig.5 al ingresar el proceso, el programa automticamente le da su tamao,T-rest,inter,recur,todo esto es aleatorio y es actualizado segn su t-rest o cuantum. Veamos la figura 6.

Fig.6 En esta figura podemos ver que el proceso ya fue actualizado, y tiene su t-rest, inter que fue dado aleatoria mente y el programa est corriendo perfectamente.

Fig.7 En esta figura claramente uno de los 5 procesos ya fue terminado y solo quedan 4 procesos. El proceso termina cuando su t-rest o cuantum sea 0 . En cada ciclo el t-rest es descontado -10 siempre y cuando pase a estado listo

Fig.8 Y Por ltimo el programa nos muestra al ltimo proceso que fue terminado, es aqu donde el programa culmina .

PROGRAMA.- Por ultimo veremos el programa en si tal y como es.

using System; using System.Collections.Generic; using System.Text; namespace rellotgeDigitalAmbAlarma { class Program { static void Main(string[] args) { //Declaracion de Variables int s=1,p=0,tope=0,x,i,x1=0,m=0; //vector de nombre de proceso string[] vec1=new String[100]; string att=""; //vector de tiempo de proceso int[] vec2=new int[100]; //vector de interrupcion para el bloqueo int[] vec3=new int[100]; int[] vec5=new int[100]; //vector del bloqueo string[] vec4=new string[100]; string[] bloqueado=new string[100]; int[] cuantumbloqueado=new int[100]; string resp="si",x2=""; //vector para mostrar el tamao original del proceso int[] tamao=new int[100]; //declaracion de variables de numeros aleartorios Random r=new Random(); Random t=new Random(); Random h=new Random(); //ingreso de procesos Console.Title = "GESTION DE PROCESO"; while(resp=="si") { Console.Clear();

Console.ForegroundColor = ConsoleColor.Yellow; Console.Write("Ingrese Procesos a Ejecutar: "+"["+(tope+1)+"]"); Console.SetCursorPosition(29,0); vec1[tope]=Console.ReadLine(); int aleartorio= r.Next(20,100); vec2[tope]=aleartorio; tope=tope+1; Console.ForegroundColor = ConsoleColor.Red; Console.SetCursorPosition(0,1); Console.Write("Quiere seguir ingresando: "); resp=Console.ReadLine(); } tope=tope-1; //Ordenando por tamao for ( i = 0; i <= tope; i++) { for (int j = i + 1; j <= tope; j++) { if (vec2[i] > vec2[j]) { x1 = vec2[i]; x2=vec1[i]; vec1[i] = vec1[j]; vec1[j] = x2; vec2[i] = vec2[j]; vec2[j] = x1; } } } for(i=0;i<=tope;i++) { tamao[i]=vec2[i]; } //Imprimiendo tabla de procesos Listos Console.Clear(); PrintLine(); Console.ForegroundColor = ConsoleColor.Green;

PrintRow("ID","Nombre","Tamao","T-Rest","Inter","Recur","Estado","bloqueado"); Console.ForegroundColor = ConsoleColor.White; PrintLine(); for(i=0;i<=tope;i++) { PrintRow(Convert.ToString(i+1),vec1[i],Convert.ToString(tamao[i])+"Kb",Convert.ToString(vec2[i]),"","",Convert.ToString(vec4[i]="Listo"),""); } PrintRow("", "", "", "","","","",""); PrintLine(); Console.Write("Presione enter para ejecutar"); Console.ReadKey(); //Ejecutando Los Listos for(i=0;i<=tope;i++) { int aleartorio1= t.Next(0,2); vec3[i]=aleartorio1; int aleartorio2= h.Next(0,2); vec5[i]=aleartorio2; } m=0; while(tope>=0) { for ( i = 0; i <= tope; i++) { for (int j = i + 1; j <= tope; j++) { if (vec2[i] > vec2[j]) { x1 = vec2[i]; x2=vec1[i]; vec1[i] = vec1[j]; vec1[j] = x2; vec2[i] = vec2[j]; vec2[j] = x1; } } }

for ( i = 0; i <= tope; i++) { int aleartorio1= t.Next(0,2); vec3[p]=aleartorio1; }

while (s<=10) { Console.Clear(); PrintLine(); Console.ForegroundColor = ConsoleColor.Green; PrintRow("ID","Nombre","Tamao","T-Rest","Inter","Recur","Estado","Bloqueado"); Console.ForegroundColor = ConsoleColor.White; PrintLine(); for(i=0;i<=tope;i++) {

PrintRow(Convert.ToString(i+1),vec1[i],Convert.ToString(tamao[i])+"Kb",Convert.ToString(vec2[i]),Convert.ToString(vec3[i]),Convert.ToString(vec5[i]),Convert .ToString(vec4[i]),bloqueado[i]); } PrintRow("", "", "", "","","","",""); PrintLine();

if(vec5[p]>vec3[p]) { vec4[p]="Bloqueado"; cuantumbloqueado[m]=vec2[p]; bloqueado[m]=vec1[p]; if(m>3) { for(int u=0;u<=m;u++) { bloqueado[u]=bloqueado[u+1]; m=m-1; } } m=m+1;

s=11; if(tope<0) { tope=-1; s=11; } } else { Console.SetCursorPosition(53,3+p); Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("Corriendo"); Console.ForegroundColor = ConsoleColor.White; Console.SetCursorPosition(27,3+p); Console.WriteLine(vec2[p]=vec2[p]-1); x = Environment.TickCount; while (Environment.TickCount <= x + 100) ; s = s + 1; if(vec2[p]<=0) { for(i=p;i<tope;i++) { vec2[i]=vec2[i+1]; vec1[i]=vec1[i+1]; vec3[i]=vec3[i+1]; tamao[i]=tamao[i+1]; } tope=tope-1; if(p>0) { p=p-1; } s=11; } vec4[p]="Listo"; } }

s=1; if(p==tope) { Console.SetCursorPosition(0,7+p); Console.WriteLine("Proceso nuevo si/no: "); att=Console.ReadLine(); while(att=="si") { Console.SetCursorPosition(0,8+p); Console.Write("Ingrese Proceso: tope=tope+1; vec1[tope]=Console.ReadLine(); int aleartorio= r.Next(20,100); tamao[tope]=aleartorio; vec2[tope]=tamao[tope]; vec4[p]="Listo"; att="no"; } p=0; } else p=p+1; } Console.SetCursorPosition(53,3); Console.WriteLine("Terminado"); Console.Title = "PROCESOS TERMINADOS"; Console.SetCursorPosition(0,6); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Procesos Terminado"); Console.ReadKey(); } ");

static void PrintLine() { Console.WriteLine(new string('-', 78)); }

static void PrintRow(string column1, string column2, string column3, string column4, string column5, string column6, string column7, string column8)

{ Console.WriteLine( string.Format("|{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|", AlignCentre(column1, 4), AlignCentre(column2, 8), AlignCentre(column3, 8), AlignCentre(column4, 8), AlignCentre(column5, 8), AlignCentre(column6, 9), AlignCentre(column7, 13), AlignCentre(column8, 11))); }

static string AlignCentre(string text, int width) { if (string.IsNullOrEmpty(text)) { return new string(' ', width); } else { return text.PadRight(width - (width - text.Length) / 2).PadLeft(width); } }

} }

You might also like