Mejora Del Comando En Ps En Minix
Total Page:16
File Type:pdf, Size:1020Kb
MEJORA DEL COMANDO PS EN MINIX. INGENIERIA TECNICA INFORMATICA DE GESTION 2007 1 INTRODUCCIÓN......................................................................................................................................3 OBJETIVO .................................................................................................................................................3 FUNDAMENTOS TEÓRICOS.................................................................................................................3 • FICHERO MINIX/PROC.H.....................................................................................................................3 • FICHERO MINIX/CONF.H.....................................................................................................................3 • FICHERO MINIX/CONFIG.H ................................................................................................................3 • FICHERO MINIX/MPROG.H..................................................................................................................3 • FICHERO USR/LOCAL/SMX/SRC/FS/FPROG.H.......................................................................................4 DESCRIPCIÓN DEL TRABAJO REALIZADO....................................................................................4 PASOS SEGUIDOS PARA LA CREACIÓN DEL PROYECTO..........................................................5 CONCLUSIONES......................................................................................................................................6 PROPUESTA DE AMPLIACIÓN............................................................................................................7 BIBLIOGRAFIA........................................................................................................................................7 ANEXO I. (TRABAJO EN GRUPO) .......................................................................................................7 2 INTRODUCCIÓN El trabajo que hemos realizado ha sido la modificación del comando “ps”, le hemos introducido algunas mejoras que hemos considerado interesantes. Hemos añadido seis opciones a este comando, además de las que ya tenía, que son tres. OBJETIVO El objetivo de haber realizado este proyecto, ha sido que hemos considerado de gran importancia para el usuario que se conecta a una máquina “Minix”, el poder mostrar más características de los procesos y tareas del sistema, para su información si la precisa. En definitiva, hacer más cómoda o de más utilidad la utilización de la máquina “Minix” al usuario. FUNDAMENTOS TEÓRICOS Los fundamentos teóricos en los que nos hemos basado han sido principalmente los siguientes: • Fichero minix/proc.h es el PCB del proceso, en el comando ps hay una estructura de datos de este tipo, de ella hemos sacado los campos como: • struct mem_map p_map[NR_SEGS] mapa de memoria. • clock_t user_time; /* user time in ticks */ • clock_t sys_time; /* sys time in ticks */ Entre otros campos. • Fichero minix/conf.h que contiene constantes configurables en minix la que hemos utilizado es la constante NR_TASKS contiene el numero de tareas. • Fichero minix/config.h también contiene constantes de minix en este hemos usado la constante NR_PROCS que es el numero de entradas en la tabla de procesos para los procesos de usuario. • Fichero minix/mprog.h esto es una pila que contiene la gestión de memoria de cada proceso en ella están definidos los segmentos de texto datos y pila los campos que nos han resultado útiles han sido. 3 • mp_realuid real uid. • mp_effuid efectivo uid. • mp_pid identificador de proceso. • mp_procgrp pid proceso de grupo. • mp_flags bit de control. • Fichero usr/local/smx/src/fs/fprog.h obtenemos los campos: • dev_t fp_tty; /* major/minor of controlling tty */ • signed char fp_task; /*que tarea ha sido suspendida*/ DESCRIPCIÓN DEL TRABAJO REALIZADO Como ya hemos comentado en puntos anteriores, hemos realizado una ampliación del comando “ps” en lo que cabe a sus opciones. Hemos añadido seis opciones más, que son las siguientes: 1. Opción ‘t’: es una opción que muestra solo los procesos que son Tareas para construir esta opción sabemos que el número de tareas viene dada por la constante NR_TASK. 2. Opción ‘r’: es una opción que muestra los procesos que están en ejecución. Esta opción imita a la que tiene el ps del S.O unix. Para hacer esta opción se a comparado el campo mp_flags de la estructura de datos mproc. 3. Opción ‘s’: esta opción detalla por puntos el tamaño que tienen los procesos en ejecución, especificando el tamaño de pila, el tamaño del texto y el tamaño de datos, además de su PID, tiempo, nombre. bufp->ps_tsize = (size_t) ps_proc[p_ki].p_map[T].mem_len << CLICK_SHIFT; bufp->ps_dsize = (size_t) ps_proc[p_ki].p_map[D].mem_len << CLICK_SHIFT; bufp->ps_ssize = (size_t) ps_proc[p_ki].p_map[S].mem_len << CLICK_SHIFT; Con este codigo se hace la asingnacion a los campos de la estructura bufp tamaño de datos, de texto y de pila, una vez asignados estos campos con la opcion ps –s les mostramos. 4 4. Opción ‘e’: la opción ‘e’, especifica que procesos están actualmente en espera, a que el sistema operativo les conceda uso de CPU. Igual que la opcion ps –r pero ahora mostramos los procesos en espera. 5. Opción ‘b’: la opción ‘b’, es una opción “especial”. Decimos especial por el motivo de que en el S.O minix se suelen escribir los argumentos después del nombre del comando, nosotros hemos sido un poco originales debido a que esta opción muestra un mensaje por pantalla al usuario preguntándole por el proceso buscar. Si esta opción encuentra el proceso (es decir, que esta en el sistema), entonces mostrará por pantalla la información sobre dicho proceso, para ese proceso nada más, y en el caso de que el comando no encuentre el proceso, el sistema mostrará un mensaje por pantalla diciendo al usuario que el proceso no se encuentra en el sistema. 6. Opción ‘h’: muestra el tiempo que lleva ejecutandose el proceso IDLE El proceso "Idle" representa cuanto tiempo de CPU ha sido gastado en el bucle Idle del sistema (o sea, que porcentaje de CPU tenemos libre). 7. Hemos creado una nueva cabecera para la opción ps –s y las que ya existian las hemos puesto en Castellano. Pasos seguidos para la creación del proyecto. 1º. El primer paso fue copiar el comando ‘ps.c’ (código del comando) de la máquina ‘Minix’, en un directorio de nuestro ‘Home’ en Linux, dado que en Minix, no existe compilador. 2º. Mediante la línea mcc –o ejecutable “fuente.c”, obtenemos un ejecutable que seguidamente subimos a la máquina ‘Minix’, mediante el comando sunread “ruta_del_ejecutable” > nombre_del_ejecutable. Cuando ejecutamos este comando por primera vez (mcc –o ejecutable “fuente.c”), el compilador nos mostró una serie de errores. Tuvimos que cambiar dentro del código fuente del comando, las rutas de ciertos directorios que el comando utilizaba y que tenia mal definidas. Volvimos a ejecutar el comando y el compilador volvió a mostrar varios fallos. Fuimos al directorio 5 /usr/local/smx/src/commands y de ahí copiamos cierta porción de código del ‘Makefile’ en un ‘Makefile’ creado por nosotros en el directorio donde tenemos ubicado el comando en la máquina Linux. La tercera vez que ejecutamos para compilar, nos volvió a mostrar errores. Tuvimos que fijarnos en el ‘Makefile’, para observar como compilaba el programa, que hacia, de donde obtenía los parámetro, constantes, variables, etc. y obtuvimos la siguiente línea de compilación: mcc –D_MINIX –D_POSIX_SOURCE – D__minix –o pss –S 16kw pss.c Cuando ejecutamos esta opción el código compilo y pudimos obtener el ejecutable para poderlo ejecutar en la máquina ‘Minix’. A partir de ahí, empezamos a implementar código, lo compilábamos y lo ejecutábamos en Minix. 3º. Lo siguiente que hicimos una vez obtenido el ejecutable para Minix, fue introducirnos en el código del comando ‘ps’. 4º. Nos fijamos en la manera que estaban implementadas las tres opciones del comando ps en Minix, ‘-a’, ‘-x’, ‘-l’ y a partir de estas opciones fuimos recorriendo todo el comando para ver de dónde salían las variables que utilizaba, las constantes, las funciones, etc. 5º. Fuimos implementando, opción por opción, lo compilábamos, corregíamos los errores y seguidamente lo subíamos a la máquina ‘Minix’ y lo ejecutábamos y comprobábamos que funcionaba. Otro aspecto que cabe destacar es que hemos añadido una ‘cabecera’. Con cabecera, lo que queremos decir que cuando ejecutamos el comando ps en Minix, arriba del todo te muestra el PID, el PPID, etc, nosotros hemos fabricado una linea que te muestra que significa cada cosa en español, en vez de en inglés para la opción ‘-s’. CONCLUSIONES El trabajo que hemos realizado se resume en los siguientes puntos: • Obtención de un ejecutable en unix para poder subirlo a Minix y ejecutarlo, con las complicaciones que hemos explicado anteriormente. • Estudiar el comando ‘ps’, el código C del fichero ps.c, para así poder realizar el proyecto previsto. • Implementación de seis opciones nuevas. 6 Los logros conseguidos con este trabajo han sido los previstos, además del comando ‘ps –h’, implementado en el último momento. PROPUESTA DE AMPLIACIÓN Una posible propuesta de ampliación podría ser la implementación de una opción que te dijese las últimas ejecuciones de unos determinados comandos. BIBLIOGRAFIA • Apuntes de clase. • Manual smx ( en la pagina web de la asignatura) • Comentarios de los comandos de minix ANEXO I. (Trabajo en grupo) El trabajo lo hemos dividido en partes, cada miembro del grupo se ocupaba de una parte del proyecto y conjuntamente en el laboratorio juntábamos el trabajo realizado. En el grupo por tanto cabe decir, que no ha existido ningún tipo de problema. 7.