Segmentos de registros y direcciones lógicas

Registrar operando: (almacenado en la CPU)

MOV AX, 0FFFFH

AX es el operando de registro.

El operando mismo se almacena en un registro, y solo se proporcionan unos pocos bits de código en las instrucciones para indicar que se almacena específicamente en ese registro.

Los datos en la memoria se leen en la CPU a través del registro e ingresan el cálculo de los datos.

Operando de memoria: (almacenado en la memoria)

Se almacena en un área de memoria, por lo que se llama un operando de memoria.

  1. mydata dw 1234H o mydata db 12H etc.

    Variables como mydata en lo anterior

  2. xx db 0FFH, 0

    mov bx, OFFSET xx // Utilice el operador de desplazamiento para calcular el valor de desplazamiento de la unidad xx

    hacha mov, [bx]

    El [bx] anterior se llama operando de memoria directamente direccionado como nombre no variable

Registro de segmento:

El registro de segmento está configurado para la gestión de segmento de la memoria.

¿Por qué necesitas segmentación de memoria?

El 8086CPU tiene 20 líneas de dirección y el espacio máximo de memoria direccionable es de 1 MB. El registro 8086 tiene solo 16 bits, y el puntero de instrucción (IP) y los registros de índice (SI, DI) también tienen 16 bits. Es imposible abordar un espacio de 1 MB con una dirección de 16 bits. Por lo tanto, la memoria debe estar segmentada, es decir, el espacio de 1 MB se divide en 24, es decir, 16 segmentos, cada segmento no supera los 64 KB ( se pueden direccionar 2 16,16 líneas de datos).

Por lo tanto, cuatro registros de segmento de 16 bits se establecen en 8086 para administrar cuatro segmentos: CS es el segmento de código, DS es el segmento de datos, SS es el segmento de pila y ES es el segmento adicional. Una vez segmentada la memoria, cada segmento tiene una dirección base de segmento. El registro de segmento contiene los 16 bits superiores de la dirección base de segmento. Los 16 bits superiores se denominan valor base de segmento . La dirección de 16 bits se desplaza cuatro bits hacia la izquierda (detrás Agregue 4 ceros) para formar una dirección base de segmento de 20 bits .

Sin embargo, al describir la segmentación de la memoria, se requiere la siguiente información del segmento: 1. El tamaño del segmento; 2. La dirección de inicio del segmento; 3. Los atributos de gestión del segmento (prohibición de escritura / prohibición de ejecución / sistema específico, etc.). Se necesitan 8 bytes (64 bits) para almacenar esta información, pero el registro de segmento solo tiene 16 bits.

Por lo tanto, solo el número de segmento , también llamado selector de segmento , puede almacenarse en el registro de segmento , y luego el número de segmento se asigna al GDT (Tabla de registro de número de segmento global ) almacenado en la memoria para leer la información del segmento.

Espacio virtual (espacio de dirección de memoria virtual) / espacio de programación (espacio de escritura de programa)

El componente de gestión de almacenamiento considera la memoria principal (memoria física) y la memoria auxiliar (disco) como un todo, es decir, memoria virtual. 486 permite una capacidad de memoria virtual máxima de 246 = 64T, es decir, el programador puede programar dentro de este rango de direcciones, y el programa puede exceder en gran medida el espacio físico.

Por lo tanto, la CPU debe convertir la dirección en un espacio de memoria virtual a una dirección física (el espacio en ejecución del programa)

Se requieren dos pasos:

1. Primero, dada una dirección lógica, la CPU primero usa su unidad de administración de memoria segmentada para convertir una dirección lógica en una dirección lineal

2. Reutilice su unidad de gestión de memoria paginada para convertirla a la dirección física final.

Nota:

  1. Si no hay paginación, la dirección lineal es la dirección física;

  2. Si busca, la unidad de búsqueda convertirá la dirección lineal a

    Dirección física

  3. Modo real: el espacio de almacenamiento solo está segmentado, no paginado;

    Modo de protección: el espacio de almacenamiento se segmenta primero y luego la paginación.

¿Qué es una dirección lógica?

La dirección lógica es la dirección generada por la CPU y se refiere a la dirección utilizada para especificar un operando o una instrucción en una instrucción de lenguaje de máquina.

Una dirección lógica consta de dos partes, el identificador de segmento: el desplazamiento dentro del segmento (desplazamiento) . El identificador de segmento se compone de un campo de 16 bits, llamado selector de segmento . El selector de segmento se almacena en el registro de segmento. Los primeros 13 dígitos son un número de índice. Los últimos tres bits contienen algunos detalles de hardware.

