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
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