Evolución del x86
Las CPU del tipo x86 han ido evolucionando y siempre se ha intentado buscar la compatibilidad. Así, han ido desarrollándose distintas arquitecturas de 16 bits, 32 bits y 64 bits. Es bueno conocer ésto no solo por motivos históricos, sino porque es la forma más directa de comprender los diversos modos de acceso a memoria en que pueden actuar los ordenadores modernos (Real, Protected, Long)
8086
Hecho hace 40 años (en 2021). Aun así, así es como empiezan arrancando todos los ordenadores incluso actualmente, para garantizar compatibilidad; nuestro ordenador emula un 8086 de 16 bits al arrancar.
Tiene un juego de instrucciones reducido. A pesar de ser la CPU y sus registros de 16 bits, tiene un direccionamiento sin embargo de 20 bits (ya que el bus de direcciones es de ese tamaño), o sea, puede direccionar hasta 1Mbyte de memoria. ¿Cómo lo hace?
El procesador tiene unos registros específicos CS, DS, SS, ES (también de 16 bits). Guardan un valor llamado segmento
Otro registro de 16 bits guarda un valor que se usa como offset (desplazamiento)
Entonces una dirección se puede poner como "segmento:offset", por ejemplo, ""FF2C:02BA" sería el byte que está en el segmento FF2C con el offset 02BA
Multiplicando por 16 (0x10) el valor del segmento (que hace que sea de 20 bits) y sumándole el offset se direcciona el Mbyte entero que nos referíamos. En el ejemplo y con las cuentas en hexadecimal, FF2C x 10 = FF2C0. FF2C0 + 02BA = FF57A
Curiosidades:
solapamiento. Hay muchas direcciones que se pueden generar de más de una forma
Bytes direccionables adicionales. Realmente somos capaces de direccionar algo más de 1MByte. A esos 65520 bytes más le llamaron memoria alta. Eso trajo mucha evolución en el software, pero eso es otra historia...
Se decidió que la primera instrucción ejecutable al arrancar sea FFFF:0000
Otra característica interesante es que se mapean las rutinas de gestión input / output de la BIOS en un lugar específico de la memoria y son directamente invocables. Incluso igualmente se mapea algún hardware habitual para permitir escribir directamente sobre él. Entonces, cuando le llega una petición al North bridge (recordemos que es el chipset que maneja el bus de direcciones) de una dirección física, decide mediante el mapa de memoria si va a la RAM, a la tarjeta gráfica, a la BIOS...
Hay que remarcar que en este modo solo hay cabida para un proceso a la vez. No hay ningún tipo de concurrencia, de protección de memoria, de privilegio... Así que un proceso debe acabar para dar inicio a otro.
80386
Salió al mercado 5 años después y ya manejaba una CPU de 32 bits; además el bus también direccionaba 32 bits, con lo que podía llegar a 4Gbytes de memoria. Introduce una nueva forma de direccionar la memoria (al dar herramientas hardware) y da soporte total a lo que se llama Modo Protegido. Características a destacar:
Se crean cuatro niveles de privilegio (llamados rings) en donde el ring 0 tiene acceso ilimitado a memoria, I/O y CPU (puede ejecutar cualquier instrucción) y el ring 3 es el más restringido. Se llaman también respectivamente "espacio de kernel" y "espacio de usuario". A todos los efectos, en x86 al final para facilitar la protección de memoria, solo se distingue el anillo 3 (modo usuario ) de los otros (modo supervisor / kernel). Otros sistemas enumeran y nombran 3 = Usuario, 2 = supervisor, 1 = ejecutivo y 0 = núcleo
Habilita la paginación (paging) como método de gestión de memoria
El mapeo de memoria física es similar al 8086, ahora se mapean para otras cosas aparte de lo anterior, más o menos 1Gbyte adicional para otras cosas más avanzadas de la placa base (PCI, ACPI, interfaces DMI, Bios avanzado...). O sea, que tampoco podríamos usar directamente los 4GBytes de RAM que pudiésemos pinchar en la placa.
Máquina de 64 bits (Pentium)
Son los más actuales a día de hoy (2021). Tienen una CPU de 64 bits y pueden direccionar muchísima memoria. Generalmente se usa menos bits de 64 en el bus de memoria porque no es necesario tanta (con 48 bits ya se podrían direccionar 256 Terabytes).
Los sistemas operativos se han adapatado específicamente para esta arquitectura y usar las nuevas instrucciones y particularidades del procesador. Sin embargo, no pierden la compatibilidad con los desarrollos hechos para las arquitecturas anteriores, con lo que se puede ordenar que trabaje en distintos modos. El modo más avanzado es Long Mode, pero instrucciones hechas para 32 bits fallarán, con lo que será necesario cambiar el modo en esos casos.
Última actualización