administrador de tareas

Upload: marco

Post on 12-Jul-2015

1.881 views

Category:

Documents


0 download

DESCRIPTION

WINDOWS XP

TRANSCRIPT

FACULTAD DE INGENIERIA DE SISTEMAS E.A.P INGENIERIA DE SISTEMAS E INFORMATICA

TAREA N-2 DE SISTEMAS OPERATIVOS

CURSO TEMA PROFESORA

: : :

SISTEMAS OPERATIVOS ADMINISTRADOR DE TAREAS MARIA ELENA RUIZ RIVERA

ALUMNOS

:

MONDRAGON PANTIGOSO, MARCO GIMENEZ ALATA, RICARDO

CIUDAD UNIVERSITARIA, NOVIEMBRE DEL 2011

Tabla de contenidoTabla de contenido..............................................................................................2 1. Objetivo...........................................................................................................3 2. Explicacin del programa (Qu es lo que hace?)...........................................3 3. Cdigo........................................................................................................... 18 4. Conclusiones.................................................................................................46

1. ObjetivoImplementar un administrador de tareas bajo el S.O. Windows XP que nos permita visualizar los procesos que hayan sido llevados a memoria principal, siendo capaces de observar a manera de lista y de forma grfica los nombres, tamaos y el PID de estos procesos en tiempo real. Por otro lado, la asignacin de memoria de trato de forma continua y su representacin en memoria (direcciones fsicas) se hizo mediante registros (base, lmite) y el tamao que ocupa (el proceso) en memoria (desplazamiento). Para desarrollar la aplicacin se utiliz el lenguaje Java y el IDE Netbeans 6.5. Los temas abarcados son: POO (clases), hilos, Java swing y Java 2d.

2. Explicacin del programa (Qu es lo que hace?)Primero, en nuestra interfaz nos vamos a la pestaa de procesos, en ella podemos visualizar la lista de procesos que se estn cargadas en memoria todo ello gracias al comando tasklist del cmd (ms-dos). De donde obtuvimos el nombre del proceso, su PID, nombre de usuario (sesin), nmero de sesin y el uso de memoria que utiliza el proceso en memoria real. Su implementacin se llev a cabo mediante un hilo llamado Clase Hilo el cual monitorea constantemente por los cambios en el nmero de proceso y actualiza la lista y sus campos. El cual a su vez llama al mtodo procesar que se encarga de separar cada lnea de comando leda por el tasklist.()

