Paginación Introducción Modo no extendido Modo extendido Universidad Pontificia de Salamanca (Madrid) Dpto. de Electrónica y Comunicaciones. © Alfonso Alejandre, Luis Azorín y Francisco Machío
Bits más significados en la paginación Introducción Bits más significados en la paginación
Traducción de dirección lineal a física. Modo no extendido Traducción de dirección lineal a física. 1º Conocer si estamos en modo extendido o no. Partimos de PAE=0 (modo no extendido). 2º Disponemos de una dirección lineal de 32 bits (la que vamos a traducir a dirección física). Conviene expresarla en binario: También se deben conocer CR3 y acceder a las tablas de la paginación. 3º El punto de partida es CR3 Ej: Dir. lineal 12345678H 0001 0010 0011 0100 0101 0110 0111 1000
Traducción de dirección lineal a física. Modo no extendido Traducción de dirección lineal a física. 4º CR3 apunta a la dirección inicial de la PD. Para obtener la dirección de comienzo de la PD se toman los bits 12 al 31 (Page Directory Base Address) y se rellenan los que faltan (del 0 al 11) con ceros. Como la dirección inicial de la PD siempre acaba en 000H estará en una dirección de memoria múltiplo de 4 KB. Si CR3 = 54321 010H Bits 12 al 31 54321 Rellenamos de ceros los bits 0 al 11 000H Dir. base de la P.D. =
Traducción de dirección lineal a física. Modo no extendido Traducción de dirección lineal a física. La PD tiene un tamaño de 4 KB en la que se pueden almacenar hasta 1024 entradas de 4 bytes cada una. 5º Localizar la entrada correspondiente en la PD. Para ello se usan los 10 bits de mayor peso de la dirección lineal que tienen un índice a la PD. Todavía no sabemos si la página apuntada es de 4 KB. o 4 MB. Bits 22 al 31 0001 0010 0011 0100 0101 0110 0111 1000 Dir. lineal = Cada entrada de la PD ocupa 4 bytes Índice PD = 48H Offset PD = Índice PD * 4 = 120H Dir entrada PD = Dir Base + Offset = 54321000H + 120H = 54321120H
Traducción de dirección lineal a física. Modo no extendido Traducción de dirección lineal a física. 6º Leer la entrada correspondiente en la PD. Determinar el tamaño de la página. PD Dir base 54321000H Offset 120H Dir entrada 54321120H Entrada 48H Supongamos que el contenido de la entrada es = 87654321H 0010 Bit 7 PS=0Página de 4 KB También hubiera sido de 4 KB si PSE = 0
Traducción de dirección lineal a física. Modo no extendido Traducción de dirección lineal a física. 7º La entrada de la PD apunta a la dirección inicial de la PT. Para obtener la dirección de comienzo de la PT se toman los bits 12 al 31 (Page Table Base Address) y se rellenan los que faltan (del 0 al 11) con ceros. Como la dirección inicial de la PT siempre acaba en 000H estará en una dirección de memoria múltiplo de 4 KB. Entrada PD = 87654 321H Bits 12 al 31 87654 Rellenamos de ceros los bits 0 al 11 000H Dir. base de la P.T. =
Traducción de dirección lineal a física. Modo no extendido Traducción de dirección lineal a física. La PT tiene un tamaño de 4 KB en la que se pueden almacenar hasta 1024 entradas de 4 bytes cada una. 8º Localizar la entrada correspondiente en la PT. Para ello se usan los siguientes 10 bits de la dirección lineal que tienen un índice a la PT. Bits 12 al 21 0001 0010 0011 0100 0101 0110 0111 1000 Dir. lineal = Cada entrada de la PT ocupa 4 bytes Índice PT = 345H Offset PT = Índice PT * 4 = D14H Dir entrada PT = Dir Base + Offset = 87654000H + D14H = 87654D14H
Traducción de dirección lineal a física. Modo no extendido Traducción de dirección lineal a física. 9º Leer la entrada correspondiente en la PT. PT Dir base 87654000H Offset D14H Dir entrada 87654D14H Entrada 345H Supongamos que el contenido de la entrada es = 98765221H
Traducción de dirección lineal a física. Modo no extendido Traducción de dirección lineal a física. 10º La entrada de la PT apunta a la dirección inicial de la Página a la que se quiere acceder. Para obtener la dirección de comienzo de la Página se toman los bits 12 al 31 (Page Base Address) y se rellenan los que faltan (del 0 al 11) con ceros. Como la dirección inicial de la página siempre acaba en 000H estará en una dirección de memoria múltiplo de 4 KB. Entrada PT = 98765 221H Bits 12 al 31 98765 Rellenamos de ceros los bits 0 al 11 000H Dir. base de la página =
Traducción de dirección lineal a física. Modo no extendido Traducción de dirección lineal a física. La Página tiene un tamaño de 4 KB. 11º Calcular la dirección física. Para ello se usan los últimos 12 bits de la dirección lineal que tienen el pffset del acceso dentro de la página Bits 0 al 11 0001 0010 0011 0100 0101 0110 0111 1000 Dir. lineal = Offset = 678H Dir física = Dir Página + Offset = 98765000H + 678H = 98765678H
Modo no extendido Resumen modo no extendido página de 4 KB: CR3 54321010H 98765000H Page PDBA 20 bits 12 Bits 98765678H 87654000H PT 54321000H PD 345*4=D14H 87654D14H Dir. Acceso 48*4=120H 54321120H 12 Bits PageBA 20 bits 98765221H 87654321H 12 Bits PS=0 ó PSE=0 PTBA 20 bits Table Offset Dir 48H 345H 678H 0001 0010 0011 0100 0101 0110 0111 1000 Dir. lineal =
Traducción de dirección lineal a física. Pág 4 MB. Modo no extendido Traducción de dirección lineal a física. Pág 4 MB. 6º Leer la entrada correspondiente en la PD. Determinar el tamaño de la página. PD Dir base 54321000H Offset 120H Dir entrada 54321120H Entrada 48H Supongamos que el contenido de la entrada es = 874002A1H 1010 Bit 7 PS=1Página de 4 MB Se requiere que PSE = 1
Traducción de dirección lineal a física. Modo no extendido Traducción de dirección lineal a física. 7º La entrada de la PD apunta a la dirección inicial de la PT. Para obtener la dirección de comienzo de la página se toman los bits 22 al 31 (Page Base Address) y se rellenan los que faltan (del 0 al 21) con ceros. Como la dirección inicial de la página siempre acaba en 22 ceros en binario, estará en una dirección de memoria múltiplo de 4 MB. Entrada PD = 87400 2A1H Bits 12 al 31 874 Rellenamos de ceros los bits 0 al 21 00000H Dir. base de la página =
Traducción de dirección lineal a física. Modo no extendido Traducción de dirección lineal a física. La Página tiene un tamaño de 4 MB. 8º Calcular la dirección física. Para ello se usan los últimos 22 bits de la dirección lineal que tienen el offset del acceso dentro de la página Bits 0 al 21 0001 0010 0011 0100 0101 0110 0111 1000 Dir. lineal = Offset = 345678H Dir física = Dir Página + Offset = 87400000H + 345678H = 87745678H
Modo no extendido Resumen modo no extendido página de 4 MB: CR3 54321010H PDBA 20 bits 12 Bits 87400000H Page 54321000H PD 87745678H 48*4=120H 54321120H Dir. Acceso 874002A1H 12 Bits PS=1 y PSE=1 PBA 20 bits Offset Dir 48H 345678H 0001 0010 0011 0100 0101 0110 0111 1000 Dir. lineal =
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. 1º Conocer si estamos en modo extendido o no. Partimos de PAE=1 (modo extendido). 2º Disponemos de la misma dirección lineal También se deben conocer CR3 y acceder a las tablas de la paginación. Las direcciones físicas son de 36 bits. Las entradas de las tablas son de 64 bits 3º El punto de partida es CR3 Dir. lineal 12345678H
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. 4º CR3 apunta a la dirección inicial de la PDPT. Para obtener la dirección de comienzo de la PDPT se toman los bits 9 al 31 (Page Directory Pointer Table Base Address) y se rellenan los que faltan (del 0 al 8) con ceros. Como la dirección inicial de la PDPT siempre acaba en 9 ceros en binario estará en una dirección de memoria múltiplo de 512. Si CR3 = 654321 50H Bits 9 al 35 6543214 Rellenamos de ceros los bits 0 al 8 00H Dir. base de la PDPT =
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. La PDPT tiene un tamaño de 32 Bytes en la que se pueden almacenar hasta 4 entradas de 8 bytes cada una. 5º Localizar la entrada correspondiente en la PDPT. Para ello se usan los 2 bits de mayor peso de la dirección lineal que tienen un índice a la PDPT. Todavía no sabemos si la página apuntada es de 4 KB. o 2 MB. Bits 30 y 31 0001 0010 0011 0100 0101 0110 0111 1000 Dir. lineal = Cada entrada de la PDPT ocupa 8 bytes Índice PDPT = Offset PDPT = Índice PDPT * 8 = Dir entrada PDPT = Dir Base + Offset = 654321400H + 0H = 654321400H
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. 6º Leer la entrada correspondiente en la PDPT. PDPT Dir base 654321400H Entrada 0 Supongamos que el contenido de la entrada es = 0000000987654321H
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. 7º La entrada de la PDPT apunta a la dirección inicial de la PD. Para obtener la dirección de comienzo de la PD se toman los bits 12 al 31 (Page Table Base Address) y se rellenan los que faltan (del 0 al 11) con ceros. Como la dirección inicial de la PD siempre acaba en 000H estará en una dirección de memoria múltiplo de 4 KB. Bits 12 al 35 987654 Entrada PDPT = 0000000987654 221H Rellenamos de ceros los bits 0 al 11 000H Dir. base de la P.D. =
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. La PD tiene un tamaño de 4 KB en la que se pueden almacenar hasta 512 entradas de 8 bytes cada una. 8º Localizar la entrada correspondiente en la PD. Para ello se usan los bits 21 a 29 de la dirección lineal que tienen un índice a la PD. Todavía no sabemos si la página apuntada es de 4 KB. o 4 MB. Bits 21 al 29 0001 0010 0011 0100 0101 0110 0111 1000 Dir. lineal = Cada entrada de la PD ocupa 8 bytes Índice PD = 91H Offset PD = Índice PD * 8 = 488H Dir entrada PD = Dir Base+Offset = 987654000H + 488H = 987654488H
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. 9º Leer la entrada correspondiente en la PD. Determinar el tamaño de la página. PD Dir base 987654000H Offset 488H Dir entrada 987654488H Entrada 91H Supongamos que el contenido de la entrada es = 0000000654321221H 0010 Bit 7 PS=0Página de 4 KB
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. 10º La entrada de la PD apunta a la dirección inicial de la PT. Para obtener la dirección de comienzo de la PT se toman los bits 12 al 35 (Page Table Base Address) y se rellenan los que faltan con ceros. Como la dirección inicial de la PT siempre acaba en 000H estará en una dirección de memoria múltiplo de 4 KB. Bits 12 al 35 654321 Entrada PD = 0000000654321 221H Rellenamos de ceros los bits 0 al 11 000H Dir. base de la P.T. =
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. La PT tiene un tamaño de 4 KB en la que se pueden almacenar hasta 512 entradas de 8 bytes cada una. 11º Localizar la entrada correspondiente en la PT. Para ello se usan los bits 12 a 20 de la dirección lineal que tienen un índice a la PT. Bits 12 al 20 0001 0010 0011 0100 0101 0110 0111 1000 Dir. lineal = Cada entrada de la PT ocupa 8 bytes Índice PT = 145H Offset PT = Índice PT * 8 = A28H Dir entrada PT = Dir Base+Offset = 654321000H + A28H = 654321A28H
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. 12º Leer la entrada correspondiente en la PT. PT Dir base 654321000H Offset A28H Dir entrada 654321A28H Entrada 145H Supongamos que el contenido de la entrada es = 0000000456789221H
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. 13º La entrada de la PT apunta a la Página a la que se quiere acceder. Para obtener la dirección de comienzo de la Página se toman los bits 12 al 35 (Page Base Address) y se rellenan los que faltan con ceros. Como la dirección inicial de la página siempre acaba en 000H estará en una dirección de memoria múltiplo de 4 KB. Bits 12 al 35 456789 Entrada PT = 0000000456789 221H Rellenamos de ceros los bits 0 al 11 000H Dir. base de la Page =
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. La Página tiene un tamaño de 4 KB. 14º Calcular la dirección física. Para ello se usan los últimos 12 bits de la dirección lineal que tienen el offset del acceso dentro de la página Bits 0 al 12 0001 0010 0011 0100 0101 0110 0111 1000 Dir. lineal = Offset = 678H Dir física = Dir Página + Offset = 456789000H + 678H = 456789678H
Modo extendido Resumen modo extendido página de 4 KB: Dir. lineal = 654321400H PDPT CR3 65432150H 987654321H 12 bits PDBA 24 bits DPtrBA 27 bits 5 bits 987654000H 456789000H Page PT 456789678H 654321000H PD 145*8=A28H 654321A28H Dir. Acceso 91*8=488H 987654488H 12 bits PageBA 24 bits 456789221H 654321221H 12 bits PS=0 PTBA 24 bits DPtr Table Offset Dir 91H 145H 678H 0001 0010 0011 0100 0101 0110 0111 1000 Dir. lineal =
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. 9º Leer la entrada correspondiente en la PD. Determinar el tamaño de la página. PD Dir base 987654000H Offset 488H Dir entrada 987654488H Entrada 91H Supongamos que el contenido de la entrada es = 00000006542002A1H 1010 Bit 7 PS=1 Página de 2 MB
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. 10º La entrada de la PD apunta a la dirección inicial de la PT. Para obtener la dirección de comienzo la página se toman los bits 21 al 35 (Page Base Address) y se rellenan los que faltan con ceros. Como la dirección inicial de la página siempre acaba en 21 ceros en binario, estará en una dirección de memoria múltiplo de 2 MB. Bits 12 al 35 6542 Entrada PD = 0000000654200 2A1H Rellenamos de ceros los bits 0 al 20 00000H Dir. base de la página =
Traducción de dirección lineal a física. Modo extendido Traducción de dirección lineal a física. La Página tiene un tamaño de 2 MB. 14º Calcular la dirección física. Para ello se usan los últimos 12 bits de la dirección lineal que tienen el offset del acceso dentro de la página Bits 0 al 20 0001 0010 0011 0100 0101 0110 0111 1000 Dir. lineal = Offset = 145678H Dir física = Dir Página + Offset = 65420000H + 145678H = 654345678H
Modo extendido Resumen modo extendido página de 2 MB: Dir. lineal = 654321400H PDPT CR3 65432150H 987654321H 12 bits PDBA 24 bits DPtrBA 23 bits 9 bits 987654000H 654200000H Page PD 654345678H 91*8=488H 987654488H Dir. Acceso 12 bits PageBA 24 bits 6542002A1H DPtr Offset Dir 91H 145678H 0001 0010 0011 0100 0101 0110 0111 1000 Dir. lineal =