Il Quarto Membro dell’Equipaggio (3) – La memoria

Una simpatica vecchietta …

La foto con cui si apre questo post probabilmente qualcuno l’avrà già vista in rete (ne ho trovate versioni sia a colori che in bianco e nero). In essa si vede una operaia dai capelli bianchi intenta a lavorare. Era una dipendente della Raytheon, il suo compito era quello di preparare le ‘core rope’, la ROM dell’AGC. Seguendo schemi ben precisi realizzava le porzioni di memoria relative al codice scritto dai programmatori dell’MIT: per questo motivo alcuni di questi avevano dato al prodotto finito il nome di LOL Memory, Little Old Lady Memory. Tra poco approfondirò l’argomento memoria dell’AGC. Lasciate che dedichi questo post alle ‘nonnine’ che hanno contribuito a portare l’uomo sulla Luna.

Nella sua versione finale, l’AGC arrivò ad avere 2048 (2K) word di memoria riscrivibile e 36,864 (36K) di memoria in sola lettura. Come già detto nel post scorso le word erano lunghe 16 bit (15 bit di dati e 1 bit di parità). Un bel incremento rispetto alla iniziale stima dell’MIT di sole 256 word di RAM e 4K di ROM!

La continua mancanza di spazio creò costantemente problemi nello sviluppo dei programmi: parte della responsabilità va addossata alla NASA che, solo molto tardi, fu in grado di fornite specifiche dettagliate (chissà perché mi sembra una storia già sentita ed ancora valida …). La quantità di ROM richiesta venne cambiata 18 volte, quella della RAM ‘solo’ 16.

La memoria RAM (le due immagini sopra) e la ROM (l’immagine sotto)

Le memorie a nucleo magnetico furono la tecnologia dominante dai tardi anni 50 ai primi anni 70 nel settore spaziale per due motivi molto validi: (a) sono immuni agli errori indotti dalle radiazioni e (b) mantengono l’informazione anche quando non alimentate. I nuclei erano piccoli anelli di ferrite, del diametro di pochi mm: se magnetizzati lungo un certo orientamento rappresentavano un ‘1’ (nel senso di cifra binaria), magnetizzati lungo l’orientamento opposto uno ‘0’. Attraverso l’anello passavano diversi fili utilizzati per selezionare il nucleo, leggere il suo valore e cambiarlo.

Per l’AGC vennero usate due diverse tipologie di memoria a nucleo magnetico:

  • per la memoria riscrivibile (Erasable Memory, la RAM) vennero utilizzati nuclei realizzati con la tecnologia coincident-current; concettualmente i nuclei erano disposti in una griglia bidimensionale. Ogni nucleo era un punto della griglia dotato di due coordinate (x e y) ricavabili dal suo indirizzo. La direzione in cui era magnetizzato il nucleo identificava il valore. Fisicamente ogni anello era attraversato dalle linee X, Y, Sense e Inibizione: se si voleva scrivere un particolare anello si attivava la sua linea X e Y, solo quell’anello vedeva l’intero campo magnetico (sufficiente per modificare la polarità del campo magnetico) mentre gli altri anelli si trovavano a vedere solo metà campo magnetico o nessun campo magnetico. La lettura consisteva nel portare a 0 il bit indirizzato. Se la memoria era effettivamente a 0 non succedeva nulla ma se la memoria conteneva un campo magnetico che indicava il bit 1 allora sulla linea di Sense si sarebbe letto un breve impulso elettrico dovuto al cambio di polarità del nucleo magnetico. Questa metodologia di lettura era distruttiva dato che alterava i dati portando sempre le memoria allo stato 0.
    La scrittura seguiva un principio simile, tranne che la memoria veniva sempre posta a 1. La scrittura attivava le linee X e Y al fine di produrre una variazione di campo magnetico che variasse il campo magnetico del nucleo magnetico fino allo stato 1: se nella cella andava effettivamente scritto 1 la procedura terminava, altrimenti si impediva la scrittura facendo scorrere una piccola corrente in verso opposto nella linea di inibizione.

  • per la memoria non riscrivibile (Fixed Memory, la ROM) venne utilizzata la tecnica delle ‘core rope’ che permetteva una densità di immagazzinamento molto superiore a quella vista per la RAM. Ciascun nucleo era magnetizzato in modo da rappresentare sempre un 1 o uno 0, e si comportava come un trasformatore: una serie di fili passava o meno all’interno del nucleo andando a comporre la word memorizzata. Pensate di avere una fila di 15 nuclei magnetizzati come 1 e una fila di 15 nuclei magnetizzati come 0. Per comporre il valore binario 101 001 010 111 110, faccio passare un filo attraverso il primo nucleo della fila di 1, poi dal secondo nucleo della fila di 0, poi dal terzo nucleo della fila di 1 … e così via. Il bello di questo sistema è che per rappresentare un secondo valore, posso prendere un secondo filo e ripetere il procedimento (dentro e fuori dai vari nuclei). A questo punto il solo limite che ho è il numero di fili che posso far passare attraverso un nucleo. Per l’AGC fu possibile (grazie al lavoro delle Little Old Ladies) far passare 24 fili per ciascun nucleo!

