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
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>7.4.1. Estructura <strong>de</strong> un Archivo Ejecutable (Figura <strong>2.</strong>14).<br />
Básicamente todo el programa consta <strong>de</strong> una cabecera principal y una serie <strong>de</strong> secciones, cada una <strong>de</strong> las<br />
cuales (secciones) se compone <strong>de</strong> una cabecera y una zona <strong>de</strong> datos. Los programas son generados por el<br />
linkador (enlazador, programa ld) y sus partes son las siguientes:<br />
• La cabecera principal <strong>de</strong>scribe:<br />
– Cuántas secciones hay en el archivo (programa).<br />
– La dirección virtual <strong>de</strong> inicio o comienzo para la ejecución <strong>de</strong>l proceso.<br />
– El número mágico <strong>de</strong>l programa que i<strong>de</strong>ntifica qué tipo <strong>de</strong> archivo es (ejecutable).<br />
• Las cabeceras <strong>de</strong> sección <strong>de</strong>scriben cada una <strong>de</strong> las secciones <strong>de</strong>l archivo, como:<br />
– El tamaño <strong>de</strong> la sección.<br />
– El rango <strong>de</strong> direcciones virtuales que la sección <strong>de</strong>bería ocupar cuando se ejecute el archivo.<br />
– Otra información, como por ejemplo, el tipo <strong>de</strong> sección.<br />
• Las secciones que contienen el código <strong>de</strong>l programa y las variables globales.<br />
• Otras secciones que pue<strong>de</strong>n contener tablas <strong>de</strong> símbolos y otros datos útiles para el <strong>de</strong>purado, etc.<br />
<strong>2.</strong>7.4.<strong>2.</strong> Acciones: exec(nombre_archivo_ejecutable, parámetros).<br />
• Acce<strong>de</strong> al archivo.<br />
• Verifica que es ejecutable, regular y tiene el permiso <strong>de</strong>l usuario para ejecutarlo.<br />
• Lee la cabecera <strong>de</strong>l archivo.<br />
• Almacena parámetros y libera recursos <strong>de</strong> memoria que forman el contexto <strong>de</strong>l nivel <strong>de</strong> usuario <strong>de</strong>l<br />
proceso que lo ejecuta.<br />
• Para cada región especificada en el módulo <strong>de</strong> carga:<br />
– Asignar región.<br />
– Vincular región.<br />
– Cargar región.<br />
• Almacena los parámetros <strong>de</strong>l exec en la pila <strong>de</strong>l usuario.<br />
• Borra las direcciones <strong>de</strong> los manejadores <strong>de</strong> señales <strong>de</strong>l usuario <strong>de</strong>l área <strong>de</strong> usuario (u-Area).<br />
• Inicializa los registros <strong>de</strong> usuario salvados (contexto <strong>de</strong> nivel <strong>de</strong> registros), para po<strong>de</strong>r volver a<br />
modo usuario.<br />
• Libera el inodo <strong>de</strong>l archivo ejecutable.<br />
algoritmo exec(archivo, argums, env)<br />
{<br />
Obtener i-nodo asociado al archivo (namei);<br />
Controlar que sea un ejecutable, permisos, etc.;<br />
Leer el layout <strong>de</strong>l archivo (<strong>de</strong>scripción <strong>de</strong>l ejecutable: número <strong>de</strong> secciones, dirección <strong>de</strong> inicio <strong>de</strong><br />
ejecución, tipo <strong>de</strong> ejecutable. Para cada sección: tamaño, dirección virtual que ocupa...). Esta parte<br />
<strong>de</strong>l algoritmo también se <strong>de</strong>be ocupar <strong>de</strong> cargar el código, inicializar variables, etc);<br />
Copiar argums al espacio <strong>de</strong>l kernel. Esto se <strong>de</strong>be a que los argums pertenecen al espacio <strong>de</strong><br />
direcciones <strong>de</strong>l usuario (user), y este espacio va a ser liberado en los siguientes pasos. La<br />
implementación se pue<strong>de</strong> realizar en la pila <strong>de</strong>l kernel, pero si hay limitaciones en el tamaño <strong>de</strong> ésta<br />
se <strong>de</strong>be implementar sobre páginas <strong>de</strong>dicadas a ellas (recor<strong>de</strong>mos que el tamaño <strong>de</strong> los argums<br />
pue<strong>de</strong> ser relativamente gran<strong>de</strong>);<br />
Para cada región asociada al proceso.<br />
Desligar la región (<strong>de</strong>attachreg). Debe haber un tratamiento especial para las regiones <strong>de</strong> texto<br />
compartidas. También observar que en este punto el nuevo proceso no tiene contexto <strong>de</strong><br />
usuario, así que cualquier error que se <strong>de</strong>tecte más a<strong>de</strong>lante <strong>de</strong>be abortar via una señal;<br />
Departamento <strong>de</strong> Lenguajes y Computación. <strong>Universidad</strong> <strong>de</strong> Almería Página <strong>2.</strong>41