Вы находитесь на странице: 1из 7

Facultad de Ciencias Exactas, Fsicas y Naturales Universidad Nacional de Crdoba

Ctedra: Sistemas Operativos I Trabajo Prctico N 1


Alumnos: Diez de Medina Quintar, Lucas Leandro............34188759 Lichtensztein, Leandro Federico.........................33894961

2011

Introduccin: En este trabajo, desarrollaremos un cdigo en el lenguaje C, el cual se encarga de buscar cierta informacin sobre el directorio proc de Linux e imprimirla en pantalla . El programa realiza lecturas a los ficheros correspondientes que contienen la informacin solicitada. En el punto A se identifican los ficheros que se utilizarn en los otros puntos, y la manera en que estn presentados los datos. Para realizar la adquisicin de los datos se utilizaron funciones propias de c, como ser fscanf, sscanf, o strstr. Dichas funciones se explican a medida que se presentan en el desarrollo del trabajo prctico. Desarrollo: Para resolver los problemas planteados, se desarroll un programa en c, que cuenta con funciones que obtienen cada uno de los datos pedidos y los imprimen en pantalla. Debido a que todos los datos se encuentran en archivos de texto, se desarroll una funcin que obtiene la lnea del archivo que contiene el dato. Esta funcin tiene el nombre de matchear, y recibe como parmetro, el archivo donde se encuentra la informacin, un puntero a un caracter que es el inicio de la cadena que guardar la linea con el dato, y la cadena que se desea buscar en el archivo. Para un informacin ms detallada de esta funcin y de las otras, puede consultarse la documentacin del programa en el anexo. Parte A Buscar informacin acerca estructura del directorio /proc, y averiguar los siguientes datos, teniendo en cuenta la versin de kernel que est corriendo: Tipo y modelo de CPU. Versin del kernel. Tiempo en das, horas, minutos y segundos que han transcurrido desde que se inici el sistema operativo. Cuanto tiempo de CPU ha sido empleado para procesos de usuario, de sistema y cuanto tiempo no se us. Cuanta memoria tiene y cuanta est disponible. Cuantos pedidos de lectura/escritura a disco se han realizado. Cuantos cambios de contexto han sucedido. Cuantos procesos se crearon desde que inici el sistema. La informacin del CPU se encuentre en el archivo /proc/cpuinfo. All podemos encontrar los datos solicitados sobre el tipo y el modelo del CPU. La versin del kernel la podemos encontrar en el archivo /proc/version. Del archivo /proc/uptime podemos sacar la cantidad de segundos que han transcurrido desde que se inicio el sistema operativo. Del archivo /proc/stat puede obtenerse gran parte de la informacin solicitada. All puede encontrarse el uso total de los CPU, y de cada uno en particular (en caso de ser un procesador multicore). Los nmeros que se detallan de cada CPU se dan en jiffies, que son una unidad equivalente a aproximadamente 1/100 segundos en sistemas x86. Adems en este archivo puede encontrarse la cantidad de cambios de contexto que han sucedido y la cantidad de procesos que se crearon desde que inici el sistema. Otro dato que extraemos de este archivo es btime, que indica la cantidad de segundos que pasaron desde el primero de enero de 1970 hasta el ultimo inicio del sistema. En el archivo /proc/meminfo podemos encontrar informacin a cerca de la memoria total del equipo y la memoria disponible. En el archivo /proc/loadavg nos brinda informacin a cerca de la carga promedio

en el ultimo minuto, en los ltimos 5 minutos y en los ltimos 15 minutos, entre otras estadsticas. Finalmente, el archivo /proc/diskstats nos muestra la informacin necesaria para obtener la cantidad de lecturas/escrituras a disco realizadas. Parte B Escriba una versin inicial del ksamp, programa que inspeccione las variables del kernel a travs del /proc e informe por stdout: Tipo y modelo de CPU. Versin de Kernel. Cantidad de tiempo transcurrido desde que se inici el sistema operativo, con el formato ddD hh:mm:ss. Tambin se pide incluir una cabecera donde se indique el nombre de la mquina y la fecha y hora actuales. Tipo y modelo de CPU. Se consult el archivo /proc/cpuinfo, de donde se extrajeron los siguientes campos: vendor_id : Contiene el tipo de CPU. model name : Contiene el modelo del CPU. La funcin que obtiene estos datos y los imprime es printCPUInfo(). Version del Kernel. Se consult el archivo /proc/version, de donde se extrajo la versin del kernel de linux. El archivo contiene la siguiente informacin: Linux version 2.6.38-10-generic (buildd@vernadsky) Solo obtenemos la primera parte, que es lo referente a la versin del kernel de linux. La funcin que obtiene e imprime estos datos es printKernelVersion(). Tiempo transcurrido desde que se inici el sistema operativo: para obtener este tiempo se consult el archivo /proc/uptime. En este archivo se muestran dos nmeros. El primero es la cantidad de tiempo, en segundos, que pas desde que se inici el sistema operativo. El segundo nmero es la cantidad de segundos que la mquina pas ociosa. En procesadores multicore, el segundo nmero es la suma del tiempo que cada procesador estuvo inactivo. Como se nos solicit que el tiempo se presente en formato DD HH:MM:SS, se cre una funcin seg2hms(float secs, char* buff) que devuelve en buff, los segundos secs en formato DD HH:MM:SS. La funcin que obtiene e imprime el uptime es printUpTimes(). Para una informacin ms detallada a cerca de las funciones printCPUInfo(), printKernelVersion() y printUpTimes(), puede verse la documentacin en el anexo.