Una curiosità etimologica sul termine ‘core rope’: nella prima implementazione di questa tecnologia, i nuclei venivano infilati su lunghi cavi e non erano disposti a griglia. E quindi l’aspetto era proprio quello di lunghe corde con degli anelli infilati.

Per capire come nell’AGC si accedeva alla memoria serve un breve accenno alla struttura della word per le istruzioni (ci tornerò in seguito nella serie di post). Dei 15 bit disponibili (il sedicesimo era il bit di parità), 3 bit erano usati per la codifica dell’Op-Code (il codice che identificava l’istruzione da eseguire). Ne restavano 12 per rappresentare l’indirizzo in memoria del dato su cui l’istruzione andava ad operare.

Per gestire l’accesso all’intera memoria disponibile, l’AGC non poteva fare affidamento solo su questi 12 bit (il numero massimo di indirizzi selezionabili sarebbe stato pari a 212 = 4096). Venne utilizzato il concetto di memoria a banchi e quindi dei registri dedicati, chiamati banking registry.

La memoria dell’AGC venne suddivisa in banchi della dimensione di 256 word (per la RAM) o di 1024 (1K) word (per la ROM). Nel Block II (versione finale) i primi 4 blocchi erano quelli della Erasable Memory, i successivi 32 quelli della Fixed Memory.

I Banking Registry erano 3 e venivano utilizzati per comporre un indirizzo, col numero di bit sufficiente per indirizzare tutti i blocchi word:

    Indirizzare la Erasable Memory (imagine tratta dal libro ‘The Apollo Guidance Computer’)

  • EBANK: questo registro conteneva i 3 bit necessari che, insieme ad 8 bit provenienti dalla parte dedicata all’indirizzo nella word di istruzione, permettevano di indirizzare una cella di memoria Eraseable (2(3+8) = 211 = 2048).

  • FBANK: questo registro conteneva i 5 bit necessari che, insieme ad 10 bit provenienti dalla parte dedicata all’indirizzo nella word di istruzione, permettevano di indirizzare l’area di memoria Fixed (fino a quando questa ebbe una dimensione di 32K)(2(3+8) = 215 = 2048).

    Indirizzare la Fixed Memory (imagine tratta dal libro ‘The Apollo Guidance Computer’)

  • BBANK: conteneva le informazioni di entrambi i registri precedenti e veniva automaticamente aggiornato ogni qualvolta cambiava uno di essi. Esistevano alcune istruzioni che indirizzvano la memoria utilizzando per maggior efficienza il contenuto di questo registro.

Per la versione finale dell’AGC fu necessario inventarsi un ulteriore meccanismo per gestire lo spazio degli indirizzi (la ROM era aumentata ulteriormente): il Superbanking Bit. Si trattava di un singolo bit memorizzato in uno dei canali di input / output dell’AGC (per ulteriori dettagli sull’I/O vi rimando a uno dei prossimi post), il bit 7 del Canale 7. Utilizzando questo bit supplementare (sommato ai 15 bit già utilizzati tramite l’FBANK), per un totale di 16 bit, tutta la memoria Fixed poteva essere indirizzata.

2 Risposte to “Il Quarto Membro dell’Equipaggio (3) – La memoria”

  1. FeFeSofT Says:

    Ah che bello mi sono sentito ragazzino a quando in terza ITIS abbiamo iniziato a studiare informatica🙂

    Comunicazione di servizio: su Rai 5 propongono una serie di documentari dal titolo “L’eraxspaziale” il primo si intitolava “vincere la gravita” con tanto di interviste a Cranz, Kraft, Cernan, Stafford e Aldrin

    Salutoni

    FeFe

  2. raghnor Says:

    Vedo che abbiamo un background scolastico comune🙂
    Leggere il libro di O’Brien sull’AGC è stato un bel tuffo nei buoni vecchi studi di informatica. Mi piacerebbe sapere se qualche insegnante ha mai usato l’AGC come esempio di ‘vecchio computer’: io l’assembly l’ho imparato su un emulatore 6502, pensa se mi avessero messo davanti un emulatore AGC🙂

    Documentario su RAI5: domenica ne hanno proposto un verso le 19.50, l’ho registrato e aspetto di vederlo con calma una di queste sere.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...