# Memòria expandida

* No s'ha de confondre amb memòria estesa.
La memòria expandida va ser un mètode desenvolupat al voltant de 1984 que proporcionava memòria paginada extra als programes de MS-DOS.
Aquests programes, que corrien a l'IBM PC original, i els seus successors l'IBM XT i l'IBM AT, eren típicament aplicacions com fulls de càlcul i bases de dades que necessitaven una gran quantitat de memòria per treballar correctament.
Tant l'IBM PC i l'IBM XT tenien una arquitectura de memòria de mode real, que només permetia als programes utilitzar 1 megabyte d'espai de direcció, dels quals només fins a 640 KB estava disponible com RAM normal per a les aplicacions. La resta entre 640 KB i 1 megabyte era reservat per a perifèrics, destacant la memòria per a les targetes de vídeo. L'IBM AT, amb la seva microprocessador Intel 80286 suportava un mode protegit el que li permetia direccionar fins a 16 MB, però aquest ordinador també feia servir l'MS-DOS, un sistema operatiu que no feia servir la memòria estesa (per dalt del megabyte) directament.
La idea darrere de l'expandida era fer servir, també per a la memòria del programa, part dels 384 KB restants normalment dedicats als perifèrics. Per poder utilitzar potencialment molta més memòria que els 384 KB que l'espai d'adreçament permetia, va ser ideat un esquema commutació de bancs, on només estarien accessibles a un mateix temps, porcions seleccionades de la memòria addicional. Originalment, era possible una sola finestra de 64 KB de memòria, més endavant això va ser més flexible. Les aplicacions van haver de ser escrites d'una manera específica per tenir accés a la memòria expandida.

## Diferents implementacions
### Targetes d'expansió

Aquesta inserció d'una finestra de memòria en l'espai de direcció dels perifèrics es podia aconseguir originalment només a través de targetes d'expansió específiques, endollades al bus d'expansió ISA de l'ordinador. Algunes famoses targetes d'expandida dels anys 1980 van ser el Rampage d'AST, l'IBM PS/2 80286 Memory Expansion Option, el AT&T Expanded Memory Adapter, i el Above Board de Intel. Atès el preu del RAM de fins a diversos centenars de dòlars per megabyte durant aquest període, i la qualitat i la reputació de les marques esmentades a dalt, una targeta de memòria expansió era molt costosa.

### Targeta mare

Més endavant, algunes targetes mares de computadors basats en el Intel 80286 implementar un esquema d'expandida que no requeria targetes afegides. Típicament, interruptors per programari determinaven quanta memòria s'havia de fer servir com a memòria expandida i quanta havia de ser usada com a memòria estesa.

### Maneig de memòria nadiu en el processador

Començant el 1987, les característiques incorporades de maneig de memòria del processador Intel 80386 permetien modelar lliurement l'espai de direcció quan corrien programari en mode real, fent innecessàries les solucions de maquinari. La memòria expandida es podia simular simplement per programari.

### DPMI

Una manera més eficient de tenir accés a l'espai de direcció més enllà de 640 KB, en el 80286 i processadors posteriors, va ser usant el Protected Mode Interface del DOS (DPMI) (Interface de manera protegida del DOS). Els DOS extended eren drivers que van permetre a les aplicacions córrer en mode protegit. Més que intentar tenir accés a més memòria per mitjà de mecanismes de commutació de memòria, els drivers canviaven el processador a manera protegit quan corrien el programa d'aplicació, i tornaven a manera real quan accedien a serveis de l'MS-DOS. Això va permetre que els programes accedissin directament tota la memòria que era configurada com memòria estesa.
L'ús de la memòria expandida per les aplicacions va disminuir a principis dels anys 1990, a mesura que els DOS extenders van arribar a ser més predominants.

### Emulació per programari