Parte C: Escriba una segunda versin del programa que imprima la misma informacin que la versin por defecto, pero en caso de invocarse con la opcin -s, agrega la siguiente informacin: Cantidad de tiempo de CPU utilizado para usuarios, sistema y proceso idle. Cantidad de cambios de contexto. Fecha y hora cuando el sistema fue iniciado. Nmero de procesos creados desde el inicio del sistema. Cantidad de tiempo de CPU utilizado para usuarios, sistema y proceso idle: Los datos solicitados se obtuvieron del archivo /proc/stat. En la primer linea del archivo, en el campo cpu, se muestran los valores requeridos, siendo el primero el tiempo de usuario, el tercero el de sistema, y el cuarto el de idle. Para mostrar los datos en segundos se utiliza la funcin seg2hms(float secs, char* buff), enviando como parmetro secs al nmero ledo del archivo sobre cien. Cantidad de cambios de contexto: Se consulto el archivo /proc/stats para obtener lo solicitado, especficamente la cantidad de cambios de contexto se encuentran en el campo ctxt. Fecha y hora cuando el sistema fue iniciado: El sistema registra en el archivo /proc/stats, en el campo btime, la fecha de inicio del sistema en segundos desde 01/01/1970. Para obtener la fecha en formato DD HH:MM:SS se utiliza la funcin strftime(char *cad, size_t maxtam, const char* formato, const struct tm *tiempoPtr) perteneciente a la librera time.h. Esta funcin da formato al valor almacenado en la direccin de memoria apuntada por *tiempoPtr segn las opciones de formato seleccionadas. Se graba en el arreglo de caracteres cad el resultado, que luego se imprimi en la pantalla. Nmero de procesos creados desde el inicio del sistema: Para obtener el dato solicitado se uso el campo processes del archivo /proc/stats. El valor ledo se imprime en la pantalla. Parte D La tercera parte involucra imprimir todo lo de las versiones anteriores, pero cuando se invoca con la opcin -l interval duration imprime adems: Nmero de peticiones a disco realizadas. Cantidad de memoria configurada en el hardware. Cantidad de memoria disponible. Lista de los promedios de carga de 1 minuto. Todos los valores de esta consigna son releidos cada cierto periodo de tiempo especificado por el usuario. Para lograrlo se envian dos valores enteros a la funcin encargada de obtener y mostrar los datos, el primer valor corresponde al tiempo entre lecturas y el segundo valor al tiempo durante el cual se repite el proceso. Estos valores los ingresa el usuario como argumentos al ejecutar el programa. Nmero de peticiones a disco realizadas: Los datos necesarios se encuentran en el archivo /proc/diskstats. Se requiere la suma de las lecturas y escrituras del disco.

En el campo sda el primer valor corresponde a las lecturas y el quinto valor a las escrituras, la suma de estos valores se muestra en pantalla. Cantidad de memoria configurada en el hardware: Se obtiene del archivo /proc/meminfo en el campo MemTotal. El valor se obtiene en KB, se convierte a MB para ser mostrado. Cantidad de memoria disponible: Se obtiene del archivo /proc/meminfo en el campo MemFree. El valor se obtiene en KB, se convierte a MB para ser mostrado. Lista de los promedios de carga de 1 minuto: El archivo /proc/loadadv contiene los valores pormedios de carga del sistema en 1 ,5 y 15 minutos, correspondientes a los tres primeros valores presentes. Se toma el primer valor y se imprime. Para cada valor solicitado se utiliz una funcin para imprimir en pantalla, sealando cada valor con su ttulo de manera de facilitar su compresin por el usuario.

Anexo A: Documentacin del Programa. Documentacin de los 'defines' #define BUFFSIZE 256 Documentacin de las funciones void bootUpTime() - Imprime fecha y hora de inicio del sistema void cabecera() - Imprime la cabecera del programa void contextChanges() - Imprime los cambios de contexto void cpuTimes() - Imprime el tiempo de cpu de usuario, sistema, e idle. void loadAvg() - Imprime lista de promedios de carga de un minuto void matchear(char * filename, char * matched, char * matchStr ) - En matched, coloca la linea que comienza con la cadena matchStr. Parmetros: filename El archivo en el que se va a buscar. matched Almacena la linea que comienza con la cadena matchStr. matchStr Cadena a buscar. void memInfo() - Imprime la informacin de la memoria void parteB() - Imprime lo solicitado en la parte B del trabajo prctico. void parteC() - Imprime lo solicitado en la parte C del trabajo prctico. void parteD(int a, int b ) - Imprime lo solicitado en la parte D del trabajo prctico. Parmetros: a Indica cada cuantos segundos se vuelve a evaluar lo solicitado b Indica durante cuantos segundos debe hacerse. luego b/a indica cuantos ciclos de a segundos deben realizarse

void pedidosHDD() - Imprime la cantidad de pedidos a disco void printCPUInfo() - Imprime la informacin del CPU. void printFechaHora() - Imprime la fecha y la hora actuales. void printHostName() - Obtiene el nombre del equipo. void printKernelVersion() - Imprime la versin del kernell. void printUpTime() - Imprime el tiempo transcurrido desde que se inici el SO, con formato DD HH:MM:SS void processes() - Imprime la cantidad de procesos creados desde el inicio del sistema void seg2hms (float secs, char * buf ) - Convierte los segundos a formato DD HH:MM:SS Parmetros: secs Segundos a convertir buf Tiempo en formato DD HH:MM:SS

Вам также может понравиться