Equipo 9 Unidad 2 Practica 4
Equipo 9 Unidad 2 Practica 4
Equipo 9 Unidad 2 Practica 4
1
Llamadas al sistema para administrar procesos en
Linux
Las llamadas al sistema son puntos de entrada al núcleo (kernel) de Linux. Éstas
usualmente no son invocadas de forma directa, sino que se utilizan funciones
wrapper de la librería del lenguaje C, glibc, para que estas hagan una serie de
pasos necesarios para que la llamada sea exitosa. Estos wrappers normalmente
tienen el mismo nombre de la función original y el trabajo que hacen es mínimo
la mayoría de las veces.
Cuando una llamada al sistema falla retorna un número de error negativo, pero
la función de C retorna -1 y le asigna este número de error negado (positivo) a
la variable errno (errno.h).
Aunque no es el caso común, algunas de las llamadas al sistema no tienen una
función equivalente proveída por la librería de C, así que hay que llamarlas
directamente mediante la función syscall (sys/syscall.h).
Algunas llamadas al sistema relacionadas con los procesos. El código de retorno
s es 1 si ocurre un error, pid es un ID de proceso y residual es el tiempo restante
en la alarma anterior. Los parámetros son lo que los nombres sugieren.
2
s = kill(pid, sig) Envía una señal a un proceso
3
CreateSemaphore Crea un nuevo semáforo
4
wait() Espera hasta que uno de los procesos termine
getpid() Devuelve el ID del proceso (PID) del proceso que llama Mantenimiento de
información
alarm() Devuelve el número de segundos que faltan para que se emita
cualquier alarma previamente programada, o cero si no había
ninguna alarma programada.
umask() Establece los permisos por defecto para los nuevos archivos y
directorios creados por el proceso actual.
5
Gestión de señales Posix
En primer lugar, POSIX significa Portable Operating System Interface. Consiste
en una familia de estándares especificadas por la IEEE con el objetivo de
facilitar la interoperabilidad de sistemas operativos. Además, POSIX establece
las reglas para la portabilidad de programas. Por ejemplo, cuando se desarrolla
software que cumple con los estándares POSIX existe una gran probabilidad
de que se podrá utilizar en sistemas operativos del tipo Unix. Si se ignoran
tales reglas, es muy posible que el programa o librería funcione bien en un
sistema dado pero que no lo haga en otro.
Objetivo de la práctica
Esta práctica permite al alumno familiarizarse con los servicios para la gestión
de señales en POSIX. Se debe realizar un programa que calcule la tasa de
fallos, es decir, la tasa de señales que se generan. Para ello se ejecutarán de
forma aleatoria las siguientes señales:
SIGPIPE: Se envía a un proceso cuando intenta escribir en una tubería sin un
proceso conectado al otro extremo.
SIGFPE: Esta se envía a un proceso cuando se detecta error aritmético de
punto flotante o entero.
SIGSEGV: Significa una señal de violación de acceso a la memoria, tratando
de leer o escribir desde/hacia un área de memoria a la que su proceso no tiene
acceso.
SIGBUS: Es la señal que envía un programa cuando ha habido un error en el
bus. Las condiciones que conducen al envío de la señal son, por ejemplo, una
alineación incorrecta del acceso a la memoria o una dirección física inexistente.
SIGILL: Se envía a un proceso cuando intenta ejecutar una instrucción ilegal,
mal formada o desconocida. Mientras que algunos compiladores proporcionan
automáticamente un valor de retorno predeterminado, otros enviarán un SIGILL
o SIGTRAP en tiempo de ejecución cuando intenten dejar una función sin un
valor de retorno.
6
Código de la práctica:
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
int modulo_I()
{
int num = 1+rand()%(6-1);
return num;
}
void modulo1(void);
void modulo2(void);
void modulo3(void);
int main(void){
srand(time(NULL));
int i;
float cSIGFPE = 0;
float cSIGPIPE = 0;
float cSIGSEGV = 0;
float cSIGBUS = 0;
float cSIGILL = 0;
Resultado:
8
Lo procesos son creados y destruidos por el sistema operativo, así como también este se
debe hacer cargo de la comunicación entre procesos. El mecanismo por el cual un proceso
crea otro proceso se denomina bifurcación. El sistema operativo es el responsable de
determinar las pautas de intercalado y asignación de recursos a cada proceso.
Si existe un esquema con diferentes niveles de prioridad de procesos es conveniente
mantener varias colas de procesos listos, una para cada nivel de prioridad, lo que ayuda a
determinar cuál es el proceso que más conviene ejecutar a continuación.
The IEEE and The Open Group. Posix.1-2008 – the open group base specifications issue 7,
2008. Available from: http://pubs.opengroup.org/onlinepubs/9699919799/.
Carretero, G. P. (2013). Monitoreo de Procesos en Linux, Windows. En Zarpele, Libro de
prácticas de Sistemas Operativos (págs. 43-50). Madrid: McGrawHill.
Tanenbaum, A. (2009). Sistemas Operativos Modernos. (3ra Edición). PEARSON
EDUCACIÓN.