• Domingo 5 de Mayo de 2024, 01:32

Autor Tema:  Ayuda Con La Segmentacion  (Leído 1943 veces)

fafastrungen

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Ayuda Con La Segmentacion
« en: Lunes 7 de Agosto de 2006, 10:25 »
0
Hola, no entiendo como se aplica la segmentacion, se que es una forma de dividir la memoria y a su vez proteger los bloques divididos (segmentos) en modo protegido, pero no entiendo como se obtiene un segmento.
Supongamos que tengo una memoria de 256 MB, por lo tanto podria declarar una variable de la siguiente manera (ejemplo en Pascal):

MEMORIA  :Array[0..268435456] of Byte

asi mismo podria acceder a una posicion de memoria, supongamos la posicion 15000, de la siguiente manera:

POSICION[ 15000 ] := 150

de esta forma estaria accediendo a la posicion 15000 de la memoria y asignandole el valor 150.
Hasta aca todo bien, pero esta el problema del direccionamiento que no puede exceder a valores superiores al MB y por lo tanto se utiliza la segmentacion, pues bien, como obtengo la posicion de memoria 15000 en el formato SEGMENTO:OFFSET, osea, como se a que segmento pertenece la posicion de memoria 15000 ?
Se transformar del formato SEGMENTO:OFFSET a memoria real, pero no se la operacion inversa.
Todo esto lo hago en forma de pregunta y no de afirmacion, asi es como yo lo entiendo y quisiera saber en que estoy equivocado.

Gracias.

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Ayuda Con La Segmentacion
« Respuesta #1 en: Lunes 7 de Agosto de 2006, 20:05 »
0
:o  :o


?????? me mata la duda alguna vez lo vi en la escuela pero no recuerdo deja busco entre mi basura a ver si encuentro algo...
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]


fafastrungen

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Ayuda Con La Segmentacion
« Respuesta #2 en: Viernes 11 de Agosto de 2006, 09:41 »
0
cualquier minima ayuda sera muy bienvenida, asi que gracias.

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Ayuda Con La Segmentacion
« Respuesta #3 en: Lunes 21 de Agosto de 2006, 17:57 »
0
Bueno la segmentación para el caso del 8086 ( modo real) se da por que su BUS de direcciones es de 20 Bits( 2^20~=1M) es decir que solo podria trabajar con memorias de hasta 1MB, pero sus registros apuintadores como si,di,bx,ect  son solo de 16Bits, y con solo 16 bits no pueden apuntar mas alla de los 64KB. Por esta razon los registros de segmento ( SP,SS,CS,DS) sirven para "segmentar" la memoria de trabajo, si se tiene 1MB de memoria se la divide en segmentos de 64KB cada segmento tiene una direccion de semento, al iniciarse un progam el SO le asignara la ubicaion en menoria a este programa, le asignar asu segmento de codigo,pila,datos, y el progrma trabajara con sus direcciones Relativas dentro los segmentos de 64K con los que puede trabajar directamente con sus registros apuntadores de 16Bits.Pero sus direcciones Fisicas reales se pueden calcualar, si la direccion relativa( en el segmento de codigo) de una linea de codigo fuera 200h, su direccion fisica real sera el contenido del registro CS (segmeto de codigo) multiplicado por 10H mas 200H [ CS*1H+200H ].

Espero que la duda fuese sobre este tipo d esegmentacion.