# Memòria estesa

Dins l'entorn de gestió de memòria DOS, memòria estesa, XMS per abreujar, es refereix a la memòria per sobre del primer megabyte (2$^{20}$ bytes) de l'espai d'adreces d'un PC compatible amb un processador 80286 o posterior. El terme s'utilitza principalment sota els sistemes operatius DOS i Windows. Els programes DOS, que s'executen tant en mode real com en mode virtual x86, no poden accedir directament a aquesta memòria, però poden fer-ho mitjançant una interfície de programació d'aplicacions anomenada Extended Memory Specification, que va ser desenvolupada per Microsoft per al Windows 2.1.
L'especificació normalitza l'accés a la memòria sota un entorn compatible amb MS-DOS per sobre del límit d'1 MB de l'IBM PC. Aquesta memòria s'anomena extended memory, que es tradueix com a "memòria estesa". Antigament la memòria expandida (expanded memory), utilitzada com ampliació "paginada" de l'espai d'adreces original de l'IBM PC de 1981 (i altres ordinadors compatibles), requeria una targeta d'ampliació de memòria i l'accés de la qual estava estandarditzat per la norma Expanded Memory Specification (EMS). En canvi, la memòria estesa només es pot utilitzar des del processador 80286 d'Intel o posterior, utilitzat a partir de l'IBM PC/AT del 1984 cap endavant, que permet utilitzar el mode protegit ja que els processadors x86 van implementar més línies d'adreça a partir del 80286 que els va permetre gestionar més memòria directament.
Després d'un període de transició en què les aplicacions DOS compatibles amb la memòria XMS també podien estar disponibles com a memòria EMS, la norma XMS va substituir completament la norma EMS, així en els sistemes moderns que utilitzen el "flat memory model" del Protected Mode, ambdues especificacions ja no tenen un paper gaire important.

## Desenvolupament

El sistema operatiu MS-DOS estava pensat per a ser executat en mode real, un mode de funcionament dels microprocessadors compatibles amb x86, en el qual s'accedeix a la memòria principal com amb el processador 8086. En aquest mode de funcionament, només es pot adreçar el primer megabyte de la memòria principal. A partir del 80386, aquesta limitació es pot evitar emprant el mode irreal.
Quan IBM va lliurar els primers PC/AT, estaven equipats amb el processador 80286, que podia adreçar més memòria principal. Amb el temps, els ordinadors van sortir al mercat amb més d'1MByte de memòria principal. Mentrestant, els 640 KB que es podien utilitzar per a programes d'aplicació sota DOS ja s'havien fet massa petits per a molts propòsits. Tanmateix, l'accés a la memòria estesa era difícil ja que el processador havia de passar a mode protegit per fer-ho. Tot i que les rutines del BIOS oferien una característica (mitjançant l'interrupció 15 $_{hex}$) que permetia copiar àrees de memòria a la memòria estesa, era complicat i difícil d'utilitzar. Tampoc hi havia cap control d'accés si diferents programes volien accedir a la memòria concurrentment.
Per això, l'any 1988 les empreses Lotus Development Corp, Intel Corp., Microsoft Corp. i AST Research Inc. van desenvolupar una especificació que permetia controlar l'accés a la memòria estesa.

### XMS 3.0 "Super Extended Memory"

Les funcions XMS definides a les versions 1 i 2 de XMS utilitzaven valors de 16 bits per poder especificar mides de bloc (en kilobytes), que era suficient per adreçar un màxim de 64 MB. El 1991, es va llançar el protocol XMS 3.0, donant accés a més de 64 MB de memòria principal, que es va anomenar Super Extended Memory. Les funcions utilitzen registres de 32 bits, que només estaven disponibles des del processador I386, però això no era cap problema ja que els processadors I286 generalment només tenien incorporat un màxim de 16 MB de memòria principal.

## Procediment d'accés

El punt d'entrada per a la rutina de servei XMM, a través del qual es pot emprar aquest servei, es gestiona mitjançant la interrupció 2F $_{hex.}$ Un controlador especial, el gestor de memòria estesa (XMM), s'encarrega d'accedir a la memòria estesa segons la norma XMS. Els programes d'aplicació, o també altres controladors de dispositiu, poden utilitzar-lo per a reservar àrees de memòria de la memòria estesa, copiar-hi dades des de la memòria convencional i tornar-hi més tard per tal d'alliberar la memòria després de l'ús. Sota MS-DOS, aquest controlador s'anomena HIMEM.SYS i s'ha de carregar quan s'arrenca l'ordinador. En altres sistemes operatius compatibles amb MS-DOS, aquest controlador de vegades té un nom diferent i s'associa amb un gestor de memòria (com per exemple:EMM386.EXE)que proporciona, a més a més, també accés EMS
S'accedeix a les àrees de memòria de l'XMS mitjançant els anomenats handles, que la rutina XMM retorna quan assigna un bloc de memòria. Per copiar blocs de memòria entre XMS i la memòria convencional, s'utilitza l'identificador especial XMS 0000 $_{16}$ que especifica adreces de memòria a la memòria convencional. Els identificadors XMS eren un recurs escàs perquè l'XMM havia de contenir dades de gestió per a cada identificador. 32 "handles" eren habituals, tot i que el nombre es podia augmentar fins a 256.

## Problemes

Atès que la còpia de dades entre la memòria DOS i la memòria estesa requereix un "canvi momentani" al mode protegit, l'accés a aquesta memòria és relativament lent, especialment amb les CPU's 80286, que requereixen un "reset" -o restabliment del processador- per tornar al mode real, que també triga força temps. A més a més, la còpia de dades d'anada i tornada entre diferents àrees de memòria XMS, que no és gaire ràpida, també feia el procés notablement més lent.
A partir del processador I386, la memòria per sobre d'1 MB també es va poder utilitzar alternativament per proporcionar l'anomenada memòria expandida (EMS, vegeu: Especificació de memòria expandida). Com que la programació per accedir a la memòria EMS és més fàcil d'utilitzar que la que gestiona la memòria XMS, hi havia molts programes DOS que encara utilitzaven la memòria EMS. Generalment la majoria de programes amb fam de memòria (p.e.: els jocs), gestionaven ambdós tipus d'ampliació de memòria XMS i EMS.

## Vegeu també

* Memòria convencional
* Àrea de memòria superior
* Àrea de memòria alta
* Memòria expandida
* Paginació de memòria
* Mode irreal
* Gestió de la memòria
* Memòria virtual
* VRAM

## Referències

* ↑ PC Mag. Ziff Davis, Inc., p. 1.
* ↑ PC Mag. Ziff Davis, Inc., p. 9.
* ↑ http://www.phatcode.net/res/219/files/xms30.txt
* 1 2 3 http://www.i8086.de/dos-befehle/himem-sys.html