Sistemas operativos modernos

Para anunciar que está dispuesto a atrapar esta señal (o cualquier otra), el proceso puede usar la llamada al sistema sigaction. El primer parámetro es la señal a atrapar (vea la figura 10-5). El segundo es un apuntador a una estructura que da un apuntador al procedimiento pa­ ra manejar la señal, además de algunos otros bits e indicadores. El tercero apunta a una estruc­ tura en la que el sistema devuelve información sobre el manejo de señales que está efectuando en ese momento, por si es necesario restaurarlo más adelante. El manejador de señales puede ejecutarse todo el tiempo que desee, pero en la práctica sue­ le ejecutarse durante un tiempo corto. Cuando termina el procedimiento de manejo de señales, el proceso regresa al punto en el que se interrumpió. La llamada al sistema sigaction también puede servir para indicar que debe ignorarse una señal, o para restaurar la acción predeterminada, que es eliminar el proceso. Oprimir la tecla SUPR no es la única forma de enviar una señal. La llamada al sistema kill permite a un proceso enviar una señal a otro proceso relacionado. No fue una buena decisión escoger el nombre “kill” para esta señal, pues por lo regular los procesos envían señales a otros con la intención de que las atrapen. En muchas aplicaciones en tiempo real, es necesario interrumpir un proceso después de un intervalo de tiempo específico para que haga algo, como retransmitir un paquete que pudo ha­ berse perdido en una línea de comunicación poco confiable. Se ha proporcionado la llamada al sistema alarm para manejar esta situación. El parámetro especifica un intervalo, en segundos, después del cual se enviará una señal SIGALRM al proceso. Un proceso sólo puede tener una alarma pendiente en un momento dado. Si se emite una llamada alarm con un parámetro de 10 segundos, y 3 segundos después se emite otra llamada alarm con un parámetro de 20 segun­ dos, sólo se generará una señal, 20 segundos después de la segunda llamada. La segunda lla­ mada a alarm cancela la primera señal. Si el parámetro de alarm es cero, se cancelará cualquier señal de alarma que esté pendiente. Si una señal de alarma no es atrapada, se realiza la acción predeterminada, que es eliminar el proceso al que se envió la señal. Desde el punto de vista téc­ nico, es posible ignorar las señales de alarma, pero no tiene caso hacerlo. En ocasiones sucede que un proceso no tiene nada que hacer hasta que llegue una señal. Por ejemplo, consideremos un programa de enseñanza asistida por computadora que está pro­ bando la velocidad y comprensión de lectura. El programa exhibe cierto texto en la pantalla y luego invoca a alarm para que le envíe una señal después de 30 segundos. Mientras el estu­ diante lee el texto, el programa no tiene nada que hacer. Podría ponerse a dar vueltas sin ningún propósito, y eso desperdiciaría tiempo de CPU que un proceso de segundo plano u otro usua­ rio podrían necesitar. Una mejor solución es utilizar la llamada al sistema pause, que ordena a UNIX suspender el proceso hasta que llegue la siguiente señal. Llamadas al sistema para administración de subprocesos Las primeras versiones de UNIX no tenían subprocesos. Ese recurso se añadió muchos años después. En un principio se usaban muchos paquetes de subprocesos, pero la proliferación de tales paquetes dificultó mucho la escritura de código portátil. Al final, las llamadas al sistema empleadas para administrar subprocesos se estandarizaron como parte de POSIX (P1003.1c).

RkJQdWJsaXNoZXIy MjI4NDcx