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