(Fig.1) Ejemplo: se separa la lnea 1 hasta la lnea n(# procesos en memoria) todos sus campo. A manera de ejemplo la lnea se separara as (System Idle Process PID-Nombre nmero de sesin- uso de memoria) y estos

campos son almacenados en el Jtable tabla_procesos de la Fig.2. Asimismo, este mtodo procesar tambin nos sirve para llenar el JTable tabla_aplicaciones de la pestaa Aplicaciones (Fig.3).

(Fig. 2)

(Fig. 3) Cabe resaltar que la pestaa de Aplicaciones se actualiza del mismo mtodo procesar, el cual es lee el proceso. Ejemplo: netbeans.exe y nosotros detectamos esta cadena si esto sucede entonces procedemos a llenar con estos datos la tabla_aplicaciones. Por lo que este Jtable est sujeto a las aplicaciones para los procesos que nosotros hayamos definido, esto es, solo se mostraran las aplicaciones para los cuales exista su equivalente (ver Fig. 4).

(Fig.4) Segundo, la pestaa memoria nos muestra la memoria RAM total, memoria RAM libre y la memoria usada mediante un hilo llamado hmemoria de la clase Hilo_memoria que mediante la librera hyperic-sigar-1.6.4, especficamente el jar de sigar.jar que contiene la clase Sigar y esta a su vez contiene la clase Mem cuyos mtodos: getTotal(),getFree(),getUsed() nos permiten saber que cantidad de memoria se est utilizando(ver Fig.5) . Long memTotal=memoria.getTotal(); Long memLibre=memoria.getFree(); Long memUsada=memoria.getUsed(); (Fig. 5) En la misma ventana disponemos de los botones iniciar grfica y detener grfica de los cuales iniciar grfica dibuja en el Jpanel grfica( mediante La clase Graphics de la librera Java2d) utilizndolo como superficie de dibujo a este panel. Lo que hacemos es dibujar rectngulos con el mtodo fillRect(int x, int y, int width, int height) cuyos puntos x,y es el vrtice superior izquierdo del rectngulo y width viene a ser el ancho y height el alto todos ellos en pixeles (tipo entero). Donde cada entero representa un pixel donde cada punto se ubica de acuerdo a la figura 6(ver los ejes). La figura es similar al del panel.

(Fig. 6) Partiendo del mtodo procesar que vimos anteriormente hacemos lo siguiente: la primera vez que se inicie el mtodo procesar se crear una lista de registros con los datos( nombre, registro base, desplazamiento y registro lmite) de los procesos. Luego de creada esta lista de Nodos llamada lista_registro de la clase Lista_Reg est nos servir para realizar la grfica resumen de todos los procesos (que se encuentren en la lista) guardando una proporcin con su tamao en pxeles. Como dijimos esta lista solo se crear la primera vez(utilizando el mtodo agregarNodo() de la lista por cada proceso) mediante un uso del booleano primeraVez para las veces siguientes si es que se detecta una modificacin en la lectura de procesos (actualizacin lista agregaron o finalizaron procesos) y se buscar en la misma lista ya creada lnea por lnea cada proceso ledo por el comando cmd tasklist y si el nombre del proceso no se encuentra en la lista_registro se agrega un nuevo nodo con los datos mencionados anteriormente en el primer espacio en donde quepa el proceso(ver lnea 474 de la clase Admin.java del mtodo procesar).

(Fig. 7) Una vez explicado esto veamos la grfica resumen de la Fig.8 generada (click en iniciar grfica). Por otro lado el botn detener grfica lo que hace es resetear los valores del Jpane con el mtodo (grafica.updateUI()).

(Fig. 8)

Tercero, la pestaa Usuario nos muestra la cuenta de usuario usada para entrar a Windows con el mtodo del Frame Principal (InformacionUsuario()) el cual a su vez hace uso del mtodo System.getProperty("user.name"). Cuarto, la pestaa de registros contiene un Jtable llamado tabla_registros el cual se llena cuando presionamos el botn de ver en consola los registros. Este JTable toma los datos de la lista_registros(el cual contiene todos los campos que aparecen aqu, ver los atributos de la clase Nodo) que es la que se actualiza a cada momento por se encuentra en el mtodo procesar del Hilo(ver Fig.11). Para visualizar el grfico de la parte inferior del uso de la memoria, solo debemos de ingresar el mouse al rea del JScrollPane(jScrollPane5) en cuyo interior se encuentra un JPane(grafica2). Esta rea se pintar automticamente cada vez que lo ingresemos el cursor del mouse OJO(ver Fig.9).

(Fig. 9) En la figura 10 podemos visualizar el rea libre de la RAM y esta se clcula de la misma manera que se calcul en el mtodo informacinMemoria() del hilo hmemoria (con la librera del Sigar.jar). Por otro lado, se sum recorriendo la lista_registros los desplazamientos y a la cantidad de memoriaTotal se le resto esta suma dndonos la memoriaLibre y ese espacio se puede ver en la fig. 10. Cabe mencionar que estos desplazamientos son tan diversos en tamao que

para fines didcticos y para poder visualizar mejor los tamaos de los rectngulos se hizo uso de intervalos si el proceso es menor a 25 000Kb es de tamao pequeo (ancho de 150 pxeles), si esta entre 25 000Kby 50 000Kb es de tamao intermedio (ancho de 300 pxeles) y si es mayor a 50 000Kb entonces es de tamao grande (ancho de 450 pxeles). (Ver mtodo sumaDesplazamiento2() de la clase Lista_Reg).

(Fig. 10)

(Fig. 11)

(Fig.12)

Quinto, probaremos al mismo tiempo si se actualiza la grfica cuando se finalice un proceso y cuando se agregue uno nuevo este busque el primer espacio vaco que se adece a su tamao y que cuando se libere un proceso y este se encuentre al lado de otro vaco (seguidos) se condensen los espacios vacos en uno solo. Vallamos paso a paso con las siguientes imgenes explicando este ejemplo del paso cinco.

(Fig. 13) En la fig. 13 se aprecia el proceso notepad.exe y este se va a finalizar(click en archivo y de ah en finalizar tarea, se va a abrir una ventana como en la en la fig 14.) A continuacin escribir su nombre sin el .exe (del proceso). Y click el matar proceso. Luego entrar el cursor en la zona de la grfica para que se repinte el rea (fig. 15)

(Fig. 14)

(Fig. 15) Para probar la condensacin veremos una secuencia rpida de imgenes (Fig 16-20). Con el notepad ya abierto y despus de ejecutada la aplicacin se tiene lo de la fig.16.

(Fig. 16)

(Fig.17) Luego de haber finalizado el notepad(Fig.17) se puede visualizar en la grfica esta actualizacin al haber entrado el cursor en el rea, pero no olvidar que para que actualice la tabla del JTable debemos hacer click en el botn en ver en consola los registros. NO OLVIDAR. Nosotros si hicimos click en este botn por eso es que sale actualizada la tabla, pero ambas el JTable y el Jpane se actualizan con los datos de la lista_registros (Nodos).

Probamos a abrir un programa que es el buscaminas winmine.exe y como vemos en la fig.18 este se aloja en el primer espacio que se adece a su tamao el cual como se aprecia es el espacio libre que quedo vaco tras haberse liberado el notepad. En esta figura (#18) si se le dio click al botn ver en consolado los registros es por eso que la tabla si aparece como actualizada.

(Fig. 18) Si matamos al winmine(buscaminas) haciendo click en el men Archivo>Finalizar Tarea y escribimos winmine y click en matar proceso vamos a tener lo que vemos fig.19. Slo que en la fig. 19 no le dimos click al botn no alarmase (este cambio ms rpido de lo que pudimos dar click en el botn ver en consola registros para actualizar la tabla). Y la condensacin se realiza con un hilo (hcondensar) que monitorea constantemente y cada ocho segundos est viendo si existen espacios contiguos y los condensa pasando de la figura 19 a la 20.

(Fig. 19)

(Fig. 20)

3. Cdigo ************************CLASE Lista_Reg********************package newpackage; import javax.swing.JTable; /** * * @author APOYO - UIC */ /*Registro lmite = tamao mximo del programa y los datos * Registro base =posicin de inicio del programa en memoria*/ public class Lista_Reg { Nodo inicio;

Nodo fin; int total; public Lista_Reg(){ total=0; inicio=null; fin=null; } public void agregarNodo(String nom,int rb, int d, int rl){ total++; Nodo nodo=new Nodo(total, nom,rb,d,rl); if(inicio==null){ // si lista vacia crea el primer elemento, sino aade un nodo inicio=nodo; }else{ //ya existe al menos un nodo fin.setSig(nodo); } fin=nodo; } //para la consola public void recorrerLista(){ int i=1; Nodo p=new Nodo(); p=inicio; while(p!=null){ System.out.println("Proceso " +i); System.out.println("Nombre: "+p.getNombre()); System.out.println("R_base: "+p.getR_base()); System.out.println("Desplazamiento: "+p.getDesplazamiento()); System.out.println("R_limite: "+p.getR_limite()); p=p.getSig(); i++; } } //para el jTable public void recorreLLenar(JTable tabla,int maxFilas){ int i=0; Nodo p=new Nodo(); p=inicio; int num=1; while(p!=null&&i=maxFilas){ System.out.println("Se alcanzo lmite maximo de filas"); } } public boolean buscar(String nombre){ boolean encontro=false; Nodo p=new Nodo(); p=inicio; while(p!=null){ if(p.getNombre().equals(nombre)){ encontro=true; } p=p.getSig(); } return encontro; } public int sumaDesplazamiento(){ int suma=0; Nodo p=new Nodo(); p=inicio; while(p!=null){ if(!p.getNombre().equals("vacio")){ suma=suma+p.getDesplazamiento(); } p=p.getSig(); } return suma; } public int sumaDesplazamiento2(){ int suma=0; Nodo p=new Nodo(); p=inicio; while(p!=null){ int desp=450; if(p.getDesplazamiento()