mapeando direcciones no existentes?

0

"En términos de esta imagen de asignación de direcciones desde el espacio de direcciones a las ubicaciones de memoria reales, una máquina de 4 KB sin memoria virtual simplemente tiene una asignación fija entre las direcciones de 0 a 4095 y 4096 palabras de memoria. Una pregunta interesante es: "¿Qué sucede si un programa se bifurca a una dirección entre 8192 y 12287?" En la máquina que carece de memoria virtual, el programa causaría una trampa de error que imprimiría un mensaje grosero, por ejemplo: "No existe memoria referenciada" y terminar el programa. "

Del párrafo anterior, esto es lo que entiendo, este es un sistema de direccionamiento de 12 bits, ya que 2 ^ 12 es 4096 y cada palabra forma 1 byte (ya que 4KB X 1024 = 4096 Bytes = 4096 Palabras). Pero cuando el autor dice "¿Qué sucede si un programa se ramifica a una dirección entre 8192 y 12287?" No entiendo qué significa eso. ¿De dónde vienen las direcciones 8192 hasta 12287? (¿no tiene el procesador un esquema de direccionamiento de 12 bits?) ¿Y qué dice la declaración "En la máquina que carece de memoria virtual, el programa causaría una trampa de error que imprimiría un mensaje adecuadamente grosero "¿significa? ¿Qué tiene que ver virtual con esto?

Supongo que mi interpretación es incorrecta. Sea lo que sea, por favor, ayúdame a entender esto.

    
pregunta Suhail Gupta

2 respuestas

2

Al diseñar una combinación moderna de computadora / sistema operativo, una de las cosas que queremos hacer es ejecutar múltiples programas al mismo tiempo. Uno de los problemas con los que se encontraría al diseñar este sistema es que todos sus programas quieren asumir que tienen acceso a toda la memoria que desean y no coordinan las direcciones que usan.

La solución al problema es un sistema llamado memoria virtual. El espacio de direcciones virtuales es el espacio de direcciones que el sistema operativo pone a disposición de un programa para usar. Cuando un programa intenta acceder a la memoria virtual en, digamos, la dirección 1024, no pueden acceder a la dirección de la memoria física (las direcciones que salen en los cables a los chips ram) 1024. En cambio, hay un sistema de mapeo.

El sistema operativo maneja todas las asignaciones, de modo que dos programas diferentes pueden acceder a lo que consideran la dirección 1024, pero el proceso 1 podría tener su dirección virtual 1024 asignada a la dirección física 2048, mientras que el proceso 2 podría tener su dirección virtual 1024 asignada a la dirección física 4096.

Con el fin de mantener la información de mapeo manejable, el sistema operativo mapea la memoria en "partes" llamadas páginas. 4096 bytes es un tamaño de página muy común. En el ejemplo de su sitio, un determinado proceso tiene una sola página, ubicada en las direcciones virtuales 4096, que tiene una longitud de 4096 bytes (que se extiende a la dirección virtual 8191), asignada a la dirección física 0 (ya que la página tiene una longitud de 4096 bytes, el la asignación se extiende a la dirección física 4095)

El tamaño real del espacio de direcciones virtuales no se especifica (debe tener al menos 14 bits de ancho porque se menciona la dirección 12287), pero eso no importa. Una cosa es segura, no es un sistema de direccionamiento de 12 bits. Eso es solo el tamaño de una página de memoria virtual, la porción más pequeña de memoria que administrará el sistema operativo. Las direcciones 8192 a 12287 son solo otras direcciones virtuales a las que podría acceder un proceso.

El autor hace la pregunta "¿qué sucede si hay un acceso a la memoria que no está asignado?"

En una computadora sin un sistema de mapeo de memoria virtual, los avisos de hardware que acceden a direcciones que no están conectadas a un ram físico son errores. El hardware señala el sistema operativo de la infracción. Este proceso se llama una trampa de error. El sistema operativo imprimirá el mensaje "Memoria inexistente referenciada" y terminará el proceso. Ese es el mensaje adecuadamente grosero.

En una computadora con un sistema de mapeo de memoria virtual ocurre casi lo mismo. Dado que la mayoría de los programas no utilizan toda la memoria que podrían abordar, el sistema operativo no asigna toda la memoria virtual de un proceso a la memoria física (también, la mayoría de las computadoras tienen más espacio de direcciones virtuales disponibles que la memoria RAM total instalada) ellos). Entonces, cuando un proceso intenta acceder a una dirección virtual en la memoria no asignada, el hardware advierte que no hay memoria física asignada a la dirección virtual en cuestión. El sistema operativo está señalado, imprime un mensaje grosero y finaliza el proceso.

Este sistema de mapeo y captura de errores no solo permite que múltiples procesos tengan sus propias vistas del espacio de direcciones, sino que también permite que el sistema operativo contenga y proteja los procesos en ejecución entre sí. Aunque pueden estar usando las mismas direcciones virtuales, el sistema operativo mantiene diferentes procesos asignados a diferentes direcciones físicas. De esa manera no es posible que un proceso acceda (accidentalmente o a propósito) o sobrescriba la memoria de cualquier otro proceso. Esto evita que los programas defectuosos saquen toda la computadora cuando se bloquean.

    
respondido por el James
2

Primero, el \ $ 12287 \ $ es un valor impar. Los espacios de memoria suelen ser potencias de 2, como 64k (\ $ 65536 \ $) = \ $ 2 ^ {16} \ $ para un 8-amargo típico. \ $ 12287 \ $ como dirección más alta significa \ $ 12288 \ $ direcciones = \ $ 3 \ cdot 2 ^ {12} \ $. La razón de las potencias de 2 es que las direcciones \ $ 12288 \ $ todavía necesitan 14 líneas de direcciones, tal como lo haría \ $ 2 ^ {14} \ $ o \ $ 16384 \ $. No ganas nada desestimando el top 4k.

Los microcontroladores sin MMU (Unidad de gestión de memoria) no saben cuándo se está dirigiendo fuera de la memoria física, por lo que no tendrá la trampa. En su lugar, intentará leer en la dirección no existente, que para muchos controladores leerá como 0xFF, y ejecutará esto como una instrucción. En algunos controladores, este 0xFF estará de acuerdo con una instrucción NOP, que es una buena solución, ya que estará ejecutando los NOP hasta que llegue a la memoria física de nuevo, y la mayoría de las veces este será el vector de reinicio. Por lo tanto, la ejecución de código en una memoria no existente llevará a un reinicio.

Los controladores con una MMU monitorearán cada acceso a la memoria y verán si el acceso está en la memoria física o en memoria virtual . Si se trata de un acceso a memoria virtual, significa que es una dirección válida, pero que los datos no están disponibles porque están en un disco duro, por ejemplo. La MMU causará una captura (un tipo de interrupción), y la ejecución normal del programa se interrumpe para permitir que la MMU lea los datos del disco duro. Una vez que se cargan los datos, la ejecución del programa continúa. No hace falta decir que desea el menor número posible de estas trampas, ya que ralentizan seriamente el programa. Por lo tanto, el sistema operativo tendrá algoritmos avanzados para decidir cuándo se cargarán los datos.

    
respondido por el stevenvh

Lea otras preguntas en las etiquetas