Práctica 2: Procesos e Hilos - Página personal de Andrés Bustamante
Transcripción
Práctica 2: Procesos e Hilos - Página personal de Andrés Bustamante
Sistemas Operativos Práctica 2 Ing. Andrés Bustamante [email protected] Ingenierı́a de Sistemas Facultad de Ingenierı́a Universidad de la Amazonia 2009 1. Objetivo El objetivo de la práctica es que el estudiante aprenda los conceptos básicos sobre el manejo de procesos en Linux, mediante el uso del directorio de archivos /proc. 2. Metodologı́a Mediante el uso del leguaje de programación C, el estudiante creará una pequeña aplicación que permita obtener información sobre un proceso que se encuentre en ejecución en nuestro sistema. Deberá poder leer los “archivos” que proporciona el directorio /proc y de allı́ extraer la información necesaria. Para tal fin, el estudiante deberá poseer un dominio básico sobre la navegación en los directorios desde una terminal (objetivo de la práctica 1), al igual que unas nociones elementales sobre el significado del directorio de archivos /proc y la información que nos provee. 3. Marco teórico Primero que todo, vamos a hacer un repaso de cómo interactuar con los archivos desde C. Cuando se trabaja con archivos secuenciales, el primer paso es establecer un área de buffer donde la información se almacena temporalmente mientras se está transfiriendo entre la memoria y el archivo. Para establecer el área de memoria, utilizamos la siguiente sentencia: FILE *archivo; Donde FILE es un tipo de dato definido en la librerı́a stdio.h. Antes de poder interactuar con el archivo, debemos abrirlo. Esto asocia el nombre del archivo con el área de buffer. Adicionalmente, se especifica el uso del archivo, es decir, si será únicamente de lectura o podremos escribir en él. Para abrir el archivo, utilizamos la siguiente lı́nea: archivo = fopen (nombre_archivo, tipo_archivo); Donde nombre_archivo es el archivo que queremos abrir, y tipo_archivo es el modo de abrirlo. Por ejemplo: 1 archivo = fopen (‘‘carta.txt’’, ‘‘r’’); abre el archivo carta.txt en modo de lectura. La función fopen devuelve un puntero al principio del área de buffer asociada con el archivo. Se devuelve NULL si no se puede abrir el archivo. Finalmente, un archivo debe cerrarse luego de su utilización: fclose(archivo); Como nuestra práctica únicamente consistirá en realizar una lectura de archivos, utilizaremos la función fscanf para acceder a la información pertinente. Esta función tiene un manejo similar a scanf, que nos permite leer información desde el teclado. Ya habiendo recordado el manejo de archivos en C, vamos a mirar cómo se desarrolla un programa bajo Linux. Lo primero es acceder a un editor de texto sin formato (Emacs o Vi pueden ser una buena elección). Allı́ vamos a escribir nuestro código y lo vamos a guardar con el nombre que deseemos, agregando la extensión .c. Luego, en una terminal, vamos a colocarnos sobre el directorio en donde almacenamos nuestro archivo (que para este vamos a suponer que se llama programa.c), y digitamos el siguiente comando: $ cc programa.c [-o programa] El texto que se encuentra en los corchetes cuadrados es opcional, y denota el nombre que le vamos a dar a nuestro programa ya compilado. Si no usamos esta opción, nuestro programa se llamará a.out. Para ejecutarlo: $ ./programa 4. Práctica Ya con estos conceptos básicos un poco claros, el problema a solucionar consiste en realizar una aplicación que reciba como parámetro el PID de un proceso, y muestre la siguiente información: ID del proceso (PID) Nombre del ejecutable Estado del proceso ID del proceso padre (PPID) Para tal fin, se debe buscar en el directorio /proc, el directorio correspondiente al proceso, y cargar la información contenida en el archivo stat. Para información concerniente a cómo leer la información contenida en este archivo, referirse a las páginas del manual, es decir, con el comando man. Supongamos que nuestra aplicación se va a llamar practica2, y que existe un proceso en ejecución en nuestro sistema con el PID 2350. La ejecución deberá ser algo como lo siguiente: ./practica2 2350 5. Entregables 1. Se debe entregar informe únicamente en formato PDF con la descripción del proceso realizado de manera detallada. Se recomienda realizar capturas de pantalla describiendo los resultados obtenidos. También se deben incluir conclusiones del aprendizaje de la práctica y bibliografı́a consultada (si es el caso). 2 2. También se debe entregar el archivo con el código fuente del programa elaborado en lenguaje C. Se recomienda realizar comentarios en el código y colocar el nombre de los integrantes del grupo al principio del archivo de código fuente. Los entregables se deben enviar vı́a correo electrónico a la dirección electrónica del profesor. 3