Finora in questa rubrica ci siamo occupati esclusivamente di microprocessori, il cui termine abbiamo intervallato in maniera interscambiabile con processori e CPU. In realtà i tre termini non sono equivalenti, a meno che il contesto non sia sufficientemente chiaro e non ambiguo da far capire in maniera precisa a cosa ci si sta riferendo.
Quali le differenze, allora? Per processore indichiamo un elemento che processa, cioé un’unità in grado di effettuare delle elaborazioni. Per CPU indichiamo un processore centrale, cioé che occupa posizione centrale / di controllo nel sistema in cui è inserito (ad esempio in un sistema SMP può essere il processore che ha il compito di servire gli interrupt). Infine per microprocessore intendiamo un processore i cui elementi costitutivi siano integrati in un solo pezzo di silicio, cioé in un singolo chip.
Il PDP-11 era un processore, dunque costituito da più chip che concorrevano alla realizzazione dell’intera unità di elaborazione, ma che ha lasciato parlare molto di sé in quanto era molto utilizzato nei mainframe e ha rappresentato per un po’ di anni nell’immaginario collettivo la “macchina programmabile” per eccellenza, quanto a versalità e comodità di sviluppo, che ha influenzato notevolmente il design e lo sviluppo dei successivi microprocessori.
Il suo punto di forza era sicuramente rappresentato dalla capacità di eseguire le operazioni più importanti (come lo spostamento dei dati, la somma, la sottrazione, ecc.) potendo specificare una qualunque modalità d’indirizzamento sia per l’operando sorgente che per quello destinazione, concetto poi ripreso dal TMS9900 di cui abbiamo già parlato.
Il set d’istruzioni era ortogonale, tanto che sia lo stack pointer (SP) che il program counter (PC) facevano parte dei registri general purpose, per cui la generazione del codice da parte dei compilatori risultava semplificata.
Purtroppo essendo dotato di soli 8 registri in totale per i dati, gli indirizzi, lo SP e il PC, per l’implementazione di algoritmi più complessi si doveva far ricorso a variabili temporanee allocate nello stack oppure nei dati, che comportavano di conseguenza una maggior lentezza nell’esecuzione.
Fortunatamente era dotato di una cospicua quantità di modalità d’indirizzamento anche complesse che permettevano di ridurre il numero di istruzioni necessarie, rendendo il codice più compatto. Ad esempio lo stack (e gli stack in generale) veniva implementato facendo ricorso alle modalità di autoincremento e predecremento, che con una sola istruzione consentivano di leggere o scrivere il dato e, contemporaneamente, incrementare o decrementare il registro coinvolto nell’operazione (concetto questo poi ripreso da Motorola col 68000, la cui fortissima ispirazione al PDP-11 è più che evidente).
E’ interessante notare che, a differenza di molti processori come gli x86 e i RISC in generale, anche le operazioni MOVE (o LOAD che dir si voglia) andavano a modificare i flag, e ciò permetteva di evitare una successiva operazione di TEST o COMPARE per controllare se il dato letto fosse zero, diverso da zero, positivo o negativo.
Il PDP-11, insomma, era orientato all’efficienza e alla compattazione del codice, e anche per questo presentava numerose istruzioni. Come da tradizione CISC, del resto, di cui è stato un illustre rappresentante.
Da programmatore MOS 6502 prima e Motorola 68000 poi, non posso non rilevare le tante analogie con questo processore, che nel caso del 68000 sfiorano quasi il plagio, viste tantissime similitudini sia nel tipo e nel nome delle istruzioni, sia nelle modalità d’indirizzamento, e ancora nel formato delle istruzioni (per specificare la modalità d’indirizzamento vengono usati 6 bit: 3 per la modalità vera e propria, e 3 per indicare l’eventuale registro).
Purtroppo questo processore non ha avuto seguito a causa del tempo perso da Digital, che non ha colto velocemente i cambiamenti in corso che vedevano, nei primi anni ’70, un fiorire di nuove architetture grazie all’introduzione del concetto di microprocessore, e che ha permesso di abbattere i costi di progettazione e realizzazione delle CPU.
Soltanto dopo qualche anno introdusse il successore del PDP-11, il VAX (molto noto negli ambienti mainframe e minicomputer), ma ormai Digital aveva perso il mercato più fruttuoso, quello “consumer”, e rimase quindi relegata nella nicchia di mercato in cui aveva sempre dominato.
bell’articolo…quando arriveremo ai mitici alpha 21×64?:)
C’è tempo: quelli sono dei mostri a 64 bit, e siamo ancora fermi ai 16. :-P
In realtà c’è ancora un processore a 16 bit di cui vorrei parlare, per poi passare finalmente a quelli a 32 bit (non vedo l’ora di scrivere un’enciclopedia sul 68000 :D ).
Tra l’altro il PDP è uno dei primi sistemi su cui si è cimentato Richard Stallman: ne parla con grande nostalgia in Free as in freedom. Un sistema comunque storico, progenitore della gloriosa stirpe VAX e poi di Alpha.
COnfermo la bontà (vostra) e l’interesse (mio) per questi articoli.
Riguardo il discorso del “pagio” avrei qualcosa da dire: E’ ovvio che se esistono istruzioni valide (idee valide) si cerchi di riprenderle, addirittura di copiarle su un “nuovo” prodotto. Che si traduce poi in facilità per il nuovo utente ed è un notevole stumento di marketing. Insomma se ti do qualcosa che già conosci (e magari apprezzi!) lo prediligi rispetto alla concorrenza!
Questo perchè l’uso dei 3+3 bit per l’indirizzamento ed il registo lo sto utilizzando ancora oggi su di un microcontrolore molto recente (Infineon tricore). Ed agevola di molto il compito (spresso ingrato!) di chi scrive compilatori!
Saluti
Il PDP-11 ha rappresentato un pezzo importante della storia dell’Informatica.
Wirth, Dijkstra, Van Rossum e tanti altri hanno tutti avuto il privilegio di accedere per primi a questa tecnologia con i risultati che a distanza di decine d’anni possiamo tutt’oggi apprezzare e toccare con mano.
Pur avendo la fortuna di conservare la memoria di certi pezzi, aver vissuto quei tempi è tutta un’altra cosa.
Ma per i giovani è pur sempre meglio di niente :)
@Massimo: ti assicuro, da 68000ista sfegatato :D, che Motorola ha preso a piene mani dal PDP-11.
Non soltanto il “pattern” 3+3 per le modalità d’indirizzamento, ma anche quelle di auto-decremento, la possibilità di eseguire un’istruzione con due operandi che possono essere anche entrambi locazioni di memoria, e perfino il nome di alcune precise istruzioni sono la prova inequivocabile che “forte ispirazione” ci fù. :-P
il prof Costa di ASD ( algoritmi strutture dati ) programmava su pdp-11, così mi sembra di ricordare.
ci aveva fatto vedere qualcosa e le differenze con la macchina didattica di von neumann che studiavamo.
gran macchina, affascinante.
complimenti per l’articolo, come al solito una lettura interessante :)
[…] Pascal, su Elektronica 60, una macchina molto simile al DEC LSI-11 (la versione su larga scala del PDP-11 computer capolavoro ed immancabile nelle migliori Università dell’epoca) ed […]
Ciao, bell’articolo, non ci capisco molto, ma la storia dell’informatica (sia a livello hardware che software) mi ha sempre affascinato. Devo dire che sul pdp 11 ho letto davvero molto, non solo pagine di wikipedia, ma ho fatto ricerche sempre estese (ovviamente a titolo personale, dal momento che non sono nemmeno programmatore), e devo dire che questo articolo mette in evidenza aspetti di questa macchina che altri siti non fanno. Grazie!
P.S. Qualche articolo sui supercomputers tipo il Cray-1?
Grazie. Cerco di essere un po’ originale negli articoli, esprimendo il mio pensiero (… da coder :D).
Per il Cray, credo che passerà un bel po’ di tempo, perché ho parecchi altri argomenti da trattare prima, ma spero di non farti annoiare nell’attesa. :)
[…] anche architetture che non fanno distinzione fra registri dati e/o indice e/o indirizzi, come il PDP-11 […]
sono arrivato dopo, e mi sono occupato di unix quando ormai girava su workstation RISC. La mia prima esperienza fu su un PA-RISC PA7200 (poi PA 8900), prima con HPUX, poi con (linux-gnu) gentoo/HPPA
che dire? incuriosito, per anni ho cercato di provare il brio degli arbori, dei primi kernel unix sulle prime architetture CISC, fra cui m68k … di cui a quanto si legge (perche’ io non ne ho ne mai viste, ne mai toccate con mano, pardon, con shell) anche HP aveva workstation unix/m68k, tanto quanto le primissime SGI-m68k
per farla breve googlando googlando sono riuscito a scovare addirittura pezzi di codice (in assembler e c) dei primi kernel per PDP11, e WOW … rileggendo gli articoli byte o dt.dobbs del 1984 (articoli scritti per unix/m68k) si vede che se m68k era avanti per i suoi tempi allora quel PDP11 (di molti anni prima) era ancora + avanti: mi stupisce ancora oggi
sono uno dei veterani DEC ho lavorato molto con il PDP8 e poco con PDP11 e successivamente LSI11. ho molto apprezzato le tue approfondite analisi sulle specificità del DEC e le correlazioni con TMS9900 e l’M68000.
Una quarantina di anni fa mi capitò di leggere da qualche parte e vedere la foto (che ricordo bene come fosse ieri) di un PDP11 costruito in Olivetti con il marchio Hitachi: era sputato il PDP11 verniciato di verde. Non sono riuscito a trovare nulla al riguardo, puoi aiutarmi?
Grazie e buon lavoro per gli articoli che intendi pubblicare.
Grazie per l’apprezzamento, ma al momento non ho proprio tempo da dedicare agli articoli.
Per quanto riguarda il PDP-11 a cui ti riferisci, potresti provare a chiedere a chi gestisce il Museo dell’Informatica Funzionante di Palazzolo Acreide. Magari è pure fra i pezzi pregiati di cui dispongono. ;)