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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

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

• Algunos i<strong>de</strong>ntificadores <strong>de</strong> usuario (UID) para <strong>de</strong>terminar los privilegios <strong>de</strong>l proceso. Por ejemplo,<br />

el campo UID <strong>de</strong>limita a qué proceso pue<strong>de</strong> enviar señales el proceso actual y qué procesos pue<strong>de</strong>n<br />

enviárselas a él. Cada señal se correspon<strong>de</strong> con un evento particular, y permite a los procesos<br />

reaccionar a los eventos provocados por ellos mismos o por otros procesos, es <strong>de</strong>cir, las señales son<br />

interrupciones software que pue<strong>de</strong>n ser enviadas a un proceso para informarle <strong>de</strong> algún evento<br />

asíncrono o situación especial.<br />

• I<strong>de</strong>ntificadores <strong>de</strong>l proceso (PID) que especifican las relaciones <strong>de</strong> unos procesos con otros. Estos<br />

i<strong>de</strong>ntificadores son establecidos cuando se crea el proceso mediante una llamada fork.<br />

• Descriptores <strong>de</strong> eventos, por ejemplo cuando el proceso está en el estado “durmiendo” y que serán<br />

utilizados al “<strong>de</strong>spertar”.<br />

• Parámetros <strong>de</strong> planificación, que permiten al kernel <strong>de</strong>terminar el or<strong>de</strong>n en el que los procesos<br />

pasan <strong>de</strong>l estado “ejecutándose en modo kernel” a “ejecutándose en modo usuario”.<br />

• Un campo <strong>de</strong> señales que enumera las señales que han sido recibidas, pero que no han sido tratadas<br />

todavía.<br />

• Tabla <strong>de</strong> regiones <strong>de</strong> ducho proceso, que representan las regiones <strong>de</strong> memoria contenidas en el<br />

espacio <strong>de</strong> direcciones <strong>de</strong> un proceso.<br />

• Algunos temporizadores,<br />

− Que indican:<br />

+ Tiempo <strong>de</strong> ejecución <strong>de</strong>l proceso.<br />

+ Utilización <strong>de</strong> recursos <strong>de</strong>l kernel.<br />

− Estos campos se utilizan también para:<br />

+ Llevar la contabilidad <strong>de</strong> los procesos.<br />

+ Calcular la prioridad dinámica que se le asigna a cada proceso y que luego utilizará el<br />

scheduler para <strong>de</strong>cidir qué proceso <strong>de</strong>be ser ejecutado por el procesador (CPU).<br />

+ Aquí también hay un temporizador que pue<strong>de</strong> programar el usuario y que se utiliza<br />

para enviarle la señal SIGALRM.<br />

<strong>2.</strong><strong>2.</strong>1.1. Tabla <strong>de</strong> Procesos en Linux.<br />

En Linux, inicialmente, la Tabla <strong>de</strong> Procesos era un vector <strong>de</strong> tamaño fijo <strong>de</strong> task_strcut ,<br />

con lo que el número máximo <strong>de</strong> procesos estaba limitado. Actualmente, la Tabla <strong>de</strong> Procesos es realmente<br />

una lista doblemente enlazada mediante los punteros next_task y prev_task.<br />

Estructura <strong>de</strong>l <strong>de</strong>scriptor <strong>de</strong> procesos en Linux (PCB = Process Control Block).<br />

En Linux el PCB (Process Control Block) es una estructura <strong>de</strong>nominada task_strcut en el archivo<br />

inclu<strong>de</strong>/linux/sched.h. En ella aparece tipo <strong>de</strong> información sobre cada uno <strong>de</strong> los procesos. Muchas partes <strong>de</strong>l<br />

sistema operativo hacen uso <strong>de</strong> esta estructura <strong>de</strong> datos, por lo que es necesario conocer los campos más<br />

importantes <strong>de</strong> task_struct.<br />

• volatile long state: Estado <strong>de</strong>l proceso (activo o bloqueado). En la línea 76 <strong>de</strong> inclu<strong>de</strong>/linux/sched.h<br />

están los posibles valores que pue<strong>de</strong> tomar el estado.<br />

• unsigned long flags: Estado <strong>de</strong>tallado <strong>de</strong>l proceso, a nivel <strong>de</strong>l kernel.<br />

• long counter: Número <strong>de</strong> “ticks” (ciclos <strong>de</strong> reloj) que restan al proceso actual para que se le acabe<br />

el quantum.<br />

• long priority: Prioridad estática <strong>de</strong>l proceso. A partir <strong>de</strong> este valor, el scheduler asigna el valor <strong>de</strong><br />

counter cada vez que se agota.<br />

• struct task_struct *next_run, *prev_run: Punteros para implementar la lista <strong>de</strong> procesos activos. El<br />

scheduler busca en esta lista cada vez que tiene que elegir un proceso nuevo para ejecutar. Cuando<br />

un proceso se suspenda, se extraerá inmediatamente <strong>de</strong> esta lista.<br />

• int exit_co<strong>de</strong>, exit_signal: Contiene el valor <strong>de</strong> terminación <strong>de</strong> un proceso, en caso <strong>de</strong> que haya<br />

finalizado mediante la llamada al sistema exit(2). Si termina por una señal, contendrá el número <strong>de</strong><br />

señal que lo mató.<br />

• int pid: Número i<strong>de</strong>ntificador <strong>de</strong>l proceso. Cada proceso tiene un PID distinto.<br />

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

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

Saved successfully!

Ooh no, something went wrong!