Por Jose Manuel Tella Llop, extraído de microsoft.public.es.windows98
MEMORIA MsDOS (memoria real) ---------------------------- Debido a muchas confusiones con la memoria real (por debajo del mega), es decir la memoria msdos, voy a intentar explicar un poquito este concepto. (intentaré no meterme demasiado en tecnicismos.....) Bien, para intentar entenderla, debemos remontarnos a los inicios del primer PC, y a la arquitectura del procesador 8086 - el primitivo y con el cual todos guardan, -por desgracia- compatibilidad. Este procesador era un procesador de 16 bits. Bien, entocen lo maximo que podemos dirección ar con 16 bits es 2 elevado a 16 es decir 65536 bytes (es decir 64 Ks). Si intentamos aquí, someramente, explicar la notacion hexadecimal creo que a lo mejor podemos entendernos un poquillo. Perdon por esto, pero es necesario (creo...). ** NOTACION HEXADECIMAL ----------------------- Un byte son 8 bites. Si los agrupamos en dos partes, llamadas cuartetos o nibles, cada cuarteto es de 4 bites. En 4 bites podemos expresar desde el 0000 al 1111 (siendo los ceros y los unos la posicion de cada bite). Por tanto este "cuarteto", puede tener desde los numeros 0 al 15 ya que 1111 es 2 al cubo + 2 al cuadrado + 2 elevado a 1 + 1 = 15. Si ahora a los numeros decimales 10, 11,.... 15, los expresamos con las letras A, B,....F quiere decir que el valor de cada cuarteto puede ir de 0 a F. Por tanto 16 bits, son 2 bytes = 4 cuartetos, puede ir desde los valores 0000 a FFFF, siendo ahora cada letra o numero un cuarteto. ¿entendido hasta aquí?. Es necesario entender lo anterior para poder continuar. ¿COMO dirección AR MAS DE 64 Ks? ------------------------------- Para superar esta barrera, (evidentemente con 64 Ks de memoria no hacemos nada), Intel recurre al "artificio" de la segmentacion. Es decir utiliza dos registros de la CPU para dar una dirección real de memoria. A uno de ellos, lo llama registro de segmento y al otro registro de desplazamiento (offset). Y además los suma de una manera muy rara: supongamos el segmento C000 y con desplazamieno 012A. Pues bien para sumarlos, desplaza el registro de segmento un cuarteto a la izquierda, le pone un cero es ese ultimo cuarteto y los suma. Es decir: C000 -> C0000 012A --------- C012A Fijemonos que ahora tenemos 5 cuartetos. Es decit 20 bites. Es decir, ahora podemos dirección ar (o referenciar) 2 elevado a la 20 = 1.048.756 bytes. ¿Os suena esta cifra?. Pues es precisamente 1 mega !!!!. Segun lo anterior, se definió en un principio (mas adelante matizo una pequeña variacion de esto), que el maximo segmento dirección able era el F000 y el maximo desplazamiento dentro de ese segmento era FFFF. Por tanto sumando: F000 -> F0000 FFFF -------- FFFFF (cinco 'F' o sea justito el mega) DIVISION DE LA MEMORIA REAL --------------------------- Bien, en aquellos comienzos (año 82), un mega era una cantidad increible de memoria. No se esperaba superarlo en muchos años, y ademas, para un ordenador personal de aquel entonces se consideraba de sobra. Bien, entonces, quedaba ahora el diseño "fisico" de esa memoria. Digo diseño fisico, porque ya se pensaba en que la BIOS ocupa memoria, y que además podemos tener tarjetas (SCSI, de video, etc), que tambien tienen su propia bios, y por tanto habia que definir, dentro de ese mega, que memoria es para los programas, y que memoria es para el resto del hardware. IBM (el padre de la criatura), considero, que el segmento A000 era el limite superior de la memoria para programas (casi inalcanzable en aquella epoca). Pensemos que el segmento A000 con offset cero tiene la dirección real: A000 -> A0000 0000 -------- A0000 -> 640 Kbs (podeis utilizar la calculadora de Windows,teclearlo en hexadecimal y convertirlo la cifra a decimal). Bueno, pues ya tenemos una primera division: ** Hasta A000 la memoria para programas (640 Ks). Y ahora la pregunta del millon. ¿y el resto? Pues bien, se definió los segmentos A000 hasta AFFF como la zona de memoria de la tarjeta grafica para los "graficos". B000-B7FF la de memoria para la tarjeta grafica en modo texto "monocromo", y la B800 hasta la BFFF para el modo texto "color". Y además (aunque no está escrito, si que es asumido por todos los fabricantes), desde la C000, hasta por lo menos la C7FF para la bios de la tarjeta grafica. (digo por lo menos, ya que hay tarjetas graficas que ocupan mas, y ademas, cuando estamos en multimonitor, las bios de las tarjetas, se suman una a continuacion de la otra). Y por ultimo, la zona F000-FFFF quedaba reservada para la bios de la placa madre. En principio, el "hueco" entre la C800 y F000, quedaba reservado para posibles tarjetas con sus bios. USO DE ESTA MEMORIA POR EL MSDOS -------------------------------- Los primeros MSDOS (hasta la versión 5), unicamente podian utilizar los primeros 640 Ks. Es más, muchas placas madre, no incorporaban "fisicamente" el resto de memoria, ya que se "añadia", por decirlo de alguna manera, al ir añadiendo los componenetes hardware. A alguien se le ocurrió, que el PC, debía llevar el mega completo, y que al añadir los componentes hardware, o bien se podia copiar su bios sobre las direcciones reales de memoria y ejecutarse desde allí (shadowing de memoria - recordad que en la bios puede definirse), o bien que se "mapeasen" las direcciones de memoria real sobre las del adaptador... Esto quiere decir, que existen, o pueden existir huecos desde la dirección C800 a la F000 (si no tuviesemos mas placas), que podrían utilizarse. Esta es la memoria llamada UMB (upper memory block).
Volver a
Artículos y FAQs
|