Llamadas al sistemaalram/SO/clase05.pdfLlamadas al sistema para admin. de procesos. Fork, crea un...

Post on 04-Jul-2020

0 views 0 download

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