Dudas sobre direccionamiento

Iniciado por Vaagish, 19 Mayo 2014, 00:23 AM

0 Miembros y 1 Visitante están viendo este tema.

Vaagish

Hola! Estoy retomando las lecturas de ASM.. y quiero entender bien el asunto del direccionamiento en modo protegido y modo real.. al principio no le di mucha bola,, y el libro me entrevero,, pero ahora me interesa saberlo a fondo..

Aparte,, creo que hay un error gigante en el libro, dice:

CitarEl modo protegido es el estado nativo del procesador, en el que estan disponibles todas las instrucciones y caracteristicas. Los programas reciben areas separadas de memoria llamadas segmentos, y el procesador evita que los programas hagan referencia a la memoria que se encuentra fuera de sus segmentos asignados.

Bien, con la segunda parte todo ok.. pero no es en modo real que están disponibles todas las instrucciones y características??

Bien, despues dice:

CitarEn el modo de direccionamiento real solo puede direccionarse 1MB de memoria, del 00000 al FFFFF hexadecimal. El procesador solo puede ejecutar un programa a la vez, pero puede interrumpir de forma momentánea ese programa para procesar las interrupciones de los periféricos. etc..etc..

CitarEn el modo protegido, el procesador puede ejecutar varios programas al mismo tiempo (nota mía: "al mismo tiempo"). A cada proceso le asigna un total de 4GB de memoria. A cada programa se le puede asignar su propia área reservada de memoria, y los programas no pueden acceder de manera accidental al código y los datos de los demás programas.

¿Por que? Quizás antes solo existían registros de 16bits?
Y la mas importante, cuando dice solo puede direccionarse 1MB de memoria, quiere decir que no importa cuanta RAM tengamos,, solo es accesible 1MB de ella? En cambio en modo protegido se puede acceder hasta 4GB.. por programa? Eso tampoco tienen mucho sentido (como yo lo interpreto) porque eso significaria tener unos pocos programas abiertos..

Gracias por la ayuda! Saludos!!

Eternal Idol

Entiendo que quiere decir que es el modo nativo moderno, el modo real esta solo para compatibilidad con un pasado ya bastante remoto.

Si; tenes que leer sobre segmentacion y memoria virtual (un DWORD puede direccionar 4 GB: de 0x0 a 0xFFFFFFFF).

http://en.wikipedia.org/wiki/Real_mode
http://en.wikipedia.org/wiki/Protected_mode
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Vaagish

Igual no capto.. sigo leyendo del libro y de la wikipedia pero no.. No hay una forma sencilla de explicarlo?

Tengo un programa guardado en el disco duro, para poder utilizar ese programa se tiene que cargar en memoria, la paginacion divide el programa (en memoria) en bloques (paginas) que pueden (o no) ser consecutivas.. podemos acceder a esa memoria paginada de la siguiente forma:

8000:0250 donde 8000 es el segmento (pagina??) y el desplazamiento es 250..
¿como decir el párrafo 250 de la hoja 8000?

Dice que la memoria virtual da la ilusión de tener mucha mas RAM de la real.. ¿Por? No es la misma cantidad igual?

Gracias! Saludos!

Eternal Idol

Cita de: Vaagish en 19 Mayo 2014, 20:18 PMIgual no capto.. sigo leyendo del libro y de la wikipedia pero no.. No hay una forma sencilla de explicarlo?

No, tal vez alguien mas didactico que yo pueda, proba con el Windows Internals tambien ... igual si queres saber algo a fondo no hay nada mejor que aprenderlo mediante la practica: agarra un depurador.

Eso es segmentacion no paginacion ... es la misma RAM si, por eso dice ILUSION, el hardware, la memoria FISICA es una sola, pero por ejemplo la direccion base de un PE suele ser 0x00400000 y el O.S. te crea la ilusion de tener muchos programas cargados en esa direccion, cuando en realidad mediante unas tablas en el contexto de cada proceso esa direccion VIRTUAL equivale a una direccion FISICA diferente.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Vaagish

Ajam.. Algo así creía por ese mismo ejemplo.. casi todos los PE tienen la misma dirección base, cosa que físicamente no puede ser.. Y eso es la paginacion o la segmentacion?

Con respecto a los 4GB por proceso.. ese es el tope que puede utilizar.. pero no se le asigna ese tamaño a cada uno verdad? Sino se quedaría sin RAM el pc..

Evidentemente me estoy planteando mal el funcionamiento.. debe ser mas sencillo de lo que creo, por eso me marea tanto..  :¬¬

Gracias!

Eternal Idol

#5
Paginacion.

