Cargador (computación)

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

en sistemas informáticos a cargador es la parte de un sistema operativo responsable de cargar programas y bibliotecas. Es una de las etapas esenciales en el proceso de iniciar un programa, ya que coloca los programas en la memoria y los prepara para la ejecución. La carga de un programa implica mapear de memoria o copiar el contenido del archivo ejecutable que contiene las instrucciones del programa en la memoria, y luego llevar a cabo otras tareas preparatorias requeridas para preparar el ejecutable para ejecutarse. Una vez que se completa la carga, el sistema operativo inicia el programa pasando el control al código de programa cargado.

Todos los sistemas operativos que admiten la carga del programa tienen cargadores, aparte de sistemas informáticos altamente especializados que solo tienen un conjunto fijo de programas especializados. Los sistemas integrados generalmente no tienen cargadores, y en su lugar, el código se ejecuta directamente desde ROM o similar. Para cargar el sistema operativo en sí, como parte del arranque, se utiliza un cargador de arranque especializado. En muchos sistemas operativos, el cargador reside de forma permanente en la memoria, aunque algunos sistemas operativos que admiten la memoria virtual pueden permitir que el cargador se ubique en una región de memoria que sea concordante.

En el caso de los sistemas operativos que admiten la memoria virtual, el cargador puede no copiar el contenido de los archivos ejecutables en la memoria, sino que simplemente puede declarar al subsistema de memoria virtual que hay una asignación entre una región de memoria asignada a Contiene el código del programa en ejecución y el contenido del archivo ejecutable asociado. (Consulte el archivo mapeado de memoria). El subsistema de memoria virtual se considera que las páginas con esa región de memoria deben llenarse a pedido si la ejecución del programa realmente llega a esas áreas de memoria no llena. Esto puede significar que partes del código de un programa no se copian en la memoria hasta que se usan realmente, y el código no utilizado nunca se cargará en la memoria.

responsabilidades

En UNIX, el cargador es el controlador de la llamada del sistema eCMECVE () . Las tareas del cargador de unix incluyen:

  1. validación (permisiones, requisitos de memoria, etc.);
  2. memoria-mapping el objeto ejecutable del disco en la memoria principal;
  3. copiar los argumentos de línea de comandos en memoria virtual;
  4. inicialización de los registros (por ejemplo, el puntero de la pila);
  5. saltar al punto de entrada del programa (_start).

En Microsoft Windows 7 y superior, el cargador es la función ldrinitializethunk contenida en ntdll.dll, eso hace lo siguiente:

  1. inicialización de estructuras en el propio DLL (es decir, secciones críticas, listas de módulos);
  2. validación del ejecutable para carga;
  3. creación de un montón (a través de la función RtlCreateHeap);
  4. asignación de bloques variables de entorno y bloque PATH;
  5. adición de ejecutable y NTDLL a la lista de módulos (una lista doblemente conectada);
  6. carga de KERNEL32.DLL para obtener varias funciones importantes, por ejemplo BaseThreadInitThunk;
  7. la carga de las importaciones ejecutables (es decir, bibliotecas de enlace dinámico) recursivamente (ver las importaciones de las importaciones, sus importaciones y demás);
  8. en modo de depuración, elevación del punto de ruptura del sistema;
  9. inicialización de DLLs;
  10. recogida de basura;
  11. llamando NtContinue en el parámetro contextual dado a la función del cargador (es decir, saltar a RtlUserThreadStart, que comenzará el ejecutable)

Reubicación de cargadores

Algunos sistemas operativos necesitan reubicar cargadores, que ajustan las direcciones (punteros) en el ejecutable para compensar las variaciones en la dirección en la que comienza la carga. Los sistemas operativos que necesitan reubicar cargadores son aquellos en los que un programa no siempre se carga en la misma ubicación en el espacio de direcciones (virtual) y en las que los punteros son direcciones absolutas en lugar de desplazamientos de la dirección base del programa. Algunos ejemplos bien conocidos son el OS/360 de IBM para sus mainframes System/360, y sus descendientes, incluidos Z/OS para los mainframes Z/Architecture.

OS/360 & amp; Derivados

En OS/360 y los sistemas descendientes, la instalación del sistema operativo (privilegiado) se llama IewFetch, y es un componente interno del supervisor del sistema operativo, mientras que la aplicación del cargador (no privilegiada) puede realizar muchas de las mismas funciones, además de Los del editor de enlaces, y es completamente externo al supervisor del sistema operativo (aunque ciertamente usa muchos servicios de supervisor).

Iewfetch utiliza programas de canales altamente especializados, y es teóricamente posible cargar y reubicar a un ejecutable completo dentro de una revolución de los medios DASD (aproximadamente 16,6 ms máximo, 8,3 ms promedio, en " Legacy " 3,600 Unidades de rpm). Para los módulos de carga que exceden una pista de tamaño, también es posible cargar y reubicar todo el módulo sin perder una revolución de los medios.

