In questo nuovo appuntamento settimanale col retrocomputing, andremo a “disseppellire” l’emblema di un’epoca del PC direi felicemente conclusasi: le limitazioni imposte dalla memoria convenzionale e i sistemi usati per aggirarla, per poi inquadrare le origini del moderno concetto di multitasking.
640KB (qui approfondito tecnicamente da Cesare) è il quantitativo di memoria che i progettisti IBM ritennero all’inizio degli anni ’80 soddisfacente per ogni eventuale uso del computer.
Sempre a livello progettuale, la parte oltre i 640KB del primo megabyte di RAM (1MB era il massimo indirizzabile da una CPU 8086/8088) fu riservata in blocco, alle periferiche e al BIOS. Si tratta di ben 384KB, che non rappresentano una quantificazione esatta delle esigenze menzionate ma piuttosto un’approssimazione, questa sì per eccesso, dei bisogni creati da futuribili scenari d’uso.
Risultato: in ogni PC/XT, del primo MB di RAM, solo 640KB (la cd. memoria convenzionale) sono direttamente fruibili, mentre 384 rimangono inaccessibili ai programmi e, in certa parte, inutilizzati.
Già pochissimi anni dopo il PC/XT (1981) questo limite si rivelò stringente e poco lungimirante, mano a mano che sempre più programmi TSR e driver di periferica, in abbinamento ai programmi d’uso comune, rivendicavano spazio nella memoria convenzionale.
Prima 286 (1982) con la novità della modalità protetta per l’accesso a tutta la memoria indirizzabile, poi il lancio del PC/AT basato su 286 e infine il debutto del 386 (1985), con l’introduzione di innovazioni sulla gestione della memoria e la possibilità di indirizzare 4GB di RAM, accelerarono drasticamente l’obsolescenza del real mode e dei problemi legati alla memoria convenzionale.
La protezione della memoria introdotta del 286 (qui un approfondimento di Cesare) rappresentò un passo fondamentale per abilitare il multitasking sul PC. L’implementazione della memoria protetta su 286 risultò però difficilmente fruibile a causa dell’incompatibilità del DOS – sviluppato attorno alle specifiche di 8086 – e dell’impossibilità di commutare fra modalità reale e protetta senza un reset.
Il 386 introdusse lo switching dinamico alla memoria protetta e il Virtual 8086 mode, che consente ai programmi obsoleti di girare credendosi “padroni assoluti” del sistema.
Questa modalità presentava tuttavia problemi di compatibilità, che finirono col rendere spesso indispensabile anche sul 386 il ricorso alla modalità reale – che di fatto faceva girare il computer come un XT superveloce.
A questo punto è chiaro che non affrontare il problema della memoria convenzionale avrebbe potuto implicare un ritardo nell’adozione di 286 e 386, dunque un ritardo nello “svecchiamento” del parco software.
In conseguenza di ciò si sarebbe osservato uno stallo della piattaforma DOS-Intel, incapace di gestire elevati quantitativi di memoria ed eseguire più applicazioni contemporaneamente – al contrario piattaforme come Mac, Amiga e Atari ST.
In attesa di un’innovazione nel mondo OS che traghettasse tutto l’ecosistema PC verso l’uso della memoria protetta, si lavorò sull’accessibilità della memoria UMA e della memoria sopra il primo MB in modalità reale.
La soluzione di questo enigma era però tutt’altro che semplice: i 640KB di memoria convenzionale sono infatti situati al di sotto dei 384 riservati a BIOS e periferiche (Upper Memory Area). La memoria convenzionale è dunque “intrappolata” e non direttamente espandibile, come lo sarebbe stata se si fosse trovata al di sopra dei 384KB della UMA.
Per accedere in modalità reale al resto della memoria indirizzabile da un 286 (16MB) o un 386 (4GB), servono quindi degli escamotage, utili anche per recuperare quella parte della UMA che resta vuota.
Molte soluzioni al limite del gioco di prestigio, sia hardware che software, furono trovate all’epoca, per rendere tanto la UMA quanto la memoria estesa accessibile anche in modalità reale.
Il DOS Extender più emblematico e noto all’alba del multitasking su PC, fu probabilmente il memory manager QEMM della Quarterdeck. Grazie ad un uso intelligente dello switch real mode/protected mode del 386 QEMM, in accoppiata con il “task manager” DesqView, mise per la prima volta i possessori di 386 equipaggiati con MS-DOS 3.3 o 4, davanti alle reali potenzialità della loro macchina.
Uso di più applicazioni Windows in assieme a più applicazioni DOS, lo switching fra i singoli task, l’esecuzione di processi in background, mentre driver network, mouse e quant’altro erano caricati contemporaneamente in memoria: tutto questo era improvvisamente possibile per quanti avevano sborsato la considerevole somma necessaria per l’acquisto di un 386 senza averne ancora mai “assaggiato” le reali prestazioni.
Si trattava di vantaggi enormi rispetto al real mode a cui applicazioni vetuste confinavano le macchine più potenti, ma anche rispetto al precedente Topview (di cui abbiamo parlato qui), sviluppato dalla IBM nella speranza di dare nuova linfa al PC/AT, e presto finito nel dimenticatoio.
QEMM+DesqView, come altri DOS Extender, non era tuttavia esente da problemi di compatibilità con specifiche applicazioni. Per questo motivo vennero sviluppate frequenti soluzioni software personalizzate, incorporate in specifiche applicazioni: il DOS Extender di Autocad ne è un esempio, così come quello incorporato in Lotus 1-2-3 3.0.
E per chi era ancora fresco di mega-assegno per un 286, magari un costoso IBM PC/AT? QEMM-DesqView erano disponibili anche per questa piattaforma abilitando, pur a velocità ridotta, molti dei vantaggi citati su macchine di classe AT.
Ad un prezzo non troppo dissimile dalle soluzioni software come QEMM, erano per disponibili anche add-on hardware per 286, capaci di estenderne le capacità di gestione della memoria e velocizzare il multitasking.
Ricordiamo in proposito la soluzione All Chargecard (1988), una scheda che andava ad inserirsi fra 286 e scheda madre e metteva a disposizione – tramite il software di gestione incluso – un’esperienza multitasking molto veloce anche a chi non avesse intenzione di acquistare un computer 386.
Non a caso IBM, interessata a prolungare la vita dei PC/AT nella speranza di tenere il business dei mainframe al riparo dalla potenza del 386, fece tutto il possibile per rendere la Chargecard compatibile con i propri PC.
È interessante notare come tutti i vantaggi citati sia per le soluzioni software che hardware, fossero possibili tramite un complessissimo lavoro di sottofondo da parte dell’extender, che in estrema sintesi consisteva in:
- trasferire il massimo numero di driver e TSR nell’UMA, in modo da lasciare la maggior quantità di memoria convenzionale libera per l’esecuzione di programmi;
- abilitare l’accesso dell’OS alla memoria estesa (oltre il 1° MB) replicandola un pezzo alla volta in un preciso segmento dell’UMA;
- gestire molteplici applicazioni, ciascuna in un suo spazio di memoria “virtuale”, “illudendo” le applicazioni richiedenti il real mode, di essere padrone di tutte le risorse.
A conclusione di questa veloce panoramica sui guasti di un ecosistema PC rimasto troppo a lungo ancorato all’8086, è interessante ricordare che, già nei primi anni ’90, OS/2 (di cui abbiamo parlato qui) era pronto a fare piazza pulita di cotanti equilibrismi e rattoppamenti e delle relative penalità prestazionali.
Come? Con un uso “illimitato” della memoria indirizzabile dal processore, col supporto nativo a tutte le potenzialità delle nuove CPU Intel fra cui multitasking e 32bit “puliti” (su 386) e, dulcis in fundo, con un buon supporto alle vecchie applicazioni DOS.
Malgrado tutto ciò, con Windows 3.0 e le lotte IBM-Microsoft che lo precedettero, la storia prese tutt’altra direzione.