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

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

Saved successfully!

Ooh no, something went wrong!