2010-09-13 34 views
31

¡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.¿Diferencia entre direcciones lógicas y direcciones físicas?

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 tiene no idea donde el código se cargará 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 que la CPU genera un conjunto de direcciones lógicas (que consta de 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, el éxito del programa dependería en gran medida de la computadora física, direcciones de RAM disponibles, etc.

El uso de direcciones lógicas convertidas a direcciones físicas no impone dos pasos en lugar de uno para uno, y por lo tanto más por encima de la cabeza?

¿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.

+0

sugeriría leer el artículo de Wikipedia sobre "tabla de página" o algo así. – asveikau

+0

Gracias, la entrada de la tabla de la página es bastante útil –

Respuesta

40

Esta respuesta no es de ninguna manera 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.

Una aplicación puede tener 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 aplicación solamente ejecutándose, y el sistema operativo tiene que mediar entre todas ellas. 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 capas desde aquí) es libre de poner las páginas de la aplicación en cualquier lugar que desee (ya sea en memoria física o en 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 utilizando tablas de traducción. Y, si intenta acceder a la memoria lógica que se ha intercambiado en el disco, se genera un error de página y los niveles más bajos pueden devolver los datos relevantes a la memoria, a cualquier dirección física que desee.

En los viejos tiempos, 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 memoria lógica 50 en una docena de procesos diferentes al mismo tiempo; es física. La dirección física 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 dirección física pura, pero los fabricantes de CPU intentan hacerlo tan increíblemente eficiente como sea posible, ya que se usa mucho. Las ventajas ahora superan las desventajas.

+0

Gracias que hace mucho clic. También creo que el intercambio es algo arcaico. ¿Se usa mucho estos días? RAM es bastante barato. No sé cuándo realmente se necesita el intercambio en las PC. Las computadoras portátiles pueden usar swap para dormir/hibernar. ¿Hay otros usos de ella? –

+1

La memoria RAM es barata pero no tan barata como para dar 100 procesos en su máquina 4G cada uno :-) También tenga en cuenta que a menudo hay una distinción entre intercambio (todo el proceso se intercambia) y paginación (se intercambian páginas pequeñas). Este último es mucho más eficiente. También significa que ni siquiera carga en la memoria física las cosas que no necesita. – paxdiablo

+0

Ahh, intercambiar páginas tiene más sentido. Supongo que eso es lo que es 'segmentación', ¿dónde dividen las páginas en diferentes segmentos y solo cargan en la RAM los segmentos necesarios? Por lo tanto, ¿no se necesita más RAM de la que realmente se necesita? –

1

De lo mejor en mi memoria, una dirección física es una dirección explícita, configurada en piedra en la memoria, mientras que una dirección lógica consiste en un puntero base y desplazamiento.

La razón es la que usted ha 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.

8

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 física dirección

4

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 nuestra procesador de crear procesos y resolver nuestro problema luego almacenar datos en la memoria secundaria a través de la dirección llamada dirección física

0

lógico Vs espacio de direcciones físicas

Una dirección generada por la CPU es comúnmente referenciado como Dirección lógica, mientras que la dirección vista por la unidad de memoria, es decir, una cargada en el registro de dirección de memoria de la memoria comúnmente se considera como la Dirección física. El enlace de dirección del tiempo de compilación y tiempo de carga genera las direcciones físicas y lógicas 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, la asignación de tiempo de ejecución de dirección virtual a dirección física se realiza mediante un 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 memoria. Comprendamos esta situación con la ayuda del ejemplo: si el registro base contiene el valor 1000, un intento del usuario por ubicar la dirección 0 se reubica dinámicamente en la ubicación 1000, se asigna un acceso a la ubicación 346 a la ubicación 1346.

El programa de usuario nunca ve el espacio real de direcciones físicas, siempre trata con las direcciones lógicas. Como tenemos dos tipos diferentes de direcciones Dirección lógica en el rango (0 a max) y direcciones físicas en el rango (R a R + max) 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 lógicas las direcciones se deben asignar a la dirección física antes de que se utilicen.

+3

¿Cuáles son las posibilidades de que haya plagiado este contenido [desde aquí] (http://lib.bioinfo.pl/courses/pdf/204)? –

+0

O cualquiera de una docena de otros sitios donde las personas no pueden distinguir entre 'referido' y 'evaluado'. Parece que esta respuesta particular está en el Plagio Top 100 :-) – paxdiablo

0

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.

1

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.

3
  1. 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.
  2. Los métodos de encuadernació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.
  3. 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 al 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.
  4. Las direcciones lógicas van desde 0 hasta 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 direcciones físicas antes de que se utilicen. Las direcciones físicas se extienden de (R + 0) a (R + max) para una base de R. valor de registro/reubicación
  5. Ejemplo: enter image description here Mapeo de lógica a las direcciones físicas utilizando la unidad de gestión de memoria (MMU) y reubicación/registro de la base El valor en el registro de reubicación/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, para generar la dirección física correspondiente. En la figura anterior, el valor de base/reubicación es 14000, entonces un intento por parte del usuario para acceder a la ubicación 346 se asigna a 14346.
+0

¿Por qué las direcciones lógicas y físicas son idénticas en el caso del enlace de direcciones en tiempo de carga? –

+0

@AbdelrahmanEid No lo son, esto es un error. –

Cuestiones relacionadas