12.10.2014 Views

TEMA 2. GESTIÓN DE PROCESOS - Universidad de Almería

TEMA 2. GESTIÓN DE PROCESOS - Universidad de Almería

TEMA 2. GESTIÓN DE PROCESOS - Universidad de Almería

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Diseño <strong>de</strong> Sistemas Operativos<br />

Tema <strong>2.</strong> Gestión <strong>de</strong> Procesos<br />

<strong>2.</strong>9.5. Funciones <strong>de</strong> Tiempo.<br />

En este apartado vamos a dar una introducción al estudio <strong>de</strong> cómo consultar y controlar los tiempos<br />

asociados a un proceso. Si bien UNIX, no es un sistema para aplicaciones en tiempo real, en condiciones <strong>de</strong><br />

baja carga don<strong>de</strong> no está congestionado podremos imponerle a nuestros programas que se ejecuten con los<br />

tiempos <strong>de</strong> respuesta a<strong>de</strong>cuados. Hay que tener en cuenta que una respuesta en tiempo real no significa<br />

solamente que nuestro programa se ejecute muy rápido (para simular procesos físicos), sino también que<br />

seamos capaces <strong>de</strong> controlar el tiempo para dar la respuesta en el momento exacto y no antes (por ejemplo,<br />

un programa para simular un reloj, en don<strong>de</strong> nuestra respuesta se tiene que dar cada segundo, <strong>de</strong> nada nos<br />

vale darla más <strong>de</strong>prisa).<br />

A continuación se van a enumerar brevemente los mecanismos para dotar a nuestros programas <strong>de</strong> una<br />

temporización que va a estar impuesta por la naturaleza física <strong>de</strong>l proceso que intentamos simular.<br />

• Lectura <strong>de</strong> la fecha <strong>de</strong>l sistema. stime().<br />

• Fijar la fecha <strong>de</strong>l sistema. time(), gettimeofday() y settimeofday().<br />

• Tiempos <strong>de</strong> ejecución asociados a un proceso. times().<br />

• Temporizadores. alarm(), getitimer(), setitimer() y localtime().<br />

<strong>2.</strong>9.6. Señales en Linux.<br />

La gestión <strong>de</strong> señales es un mecanismo existente <strong>de</strong>s<strong>de</strong> las primeras versiones <strong>de</strong> UNIX. Permite a los<br />

procesos reaccionar a los eventos provocados por ellos mismos o por otros procesos, siendo este mecanismo<br />

similar a la gestión <strong>de</strong> interrupciones lógicas. La semántica <strong>de</strong> las llamadas al sistema que gestionan las<br />

señales en Linux es la <strong>de</strong> la norma POSIX. Sin embargo, la gestión <strong>de</strong> las señales existía en los sistemas<br />

UNIX mucho antes <strong>de</strong> la <strong>de</strong>finición <strong>de</strong> esta norma, por lo que existe un cierto número <strong>de</strong> llamadas al sistema<br />

no POSIX <strong>de</strong>finidas a este efecto. Estas llamadas al sistema aparecieron en las dos clases <strong>de</strong> sistemas UNIX,<br />

System V y BSD. En ocasiones tienen los mismos nombres pero semánticas diferentes. A fin <strong>de</strong> ser lo más<br />

completo posible y permitir la portabilidad <strong>de</strong> un mayor número <strong>de</strong> programas, Linux implementas diferentes<br />

semánticas. En principio, se utiliza la semántica <strong>de</strong> System V pero la inclusión <strong>de</strong>l archivo <strong>de</strong> cabecera<br />

bsd/signal.h en lugar <strong>de</strong> signal.h en el momento <strong>de</strong> la compilación <strong>de</strong> programas y ocasionalmente la<br />

inclusión <strong>de</strong> la librería libbsd.a en el momento <strong>de</strong>l linkado (enlazado) les permite respetar la semántica <strong>de</strong> los<br />

sistemas BSD.<br />

Emisión <strong>de</strong> una señal a un proceso o a un grupo <strong>de</strong> procesos.<br />

int kill(pid_t pid, int sig);<br />

int killpg(int pgrp, int sig);<br />

int raise(int sig); Esta función es equivalente a kill(getpid(), sig);<br />

Desviación <strong>de</strong> una señal, modificando el comportamiento pre<strong>de</strong>terminado <strong>de</strong> una señal.<br />

void (*signal(int signum, void (*handler) (int))) (int);<br />

Espera <strong>de</strong> una señal, suspendiendo el proceso que llama hasta la llegada <strong>de</strong> una señal cualquiera.<br />

int pause(void);<br />

Los grupos <strong>de</strong> señales. Es posible suspen<strong>de</strong>r o bloquear varias señales simultáneamente, siendo necesario<br />

que las señales sean gesionadas por grupo<br />

int sigemptyset(sigset_t *set);<br />

int sigfillset(sigset_t *set);<br />

int sigaddset(sigset_t *set, conts int signum);<br />

int sig<strong>de</strong>lset(sigset_t *set, conts int signum);<br />

int sigismember(conts sigset_t *set, conts int signum);<br />

Interrupción <strong>de</strong> las llamadas al sistema.<br />

int siginterrupt(int sig, int flag);<br />

Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>2.</strong>58

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!