# Serie CDC 6000

La serie CDC 6000 è una linea di mainframe prodotti dalla Control Data Corporation durante gli anni sessanta. La linea consisteva nei CDC 6400, CDC 6500, CDC 6600 e CDC 6700, una serie di sistemi estremamente rapidi ed efficienti per l'epoca. Questi erano dei sistemi sviluppati per compiti generici e venivano utilizzati con applicazioni scientifiche, militari e commerciali. I sistemi supportavano un'esecuzione di più programmi concorrenti grazie ad un sistema operativo a suddivisione di tempo chiamato SCOPE (Supervisory Control Of Program Execution).
La serie CDC 6000 era formata da quattro unità funzionali, la memoria principale, uno o due processori centrali molto potenti e veloci, più processori periferici e una console per gestire il sistema. I sistemi della linea 6000 si suddividevano principalmente per il numero di processori centrali e per la loro potenza. Le macchine erano basate su un'architettura di tipo RISC ben prima che il termine fosse inventato.

## Storia

I primo membro della serie CDC 6000 fu il supercomputer CDC 6600 sviluppato da Seymour Cray e James E. Thornton nei laboratori di Chippewa Falls nel Wisconsin. Venne introdotto nel settembre del 1964 e sviluppava più di tre milioni di operazioni in virgola mobile al secondo, il triplo dell'IBM 7030 Stretch il più veloce computer dell'epoca. Il 6600 rimase il più veloce computer del pianeta per cinque anni fino all'introduzione del CDC 7600. La macchina era refrigerata a Freon e CDC produsse più di 100 macchine di quel tipo, vendendo con un prezzo compreso tra i 6 e i 10 milioni di dollari.
Il successivo sistema, il CDC 6400 venne presentato nell'aprile 1966. Il processore del 6400 era un processore lento, implementava un'elaborazione seriale a differenza del 6600 che aveva un processore in grado di elaborare istruzioni in parallelo. Per il resto era uguale al 6600. Il successore fu il CDC 6500 che era basato su due processori del 6400, il sistema fu sviluppato principalmente da James E. Thornton nell'ottobre del 1967. Infine fu presentato il CDC 6700 che era un sistema che combinava un processore del 6600 e un processore del 6400, il sistema venne presentato nell'ottobre del 1969.
Seguenti modifiche della serie nel 1969 portarono versioni in grado di gestire 20 periferiche, con processori periferici a 24 canali. CDC inoltre presentò una versione del CDC 6400 con un numero ridotto di processori periferici, il CDC 6415-7 che 7 processori periferici per ridurre i costi.

## Il Central processor

