Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
Inicio del sistema
Gunnar Wolf
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
Índice
1
Introducción
2 La carga inicial
3 Reconociendo el entorno
4
Inicio del espacio de usuario
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
Enfocada a lo específico
Voy a enfocar esta presentación al inicio de un sistema Linux
Nos da el mayor detalle acerca del proceso
Guarda bitácora de toda la información de inicio
Permite implementaciones competitivas de subsistemas (y
permite un debate amplio, rico al respecto)
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
¿Es tan difícil?
La arquitectura esquemática básica de una computadora es
bastante trivial
Cargar un sistema operativo. . . Tal vez no tanto
Nos desviaremos brevemente del programa formal de la
materia para comprender qué es lo que ocurre en los primeros
instantes
Buscando entender hasta el punto en que tenemos un sistema
usable
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
Índice
1
Introducción
2 La carga inicial
3 Reconociendo el entorno
4
Inicio del espacio de usuario
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
Encendiendo la computadora: Alcance del BIOS
Verificación de sanidad del sistema (POST)
North Bridge CPU+RAM (arquitectura von Neumann)
South Bridge Dispositivos, componentes adicionales (USB,
PCI, red, SATA, etc.)
Enumeración básica de dispositivos
Selección del dispositivo de arranque
Carga del primer sector del dispositivo seleccionado
Verificación de integridad del código a ejecutar (lo veremos a
detalle la siguiente sesión)
Transferencia de control a los elementos provistos por el
usuario (sistema operativo)
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
¿Por qué tenemos programas cargadores?
En arquitecturas derivadas de Intel, el BIOS opera en modo
real
Esto es, con un límite de 640Kb RAM, según la especificación
de la PC de 1981
En años recientes, se va migrando de BIOS a EFI → Veremos
la próxima clase lo que eso conlleva
El conocimiento del BIOS del sistema es muy limitado
Su especificación no sabe más que pedir el primer sector (512
bytes) del disco duro
Cualquier programa que cargue, debe caber en 512 bytes
De ahí que tengamos cargadores de inicio (boot loaders)
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
Arquitecturas con entornos de inicio inteligentes
Históricamente ha habido arquitecturas que han ofrecido
entornos de arranque inteligentes
Entornos de arranque programables (típicamente basadas en
Forth)
Arquitecturas que lo emplea(ba)n: Sparc, Alpha, PowerPC
Capacidad de alterar parámetros para el inicio del sistema
Especificar parámetros al kernel
Elegir un distinto dispositivo de arranque
Diagnósticos básicos del sistema
Operaciones básicas de red
Muchas de estas capacidades han ido integrándose al BIOS
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
Los cargadores de inicio
Prácticamente cualquier sistema operativo moderno depende
de un cargador de inicio
Estos han ido creciendo para convertirse en verdaderos
mini-sistemas operativos
Partcularmente en el área de sistemas de archivo y de E/S
Enumeración de dispositivos (no siempre heredado del BIOS)
Comprensión de distintos sistemas de archivos (incluso
abstracciones como RAID/LVM)
Análisis del estado de la última carga (sugiriendo modo a
prueba de fallos)
Edición de los parámetros de invocación del kernel
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
El trabajo del cargador
Por fin, el trabajo del cargador típicamente se reduce a:
Informar al usuario que todo va bien
Reconocer el entorno
Ubicar y cargar la imágen del sistema operativo en el medio de
arranque
Posiblemente también de un disco de inicio mínimo
Especificar parámetros de inicio
Transferir la ejecución (y suicidarse)
. . . Y entramos en el terreno del sistema operativo
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
Índice
1
Introducción
2 La carga inicial
3 Reconociendo el entorno
4
Inicio del espacio de usuario
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
La fuente de nuestros datos
Bitácora en /var/log/dmesg
La bitácora tiene un timestamp en cada línea de su bitácora,
con resolución de microsegundos
Eliminada de lo que aquí muestro para que quepa mejor en
pantalla
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
Primeros pasos: ¿Dónde estoy?
¿La arquitectura es capaz de correr el núcleo en cuestión?
Linux version 3.2.0-4-amd64 (
[email protected])
(gcc version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Debian
3.2.35-2
Command line: BOOT_IMAGE=/vmlinuz-3.2.0-4-amd64
root=/dev/mapper/mosca-root ro vga=791 quiet splash
¿Cuál es el mapa de memoria?
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009ec00 (usable)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cd9ffc00 (usable)
BIOS-e820: 00000000cd9ffc00 - 00000000cda53c00 (ACPI NVS)
BIOS-e820: 00000000cda53c00 - 00000000cda55c00 (ACPI data)
BIOS-e820: 00000000cda55c00 - 00000000d0000000 (reserved)
(...)
BIOS-e820: 00000000ffb00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000128000000 (usable)
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
Características base del equipo
Sigue descubriendo información sobre el CPU y la memoria
NX (Execute Disable) protection: active
(...)
found SMP MP-table at [ffff8800000fe710] fe710
ACPI: XSDT 00000000000fc7f0 0008C (v01 DELL
B10K
00000015
ASL 00000061)
(...)
No NUMA configuration found
Faking a node at 0000000000000000-0000000128000000
Initmem setup node 0 0000000000000000-0000000128000000
(...)
ACPI: IRQ0 used by override.
ACPI: IRQ2 used by override.
ACPI: IRQ9 used by override.
Using ACPI (MADT) for SMP configuration information
ACPI: HPET id: 0x8086a701 base: 0xfed00000
SMP: Allowing 8 CPUs, 6 hotplug CPUs
(...)
Booting paravirtualized kernel on bare hardware
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
Inicia la ejecución y recorrida de los buses
Memory: 3880132k/4849664k available (3418k kernel code, 825804k
absent, 143728k reserved, 3319k data, 576k init)
Hierarchical RCU implementation.
RCU dyntick-idle grace-period acceleration is enabled.
NR_IRQS:33024 nr_irqs:744 16
Console: colour dummy device 80x25
console [tty0] enabled
hpet clockevent registered
Fast TSC calibration using PIT
Detected 2992.557 MHz processor.
Hasta este punto, todo ocurre con t=0.000000
No es que sea un proceso tan instantáneo, sino que el kernel
no ha comenzado a registrar el paso del tiempo
Calibrating delay loop (skipped), value calculated using timer
frequency.. 5985.11 BogoMIPS (lpj=11970228)
Y acá el tiempo inicia.
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
Características de ejecución de procesos en sistema
Límites y subsistemas de control
pid_max: default: 32768 minimum: 301
Security Framework initialized
AppArmor: AppArmor disabled by boot time parameter
Dentry cache hash table entries: 524288 (order: 10, 4194304
bytes)
Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes)
Mount-cache hash table entries: 256
Initializing cgroup subsys cpuacct
Initializing cgroup subsys memory
Initializing cgroup subsys devices
Initializing cgroup subsys freezer
Initializing cgroup subsys net_cls
Initializing cgroup subsys blkio
Initializing cgroup subsys perf_event
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
Vamos subiendo de nivel: Dispositivos base
Fundamental para multitarea: Cómo hablar con el temporizador,
manejo de interrupciones
..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
(...)
NMI watchdog enabled, takes one hw-pmu counter.
Brought up 2 CPUs
Total of 2 processors activated (12011.18 BogoMIPS).
Y aquí (0.29s) comienzan a activarse los subsistemas que empleará
el usuario
devtmpfs: initialized
(...)
NET: Registered protocol family 16
(...)
[Firmware Bug]: ACPI: BIOS _OSI(Linux) query ignored
ACPI: Interpreter enabled
ACPI: (supports S0 S1 S3 S4 S5)
Gunnar Wolf
Inicio del sistema
Introducción
La carga inicial
Reconociendo el entorno
Inicio del espacio de usuario
Comienza enumeración de dispositivos
Primer bus en ser barrido: PCI. Proceso largo (0.46s–1.9s)
PCI: Using host bridge windows from ACPI; if necessary, use
"pci=nocrs" and report a bug
ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])
pci_root PNP0A03:00: host bridge window [io
pci_root PNP0A03:00: host bridge window [io
pci_root PNP0A03:00: host bridge window [mem
0x0000-0x0cf7]
0x0d00-0xffff]
0x000a0000-0x000bffff]
pci_root PNP0A03:00: host bridge window [mem
0x000c0000-0x000effff]
(...)
pci 0000:00:00.0: [8086:2e10] type 0 class 0x000600
pci 0000:00:01.0: [8086:2e11] type 1 class 0x000604
pci 0000:00:01.0: PME# supported from D0 D3hot D3cold
(...)
ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 6 7 9 10 *11 12 15)
ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 *
Comentarios de: Inicio del sistema (0)
No hay comentarios