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 />
Pasos en el cambio <strong>de</strong> contexto <strong>de</strong> un proceso:<br />
1. Decidir si realizar un cambio <strong>de</strong> contexto y si éste es permisible ahora.<br />
<strong>2.</strong> Salvar el contexto <strong>de</strong>l proceso antiguo.<br />
3. Buscar el mejor proceso para planificar (scheduler) su ejecución.<br />
4. Restaurar su contexto.<br />
• Abortive Return. Finalización anormal <strong>de</strong> la secuencia <strong>de</strong> ejecución <strong>de</strong>l kernel ⇒ Reejecutar <strong>de</strong>s<strong>de</strong><br />
el contexto previo save_context {crea una nueva capa <strong>de</strong> contexto}, setjmp {almacena la capa <strong>de</strong><br />
contexto en la u-Area}, longjmp {restaura la capa <strong>de</strong> contexto <strong>de</strong>s<strong>de</strong> la u-Area}.<br />
• Copia <strong>de</strong> datos en el kernel ⇔ Usuario. Los modos kernel y usuario son excluyentes, pero<br />
necesitan intercambiar datos (Usuario ⇒ kernel: parámetros, kernel ⇒ Usuario: resultados).<br />
<strong>2.</strong>6. MANIPULACIÓN <strong>DE</strong>L ESPACIO <strong>DE</strong> DIRECCIONES <strong>DE</strong> UN<br />
PROCESO. ALGORITMOS.<br />
• Hemos visto como el kernel realiza cambios <strong>de</strong> contexto metiendo y sacando contextos <strong>de</strong> la pila,<br />
pero viendo el contexto <strong>de</strong> usuario como un objeto estático que no cambia durante los cambios <strong>de</strong><br />
contexto. Sin embargo, hay varias llamadas al sistema que manipulan el espacio virtual <strong>de</strong> un<br />
proceso. Para revisar estas llamadas al sistema necesitamos <strong>de</strong>finir las estructuras que <strong>de</strong>scriben las<br />
regiones y algunos algoritmos básicos que serán utilizados por las llamadas al sistema.<br />
• El espacio <strong>de</strong> direcciones <strong>de</strong> un proceso ⇒ Representación lógica como regiones. Este espacio <strong>de</strong><br />
direccionamiento incluye:<br />
– El código <strong>de</strong>l proceso.<br />
– Los datos <strong>de</strong>l proceso, que se <strong>de</strong>scompone en dos segmentos, por una parte data, que<br />
contiene las variables inicializadas, y por otra parte bss que contiene las variables no<br />
inicializadas.<br />
– La pila utilizada por el proceso.<br />
• Cada región <strong>de</strong> memoria se caracteriza por varios atributos:<br />
– Sus direcciones <strong>de</strong> inicio y fin.<br />
– Los <strong>de</strong>rechos <strong>de</strong> acceso que tiene asociada.<br />
– El objeto asociado (por ejemplo, un archivo ejecutable que contiene el código ejecutable por<br />
el proceso).<br />
• Tabla <strong>de</strong> regiones.<br />
– Información necesaria para <strong>de</strong>scribir una región (<strong>de</strong>scriptor <strong>de</strong> regiones). Los campos más<br />
importantes son los siguientes:<br />
+ Puntero al inodo <strong>de</strong>l archivo cuyo contenido está cargado inicialmente en la región.<br />
+ Tipo <strong>de</strong> la región (texto (código), memoria compartida, datos privados o pila).<br />
+ Tamaño <strong>de</strong> la región.<br />
+ Localización <strong>de</strong> la región en memoria física.<br />
+ Estado <strong>de</strong> la región ⇒ combinación <strong>de</strong>:<br />
* Bloqueada.<br />
* En <strong>de</strong>manda.<br />
* En proceso a ser cargada en memoria (cargándose).<br />
* Válida (cargada en memoria).<br />
+ Cuenta <strong>de</strong> referencia ⇒ número <strong>de</strong> procesos que la referencian (región compartida).<br />
– Organización <strong>de</strong> los <strong>de</strong>scriptores <strong>de</strong> regiones organizados en Linux. Se mantiene una lista <strong>de</strong><br />
<strong>de</strong>scriptores organizados como un árbol AVL (árbol equilibrado en memoria), lo que permite<br />
reducir la complejidad <strong>de</strong> la búsqueda <strong>de</strong> O(n) a O(log n). Destacar que a partir <strong>de</strong> la versión<br />
<strong>2.</strong>4.9 <strong>de</strong>l kernel <strong>de</strong> Linux se utilizan árboles roji-negros para acelerar las búsquedas <strong>de</strong> un<br />
<strong>de</strong>scriptor <strong>de</strong> región particular.<br />
• Operaciones que manipulan regiones:<br />
– Crear / suprimir regiones <strong>de</strong> memoria.<br />
– Bloquear / <strong>de</strong>sbloquear una región para prevenit accesos mientras se manipula una región.<br />
– Asignar / liberar una región. Asignar ⇒ mover <strong>de</strong> la lista <strong>de</strong> regiones libres a la lista <strong>de</strong><br />
regiones activas, iniciándola. Liberar ⇒ liberar la región y los recursos asociados a ella.<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>2.</strong>25