Il central processor (CP o processore centrale) era l'unità deposta all'esecuzione delle operazioni aritmetiche o logiche del sistema. Il CP poteva eseguire addizioni, sottrazioni, moltiplicazioni, divisioni, operazioni logiche incrementi e salti condizionati. Nell'architettura del CDC 6000 il processore centrale non eseguiva operazioni di I/O dato che queste erano svolte in modo asincrono dai processori secondari.
Le CPU della serie 6000 disponevano di 24 registri compresi tra X0-X7, A0-A7 e B0-B7. I registri X erano ampi 60 bit e venivano utilizzati per manipolare i dati interi e in virgola mobile. I registri B erano registri a 18 bit e venivano utilizzati normalmente per gestire gli indici e gli indirizzi in memoria. Il registro B0 era fissato a 0 in hardware. Normalmente il registro B1 veniva settato via software a 1 (questo spesso permetteva di utilizzare le istruzioni a 15 bit invece delle istruzioni a 30 bit). Gli otto registri A erano a 18 bit ed erano accoppiati ai registri X direttamente. L'inserimento di un indirizzo nei registri da A1 ad A5 produceva la lettura della locazione di memoria e la sua memorizzazione del registro X corrispondente. L'inserimento di un indirizzo in A6 o A7 produceva la scrittura dei dati contenuti in X6 e X7 nella locazione di memoria indicata dagli indirizzi A. I registri A0 e X0 non erano coinvolti nel processo e potevano venir utilizzati come registri per compiti esterni. Difatti al memoria esterna Extended Core Storage (ECS) veniva gestita tramite questi registri.
Le istruzioni erano a lunghezza variabile e potevano essere a 15 o 30 bit in modo da contenere fino a 4 istruzioni per parola. gli op code erano a 6 bit, lo spazio rimanente era utilizzato per indicare 3 registri da 3 bit (per esempio due registri dati e un registro per il risultato) o due registri e un indirizzo di memoria a 18 bit. Tutte le operazioni lavoravano solo sui registri. Per esempio il seguente codice COMPASS carica due valori dalla memoria, esegue una somma a 60 bit e salva il risultato.
Il processore centrale del CDC 6400 aveva un'unità aritmetica unificata in grado di eseguire un'operazione alla volta. A seconda della tipologia di istruzione questa poteva richiedere da cinque cicli di clock (somma intera a 18 bit) fino a 68 cicli di clock (somme di una stringa a 60 bit). Il CDC 6500 era formalmente identico al 6400 ma aveva due processori del CDC 6400 e quindi aveva una potenza di calcolo quasi doppia del 6400.
Il CDC 6600 come il 6400 aveva un solo processore centrale,. Tuttavia questo era molto più prestante di quello utilizzato dal 6400. Il processore era formato da 10 unità di esecuzione indipendenti e sviluppate per eseguire delle operazioni specifiche. Le unità erano divise in una di gestione dei salti, una di logica booleana, uno shifter, un sommatore intero, un sommatore in virgola mobile, un divisore in virgola mobile, due moltiplicatori in virgola mobile e due sommatori incrementali a 18 bit. La più veloce era l'unità di somma incrementale che impiegava 3 cicli di clock, mentre la più lenta era l'unità di divisione dei numeri in virgola mobile che richiedeva 29 cicli di clock.
Il processore del 6600 poteva iniziare l'esecuzione di un'istruzione per ogni ciclo di clock se erano disponibili le risorse (dati e unità funzionali). La gestione delle risorse disponibili era svolta dallo scoreboarding. Inoltre il processore aveva un buffer a 8 stadi in grado di contenere fino a 32 istruzioni e quindi in grado di racchiudere al suo interno i cicli più piccoli eliminando gli accessi alla memoria principale.
Sia il 6400 che il 6600 avevano un clock di 10 MHz (100 ns). Data la natura seriale del processore del 6400 le sue prestazioni dipendevano in maniera significativa dall'ordine delle istruzioni da eseguire ma comunque era di circa 1 MIPS. La somma in virgola mobile richiedeva 11 cicli mentre la moltiplicazione ne utilizzava 57 di cicli. Il numero di operazioni in virgola mobile dipendevano molto dalle operazioni utilizzata ma si attestavano in un programma generico su circa 200.000 al secondo. Il 6600 era molto più veloce. Con un buon compilatore e con un'adeguata schedulazione delle istruzioni il sistema poteva sviluppare fino a 10 milioni di operazioni per secondo. La somma in virgola mobile richiedeva 4 cicli mentre la moltiplicazione in virgola mobile richiedeva 10 cicli (il sistema aveva due unità per le moltiplicazioni per processarne due istruzioni in parallelo) Il 6600 poteva sviluppare fino a 2-3 MegaFLOPS.
Il 6700 combinava il meglio dei precedenti sistemi. Come il 6500 aveva due processori centrali, una era il processore del 6400/6500 con la gestione aritmetica unificata il secondo processore era quello del 6600. La combinazione rendeva il CDC 6700 il più potente sistema della linea CDC 6000.

## Memoria centrale