El número de índice, o directamente entendido como el índice de la matriz, ¿cuál es su índice? Esto es " descriptor de segmento (descriptor de segmento) ", (hay descriptores de segmento de datos, descriptores de segmento de código, descriptores de segmento del sistema). La dirección específica del descriptor de segmento describe un segmento.

De esta manera, para muchos descriptores de segmento, una matriz se denomina "tabla de descriptor de segmento". De esta manera, se puede encontrar directamente un descriptor de segmento específico en la tabla de descriptor de segmento a través de los primeros 13 bits del identificador de segmento. El descriptor describe un segmento, y cada descriptor de segmento consta de 8 bytes. Hay un campo Base en el descriptor de segmento, que describe la dirección lineal de la posición inicial de un segmento. Base + offset es la dirección lineal a convertir.

Nota:

Algunos descriptores de segmentos globales se colocan en la "Tabla de descriptores de segmentos globales (GDT)".

Algunos locales, como los de cada proceso, se colocan en la "Tabla de descriptores de segmentos locales (LDT)".

El campo T1 en el selector de segmento, = 0, significa GDT, y = 1 significa LDT.

Según las instrucciones:

1.直接寻址
格式:段寄存器:[偏移地址]
mov bx, ds:[1234H] //表示从ds数据段偏移地址为1234H的单元取数——>bx
假设(DS)=5000H 可计算出
线性地址为16d×(DS)+1234H=16d×5000H+1234h=50000H+1234H=51234H 。
命令的最后结果就是把线性地址为51234H的存储单元中的操作数据放入BX中

2.间接寻址
格式:段寄存器:[间址寄存器] / [间址寄存器]
注意:可省略段寄存器是因为会到默认约定的段寄存器中取内容数据
例:
mov ds,数据段段基址
mov bx,buf单元的偏移地址
mov al,ds:[bx]
等价于:mov al,[bx]

El segmento lógico de registros indirectos y acceso convencional se muestra en la siguiente figura:

Gestión de memoria de paginación

Núcleo: divida el espacio de memoria virtual y el espacio de memoria física en páginas del mismo tamaño, y use páginas como la unidad más pequeña de división de espacio de memoria. El crecimiento del espacio también es fácil de lograr: simplemente asigne páginas virtuales adicionales y encuentre una página física inactiva para almacenar

¿Por qué necesita gestión de memoria de paginación?

Debido a las siguientes ventajas:

  1. No habrá fragmentación externa (la causa raíz de la fragmentación del espacio es que el tamaño de cada programa es diferente, por lo que no hay coherencia al asignar espacio. La solución es naturalmente asignar espacio a un cierto tamaño. Se divide en partes del mismo tamaño que la memoria física, que llamamos "páginas".) El espacio de memoria ocupado por un proceso puede no ser continuo,
  2. Las páginas virtuales de un proceso pueden almacenarse en el disco cuando no son necesarias y no necesitan cargarse en la memoria al mismo tiempo.
  3. Puede compartir pequeñas direcciones, es decir, compartir páginas. Simplemente haga un registro correspondiente en la tabla de página correspondiente.

Bajo el mecanismo del sistema de paginación:

La dirección virtual emitida por un programa consta de dos partes: el número de página y el valor de desplazamiento dentro de la página

Esta matriz total_page tiene 2 ^ 20 miembros, cada miembro es una dirección (máquina de 32 bits, una dirección es de 4 bytes), luego, para representar dicha matriz, ocupará 4 MB de espacio de memoria. Para ahorrar espacio, se introdujo una máquina de modo de gestión secundaria para organizar la unidad de búsqueda.

Por lo tanto, cada dirección lineal de 32 bits se divide en tres partes, índice de directorio de página (10 bits): índice de tabla de página (10 bits): desplazamiento (12 bits)

Siga los pasos a continuación para convertir:

  1. Elimine la dirección del directorio de la página del proceso del registro cr3 (el sistema operativo es responsable de cargar esta dirección en el registro correspondiente al programar el proceso);
  2. De acuerdo con los primeros diez dígitos de la dirección lineal, busque el elemento de índice correspondiente en la matriz. Debido a que se introduce el modo de administración secundaria, el elemento en el directorio de la página ya no es la dirección de la página, sino la dirección de una tabla de páginas. (Se introdujo una matriz adicional). La dirección de la página se puso en la tabla de páginas.
  3. De acuerdo con los diez bits intermedios de la dirección lineal, encuentre la dirección inicial de la página en la tabla de páginas (también una matriz);
  4. Agregue la dirección de inicio de la página a los últimos 12 bits en la dirección lineal para obtener la dirección física que queremos al final;

Supongo que te gusta

Origin www.cnblogs.com/Hhhighway/p/12684920.html
Recomendado
Clasificación