Procesadores de 64 bits Técnicas Digitales III Ing. Gustavo Nudelman 2013 Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Introducción • Desarrollada por AMD en 2003 con el modelo Opteron, continuando con el Athlon para ser luego tomado por Intel en los modelos de PIV • Al igual que el modo protegido, para trabajar en 64 bits debemos activar una unidad del procesador a fin de pasar a “modo largo” o modo IA32e • Dicho modo se habilita mediante el bit LME (long mode enable) del registro EFER (Extended Feature Enable Register) • El modo largo, posee 2 sub-modos de operación: • “Compatibility mode”: para ejecutar código compatible de IA32 • “64-bit mode”: para ejecutar código de 64 bits • El sub-modo se especifica mediante al bit 5 y 6 (D/B y reservado en IA32) del 6to byte del descriptor de segmento (00=16; 01=32; 10=64; 11=reservado). • Para pasar de sub-modo (Dentro del modo largo) debemos cambiar de segmento de código Universidad Tecnológica Nacional - Facultad Regional Buenos Aires AMD64 / IA32e - Modos de operación Legacy mode Universidad Tecnológica Nacional - Facultad Regional Buenos Aires AMD64 / IA32e - Modos de operación Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Comportamiento de “Long mode” • Se utilizan descriptores en la GDT de 8 bytes similares los de modo Legacy • Los segmentos se tratan como FLAT y en el sub modo 64 no se chequea el campo límite • Todos los registros de puntero se extienden a 64 bits aunque todavía se toman como direcciones lineal solo 48 bits. (En modo compatibilidad, los bits 32..47 deben valer 0) • Con direcciones lineales de 48 bits, y un sistema de paginación mediante PAE de 4 niveles se obtienen direcciones físicas de 52 bits. • No se dispone de conmutación de tarea por Hardware • Se puede verificar si es posible pasar a modo largo mediante la instrucción CPUID con la funcionalidad dada por EAX=0x80000001, donde se obtendría el bit 29 de EDX en 1 si el procesador admite este modo Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Direccionamiento en “long mode” – PAE 4K Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Descriptores para paginación de 4K en long mode NX: Non exec MBZ: Must be zero. If not: General protection IGN: Ignored Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Descriptores para paginación de 4K en long mode NX: Non exec MBZ: Must be zero. If not: General protection IGN: Ignored Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Direccionamiento en “long mode” – PAE 2M Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Descriptores para paginación de 2M en long mode Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Descriptores para paginación de 2M en long mode Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Modelo de ejecución Los registros de propósito general se expanden a 64 bits Se disponen de 8 nuevos registros de propósito general (r8. . r15) Los registros de puntero pueden ser accedidos por byte Las instrucciones push y pop trabajan con alineaciones de 64 bits. Se dispone de 8 registros XMM nuevos Las extensiones de 64 bits no pueden utilizarse en modo protegido ni en modo compatibilidad EFLAGS se extiende a 64 bits como RFLAGS Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Modelo de ejecución RIP Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Modelo de ejecución (extensión de registros) 64 32 16 RAX RBX RCX RDX RSI RDI RBP RSP 8 EAX ah AX al EBX bh BX bl ECX ch CX cl EDX dhDX dl ESI SI EDI DI dil EBP BPbpl ESP SP spl sil Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Modelo de ejecución (nuevos registros) 64 32 16 r8 r9 r10 r11 R12 R13 R14 R15 8 r8d r8w r8b r9d r9w r9b r10d r10wr10b r11d r11w r12d r12w r13d r13wr13b r14d r14wr14b r15d r15w r11b r12b r15b Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Registros de control en 64 bits CR0 CR2 Registros de control en 64 bits CR3 CR4 Model-specific registers A partir del procesador Pentium se incorpora un set de registros llamados MSRs (Model Specific Regiters) cuya cantidad puede variar en diferentes modelos. Es por eso que existen 2 instrucciones privilegiadas para trabajar sobre los mismos rdmsr y wrmsr Antes de ejecutar cualquiera de estas 2 instrucciones debemos especificar cual será el MSR a ser accedido mediante ECX Si la implementación no existe ocurrirá una excepción de protección general El registro EFER es uno de los tantos MSRs el cual corresponde a ECX=0C0000080h Luego mediante rdmsr obtenemos el registro en EDX:EAX. (por que no en RAX ?) Entonces para setear el bit que habilita “long mode” del registro EFER debemos hacer el OR correspondiente y luego ejecutar la instrucción wrmsr Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Extended Feature Enable Register (EFER) Activación del modo largo • Si bien para pasar a modo largo, debemos activar el bit LME (long mode enable) del registro EFER, este modo funciona solo si está activada la paginación PAE de 4 niveles. Es decir: con el bit LME lo habilitamos pero no lo activamos • Como regla de “buen comportamiento” es conveniente hacerlo desde modo protegido “Legacy mode” y desactivar la paginación de este modo para armar las tablas que corresponden al modo largo. • Cuando el modo largo está efectivamente activado, se lo indica mediante la activación automática del bit LMA (long mode activated) del registro EFER Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Activando el modo largo 1. Suponiendo que se encuentra en modo protegido: desactivar la paginación (si es que está activada) 2. Desactivar interrupciones, ya que la IDT en este modo es diferente a la utilizada en IA32 y cargar idtr con la IDT correspondiente 3. Debe estar armado en memoria el esquema de 4 niveles requerido por “long mode” 4. Activar el bit PAE del registro CR4 5. Cargar CR3 con la base de PML4 6. Setear el bit LME del registro EFER 7. Activar la paginación (CR0.PG) lo que causará la activación del “long mode” (activándose EFER.LMA) Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Comenzando en modo largo 1. Una vez entrado en modo largo, el procesador se encuentra en “compatibility mode” debido a que CS estaba apuntando a un descriptor utilizado en IA32 (Legacy) 2. Si quisiéramos activar el sub-modo 64, debemos realizar un JMP FAR a fin de apuntar CS a un descriptor acorde a este sub-modo 3. Si tenemos correctamente el registro idtr apuntando a una IDT64 entonces habilitamos interrupciones Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Lab 1 “Hello world” 64 Subtitulo o nombre del capitulo Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Universidad Tecnológica Nacional Interrupciones en IA32e • Tanto para “compatibility mode” como para “64 bit mode”, se utilizan descriptores de 16 bytes a fin de poder almacenar vectores lineales de 64 bits (a diferencia de IA32 que utiliza descriptores de 8 bytes) • Si se estaba trabajando con una IDT en IA32, se deberá cargar el registro IDTR para que apunte a una IDT de 64 bits, antes de pasar a modo largo y habilitar interrupciones. • Otra diferencia con respecto a IA32, es que cuando un handler de interrupción es invocado, siempre se guarda el selector SS, independientemente de que exista cambio de nivel de privilegio. • Recordar que la pila trabaja con qwords –> Debemos retornar de la interrupción con iretq. • No existe la puerta de tarea Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Descriptor de la IDT en modo largo • Se debe apuntar a un selector de código de 64 bits • IST (Interrupt stack table): Se incorpora la posibilidad de trabajar con varios stacks diferentes almacenados en una tabla (Debe ser 0 si no se desea trabajar con la tabla del TSS) Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Manejo de la pila ante una interrupción en modo largo Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Lab 2 Interrupciones 64 Comandos de bochs • • page <lineal addr> show <instrucction> Subtitulo o nombre del capitulo Universidad Tecnológica Nacional - Facultad Regional Buenos Aires Universidad Tecnológica Nacional