In tutti i computer della serie 6000 il central processor comunica con più programmi attivi nella memoria simultaneamente, il sistema poteva gestire fino a sette processi indipendenti. Le istruzioni dei programmi venivano lette dai registri del processore a intervalli regolari e processate secondo un rigido ordine. I risultati erano salvati nei registri per poter essere copiati in memoria.
Le informazioni sono memorizzate nella memoria sotto forma di parole. La lunghezza di ogni parola è di 60 bit. L'elevata efficienza di indirizzamento del sistema permetteva di spostare una parola dalla memoria nel processore centrale in 100 nanosecondi
Una memoria esterna chiamata extended core storage unit (ECS) forniva uno spazio addizionale per parcheggiare i dati e per migliorare le prestazioni del sistema che non doveva continuamente accedere ai supporti esterni.

## I Peripheral processor

Il processore principale accedeva alla memoria con 10 peripheral processor (PP o processori periferici). Ogni PP era un sistema indipendente con una propria memoria. I PP provvedevano ad accedere alla memoria per il processore e a gestire le operazioni di I/O tra la memoria e le unità a disco o i nastri magnetici. Quando andavano svolte operazioni di I/O il processore programmava un PP per svolgere le operazioni in modo asincrono. Questo permetteva un'efficiente gestione delle operazioni di I/O e rendeva il processore principale più semplice e quindi più veloce. Ogni processore periferico poteva eseguire delle semplici operazioni logiche ed aritmetiche e potevano eseguire dei programmi SCOPE in modo indipendente dagli altri PP. I PP erano basati sul progetto del computer CDC 160A opportunamente modificato e adattato per l'I/O.

## Canali dati

Per eseguire le operazioni di input e di output i PP utilizzavano dei canali di comunicazione tra la memoria e il dispositivi esterni. Ogni PP poteva accedere ogni canale dati ma più canali dati potevano essere gestiti da un solo PP per velocizzare le operazioni di trasferimento.
Un PP poteva utilizzare un canale dati solamente se questo non era utilizzato da un altro PP. In sostanza l'uso dei canali dati era esclusivo.

## Schermo e consolle

In aggiunta alla comunicazione tra processori secondari e periferiche il sistema doveva gestire la comunicazione tra sistema operativo e operatore. L'operatore immetteva i dati tramite un terminale e verificava il funzionamento dei comandi tramite uno schermo CRT.
Lo schermo era di tipo testuale e non grafico. Circuiti analogici convertivano i caratteri in impulsi elettrici che comandavano lo schermo. Un processore secondario era dedicato alla gestione dello schermo ed era chiamato DSD (Dynamic System Display). Questo processore era gestito dalla consolle e doveva essere rapido per poter gestire in tempo reale il ridisegno dello schermo senza introdurre fastidiosi artefatti visivi.
Lo schermo mostrava lo stato dei processi in esecuzione. La consolle includeva una tastiera per permettere all'operatore di inserire comandi che modificassero l'esecuzione dei programmi o che mostrassero statistiche di uso del sistema.
Era disponibile un editor a pieno schermo chiamato O26 che poteva essere attivato dalla consolle di comando. Questo editor di testi venne presentato nel 1966 molti anni prima degli editor di testo a pieno schermo per gli altri sistemi. Alla CDC furono necessari 15 anni per svilupparne una versione per il suo sistema operativo Network Operating System, che venne fornito come sistema operativo standard per le macchine CDC 6000 dopo una fase iniziale che utilizzo altri sistemi operativi.

## Configurazione minima

La configurazione minima della serie CDC 6000 consisteva in un sistema formato da una memoria di 32.768 parole di 60 bit, da una combinazione di dischi in grado di memorizzare 24 milioni di parole, da un lettore di schede perforate, da una stampante e da un'unità magnetica a nastro con 7 nastri. Il sistema poteva essere espanso utilizzando memoria locale addizionale, extended core memory (ECS), lettori di schede perforate addizionali, scrittori di schede perforate, stampanti e unità a nastro. Plotter grafici e scrittori di microfilm erano disponibili.