4 GB es el espacio de direccionable por un DWORD (en x64 es mucho mas), normalmente se parten 2 GB para Modo Usuario y 2 GB para Modo Kernel, y no, no hay memoria RAM suficiente para 2 GB de memoria para cada proceso, cuando se acaba la RAM se usa el disco (eso tambien es paginacion, pagefile.sys en Windows).

http://en.wikipedia.org/wiki/X86_memory_segmentation

Lo elemental: todas las direcciones que vos ves en Windows (o cualquier S.O. moderno en modo protegido) son VIRTUALES. Esas direcciones (incluso las del Kernel que maneja el S.O. normalmente y los drivers) son traducidas a direccion FISICAS (en la RAM).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

cpu2

Solamente vengo a decirte de que estoy revisando los tomos de AMD el numero 2, y hay una sección llamada Segemted Virtual Memory, tambien puede que te interese System-Management Mode.

Son muy teoricos, pero no hay otra, cualquier cosa ya sabes, pero despues de los mensajes de @EI no tengo nada que decir, solamente que lectura, cuando hacabe lo que tengo que hacer ya te ayudare, ya que todo esto tambien me interesa.

Un saludo.

Vaagish

Ta.. pero vuelvo al problema de si entonces tengo 16GB de ram,, que negocio? Si se va a direccionar un DWORD.

Si, entendí que cuando se termina la RAM, se cambia/rotan las paginas de la RAM por nuevas leídas del disco..

CitarLo elemental: todas las direcciones que vos ves en Windows (o cualquier S.O. moderno en modo protegido) son VIRTUALES. Esas direcciones (incluso las del Kernel que maneja el S.O. normalmente y los drivers) son traducidas a direccion FISICAS (en la RAM).

Aunque cada proceso trabajase como el único en la ram, es guardado secuencialmente (o no) en paginas de 4096 bytes verdad? Por eso todos los procesos pueden arrancar en la misma dirección VIRTUAL, pero claro que en disco están en cualquier dirección, y si no me equivoco se puede realizar un calculo para obtener la dirección FISICA (lo que hace la ram).

En resumidas,, la paginacion establece bloques para poder guardar los procesos (en la ram) en partes, ademas puede rotar las instrucciones a seguir del disco a la ram y así dar esa ilusión de tener mas ram de la real.. luego la segmentación es una forma establecida para poder recorrer la ram sin perderse en el intento.. Algo asi??

@cpu2: Genial! Voy a revisar ese otro a ver si saco algo mas..

Gracias!

Eternal Idol

Cita de: Vaagish en 19 Mayo 2014, 23:09 PMTa.. pero vuelvo al problema de si entonces tengo 16GB de ram,, que negocio? Si se va a direccionar un DWORD.

x64  ::) Windows de 32 bits no puede direccionar mas que 4 GB (a menos que use PAE).

Cita de: Vaagish en 19 Mayo 2014, 23:09 PMSi, entendí que cuando se termina la RAM, se cambia/rotan las paginas de la RAM por nuevas leídas del disco..

Hay algoritmos complejos, pero asi a lo bruto se mete en el disco la memoria mas vieja (la que hace mas tiempo fue accedida por ultima vez) y se la recupera desde el disco si el programa intenta leerla nuevamente.

Cita de: Vaagish en 19 Mayo 2014, 23:09 PMAunque cada proceso trabajase como el único en la ram, es guardado secuencialmente (o no) en paginas de 4096 bytes verdad? Por eso todos los procesos pueden arrancar en la misma dirección VIRTUAL, pero claro que en disco están en cualquier dirección, y si no me equivoco se puede realizar un calculo para obtener la dirección FISICA (lo que hace la ram).

Si. No es por eso, es por ser virtual y no necesariamente estan en disco, estan cuando es necesario por falta de espacio en RAM. Si, el calculo se hace en base a el contexto del proceso (hay un registro que guarda la base de las tablas). Lee de nuevo todo el hilo y la documentacion que te dimos ...
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Vaagish

#9
Ta, genial.. cuando empiezo a leer mas SI's que NO's estoy encaminado jaja

Citarx64  ::) Windows de 32 bits no puede direccionar mas que 4 GB (a menos que use PAE).
Entonces a eso se debe lo de la memoria en 32bits y en 64bits..  ;D

CitarSi, el calculo se hace en base a el contexto del proceso (hay un registro que guarda la base de las tablas).
El GDT o el LDT,, uno de ellos.. sigo leyendo para aclararme mejor..

Gracias Sabios! Saludos!




Ta.. creo que lo entendí.. en principio yo quería unir la paginacion con la segmentación.. pero son dos cosas diferentes.. son 2 paradigmas distintos.. (aunque creo se pueden usar juntos).

Saludos!