Dentro del núcleo Linux 2.4 - Arranque SMP en x86
Tutorial creado por Tigran Aivazian. Extraido de: http://es.tldp.org/Manuales-LuCAS/DENTRO-NUCLEO-LINUX/dentro-nucleo-linux-html/
14 de Febrero de 2006
Linux
6 - Arranque SMP en x86
En SMP, el BP (Procesador de arranque) va a través de la secuencia normal del sector de arranque, configuración, etc... hasta que llega a start_kernel(), y entonces sobre smp_init() y especialmente src/i386/kernel/smpboot.c:smp_boot_cpus(). La función smp_boot_cpus() entra en un buche para cada apicid (identificador de cada APIC), hasta NR_CPUS, y llama a do_boot_cpu() en él. Lo que hace do_boot_cpu() es crear (esto es: fork_by_hand) una tarea vacía para la cpu de destino y escribe en localizaciones bien conocidas definidas por la especificación Intel MP (0x467/0x469) el EIP del código del trampolín encontrado en trampoline.S. Entonces genera STARTUP IPI a la cpu de destino la cual hace que este AP (Procesador de Aplicación) ejecute el código en trampoline.S.
La CPU de arranque crea una copia del código trampolín para cada CPU en la memoria baja. El código del AP escribe un número mágico en su propio código, el cual es verificado por el BP para asegurarse que el AP está ejecutando el código trampolín. El requerimiento de que el código trampolín tenga que estar en la memoria baja es forzado por la especificación Intel MP.
El código trampolín simplemente establece el registro %bx a uno, entra en modo protegido y salta a startup_32, que es la entrada principal a arch/i386/kernel/head.S.
Ahora, el AP empieza ejecutando head.S y descubriendo que no es un BP, se salta el código que limpia BSS y entonces entra en initialize_secondary(), el cual justamente entra en la tarea vacía para esta CPU - recalcar que init_tasks[cpu] ya había sido inicializada por el BP ejecutando do_boot_cpu(cpu).
Destacar que init_task puede ser compartido, pero cada hilo vacío debe de tener su propio TSS. Este es el motivo por el que init_tss[NR_CPUS] es una array.
La CPU de arranque crea una copia del código trampolín para cada CPU en la memoria baja. El código del AP escribe un número mágico en su propio código, el cual es verificado por el BP para asegurarse que el AP está ejecutando el código trampolín. El requerimiento de que el código trampolín tenga que estar en la memoria baja es forzado por la especificación Intel MP.
El código trampolín simplemente establece el registro %bx a uno, entra en modo protegido y salta a startup_32, que es la entrada principal a arch/i386/kernel/head.S.
Ahora, el AP empieza ejecutando head.S y descubriendo que no es un BP, se salta el código que limpia BSS y entonces entra en initialize_secondary(), el cual justamente entra en la tarea vacía para esta CPU - recalcar que init_tasks[cpu] ya había sido inicializada por el BP ejecutando do_boot_cpu(cpu).
Destacar que init_task puede ser compartido, pero cada hilo vacío debe de tener su propio TSS. Este es el motivo por el que init_tss[NR_CPUS] es una array.
Valora este capítulo:
Autor y licencia de 'Dentro del núcleo Linux 2.4 - Arranque SMP en x86'
|
Opiniona sobre 'Dentro del núcleo Linux 2.4 - Arranque SMP en x86' (4)
Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.
Opina sobre este tutorial |
Wikis relacionados con 'Dentro del núcleo Linux 2.4 - Arranque SMP en x86'
Este documento describe cómo hacer el enmascarado (masqueradinq), proxy transparente, reenvío de puertos (port forwarding),...
Más »
Aprenderás a acelerar el arranque de tu ordenador y a eliminar algunos virus que se...
Más »
Truco para conseguir crear una imagen de arranque en Linux utilizando Frame Buffer.
La fijación de precios está convirtiéndose en un modo de vida para muchos minoristas y...
Más »
Los discos de arranque de Linux, aparte de poder ser usados en el proceso de...
Más »