iewfetch también incorpora instalaciones para las llamadas estructuras superpuestas, y que facilita ejecutar ejecutables potencialmente muy grandes en un modelo de memoria mínimo (tan pequeños como 44 kb en algunas versiones del sistema operativo, pero 88 kb y 128 kb son más comunes).

El núcleo del sistema operativo (la porción siempre residente del supervisor) está formateado de una manera compatible con una versión despojada de IewFetch. A diferencia de los ejecutables normales, el núcleo del sistema operativo es " disperso cargado ": Las partes del núcleo se cargan en diferentes porciones de memoria; En particular, se requieren ciertas tablas del sistema para residir por debajo de los 64 kb iniciales, mientras que otras tablas y código pueden residir en otro lugar.

La aplicación del editor de enlaces del sistema se llama IEWL. La función principal de IEWL es asociar módulos de carga (programas ejecutables) y módulos de objetos (la salida de, por ejemplo, ensambladores y compiladores), incluidas las llamadas automáticas " a bibliotecas (lenguaje de alto nivel " funciones incorporadas "), en un formato que IEWFetch puede cargar de manera más eficiente. Hay una gran cantidad de opciones de edición, pero para una aplicación convencional solo se emplean comúnmente algunas de ellas.

El formato del módulo de carga incluye un registro inicial de texto ", seguido inmediatamente por el registro de reubicación y/o control " Para ese registro de texto, seguido de más instancias de registro de texto y pares de registro de reubicación y/o control, hasta el final del módulo.

Los registros de texto suelen ser muy grandes; Los registros de reubicación y/o control son pequeños ya que los tres búferes de registro de reubicación y/o control de Iwewfetch se fijan en 260 bytes (los registros de reubicación y/o control más pequeños son ciertamente posibles, pero 260 bytes son los máximos posibles, e Iewl Asegura que esta limitación se cumpla, al insertar registros de reubicación adicionales, según sea necesario, antes del siguiente registro de texto, si es necesario; en este caso especial, la secuencia de registros puede ser:..., registro de texto, registro de reubicación,..., registro de control, registro de texto,...).

Un byte especial dentro del búfer de registro de reubicación y/o control se usa como un giro de bit desactivado " área de comunicación, y se inicializa a un valor único. La lectura CCW para ese registro de reubicación y/o control tiene el conjunto de bits de interrupción controlado del programa. Por lo tanto, se notifica al procesador cuando el canal ha accedido a ese CCW a través de una salida especial de iOS. En este punto, el procesador ingresa al spin de bit desactivado " bucle (a veces llamado " el bucle más corto del mundo "). Una vez que ese byte cambia de su valor inicializado, la CPU sale del giro de bit y se produce la reubicación, durante el " Gap " dentro de los medios entre el registro de reubicación y/o control y el siguiente registro de texto. Si la reubicación se termina antes del siguiente registro, el NOP CCW después de la lectura se cambiará a un TIC, y la carga y la reubicación continuará usando el siguiente búfer; Si no es así, el canal se detendrá en el NOP CCW, hasta que IEWFetch lo reinicie a través de otra salida especial de iOS. Los tres búferes están en una cola circular continua, cada una apuntando a su siguiente, y el último apuntando al primero, y tres buffers se reutilizan constantemente como los ingresos de carga y reubicación.

iewfetch puede, por lo tanto, cargar y reubicar un módulo de carga de cualquier tamaño práctico, y en el tiempo mínimo posible.

Enlacadores dinámicos

Los cargadores de enlace dinámico son otro tipo de cargador que cargan y enlazan las bibliotecas compartidas (como archivos, archivos.dll o archivos dylib) a los programas de ejecución ya cargados.

Cuando dichas bibliotecas compartidas se pueden compartir mediante múltiples procesos, con solo una sola copia del código compartido que posiblemente aparece en una dirección diferente (virtual) en cada espacio de direcciones del proceso, se requiere el código en la biblioteca compartida Para ser reubicable, es decir, la biblioteca solo debe usar direcciones internas de base de segmento autor-relativa o de código de código en todo momento. Algunos procesadores tienen instrucciones que pueden usar referencias de código autorrealizadas para facilitar esto.

Contenido relacionado

Historia de la cámara

La historia de la cámara comenzó incluso antes de la introducción de la fotografía. Las cámaras evolucionaron desde la cámara oscura a través de muchas...

Tubo de vacío

Un tubo de vacío, tubo de electrones o válvula termoiónica, es un dispositivo que controla el flujo de corriente eléctrica en un alto vacío entre...

Señales de humo

La señal de humo es una de las formas más antiguas de comunicación a larga distancia. Es una forma de comunicación visual utilizada a larga distancia. En...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save