memory management - traduccion - ¿Diferencia entre direcciones lógicas y direcciones físicas?
mmu (8)
- Una dirección generada por la CPU se conoce comúnmente como una dirección lógica. El conjunto de todas las direcciones lógicas generadas por un programa se conoce como espacio de direcciones lógicas. Mientras que, una dirección vista por la unidad de memoria, es decir, la que está cargada en el registro de direcciones de memoria de la memoria, se conoce comúnmente como dirección física. El conjunto de todas las direcciones físicas correspondientes a las direcciones lógicas se conoce como espacio de direcciones físicas.
- Los métodos de vinculación de direcciones de tiempo de carga y tiempo de compilación generan direcciones lógicas y físicas idénticas. Sin embargo, en el esquema de vinculación de direcciones de tiempo de ejecución, los espacios de direcciones lógicas y físicas difieren.
- El programa de usuario nunca ve las direcciones físicas. El programa crea un puntero a una dirección lógica, digamos 346, la almacena en la memoria, la manipula, la compara con otras direcciones lógicas, todas como el número 346. Solo cuando se usa una dirección lógica como dirección de memoria, se reubica en relación con el registro de base / reubicación. El dispositivo de hardware de asignación de memoria llamado unidad de gestión de memoria (MMU) convierte las direcciones lógicas en direcciones físicas.
- Las direcciones lógicas van de 0 a máx. El programa de usuario que genera una dirección lógica cree que el proceso se ejecuta en las ubicaciones 0 a máx. Las direcciones lógicas se deben asignar a las direcciones físicas antes de que se utilicen. Las direcciones físicas van desde (R + 0) hasta (R + max) para un valor de registro de base / reubicación R.
- Ejemplo: Asignación de direcciones lógicas a físicas utilizando la unidad de administración de memoria (MMU) y el registro de reubicación / base El valor en reubicación / registro base se agrega a cada dirección lógica generada por un proceso de usuario, en el momento en que se envía a la memoria dirección. En la figura anterior, el valor de base / reubicación es 14000, luego un intento del usuario para acceder a la ubicación 346 se mapea a 14346.
Estoy leyendo el concepto de sistemas operativos y ¡estoy en el octavo capítulo! Sin embargo, podría utilizar alguna aclaración o confirmación de que mi comprensión es correcta.
Direcciones lógicas: las direcciones lógicas son generadas por la CPU, según el libro. ¿Qué significa esto exactamente? (En un sistema de direcciones generado por ejecución ...) Supongo que cuando se compila el código para un programa, el programa no tiene idea de dónde se cargará el código en la memoria. Todo lo que hace el compilador es configurar un boceto general del diseño del programa y cómo se debe diseñar la imagen, pero no le asigna ninguna dirección real. Cuando se ejecuta el programa, la CPU toma esta imagen de diseño que el compilador elaboró y entrega algunas direcciones (lógicas) a las generadas a partir del código.
Direcciones físicas: las direcciones físicas no se generan hasta después de que la CPU genera algún conjunto de direcciones lógicas (que consiste en una dirección base y un desplazamiento). Las direcciones lógicas pasan por la MMU u otro dispositivo y en algún lugar a lo largo de la línea las direcciones lógicas se asignan a las direcciones físicas de RAM.
¿Cuál es la diferencia real? Puedo ver un beneficio. El uso de direcciones lógicas otorga más libertad a las aplicaciones. Si las direcciones físicas estaban codificadas, entonces el éxito del programa dependería en gran medida de la máquina física de la computadora, las direcciones de RAM disponibles, etc.
¿El uso de direcciones lógicas convertidas a direcciones físicas no impone dos pasos en lugar de uno a uno, y por lo tanto más por encima de la cabeza?
Entonces, ¿dónde residen las direcciones lógicas después de la generación? Pueden existir en un registro en la CPU mientras la CPU está dando servicio a un proceso, pero antes y después, ¿a dónde van? Entiendo que esto depende de la implementación. Supongo que se pueden almacenar en algún espacio de registro especial o buffer en la CPU, como un TLB, ¿correcto? Si no, entonces la tabla puede existir en la propia RAM, y la CPU solo tiene un puntero / dirección en la dirección base de la tabla en la RAM, ¿correcto?
Parece que mantener las direcciones en la RAM es contraproducente para las direcciones de memoria lógica. Solo puedo asumir que mi comprensión es incorrecta.
Dirección lógica: - Dirección lógica generada por la CPU. cuando le damos el problema a la computadora, entonces nuestra computadora pasa el problema al procesador a través de la dirección lógica, que no se ve esta dirección llamada dirección lógica.
Dirección física: cuando nuestro procesador crea el proceso y soluciona nuestro problema, almacenamos los datos en la memoria secundaria a través de una dirección llamada dirección física.
Esta respuesta de ninguna manera es exhaustiva, pero puede explicarlo lo suficiente como para hacer que las cosas hagan clic.
En los sistemas de memoria virtual, existe una desconexión entre las direcciones lógicas y físicas.
A una aplicación se le puede dar un espacio de dirección virtual de (digamos) 4G. Esta es su memoria utilizable y es libre de usarla como lo crea conveniente. Es un buen bloque contiguo de memoria (desde el punto de vista de la aplicación).
Sin embargo, no es la única aplicación en ejecución, y el sistema operativo tiene que mediar entre todos. Debajo de ese bonito modelo contiguo, hay una gran cantidad de mapeo pasando a convertir direcciones lógicas a físicas.
Con esta asignación, el sistema operativo y el hardware (voy a llamar a estas las capas inferiores a partir de ahora) es libre de poner las páginas de la aplicación en cualquier lugar que desee (ya sea en la memoria física o en el almacenamiento secundario).
Cuando la aplicación intenta acceder a la memoria en la dirección lógica 50, los niveles inferiores pueden traducir eso a una dirección física usando tablas de traducción. Y, si intenta acceder a la memoria lógica que se ha intercambiado en el disco, se produce un error de página y los niveles más bajos pueden devolver los datos relevantes a la memoria, en cualquier dirección física que desee.
En los viejos tiempos malos, cuando las direcciones físicas eran todo lo que tenía, el código tenía que ser reubicable (o reparado en la carga), ya que podía cargarse en cualquier lugar. Con la memoria virtual, ese código (y datos) puede estar en la ubicación de la memoria lógica 50 en una docena de procesos diferentes al mismo tiempo; sin embargo, su dirección física real será diferente.
Incluso se puede compartir para que exista una copia física en el espacio de direcciones de muchos procesos a la vez. Este es el meollo del código compartido (por lo que no usamos más memoria física de la que necesitamos) y la memoria compartida para permitir una comunicación entre procesos sencilla).
Es, por supuesto, menos eficiente que un entorno de direcciones físicas puro, pero los fabricantes de CPU intentan hacerlo lo más increíblemente eficiente posible, ya que se usa mucho. Las ventajas superan con creces las desventajas.
Logical Vs Physical Address space
Una dirección generada por la CPU comúnmente se considera como Dirección lógica, mientras que la dirección vista por la unidad de memoria, es decir, una cargada en el registro de la dirección de memoria de la memoria comúnmente se considera como la Dirección física. La dirección de tiempo de compilación y tiempo de carga vinculante genera las direcciones lógicas y físicas idénticas. Sin embargo, el esquema de vinculación de la dirección del tiempo de ejecución da como resultado direcciones lógicas y físicas diferentes.
El conjunto de todas las direcciones lógicas generadas por un programa se conoce como Espacio de direcciones lógicas, mientras que el conjunto de todas las direcciones físicas correspondientes a estas direcciones lógicas es Espacio de direcciones físicas. Ahora, el mapeo de tiempo de ejecución de la dirección virtual a la dirección física se realiza dispositivo de hardware conocido como unidad de gestión de memoria. En este caso, el registro base se conoce como registro de reubicación. El valor en el registro de reubicación se agrega a la dirección generada por un proceso de usuario en el momento en que se envía a la memoria. Comprendamos esta situación con la ayuda del ejemplo: si el registro base contiene el valor 1000, entonces un intento del usuario por ubicar la dirección 0 se reubica dinámicamente en la ubicación 1000, un acceso a la ubicación 346 se mapea en la ubicación 1346.
El programa de usuario nunca ve el espacio de direcciones físicas reales, siempre trata con las direcciones lógicas. Como tenemos dos tipos diferentes de direcciones Dirección lógica en el rango (0 a máximo) y direcciones físicas en el rango (R a R + máx) donde R es el valor del registro de reubicación. El usuario genera solo direcciones lógicas y piensa que el proceso se ejecuta en la ubicación de 0 a máx. Como está claro en el texto anterior que el programa de usuario solo proporciona direcciones lógicas, estas direcciones lógicas deben correlacionarse a la dirección física antes de que se usen.
Según mi mejor recuerdo, una dirección física es una dirección explícita y configurada en piedra en la memoria, mientras que una dirección lógica consiste en un puntero y desplazamiento en la base.
La razón es la que has especificado básicamente. Permite no solo la segmentación de programas y procesos en hilos y datos, sino también la carga dinámica de dichos programas, y la tolerancia para al menos pseudo-paralelismo, sin necesidad de que tenga lugar un entrelazado real de instrucciones en la memoria.
Una dirección lógica es la dirección en la que un elemento (celda de memoria, elemento de almacenamiento, host de red) parece residir desde la perspectiva de un programa de aplicación en ejecución.
Una dirección lógica es una referencia a la ubicación de la memoria independiente de la asignación actual de datos a la memoria. Una dirección física o una dirección absoluta es una ubicación real en la memoria principal.
Está en el capítulo 7.2 de Stallings.
la dirección lógica es la dirección relativa al programa. Indica la cantidad de memoria que tomará un proceso en particular, no dice cuál será la ubicación exacta del proceso y esta ubicación exacta que se generará mediante el uso de alguna asignación, y se conoce como dirección física