Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un...
Transcript of Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un...
Llamadas al sistemaDr. Alonso Ramírez Manzanares
27-Ago-2009
El ShellEl shell no forma parte del SO pero es muy importante.
Utiliza intensivamente las llamadas al SO.
Es la interfaz primaria entre el SO y el usuario.
Tenemos el prompt $, ejemplos
$ date
$ date > file1
$ sort <archivo1 > archivo2
$ cat archivo1 arch2 arch3 | sort > /dev/lp (y si agregamos & al final)
Llamadas al Sistema
Se proporciona una biblioteca para hacer las llamadas desde C. Esto es la interfaz entre el SO y sus programas de aplicación.
Ejemplo: READ
cuenta = read(file,buffer,nbytes)
Si hay un error cuenta es -1 y el identificador de error se guarda en la global errno.
Ejemplos de llamadas al sistema (53 en MINIX)
Ejemplos de llamadas al sistema
Ejemplos de llamadas al sistema
Llamadas al sistema para admin. de procesos.
Fork, crea un proceso, proceso padre crea un proceso hijo.
Se genera una copia de todo, por lo que le p. hijo tiene su propio espacio de
trabajo.
Devuleve in pid que es el identifacor de proceso.
Caso del shell, cuando teclean un comando el shell usa fork() y espera con
WAITPID (se puede especificar cual hijo esperar usando el parámetro o bien
-1 para esperar a cualquier hijo).
Ejemplo de un shell mínimo
Un ejemplo en el comando $cp arch1 arch2que usa en su interior main(argc, argv,envp)
Funcionamiento de waitpid
Si un proceso padre ejecuta
n = waitpid(-1,&status,options);
se suspenderá hasta que el hijo termine.
En la llamada EXIT (llamada al sistema) se asigna el estado de salida como argumento (0 a 255).
Si el proceso hijo sale con codigo 4, entonces n es el pid del hijo y status vale 0x0400 (estado de terminación mas estado de salida).
División de la memoria de procesos
Segmento de texto o código de programa (tamaño fijo)
Segmento de datos o variables (crece hacia arriba llamando a int brk(char *addr) , puede agrandarse o encogerse).
Segmento de pila (crece hacia abajo automaticamente al ser requerido)
GETPI
Recuerden que con fork el id solo era devuelto al padre, pero el hijo si quiere conocer su propio ID puede usar
pid_t = getpid(void);
También tenemos pids de grupo getpgrp.
y ptrace para poder debbugear.
Llamadas al sistema para señalización
Aunque casi en todos los casos la comunicación entre procesos es planeada, existen casos donde se requiere comunicación inesperada,
ejem. interrumpir un proceso por el usuario,
o por un error de hardware,
o por expiración de tiempo
Recibiendo señalesSi el proceso no esta preparado para recibir señales y le llega una, este se termina¡
Para indicar que se está peparado para recibir se usa SIGACTION, donde se indica la funcion que va a manejar la señal (ver la ayuda man SIG_DFL y SIG_IGN).
Cuando una señal llega el proceso se mete en su propia pila e invoca el manejador de señales, el cual puede usar el tiempo que quiera y hacer llamadas al sistema, pero normalmente es un proceso corto. Cuando el manejador termina llama a SIGRETURN para que el
Las señales se pueden bloquear ...
con SIGPROGMASK y se mantiene pendiente hasta que se desbloquea, pero no se pierde.
Para ver las señales pendientes se puede usar SIGPENDING.
SIGSUSPEND puede indicar que señales estan suspendidas y suspenderse a si mismo, esperando por una señal, por ejemplo.
Que sucede con el comando comando &
La señal DEL del teclado no debe de afectar el proceso que está en segundo plano, asi que después de FORK y antes de EXEC se hace:
sigaction(SIGINT,SIG_ING,NULL);
sigaction(SIGQUIT,SIG_ING,NULL);
Para inhabilitar las señales DEL y QUIT.
Como usar el make, por neto:
Los proyectos los RAD, por ejemplo C++ Builder
Decir que es lo análogo en sistemas linux
Mostrar cual es la sintaxis de un MakeFile
Tips importantes para hacer un MakeFile
Como se ejecuta (que es make)
Decir que hay otras opciones como make clean