El primer programa de maneig d'expandida (per emulació) va ser probablement CEMM, disponible al novembre de 1987 amb el DOS 3.31 de Compaq. Una solució comercial popular amb bones característiques va ser el QEMM de Quarterdeck. Un competidor va ser el 386MAX de Qualitas. La funcionalitat va ser incorporada més endavant a l'MS-DOS 4.01 de 1989 i al DR-DOS 5.0 del 1990, com el EMM386.
El programari de maneig d'expandida oferia funcionalitat addicional però estretament relacionada. Notablement, podia crear àrees de memòria ordinària (Upper Memory Block s) en les parts no usades de los384 KB alts (entre 640 KB i 1 MB) de l'espai de direcció de la manera real i van proveir eines per carregar petits programes, típicament TSRs usant els comandaments ("loadhi" o "loadhigh").
La interacció entre la memòria estesa, l'emulació d'expandida i els DOS extenders acabar sent regulada per les especificacions XMS, VCPI i DPMI.
Certs programes d'emulació, col·loquialment coneguts com a LIMulators, no depenien per a res de la targeta mare o les característiques del 80386. En el seu lloc, van reservar 64 KB de RAM bàsica per a la finestra d'expandida, on van copiar dades ai des de la memòria estesa o el disc dur quan els programes d'aplicació demanaven canvis de pàgina. Això era fàcil d'implementar programàticament però l'exercici era baix. Aquesta tècnica va ser oferta per AboveDisk d'Above Software i per diversos programes shareware.

## Detalls

Una targeta d'expandida era un perifèric de maquinari, necessitava un programa de control, que exportava els seus serveis. Aquest controlador de dispositiu va ser anomenat "expanded memory manager" (gestor d'expandida). El seu nom va ser variable, les targetes prèviament esmentades van usar respectivament remm.sys (AST), ps2emm.sys (IBM), aemm.sys (AT&T) i emm.sys (Intel). Més endavant, l'expressió va arribar a ser associada amb solucions només de programari que requerien el processador 80386, per exemple el QEMM de Quarterdeck (vegeu a sota).
La memòria expandida era un terme comú per a algunes variants de tecnologia incompatibles. La Expanded Memory Specification (EMS) (especificació d'expandida) va ser desenvolupada en comú per Lotus Software, Intel, i Microsoft, així que aquesta especificació va ser referida a vegades com "LIM EMS". EEMS, un estàndard competidor de maneig d'expandida, va ser desenvolupat per AST Research, Quadram i Ashton-Tate. Aquest estàndard també va permetre remapear algun o tots els 640 KB de la part baixa de memòria, de manera que programes sencers poguessin ser commutats dins i fora de la RAM extra. Els dos estàndards van ser eventualment combinats com LIM EMS 4.0.

## Programació

Un bloc de 64 KB, el page frame es reservava en l'upper memory area de la memòria normal. El page frame en si mateix constava de quatre pàgines EMS de 16 KB, cadascuna de les quals podia ser fixada independentment per a "apuntar" a algunes parts de la memòria expandida sota el control del programa. Canviar l'anomenat mapeig del page frame era costós, així que en conseqüència s'havien d'organitzar les dades. Versions posteriors de l'especificació del LIM EMS no imposen més l'ús d'un page frame, però això va ser tot just usat.
Fer ús de memòria expandida era onerós, i la tasca va ser temuda i odiada per tots els programadors de PC. No obstant això, era una manera de fer servir més memòria, i per a programari exigent en memòria, usar-la en una manera penosa era millor que cap utilitat específica. Un desafiament constant de disseny era determinar quines dades s'havien d'emmagatzemar en els fàcils d'usar 640 KB baixos de la memòria, i quines dades es devien emmagatzemar en la memòria expandida amb la seva sobrecàrrega inherent de maneig.
Abans de l'estandardització imposada pel LIM EMS, cada targeta de memòria venia amb el seu propi driver i amb diferents APIs. Després de LIM EMS, Microsoft va alterar lleugerament la seva implementació en el DOS 3.31, de manera que la memòria fos alineada en límits de paraula en lloc de límits de byte com determinada l'especificació original, fent fallar a funcionar correctament a algunes aplicacions. A la pràctica, els usuaris van haver d'alterar la configuració dels seus ordinadors per utilitzar el LIM EMS o Microsoft EMS d'acord amb l'aplicació que desitgessin utilitzar.

## Vegeu també

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

## Referències

* Es pot trobar una descripció completa sobre EMS i exemples a"PC System Programming for developers", 1989, ISBN 1-55755-035-2 and ISBN 1-55755-036-0
* Understanding EMS 4.0 by Lloyd Borrett, Technical Cornucòpia, January-February 1.989
* Aquest article (o una versió anterior) està basat originalment en material de Free On-line Dictionary of Computing, utilitzat amb permís.