148 13 28MB
Italian Pages 0 [764] Year 2006
CALCOLO MMU&O
CARICATORI
UWSUAfiOK) 0 AITO IM U O
UlCUACCiO A SASSO m im u o
UveUo d e l linguaggio assem blativi)
Livello m a c c h in a
stsrruA («RATTA)
d e l sistem a operativo
SISTEMA EUSCOOCD
FCW TW U4
cmc&OM t fif
PROCESSORE U J l ? M i DIALI
Quinta edizione
PEARSON
Andrew S. Tanenbaum
Architettura dei calcolatori Un approccio strutturale Quinta edizione Edizione italiana a cura di Ottavio M. D'Antona
Copyright © 2006 Pearson Education Italia S.r.l. Via Fara, 28 - 20124 Milano Tel. 026739761 - Fax 02673976503 E-mail: [email protected] Web: http://hpe.pearsoned.it Authorized translation from thè English language edition, entitled STRU CTU RED COMPUTER ORGANIZATION, 5th Edition by TANENBAUM, ANDREW S„ published by Pearson Education, Inc., publishing as Prcnticc Hall, Copyright © 2006. All Rights Reserved. No part of this book may be reproduced or transm itted in any form or by any means, electronic or mechanical, including photocopying, recording or by any inforraation S to ra g e retrieval systetn, without permission from Pearson Education, Inc. Italian language edition published by Pearson Education Italia S.r.l., Copyright © 2006
Le informa/ioni contenute in questo libro sono state verificate e documentate con la massima cura possibile. Nessuna responsabilità derivante dal loro utilizzo potrà venire imputata agli Autori, a Pearson Education Italia 0 a ogni persona e società coinvolta nella creazione, produzione e distribuzione di questo libro. 1diritti di riproduzione e di memorizzazione elettronica totale e parziale con qualsiasi mezzo, compresi i microfilm e le copie fotostatiche, sono riservati per tutti i paesi. 1_A FOTOCOP1ATURA DEI L.1BRI È UN REATO. L’editore potrà concedere a pagamento l’autorizzazione a riprodurre una porzione non superiore a un decimo del presente volume. Le richieste di riproduzione vanno inoltrate ad AIDRO (Associazione Italiana per i Diritti di Riproduzione delle Opere dell'Ingegno), Via delle Erbe, 2 - 20121 Milano - Tel. e Fax 02.80.95.06.
Curatore per l'edizione italiana: Ottavio M. D’Antona Traduzione: Giuseppe Lipori, Massimiliano Piscozzi Copy-editing: Donatella Pepe Composizione: Elisabetta Bozzi Grafica di copertina: Sabrina Miraglia Illustrazione di copertina: Maraska Artistic Conccpt and Design Don Martinetti, DM Graphics, Ine. Stampa: Legoprint —Lavis (TN)
Tutti i marchi citati nel testo sono di proprietà dei loro detentori. ISBN 13: 978-8-8719-2271-3 ISBN 10: 88-7192-271-9
Prìnted in Italy 5a edizione: aprile 2006
Sommario
Prefazione all’edizione italiana Prefazione
C a p ito lo 1
xv xvii
In tro d u z io n e
1 .1 A pproccio stru ttu ra le 1.1.1 Linguaggi, livelli e macchine virtuali 1.1.2 Anuali macchine multilivello 1.1.3 Evoluzione delle macchine multilivello 1.2 Pietre m iliari nell’a rc h ite ttu ra dei co m p u te r 1.2.1 Generazione zero - C om puter meccanici (1642-1945) 1.2.2 Prima generazione - Valvole (1945-1955) 1.2.3 Seconda generazione —Transistor (1955-1965) 1.2.4 Terza generazione - Circuiti integrati (1965-1980) 1.2.5 Quarta generazione —Integrazione a grandissima scala (1980-?) 1.2.6 Q uinta generazione —Com puter invisibili 1.3 T ipologie di co m p u te r 1.3.1 Forze tecnologiche ed economiche 1.3.2 Spettro di computer 1.3.3 Com puter usa e getta 1.3.4 Microcontrollori 1.3.5 Com puter per giocare 1.3.6 Personal computer 1.3.7 Server 1.3.8 Cluster di workstation 1.3.9 Mainframe 1.4 Esem pi di fam iglie di co m p u te r 1.4.1 Introduzione al Pentium 4 1.4.2 Introduzione aH’UltraSPARC III 1.4.3 Introduzione all’8051 1.5 U n ità m etriche 1.6 O rganizzazione del libro Problem i
1 2 2 4 7 12
13 15 18 20 22
24 26 26 28 28 30 32 33 34 34 35 36 36 41 42 45 46 47
vìii
Sommario
C a p ito lo 2
O rganizzazione dei sistem i di calcolo
2.1
Processori 2.1.1 Organizzazione della CPU 2.1.2 Esecuzione dell’istruzione 2.1.3 RISC contro CISC 2.1.4 Principi di progettazione dei calcolatori moderni 2.1.5 Parallelismo a livello d’istruzione 2.1.6 Parallelismo a livello di processore 2.2 M em oria princip ale 2.2.1 Bit 2.2.2 Indirizzi di memoria 2.2.3 O rdinam ento dei byte 2.2.4 Codici correttori 2.2.5 Memoria cache 2.2.6 Assemblaggio e tipi di memoria 2.3 M em o ria secondaria 2.3.1 Gerarchie di memoria 2.3.2 Dischi magnetici 2.3.3 Floppy disk 2.3.4 Dischi IDE 2.3.5 Dischi SCSI 2.3.6 RAID 2.3.7 CD-ROM 2.3.8 CD-registrabili 2.3.9 CD-riscrivibili 2.3.10 DVD 2.3.11 Blu-Ray 2 .4 In p u t/O u tp u t 2.4.1 Bus 2.4.2 Terminali 2.4.3 Mouse 2.4.4 Stampanti 2.4.5 Apparecchiature per le telecomunicazioni 2.4.6 Macchine fotografiche digitali 2.4.7 Codifica dei caratteri 2.5 R iepilogo Problem i
C a p ito lo 3 3.1
Livello logico d igitale
P o rte logiche e algebra d i Boole 3.1.1 Porte logiche 3 . 1.2 Algebra di Boole 3.1.3 Implementazione delle funzioni booleane 3.1.4 Equivalenza di circuiti C irc u iti logici digitali elem entari 3.2.1 Circuiti integrati 3.2.2 Reti combinatorie 3.2.3 Circuiti per l’aritmetica 3.2.4 Clock
49 49 50 51 55 57 58 62
66 66 67 68 70 74 77 78 78 79 83 83 85 86 90 93 96 96 98 99 99
102 106 108 113 121 123 127 128 131 131 131 134 136 138 141 141 143 148 152
Sommario
3 .3
3.4
3.5
3 .6
3 .7
3.8
M em o ria 3.3.1 Latch 3.3.2 Flip-flop 3.3.3 Registri 3.3.4 Organizzazione della memoria 3.3.5 Chip di memoria 3.3.6 RAM e ROM C h ip della C P U e bus 3.4.1 Chip della C PU 3.4.2 Bus del calcolatore 3.4.3 Ampiezza del bus 3.4.4 Temporizzazione del bus 3.4.5 Arbitraggio del bus 3.4.6 Operazioni del bus E sem pi di ch ip della C P U 3.5.1 Pentium 4 3.5.2 UltraSPARC III 3.5.3 Chip 8051 Esem pi di bus 3.6.1 Bus ISA 3.6.2 Bus PCI 3.6.3 PCI Express 3.6.4 Universa! Serial Bus Interfacce 3.7.1 Chip di I/O 3.7.2 Decodifica dell’indirizzo R iepilogo Problem i
C a p ito lo 4 4.1
4.2
4 .3
4 .4
Livello di m ic ro a rc h ite ttu ra
E sem pio di m ic ro a rc h itettu ra 4.1.1 Percorso dati 4.1.2 Microistruzioni 4.1.3 Unità di controllo microprogrammata: Mie -1 E sem pio di ISA: IJV M J 4.2.1 Stack 4.2.2 Modello della memoria di IJVM 4.2.3 Insieme d’istruzioni IJVM 4.2.4 Compilazione da Java a IJVM Im p lem en tazio n e di esem pio 4.3.1 Microistruzioni e notazione 4.3.2 Implementazione di IJVM con Mie -1 Progettazione del livello di m ic ro a rc h itettu ra 4.4 .1 Velocità/costi 4.4.2 Riduzione della lunghezza del percorso di esecuzione 4.4.3 Architettura con prefetching: Mie-2 4.4.4 Architettura a pipeline: Mic-3 4.4.5 Pipeline a sette stadi: Mic-4
ix
154 154 157 159 160 163 166 168 168 170 173 174 179 181 184 184 190 194 196 197 198 206 210 214 214 215 218 219 223 223 224 230 233 238 238 240 242 246 247 247 251 263 263 266 272 276 281
x
Sommario
4.5
4 .6
4 .7 4.8
M ig lio ram en to delle prestazioni 4.5.1 Memoria cache 4.5.2 Predizione dei salti ■* 4.5.3 Esecuzione fuori sequenza e rinomina dei registri 4.5.4 Esecuzione speculativa Esem pi del livello di m ic ro a rc h itettu ra 4.6.1 M icroarchitettura della CPU Pentium 4 4.6.2 M icroarchitettura della CPU UltraSPARC III Cu 4.6.3 Microarchitettura della CPU 8051 C o n fro n to rra P en tiu m , U ltraS P A R C e 8051 R iepilogo P roblem i
C a p ito lo 5 5.1
5.2
5.3
5 .4
Livello di a rc h ite ttu ra
Panoram ica del livello ISA 5.1.1 Proprietà del livello ISA 5.1.2 Modelli di memoria 5.1.3 Registri 5.1.4 Istruzioni 5.1.5 Panoramica del livello ISA de! Pentium 4 5.1.6 Panoramica del livello ISA dell'UltraSPARC III _ 5.1.7 Panoramica del livello ISA del!’8051 T ip i di dati 5.2.1 Tipi di dati numerici 5.2.2 Tipi di dati non numerici 5.2.3 Tipi di dati del Pentium 4 5.2.4 Tipi di dati dell’UltraSPARC III 5.2.5 Tipi di dati dell’8051 F orm ati d ’istru zio n e 5.3.1 Criteri progettuali per i formati d’istruzioni 5.3.2 Codice operativo espandibile 5.3.3 Formati delle istruzioni di Pentium 4 5.3.4 Formati delle istruzioni di UltraSPARC III 5.3.5 Formati delle istruzioni di 8051 In d irizzam en to 5.4.1 Modalità d’indirizzamento 5.4.2 Indirizzamento immediato 5.4.3 Indirizzamento diretto 5.4.4 Indirizzamento a registro 5-4.5 Indirizzamento a registro indiretto 5.4.6 Indirizzamento indicizzato 5.4.7 Indirizzamento indicizzato esteso 5.4.8 Indirizzamento a stack 5.4.9 Modalità d ’indirizzamento per istruzioni di salto 5.4.10 Ortogonalità dei codici operativi e delle modalità d’indirizzamento 5.4.11 Modalità d ’indirizzamento del Pentium 4 5.4.12 Modalità d’indirizzamento di UltraSPARC III 5.4.13 M odalità d’indirizzamento di 8051 5.4.14 Analisi delle modalità d’indirizzamento
284 285 291 296 301 304 304 310 315 318 319 320 323 325 325 327 329 330 330 333 336 339 339 340 341 341 342 342 343 345 348 349 350 351 351 351 352 352 352 353 355 355 359 359 361 363 363 364
Sommario
5.7
5.8
5.9
T ip i d ’istruzioni 5.5.1 Istruzioni di trasferimento dati 5.5.2 Operazioni binarie 5.5.3 Operazioni unarie 5.5.4 Confronti e salti condizionati 5.5.5 Invocazione di procedura 5.5.6 Istruzioni di cicio 5.5.7 Input/O utput 5.5.8 Istruzioni di Pentium 4 5.5.9 Istruzioni di UltraSPARC III 5.5.10 Istruzioni di 8051 5.5.11 Insiemi d’istruzioni a confronto C o n tro llo del flusso 5.6.1 Flusso sequenziale e diramazioni 5.6.2 Procedure 5.6.3 Coroutine 5.6.4 Trap 5.6.5 Interrupt U n esem pio: le to rri d i H an o i 5.7.1 Le torri di Hanoi nel linguaggio assemblativo di Pentium 4 5.7.2 Le torri di Hanoi nel linguaggio assemblativo di UltraSPARC III A rc h ite ttu ra IA -64 e Itan iu m 2 5.8.1 II problema di Pentium 4 5.8.2 Modello IA-64 e calcolo che utilizza il parallelismo esplicito 5.8.3 Riduzione degli accessi in memoria 5.8.4 Scheduling delle istruzioni 5.8.5 Riduzione dei salti condizionati: attribuzione di predicati 5.8.6 Caricamenti speculativi R iepilogo Problem i
C ap ito lo 6 6 .1
6 .2
Livello m acchina del sistem a operativo
M em o ria virtuale 6.1.1 Paginazione 6 . 1.2 Implementazione della paginazione 6 .1.3 Paginazione a richiesta e working set 6.1.4 Politica di sostituzione delle pagine 6 .1.5 Dimensione di pagina e frammentazione 6 . 1.6 Segmentazione 6.1.7 Implementazione della segmentazione 6.1.8 Memoria virtuale del Pentium 4 6.1.9 Memoria virtuale dell’UltraSPARC III 6.1.10 Memoria virtuale e caching Istruzioni virtuali d i I/O 6.2.1 File 6.2.2 Implementazione delle istruzioni virtuali di I/O 6.2.3 Istruzioni per la gestione di directory
xi
365 365 366 367 369 370 371 372 375 378 381 381 384 384 385 390 392 393 396 397 397 400 401 402 403 404 405 407 408 409 415 416 417 419 422 423 425 426 429 432 436 439 440 440 442 445
xii
6 .3
6 .4
6.5
Sommario
Istruzioni virtuali per il calcolo parallelo 6.3.1 Creazione dei processi 6.3.2 Corsa critica 6.3.3 Sincronizzazione dei processi tramite semafori Sistem i operativi di esem pio 6.4.1 Introduzione 6.4.2 Esempi di memoria virtuale 6.4.3 Esempi di I/O virtuale 6.4.4 Esempi di gestione dei processi R iepilogo P roblem i
C ap ito lo 7 7.1
7 .2
7.3
7.4
7.5
In tro d u z io n e al linguaggio assem blativo 7.1.1 Che cos’è un linguaggio assemblativo 7.1.2 Perché usare il linguaggio assemblativo 7.1.3 Formato delle istruzioni del linguaggio assemblativo 7.1.4 Pseudoistruzioni M acroistruzioni 7.2.1 Definizione, chiamata ed espansione di macro 7.2.2 Macro con parametri 7.2.3 Caratteristiche avanzate 7.2.4 Implementazione delle funzionalità macro negli assemblatori Processo di assem blaggio 7.3.1 Assemblatori a due passate 7.3.2 Prima passata 7.3.3 Seconda passata 7.3.4 Tabella dei simboli C o lleg am en to e caricam ento 7.4.1 Compiti del linker 7.4.2 Struttura di un modulo oggetto 7-4.3 Rilocazione a tempo del binding e dinamica 7.4.4 Collegamento dinamico R iepilogo Problem i
C a p ito lo 8 8.1
8.2
Livello del linguaggio assem blativo
A rc h itettu re p er il calcolo parallelo
Parallelism o nel chip 8.1.1 Parallelismo a livello delle istruzioni 8.1.2 Multithreading nel chip 8.1.3 Multiprocessori in un solo chip C oprocessori 8.2.1 Processori di rete 8.2.2 Processori multimediali 8.2.3 Crittoprocessori
446 447 448 452 455 455 463 467 477 483 485 491 492 492 493 495 498 501 501 503 504 504 505 505 506 510 511 513 514 517 518 521 525 526 529 531 531 537 543 548 548 556 561
Sommario
8.3
8.4
8.5
8.6
M uldprocessori con m em o ria condivisa 8.3.1 Multiprocessori e m ulticom puter a confronto 8.3.2 Semantica della memoria 8.3.3 Architetture di multiprocessori simmetriciUMA 8.3.4 Multiprocessori NUM A 8.3.5 Multiprocessori COM A M u ltic o m p u te r a scam bio di messaggi 8.4.1 Reti d’interconnessione 8.4.2 MPP: processori massicciamente paralleli 8.4.3 Cluster 8.4.4 Software di comunicazione per multicomputer 8.4.5 Scheduling 8.4.6 Memoria condivisa a livello applicativo 8.4.7 Prestazioni G rid co m p u tin g R iepilogo Problem i
C a p ito lo 9 9.1
9.2
A ppendice A A.1 A .2 A .3 A .4 A. 5
B .l B.2
A ritm etica b in a ria
N u m e ri a precisione fin ita Sistem i di num erazio n e in base fissa C o nversione tra basi N u m e ri b inari negativi A ritm etica binaria P roblem i
A ppendice B
562 562 569 573 581 589 591 592 595 604 609 612 613 620 626 629 630
B ibliografìa e le ttu re consigliate
L etture di a p p ro fo n d im e n to 9.1.1 Lavori introduttivi 9.1.2 Organizzazione dei calcolatori 9.1.3 Livello logico digitale 9.1.4 Livello di microarchitettura 9.1.5 Livello di architettura dell’insieme d’istruzioni 9.1.6 Livello macchina del sistema operativo 9.1.7 Livello del linguaggio assemblativo 9.1.8 Architetture per il calcolo parallelo 9.1.9 Aritmetica binaria 9.1.10 Programmazione in linguaggio assemblativo B ibliografìa alfabetica
N u m eri in v irgola m obile
P rincipi deU’aritm etica in virgola m obile S tandard in virgola m obile IE E E 7 5 4 Problem i
xiii
633
'
633 633 635 636 636 637 637 638 638 640 641 641 655 655 657 658 662 664 665 667 668 671 675
xiv
Sommario
A ppendice C C. 1
C .2
C .3
C .4
C .5
C .6 C .7 C .8
P ro g ram m azio n e in linguaggio assem blativo
Panoram ica C .l.l Linguaggio assemblativo C.1.2 Breve programma in linguaggio assemblativo Processore 8 0 8 8 C.2.1 Ciclo del processore C .2.2 Registri d’uso generale C.2.3 Registri puntatore M em o ria e in d irizzam en to C.3.1 Organizzazione di memoria e segmenti C.3.2 Indirizzamento Istruzioni dell’8088 C.4.1 Trasferimento, copia e aritmetica C.4.2 Operazioni logiche, su bit e di scorrimento C .4.3 Cicli e operazioni iterative su stringhe C .4.4 Istruzioni di salto e di chiamata C .4.5 Chiamate di subroutine C.4.6 Chiamate di sistema e subroutine di sistema C .4.7 Osservazioni sull’insieme d’istruzioni A ssem blatore C. 5.1 Introduzione C.5.2 as88, un assemblatore basato su ACK C .5.3 Differenze tra assemblatori dell’8088 T racer C . 6.1 Comandi del tracer Installazione E sem pi C.8.1 Esempio Hello World C.8.2 Esempio con i registri d ’uso generale C.8.3 Istruzioni di chiamata e puntatori ai registri C.8.4 Debugging di un programma per la stampa di array C . 8.5 Manipolazione di stringhe e istruzioni su stringhe C . 8.6 Tabella di salto C.8.7 File: accesso diretto e accesso bufferizzato Problem i
In d ice an alitico
677 678 678 678 680 680 681 683 684 684
686 689 689 692 692 693 695 696 698 699 699 700 703 705 706 708 709 709 712 713 716 719 722 723 727 729
Prefazione
all'edizione
italiana
Il passato, il presente e il fu tu ro prossim o, anzi probabile, delle arch itettu re dei calcolato ri: ecco, in estrem a sintesi, il c o n te n u to del lib ro di T anenbaum . L’autore, d o p o aver visi tato le innum erevoli pieghe dell’articolata m ateria, offre al lettore, con generosità e chia rezza, il risultato dell’indagine svolta. Parlare di com pletezza della trattazione in un’opera scientifica è sem pre rischioso, m a anche il più p ru d e n te riconoscerà che, m ai com e questa volta, T anenbaum ci è an d a to m o lto vicino. Q uesto è un libro che serve per imparare! Tra i p u n ti che vale la pena segnalare, penso alla m eticolosa descrizione delle stam p an ti laser, alle varie form e di parallelism o, alla presentazione delle innovazioni esecutive com e l’elaborazione speculativa e, in p articolar m odo, all’atten ta illustrazione dei concetti di base e dello spirito della program m azione a livello m acchina. U n tem a di cui, per q u an to arduo e spigoloso, n o n c’è d id attica che possa fare a m eno. E infatti il testo è accom pa gnato da un C D -R O M co n ten en te un bel sim ulatore dell’Intel 8088 (am piam ente descritto nell’A ppendice C) con cui si possono scrivere program m i m acchina eseguibili dai Pentium . Infine, mi piace segnalare che tra tanto tecnicismo le “battutine alla T anenbaum ” di cui è punteggiato il libro sono un vero e proprio... breath offresh air.
Prof. Ottavio M . D ’A ntona Dipartimento di Informatica e Comunicazione Università degli Studi d i Milano
Prefazione
Le prim e q u a ttro edizioni di questo libro erano basate sull’idea che un co m p u ter può es sere visto com e u n a gerarchia di livelli, in cui ciascuno realizza una particolare e ben defi nita funzione. Q u esto fo ndam entale co n cetto è valido ancor oggi così com e lo era quan d o venne pubblicata la p rim a edizione; p er questo m otivo è stato m an te n u to com e base an che di questa pubblicazione. C o m e nelle q u a ttro precedenti edizioni, sono trattati in m o do dettagliato il livello logico digitale, il livello di m icroarchitettura, l’insiem e delle istru zioni, il livello di architettu ra, il livello m acchina del sistem a operativo e il livello del lin guaggio assem blativo. Pur m antenendo q uindi la stru ttu ra di base, questa qu in ta edizione contiene m olti cam biam enti, che p erm etto n o al testo di restare al passo con la rapida evoluzione dell’industria dei com puter. Sono state aggiornate anche le m acchine utilizzate com e casi di studio nel te sto; gli esem pi presentati sono ora l’Intel Pentium 4, il Sun U ltra-SPA RC III e l’Intel 8051. Il Pentium 4 è un esem pio di C P U utilizzata largam ente su m acchine desktop, m entre l’U ltraSPA R C III è un esem pio di server m o lto diffuso, am piam ente im piegato in sistemi m ultiprocessore di m edie e grandi dim ensioni. La scelta del processore 8051 potrebbe tuttavia risultare a qualcuno inaspettata. Si trat ta di un chip di vecchia data in circolazione da decenni, to rn ato infine in auge grazie all’e n orm e crescita dei sistem i integrati. D ato che orm ai i co m p u ter vengono im piegati ovun que, dalle radiosveglie digitali ai forni a m icroonde, l’interesse per i sistemi integrati sta cre scendo rapidam ente. L’8051 rappresenta u n a scelta am piam ente diffusa grazie al costo estre m am ente basso (nell’ordine dei centesim i di euro), alla grande disponibilità di software e periferiche e all’esistenza di un gran num ero di program m atori specializzati. Nel corso degli anni, m olti professori m i h an n o richiesto a più riprese m ateriale sulla program m azione in linguaggio assemblativo. C o n la q u in ta edizione questo m ateriale è fi nalm ente disponibile ed è possibile trovarlo sia nell’A ppendice C sia nel C D -R O M allega to. Il linguaggio assem blativo scelto è quello dell’8088, dato che rappresenta una versione m olto ridotta del Pentium , u n processore assai diffuso. Avrei p o tu to utilizzare l’U ltraSPARC, il M IPS o una qualche altra C P U della quale quasi nessuno ha m ai sentito parlare, m a l’8088, com e stru m en to di m otivazione, rappresenta la scelta migliore dato che m olti studenti pos siedono u n Pentium a casa e dato che su di esso e possibile eseguire program m i 8088. Tuttavia, dato che effettuare il debug del codice assem blativo è particolarm ente difficile, ho messo a disposizione un insiem e di stru m en ti per facilitare l’ap p rendim ento della program m azione
xviii
Prefazione
assem blativa, tra cui u n assem blatore 8088, u n sim ulatore e un tracer. Q uesti strum enti so no forniti per W indow s, Unix e L inux e si trovano sia nel C D -R O M sia sul sito Internet del libro (citato in seguito). ■* N el corso degli a n n i il libro si è “allungato”. U na crescita inevitabile in q u a n to la m a teria c o n tin u a a svilupparsi e vi è un n u m ero sem pre m aggiore di cose da conoscere. Di conseguenza, q u an d o il libro è utilizzato com e testo di un corso accadem ico sem estrale p o trebbe n o n essere possibile term inarlo nell’arco delle lezioni. U n possibile approccio p o trebbe essere quello di studiare, com e m in im o indispensabile, i C apitoli 1, 2 e 3 in te ra m ente, la p rim a parte del C ap ito lo 4 (fino al Paragrafo 4 .4 com preso) e il C ap ito lo 5. L’eventuale te m p o rim an en te potreb b e essere im piegato per il resto del C ap ito lo 4 e per parti dei C ap ito li 6 , 7 e 8 selezionate in base alle preferenze del docente. V ediam o ora rapidam ente, capitolo per capitolo, le principali novità dì questa q u in ta edizione. Il C apitolo 1 presenta ancora u n a panoram ica storica delle architetture dei com puter, nella quale si evidenzia com e si sia raggiunto Io stato attuale presentando le pietre m iliari che h an n o m arcato questo cam m in o . V iene trattata una più am pia gam m a di c o m p u ter e sono in tro d o tti i tre principali esem pi usati nel testo (Pentium 4, U ltraSPA R C III e 8051). N el C ap ito lo 2 sono stati aggiornati gli argom enti relativi aU’in p u t/o u tp u t, prestando m aggior attenzione alle tecnologie dei m o d ern i dispositivi, tra cui le m acchine fotografiche digitali, le D SL e In te rn e t via cavo. Il C ap ito lo 3 è stato sottoposto a un’intensa revisione, e ora tratta i bus dei com puter e i m oderni chip di I/O . In questo capitolo vengono descritti i tre nuovi esempi a livello di processore. E stato aggiunto m ateriale relativo al bus PCI Express, che ci si aspetta sostituirà a breve il bus PCI. Il C apitolo 4 è sem pre stato m olto apprezzato per la chiara spiegazione del reale fu n zionam ento di un com puter; per questo m otivo non ha subito m odifiche rispetto alla pre cedente edizione. Sono stati co m u n q u e aggiunti alcuni nuovi paragrafi che trattano il livel lo di m icroarchitettura del Pentium 4, dell'U ltraSPA R C III e dell’8051. I C apitoli 5, 6 e 7 sono stati aggiornati usando nuovi esempi, m a al di là di questa m o difica sono rim asti sostanzialm ente im m u tati. N onostante il C apitolo 6 usi ora com e esem pio W indow s XP al posto di W indow s N T , i cam biam enti nella trattazione degli argom en ti sono m inim i. Al contrario, il C apitolo 8 ha subito profonde m odifiche per restare ai passo con lo sta to attuale delle diverse tipologie di co m p u ter paralleli. Tratta cinque distinte classi di siste m i paralleli, dal parallelism o nel chip (parallelismo a livello d ’istruzione, m ultithreading nel chip, m ultiprocessori a singolo chip), ai coprocessori, ai sistemi a m em oria condivisa e ai cluster, p er term inare infine con u n a breve analisi dei grid. Sono inoltre presentati vari n u o vi esem pi, tra cui C P U TriM edia, B lueG ene/L , R ed Storm e i cluster di Google. D ato che l’arch itettu ra dei calcolatori è un cam po in co n tin u a evoluzione, m olti dei riferim enti citati nel C apitolo 9 sono stati aggiornati. O ltre la m età di quelli presenti in que sta q u in ta edizione sono libri e articoli scientifici scritti successivamente alla q u arta p u b b li cazione di questo testo. Le A ppendici A e B n on sono state m odificate rispetto all’edizione precedente, m en tre l’A ppendice C sulla program m azione assem blativa è com pletam ente nuova. È una gui da pratica e facile da consultare sulla program m azione in linguaggio assemblativo attraver
Prefazione
xix
so gli stru m en ti forniti nel C D -R O M . L’A ppendice C è stata scritta dal D o tt. Evert W attel della Vrije U niversiteit di A m sterdam . Il D o tt. W attel ha un’esperienza pluriennale d ’inse gnam en to m ediante questi strum enti; a lui vanno i miei ringraziam enti per aver scritto que sta appendice. Sul C D -R O M , oltre agli stru m en ti per il linguaggio assem blativo, si trova un sim ula tore grafico d a utilizzare com e ausilio nello studio del C apitolo 4. Q uesto sim ulatore è sta to scritto dal Prof. R ichard Salter dell’O b erlin College e può essere usato dagli studenti per com prendere meglio gli argom enti trattati in questo capitolo. Ringrazio il Prof. Richard Salter per aver scritto questo program m a. Sul sito web sono disponibili le presentazioni in Pow erPoint per i docenti. Per poter raggiungere il sito web del libro occorre andare all’indirizzo http:/www.prenhall.com/tanenbaum
e selezionare l’icona relativa a q uesto testo; u n m en u perm ette p o i di scegliere le sezioni desid erate1. Varie persone h an n o letto, interam ente o in parte, il testo e h a n n o fornito utili sugge rim enti o sono state d ’aiuto in altro m odo. In particolare vorrei ringraziare per il loro aiuto N ikitas A lexandrìdis, Shekar Borkar, H erb ert Bos, S cott C an n o n , D oug C arm ean, Alan C harlesw orth, Eric Cota-Robles, M ichael Fetterm an, Q u in n Ja c o b so n .T h ilo K ielm ann, Iffat Kazi, Saul Levy, A h m ed L ouri, A bhijit Pandya, Krist Petersen, M a rk Russinovich, Ronald Schroeder e Saim Ural. Sono loro riconoscente. Grazie. Vorrei inoltre ringraziare Jim G o o d m an per il co n trib u to che ha dato a questo libro, in particolare nei C apitoli 4 e 5. L’idea di usare la Java V irtual M achine è stata sua e il libro, grazie a questa scelta, ne h a tra tto in d u b b io vantaggio. Infine vorrei ringraziare ancora una volta Suzanne per il suo am ore e la sua pazienza che, d o p o 15 libri, sem bra orm ai infinita. Barbara e M arvin sono da sem pre fonte di feli cità e ora sono a conoscenza di che cosa fanno i professori per guadagnarsi da vivere. Nel 2 0 0 4 la Royal N etherlands A cadem y o f Arts an d Sciences m i ha assegnato un prem io m ol to am bito, l’A cadem y Professorship, liberandom i da alcuni degli aspetti m eno attraenti del la vita accadem ica (com e le noiose e interm inabili riunioni di com itato); di questo sarò lo ro eternam ente grato.
Andrew S. Tanenbaum
I docenti che adottano questo resto in un corso universitario potranno richiedere le slide in italiano e il Solutions
Manual (in inglese) direttamente ai rappresentanti accademici Pearson Education Italia oppure inviando un mes saggio e-raail a: [email protected] (N.d.E.).
Capitolo 1
Introduzione
U n calcolatore digitale è una m acchina che p uò risolvere problem i eseguendo le istruzioni che le vengono assegnate. C o n il term in e programma si intende una sequenza d istruzioni che descrive com e portare a term ine u n d ato com pito. I circuiti elettronici di un qualsiasi co m p u ter possono riconoscere ed eseguire d irettam ente soltanto un insiem e lim itato d ’i struzioni sem plici in cu i tu tti i program m i devono essere convertiti prim a di p o te r essere eseguiti. R aram ente queste istruzioni elem entari sono m olto più com plicate delle seguenti: •
som m are due num eri
•
controllare se u n num ero vale zero
•
copiare una porzione di dati d a una parte all’altra della m em oria.
L’insiem e di queste istruzioni prim itive form a un linguaggio, chiam ato linguaggio macchina, attraverso il quale è possibile com unicare con il com puter. C hi progetta un calcolatore deve decidere quali istruzioni costitu iran n o il suo linguaggio m acchina. Per ridurre la com ples sità e il costo dei dispositivi elettronici generalm ente si cerca di progettare le p iù semplici istruzioni prim itive che siano com patibili con il tipo di utilizzo e i requisiti prestazionali in base ai quali si progetta il com puter. D ato che quasi tu tti i linguaggi m acchina sono sem plici ed elem entari, risulta difficile e tedioso utilizzarli. Nel corso del tem po, questa sem plice osservazione ha p o rtato a stru tturare i com puter com e una serie di livelli di astrazione, ciascuno dei quali è costruito sulla base di quello sot tostante. In questo m o d o la com plessità è gestibile più agevolm ente e i co m p u ter possono essere progettati in m odo sistem atico e organizzato. C hiam iam o approccio strutturale que sto m odo di concepire l’architettura dei com puter; nel paragrafo successivo, descriveremo in m o d o p iù preciso che cosa intendiam o con questo term ine. Successivamente prenderem o in considerazione alcuni sviluppi storici, io stato deU’arte e alcuni im p o rtan ti esempi.
2
Capitolo 1
1.1
Introduzione
Approccio strutturale
C om e abbiam o app en a accennato esiste u n a gran differenza tra ciò che è adatto agli utenti e ciò che lo è per i com puter. Gli u ten ti vogliono fare X, m a i co m p u ter possono fare sol tan to Y: ciò genera un problem a e l’obiettivo di questo libro è spiegare in che m odo sia pos sibile risolverlo.
1.1.1
Linguaggi, livelli e macchine virtuali
Il problem a p u ò essere affrontato in d u e m o d i distinti: entram bi prevedono la definizione di un nuovo insiem e d ’istruzioni che sia più com odo da utilizzare rispetto a q u anto non lo siano le istruzioni m acchina predefinite. C onsiderate globalm ente, anche queste nuove istru zioni form ano u n linguaggio, che chiam iam o L I , allo stesso m odo in cui le istruzioni m ac china form avano a loro volta u n linguaggio, che chiam iam o LO. I due approcci differiscono nel m o d o in cui i program m i scritti in L I possono essere eseguiti da u n com puter, in grado di eseguire soltanto quelli scritti nel proprio linguaggio m acchina, LO. U n m etodo per eseguire un program m a scritto in L I consiste nel sostituire, in una fase iniziale, ogni sua istruzione con u n ’equivalente sequenza di istruzioni in LO. Il program m a che ne risulta è costituito interam ente d a istruzioni di LO e può essere eseguito dal co m p u ter al posto del program m a LI originale. Q uesta tecnica è chiam ata traduzione. L’altra tecnica consiste invece nello scrivere un program m a in LO che accetta com e dati d ’ingresso p rogram m i in L I; tale program m a li esegue esam inando un’istruzione alla volta e sostituendola d irettam en te con l’equivalente sequenza di istruzioni LO. Q uesta tecnica, che non richiede la generazione preventiva di u n nuovo program m a LO, è chiam ata interpreta zione e il pro g ram m a che la esegue è d etto interprete. La traduzione e l’interpretazione sono simili. In entram bi i m etodi il co m p u ter può trattare istruzioni in L i eseguendo le equivalenti sequenze di istruzioni LO. La differenza è che, nel caso della traduzione, il pro g ram m a L I viene, all’inizio, convertito interam ente in u n program m a LO. Il program m a LI p uò q uindi essere gettato via, m entre il program m a LO viene caricato nella m em oria del c o m p u ter per essere eseguito. D u ran te l’esecuzione il co m p u ter ha il controllo del nuovo p rogram m a LO. NcH’interpretazione ciascuna istruzione LI viene esam inata e decodificata, e quindi ese guita d irettam en te senza generare alcun program m a tradotto. In questo caso il c o m p u ter ha il controllo del p ro g ram m a interprete, m entre il program m a L I è visto com e u n insiem e di dati. E ntram bi i m etodi, oltre a u n a sem pre più frequente com binazione dei due, sono a m p iam en te utilizzati. Invece di ragionare in term ini d i traduzione e interpretazione, spesso è più sem plice im m aginare l’esistenza di un ipotetico c o m p u ter o macchina virtuale, il cui linguaggio m acchina sia L I. C hiam iam o questa m acchina virtuale M I (e chiam iam o MO la m acchina virtuale co rrispondente al linguaggio LO). Se u n a tale m acchina potesse essere costruita in m odo sufficientem ente econom ico, n o n ci sarebbe affatto bisogno del linguaggio LO né di una m acchina capace di eseguire p rogram m i LO. G li utenti potrebbero sem plicem ente scri vere i loro program m i in L I , che verrebbero eseguiti direttam ente dal com puter. A nche se una m acchina virtuale con linguaggio m acchina LI è tro p p o costosa o com plicata da essere costruita realm ente, si possono tuttavia scrivere program m i dedicati. Q uesti program m i pos
1.1
Approccio strutturale
3
sono essere interpretati o p p u re tra d o n i da u n p rogram m a scritto in LO, eseguibile direttam ente sui co m p u ter esistenti. In altre parole, si possono scrivere program m i per m acchine virtuali com e se queste esistessero veram ente. Per rendere la traduzione o l’interpretazione utilizzabili in pratica, i linguaggi LO e L I non devono essere “troppo” diversi fra loro. Per la m aggior parte delle applicazioni questo vincolo fa sì che L I, p u r essendo m igliore d i LO, sia spesso ancora lontano dal linguaggio ideale. Q uesto risultato p uò sem brare forse scoraggiante rispetto alle intenzioni iniziali, se condo cui la creazione di LI avrebbe dovuto sollevare il program m atore dall’onere di espri mere algoritm i in un linguaggio più adatto alle m acchine che agli utenti. In ogni caso la si tuazione non è senza speranza. L’approccio più ovvio consiste ncU’inventare un nuovo insiem e d ’istruzioni che sia, ri spetto a L I, m aggiorm ente orientato agli utenti piuttosto che alle m acchine. A nche questo terzo insiem e form a a sua volta u n linguaggio, che chiam iam o L2 (e la cui corrispondente m acchina virtuale sarà M 2). Si possono scrivere direttam ente program m i in L2 com e se esi stesse realm ente una m acchina virtuale dotata di tale linguaggio m acchina. Q uesti program m i possono essere trad o tti in L I o ppure eseguiti da un interprete scritto in L I. La definizione di u n a serie di linguaggi, ciascuno dei quali più pratico d a utilizzare ri spetto al precedente, p uò co n tin u are indefinitam ente finché no n se ne ottenga uno suffi cientem ente adeguato. C iascun linguaggio utilizza il precedente com e base; u n com puter che usa questa tecnica p uò q uindi essere im m aginato com e una serie di strati o livelli disposti l’uno sopra l’altro, com e m ostrato nella Figura 1.1. Il livello, o linguaggio, che si trova più in basso è il p iù sem plice, m en tre quello più in alto è il p iù sofisticato. I programmi in Ln sono interpretati
Figura 1.1
Macchina multilivello.
4
Capitolo I
Introduzione
Tra i linguaggi e le m acchine virtuali sussiste un’im portante relazione. U na m acchina ha un proprio linguaggio m acchina, costituito da tu tte le istruzioni che è in grado di eseguire. D i fatto, una m acchina definisce u n linguaggio. Viceversa, un linguaggio definisce u n a m ac china, vale a dire quella che è in grado di eseguire tu tti i program m i scritti in quel linguag gio. A nche se una m acchina definita da un linguaggio arbitrario potrebbe ovviam ente essere enorm em ente com plicata e costosa da realizzare, è tuttavia possibile im m aginarla. U na mac china dotata di C , C++ o Java com e linguaggio m acchina risulterebbe sicuram ente complessa ma, grazie alla tecnologia odierna, sarebbe in ogni caso realizzabile. Vi è tuttavia una buona ragione p er non costruire tale c o m p u te r risulterebbe infatti più costoso rispetto all’utilizzo di altre tecniche. 11 semplice fatto che sia realizzabile non è sufficiente, dato che u n progetto, per essere fattibile, deve anche essere econom icam ente conveniente. In u n certo senso, un com puter con n livelli pu ò essere interpretato com e n distinte m acchine virtuali; d o ra in avanti utilizzerem o q u indi in m odo interscam biabile i term ini “livello” e “m acchina virtuale”. Solo i program m i scritti nel linguaggio LO possono essere eseguiti direttam en te dalla com ponentistica digitale senza far ricorso alla traduzione o al l’interpretazione, m entre i program m i scritti in L I, L2, ..., L « devono essere interpretati da un interprete eseguito a u n livello inferiore oppure devono essere tra d o tti in un altro lin guaggio, co rrispondente a un livello più basso. Se si scrivono program m i utilizzando la m acchina di un dato livello non ci si deve preoc cupare degli interpreti o dei trad u tto ri sottostanti, dato che la stru ttu ra della m acchina as sicura che questi program m i saranno, in un m odo o n e l l ^ r o , eseguiti. N o n è di alcun in teresse pratico il fatto che siano p o rta ti a term in e da un interprete, eseguito a sua volta da u n altro interprete, o p p u re che siano eseguiti d irettam ente dai circuiti digitali. In entram bi i casi si o ttien e lo stesso risultato: i program m i vengono eseguiti. La maggior parte dei program m atori che usa una m acchina di un dato livello è interes sata solam ente al livello superiore, quello che m eno assomiglia al linguaggio m acchina del li vello più basso. Tuttavia chi è interessato a com prendere il reale funzionam ento di un com puter li deve studiare rutti. Anche chi progetta nuovi com puter o nuovi livelli (cioè nuove macchine virtuali) deve avere la stessa familiarità con tutti i livelli e non solo con quello superiore. Il tema centrale di questo libro è costituito da concetti e tecniche inerenti la costruzione di macchine com e gerarchie di livelli, nonché dai dettagli di quest’ultim i.
1.1.2
Attuali macchine multilivello
La m aggior p a n e dei m oderni co m p u ter consiste di due o più livelli. C om e m ostrato nella Figura 1.2 esistono anche m acchine costituite da sei livelli. Il livello 0, che si trova alla base, rappresenta il vero e proprio hardw are della m acchina, i cui circuiti eseguono i program m i scritti nel linguaggio m acchina del livello 1. Per com pletezza occorre dire che esiste u n ul teriore livello al di so n o di quello che noi consideriam o livello 0. Q uesto livello è chiam ato livello dei dispositivi e n on è m ostrato nella Figura 1.2, dato che ricade nel cam po del l’ingegneria elettronica (al di fuori q u in d i dell’am b ito di questo libro). A questo livello i p ro gettisti h an n o a che fare con i singoli transistor, gli elem enti prim itivi nella progettazione dei com puter. Se si vuole studiare il funzionam ento interno dei transistor si deve entrare nel cam po della fisica dello stato solido. Gli oggetti che analizzeremo nel livello più basso della nostra trattazione, il livello lo gico digitale, sono le porte {gate). Q ueste, p u r essendo costruite utilizzando com ponenti ana-
1.1
Figura 1.2
Approccio strutturale
5
Computer a sei livelli. Sotto ciascun livello è indicato il metodo di supporto (oltre al nome del programma corrispondente).
logici com e i transistor, possono essere co rrettam ente m odellate com e dispositivi digitali. Ciascuna porta, costituita al più da u n a m anciata di transistor, è dotata di un o o p iù in p u t digitali (segnali corrispondenti ai valori 0 o 1) e calcola in o u tp u t una semplice funzione dei valori d ’ingresso, per esempio A N D o d O R . E possibile com binare un piccolo num ero di porte per form are u n a m em oria a 1 bit, che p u ò m em orizzare i valori 0 e 1. C o m b in an d o le m em o rie a 1 b it in gruppi, per esem pio di 16, 3 2 o 64, è possibile formare quelli che vengono chia m ati registri. C iascun registro p u ò contenere un num ero il cui valore può variare fino a un certo lim ite. È inoltre possibile com binare le porte per form are lo stesso m otore com putazio nale principale. Nel C apitolo 3 esam inerem o in dettaglio le porte e il livello logico digitale. Subito dopo troviam o il livello di 'microarchitettura. Q u i vi è u n a m em o ria locale, form ata da un gruppo di registri (in genere da 8 a 32), e un circuito chiam ato A L U [Arithmetic Logic Unii, u n ità aritm etico-logica), capace di effettuare sem plici operazioni aritm etiche. I registri sono connessi alla ALU p er form are u n percorso dati lungo il quale questi ultim i si spostano. L’operazione base del percorso d ati consiste nel selezionare uno o due registri, per m ettere alla ALU di operare su di loro (per esem pio som m andoli) e m em orizzare infine il risultato in u no dei registri. In alcune m acchine le operazioni del percorso dati sono con trollate da u n program m a chiam ato microprogramma, m entre su altre il percorso dati è con trollato d irettam en te dall’hardw arc. N elle precedenti edizioni di questo libro abbiam o chia m ato tale livello il “livello di m icroprogram m azione”, dato che in passato era quasi sem pre rappresentato d a u n interprete software. A ttualm ente invece il percorso dati è spesso con trollato in m odo d iretto dall’hardw are (interam ente o parzialm ente); per rispecchiare que sto cam biam ento abbiam o m odificato il nom e del livello.
6
Capitolo I
Introduzione
N elle m acchine in cui il co n tro llo del percorso dati avviene via softw are il m icro program m a è u n in terp rete p er le istruzioni del livello 2 , che utilizza il percorso d ati per prelevare, esam inare ed eseguire un’istru zio n e alla- volta. N el caso per esem pio di u n ’i struzio n e a d d , q u esta viene prelevata, i suoi o p e ra n d i localizzati e p o rta ti nei registri, la som m a calcolata dalla ALU e infine il risu ltato viene ricopiato nel registro ap p ro p riato . Passi an aloghi si verificano anche in u n a m acch ina con co ntrollo via hardw are del per corso d ati, senza però avere u n p rogram m a m em orizzato e dedicato all’interpretazione delle istruzioni del livello 2 . Il livello 2 è costituito da quello che chiam iam o il livello ISA (Instruction Set Architecture LeveL livello di arch itettu ra dell’insiem e d ’istruzioni). O g n i pro d u tto re di c o m p u ter p u b blica u n m anuale per ciascuno dei propri m odelli, un “M anuale di riferim ento del linguag gio m acchina" o “Principi di funzionam ento del co m p u ter W estern W om bat M odel 100X ”, o qualcosa di simile. Q uesti m anuali trattan o il livello ISA, m a non quelli sottostanti; q u ando descrivono l’insiem e d ’istruzioni della m acchina, presentano in realtà le istruzioni eseguite in m o d o interpretato dal m icroprogram m a o dai circuiti elettronici. Se un p ro d u tto re di co m p u ter dotasse u n a delle proprie m acchine di due diversi interpreti, dovrebbe fornire due distinti m anuali del “linguaggio m acchina” d ato che i due interpreti definirebbero due li velli ISA differenti. Il livello successivo è generalm ente un livello ibrido. La m aggior p an e delle istruzioni nel suo linguaggio fa p a n e anche del livello ISA (non vi è ragione per cui un’istruzione che appaia a un livello n o n possa essere presente anche in altri). Inoltre, vi è un insiem e di nuove istruzioni, una diversa organizzazione della m em oria e la capacità di eseguire program m i in m odo concorrente, oltre a varie altre funzionalità. Fra i diversi m odi di progettare il livello 3 vi è una m aggior varietà rispetto a q u an to non si riscontri nei livelli 1 e 2 . I nuovi servizi aggiunti nel livello 3 sono realizzati da un interprete eseguito al livello 2, storicam ente chiam ato sistema operativo. Le istruzioni del livello 3, identiche a quelle del li vello 2 , sono eseguite direttam ente dal m icroprogram m a (o dai circuiti elettronici) e non dal sistem a operativo. In altre parole, alcune delle istruzioni del livello 3 sono interpretate dal si stem a operativo, m entre altre sono interpretate in m odo diretto dal m icroprogram m a; per que sto m otivo tale livello viene d etto “ibrido”. Nel corso del libro ci si riferirà a questo livello com e al livello macchina del sistema operativo. Tra i livelli 3 e 4 vi è una spaccatura fondam entale. I tre livelli inferiori non sono p ro gettati p er essere utilizzati dal program m atore m edio, m a concepiti principalm ente per ese guire interpreti e trad u tto ri necessari com e su p p o rto per i livelli più alti. Q uesti interpreti e traduttori sono scritti da professionisti chiam ati programmatori di sistema, specializzati nella progettazione e nell’im plem entazione di nuove m acchine virtuali. Il livello 4 e quelli supe riori sono invece pensati per i program m atori che devono risolvere problem i applicativi. U n altro cam biam ento che si riscontra a partire dal livello 4 è il m odo in cui vengono suppo rtati i livelli superiori. M entre i livelli 2 e 3 sono sem pre interpretati, i livelli 4, 5 e quelli superiori sono generalm ente su p p o rtati m ediante traduzione. U n ’ulteriore differenza tra i prim i tre livelli e gli altri riguarda la natura del linguaggio corrispondente. 1 linguaggi m acchina dei livelli 1, 2 e 3 sono num erici; i loro program m i consistono q u in d i in lunghe serie di num eri, certam ente p iù adatte alle m acchine che agli esseri um ani. A partire dal livello 4 i linguaggi contengono invece parole e abbreviazioni um a nam en te com prensibili.
1.1
Approccio strutturale
7
Il livello 4, quello del linguaggio assemblativo, è in realtà una form a sim bolica di uno dei linguaggi sottostanti. Q uesto livello fornisce ai program m atori un m odo per scrivere pro gram m i per i livelli 1, 2 e 3 in u n a form a m eno difficoltosa rispetto a quella dei linguaggi delle rispettive m acchine virtuali. I program m i in linguaggio assem blativo sono inizialm ente trad o n i nei linguaggi dei livelli 1, 2 o 3 e successivam ente interpretati dall’appropriata mac ch in a virtuale o reale. Il program m a che esegue la traduzione è chiam ato assemblatore. Il livello 5 consiste generalm ente di linguaggi, spesso chiam ati linguaggi ad alto livello, definiti per essere utilizzati dai program m atori di applicazioni. N e esistono letteralm ente a centinaia; alcuni fra i p iù conosciuti sono C , C++, Java, LISP e Prolog. I program m i scritti in questi linguaggi sono generalm ente tra d o tti al livello 3 o al livello 4 da un traduttore detto compilatore; in casi m eno frequenti è anche possibile che essi siano interpretati. I pro gram m i in Java, p er esem pio, di solito sono tradotti inizialm ente in un linguaggio di tipo ISA chiam ato Java byte code, che viene successivam ente interpretato. In alcuni casi, il livello 5 consiste di un interprete specifico per un determ inato cam po di applicazione, per esem pio la m atem atica sim bolica. Fornisce dati e operazioni per risol vere problem i in quell’area in term ini facilm ente com prensibili agli esperti di quel cam po. R iassum endo, il con cetto chiave da ricordare è che i com puter sono progettati com e una serie di livelli, ciascuno co struito su quelli che lo precedono. C iascun livello rappresenta una diversa astrazione, caratterizzata dalla presenza di oggetti e operazioni diversi. Progettan do e analizzando i co m p u te r in questo m o d o è possibile tralasciare tem poraneam ente i det tagli irrilevanti, riducendo di conseguenza u n soggetto com plesso in qualcosa di più facile com prensione. L’insiem e dei tipi di d ati, delle operazioni e delle funzionalità di ciascun livello è chia m ato architettura. Q uesta tratta gli aspetti visibili agli utenti di quel determ inato livello. Fanno quindi parte dell’architettura le caraneristiche che u n program m atore può vedere, com e la q u an tità di m em oria disponibile, m entre n o n ne fanno parte gli aspetti im plem entativi, com e la tecnologia con cui è realizzata la m em oria. Lo studio di com e progettare le parti di un co m p u ter visibili ai program m atori è chiam ato architettura degli elaboratori. N ella pra tica co m u n e architettura dei calcolatori e organizzazione dei co m p u ter significano essen zialm ente la stessa cosa.
1.1.3
Evoluzione delle macchine multilivello
Per fornire una panoram ica delle m a c c h ile m ultilivello, ne esam inerem o brevem ente gli svi luppi storici, m ostrando com e il n u m ero e la n atu ra dei livelli siano evoluti nel corso degli anni. I program m i scritti in un vero linguaggio m acchina (livello 1) possono essere eseguiti d irettam en te dai circuiti del co m p u ter (livello 0 ), senza far ricorso ad alcuna traduzione o interpretazione. Q uesti circuiti form ano, insieme alla m em oria e ai dispositivi di in p u t/o u tp u t, l’hardware del com puter. L’hardw are consiste di oggetti tangibili (circuiti integrati, schede con circuiti stam pati, cavi, trasform atori, m em orie e stam panti) piuttosto che di idee astratte, algoritm i o istruzioni. Al contrario, il software consiste di algoritmi (istruzioni dettagliate su com e realizzare un determ inato com pito) e delle loro rappresentazioni per i com puter, vale a dire i program m i. I p rogram m i possono essere m em orizzati su hard disk, floppy disk, C D -R O M o altri sup porti, m a l’essenza del softw are è l’insiem e delle istruzioni che costituiscono il program m a, non il su p p o rto fìsico su cui sono registrate.
8
Capitolo 1
Introduzione
N ei prim issim i com puter, il confine tra hardw are e software era chiaro e cristallino. N el corso del tem po, m an m ano che i co m p u ter si sono evoluti, quel confine si è però sfocato in m odo considerevole per via dell’aggiunta, della rim ozione e dell’unione di livelli, tanto che oggi è spesso difficile tenerli separati (V ahid, 2003). E p roprio per questo, u n tem a cen trale di questo libro è:
hardware e software sono logicamente equivalenti. O gni operazione eseguita via software può anche essere costruita direttam ente in hardware, preferibilm ente d o p o averne com preso in m o d o sufficientem ente ap profondito il funziona m ento. C o m e ha afferm ato Karen P anetta Lentz: “Lhardw are non è che softw are pietrifi cato”. O vviam ente è anche vero il contrario: ogni istruzione eseguita dall’hardw are può es sere sim ulata via software. La scelta di collocare certe funzioni nell’hardw are e altre nel software è basata su fattori quali il costo, la velocità, l’affidabilità e la frequenza di m odifi che che ci si aspetta. Esistono poche regole ferree nello stabilire se X deve andare nell’hardware e Y deve essere p rogram m ato esplicitam ente. Q u este scelte cam biano a seconda del m ercato delle tecnologie, della d o m an d a e del m o d o di usare il com puter.
Invenzione della microprogrammazione 1 prim i co m p u te r digitali, risalenti agli anni 40 , avevano solam ente due livelli: il livello ISA, in cui erano realizzati tu tti i program m i, e il livello logico digitale, che li eseguiva. I circuiti del livello logico digitale erano com plessi, difficili da com prendere e d a realizzare e, oltre rutto, inaffidabili. N el 1951 M aurice W ilkes, u n ricercatore della C am bridge University, propose di p ro gettare un co m p u ter a tre livelli, al fine di sem plificare drasticam ente l’hardw are (W ilkes, 1951). Q u esta m acchina avrebbe dovuto avere u n interprete predefinito e n o n m odificabile (il m icroprogram m a), la cui funzione sarebbe stata quella di eseguire program m i al livello ISA m ediante interpretazione. Sarebbe stato necessario un m inor num ero di circuiti elet tronici, d ato che l’hardw are avrebbe dovuto eseguire m icroprogram m i costituiti da un in sieme lim itato di istruzioni invece di program m i a livello ISA, basati su un insiem e di istru zioni m olto più am pio. D ato che i circuiti di allora erano costituiti da valvole', una tale sem plificazione prom etteva di ridurne il n u m ero m igliorando di conseguenza l’affidabilità (cioè dim in u en d o il n u m ero giornaliero di guasti). D u ran te gli anni ’50 vennero costruite poche di queste m acchine a tre livelli, m entre lo furo n o di più negli anni ’60. A partire dal 1970 l’idea di avere un livello ISA interpretato da u n m icroprogram m a divenne d o m in an te e tu tte le principali m acchine dell’epoca la im plem entarono.
Invenzione del sistema operativo In questi prim i anni la m aggior parte dei co m p u ter era di tipo “fai da te”, il che significava che il program m atore doveva far funzionare la m acchina personalm ente. V icino a ogni m ac china vi era u n foglio su cui ogni program m atore prenotava la fàscia oraria d u ran te la quale desiderava far eseguire il proprio program m a, per esem pio dalle 3 alle 5 del m attin o (m olti
I cosiddetti tubi a vuoro [N.d.Reti).
1.1
Approccio strutturale
9
program m atori preferivano lavorare q u an d o vi era silenzio in sala m acchine). Q u an d o arri vava il m o m en to , il p rogram m atore si dirigeva verso la sala m acchine con un mazzo di schede perforate da 80 colonne (uno dei prim i supporti di in p u t) in una m ano e una m a tita a p p u n tita nell’altra. U n a volta arrivato nella stanza del co m p u ter spingeva gentilm ente il precedente program m atore fuori dalla p o rta e prendeva il controllo del com puter. Se il program m atore desiderava eseguire un program m a F O R T R A N si verificavano i seguenti passi.
1. G uardava nell'arm adietto dove erano tenuti tutti i program m i, estraeva il grande mazzo di schede verdi erichenato “com pilatore F O R T R A N ”, lo inseriva nel lettore delle schede perforate e prem eva il pulsante START. 2. Inseriva il suo p rogram m a nel lettore delle schede e prem eva il pulsante CO N TIN U E, il program m a veniva letto. 3. Q u a n d o il co m p u ter si arrestava, il program m atore faceva leggere il suo program m a F O R T R A N u n a seconda volta. A nche se alcuni com pilatori richiedevano una sola pas sata sull’in p u t, m old altri ne richiedevano due o più. A ogni passata doveva essere letto un gran num ero di schede. 4. Infine la traduzione si avvicinava al term ine. Spesso in questa fase il program m atore diventava nervoso, poiché, nel caso in cui il com pilatore avesse trovato un errore nel program m a, avrebbe dovuto ricom inciare da capo l’intero processo. Se non vi erano errori, il com pilatore perforava una scheda contenente il program m a tra d o tto in lin guaggio m acchina. 5. Il program m atore inseriva q uindi il program m a in linguaggio m acchina e il gruppo di schede delle su b ro u tin e nel lettore delle schede e le faceva leggere tu tte insieme.
6 . II pro g ram m a iniziava l’esecuzione; spesso non funzionava o si bloccava a m età. In genere il p ro g ram m ato re si m ettev a a m anipolare gli in te rru tto ri e fissava p e r u n at tim o le luci della console. Se era fo rtu n a to riusciva a capire il problem a, correggeva l’errore e tornava all’arm a d ie tto c o n te n e n te il com pilatore F O R T R A N per rico m in ciare la p ro ced u ra da capo. Se era m en o fo rtu n ato allora doveva stam pare una m ap pa della m em oria, chiam ata d u m p d i m e m o ria (core dump) e portarsela a casa da analizzare. j Q u esta procedura, al di là di piccole variazioni, fu per an n i la n o rm alità in m olti centri di calcolo. 1 p rogram m atori erano costretti a im parare com e far funzionare la m acchina e a sa pere che cosa fare q u an d o si verificava u n guasto (cosa che succedeva spesso). La m acchina restava frequentem ente inattiva m entre gli operatori portavano le schede in giro per la stanza o si grattavano la testa nel tentativo di com prendere il m otivo per cui i loro program m i non funzionavano corretram enre. In to rn o al 1960 si cercò di ridurre la q u an tità di tem po sprecato, autom atizzando il la voro dell’operatore. U n program m a chiam ato sistema operativo era tenuto costantem ente nel com puter. Il program m atore forniva, insiem e al proprio program m a, alcune schede di controllo che venivano lette ed eseguite dal sistem a operativo. La Figura 1.3 m ostra un sem plice co m p ito (job) per uno dei prim i e più diffusi sistemi operativi, chiam ato FM S (Fortran Monitor System) e funzionante su u n IBM 709.
10
C apitolo!
Introduzione
♦JOB, 5 4 9 4 , BA R B A R A •XEQ •FO R TR A N
Programma FO R TR A N “
*D ATA
Schede dei dati “
•EN D
Figura 1.3
Semplice "job" per il sistema operativo FMS.
11 sistem a operativo leggeva la scheda “JO B e usava te inform azioni ivi m em orizzate per la gestione degli account (l’asterisco era utilizzato per identificare le schede di controllo, in m odo d a n on confonderle con quelle del program m a e dei dati); successivam ente leggeva la scheda “F O R T R A N , che era u n ’istruzione per caricare il com pilatore FO R T R A N da un n a stro m agnetico. Il com pilatore poteva q u in d i leggere e com pilare il p rogram m a F O R T R A N . Q u an d o il com pilatore term inava, restituiva il co ntrollo al sistema operativo, che iniziava la lettura della scheda 'D A T A , Q uesta rappresentava un’istruzione per eseguire il program m a trad o tto , utilizzando com e dati le schede che seguivano la scheda *DATA. Sebbene il sistem a operativo fosse stato progettato per autom atizzare il co m pito del l’operatore (da qui il suo nom e), fu allo stesso tem po il prim o passo nello sviluppo di una nuova m acchina virtuale. La scheda ‘ F O R T R A N potrebbe essere interpretata com e un’i struzione virtuale “com pila il program m a”. A nalogam ente la scheda * D A T \ potrebbe essere vista com e u n ’istruzione virtuale “esegui il program m a”. A nche se due sole istruzioni n o n sono sufficienti per costituire u n vero e proprio livello, era com unque il prim o passo in quella direzione. N egli anni successivi, i siscemi operativi divennero sem pre p iù sofisticati. Al livello ISA v ennero ag giunte nuove istru zio n i, nuovi servizi e nuove caratteristiche, finché n o n co m in ciò ad assum ere l’aspetto di u n nuo v o livello. Alcune di queste istruzioni erano identiche a quelle del livello ISA, m a altre, in particolare le istruzioni di in p u t/o u tp u t, erano c o m p le ta m e n te diverse. Le nuove istru zio n i erano spesso c o n o sciu te com e in a c ro del siste m a o p e ra tiv o o c h ia m a te al s u p e rv iso re ; oggi si usa generalm ente il term in e c h ia m a te d i siste m a . I sistemi operativi si svilupparono anche sotto altri aspetti. 1 prim i leggevano i pacchi di schede e stam pavano l’o u tp u t attraverso la stam pante; questa organizzazione era co n o sciuta com e siste m a b a tc h (“a lo tti”). G eneralm ente vi era un’attesa di varie ore tra il m o-
1.1
Approccio strutturale
11
menco in cui un program m a veniva assegnato alla m acchina e quello in cui il risultato era pronto; in tali circostanze lo sviluppo del software risultava difficile. N ei prim i anni '6 0 alcuni ricercatori del D a rtm o u th College, del M .I.T . e di altre u n i versità svilupparono sistem i operativi che perm ettevano a più program m atori di com unicare direttam en te con il com puter. In questi sistem i u n a serie di term inali rem oti erano connessi attraverso linee telefoniche al co m p u ter centrale, che veniva cosìxondiviso da diversi utenti. U n program m atore poteva digitare u n program m a e ottenere il risultato quasi im m ediata m ente, nel proprio ufficio, nel garage di casa o ovunque si trovasse il term inale. Q uesti si stemi erano chiam ati sistemi a condivisione di tempo (time sharing systems). P iù che agli aspetti riguardanti la condivisone di tem po, il n o stro interesse per i si stem i operativi è rivolto a quelle parti che in terp retano le istruzioni e le funzionalità pre senti al livello 3, m a n o n al livello ISA. O ccorre tenere a m ente che i com piti dei sistemi operativi si spingono m olto al di là della sem plice interpretazione delle funzionalità aggiunte al livello ISA.
Migrazione delle funzionalità verso il microcodice Q u an d o la m icroprogram m azione divenne una pratica com une (a partire dal 1970), i pro gettisti capirono che avrebbero p o tu to aggiungere nuove istruzioni sem plicem ente estendendo il m icroprogram m a. In altre parole avrebbero p o tu to aggiungere “hardw are” (nuove istru zioni m acchina) per mezzo della program m azione. Q uesta scoperta p o rtò a una virtuale esplosione dcU’insiem e delle istruzioni m acchina, dato che i progettisti gareggiavano nel produrre insiem i d ’istruzioni sem pre più estesi e migliori. M olte di queste istruzioni non erano strettam ente necessarie nel senso che il loro risultato poteva essere facilm ente o tte n u to at traverso u n a sequenza d ’istruzioni già esistenti, m a spesso la loro esecuzione risultava leg germ ente p iù veloce. M olte m acchine, p er esem pio, avevano u n ’istruzione INC (IN C rem ent) che som m ava u no a u n num ero; u n a tale istruzione speciale per aggiungere sem pre 1 (o, analogam ente, 720) non era realm ente necessaria, dato che queste m acchine erano dotate di u n a generale istruzione di addizione, ADD. T uttavia l’istruzione INC era in genere legger m en te p iù veloce di ADD, e per questo venne introdotta. Per la stessa ragione furono aggiunte m olte altre istruzioni, tra cui era spesso possibile trovare le seguenti:
1. istruzioni per la m oltiplicazione e la divisione di interi 2 . istruzioni aritm etiche in virgola m obile 3. istruzioni per la chiam ata e il ritorno da procedure 4. istruzioni per velocizzare i cicli 5. istruzioni per trattare stringhe di caratteri. Inoltre, q u an d o i progettisti videro q u an to era facile aggiungere nuove istruzioni, com in ciarono a guardarsi in to rn o p er trovare altre caratteristiche d a inserire nei loro m icropro gram m i. Alcuni esempi di queste nuove aggiunte furono:
1. funzionalità p er accelerare calcoli sugli array (indicizzazione e indirizzam ento indiretto) 2 . funzionalità per perm ettere ai program m i di essere spostati in m em oria dopo l’inizio della loro esecuzione (servizi di rilocazione)
Capitolo 1
12
Introduzione
3 . sistem i d i in te rru p t che segnalano al co m p u ter che un’operazione di in p u t o di o u tp u t è com pletata 4. possibilità di sospendere un program m a e farne partire un altro attraverso poche istru zioni (com m utazione di processo)
5 . istruzioni speciali per l’elaborazione di audio, im m agini e file m ultim ediali. Allo stesso m odo nel corso degli anni vennero aggiunte num erose altre caratteristiche e fu n zionalità, generalm ente con lo scopo di velocizzare alcune attività particolari.
Eliminazione della microprogrammazione D u ran te gli anni d ’oro della m icroprogram m azione (gli anni ’60 e ’70) le dim ensioni dei m icroprogram m i au m en taro n o così ta n to che com inciarono a divenire via via più lenti. A un certo p u n to alcuni ricercatori com presero che le m acchine potevano essere accelerate eli m in an d o il m icroprogram m a, riducendo considerevolm ente l’insiem e delle istruzioni e fa cendo in m o d o che quelle rim anenti venissero eseguite direttam ente (cioè attraverso un con trollo hardw are del percorso dati). Sotto un certo p u n to di vista la progettazione di com puter ha co m p iu to un cerchio com pleto, rito rn an d o alla situazione precedente al m o m en to in cui W ilkes introdusse la m icroprogram m azione. La ruota c o n tin u a però a girare. I program m i Java sono generalm ente eseguiti com pi landoli in u n linguaggio interm edio (Java byte code) c poi in terpretando il Java byte code. La nostra analisi m ira a m ostrare che il confine tra hardw are e softw are è arbitrario e cam bia co n tinuam ente; il software di oggi potrebbe essere l’hardw are di dom ani e viceversa. Per di p iù anche la separazione tra i vari livelli è fluida. Dal p u n to di vista del program m a tore n on è im p o rtan te sapere com e un’istruzione sia effettivam ente im plem entata (eccetto forse per la sua velocità di esecuzione). C h i program m a al livello ISA pu ò usare la sua istru zione di m oltiplicazione com e se fosse u n ’istruzione hardw are, senza preoccuparsene o senza neanche essere a conoscenza se lo sia realm ente o p p u re no. L’hardw are è concepibile com e tale da alcuni, com e software da altri. N el seguito del libro ritornerem o su questi tem i.
1.2
Pietre miliari neH'architettura dei computer__________
Nel corso dell’evoluzione che h a p o rtato agli attuali com puter, sono stari progettati e co struiti centinaia di diversi tipi di elaboratori. La m aggior parte è stata dim enticata da tem po, m entre u n ristretto num ero ha avuto un im p atto significativo sulle idee alla base delle m o derne architetture. In questo paragrafo farem o u n rapido excursus su alcuni degli sviluppi storici più significativi, al fine d i poter com prendere al meglio com e si è arrivati allo stato attuale. È ovvio che qui tratterem o soltan to i p u n ti principali di questo percorso, trala sciandone al con tem p o m olti altri. La Figura 1.4 elenca alcune delle m acchine che rappre sentano delle pietre m iliari e che saranno trattate in questo paragrafo. Slater (1987) è un o t tim o riferim ento per cercare ulteriore m ateriale storico sui fondatori dell’era dei calcolatori; si consulti invece il libro illustrato di M organ (1997) se si cercano sintetiche biografie e belle foto a colori (realizzate da Louis Fabian Bachrach) dei protagonisti che h a n n o dato inizio all’era dei com puter.
1.2
Pietre miliari nell'architettura dei computer
Anno
Nome
Realizzato da
Commento
1834
Analytical Engine
Babbage
Primo tentativo di costruire un computer digitale
1936
ZI
Zuse
Prima macchina calcolatrice funzionante basata su relè
1943
COLOSSUS
Governo britannico
Primo computer elettronico
1944
Mark 1
Aiken
Primo computer americano rii uso generale
1946
EN1ACI
Eckert/Mauchley
Inizio deita moderna storia dei computer
13
1949
EDSAC
Wilkes
Primo computer a programma memorizzato
1951
Whirlwind 1
M.I.T.
Primo computer con elaborazione in tempo reale
1952
1A5
Voi-, Neumann
Progetto su cui si basa la maggior parte delle macchine odierne
1960
PDP-1
DEC
Primo minicomputer (venduto in 50 unitàj
1961
1401
IBM
Piccola macchina aziendale di grande diffusione
1962
7094
IBM
Dominò il campo della computazione scientifica nei primi anni '60
1963
B5000
Burroughs
Prima macchina progettata per un linguaggio ad alto livello
1964
360
IBM
Prima linea di prodotti progettata come una famiglia
1964
6600
CDC
Primo supercomputer per calcoli scientifici
1965
PDP-8
DEC
Primo minìcomputer con un mercato di massa (venduto in 50.000 unità)
1970
PDP-11
DEC
Dominò il mondo dei minicomputer negli anni '70
1974
8080
Intel
Primo computer a 8 bit di uso generale su un chip
1974
CRAY-1
Cray
Primo supercomputer vettoriale
1978
VAX
DEC
Primo superni m icomputer a 32 bit
1981
IBM PC
IBM
Inizio dell'era moderna dei personal computer
1981
Osboroe-1
O starne
Primo compuler portatile
1983
Lisa
Apple
Primo personal computer dotato di una GUI
1985
386
Intel
Progenitore a 32 bit della linea Pentium
1985
MIPS
MIPS
Prima macchina RISC commerciale
1987
SPARC
Sun
Prima workstation RISC basata su SPARC
1990
RS6000
IBM
1992
Alpha
DEC
Primo personal computer a 64 bit
Newton
Apple
Primo computer palmare
1993
Figura 1.4
1.2.1
.fVim a macchina superscalare
Alcune pietre miliari nello sviluppo dei computer digitale moderno.
Generazione zero - Computer meccanici (1642-1945)
La p rim a persona che costruì una m acchina calcolatrice funzionante fu lo scienziato fran cese Blaise Pascal (1 6 2 3 -1 6 6 2 ), in onore del quale è stato chiam ato l’o m o n im o linguaggio di program m azione. Pascal progettò e costruì questo dispositivo nel 1642, a 19 anni, per aiutare suo padre, u n esattore delle tasse del governo francese. La m acchina era interam ente m eccanica, costituita da ingranaggi e veniva azionata a m ano con una manovella.
14
Capitolo 1
Introduzione
La m acchina d i Pascal era in grado di com piere solam ente som m e e sottrazioni, m a tre n ta n n i dopo un im portante m atem atico tedesco, il Barone G ottfried W ilhelm von Leibniz (1646-1716), costruì un’altra m acchina m eccanica eapace di eseguire anche m oltiplicazioni e divisioni. D i fatto Leibniz costruì, già tre secoli fa, l’equivalente di una piccola calcolatrice tascabile. Per 150 anni n o n successe n iente di significativo finché un professore di m atem atica della C am bridge University, C harles Babbage (1 792-1871), inventore tra l’altro del tachi m etro, progettò e costruì una m acchina chiam ata differente engine (“m acchina differenziale ”). Q uesto dispositivo m eccanico, capace com e quello di Pascal soltanto di som m are e sottrarre, fu progettato p er calcolare tabelle di num eri utili p er la navigazione. L’intera costruzione della m acchina fu pensata p er eseguire un solo algoritm o, il m etodo m atem atico delle differenze finite. L'aspetto più interessante della difference engine fu però la sua form a di o u tp u t: i ri sultati venivano incisi m ediante u n a p u n ta d ’acciaio su una lastra di ram e, anticipando quin d i i futuri supporti a singola scrittura quali le schede perforate e i C D -R O M . Sebbene la difference engine funzionasse in m odo abbastanza soddisfacente, Babbage si stancò presto di una m acchina capace d i eseguire un solo algoritmo. Egli com inciò a profondere una sem pre m aggior q u an tità d i tem po e di beni familiari (per non parlare delle 17.000 ster line di fondi governativi) nella progettazione e costruzione dì una m acchina che ne rappre sentasse l’evoluzione: la analytical engine (“m acchina analitica”). La analytical engine era com posta da quattro com ponenti: il magazzino (la m em oria), il m ulino (l’unità com putazionale), il dispositivo di in p u t (le schede perforare) e il dispositivo'3i o u tp u t (o u tp u t stam pato e perfo rato). Il magazzino era com posto da 1000 parole d a 50 cifre, utilizzate per m em orizzare dati c risultati. Il m ulino poteva prelevare gli operandi dal magazzino per som m arli, sottrarli, m ol tiplicarli o dividerli e infine m em orizzarne nuovam ente il risultato nel magazzino. Anche questa m acchina, al pari della difference engine, era interam ente meccanica. Il grande avanzam ento rappresentato àa\\' analytical engine consisteva nel fatto di essere d i uso generale. Leggeva le istruzioni dalle schede perforate e le eseguiva. A lcune istruzioni com andavano la m acchina in m odo che prelevasse due num eri dal magazzino, li portasse nel m ulino, eseguisse su di loro una data operazione (per esem pio la som m a) e ne rispedisse il risultato al magazzino. Altre Istruzioni erano in grado di analizzare un num ero e ram ifi care l’esecuzione del program m a in base al suo segno. Perforando un diverso program m a sulle schede d i in p u t era q u in d i possibile far eseguire a \\'analytical engine diverse com putazioni, cosa che era invece im possibile con la difference engine. D ato che la analytical engine era program m abile m ediante un sem plice linguaggio as sem blativo, era necessario produrre il software. A tal fine, Babbage assunse Ada Augusta Lovelace, la giovane figlia del famoso poeta inglese. Lord Byron. Ada Lovelace fu qu in d i la prim a program m atrice della storia e in suo onore fu chiam ato il linguaggio di program m a zione Ada. S fortunatam ente, com e avviene nel caso di m olti progettisti m oderni, Babbage non riu scì m ai a ottenere un hardw are com pletam ente privo di errori. Il problem a nasceva dalla ne cessità di avere migliaia e migliaia di rotelle e ingranaggi per ottenere un grado di precisione che la tecnologia del diciannovesim o secolo non era ancora in grado di fornire. C iononostante le sue idee erano in largo anticipo sui tem pi, al p u n to che la m aggior parte dei com puter m oderni presenta oggi u n a stru ttu ra m o lto sim ile all’analytical engine. Per questo m otivo è giusto afferm are che Babbage fu il padre (o m eglio, il nonno) degli odierni calcolatori.
1.2
Pietre miliari nell'architettura dei computer
15
Il successivo e significativo avanzam ento avvenne verso la fine degli anni ’30, quando u n o stu d en te tedesco di ingegneria, K onrad Zuse, costruì una serie di m acchine calcolatrici autom atiche utilizzando dei relè elettrom agnetici. U na volta scoppiata la guerra, no n riuscì a ottenere finanziam enti dal governo, poiché i burocrati si aspettavano di vincere il conflitto in così breve tem po da ritenere che la nuova m acchina non sarebbe stata pro n ta prim a della fine della guerra. Zuse non conosceva il lavoro di Babbage e le sue m acchine furono d istrutte nel 1944 d u ran te un b o m b ard am en to degli Alleati su Berlino. A nche se per questi m otivi il suo lavoro non potè influenzare lo sviluppo delle m acchine successive, Z use va co m unque considerato com e u n o dei pionieri in questo cam po. N o n m olto tem po dopo, negli Stati U niti altri due ricercatori, Jo h n A tanasofFdell’Iowa State College e G eorge Stibbitz dei Bell Labs, si dedicarono alla progettazione di calcolatori. La m acchina d i AtanasofF era in credibilm ente avanzata per l’epoca; era basaca sull’aritm etica binaria e utilizzava dei condensatori p er la m em oria. Affinché la loro carica non si disper desse, la m em oria veniva periodicam ente aggiornata, secondo un processo che AtanasofF chiam ò jogging thè memory. Le m oderne m em orie dinam iche (D R A M ) funzionano secondo 10 stesso principio. SFortunatam ente la m acchina non divenne m ai realm ente operativa; in un certo senso AtanasofF fu com e Babbage, cioè un precursore che non ebbe successo a causa dell’inadeguatezza tecnologica del proprio tem po. Al con trario il co m p u ter di Stibbitz, sebbene m eno evoluto di quello di AtanasofF, riu scì a funzionare e il suo inventore ne diede una dim ostrazione pubblica nel 1940 durante una conFerenza al D artm o u th College. Tra il pubblico c’era John M auchley, a quel tem po ancora sconosciuto, m a di cui in seguito si sarebbe sentito parlare nel m o n d o dei com puter. M entre Z use, Stibbitz e AtanasofF stavano p rogettando calcolatori autom atici, u n giovane di nom e H ow ard Aikcn si sForzava di svolgere a m ano tediosi calcoli num erici, per la sua tesi di d o tto rato , alla H arvard University. D o p o la laurea, A iken com prese l’im portanza di p o ter svolgere calcoli p er mezzo di una m acchina. Frequentando una biblioteca, scoprì il la voro di Babbage e decise di costruire per mezzo di relè il com puter di uso generale che Babbage a suo tem po non riuscì a realizzare m ediante ingranaggi. N el 1944, alla H arvard University, Aiken com pletò la sua prim a m acchina,-il M ark I. Era com posta da 7 2 parole di 23 cifre decim ali, aveva un tem po d istruzione di 6 secondi e usava un nastro di carta perforato p er l’in p u t e l’o u tp u t. D al m o m en to in cui A iken realizzò 11 suo successore, il M ark II, i co m p u ter basati su relè divennero obsoleti; era iniziata inFatti l’era deU’elettronica. ,,
1.2.2
Prima generazione - Valvole (1945-1955)
Lo stim olo per lo sviluppo dei co m p u ter elettronici venne dalla Seconda G uerra M ondiale. N ella p rim a parte della guerra i so tto m arin i tedeschi stavano decim ando la flotta britannica. D a Berlino gli am m iragli tedeschi spedivano i com andi via radio ai sottom arini; questi o r dini potevano q uindi essere intercettati dai britannici. Il problem a era che i messaggi veni vano codificati per mezzo di u n dispositivo chiam ato ENIGMA; il precursore di questa m acchina era stato progettato da T h o m as JefTerson che, oltre a essere stato il terzo presidente degli Stati U niti d ’Am erica, fu anche un inventore dilettante. A ll'inizio della g uerra lo spionaggio b rita n n ic o riuscì a p ro curarsi u n a m acchina E N IG M A grazie all'aiuto dei servizi segreti polacchi che erano riusciti a rubarla ai tedeschi. Tuttavia, per poter decifrare un messaggio codificato occorreva svolgere un’enorm e q u an tità
16
Capitolo 1
Introduzione
di calcoli, ed era necessario poterlo fare m olto velocem ente, non appena il com ando veniva intercettato, affinché ciò potesse essere di una qualche utilità. Per decodificare questi m es saggi il governo britannico creò un laboratorio segretissimo per la costruzione di u n com puter chiam ato C O L O S S U S . Il famoso m atem atico inglese Alan T uring diede il suo aiuto alla pro gettazione di questa m acchina. C O L O S S U S divenne operativo nel 1943 ma, dato che il go verno britannico ten n e sotto segreto m ilitare per 30 anni praticam ente ogni aspetto del pro getto, lo sviluppo di C O L O S S U S n o n ebbe alcun seguito. Vale la pena ricordarlo sem pli cem ente perché fu il prim o elaboratore digitale al m ondo. O ltre a distruggere le m acchine d i Z use e incentivare la costruzione di C O L O S S U S , la guerra condizionò il cam po dei co m p u ter anche negli Stati U niti. L’esercito aveva biso gno di tabelle per im postare la m ira deH’artiglieria pesante e a tal scopo vennero assunte cen tinaia di d o n n e (in q u an to ritenute p iù precise degli uom ini) affinché producessero in serie queste tabelle p er mezzo di calcolatori m anuali. T uttavia la procedura richiedeva m olto tem po, e vi era sem pre il rischio deH errore um ano. Jo h n M auchley, che aveva stu d ia to sia i lavori di A tanasoff sia quelli di S tibbitz, ven n e a sapere che l’esercito era interessato alla costruzione di calcolatori m eccanici. C o m e m olti altri ricercatori d o p o di lui, avanzò all’esercitò una richiesta di sovvenzione per fi nanziare la costru zio n e d i u n calcolatore elettronico. N el 1943 la richiesta fu accettata e M auch ley co m in ciò a costruire, insiem e al suo stu d en te J. Presper E ckert, u n co m p u ter e le ttro n ic o che c h ia m a ro n o ENIAC (Electronic Num erical lntegrator A nd Computer). L’elaboratore E N IA C era co stitu ito d a 1 8 .000 valvole' term oioniche e 1500 relè, pesava 30 to n n ellate e consum ava 140 K W di energia. Dal p u n to di vista d d l'a rc h ite ttu ra , la mac china era d o tata di 20 registri, ciascuno dei quali in grado di m em orizzare un n um ero d e cim ale a l O cifre. U n registro decim ale è u n a m em o ria m olto piccola che p u ò m antenere u n valore fino a u n m assim o n u m ero d i cifre digitali, analogam ente al co n tach ilo m etri che tiene traccia di q u a n ta strada una m acchina ha percorso nella sua vita. E N IA C veniva p ro g ram m ato regolando 6 0 0 0 in te rru tto ri m ulti-posizione e c o n n e tte n d o una m o ltitu d in e di prese con u n a vera e p ro p ria foresta d i cavi. La m acchina fu term inata solo nel 1946, q u an d o orm ai non poteva più essere utile per lo scopo originario. Tuttavia, d ato che la guerra era finita, fu concesso a M auchley e Eckert di organizzare u n a scuola estiva per presentare il loro lavoro ai colleghi. Q uesto evento se gnò l’inizio di un’esplosione di interesse nella costruzione di grandi co m p u ter digitali. D opo quella scuola estiva m olti altri ricercatori intrapresero la costruzione di com puter elettronici. Il prim o a essere operativo fu l’elaboratore ED SA C (1949), costruito presso la C am bridge U niversity da M aurice W ilkes. Fra gli altri progetti, vi furono J O H N IA C alla Rand C orporation, ILLIAC alla Illinois University, M A N IA C presso il Los Alamos Laboratory e W E IZ A C al W eizm ann In stitu te in Israele. Eckert e M auchley com inciarono presto a lavorare su un successore della loro m acchina, chiam ato EDVAC (Electronic Discrete Variarle Automatic Computer). Q uel progetto m orì però nel m o m en to in cui decisero di lasciare la Pennsylvania U niversity per form are a Philadelphia (la Silicon Valley non era ancora stata inventata) una propria società, la E ckcrt-M auchley C o m p u te r C o rp o ratio n . D o p o una serie di fusioni questa com pagnia è diventata la m oderna Unisys C o rp o ratio n . F acendo u n a piccola d igressione in a m b ito legale occorre ricordare che E ckert e M auchley registrarono u n brevetto in cui sostenevano di essere gli inventori del co m p u te r
1.2
Pietre miliari nell'architettura dei computer
17
digitale. A posteriori si può afferm are che n o n sarebbe stato m ale possedere u n tale bre vetto. D o p o an n i di controversie legali i trib u n ali decisero che il brevetto E ckert-M auchlcy n o n era valido e che l’in v en to re del co m p u te r digitale, p u r n o n avendolo m ai brevettato, era stato Jo h n A tanasoff. M en tre E ckert e M auchley erano im pegnati a lavorare su ED V A C , un m em bro del prog etto E N IA C , Jo h n von N e u m a n n , an d ò all’In stitu te o f A dvanced Studies di P rinceton per co struire la p rop ria versione deU’ED V A C , la m acchina IAS. V on N e u m a n n era u n ge nio del livello di L eon ard o da V inci. Parlava m olte lingue, era un esperto di fisica e m a tem atica e aveva la capacità di ricordare p erfettam ente ogni cosa avesse sentito, visto o letto; era in o ltre in grado di citare a m em o ria e alla lettera libri che aveva letto anni prim a. N el m o m e n to in cui com in ciò a interessarsi ai co m p u te r era già il più im p o rtan te m atem atico al m o n d o . U n a delle cose che gli a p p arv ero su b ito e v id e n ti fu che la p ro g ra m m az io n e dei c o m p u te r m ed ian te u n gran n u m e ro di in te rru tto ri e cavi era lenta, tediosa e poco flessi bile. Egli com prese che anche i p ro g ram m i, al pari dei dati, potevano essere rappresentati in form a n u m erica all’in te rn o della m em o ria del com puter. In o ltre si rese c o n to che la con to rta aritm etica decim ale seriale usata neH’claboratorc E N IA C , in cui ogni cifra era rap presen tata da 10 valvole (1 accesa e 9 spente), poteva essere so stitu ita da u n ’aritm etica bi naria parallela, in m o d o sim ile a q u a n to aveva realizzato A tanasoff an n i prim a. Il prim o progetto elem entare che descrisse è conosciuto al giorno d ’oggi com e mac china di von Neumann. Fu utilizzato nel co m p u ter ED SA C, il p rim o che m emorizzava il program m a in m em oria, ed è ancora oggi, a ben mezzo secolo di distanza, alla base di quasi tu tti i co m p u ter digitali. Q u esto progetto, così com e la m acchina IAS costruita in collaborazione con H erm an G oldstine, ha avuto una tale influenza che vale la pena descriverlo bre vem ente. N o n o stan te si associ sem pre il nom e di Von N eu m an n a questo progetto, anche G oldstine e altri ricercatori diedero un c o n trib u to sostanziale. U n o schem a deH’architettura è m o strato nella Figura 1.5. La m acchina di von N eu m an n era com posta da cinque co m p o n en ti principali: la me m oria, l’u n ità aritm etico-logica, l’u n ità di controllo e i dispositivi di in p u t e o u tp u t. La m e m oria era costituita da 4 0 9 6 locazioni, ciascuna delle quali conteneva 40 bit. C iascuna pa-
Accumulatore
Figura 1.5
La macchina originale di von Neumann.
18
Capitolo 1
Introduzione
rola poteva m antenere d u e istruzioni da 2 0 b it o ppure un num ero da 4 0 bit. Le istruzioni erano com poste da 8 bit, che definivano il tipo d istruzione, e dai restanti 12 b it, che spe cificavano u n a delle 4 0 9 6 parole di m em oria. L’unieà aritm etico-logica e l'u n ità di controllo form avano insiem e il “cervello” del com p u ter; negli elaboratori m oderni esse sono com bi nate in un unico chip chiam ato C P U (Central Processing Unit, “unità centrale di calcolo”). A ll'interno dell’u n ità aritmetico-logica vi era uno speciale registro da 40 bit, chiam ato accumulatore. La tipica istruzione som m ava u n a parola di m em oria all’accum ulatore oppure ne copiava il conten u to in m emoria. La m acchina non aveva un’aritm etica in virgola mobile dato che von N eu m an n riteneva che ogni m atem atico che si rispetti dovesse essere in grado di tener traccia a m ente della posizione della virgola (per essere precisi, della virgola binaria). Praticam ente nello stesso periodo in cui von N eu m an n realizzava la m acchina IAS, al tri ricercatori del M .I.T. stavano costruendo u n com puter. D iversam ente da IAS, EN IA C e altre m acchine dello stesso tipo, d o tate di lunghe parole e pensate per poter elaborare num eri m olto grandi, la m acchina del M .I.T., chiam ata W hirlw ind I, aveva parole di soli 16 bit ed era progettata per il controllo in tem p o reale. Grazie a questo progetto si deve l’invenzione della m em oria a nuclei m agnetici da p a n e di Jay Forrester e, infine, la nascita del prim o m i nicom puter com m erciale. M en tre avveniva tu tto questo, IB M era u n a piccola società im pegnata nel co m m er cio di schede perfo rate e di m acch in e per il loro o rd in am en to . Inizialm ente IB M n o n era fortem en te interessata ai com puter, sebbene avesse in parte finanziato il lavoro di Aiken. C om in ciò a diventarlo nel 1953 d o p o la pro d u zio ne deKufòdello 701 e qu in d i m olto tem po d o p o che la com pagnia di E ckert e M au ch ley era diventata, grazie al c o m p u te r UNTVAC, il n u m e ro u n o sul m ercato. Il m od ello 701 era d o ta to di 2 0 4 8 parole di 36 b it, con due istruzioni p er parola, e fu la p rim a di u n a serie di m acchine scientifiche che in u n a de cade co m in ciaro n o a d o m in are il m ercato. Tre an n i d o p o fu il m o m e n to del m odello 70 4 , che inizialm ente aveva 4 0 9 6 parole di m em oria cenrrale, istruzioni a 36 b it e un nuovo, innovativo, hardw are in virgola m obile. Nel 1958 IBM com inciò la pro d u zio n e del m o dello 7 0 9 , la sua u ltim a m acchina che utilizzava le valvole, in pratica u n a m iglioria del c o m p u te r 7 0 4 .
1.2.3
Seconda generazione - Transistor (1955-1965)
Il transistor è stato inventato nel 1948 presso i Bell Labs da John Bardeen, W alter Brattain e W illiam Shocldey, p er la cui scoperta ricevettero nel 1956 il prem io N obel per la fisica. In 10 anni il transistor rivoluzionò i co m p u ter al p u n to che nei tardi anni ’50 i co m p u ter a val vole divennero obsoleti. 11 prim o com puter a transistor fu costruito presso i Lincoln Laboratory del M .I.T . Si trattava di una m acchina a 16 bit che seguiva la linea del W h irlw in d I. Fu chia m ato T X -0 ( Transistorized eXperimental computer 0), ideato sem plicem ente com e disposi tivo per testare il più evoluto T X -2. Il com puter T X -2 non prese mai il volo, m a nel 1957 Kenneth O lsen, uno degli ingegneri che lavoravano al Lincoln Laboratory, fondò u n a società, la Digital E q uipm ent C orporation (D E C ), per produrre una m acchina com m erciale m olto simile al modello T X -0. Passarono ben q u attro anni prim a di veder apparire questa m acchina, chiam ata P D P -1; ciò fu dovuto principalm ente al fatto che i finanziatori che avevano fondato la D E C erano ferm am ente con vinti che non vi fosse m ercato per i com puter. D opo tu tto anche T.J. W atson, ex presidente di IB M , una volta ebbe a dire che il m ercato m ondiale di com puter era all’incirca di sole qu at
1.2
Pietre miliari nell'architettura dei computer
19
tro o cinque unità. Al contrario D E C si afferm ò principalm ente per la vendita di schede di circuiti di piccole dim ensioni. Nel 1961 q u an d o finalm ente apparve, l’elaboratore P D P -1 era d o tato di 4 0 9 6 parole da 18 b it e poteva eseguire 2 0 0 .0 0 0 istruzioni al secondo. Q ueste prestazioni corrisponde vano alla m età di quelle dell’IBM 7 0 9 0 , successore a transistor del m odello 709, nonché il più veloce c o m p u ter al m o n d o dell’epoca. Il PD P-1 costava però 120.000 dollari, m entre il m odello 7 0 9 0 ne costava m ilioni. D E C vendette decine di P D P -1 e questo rappresentò la nascita dell’industria dei m icrocom puter. U no dei prim i P D P -1 fu d o n ato al M .I.T ., dove attrasse rapidam ente l’atrenzione di alcuni dei giovani geni in erba, così com uni in quella università. U n a delle principali in n o vazioni del PD P-1 era co stituito da un display visuale e dalla capacità di disegnare p u nti in qualsiasi zona dello scherm o da 512 per 512 linee. D a lì a breve gli studenti program m a rono la m acchina PD P -1 p er p o te r giocare a spacewar, facendo così conoscere al m ondo il prim o videogam e della storia. Pochi anni dopo D E C introdusse il m odello P D P - 8 , una m acchina a 12 bit, m olto più econom ica del PD P-1 (16.000 dollari). La principale innovazione introdotta dal P D P -8 fu quella di avere un unico bus, chiam ato omnibus, m ostrato nella Figura 1.6 . U n bus è un insie me di cavi paralleli utilizzati per connettere i diversi com ponenti di un com puter. Q uesta ar chitettura fu un grande passo in avanti rispetto alla m acchina IAS, che era centralizzata rispetto alla m em oria, e fu adonata da quasi tutti i successivi com puter di piccole dim ensioni. D E C riuscì a vendere 50.000 P D P - 8 , afferm andosi così leader nel mercato dei m icrocom puter. N el fran em p o la reazione di IB M all’avvento del transistor fu la costruzione del m o dello 7 0 9 0 , una versione a transistor del co m p u te r 709, citato precedentem ente, e in seguito del m odello 7094. Il c o m p u ter 7 0 9 4 aveva un ciclo di d o c k di 2 m icrosecondi e possedeva una m em oria centrale di 3 2 .5 3 6 parole da 3 6 b it. I m odelli 7090 e 7 0 9 4 segnarono la fine delle m acchine in stile E N IA C e d o m in aro n o il m ondo dell’elaborazione scientifica du ran te gli anni ’60. N ello stesso m o m en to in cui, grazie al m o d d lo 7094, IB M diventava u n a delle p rin cipali forze del m ercato, otteneva enorm i profitti vendendo una piccola m acchina per le aziende, chiam ata 1401. Q u esta m acchina era in grado di leggere e scrivere nastri m agne tici, leggere e perforare schede e stam pare o u tp u t a una velocità paragonabile a quella d d m o d d lo 7 0 9 4 , il tu tto a una frazione del prezzo. Era quindi perfetta per la gestione dei dati aziendali, m a aveva pessime prestazioni pei calcoli scientifici. L’architettura del m odello 1401 era insolita, dato che non aveva alcun registro e nep pure u n a lunghezza fissa di parola. La sua m em oria era com posta da 4 0 0 0 byte da 8 bit, seb bene m odelli successivi supportassero fino a 16.000 byte, una dim ensione che all’epoca era
Figura 1.6
L'omnibus del computer PDP-8.
20
Capitolo 1
Introduzione
stupefacente. Ciascun byte conteneva un carattere da 6 bit, un bit di am m inistrazione e un bit usato per segnalare la fine di una parola. Per fare un esempio, un’istruzione MOVE speci ficava un indirizzo d’origine e uno di destinazione e 'iniziava a spostare byte dall’origine alla destinazione finché n on ne incontrava u n o il cui bit di fine parola era im postato a 1. N el 1964 una piccola e sconosciuta società, la C ontrol D ata C o rp o ratio n (C D C ), in trodusse il m odello 66 0 0 , una m acchina che era quasi un ordine di grandezza più veloce del l’im p o n en te 7 0 9 4 e d i ogni altra m acchina dell’epoca. Per i m atem atici che si occupavano di analisi num erica, spesso chiam ati ntimber crunchcr, “m asticatori di num eri fu am ore a prim a vista e il co m p u ter C D C fu lanciato verso il successo. 11 segreto della sua velocità, e il m otivo p er cui fosse m olto più del m odello 7094, stava nel fatto che la C P U era, al suo interno, u n a m acchina altam ente parallela. Era d otata di varie un ità funzionali che potevano lavorare contem poraneam ente: alcune erano d estinate a svolgere addizioni, altre m oltiplica zioni e altre ancora divisioni. A nche se p er o ttenere il m aggior guadagno possibile era ri chiesta u n ’atten ta program m azione, con un po’ di lavoro si riusciva a far eseguire co n tem poraneam ente anche 10 istruzioni. C om e se non bastasse, il m odello 6600 aveva ai suo interno un certo num ero di pìc coli co m p u ter che lo aiutavano; un p o ’ com e i S ene N ani con Biancaneve, questo voleva dire che la C P U poteva spendere tu tto il suo tem po a m acinare num eri lasciando ai piccoli co m p u ter tu tti i dettagli della gestione dei program m i e delJ’in p u t/o u tp u t. A posteriori si può afferm are che il 6 6 0 0 era in anticipo di decenni sui tem pi; m olte delle idee chiave pro prie dei c o m p u ter m oderni possono infatti essere ricondotte a questa m acchina. Il progettista del co m p u ter 66 0 0 , Seym our Cray, fu una figura leggendaria del livello di von N eu m an n . D edicò la sua intera vita a costruire m acchine sem pre più veloci, ora chia m ate supercomputer, tra cui gli elaboratori 6 6 0 0 , 7600 e C ray-1. Inventò inoltre un fa m oso algoritm o per l’acquisto di un’autovettura: si va dal rivenditore p iù vicino a casa pro pria, si indica la m acchina più vicina alla porta e si dice: “Voglio questa”. L’algoritm o im piega il m in o r tem p o possibile per le cose n o n im portanti (come com prare una m acchina) per lasciare il m aggior tem po possibile alle cose im portanti (come progettare supercom puter). N ella stessa epoca ci fu ro n o m olti altri com puter, ma uno si distinse per un m otivo particolare e m erita per questo di essere m enzionato: il B urroughs B 5000. 1 p rogettisti di m acch in e co m e i m odelli P D P -1 , 7 0 9 4 e 6 6 0 0 si co n cen trav an o esclusivam ente sull’hardw are, sia nel ten tativ o di ren d erlo econom ico (D E C ) sia in quello di renderlo veloce (IB M e C D C ), m en tre ig noravano quasi c o m p leta m e n te il softw are. I p ro g ettisti del B 5000 ad o tta ro n o invece u n approccio diverso. C o stru iro n o u n a m acchina con il preciso in te n to di p rogram m arla in Algol 6 0 , u n precursore di C e Java, e inclusero nell’hardw are m olte caratteristiche finalizzate a facilitare il c o m p ito del com pilatore. N acque così l’idea che anche il softw are ha la sua im po rtan za; p u rtro p p o questa considerazione fu quasi su b ito ab b an d o n ata.
t .2.4
Terza generazione - Circuiti integrati (1965-1980)
Nel 1958 l’invenzione dei circuiti integrati su silicio da parte di R obert N oyce perm ise di realizzare su u n unico chip decine di transistor. Q u esto m etodo di assemblaggio rese possi bile la costruzione d i co m p u ter più piccoli, più veloci e più econom ici rispetto ai loro pre decessori basati su transistor. Alcuni dei co m p u ter più significativi di questa generazione sono descritti in seguito.
1.2
Pietre miliari nell'architettura dei computer
21
Fin dai 1964 IBM era la società leader nel m ondo dei com puter e si trovava di fronte a un grande problem a che riguardava le sue due m acchine di successo, i modelli 7094 e 1401: essi erano totalm ente incom patibili. Uno era u n “macinatore di num eri" a grande velocità d ie usava aritm etica binaria parallela su registri a 36 bit, m entre l’altro era un popolare processore di in p u t/o u tp u t che usava aritm etica decimale su parole di mem oria a lunghezza variabile. M olte fra le società clienti di IB M avevano com prato entram be le macchine c n o n am avano l’idea di dover avere due dipartim enti di program m azione separati senza nulla in com une. Q u a n d o arrivò il m o m e n to di sostituire questi m odelli, IB M fece un cam bio radi cale. In tro d u sse u n 'u n ic a lìnea di p ro d o tti, il S ystem /360, basata su circuiti integrati e pro gettata sia per i calcoli scientifici sia p er quelli com m erciali. Il S y stem /360 presentava m ol teplici innovazioni, m a la p iù im p o rta n te fu che si trattava di u n a fam iglia di circa m ezza dozzina d i m acchine d o ta te dello stesso linguaggio assem blativo, m a di dim ensione e p o tenza crescenti. U na società poteva q u in d i sostituire il proprio m odello 1401 con un 360 M o d el 30 e il p ro p rio m o d d lo 7 0 9 4 con u n 3 6 0 M odel 75. Il M odel 75 era il più grande e il p iù veloce (e an ch e il più caro), ma il softw are scritto per uno di questi m odelli p o teva, in linea di p rin cip io , essere eseguito an ch e su uno differente. In pratica il softw are scritto p e r un piccolo m o d d lo funzionava senza problem i su u n m o d d lo più grande, m a q u a n d o ci si spostava verso u n m odello di d im ensioni inferiori il pro g ram m a poteva n o n entrare in m em oria. In ogni caso ciò rappresentava un g rande avanzam ento rispetto alia situazione delle m acchine 7 0 9 4 e 1401. L’idea di avere^una fam iglia di computer fu subito colta an ch e da m olti altri p ro d u tto ri che, in pochi an n i, m isero sul m ercato linee di m ac chin e che ricoprivano u n grande sp ettro d i prezzi e prestazioni. La Figura 1.7 m ostra al cune caran eristich e della fam iglia 360 o rig in aria (successivam ente vennero in tro d o tti an che altri m odelli). U n’altra grande innovazione della serie 360 fu la multiprogrammazione, grazie a cui è possibile avere più program m i in m em oria allo stesso tem po, di m odo che quando si è in attesa di com pletare u n ’operazione di in p u t/o u tp u t si possono eseguire dei calcoli. Il risul tato che si ottiene con questa tecnica è un m aggior utilizzo della C P U . Il 3 6 0 fu anche il prim o a essere capace di em ulare (sim ulare) altri com puter. Il m o d d lo più piccolo poteva em ulare il co m p u ter 1401, m entre quelli p iù grandi erano in grado di em ulare il m o d d lo 709 4 , di m odo che, d u rante il passaggio ai c o m p u ter 360, i clienti potessero continuare a utilizzare i loro vecchi program m i (binari) senza m odificarli. A lcuni m odelli eseguivano i program m i scritti .per il 1401 in m odo talm ente più veloce che m olti d ie n ti n o n convertirono mai il proprio software.
Proprietà
Model 30
Prestazioni relative G elo di clock (in miliardesimi di secondo) Quantità massima di memoria un bytei
Model 40
1
Model 50
Model 65
to
21
1000
625
500
250
3,5
65.536
262.144
262.144
524.288
Numero df bvte prelevati per ciclo di clock
1
2
4
16
Massimo numero dt canali per i dati
3
3
4
6
Figura 1.7
L'offerta iniziale della linea di prodotti IBM 360.
22
Capitolo 1
fntroduzione
Sul 360 l’em ulazione risultava fàcile, in q u a n to tu tti i modelli iniziali, e m oki di quelli successivi, erano m icroprogram m ati. T u tto quello che IBM doveva fere era scrivere tre m i croprogram m i, u n o per l’insiem e d ’istruzioni native del m odello 360, uno per quelle del m o dello 1401 e u n o per quelle del m odello 7094. Q uesta flessibilità fu una delle ragioni p rin cipali per cui fu in tro d o tta la m icroprogram m azione. Il m odello 360, grazie a un com prom esso, risolse anche il dilem m a dell'aritm etica b i naria parallela e di quella decim ale seriale: la m acchina aveva 16 registri da 32 b it per l’arit m etica binaria, m a la sua m em oria era orientata al byte, com e quella del m odello 1401. Era inoltre d o ta ta d ’istruzioni seriali sim ili a quelle del m odello 1401 per lo spostam ento in m e m o ria di blocchi di dim ensioni variabili. U n’alrra caratteristica saliente del c o m p u te r 360 era un enorm e (per l’epoca) spazio de gli indirizzi di 224= 16.777.216 byte. All’epoca, u n a tale q u an tità di m em oria appariva pra ticam ente com e infinita, dato che il costo della m em oria era di qualche dollaro al byte. Sfortunatam ente la serie 360 fu seguita dalla serie 3 70, dalla serie 4300, dalla serie 3080 e dalla serie 30 9 0 , tu tte basate sulla stessa architettura. A m età degli anni '80 il lim ite della m em oria divenne u n problem a reale e IBM fu costretta ad abbandonare in parte la com pa tibilità q u an d o introdusse gli indirizzi a 32 bit, necessari per indirizzare una nuova m em o ria di 2 3- byte. C o n il senno di poi si potrebbe discutere sul perché non si fosse pensato fin dall’inizio all’utilizzo di indirizzi a 3 2 b it, d ato che le m acchine erano state d o tate di registri e parole a 32 bit; all’epoca però nessuno avrebbe mai p o tu to im m aginare u n a m acchina con 16 m i lioni di byte di m em oria. Accusare IB M per questa m ancanza di previsione sarebbe come accusare gli attuali p ro d u tto ri di c o m p u ter d i fornire indirizzi lim itati a 32 bit. Fra pochi anni i personal co m p u te r avranno bisogno di più di 4 m iliardi di byte di m em oria e, a quel p u n to , anche gli indirizzi a 32 b it d iventeranno intollerabilm ente piccoli. Nella terza generazione, anche il m o n d o dei m icrocom puter fece un gran passo in avanti con l’introduzione da parte di D E C della serie P D P - 11, un successore a 16 bit del m o d d lo P D P - 8 . Sotto m olti p u n ti di vista la serie P D P -1 1 era una sorta di piccolo fratello della serie 3 6 0 cosi com e il co m p u ter PD P-1 lo era stato per il m o d d lo 7094. E ntram bi i co m p u ter 3 60 e PD P-1 ] avevano i registri orientati alla parola e ìa m em oria orientata al byte, e tu tti e d u e vennero p ro d o tti in u n a gam m a in cui il rapporto prezzo/prestazioni variava. Il m odello P D P - 11 ebbe un enorm e successo specialm ente presso le università, perm ettendo a D E C di m an ten ere la leadership sugli altri p ro d u tto ri di m icrocom puter2.
1.2.5 Quarta generazione - Integrazione a grandissima scala (1980-?) Negli anni ’80 la tecnologia VLSI (Very Large Scale Integration, “integrazione a larghissima scala") permise di inserire in un unico chip prim a decine di migliaia, poi centinaia di migliaia e in fine m ilioni di transistor. Q uesto sviluppo portò velocemente alla realizzazione di com puter più piccoli e più veloci. Prima del PD P-1 Ì com puter erano talm ente grandi e costosi che, per farli funzionare, aziende e università dovevano disporre di speciali uffici chiam ati centri di calcolo, m entre, con l’avvento dei m icrocom puter, ogni dipartim ento poteva dotarsi di un
■ Questi modelli erano generalmente chiamati mtnicomputer (N.d.Rev).
1.2
Pietre miliari nell'architettura dei computer
23
proprio elaboratore. Dal 1980 i prezzi crollarono al p u n to che anche i privati potevano per mettersi di possedere un com puter: ebbe così inizio l’era del personal com puter. I personal com puter furono utilizzati in m odo m olto diverso rispetto ai com puter di grandi dim ensioni. Vennero usati per l'elaborazione di testi, per l’am m inistrazione dom estica (con i ben n o ti spreadsheet) e per num erose altre applicazioni fortem ente interattive (com e i videogiochi) che com puter d i dim ensioni m aggiori non potevano trattare in m odo altrettanto pratico. I prim i personal co m p u ter venivano generalm ente venduti in scatole di m ontaggio. Ciascun kit conteneva u n a scheda con circuito stam pato, vari chip, tra cui di solito vi era un Intel 8080, alcuni cavi, un trasform atore e talvolta un floppy disk da 8 pollici. Era com pito dell acquirente m ontare le parti per costruire il com puter, e il software non era incluso: se sì voleva un qualsiasi program m a occorreva scriverlo. Successivamente si diffuse per i processori 8080, il sistema operativo C P /M , scritto da G ary Kildall. Si trattava di un vero sistema ope rativo (su floppy disk), con un file system e una serie d istruzioni che l’utente doveva scrivere con la tastiera per farle leggere da un interprete d i com andi {shell). U n altro dei prim i personal co m p u ter fu l’A pple e in seguito l’A pple II, progettati da Steve Jobs e Steve W ozniak nel loro famoso garage. Q uesta m acchina ebbe u n ’enorm e difi fusione tra i privati e nelle scuole, rendendo la A pple dall’oggi al dom ani un serio concor rente sul m ercato. IBM , la forza principale dell’industria dei com puter, dopo aver osservato a lungo e con siderato a fondo che cosa stavano facendo le aziende concorrenti, decise infine di entrare nel m ercato dei personal com puter. D ato che progettare da zero u n a nuova m acchina usando solo com ponenti proprietarie avrebbe richiesto troppo tem po, IB M scelse u n i strada alrernativa e p iuttosto inusuale. D iede a un suo dirigente, Philip Extridge, una grande borsa carica di soldi e gli affidò l’incarico di allontanarsi dalle interferenze dei burocrati della sede centrale di A rm o n k nello stato di N ew York, e di non tornare se non con un personal com puter funzio nante. Estridge iniziò a fare acquisti a Boca Raton, in Florida, lontano dalla sede centrale, sce gliendo com e C P U l’Intel 8088 e costruendo così il Personal C o m p u ter IBM utilizzando com ponenti com m erciali. Il PC IBM fu in tro d o tto nel m ercato nel 1981 e divenne subito il com puter più venduto nella storia. IBM fece anche qualcos’altro di inusuale di cui in seguito si sarebbe pentita. Diversamente dal solito, invece d i m antenere com pletam ente segreto il progetto della m acchina (o alm eno di proteggerlo con un m uro di brevetti) pubblicò, in un libro venduto a soli 49 dollari, tutti gli schemi al com pleto, compresi i diagram m i dei circuiti. L'idea era quella di perm ettere ad altre società di realizzare delle schede aggiuntive per il P C IBM , in m odo da aum entarne la flessibilità e la popolarità. Sfortunatam ente per IBM num erose altre società com inciarono a realizzare dei d o n i d d PC , dato che il progetto era com pletam ente pubblico e Ì com ponenti facilm ente reperibili sul mercato. Spesso questi com puter erano m olto più econom ici di quelli IBM ; in questo m odo prese il via u n a nuova industria. N onostante altre com pagnie, tra cui C om m odore, Apple e Atari, realizzassero personal com puter senza utilizzare le C P U Intel, la forza del m ercato dei P C IBM era Talmente grande che gli altri ne vennero schiacciati. Solo in pochi sopravvissero e soltanto in m ercati di nicchi,;. U no dei sopravvissuti, seppur a m ala pena, fu il M acintosh di Apple. Il M acintosh era stato in tro d o n o nel 1984 com e successore dello sfortunato Apple Lisa, il prim o com puter do tato di una G U I (Graphìcal User Interface, “interfaccia grafica per l’utente”), simile alla orm ai
24
Capitolo I
Introduzione
popolare interfaccia di W indow s. lis a fallì a causa del costo troppo elevato, m entre il più eco nom ico M acintosh, introdotto l’anno successivo, riscosse un enorm e successo e ispirò amore e passione nei suoi num erosi am m iratori. ** Il giovane m ercato dei personal co m puter fece nascere anche il desiderio, fino ad al lora senza precedenti, di avere co m p u ter portatili. A quel tem po un co m p u ter portatile aveva senso q u a n to p u ò averne oggi un frigorifero portatile. Il p rim o vero personal co m p u ter por tatile fu l’O s b o rn e -l, che con i suoi 11 Kg fu più che altro un “co m p u ter d a bagagliaio . E ppure, dim ostrò che era possibile realizzare c o m p u ter portatili. L’O sbom e-1 ebbe un suc cesso com m erciale m odesto, m a un an n o dopo C o m paq produsse il suo prim o clone di PC IBM portatile e divenne rapidam ente il leader di tale m ercato. La versione iniziale del PC IB M veniva v enduta insieme al sistema operativo M S -D O S , fornito dalla M icrosoft C o rp o ratio n , una società che all’epoca era ancora piccola. V isto che Intel riusciva a produrre C P U sem pre più p o tenti, IBM e M icrosoft poterono sviluppare un successore di M S -D O S , chiam ato O S /2 , d o tato d i un’interfaccia uten te grafica sim ile a quella dell 1A pple M acintosh. Allo stesso tem po M icrosoft, pensando all’ipotesi che O S /2 p o tesse non prendere piede, com inciò a sviluppare un suo proprio sistema operativo, W indow s, eseguito sopra M S -D O S . Per riassum ere questa lunga vicenda basti dire che O S /2 non ebbe successo, che fra IB M e M icrosoft vi fu un’accesa e pubblica disputa e che M icrosoft conti n u ò p er la propria strada, facendo di W indow s un enorm e successo. C o m e la piccola Intel e la ancora più piccola M icrosoft abbiano p o tu to detronizzare IB M , una delle più grandi, ricche c p o ten ti società nella storia del m ondo, è senià dubbio una lezione che viene a tte n tam en te studiata in tu tte le scuole di econom ia del m ondo. Grazie al successo conseguito con l’8088, Intel co n tin u ò a realizzarne versioni via via m igliori e più poten ti. Particolarm ente degno di nota fu il 386, in tro d o tto nel 1985, in pra tica il prim o Pentium . Gli attuali P entium infatti, sebbene siano m olto più veloci, dal p u n to di vista dell arch itettu ra non sono che u n a versione ‘truccata’’ del 386. Alla m età degli anni ’80 iniziò ad affermarsi un nuovo tipo di progettazione chiam ata R ISC , che consisteva nel sostituire le com plicate architetture esistenti con altre m olto più sem plici (e più veloci). Q ueste m acchine erano in grado di eseguire p iù istruzioni allo stesso tem po, spesso in u n o rdine diverso da quello in cui apparivano nel program m a. I concetti di C IS C , R ISC e superscalare saranno in tro d o tti nel C apitolo 2 e verranno analizzati ap pro fo n d itam en te nel corso del libro. I co m p u ter restarono a 8 , 16 o 32 bit fino al 1992, q u ando D E C presentò il rivolu zionario A lpha, u n a vera m acchina a 6 4 b it di tipo R ISC che surclassava di gran lunga le prestazioni degli altri com puter. La m acchina ebbe un successo lim itato, m a dovette passare u n decennio prim a che le m acchine a 64 b it com inciassero ad affermarsi su grande scala, so p ra ttu tto fra i server di fascia alta,
1.2.6
Quinta generazione - Computer invisibili
N el 1981 il governo giapponese a n n u n ciò di voler stanziare 500 m ilioni di dollari per aiu tare le società locali nella costruzione della q u in ta generazione di com puter, che si sarebbe basata suH’intelIigenza artificiale e che avrebbe rappresentato u n enorm e balzo in avanti ri
1.2
Pietre miliari nell'architettura dei computer
25
spetto alla “stupida” q u arta generazione. I p ro d u tto ri di co m p u ter am ericani ed europei, avendo visto le com pagnie giapponesi prendere piede in m olti m ercati, com e quello delle telecam ere, degli stereo e dei televisori, p iom barono im provvisam ente nel panico p iù totale e com inciarono a chiedere, tra le altre cose, finanziam enti ai rispettivi governi. Il progetto giapponese di q u in ta generazione, n o n o stan te canta enfasi, sostanzialm ente falli e venne ab band o n ato nel silenzio. In u n certo senso fu com e per Xanalytical engine di Babbage; si trattò d i un ’idea visionaria talm ente avanti rispetto ai tem pi che la tecnologia necessaria non era neanche prevedibile. Q uella che p uò essere defin ita la q u in ta generazione di co m p u te r vide co m u n q u e la luce, sep p u r in u n m o d o inaspettato: i co m p u te r si rim picciolirono. L’A pple N ew ton, p ro d o tto nel 1993, m ostrò che u n c o m p u te r poteva essere c o stru tto con dim ensioni n o n p iù grandi di quelle d i u n lecrore di audiocassecce. N ew ton utilizzava com e dispositivo di inpuc la scrittu ra a m ano libera, e questo ne rappresentò un g rande ostacolo; in seguito però altre m acchine della stessa tipologia, ora ch iam ate PDA ( Personal Digital Assistants, “assistente digitale perso n ale”), h a n n o m ig lio rato l’interfaccia u te n te e sono div en iate estrem am ence popolari. O ggi m olte di loro h an n o la stessa porenza com putazionale di c o m p u te r d i pochi an n i p rim a. N ean ch e i P D A possono essere considerati veram ente rivoluzionari. M o lto più im p o rta n ti so n o invece i c o m p u te r co sid d etti “invisibili”, poiché integrati in elettro d o m e stici, orologi, carte di credito e num erosi altri dispositivi (Bechini e t al., 2004). In u n am pio sp e ttro di applicazioni questi processori g arantiscono gran d i funzionalità a basso co sto. A n ch e se si può discutere sul fatto che questi processori siano veram ente una nuova generazione (dato che so n o in circolazione dagli an n i ’70), è in d u b b io che sciano rivolu zio n an d o il fu n zio n am en to di m igliaia di elettrodom estici e altri dispositivi. S tanno già co m in cian d o ad avere u n fo rte im p a tto sul m o n d o e nei prossim i anni la loro influenza crescerà rapidam ente. U n aspetto non com u n e di questi co m p u ter integrati è che Ihardw are e il softw are sono spesso coprogettati (H enkel e t al., 2003). Più avanti nel libro to rn e rem o a occuparci d i loro. Se la p rim a g en erazio n e è ra p p re se n ta ta dalle m a cc h in e a valvole (p er esem pio E N IA C ), la seconda dalle m acchine a tran sisto r (per esem pio, l’IB M 70 9 4 ), la terze dalle m acchine a circuiti integrati (per esem pio, l’IBM 360) e la q u arta dai personal c o m p u ter (per esem pio, le C P U Intel), la q u in ta generazione è in realtà caratterizzata p iù d a un cam b iam en to d i m odello che da u n a specifica nuova a rc h itettu ra. In fu tu ro i co m p u ter si tro veranno o v u n q u e e saranno integrati in o g n i o ggetto, in poche parole essi saranno invisi bili; faran n o parte dei co m u n i gesti della v ita di ogni giorno, com e aprire porte, accen dere luci, spendere den aro e m igliaia di altre azioni. Q u e sto m odello, ideato dallo scom parso M ark W eiser, venne originariam ence ch iam ato ubiquitous computing (“c o m p u ta zione o n n ip re se n te ”), an ch e se spesso ci si riferisce a esso con il term in e pervasive compu ting (“co m p u tazio n e pervasiva”) (Weiser, 2002 ): cam bierà p ro fo n d a m en te il m o ndo, così com e lo fece la rivoluzione industriale. N el libro non tratterem o uiteriorm ence l ’argom ento, m a p er avere m aggiori inform azioni si consu ltin o (Lyytinen e Yoo. 2002; Saha e M ukherjee, 2 0 03 ; Sakam ura, 2002 ).
26
1.3
Capitolo 1
Introduzione
Tipologie di computer
M entre nel paragrafo precedente abbiam o affrontato brevem ente la storia dei sistemi di ela borazione, in questo guarderem o al presente e rivolgeremo anche u n o sguardo al futuro. Sebbene i personal com puter siano gli elaboratori più conosciuti, al giorno d ’oggi esistono an che altri tipi di macchine: p er questo vale la pena dare un’occhiata a quanto c’è intorno a noi.
1.3.1
Forze tecnologiche ed economiche
L’industria dei com puter avanza p iù velocemente di tutte le altre. La principale forza trainante è la capacità, che i produttori di circuiti hanno, di integrare di giorno in giorno sem pre più transistor all’interno dei chip. Avere più transistor, cioè piccoli interruttori elettronici, signi fica avere m em orie p iù grandi e processori p iù potenti. G ordon M oore, cofondatore ed ex pre sidente di Intel, un giorno scherzando disse che, se la tecnologia deH’aviazionc fosse cresciuta velocemente q u an to quella dei com puter, ora un aeroplano costerebbe 500 euro e farebbe il giro della terra in soli 20 m inuti con 2 0 litri di carburante. Per di più un tale aeroplano avrebbe le dim ensioni di una scatola da scarpe. In particolare M oore, durante la preparazione di un di scorso dinanzi a un gruppo industriale, sottolineò che ogni nuova generazione di chip veniva intro d o tta 3 anni dopo quella precedente. D ato che ogni nuova generazione ha una quantità di m em oria quattro volte maggiore della precedente, com prese che il num ero di transistor in un chip aum entava a una velocità costante e predisse «he questa crescita sarebbe continuata allo stesso m odo per decenni. Q uesta osservazione è conosciuta com e la legge di Moore. A ttualm ente con il term ine “legge di M oore” si intende il fatto che il num ero di transistor rad doppia ogni 18 mesi; questo è equivalente a dire che il num ero di transistor aum enterebbe circa del 60% ogni anno. La Figura 1.8 , che riporta le dim ensioni d i chip di m em oria e la loro data di apparizione, conferm a che la legge di M oore è rimasta valida per oltre tre decenni. O vviam ente la legge di M oore non è u n a vera e propria legge, m a un’osservazione em pirica sulla velocità con cui ì fisici dello stato solido e gli ingegneri h a n n o fatto avanzare lo 512M
Figura 1 .8
La legge di Moore prevede un aumento annuale del 60% del numero di transistor che può essere inserito su un chip. I valori presenti vicino ai punti del grafico rappresentano le dimensioni della memoria, in bit.
1.3
Tipologìe di computer
27
stato dell’arte, e una previsione che ciò continuerà anche in futuro. Alcuni osservatori del m ondo dell'industria si aspettano che la legge di M oore continui per alm eno un altro decennio. A quel p u n to però i transistor saranno costituiti da un num ero troppo basso di atom i per po ter essere ancora affidabili; ciononostante gli avanzam enti nel cam po della com putazione quantistica potrebbero far im m aginare cam biam enti simili a quelli presentati in O skin et al., 2002. Tuttavia altri osservatori si aspettano che la dissipazione di energia, la dispersione di corrente e altri effetti simili sm entiranno ancor prim a la legge di M oore e provocheranno seri problem i che in qualche m o d o dovranno essere risolti (Bose, 2004; Kim et al., 2003). La legge di M oore h a creato quello che gli econom isti chiam ano u n ciclo virtuoso. G li avanzam enti tecnologici (transistor/chip) p o rta n o a p ro d o tti migliori e allo stesso tem po più econom ici. Prezzi inferiori p o rtan o a loro volta alla creazione di nuove applicazioni (nes suno program m ava videogiochi per co m p u ter q u ando u n elaboratore costava 10 m ilioni di dollari). N uove applicazioni creano nuovi m ercati e fanno sorgere nuove società che cercano di trarne vantaggio. L’esistenza di tu tte queste società genera com petizione, che, a sua volta, crea la d om anda econom ica p er avere tecnologie m igliori grazie a cui sconfiggere la con correnza. In questo m o d o il cerchio si chiude. U n altro fattore che guida lo sviluppo tecnologico è la prim a legge del software di N athan (dovuta a N a th a n M yhrvold, u n ex dirigente di M icrosoft). Egli afferm ò che: “Il software è com e un gas. Si espande fino a riem pire il recipiente in cui è c o n ten u to ”. T ornando agli anni ’80 l’elaborazione di testi era fatta m ediante program m i com e trojf. Troffoccupa in m em o ria u n o spazio dell’ordine dei KB, m en tre i m oderni elaboratori di testo occupano vari MB; senza alcun d u b b io quelli futuri richiederanno G B di m em oria (in prim a approssim azione i prefissi K, M e G significano rispettivam ente migliaia, m ilioni e m iliardi, si veda co m u n que il Paragrafo 1.5 per maggiori dettagli). Il software, co n tin u a n d o ad acquisire sem pre più funzionalità (com e crostacei che si attaccano via via alla chiglia di una barca), crea una ri chiesta costantem ente crescente di processori più veloci, m em orie più grandi e supporti di I/O di maggiore capacità. Se nel corso degli anni l’aum ento del num ero di transistor per chip è stato sensazionale, i progressi delle altre tecnologie legate ai co m p u ter non sono stati da meno. Per fare un esem pio, il P C 1BM /X T è stato in tro d o tto nel 1982 con un hard disk d a 10 M B , m entre a d i stanza di v e n t anni i suoi successori sono co m unem ente dotati di hard disk da 100 GB. Q uesto aum ento della capacità di q u attro ordini di grandezza in 20 anni rappresenta un in crem ento annuale del 58% . M isurare i progressi dei dischi e però un com pito complesso, dato che oltre alla dim ensione vi sono altri param etri da considerare, com e la velocità di trasferi m ento, il tem po di ricerca e il prezzo. In ogni caso con quasi tu tte queste m etriche si verifica che dal 1982 il rapporto prezzo/prestazioni è m igliorato ogni an n o alm eno del 50% . Q uesto enorm e m iglioram ento delle prestazioni dei dischi, associato al fatto che il volum e econom ico degli hard disk p ro d o tti nella Silicon Vallcy ha superato quello delle C P U , ha spinto Al H oagland ad affermare che il nom e della fam osa valle è sbagliato: andrebbe infatti chiam ata lro n O xide Valley (essendo questo il m ateriale —un ossido di ferro —su cui vengono registrati i dati nei dischi). • U n’altra area ad aver co n o sciu to u n o spettacolare progresso è stata quella delle tele com u n icazio n i e delle reti. In m en o d i d u e d ecenni siam o passati dai m odem a 30 0 b it/s, ai m odem analogici a 5 6 .0 0 0 b it/s fino alle fibre o ttich e a IO 12 b it/s. I cavi telefonici tra n satlantici in fibra ottica, co m e il T A T -12/13, costano circa 700 m ilioni di curo, d u ra n o
Capitolo 1
28
Introduzione
10 an n i, e possono trasportare 3 0 0 .0 0 0 chiam ate sim ultanee; questi dati corrisp o n d o n o a m en o di u n centesim o ogni 10 m in u ti di chiam ata in terco n tin en tale. È già stato d im o strato che si posso n o realizzare sistem i o ttic i d i com unicazione a IO1* b it/s su distanze su periori a 100 k m e senza l’utilizzo di am plificatori. La crescita esponenziale di In te rn e t no n richiede ulteriori co m m en ti.
1.3.2
Spettro di computer
R ichard H a m m in g , ex-ricercatore dei Bell Labs, una volta osservò che un cam biam ento della q u a n tità d i u n o rdine d i grandezza p ro d u ce u n cam b iam en to della qualità. Secon do q uesta osservazione u n a m acchina da corsa che p u ò raggiungere i 1000 K m /h nel de serto del N evada è u n tip o di v ettu ra fo n d am en talm en te diverso d a u n a co m une a u to m o bile che va a 100 K m /h su u n ’au to strad a. A nalogam ente un grattacielo d a 100 piani no n è sem p licem en te u n a versione in g ran d ita di u n co n d o m in io da 10 piani. N el caso dei c o m p u te r n o n si parla di u n fattore 10 , m a a d d irittu ra di un fattore 1 m ilione n d l ’arco di tre decenni. Il guadagno fornito dalla legge di M oore può essere sfruttato in m odi diversi. U no di loro consiste nel costruire com puter sem pre più potenti allo stesso prezzo; l’altro nel costruire di anno in anno sem pre lo stesso com puter, m a a un prezzo inferiore. L’industria dei com puter ha seguito en tram b i gli approcci, e altri ancora, al p u n to che oggi esiste un’am pia varietà di com puter. La Figura 1.9 m ostra una classificazione som m aria dei co m p u ter attuali. Nei paragrafi seguenti esam inerem o ciascuna di queste categorie e n e considererem o brevem ente le proprietà. Prezzo (S)
Tipo Computer usa e getta Microcontrol lare
0,5 S
Computer da gioco
50
Personal computer
500
Server
5K
Raggruppamento di workstation
Figura 1.9
50-500K 5M
Mainframe
Esempio di applicazione Cartoline d'auguri Orologi, automobili, elettrodomestici Videogiochi Computer desktop o portatili Server di rete Minisupercomputer di un dipartimento Elaborazione batch dei dati in una banca
L'attuale spettro di computer disponibili. I prezzi vanno interpretati "cum granu salis"
(o meglio ancora, “cum saxo salis").
1.3.3
Computer usa e getta
Al gradino p iù basso troviam o i chip inseriti all in tern o di cartoline d ’auguri, che em ettono la m elodia di “ H ap p y B irthday to You” o qualche altro m otivetto a ltrettan to popolare. L’A utore non ha ancora trovato una cartolina di condoglianze che suoni un canto funebre, m a ora che ha reso p ubblica questa idea si aspetta di vederne apparire presto una sul m er cato. Per chi è cresciuto con grandi c o m p u ter da m ilioni di dollari l’idea di un co m p u ter usa e getta ha senso q u an to p uò averne quella di un aereo con lo stesso utilizzo.
13
Tipologie di computer
29
Tuttavia i co m p u ter usa e getta fanno p arte del nostro m o n d o e co n tin u eran n o a fam e parte anche in futuro. Probabilm ente il più im p ortante sviluppo nell’area di questi tipi di c o m p u ter è rappresentato dai chip RF1D (Radio Frequency Identificatioti, “identificazione a radiofrequenza”). O ggi è possibile costruire, p er pochi centesim i, chip R F ID senza batteria, larghi m eno di 0,5 m m , caratterizzati da u n num ero a 128 bit predefinito e univoco e con tenenti al loro interno u n piccolo radiotrasm ettitore. Q u ando ricevono impulsi radio da un’an ten n a esterna i chip R F ID si caricano grazie al segnale e n tran te sufficientem ente a lungo da riuscire a ritrasm ettere all'antenna il proprio num ero identificativo. A nche se questi chip sono piccoli, le loro possibili im plicazioni n o n lo sono affatto. P artiam o dalla banale applicazione di elim inare il codice a barre dai p ro d o tti. Sono già stati realizzati test sperim entali in cui i p ro d o tti venduti in un negozio hanno, al posto del codice a barre, un chip RFLD applicato dal p ro d uttore. Il cliente sceglie i p ro d o tti deside rati, li ripone in un carrello della spesa e lo spinge sem plicem ente fuori dal negozio. All’uscita un lettore d o tato d ’an ten n a spedisce un segnale richiedendo a ciascun pro d o tto di identifi carsi, cosa che viene fatta attraverso una breve trasm issione radio. A nche il cliente viene iden tificato p er mezzo di u n chip presente sui p ro p ri bancom at o carta di credito, così che alla fine del mese il negozio potrà inviargli una dettagliata ricevuta di tu tti gli acquisti effettuati. Se il cliente n o n h a u n co n to in u n a banca o una carta di credito che supporta R F ID , scatta invece un allarm e. Q uesto sistem a n o n solo p u ò sostituire i cassieri ed elim inare le relative attese in coda, m a può anche servire da sistem a antifurto, dato che non è di alcuna utilità nascondere un p ro d o tto in tasca o nello zainetto. U n a p roprietà interessante di questo sistem a è che, m entre il codice a barre identifica solo il tipo di p ro d o tto , i chip R F ID , grazie ai 128 bit a disposizione, possono identificare anche il p ro d o tto stesso. N e consegue che, per esem pio, ogni pacchetto di aspirine presente sullo scaffale d i u n superm ercato potreb b e avere un diverso codice R F ID . Q uesto significa che se un p ro d u tto re farm aceutico dovesse scoprire un difetto in un lotto di aspirine già di stribuito, si potrebbe richiedere ai superm ercati di tu tto il m o n d o di far suonare un allarme se un d ie n te co m p ra u n pacchetto il cui n u m ero R F ID fa parte di tale gruppo. C iò sarebbe attuabile anche se l’acquisto fosse effettuato in un paese lontano e a distanza di mesi; le aspi rine n o n appartenenti al lo tto difettato non provocherebbero invece alcun allarme. M a etichettare pacchetti d i aspirine, biscotti o cibo per cani è soltanto l’inizio. Perché ferm arsi a etichettare i biscotti per cani q u an d o si può etichettare il cane stesso? A lcuni pa droni stanno già chiedendo ai veterinarf di im piantare nei loro anim ali un chip R F ID , in m o d o da poterli rintracciare nel caso venissero rubati o si perdessero. A nche gli allevatori vogliono etichettare il loro bestiam e. Il passo successivo che ci si aspetta è quello di genitori nervosi che richiedono al pediatra di im piantare un chip R FID nei loro figli, per poterli ri trovare nel caso venissero rapiti o si perdessero. G ià che ci siam o, perché n o n obbligare gli ospedali a im piantarli in tu tti i neonati, in m o d o da evitare gli scam bi di bebé? Senza d u b bio i governi e la polizia possono trovare o ttim e ragioni per identificare e tracciare i m ovi m enti di tu tti i cittadini in qualsiasi m om ento. D etto questo, le “im plicazioni” dei chip R FID a cui si alludeva precedentem ente risultano u n po’ p iù chiare. U n’altra applicazione (leggerm ente m eno controversa) dei ch ip R F ID è l’identifica zione d i veicoli. Q u a n d o u n tren o , con chip R F ID integrati, passa vicino a un lettore, il co m p u te r che vi è collegato o ttien e u n a lista delle vetture che sono transitate. Q u e sto si stem a p erm ette di localizzare agevolm ente tu tti i vagoni, il che p u ò essere d ’aiuto a forni-
30
Capitolo 1
Introduzione
tori, clienti e ferrovie. U no schem a sim ile sarebbe applicabile anche ai cam ion, m en tre per le auto m o b ili l'idea p otrebbe essere usata per il pagam ento dei pedaggi autostradali per via elettronica. A nche la gestione dei bagagli delle com pagnie aeree, così com e m olti altri sistem i di consegna, potrebbero trarre vantaggio dai chip R FID . All’areoporto di H eathrow , a Londra, è stato c o n d o tto un esperim ento per sollevare i passeggeri in arrivo dal ritiro dei loro baga gli. Le borse dei passeggeri che avevano acquistato questo servizio venivano m arcate m ediante chip R F ID , poi spedite separatam ente all intern o deU’areoporto e infine consegnate diret tam ente nei rispettivi hotel. Fra le svariate possibilità di utilizzo dei chip R F ID si possono im m aginare m acchine che, giu n te alla stazione di verniciatura di una linea di assemblaggio, com u n ican o il colore che deve essere loro applicata; ulteriori possibili im pieghi co m pren d o n o lo studio delle migrazioni di anim ali, la produzione di vestiti che com unicano alla la vatrice la tem p eratu ra da utilizzare e m o lto altro ancora. A lcuni chip potrebbero essere in tegrati con sensori in m odo che i bit inferiori del loro num ero identificativo potrebbero spe cificare tem peratura corrente, pressione, um id ità o altre variabili am bientali. C h ip R F ID p iù avanzati sono in grado di m em orizzare dati in m odo perm anente. Q uesta possibilità ha spinto la Banca C en trale E uropea a decidere di inserire tali chip nelle banconote di euro dei prossim i anni. I chip sarebbero in grado di m em orizzare il loro per corso. C iò n o n solo renderebbe virtualm ente im possibile contraffare le banconote di euro, m a perm etterebbe anche di individuare i riscatti pagati ai rapitori e i b o ttin i delle rapine; inoltre sarebbe facile tener traccia del denaro sporco eirtv alid arn e le banconote. In futuro, q uan d o il denaro cesserà di essere anonim o, u n a procedura standard di polizia potrebbe es sere quella di controllare dove sia stato di recente il denaro di un sospetto. C hi avrà bisogno di im piantare chip nelle persone q u an d o i loro portafogli ne saranno già pieni? M olto pro babilm ente, q u an d o l’opin io n e pubblica capirà che cosa p erm etto n o di fare i chip R F ID , nasceranno d ib attiti pubblici in m ateria. La tecnologia utilizzata nei chip R F ID si sta sviluppando rapidam ente. I più piccoli sono passivi (non alim entati internam ente) e capaci soltanto di trasm ettere il loro num ero univoco q u an d o richiesto. Q uelli più grandi invece sono attivi, possono contenere una pic cola batteria e un co m p u ter elem entare, e sono in grado di com piere alcuni calcoli. Le pic cole carte utilizzate per le transazioni econom iche rientrano in questa categoria. I chip R F ID si distinguono n on solo per essere attivi o passivi, ma anche in base allo spettro di radiofrequenze a cui possono rispondere. Q uelli che operano a basse frequenze h an n o u n a velocità di trasferim ento dati lim itata, m a possono essere captati d a un’an ten n a anche a grande distanza. Q uelli che operano ad alte frequenze h an n o invece una più alta ve locità di trasferim ento d ati, m a un raggio d azione più ristretto. I chip differiscono anche sotto altri aspetti e co n tin u an o a essere m igliorati. In tern et è piena d ’inform azioni riguar danti i chip R F ID ; u n b u o n p u n to d i partenza è il sito www .rfid.org.
1.3.4
Microcontrollori
AJ gradino successivo troviam o i co m p u ter integrati in apparecchiature che non sono ven d u te com e elaboratori. I co m p u ter integrati in un dispositivo, a volte chiam ati microcontrollori, lo co m andano e ne gestiscono l’interfaccia utente. I m icrocontrollori sono presenti in u n gran nu m ero di apparecchi m olto diversi fra loro; in seguito sono elencate alcune di queste categorie;
1.3
Tipologie di computer
31
1. elettrodom estici (radiosveglie, lavatrici, asciugatrici, forni a m icroonde, im p ian d an ti furto)
2 . dispositivi per la com unicazione (telefoni senza fili, cellulari, fax, cercapersone) 3. periferiche del co m p u ter (stam panti, scanner, m odem , lettori C D -R O M ) 4. apparecchi p er l'in tra tte n im e n to (videoregistratori, D V D , sterco, lettori M P 3 , decoder video) 5. dispositivi per le im m agini (TV, m acchine fotografiche digitali, videocam ere digitali, obiettivi, fotocopiatrici)
6 . stru m en ti medicali (raggi X, M R I, elettrocardiogram m i, term om etri digitali) 7. arm i (missili, torpedini)
8 . apparecchiature p er gli acquisti (m acchinette per la distribuzione autom atica, bancom at, registratori di cassa) 9. giochi (bam bole parlanti, console per videogam e, au to o barche telecom andate). U n’autom obile di fascia alta p u ò facilm ente contenere 50 m icroconrrollori che com andano diversi sottosistem i tra cui l’antibloccaggio dei freni, l’iniezione della benzina, la radio e il G PS. U n jet ne p u ò contenere anche p iù di 200, m entre una fam iglia pu ò facilm ente pos sederne centinaia senza neanche saperlo. Fra pochi anni praticam ente ogni dispositivo elet trico conterrà un m icrocontrollore. 11 n u m ero di m icrocontrollori venduti ogni an n o sur classa di vari ord in i di grandezza le vendite di tu tti gli altri tipi di com puter, fatta eccezione per quelli usa e getta. Se i chip R F ID sono sistem i m inim ali, i m icrocontrollori sono invece sistem i com pleti, anche se di piccole dim ensioni. C iascun m icrocontrollore è d o ta to di un processore, di una m em oria e di capacità di I/O . Q u este u ltim e di solito com p ren d o n o la gestione di pulsanti e in te rru tto ri del dispositivo e il controllo di luci, display e audio. N ella m aggior parte dei casi il software è integrato nel chip sotto form a di una m em oria di sola lettura creata d u rante la fabbricazione del m icrocontrollore. G eneralm ente i m icrocontrollori possono essere di due tipi: a uso generale, o specifico per u n ’applicazione. I prim i non sono altro che pic coli, m a com uni, com puter; m en tre gli ultim i h an n o un’architettura e un insiem e d ’istru zioni progettati specificatam cntc per una particolare applicazione, per esem pio m ultim ediale. I m icrocontrollori esistono in versioni tfe 4, 8 , 16 e 32 bit. T uttavia anche i m icrocontrollori di uso generale differiscono per vari aspetti dai PC standard. Prim a di tu tto sono estrem am ente critici dal p u n to di vista dei costi. U n'azienda che deve com prare m ilioni di m icrocontrollori potrebbe basare la propria scelta su una dif ferenza di prezzo di u n centesim o per unità. Q u esto vincolo p o rta i p ro d u tto ri di m icrocontrollori a basare le proprie scelte architetturali m olto più sui costi di produzione, rispetto ai p ro d u tto ri di chip da centinaia di euro. Il prezzo dei m icrocontrollori varia tuttavia in m od o rilevante a seconda del loro n u m ero di b it, della grandezza e tipo della m em oria di cui sono dorati e di altri fattori; per farsi u n ’idea, un m icrocontrollore a 8 bit acquistato in grandi q u an tità p uò costare m eno di 10 centesim i. Q uesto prezzo rende possibile l’inseri m en to di un co m p u ter all’in tern o d i u n a radiosveglia d a 9,95 euro. In secondo luogo, praticam ente tu tti i m icrocontrollori lavorano in tem po reale; essi ri cevono uno stim olo e ci si aspetta che diano una risposta im m ediata. U na com une situazione
32
Capitolo 1
Introduzione
è l’accensione di una luce q u ando l’u tente prem e un pulsante; in tal caso n o n ci deve essere al cun ritardo tra il m om ento in cui il pulsante viene prem uto e quello in cui la luce si accende. Spesso la necessità di lavorare in tem po reale influisce sul tipo di architettura. In terzo luogo, i sistem i integrati sono generalm ente soggetti a vincoli fàsici legati a d i m ensioni, peso, consum o della batteria e ad altri limiti elettrici e meccanici. I m icrocontrollori al loro in tern o devono essere progettati tenendo ben presenti queste restrizioni.
1.3.5
Computer per giocare
A u n gradino p iù in alto si trovano i videogiochi. Si tratta di norm ali co m p u ter dotati di speciali capacità grafiche e so n o re, m a p oco espandibili e fo rn iti di softw are lim itato. Inizialm ente erano basati su C P U a basso costo per poter giocare, tram ite il televisore, a sem plici giochi d ’azione com e il p in g pong. N egli an n i si sono evoluti in sistemi m olto più po ten ti, rivaleggiando con i personal c o m p u ter sotto determ inati aspetti e superandone talvolta le prestazioni. Per avere u n ’idea di che cosa ci sia all’in te rn o di una console d a gioco consideriam o le specifiche tecniche di tre diffusi p ro d o tti. C o m e prim a m acchina, esam iniam o la PlayS tatio n 2 della Sony che co n tien e u n a C P U p ro p rietaria (chiam ata E m o tio n Engine) a 128 b it a 295 M hz, basata sulla C P U M IP S IV di tipo R ISC . La PlayStation 2 è d o tata in o ltre di 32 M B d i R A M , un chip grafico dedicato a 160 M H z, un ch ip au d io dedicato a 48 canali e u n letto re D V D . C o m e seconda console, consideriam o la M icrosoft X BOX. Q u e sta co n tien e u n In tel P en tiu m III a 7 3 3 M H z con 64 M B di R A M , un chip grafico d ed icato a 3 0 0 M H z , un chip au d io dedicato a 2 5 6 canali, un lettore D V D e un hard disk da 8 G B . Infine, p ren d iam o in esame il N in te n d o G am eC u b e che co n tien e una spe ciale C P U (chiam ata G ekko) a 32 b it e a 4 85 M H z , derivata dalla C P U R IS C Pow erPC di IB M , 24 M B d i RAM , u n ch ip grafico d edicato a 20 0 M H z , un chip au d io a 64 ca nali e u n disco o ttico p ro p rietario da 1,5 G B. A nche se queste m acchine n o n sono a ltrettan to p o te n ti q u a n to i personal co m p u ter prodotti nello stesso periodo, esse non sono m olto distanti da quest’ultim i e sotto alcuni aspetti sono a d d irittu ra p iù evolute (la C P U a 128 bit della PlayStation 2, per esem pio, è m olto più avanzata delle C P U di qualsiasi P C , sebbene la velocità d i clock sia m olto più bassa). La differenza principale tra una console e u n P C n o n risiede tanto nella C P U q u an to nel fatto che le p rim e sono sistem i chiusi. A nche se di solito le console h an n o interfacce USB e FireW ire, gli u te n ti n o n possono espanderle attraverso schede aggiuntive. Inoltre, e forse que sto è l’aspetto più im portante, le console sono a tten tam en te ottim izzate per un particolare tip o di applicazioni, com e i vidcogiochi 3 D fortem ente interattivi e con audio stereo di alta qualità. T u tto il resto è secondario. Q ueste restrizioni hardw are e software, la bassa velocità di clock, la lim itatezza della m em oria, l’assenza di m o n ito r ad alta risoluzione e (general m ente) l’assenza di un hard disk, rendono possibile la costruzione e la vendita di queste m ac chine a u n prezzo n ettam en te inferiore rispetto a quello dei personal com puter. N o n o stan te queste restrizioni, nel m ondo sono stati venduti m ilioni di console. Le stesse società che p ro d u co n o le principali console da gioco, p roducono anche co n sole portatili che possono essere agevolm ente ten u te in m ano e funzionano m ediante batte rie. Q u este m acchine sono più simili ai sistemi integrati illustrati precedentem ente che ai personal com puter.
1.3
1.3.6
Tipologie di computer
33
Personal computer
C o n tin u an d o a salire i gradini della scala degli elaboratori arriviamo ai personal com puter, cioè quelle m acchine a cui perlopiù si pensa quando si sente pronunciare il term ine “com puter”. Essi com prendono i m odelli desktop e quelli portatili. G eneralm ente sono fom iti di centinaia di megabyte di m em oria, un hard disk che può contenere circa 100 GB di dati, un lettore C D R O M /D V D , un m odem , una scheda audio, un’interfaccia di rete, u n m o n ito r ad alta risolu zione e altre periferiche. Sono dotati di sistemi operativi sofisticati, hanno m olte possibilità di
Figura 1.10
Nel cuore di ogni personal computer c'è una scheda di circuiti stampati. Questa immagine è una fotografia della scheda Intel D875PBZ. La fotografia è di proprietà di Intel Coorporation (copyright 2003) e pubblicata con autorizzazione. 1. Socket del Pentium 4 2. Chipset 875P 3. Socket per la memoria 4. Connettore AGP 5. Interfaccia per il disco
6. 7. 8. 9. 10.
Ethernet Gigabit Cinque slot PCI Porte USB 2.0 Sistema di raffreddamento BIOS
34
Capitolo 1
Introduzione
espansione e dispongono di un’am pia gam m a di software disponibile. Alcuni riservano il ter m ine “PC " alle macchine basate su C P U Intel, m entre usano il term ine “w orkstation” per in dicare quelle che usano u n chip R IS C ad alte prestazioni, com e il Sun U ltraSPA RC. C oncettualm ente però tra i due vi è solam ente u n a piccola differenza. Il cuore di ogni personal co m p u ter è costituito da una scheda di circuiti stam pati che con tien e la C P U , la m em oria, vari dispositivi di I /O (com e un chip audio e talvolta un m odem ), oltre alle interfacce p er tastiera, m ouse, disco, rete e ad alcuni slot di espansione. La Figura 1.10 m ostra un’im m agine di una dì queste schede, ì co m p u ter p o rtatili sono fo n dam entalm ente dei PC realizzati in dim ensioni ridotte. U sano le stesse co m p o n en ti hardw are, seppur costruite in dim ensioni inferiori, e possono eseguire lo stesso software dei P C da scrivania. U n altro tipo di m acchina strettam ente collegato al personal co m p u ter è il PD A. A nche se le loro dim ensioni sono ancora m inori d i quelle dei co m p u ter portatili, dispongono tu t tavia d i C P U , m em oria, tastiera, scherm o e di m olte altre caratteristiche tipiche di un PC in m iniatura. D ato che con ogni probabilità la m aggior p a n e dei lettori ha fam iliarità con i personal com puter, n o n vi è bisogno d i ulteriore m ateriale introduttivo.
1.3.7
Server
Spesso vengono im piegate versioni potenziate dei personal com puter o delle w orkstation come server di rete, sia per reti locali (di solito a irin te rn o di un’azienda) sia per Internet. Esistono confìgurazioni m o n o o m ultiprocessore, d otate di gigàbyte dì m em oria, centinaia dì gigabyte di spazio su hard d isk e connessioni di rete ad alta velocità. A lcuni server sono in grado di gestire migliaia di transazioni al secondo. Dal p u n to di vista dell'architettura un server m onoprocessore non è però m olto diverso d a u n personal co m p u ter m onoprocessore. È sem plicem ente p iù veloce e più grande, h a un a m aggiore m em oria di massa e generalm ente ha una connessione alla rete più veloce. I server eseguono gli stessi sistemi operativi dei personal com puter, di solito uno dei dialetti di U N IX op p u re di W indow s.
1.3.8
Cluster di workstation
D a to che il rap p o rto prezzo/prestazioni delle w orkstation con tìn u a progressivam ente a m i gliorare, negli ultim i anni i progettisti di sistemi hanno com inciato a connettere fra loro un gran nu m ero d i queste m acchine per form are i cosiddetti C O W (Clusters o f Workstation*, “g ru p p i di w orkstation”), d etti an ch e cluster. Essi consistono di norm ali personal co m p u ter o w orkstation connessi fra loro m ediante reti la cui velocità è nell’ordine dei gigabyte al se condo. Q u este m acchine eseguono softw are speciale che perm ette loro di lavorare in m odo co n g iu n to su u n o stesso problem a, spesso d i tipo scientifico o ingegneristico. G eneralm ente le m acchine utilizzate vengono chiam ate C O T S (Commodity O ff The Shelf, “p rodotti pronti per l’uso”) cioè elaboratori che ch iu n q u e può acquistare in un norm ale negozio dì com puter. La principale aggiunta che viene fatta è una connessione d i rete ad alta velocità, anche se talvolta si utilizzano norm ali schede di rete com m erciali. I cluster sono facilm ente scalabili; possono essere com posti da poche m acchine fino a migliaia dì elem enti e spesso il fattore che ne lim ita il n u m ero è sem plicem ente il costo d a affrontare. Grazie alla convenienza eco nom ica delle loro co m p o n en ti, oggi anche u n singolo d ip artim ento p u ò perm ettersi di pos sedere tali m acchine.
1.3
Tipologie di computer
35
I cluster possono anche essere utilizzati com e server W eb per Internet. Q u an d o si devono gestire migliaia di richieste al secondo per le pagine di un sito web spesso la soluzione più eco nom ica è un cluster con centinaia, se n o n migliaia, di server. Le richieste en tran o vengono di stribuite sui server per perm ettere loro di elaborarle in parallelo. Q u an d o u n cluster viene uti lizzato in questo m odo, spesso lo si chiam a serverfam i, “fattoria di server”.
1.3.9
Mainframe
In cim a alla scala di co m p u ter troviam o i m ainfram e, co m p u ter grandi com e una stanza che rievocano gli elaboratori degli an n i ’60. In m olti casi queste m acchine sono i diretti discen denti dei m ainfram e IB M 360. La m aggior parte di loro ha una velocità che non è m olto più elevata rispetto a quella dei server più p o ten ti, ma tu tti i m ainfram e h an n o capacità di I /O m aggiori e sono spesso equipaggiati con un vasto n u m ero di dischi, per la mem orizza zione di m igliaia di gigabyte d i dati. P u r essendo costosi vengono ancora utilizzati per via dell’enorm e investim ento che rappresentano in term ini di software, dati, procedure opera tive e personale specializzato. M olte società ritengono che sia p iù conveniente pagare una volta ogni ta n to alcuni m ilioni di euro per com prarne un o nuovo, p iuttosto che prendere in considerazione lo sforzo necessario a riprogram m are tu tte le loro applicazioni per mac chine p iù piccole. £ questa classe di co m p u ter che h a p o rtato all’orm ai fam oso bug del m illennio, pro vocato dal fatto che i p rogram m atori C O B O L degli anni ’60 e ’7 0 usavano (per risparm iare m em oria) solo due cifre decim ali per rappresentare gli anni. N o n avrebbero mai pensato che il loro software sarebbe d u rato tren ta o q u aran t’anni. Grazie all’enorm e lavoro profuso per risolvere il problem a, il disastro previsto non si è verificato; ciononostante m olte società sono ricadute nello stesso errore aggiungendo agli a n n i altre due cifre decim ali. L'autore prevede qu in d i che la fine della civiltà così com e l’abbiam o conosciuta avverrà il 31 dicem bre 9999 , q u an d o l’equivalente di 8000 anni di vecchio codice C O B O L sm etterà sim ultaneam ente di funzionare. N egli ultim i an n i, In tern et ha d ato nuova linfa ai m ainfram e, fino ad allora usati p rin cipalm ente per l’esecuzione di software vecchio di 30 anni. Q ueste m acchine h an n o trovato una nuova nicchia com e p o ten ti server Internet gestendo per esem pio un massiccio num ero d i transazioni di com m ercio elettronico al secondo, in particolare laddove sono richieste enorm i basi di dati. Sebbene il libro sia dedicato ai P C , ai server e ai m icrocontrollori, nel C apito lo 5 analizzeremo più nel dettaglio anche i m ainfram e. Fino a poco tem po fa esisteva anche un’ulteriore categoria di com puter, ancora più potente dei m ainfram e: i su p e rc o m p u te r. Avevano C P U incredibilm ente veloci, m olti gigabyte di me m oria principale e dischi e reti ad alta velocità. Q ueste m acchine venivano utilizzate per im ponen ti calcoli scientifici e ingegneristici com e la simulazione della collisione fra galassie, la sintesi di nuove m edicine o la sim ulazione del flusso di aria atto rn o alle ali degli aerei. Negli ultim i anni i C O W hanno però offerto la stessa potenza com putazionale a un costo decisa m ente inferiore, e i veri supercom puter sono diventati una razza in via d ’estinzione.
36
1.4
Capitolo 1
Introduzione
Esempi di famiglie di computer
In questo libro focalizzeremo l’attenzione su tre tipi di m acchine: i personal com puter, i server e ì sistem i integrati. L’interesse verso i prim i è m otivato dal fatto che ogni lettore ne ha senza d u b b io utilizzato uno, m entre quello verso i server è dovuto al fatto che eseguono tu tti i ser vizi di Internet. Per q u an to riguarda infine i co m p u ter integrati essi sono invisibili agli utenti, ma controllano m acchine, televisori, forni a m icroonde, lavatrici e praticam ente qualsiasi al tro dispositivo che costi più di 50 euro. In questo paragrafo darem o u n a breve introduzione dei tre c o m p u ter che saranno usati com e esem pi nel resto del libro, u n o per o g nuna delle tre categorie sopracitate. Sono il Pentium 4, l’U ltraSPA RC III e l’8051.
1.4.1
Introduzione al Pentium 4
N el 1968 R obert Noyce, inventore dell’integrazione dei circuiti su silicio, G o rdon M oore, fam oso per la legge om onim a, e A rth u r Rock, u n im prenditore di San Francisco, fondarono la Intel C orp o ratio n per p ro d u rre chip di m em oria. D u ran te il prim o anno di attività il fat tu rato Intel fu di soli 3 0 0 0 dollari, m a da allora gli in troiti sono decollati. N ei tardi anni ’60 i calcolatori erano grandi m acchine elettrom eccaniche della grandezza di u n a m oderna stam pante laser e del peso di 20 Kg. N el settem bre del 1969 una società giap ponese, la Busicom , si rivolse a Intel per richiedere là produzione di 12 chip appositam ente p ro gettati per u n nuovo calcolatore elettronico. Ted H off, 1 ingegnere di Intel cui fu affidato l’incarico, analizzò il progetto e si rese co n to che, per realizzare le stesse operazioni, avrebbe p o tu to m ettere su un singolo chip una C P U a 4 bit di uso generale e che questa sarebbe stata allo stesso tem po più semplice ed econom ica. C osì nel 1970 nacque i! processore 4004, la prim a C P U su un chip costituita da 2300 transistor (Faggin et al., 1996). O ccorre notare che né Intel né Busicom si resero subito conto di che cosa avessero ap pena realizzato. Q u a n d o Intel decise che valeva la pena provare a utilizzare il 4004 in altri progetti, propose a Busicom di ricom prare tu tti i d iritti, restituendole i 6 0 .0 0 0 dollari che la società giapponese aveva pagato p er lo sviluppo della C P U . L’offerta fu subito accettata e d a quel m o m en to Intel p otè com inciare a lavorare su una versione a 8 bit del processore, l’80 0 8 , in tro d o tto nel 1972. La famiglia Intel, iniziata con il 4004 e l’8008 è illustrata nel la Figura 1.11. Intel non si aspettava una grande richiesta per l’SOOS e quindi im postò u n a linea di produzione su un basso volum e. Fra lo stu p o re generale, il chip riscosse un enorm e inte resse, tale da spingere Intel a p rogettare una nuova C P U che aggirasse il principale problem a dell’8088, cioè il lim ite di 16 KB d i m em oria (dovuto al num ero d i co n tatti esterni del chip). Il progetto term in ò nel 1974 con la nascita dell’8080, una piccola C P U di uso generale. E sattam ente com e avvenne per il P D P - 8 , questo pro d o tto conquistò di colpo il m ercato e divenne im provvisam ente u n articolo con un m ercato di massa. La differenza è che, invece di venderne migliaia com e fece D E C , Intel riuscì a venderne m ilioni. Nel 1978 com parve 18086, u n ’auten tica C P U a 16 bit su un solo chip. L’8086 fu pro gettato p er essere simile alT8080, p u r senza la com pleta com patibilità. L’8086 fu seguito dall’8088, che aveva la sua stessa architettura e poteva eseguire gli stessi program m i, ma era d o tato di un bus a 8 invece che a 16 bit, rendendolo più lento e allo stesso tem p o p iù eco-
1.4
Chip
Data
M Hz
N. di transistor
Memoria
Esempi di famiglie di computer
37
Descrizione
4004
4/1971
0,108
2300
640
8008
4/1972
0,108
3500
16 KB
Primo microprocessore a 8 bit
8080
4/1974
2
6000
64 KB
Prima CPU di uso generale su un solo chip
8086
W1978
5-10
29.000
1 MB
Prima CPU a 16 bil su un solo chip
8088
6/1979
5-8
29.000
1 MB
Usato nel PC IBM
80286
2/1982
8-12
134.000
16 MB
80386
I (VI 985
16-33
275.000
4 GB
Prima CPU a 32 bit
80486
4/1989
25-100
1,2 M
4 GB
Memoria cache da 8 KB integrata
Pentium
3/1993
60-233
3.1 M
4 GB
Due pipeline: islruzioni MMX nei modelli successivi
Pentium Pro
3/1995
150-200
5,5 M
4 GB
Cache integrata a due livelli
Pentium II
V I 997
233-450
7.5 M
4 GB
Pentium Pro con istruzioni MMX
Pentium III
2/1999
650-1400
9.5 M
4 GB
Istruzioni SSE per la grafica 3D
Pentium 4
11/2000
1300-3800
42 M
4 GB
Hyperthreading; ulteriori istruzioni SSE
Figura 1.11
Primo microprocessore su un solo chip
Introduzione della modalità protetta
La famiglia di CPU Intel. Le velocità del clock sono misurate in MHz (megahertz) dove 1 Mhz corrisponde a 1 milione di cicli/s.
nom ico dell’8086. Q u a n d o IBM scelse l’8088 com e C P U per il prim o P C IB M , questo pro cessore divenne rapidam ente lo standard nel m ercato dei personal com puter. N é l’8088 né l’8086 potevano indirizzare p iù di 1 M B di m em oria, il che nei prim i anni ’80 divenne via via un serio problem a, al p u n to che Intel decise di progettare l’80286, una versione più p otente, m a ancora com patibile con l’8086. L’insiem e base d ’istruzioni era essenzialm ente lo stesso d ell'8 0 8 6 e deU’80 8 8 , m a l’organizzazione della m em oria era m olto differente e p iu tto sto com plessa, a causa dei requisiti di com patibilità con gli altri proces sori. L’8 0 286 fu utilizzato nel PC IB M /A T e nei modelli PS/2 di gam m a media. C om e T8088 fu anch’esso un grande successo, so p ra ttu tto perché era in genere considerato com e un 8088 p iù veloce. Il successivo passo fu logicam ente T80386, una vera C P U a 32 b it su un chip che vide la luce nel 1985. C o m e il precedente, qefesto processore era una versione più o m eno co m patibile con tu tto ciò che risaliva all’8080. Essendo retrocom patibile fu u n a benedizione per chi aveva necessità di eseguire vecchio software, ma un fastidio per chi avrebbe preferito un’ar chitettura m oderna, sem plice, ben p rogettata e non appesantita dagli errori e dalla tecnolo gia degli anni precedenti. Q u a ttro anni dopo apparve T80486. Era in sostanza una versione più veloce dell’80386 con in più un’u n ità in virgola m obile e una m em oria cache di 8 KB sul chip. La m em o ria cache era usata per conservare, all’in tern o o vicino alla C P U , le parole di m em oria utiliz zate con più frequenza, di m odo da evitare l’accesso (lento) alla m em oria centrale. L’804 8 6 aveva anche u n su p p o rto m ultiprocessore predefinito per perm ettere ai produttori di costruire sistemi com posti da p iù C P U che condividessero u n a m em oria com une. A quel p u n to Intel scoprì nel m odo peggiore (perdendo una causa legale per violazione di diritti) che i num eri (com e 80486) non potevano essere registrati com e m archio, e per
38
Capitolo 1
Introduzione
questo alla generazione successiva fu d ato u n nom e: Pentium (dal term ine greco “cinque”, névni). D iversam ente dall’8 0486, che aveva u na sola pipeline interna, il Pentium ne aveva due, il che lo aiutò a essere due volte p iù veloce^le pipeline verranno illustrate in dettaglio nel C apitolo 2). In seguito, d u ran te la sua corsa produttiva, Intel aggiunse l’insiem e d ’istruzioni spe ciali M M X (M ultiM cdia eXtension, “estensioni m ultim ediali"). Q ueste istruzioni furono ideate p er velocizzare i calcoli necessari per l'elaborazione di audio e video, rendendo così superflua la presenza di coprocessori m ultim ediali. Q u an d o apparve la generazione successiva, la gente che sperava di vedere il Sexium {sex significa sei in Latino) rimase delusa. O rm ai il nom e Pentium era talm ente conosciuto che gli addetti al m arketing lo vollero m antenere e il nuovo chip prese il nom e di P entium Pro. N onostante il piccolo cam biam ento nel nom e, questo processore rappresentò una maggiore discontinuità rispetto al passato. Invece d i avere due o più pipeline il Pentium Pro aveva un’o r ganizzazione interna m olto diversa e poteva eseguire fino a cinque istruzioni allo stesso tem po. Un’altra innovazione in tro d o tta dal Pentium Pro fu k m em oria cache a due livelli. Nel chip stesso del processore vi erano 8 KB di m em oria veloce contenenti le istruzioni usate più di frequente e altri 8 KB dedicati in m odo analogo ai dati. M 'in te rn o della stesso alloggiamen to del Pentium Pro (m a n o n nel chip stesso) vi era una seconda m em oria cache di 256 KB. A nche se il Pentium Pro era d o tato d i u na cache di grandi dim ensioni, m ancavano le istruzioni M M X (dato che Intel n on riuscì a produrre un così grande chip a un costo ac cettabile). Q u a n d o i progressi tecnologici perm isero dì avere contem p o ran eam en te sullo stesso chip sia le istruzioni M M X sia la cache, il risultato fu la nascita del P entium II. Suc cessivamente, per m igliorare le prestazioni con la grafica 3 D , furono aggiunte ulteriori istru zioni m ultim ediali, chiam ate SSE {StreamingSIMD Extenstons, “estensioni per stream S IM D ”) (R am an et al., 2 0 0 0 ). Al nuovo chip fu d ato il n o m e di P en tiu m IH, anche se internam ente era in sostanza un Pentium II. Il Pentium successivo fu basato su un’architettura interna differente. Per celebrare l’e vento Intel passò dalla num erazione in num eri rom ani a quella in num eri arabi e lo chiam ò Pentium 4. C o m e al solito il Pentium 4 era più veloce di tu tti i suoi predecessori; la versione a 3 ,0 6 G H z introdusse in più una nuova e interessante caratteristica; Xhypertbreading. Q uesta potenzialità perm etteva ai program m i di dividere il loro lavoro in due flussi di controllo che il Pentium 4 poteva eseguire in parallelo, accelerandone l’esecuzione. Inoltre vennero aggiunte altre istruzioni SSE per velocizzare ulteriorm ente l’elaborazione audio e video. La Figura 1.12 m ostra u n a fotografìa del chip del Pentium 4; le sue dim ensioni reali (circa 16 x 13,5 m m ) ne fanno un chip particolarm ente grande. Intel, oltre alla linea principale di C P U p er co m p u ter desktop, ha p rodotto varianti di alcuni processori Pentium dedicate a m ercati specifici. N el 1998 ha in tro d o tto una nuova linea di prod o tti chiam ata Celeron, in sostanza una versione più econom ica e con presta zioni rid o tte del P entium II, pensata per i P C di fàscia bassa. D ato che f architettura del C eleron è la stessa del Pentium II, n o n verrà tra tta ta nel corso del libro. N el giugno del 1998 Intel ha in tro d o tto anche u n a versione speciale del Pentium II dedicata al m ercato profes sionale. Q u esto processore, chiam ato Xeon, aveva una cache più grande, un bus più veloce e u n m iglior su p p o rto m ultiprocessore; a p arte questi m iglioram enti si trattava d i u n n o r m ale Pentium II, q u in d i neanch’esso verrà trattato specificatam ente. A nche del Pentium ITI è stata p ro d o tta una versione X eon.
1.4
Figura 1.12
Esempi di famiglie di computer
39
II chip Pentium 4. La fotografia è di proprietà di Intel Coorporation (copyright 2003) e pubblicata con autorizzazione.
N el novem bre del 2 0 0 0 Intel h a rilasciato il P entium 4, u n processore capace di eseguire gli stessi program m i del Pentium III e di X eon, m a con u n a progettazione interna com pietam ente nuova. La versione a 3.06 G H z ha in tro d o tto l’hyperthreading, un argom ento che affronterem o nel C apitolo 8 . N el 2 0 0 3 Intel ha messo in com m ercio il P entium M (M per M obile), progettato per i co m p u ter portatili. Q u esto chip faceva p arte dell’architettura C entrino, i cui obiettivi erano la riduzione del consum o energetico p e t prolungare la durata delle batterie, la produzione di co m p u ter più piccoli e leggeri e la predisposizione alla connessione di rete senza fili se condo lo standard IEEE 802.11 (W iFi). Intel intende introdurre nel prossim o futuro nuovi chip dedicati ad altri cam pi specifici com e, per esem pio, gli apparecchi per l’in tratten im en to e i portatili con connessione IE E E 8 0 2 .1 6 (W iM ax). T utti i processori Intel sono retrocom patibili con i loro predecessori fino all’8086. In altre parole un Pentium 4 p uò eseguire program m i dell’8086 senza alcuna m odifica. Per Intel questa co m patibilità è sem pre stata u n requisito di progettazione, al fine di n o n far perdere agli uten ti i loro investim enti in software. Il Pentium 4 e però tre ordini di grandezza più com plesso dell’8086 ed è q u in d i naturale che possa fare m olte cose in più. L’aggiunta gra duale di tu tte queste estensioni h a p o rtato a un’architettura che non è così elegante com e quella che si otterrebbe d an d o a qualcuno 42 m ilioni di transistor e il com pito di proget tarla ex novo.
40
Capitolo 1
Introduzione
Anno d’mrroduitooe
Figura 1.13
La legge di Moore per i chip della CPU (Intel),
È interessante notare che la legge di M oore, sebbene sia stata a lungo associata al n u m ero di b it di m em oria, risulta valida anche per i chip della C P U . Il grafico nella Figura 1.13 rap presenta in scala sem i-logaritm ica il nu m ero di transìstor di u n chip rispetto alla sua data di apparizione e m ostra che la legge di M oore viene rispettata anche in base a questi dati. A nche se con ogni probabilità la legge di M oore continuerà a essere valida per alcuni anni a venire, com inciano a profilarsi delle nuvole all'orizzonte per via dei problem i legati alla dissipazione del calore. L’uso di transistor più piccoli perm ette di raggiungere frequenze più alte, m a allo stesso tem po richiede una tensione più elevata. L’energia consum ata e il ca lore dissipato sono proporzionali al q u ad rato della tensione, ragion per cui raggiungere ve locità più elevate significa avere p iù calore da sm altire. U n processore P entium 4 a 3,6 G H z co nsum a 1 I 5 W, il che significa che diventa caldo all’incirca q u a n to una lam padina da 100 W. A um entare la frequenza di clock peggiora il problem a. N e l n o v em b re del 2 0 0 4 In te l h a d o v u to rinunciare al P en tiu m 4 a 4 G H z a causa dei p roblem i d ip e n d e n ti dalla dissipazione del calore. L’uso di ventole di grandi dim ensioni p u ò aiutare, m a il loro ru m o re infastidisce gli u ten ti e il raffreddam ento ad acqua, usato nei m ain fram e di grandi d im en sio n i, n o n è u n ’opzione a ttu a lm e n te praticabile per i de sk to p (e an co r m eno per quelli p o rtatili). Per q u esto m otivo la finora inarrestabile m arcia delle velocità di clock p o treb b e essere te m p o ran eam en te arrestata, alm eno finché gli in gegneri d i In tel n on escogiteranno u n m o d o per liberarsi efficientem ente del calore gene rato. I futuri piani di Intel prevedono d i collocare d u e C P U su un singolo chip e di u ti lizzare una grande cache condivisa. Per via della relazione tra tensione e frequenza di clock, du e C P U sullo stesso chip co n su m an o m o lta m eno potenza di u n a sola C P U con velo cità d o p p ia. N e consegue che in fu tu ro il g u adagno fo rn ito dalla legge di M oore potrebbe essere via via sfru tta to per inserire nel ch ip cache sem pre più grandi, p iu tto sto che per rag
1.4
Esempi di famiglie di computer
41
giungere velocità di clock sem pre p iù elevate (dato che la m em o ria n o n con su m a m olta potenza).
1.4.2
Introduzione all'UltraSPARC III
Negli anni '70 U N IX era diffuso nelle università m a, dato che non era usato nei personal com puter, i suoi appassionati erano costretti a usare m in ico m p u ter a condivisione di tem po (spesso sovraccaricati) com e i P D P -1 1 e i VAX. N el 1981 A ndy B echtolsheim , u n o studente tedesco laureatosi a Standford, stanco di doversi recare fino al centro com puter per poter utilizzare U N IX , decise di risolvere il p ro b lem a costruendo da sé una w orkstation U N IX m ediante parti facilm ente reperibili nei negozi. C hiam ò questa m acchina S U N -1 (Stanford
University Network). Bechtolsheim attrasse ben presto l’attenzione di V inod Khosla, un ventisettenne indiano il cui ardente desiderio era andare in pensione, da m ilionario, alla giovane età di 30 anni. Khosla convinse Bechtolsheim a fondare u n a società per costruire e vendere le w orkstation Sun. Khosla assunse q uindi un altro stu d en te laureatosi a Standford, S cott M cNealy, per gui dare la produzione. Per scrivere il software venne incaricato invece Bill Joy, il principale svi luppatore di Berkley U N IX . Nel 1982 i q u attro fondarono la Sun M icrosystems. Il prim o p ro d o tto d i Sun, il co m p u ter Sun-1, era basato su u n a C P U M otorola 68020 e fu u n istantaneo successo; allo stesso m odo lo furono le m acchine che lo seguirono, i co m p u ter S un -2 e Sun-3, aneli essi equipaggiati da C P U M otorola. D iversam ente dagli al tri personal co m p u ter dell’epoca, queste m acchine avevano una potenza decisam ente mag giore (da qui il term in e “w orkstation”) ed erano progettate fin dall’inizio per p o te r funzio nare in rete. C iascuna w orkstation Sun era d o tata di una connessione E thernet e di software T C P /IP p er la connessione ad A RPA N ET, il precursore di Internet. N el 1987 Sun, che orm ai rivendeva ogni anno sistem i per u n valore di mezzo m iliardo di dollari, decise di progettare u n a p ropria C P U , basata su un nuovo rivoluzionario progetto in corso nel cam pus di Berkeley della U niversity o f C alifornia (il R ISC II). Q uesta C P U , chiam ata SPARC {Scalarle Processor ARChitecture, “processore ad architettura scalabile”), costituì la base della w orkstation Sun-4. In breve tem po tu tti i pro d o tti di Sun usarono la C P U SPARC. D iversam ente dalle altre società di co m p u ter Sun decise di non produrre da sola le C P U SPARC, m a diede a diversi p ro d u tto ri di sem iconduttori la licenza di produrle, sperando che la concorrenza avrebbe fatto crescerete prestazioni e d im in u ire i prezzi. Q uesti p ro d u t tori realizzarono u n a serie di diversi processori, basati su tecnologie differenti, funzionanti a diverse frequenze di clock e a vari prezzi. A lcuni di questi chip furono il M icroSPA RC, l’H yperSPA RC , il SuperSPARC e il TurboSPA R C. Pur distinguendosi in qualche aspetto se condario, tu tti erano com patibili a livello bin ario e potevano eseguire gli stessi program m i uten te senza alcuna m odifica. Sun h a sem pre desiderato che SPA RC restasse un’a rc h itettu ra aperta, con m olti for n ito ri d i c o m p o n e n ti e di sistem i, p er p o te r creare un m ercato che riuscisse a com petere in un m o n d o dei personal c o m p u te r già d o m in a to dai sistem i basati su C P U Intel. Al fine di conq u istare la fiducia di quelle società che, p u r essendo interessate a SPA RC, erano re stie a in v estire in u n p r o d o tto c o n tro lla to d a u n c o n c o rre n te , SPA R C creò SPA RC In te rn a tio n a l, un consorzio di in d u strie per gestire lo sviluppo delle nuove versioni del l’a rch itettu ra. Per q uesta ragione è im p o rta n te distinguere tra l’a rch ite ttu ra SPARC, che
42
Capitolo 1
Introduzione
è u n a specifica dell’insiem e d istruzioni e delle funzionalità visibili al p ro g ram m ato re, e u n a sua p articolare im plem entazione. In q u esto libro studierem o sia la generica arch itet tu ra SPA RC sia, nel corso dei C ap ito li 3 e 4 dedicati ai ch ip delle C P U , u n o specifico processore SPA RC usato nelle w o rk statio n Sun. La p rim a m acchina SPARC era interam ente a 32 bit e funzionava a 36 M H z. La C P U , chiam ata IU (Integer Unit, “u n ità di elaborazione intera”), era sem plice e ben progettata, con solam ente 55 istruzioni basate su 3 form ati principali. U n’u n ità in virgola m obile aggiun geva 14 ulteriori istruzioni. Q uesta storia p u ò essere contrapposta a quella della linea di pro cessori Intel, che inizialm ente furono a 8 e 16 bit (8088, 8086, 80286) e infine, con l’80386, d iventarono processori a 32 bit. N el 1995 lo sviluppo della Version 9 dell’architettura SPARC rappresentò la prim a rot tu ra di SPARC con il passato. Si trattava di un’architettura interam ente a 64 bit, con indi rizzi e registri a 6 4 bit. La p rim a w orkstation Sun a im plem entare la V 9 (Version 9) fu l’UltraSPARC I che apparve nel 1995 (Trem blay e O ’C onnor, 1996). N o n o stan te fosse una m acchina a 64 b it era com pletam ente com patibile a livello binario con le precedenti m ac chine SPARC a 3 2 bit. L’U ltraS P A R C era stata pensata p er superare nuovi confini. M en tre le m acchine pre ced en ti eran o p ro g ettate per gestire dati alfanum erici ed eseguire program m i per il tra t ta m e n to testi e fogli d i calcolo, l’U ltraS PA R C era invece pro g ettata fin dall’inizio per ge stire im m ag in i, au d io , video e d ati m u ltim ediali. AI di là dell’a rc h ite ttu ra a 6 4 b it, una delle altre innovazioni fu rappresen tata da 23 nuove-istruzioni, com prese alcune per co m p attare e sco m p attare pixel d a parole di 6 4 bit, p e r ru o tare e ridim ensionare im m agini, p er spostare blocchi e p er co m p rim ere e d eco m prim ere video in tem p o reale. Q u este istru zioni, chiam ate VIS ( Visual Instruction Set, “insiem e d istruzioni m u ltim ed iali”), erano fi nalizzate a fornire funzionalità m ultim ed iali generiche, analogam ente alle istruzioni M M X di Intel. L’U ltraSPA R C era destinato ad applicazioni professionali, com e i grandi server W eb m ultiprocessori costituiti da dozzine d i C P U e m em orie fisiche fino a 8 T b y te = IO 12 byte. T uttavia esistevano versioni più piccole utilizzabili per i co m p u ter portatili. I successori di q u esto c o m p u te r furono gli U ltraSPA R C II, III e IV. La differenza p rin cip ale fra questi m odelli era la frequenza del clock, anche se a ogni nuova versione ven n ero c o m u n q u e ag g iu n te cara n e ristich e innovative. N ella m aggior parte del libro, q u a n d o tra tte re m o l’a rch itettu ra SPA RC, utilizzerem o p rin cip alm en te com e esem pio la C P U V9 U ltraSPA R C III a 6 4 bit. L’U ltraSPA R C IV è essenzialm ente un sistem a biprocessore in cui d u e U ltraSPA R C III sono collocate sullo stesso chip e co n d iv id o n o la stessa m em oria. T ratterem o questo processore nel C ap ito lo 8 q u a n d o affronterem o i sistem i m ultiprocessore.
1.4.3
Introduzione all'8051
Il terzo esem pio che verrà utilizzato è m olto differente rispetto ai precedenti (usati nei personal c o m p u ter e nei server). Si tratta dell’8051, un processore che viene im piegato nei sistem i integrati. La storia dell’8051 com inciò nel 1976, q u an d o il processore 8 0 8 0 a 8 bit era già sul m ercato da circa d u e anni. I costruttori di apparecchi elettronici stavano co m in ciando a integrare l’8080 nei loro dispositivi, m a per costruire u n sistem a com pleto avevano bisogno di u n chip co n tenente la C P U 8080, di un o o più chip di m em oria e di u n o o più
1.4
Esempi di famiglie di computer
43
chip p er l’I/O . Il costo di alm eno tre chip e delle loro interconnessioni era rilevante e per ciò l’integrazione di co m p u ter rimase lim itata a prodotti piu tto sto grandi e costosi. Per ri durre i costi m olti p ro d u tto ri chiesero a Intel di integrare l'intero c o m p u ter (C P U , m em o ria e I/O ) all'in tern o d i u n solo chip. La risposta di Intel ai suoi clienti fu la produzione del chip 8748, un m icrocontrollore da 17.000 transistor co n ten en te una C P U sim ile all’8080, 1 KB di m em oria di sola lettura, 64 byte di m em oria di lettu ra e scrittura p er le variabili, un tim er a 8 bit e 27 linee di I/O per gestire in terru tto ri, pulsanti e luci. Pur essendo m olto essenziale, il chip fu un successo com m erciale che p o rtò Intel a rilasciare nel 1980 l’8051. Q u esto nuovo chip conteneva 6 0 .0 0 0 transistor, u n a C P U m olto più veloce, 4 KB di m em oria di sola lettura, 64 byte di m em oria di lettura e scrittura, 32 lince di I /O , una porta seriale e due tim er a 16 bit. Ben presto fu seguito da altri m em bri di quella che Intel chiam ò la famiglia MCS-51 (m ostrata nella Figura 1.14). T utti questi chip utilizzavano una m em oria di sola lettura per il program m a oltre a una piccola q u an tità di m em oria RAM di lettura e scrittura, per i dati. Nel caso dell’8031 e dell’8032 la m em oria p er il program m a era esterna, perm ettendo, se necessario, di usare più di 8 KB. N el C ap ito lo 3 studierem o le ROM (Read Only Memory, “m em oria di sola lettura”) e le EPROM (Erasable Programmable ROM, “R O M cancellabile e program m abile"). Per il m o m en to è sufficiente sapere che l’8 0 5 1 e T8052 sono m icrocontrollori su sin golo chip utilizzati in p ro d o n i attu alm en te in vendita. C iascun lo tto di m icrocontrollori è p ro d o tto appositam ente per il cliente (per esem pio un costruttore di elettrodom estici) e contiene il program m a fornito da quest’ultim o. Per p rogram m are il clien te necessita tu tta v ia di un sistem a di sviluppo, ed è qui che en tra n o in gioco l’8751 e l’87 5 2 . S ono m o lto più costosi dell’8051 e dell’8 0 5 2 , m a pos sono essere prog ram m ati d ire tta m e n te dal cliente per perm ettergli di testare il software. Se viene in d iv id u ato u n b u g è possibile cancellare la m em o ria dell’8751 o dell’8752 espo n en d o il ch ip a u n a luce ultravioletta, così da p o ter successivam ente m em orizzare al loro in te rn o un nuovo pro g ram m a. Q u a n d o lo sviluppo del softw are è te rm in a to , pu ò essere consegnato al p ro d u tto re del ch ip , che p u ò così realizzare versioni dell’8051 o dell’8052 a d atta te al codice. Dal p u n to di vista dell’arch itettu ra, dell’interfaccia e della program m azione tu tti i m em bri della famiglia M C S-51 sono m olto simili. Per sem plicità ci riferiremo principalm ente all’8051, sottolineando le differenze conigli altri chip solo q u an d o sarà necessario.
Chip
Memoria per il programma
8031
0 KB
tipo di memoria
RAM
Numero di timer
Numero di interrupl
128
2
5
8051
4 KB
ROM
128
2
5
8751
8 KB
EPROM
128
2
5
8032
0 KB
256
3
6
8052
8 KB
ROM
256
3
6
8751
8 KB
EPROM
256
3
6
Figura 1.14
Membri della famiglia MCS-51.
44
Capitolo 1
Introduzione
A d alcuni sem brerà strano utilizzare com e esem pio un chip a 8 bit che ha più di 20 anni di età, m a vi sono alcune buone ragioni per farlo. Il num ero di m icrocontrollori ven d u ti ogni an n o au m en ta rapidam ente ed è oggi d i circa 8 miliardi; un valore che è vari o r dini d i grandezza superiore rispetto al num ero di Pentium venduti annualm ente. Soltanto nel 2001 il n u m ero di m icrocontrollori a 8 b it ha superato il volum e di vendita dei m icrocontrollori a 4 bit. A ttualm ente i m icrocontrollori a 8 bit vendono più di tu tti gli altri messi insiem e e la fam iglia M C S-51 è la fam iglia p iù popolare a 8 bit. D a ta la crescente im p o r tanza dei sistem i integrati, ch iu n q u e studi le architetture dei com puter dovrebbe avere fa m iliarità con i chip usati al loro intern o e l’8051 è uno dei più diffusi. V i sono varie ragioni alla base del successo d e ll'8 0 5 1 : il prezzo è la p rim a e principale. A seconda del num ero di u n ità ordinate, un 8051 può essere o tte n u to per 10 o 15 cente sim i al chip, forse m eno nel caso di grandi volum i. Al contrario, un m icrocontrollore a 32 b it costa generalm ente 30 volte di più, m entre u n o a 16 b it ha un prezzo p iù o m eno in term edio. N el caso di pro d o tti venduti a m eno di 50 euro su m ercati com petitivi, tagliare u n paio d i euro dai costi di produzione p uò tradursi in una differenza significativa nel prezzo al dettaglio e nelle vendite. La ragione principale p er cui l’8051 è talm ente diffuso è sem plicem ente che è m olto econom ico. La seconda ragione è che oltre mezza dozzina di società p ro ducono i chip 8051 sotto la licenza di Intel. I loro p ro d o tti im piegano diverse tecnologie di produzione e le loro ve locità variano lungo un am pio spettro, dagli originari 12 M H z fino a 100 M H z. Q uesta com petizione tiene bassi i prezzi e fa si che i num erosi d ie n ti siano m olto più soddisfatti, dato che n o n devono dipendere da u n unico fornitore. La terza ragione è che T8051 è stato in com m ercio per così tanto tem po che vi è una vasta q u an tità di software disponibile, tra cui assemblatori, com pilatori per C e altri linguaggi, fibre rie di tu tti i tipi, debugger, sim ulatori, software per effettuare test e m olto altro. Esistono sul m ercato anche m olti com pleti sistemi di sviluppo, che accelerano la creazione di hardw are e software integrati. Infine è facile trovare personale qualificato, dato che un gran num ero di program m atori e ingegneri elettronici h a fam iliarità con l'8051. La popolarità si autoalim enta. Grazie al suo impiego m olto diffuso i ricercatori interes sati ai sistemi integrati spesso scelgono F 8051 com e loro principale oggetto di studio, per esem pio per testare nuove tecnologie efficienti sotto il profilo energetico (M artin et al., 2003) o per studiare la tolleranza ai guasti (Lim a et al., 2002). In In te rn e t esiste u n a gran q u a n tità d ’inform azioni suli’8051 e un b u o n p u n to di p artenza p u ò essere il sito www.8051.c0 m . In oltre ancora oggi vi sono persone che con tin u a n o a scrivere nuovi libri su questo processore (Ayala, 2004; C alcutt et al., 2004; M acKenzie et al., 2005; M azidi et al., 2005).
1.5
1.5
Unità metriche
45
Unità metriche
Per evitare ogni tip o di confusione, vale la pena precisare che in questo libro, com e di so lito avviene nell’info rm atica, si usano le u n ità m etriche e n o n le tradizionali u n ità di m i sura inglesi. N ella Figura 1.15 sono elencati i principali prefissi m etrici. D i solito sono abbreviati utilizzando le loro lettere iniziali e si usano lettere m aiuscole per i m ultipli, com e KB, M B, etc., e m inuscole per i sottom ultipli. Q u in d i, per esem pio, una linea di com unicazione a 1 M b p s trasm ette IO6 bit/s e u n clock a 100 ps ha un de ogni IO'10 secondi. D ato che sia milli sia micro iniziano con la lettera “m” si utilizza “m ” per m illi e “p ” (la lettera greca m u) per micro. O cco rre in o ltre sottolineare che, nella pratica com une, queste u n ità h a n n o u n si gnificato leggerm ente diverso q u a n d o vengono utilizzate com e m isure della d im ensione di m em orie, dischi, file e database. In questi casi, dato che le dim en sio n i delle m em orie so n o sem pre p o te n z e d i d u e , K assum e il significato di 2 10 cioè 1024 invece che di IO3 = 1000. Q u in d i u n a m em oria d a 1 KB co n tiene 1024 e no n 1000 byte. A nalogam ente un a m em o ria da 1 M B co n tien e 2 20 = 1 .0 4 8 .5 7 6 byte, una m em oria da 1 G B ne co ntiene 2 30 = 1 .0 7 3 .7 4 1 .8 2 4 , e un database da 1 T b y te co n tien e 2 40 = 1 .0 9 9 .5 1 1 .6 2 7 .7 7 6 byte. T uttavia, u n a linea di co m u n icazio n e a 1 K bps p u ò trasm ettere 1000 b it al secondo e u n a LA N a 10 M b p s funziona a 1 0 .0 0 0 .0 0 0 b it/s, d ato che questi tassi non sono potenze di du e. S fo rtu n atam en te m o lti te n d o n o a co n fo n dere questi d u e sistem i, specialm ente per le dim en sio n i dei dischi. Per elim inare ogni am biguità in questo libro userem o i sim boli KB, M B , G B , e T b y te per indicare risp ettiv am en te 2 10, 2 20, 2 30 e 2*° byte e i sim boli Kbps, M bps, G b p s e T b p s per indicare risp ettiv am ente IO3, IO6, IO9 e IO12 bit/s.
Esp.
Valore esplicito
Prefisso
Esp.
Valore esplicito
io -3
0,001
milli
IO1
1.000
itr 6
0,000001
micro
IO6
io-*
0,000000001
nano
10’
io-,J
0,000000000001
pico
IO 12
io-'*
0,000000000000001
femlp
10”
IO-'8
0,0000000000000000001
atto
10'*
1.000.000.000.000.000.000
io-21
0,0000000000000000000001
zepto
IO21
1.000.000.000.000.000.000.000
Zetta
10-”
0,0000000000000000000000001
yocto
10”
1.000.000.000.000.000.000.000.000
Yotta
Figura 1.15
Principali prefissi metrici.
1.000.000
Prefìsso Kilo * Mega
1.000 000.000
Giga
1.000.000.000.000
Tera
1.000.000.000.000.000
Peta Exa
46
Capitolo 1
Introduzione
1.6 O rganizzazione del libro Q u esto libro tratta dei com puter multilivello (che com prendono praticam ente tu tti i com puter m oderni) e del m o d o in cui sono organizzati. V erranno esam inati in notevole dettaglio q u a t tro livelli: il livello logico digitale, il livello di m icroarchitettura, il livello ISA e il livello m ac ch in a del sistem a operativo. A lcuni degli aspetti che esam inerem o saranno la progettazione com plessiva del livello (e il m otivo per cui è stato progettato in quel m odo), i tipi d ’istru zioni e dati disponibili, l’organizzazione e l’indirizzo m ento della m em oria c il m etodo tra m ite il quale il livello è stato im plem entato. Lo studio di questi argom enti, e altri simili, è chiam ato organizzazione, o architettura, del com puter. C i preoccuperem o principalm ente dei co nceni p iuttosto che dei dettagli e degli aspetti m atem atici. Per questa ragione alcuni degli esempi saranno fortem ente sem plificati, al fine di porre l’enfasi sulle idee centrali. Nel corso del libro userem o il Pentium 4, l’U ltraSPA R C III e T8051 com e esempi pra tici, in m odo da far capire com e i principi presentati nel testo possono essere, e sono, messi in pratica nella realtà. Q uesti tre esem pi sono stati scelti in base a m olteplici ragioni. In prim o luogo sono tu tti am piam ente utilizzati e con ogni probabilità il lettore pu ò avere accesso ad alm eno u n o d i loro. In secondo luogo, ciascuno h a u n a sua pro p ria e d eterm inata architet tura, il che p o n e le basi per effettuare confronti e incoraggia u n approccio basato su dom ande com e: “Q uali sono le alternative?". Spesso i libri che trattano di una sola m acchina lasciano al lettore la sensazione che gli sia stata svelata “l’unica e corretta progettazione di un com puter”; ciò è assurdo alla luce dei m o lti com prom essi e delle decisioni arbitrarie che un progettista è obbligato a com piere. Si incoraggia il lettore a studiare questi com puter, ed eventualm ente altri, con u n occhio critico; lo si spinge a cercare di capire il m otivo per cui le cose sono in u n d eterm in ato m o d o , oltre che a chiedersi com e sarebbero p o tu te essere diversam ente, in vece di accettarle passivamente. O cco rre chiarire fin d all’inizio che questo libro non spiega com e program m are il P entium 4, l’U ltraSPA RC III o I’8051. Q u a n d o sarà necessario, queste m acchine saranno usate a scopo dim ostrativo, senza alcuna pretesa di essere com pleti. I lettori interessati a un’in tro d u zio n e esauriente a una d i queste m acchine dovrebbero consultare le pubblicazioni specifiche. Il C apitolo 2 è un’introduzione ai co m p o n en ti base dei com puter: processori, m em o rie e dispositivi di in p u t/o u tp u t. Si intende dare una panoram ica dell architettura di un si stem a oltre a un’introduzione ai capitoli successivi. I C apitoli da 3 a 6 trattan o individualm ente i livelli m ostrati nella Figura 1.2. La trat tazione sarà effettuata dal basso verso l’alto, dato che le m acchine sono state tradizionalm ente progettate in questo m odo. La progettazione di u n generico livello è in gran parte determ inata dalle proprietà del livello sottostante e p er questo è difficile capire un livello a m eno di non avere prim a com preso a fondo i precedenti. In oltre sem bra più istruttivo procedere dai livelli più semplici fino a quelli più com plessi, e n o n viceversa. II C ap ito lo 3 riguarda il livello logico digitale, il vero e proprio hardw are della mac china. Si spiega che cosa sono le p o rte logiche e com e possono essere com binate p e r form are circuiti funzionali. Si introduce anche l’algebra booleana, uno stru m en to per l’analisi dei cir cuiti digitali. V engono spiegati inoltre i bus del co m p u ter e in particolare il popolare bus
Problemi
47
PCT. N el capitolo vengono presentati num erosi esempi tratri dal m ondo reale, tra cui i tre casi di stu d io sopracitati. 11 C ap ìto lo 4 in tro d u ce l’arch itettu ra e il controllo del livello di m icroarchitettura. R icorrendo anche a vari esem pi ci si concentrerà sulla funzione principale di questo livello, che consiste nell’interpretare le istruzioni del livello 2 per quello superiore. Il capitolo con tiene anche una trattazione del livello di m icroarchitettura di alcune m acchine reali. Il C ap ito lo 5 esam ina il livello ISA, quello che m olti rivenditori di co m p u te r defini scono com e il linguaggio m acchina. In q uesto capitolo analizzerem o in dettaglio le tre mac chine d ’esem pio. Il C apitolo 6 si occupa delle istruzioni, dell’organizzazione della m em oria e dei mec canism i di controllo presenti nel livello m acchina del sistema operativo. Gli esem pi utiliz zati sono W indow s XP (diffuso sui sistem i server di fascia alta basati su Pentium 4) e U N IX , usato sull’U ltraSPA R C III. Il C apitolo 7 riguarda il livello del linguaggio assemblativo e tratta sia del linguaggio sia del processo di assem blaggio. V iene inoltre in tro d o tto l’argom ento del collegam ento (linking). II Capitolo 8 tratta dei com puter paralleli, un argom ento la cui im portanza al giorno d’oggi è sem pre più grande. Alcuni di questi com puter hanno più C P U che condividono una m e m oria com une. Altri invece sono costituiti da varie C PU , m a senza condivisìone di memoria. Alcuni sono supercom puter, altri sono sistemi su singolo chip, m entre altri ancora sono COW . Il C apitolo 9 contiene una lista com m entata e organizzata per argom enti di letture con sigliate, oltre a un elenco alfabetico d i riferim enti bibliografici. È il capitolo più im p ortante di tu tto il libro. Lo si usi.
Problemi 1.
Si spieghino con parole proprie i seguenti termini: a. traduttore (compilatore) b. interprete c. macchina virtuale.
2. 3.
Qual è la differenza tra interpretazione e traduzione? wl Ha significato che un compilatore generi output per il livello di microarchitetmra invece che per il livello ISA? Si analizzino i prò e i contro di tale ipotesi.
4.
È possibile immaginare un computer multilivello in cui il livello dei dispositivi e i livelli logico digitali non siano i livelli più bassi? Si motivi la risposta.
5.
Si consideri un computer in cui tutti i livelli siano diversi. Ciascun livello possiede istruzioni che sono m volte più potenti di quelle del livello sottostante; cioè un’istruzione del livello r può compiere il lavoro di m istruzioni del livello r - 1. Se un programma del livello 1 richiede k se condi per essere eseguito, quanto tempo impiegheranno gli equivalenti programmi dei livelli 2, 3 e 4, assumendo che siano necessarie n istruzioni del livello rper interpretare una singola istru zione del livello r + I?
6.
Alcune istruzioni del livello macchina del sistema operativo sono identiche alle istruzioni del linguaggio ISA. Queste istruzioni sono eseguite direttamente dal microprogramma invece che dal sistema operativo. Alla luce della risposta data al problema precedente, perché questo avviene?
48
7.
Capitolo I
Introduzione
Si consideri un computer con interpreti identici ai livelli 1,2 e 3. Un interprete impiega n istru zioni per prelevare, esaminare ed eseguire un'istruzione. Se un'istruzione del livello I richiede k nanosecondi per essere eseguita, quanto tempp impiega un’istruzione ai livelli 2, 3 e 4?
8. In che senso l’hardware e il software sono equivalenti? E in che senso non lo sono? 9.
La difference erigine di Babbage aveva un unico programma, fisso, che non poteva essere modi ficato. È essenzialmente la stessa cosa di un moderno CD-ROM il cui contenuto non può es sere cambiato? Si motivi la risposta.
10.
Una delle conseguenze dell’idea di von Neumann di memorizzare i programmi in memoria è che anch’essi possono essere modificati, esattamente come i dati. È possibile immaginare un esem pio in cui questa funzione potrebbe essere utile? (Suggerimento: si pensi a operazioni aritmeti che sugli array).
11.
11 rapporto tra le prestazioni del 360 model 75 e del 360 model 30 era di 50 volte, mentre i! ciclo di clock era solo 5 volte più veloce. Come si spiega questa differenza?
12. Nella Figura 1.5 e nella Figura 1.6 sono mostrati due elementari progetti di un sistema. Si de scriva come potrebbero avvenire gli input e output in ciascuno di loro. Quale dei due può po tenzialmente fornire migliori prestazioni generali del sistema? 13. Si supponga che ogni giorno ciascuno dei 300 milioni di cittadini americani consumi due con fezioni di un certo articolo a cui è associata un’etichetta RFID. Quante etichette RFID devono essere prodotte annualmente per soddisfare la domanda? Qual è il costo totale delle etichette, se ognuna di loro costa un pcnny? Considerando l'ammontare del Prodotto Interno Lordo que sta quantità di denaro potrebbe oppure no essere un ostacolo all'impiego di etichette RFID per ogni confezione messa in vendita? 14. Si citino tre elettrodomestici che potrebbero funzionare mediante una CPU integrata. 15 . A un certo momento della storia un transìstor su un microprocessore arrivò ad avere un diame tro di 1 dm. Secondo la legge di Moore, che dimensioni avrebbe assunto nell’anno successivo? 16. La diatriba legale su chi ha inventato il computer fu risolta neU’aprile del 1973 dal giudice Earl Larson; egli si occupò della causa legale di violazione di brevetto intentata dalla Sperry Rand Corporation, società che aveva comprato i brevetti dell’elaboratore ENIAC. La posizione della Sperry Rand era che chiunque avesse prodotto un computer avrebbe dovuto pagarle i diritti, in quanto proprietaria dei brevetti chiave. Il caso arrivò in giudizio nel giugno 1971 e furono depositati più di 30.000 documenti. La trascrizione degli atri superò le 20.000 pagine. Utilizzando le vaste informazioni disponibili su Internet si studi il caso più approfonditamente e si scriva una relazione sui suoi aspetti tecnici. Che cosa sosteneva il brevetto di Eckert e Mauchley e per ché il giudice ritenne che il loro sistema era basato sul precedente lavoro di Atanasoff? 17. Si scelgano le tre persone che si ritiene abbiano avuto la maggiore influenza nella creazione dell’hardware moderno; si scriva quindi una breve relazione che descriva il loro contributo e che motivi la scelta effettuata. 18. Si ripeta l’esercizio precedente nel caso del software.
Capitolo 2
Organizzazione dei sistemi di calcolo
U n calcolatore digitale è un sistem a in cui processori, m em orie e dispositivi periferici sono connessi tra loro. Q u esto capitolo fornisce un’introduzione a questi tre co m p o n en ti e alle loro interconnessioni, servendo da base per l’analisi dettagliata dei singoli livelli che verrà data nei cinque capitoli successivi. D ato che i processori, le m em orie e le periferiche sono concetti chiave che rito rn eran n o d u ran te la trattazione di ciascun livello, iniziam o lo studio deH’arch itettu ra degli elaboratori esam inandoli uno alla volta.
2.1
Processori
La Figura 2.1 m ostra l’organizzazione di u n sem plice calcolatore bus-oriented. La CPU ( Central Processing Unit, “u n ità centrale d i calcolo”) è il “cervello” del co m p u ter e la sua fun zione è quella di eseguire i program m i co n ten u ti nella m em oria principale prelevando le loro istruzioni, esam inandole ed eseguendole una dopo l’altra. I co m p o n en ti sono connessi fra loro m ediante un bus, cioè u n insiem e di cavi paralleli sui quali vengono trasm essi.indirizzi, dati e segnali di controllo. I bus possono essere esterni alla C P U , per connetterla alla m e m oria e ai dispositivi d i I /O , o p p u re interni, com e vedrem o tra poco. La C P U è com posta d a p arti d istinte, tra cui l’u n ità di controllo e l’u n ità aritm etico logica. La prim a si occupa di prelevare le istruzioni dalla m em oria principale e di determ i narne il tipo, m entre la seconda esegue le operazioni, com e l’addizione e l’A N D , necessarie per portare a term ine l’esecuzione delle istruzioni. La C P U contiene anche u n a piccola m em oria ad alta velocità, utilizzata per m em oriz zare i risultati tem poranei e alcune inform azioni di controllo. Q u esta m em oria è costituita da u n certo nu m ero di registri, ciascuno dei quali ha una funzione e una dim ensione predefinite. O g n u n o di loro p u ò contenere un num ero, il cui valore può variare fino a un mas sim o che dipende dalla dim ensione del registro, che di solito è uguale per tu tti i registri. D ato che sono in tern i alla C P U possono essere letti e scritti a velocità elevate. Il registro più im p o rtan te è il contatore d’istruzioni, o Program Counter (PC), che pu n ta alla successiva istruzione che dovrà essere prelevata per l’esecuzione (il term ine “con tatore d ’istruzioni”, p u r essendo universalm ente accettato, è in qualche m odo am biguo, dato che tale registro n on effettua alcun conteggio). U n altro registro particolarm ente im portante è il registro istruzione corrente, o Instruction Register (IR), conten en te l’istruzione che si
50
Capitolo 2
Organizzazione dei sistemi di calcolo
Unità centrale di calcolo (CPU)
Unità di controllo
Unità aritmetico-logica (ALU)
Periferiche di I/O _____________A _____________
Registri
□
n
□
□
Memoria centrale
Disco
Stampante
--------------------------------------------------------------------------------------------
Figura 2.1
Bus
Organizzazione di un semplice calcolatore con una CPU e due periferiche di I/O.
trova in fase di esecuzione (la m aggior parte dei calcolatori possiede m olti altri registri, al cuni di uso generale, m entre altri sono preposti a un uso specifico).
2.1.1
Organizzazione della CPU
La Figura 2 .2 m ostra com ’è organizzata in tern am en te una parte, ch iam ata percorso dati (data path), di un a tipica C P U di von N eu m an n ; essa è com posta dai registri (general m ente da 1 a 32), dalla ALU (Arithmetic Logic Uriit, “un ità aritm etico-logica”) e da alcuni bus che c o n n e tto n o fra loro le diverse p arti. I registri alim entan o du e registri di in p u t della A LU (indicati nella figura con le lettere A e B) che m anten go n o i dati d ’ingresso della ALU m en tre questa è occupata nell’esecuzione di alcune co m putazioni. Il percorso dati riveste una g rand e im p o rtan za in tu tte le m acchine e nel corso del libro lo tratterem o in m odo a p p ro fo n dito . La ALU esegue alcune sem plici operazioni sui suoi in p u t, com e addizioni e so ttra zioni, e genera un risultato che viene m em orizzato in un suo ap posito registro di o u tp u t. Q u e sto valore p u ò essere successivam ente im m agazzinato in uno dei registri della C P U che, volendo, può essere copiato in m em oria in un secondo m o m ento. N o n tu tti i tipi di progettazione prevedono la presenza dei registri A, B e di quello di o u tp u t. N ell’esem pio è illustrata l’addizione. La m aggior parte delle istruzioni pu ò essere divisa in due categorie principali: le istru zioni registro-m em oria e quelle registro-registro. Le istruzioni registro-m em oria perm ettono di prelevare parole di m em oria per portarle all’in tern o dei registri, dove sono utilizzabili, per esem pio, com e in p u t della ALU per effettuare istruzioni successive. (Le “parole” sono le unità di dati che vengono spostate tra la m em oria e i registri; una parola potrebbe essere un in-
2.1
Figura 2.2
Processori
51
Percorso dati di una tipica macchina di von Neumann.
tero. Più avanti nel capitolo analizzerem o l’organizzazione della m em oria.) Altre istruzioni registro-m em oria p erm etto n o invece di copiare i valori dei registri nella m em oria. L’altra classe d istruzioni è quella registro-registro. U na tipica istruzione di questo tipo preleva d u e operandi dai registri, li porta all’interno dei registri di input della ALU, esegue su di loro u n a qualche operazione (per esem pio l’addizione o l’A N D ) e ne m em orizza il ri sultato in u n o dei registri. Il processo che consiste nel portare i due operandi attraverso la ALU e nel m em orizzare il risultato è chiam ato ciclo del percorso dati e rappresenta il cuore della m aggior p arte delle C P U . C o n b u o n a approssim azione si pu ò dire che definisca che cosa sia in grado d i fare u n a m acchina; inoltre più veloce è il ciclo del percorso dati, m ag giore risulta la velocità del calcolatore.
2.1.2
Esecuzione dell'istruzione
La C P U esegue ogni istruzione com piendo una serie di piccoli passi che, in linea generale, possono essere descritti nel seguente m odo: 1. prelevare la successiva istruzione dalla m em oria per portarla nell’IR 2. m odificare il P C p er farlo p u n tare all’istruzione seguente 3 . determ inare il tipo dell’istruzione appena prelevata 4. se l’istruzione usa una parola in m em oria, determ inare dove si trova
Capitolo 2
52
Organizzazione dei sistemi di calcolo
public class Interp { static int PC; static int AC; static int instr; static int instr_type; static int dataJoc; static int data; static boolean run_bit = true;
// il program counter contiene l'indirizzo dell'istruzione successiva // l'accumulatore, un registro per i calcoli aritmetici // un registro d ie contiene l'istruzione corrente // il tipo d'istruzione (opcode) // l'indirizzo del dato, o -1 se non c'è // contiene l'operando corrente // un bit che può essere impostato a 0 per arrestare la macchina
public static void interprenint memoryl |, int starting_address { // Questa procedura interpreta programmi per una semplice macchina le cui istruzioni hanno // un solo operando in memoria. La macchina ha un registro AC (accumulatore), utilizzato per // i calcoli aritmetici. L'istruzione ADD, per esempio, somma un intero memorizzato in memoria al registro A C // L'interprete continua finché il bit di esecuzione non viene impostato a 0 dall'istruzione HALT. // Lo stato di un processo eseguito su questa macchina è costituito dalla memoria, dal // contatore di programma, dal bit di esecuzione e dal registro AC. I parametri di input consistono // nell'immagine della memoria e nell'indirizzo di partenza. PC = starling-address; while (run_bit) ( instr = memorylPCl; PC = PC + 1; instrjyp e = get_instr_type( instr); dataJoc = fincLdatai instr, instr_type); if (dataJoc >= 0) data = memory [dataJoc] execute(instr_type, data);
// preleva l’istruzione successiva e la memorizza in instr // incrementa il program counter //determina il tipo d'istruzione // trova la posizione del dato (-1 se non c'è) // se "dataJoc" vale - 1 , allora non c’è nessun operando // preleva il dato // esegue l'istruzione
1 ) private static int get_instr_type/Vsporgono nella sua direzione com e rilievi sulla superficie altrim enti piatta. D ato che i pit h an n o un’altezza pari a un q u arto della lunghezza d ’onda della luce del laser, la luce riflessa
2.3
Memoria secondaria
91
da u n p it viene sfasata di mezza lunghezza d ’o n d a rispetto alla luce riflessa sulla superfìcie circostante. Il risultato è che le d u e parti interferiscono in m odo distruttivo e restituiscono al fotorilevatore del lettore m eno luce di q u an ta viene riflessa in corrispondenza dei land. In questo m odo il lettore può distinguere u n p it da un land. A nche se l’approccio più sem pli ce p otrebbe sem brare quello di usare un p it per registrare uno 0 e un land per mem orizzare un 1, è più affidabile codificare i valori 1 e 0 com e la presenza o l’assenza di una transizione
pit/lando landJpit. I pit e i land sono scritti in un’unica spirale continua (Figura 2.24) che parte vicino al buco e giunge a una distanza di 32 m m dai bordo esterno dopo aver girato 2 2 .1 18 volte at torn o al disco (circa 6 00 volte per m illim etro). Se tale spirale venisse srotolata coprirebbe una lunghezza di 5.6 Km . Per p o te r riprodurre la m usica a u n a velocità uniform e è necessario che i p it e i land passino sotto la testina a u n a velocità lineare costante. D i conseguenza la velocità angolare del C D deve essere rid o tta in m o d o co n tin u o quando la testina di lettura si sposta dal cen tro del C D verso l’esterno. All’in tern o la velocità angolare è di 530 giri/m in, corrispondente alla velocità lineare desiderata di 120 cm /s; all’esterno, per ottenere la stessa velocità lineare, la rotazione scende a 200 giri/m in . C ’è quindi m olta differenza tra un’unità a velocità li neare costante e un disco m agnetico, che funziona invece a velocità angolare costante. Inoltre la velocità di 530 giri/m in è decisam ente lo n tana da quella della m aggior parte dei dischi m agnetici, com presa tra i 3 6 0 0 e i 7 2 0 0 giri/m in. Nel 1984 Philips e Sony com presero il potenziale dell’uso dei C D per mem orizzare i dati dei calcolatori e pubblicarono così il L ib ro g iallo (Yellow Book) che definiva u n preciso standard per quelli che ora vengono chiam ati C D -R O M (Compact Disc-Read Only Memory). Per co n tin u are a supportare il m ercato dei C D audio, già di grandi dim ensioni, si scelse di definire i C D -R O M con le stesse dim ensioni fisiche dei C D audio, di renderli com patibdi m eccanicam ente e o tticam en te e di produrli utilizzando le stesse m acchine da stam po con iniezione di policarbonato. Q uesta decisione obbligò a utilizzare lenti m otori a velocità va-
Figura 2.24
Struttura di registrazione di Com pact Disc e CD-ROM.
92
Capitolo 2
Organizzazione dei sistemi di calcolo
riabile, m a perm ise allo stesso tem p o di m antenere il costo di produzione di u n C D -R O M ben al di sotto di un dollaro per volum i di m edie dim ensioni. Il Libro giallo si occupò di definire una form attazione per i dati e m igliorò le capaci di correzione degli errori del sistema. C iò fu u n passo fondam entale dato che, anche se gli am anti della musica non si preoccupano di perdere un bit ogni tanto, gli am anti dei com puter ten d o n o invece a essere m olto schizzinosi al riguardo. Il form ato base di u n C D -R O M con siste nel codificare ogni byte in u n sim bolo a 14 bit. C o m e abbiam o già visto, 14 b it sono sufficienti per applicare un codice di H am m in g a un byte, avendo a disposizione ancora 2 bit liberi; in realtà viene utilizzato un sistem a di codifica p iù potente. In fase di lettura la corrispondenza 14/8 è realizzata in hardw are m ediante una tabella di ricerca. Salendo di un livello, un g ruppo di 4 2 sim boli consecutivi form a un tra m e di 588 bit; ciascuno dei quali contiene 192 b it (24 byte) di dati. 1 restand 396 bit sono usati per la cor rezione degli errori e per il controllo. Fino a questo p u n to lo schem a è identico sia per i C D au d io sia per i C D -R O M . Il Libro giallo aggiunge un raggruppam ento di 98 frame in quello che viene chiam a settore del C D -R O M , c o m e m o strato nella Figura 2.25. O gni settore del C D -R O M inizia con un pream bolo di 16 byte, di cui i prim i 12 con ten g o n o la sequenza (esadecimale) OOFFFFFFFFFFFFFFFFFFFFOO, che perm ette al lettore di riconoscere l’inizio di un set tore del C D -R O M . I 3 byte seguenti co ntengono il num ero del settore, necessario dato che la ricerca all’interno dell’unica spirale di d ati di un C D -R O M è m olto più difficile di quella lungo le tracce concentriche di u n disco magneticoT Per effettuare la ricerca il software del lettore calcola in m o d o approssim ato dove andare, sposta la testina in quel p u n to e com in cia q u in d i a cercare u n pream bolo nelle vicinanze, per capire q u an to buona fosse la sua stim a iniziale. L’u tim o byte del pream bolo contiene il modo. Il Libro giallo definisce due m odi. Il M o d o 1 usa la stru ttu ra della Figura 2 .2 5 , con u pream bolo di 16 byte, 2048 byte di dati e un codice di errore di 288 byte (un codice ReedSolom on incrociato e intervallato). Il M o d o 2 com bina i dati e i cam pi E C C in un cam po dati di 2 3 3 6 byte per quelle applicazioni che non richiedono (o non possono perm ettersi di eseguire) la correzione degli errori, com e l’audio e il video. O ccorre notare che per fornire un’affidabilità eccellente vengono usati tre diversi schemi per la correzione degli errori: al l’intern o di u n sim bolo, all in tern o di u n fram e e all’in tern o di un settore del C D -R O M . G li errori singoli sono corretti al livello più basso, gli errori relativi a piccoli flussi di dati sono corretti al livello del fram e e quelli rim anenti sono gestiti dal livello del settore. Il prezzo pagato per questa affidabilità è la richiesta di 98 fram e di 588 bit (7203 byte) per un cam po d ati di 1048 byte, con un’cfficienza del 28% . I lettori di C D -R O M a singola velocità fu nzionano a 75 setto ri/s, che co rrisponde u n a velocità di trasferim en to d ati d i 153.600 byte/s nel M o d o 1 e 175.200 byte/s nel M o do 2. I lettori a d o p p ia velocità sono d u e volte p iù veloci, e lo stesso rag io n am en to vale per quelli a velocità più elevate. U n C D au dio standard ha spazio per 74 m in u ti di m u sica, che, se u sato per i d ati in M o d o 1, fornisce u n a capacità di 6 8 1 .9 8 4 .0 0 0 byte. Q uesta q u a n tità è g eneralm ente rip o rtata com e 6 5 0 M B, d a to che 1 M B è com posto da 2 20 byte (1 .0 4 8 .5 7 6 byte) e n on da 1 .0 0 0 .0 0 0 byte. O ccorre notare che neanche un lettore C D -R O M 32x (4.915.200 byte/s) raggiunge la velocità di u n lettore SCSI-2 di dischi m agnetici a 10 M B/s, anche se m olti lettori C D -R O M usano l’interfaccia SCSI (esistono anche lettori C D -R O M ID E ). Se si pensa che il tem po
2.3
Memoria secondaria
93
Simboli di 14 bit ciascuno 42 simboli formano 1 frame
Preambolo I T
16 byte Figura 2.25
Frame di 588 bit, ognuno contenente 24 byte di dati
98 frame formano 1 settore Dati
ECC
Settore del Modo 1
2048
288
(2352 byte)
Struttura logica dei dati di un CD-ROM.
di ricerca è spesso di alcune centinaia di m illisecondi, appare chiaro che i lettori C D -R O M , nonostan te la loro grande capacità, n o n appartengono alla stessa classe di prestazione dei let tori di dischi m agnetici. N el 1986 Philips stupì nuovam ente con il Libro verde (Green Book), aggiungendo la grafica e u n a caratteristica fondam entale per i C D -R O M m ultim ediali, ovvero (a possibilità di com binare audio, video e dati in uno stesso settore. L’ultim a tessera del puzzle del C D -R O M è il suo file system. Per poter utilizzare lo stesso C D -R O M su calcolatori di tipo differente, fu necessario trovare un accordo sul file system da utilizzare. Per trovare questo accordo i rappresentanti di m olte società di com puter si in co n traro n o a Lake Tahoe sulle H igh Sierras, al confine tra C alifornia e N evada e inventa rono u n file system che chiam arono High Sierra, divenuto in seguito un o Standard In ter nazionale (IS 9660). E com posto da 3 livelli. Il livello 1 usa i nom i dei file fino a un mas sim o di 8 caratteri, eventualm ente seguiti da un’estensione di 3 caratteri (la convenzione di M S -D O S p er i n o m i dei file). 1 no m i dei file possono contenere solo lettere m aiuscole, ci fre e il carattere trattin o basso (underscore). Le directory possono essere annidate fino a una profondità m assima di o tto livelli, m a i loro nom i non possono contenere estensioni. Il li vello 1 richiede che tu tti i file siano contigui, m a ciò no n rappresenta un problem a per un sup p o rto che viene scritto una sola volra. O g n i C D -R O M conform e al livello 1 IS 9660 può essere letto utilizzando M S -D O S , u n calcolatore Apple, un co m p u ter U N IX o un qualsiasi altro calcolatore; per i p ro d u tto ri d i C D -R O M questa proprietà rappresenta un vantaggio notevole. Il livello 2 IS O 9 6 6 0 consente n o m i lunghi fino a 32 caratteri, m entre il livello 3 p erm ette file non contigui. Le estensioni Rock Bridge (il cui nom e deriva, in m odo strava gante, d a quello della città del film Mezzogiorno e mezzo di fuoco di M ei Brooks) perm ette n o m i m o lto lunghi (per U N IX ), U ID , G ID e lin k sim bolici; i C D -R O M n o n conform i al livello 1 n o n sono però leggibili da tu tti i calcolatori.
2.3.8
CD-registrabili
Inizialm en te l’attrezzatura necessaria p er p ro d u rre il m aster di un C D -R O M (o, analo gam ente, u n C D audio) era estrem am en te costosa, m a com ’è solito avvenire nel m o n d o dei co m p u ter, nulla rim an e costoso p er lungo tem po. A p artire da m età degli an n i ’90 i m asterizzatori C D , grandi q u a n to i letto ri C D , divennero una periferica co m u n e v enduta
94
Capitolo 2
Organizzazione dei sistemi di calcolo
nei negozi di co m p u ter. Q u esti dispositivi erano diversi dai dischi m agnetici d ato che i C D -R O M , u n a volta scritti, n on potevano essere cancellati. N o n o stan te questo lim ite si ritagliarono u n o spazio com e su p p o rto sul quale effettuare il backup di hard disk di grandi dim en sio n i; in o ltre perm isero a priv ati o a giovani società di p ro d u rre piccole tiratu re dei propri C D -R O M o di realizzare delle copie m aster da consegnare agli im pianti professiona li ad d etti alla duplicazione d i C D in g ran d i volum i. Q uesti su p p o rti sono conosciuti com e C D -R (C D -R e g istra b ili). Dal p u n to di vista fisico i C D -R sono com posti da un disco di policarbonato di 12 cm simile a quello dei C D -R O M , tranne per il fatto che contengono una scanalatura larga 0,6 m m che serve a guidare il laser nella fase di scrittura. La scanalatura ha un an dam ento si nusoidale di 0,3 m m con u n a frequenza esatta di 22,05 k H z per perm ettere un feedback co n tin u o grazie al quale è possibile m onitorare accuratam ente la velocità di rotazione e, se necessario, m odificarla. I prim i C D -R assomigliavano ai norm ali C D -R O M tran n e per il fatto che la parte alta era dorata invece che argentata; il colore do rato derivava dal fatto che, al posto dcH’allum inio, veniva utilizzato vero oro per lo strato riflettente. Sui C D -R , diver sam ente dai C D argentati sui quali vi sono delle vere scanalature fisiche, le diverse p ro prietà riflettenti dei pit e dei land devono essere sim ulate. C iò è realizzato aggiungendo uno strato di pigm ento tra il policarbonato e il livello riflettente, com e m ostra la Figura 2.26. Vengono usati d u e tipi di pigm enti: la cianina, di colore verde, e la ftalocianina, di colore arancione giallastro; i chim ici possono intavolare interm inabili d ib attiti su quale sia il migliore. Q uesti pigm enti sono simili a quelli usati in fotografia, e ci6 spiega perché Kodak e Fuji siano fra i principali p ro d u tto ri di C D -R . In alcuni casi un o strato di allum inio riflettente sostituisce quello d ’oro. Lo strato di pigm ento, nello stato iniziale, è trasparente e perm ette alla luce del laser di passarvi attraverso e di essere riflessa dallo strato riflettente. Per scrivere sul C D -R la potenza del laser viene portata a un valore alto, tra 8 e 16 mW , Q u an d o il fàscio colpisce una regione del pigm ento, esso lo scalda al p u n to da rom pere un legame chim ico e questo cam biam ento della stru ttu ra m olecolare crea una regione scura. In fase di lettura (a 0,5 m W ) il fotorileva tore vede una differenza tra le regioni scure in cui il pigm ento è stato colpito e le aree tra sparenti dove è ancora intatto. Q u a n d o il disco è letto da un norm ale lettore C D -R O M . o anche d a u n lettore di C D audio, questa differenza è interpretata allo stesso m odo di quella che vi è tra i pit e i land D ato che ogni nuovo tipo di C D vuol vantare il proprio libro colorato, i C D -R eb bero il L ib ro a ra n c io n e (Orange Book), pubblicato nel 1989. Q uesto d o cu m en to definisce i C D -R e anche un nuovo form ato, il C D -R O M XA, che perm ette di scrivere sui C D -R in m odo increm entale: alcuni settori oggi, altri dom ani e altri ancora il mese successivo. Un insiem e di settori scritti in u n a volta è chiam ato tra c c ia del C D -R O M . U no dei prim i utilizzi del C D -R fu il P h o to C D di Kodak. In questo sistema il cliente portava un rullino fotografico e il proprio vecchio P h o to C D dal fotografo e ne usciva con lo stesso P h o to C D contenente, oltre alle vecchie foto, anche quelle nuove. Il nuovo gruppo di foto, creato scanncrizzando i negativi, veniva scritto nel P hotoC D com e una traccia separata del C D -R O M . La scrittura increm entale era una caratteristica necessaria, poiché i C D -R ver gini erano troppo costosi per poterne utilizzare uno nuovo per ogni rullino fotografico. La scrittu ra increm entale p o n e tuttavia nuovi problem i. Prim a del Libro arancione tu tti i C D -R O M avevano un unico V T O C ( Volume Table o f Contents, “indice del disco”) al-
2.3
Memoria secondaria
95
Etichetta stampata
jC
Il
II
Vernice protettiva Strato riflettente ili pigm ento Strato
1,2 mm Sottostrato Direzione dello spostamento ,
Fotorilevatore
1 m
Regione scura nello strato di pigmento ' bruciato dal laser durante la fase di scrittura
di policarbonato ■Lente - Prisma Diodo laser infrarosso
Figura 2.26
Spaccato di un disco CD-R e del laser (non in scala). La struttura di un CD-ROM è simile, fatta eccezione per la mancanza dello strato di pigmento e per la presenza di uno strato di alluminio con pit al posto dello strato riflettente.
l’inizio del disco; u n o schem a che n o n p u ò però funzionare con le scritture increm entali (cioè m ulti-traccia). La soluzione ad o tta ta dal Libro arancione consiste nel dare a ogni traccia del C D -R O M il proprio V T O C , il cui elenco di file può com prendere alcuni o tu tti i file pre senti nelle tracce precedenti. D o p o che il C D -R è stato inserito nel lettore, il sistema ope rativo cerca fra tu tte le tracce del C D -R O M per individuare il V T O C più recente, che de scrive lo stato corrente del disco. In cludendo nel V T O C corrente n o n tu tti, m a solo alcuni dei file delle tracce precedenti, è possibile dare l’illusione che alcuni di loro siano stati can cellati. Le tracce possono essere raggruppate in sessioni; i C D -R O M m u ltise ssio n e no n pos sono però essere letti da lettori standard di C D audio, dato che questi si aspettano la pre senza di u n ’unica V T O C all’inizio del disco. O g n i traccia deve essere scritta in u n ’u n ica operazione e in m o d o c o n tin u o senza in terru zio n e; per questo m otivo gli h ard disk d a cui sono prelevati i dati d evono essere sufficientem ente veloci per fornirli nei tem p i corretti. Se i file d a copiare sono sparsi nell’hard disk, i tem pi di ricerca su disco possono far dim in u ire il flusso di dati al C D -R fino a provocare un tem u to errore di esaurim ento del buffer. Il risultato di un esaurim ento del buffer è un piacevole e scintillante (anche se u n po’ costoso) sottobicchiere per i propri d rin k o p p u re u n frisbee d o rato o argentato di 120 mm! D i solito i program m i per i C D -R m et to n o a disposizione la possibilità di raggruppare tu tti i file di in p u t in u n a singola area contigua di 6 5 0 M B, rappresentante l’im m agine del C D -R O M , prim a di masterizzare il C D -R ; questo processo in genere raddoppia i tem pi effettivi di scrittura, richiede 650 M B di spazio libero su disco e, in ogni caso, n o n protegge da quegli hard disk che, non appe na si riscaldano tro p p o , si fanno “p rendere dal panico" e decidono di effettuare una ricali brazione term ica. I C D -R p erm etto n o ai privati e alle società di copiare facilm ente i C D -R O M (e i C D audio), spesso in violazione dei d iritti d ’autore. Sono stati ideati vari schemi per ostacolare
96
Capitolo 2
Organizzazione dei sistemi di calcolo
q uesta pirateria e far sì che sia diffìcile leggere un C D -R O M se non utilizzando il software fornito dall’autore dello stesso. U no di questi sistemi prevede di registrare le lunghezze di tu tti i file del C D -R O M com e se fossero d i vari’gigabyte, ostacolando ogni tentativo da parte dei norm ali software di co piatura di trasferirli su hard disk. Le vere lunghezze sono m em o rizzate all in tern o del software del p ro d u tto re oppure sono nascoste (possibilm ente criptate) in un’area inaspettata all’in tern o del C D -R O M . Un altro schem a utilizza intenzionalm ente E C C errati in specifici settori, con l’aspettativa che il program m a di copiatura li “correg gerà”. Il software dcll’applicazione controllerà anch’esso gli E C C e si rifiuterà di funzionare se essi sono corretti. A ltre possibilità prevedono l’utilizzo di intervalli n o n standard tra le tracce e lo sfru ttam en to di altri “difetti” fìsici.
2.3.9
CD-riscrivibili
A nche se abitualm ente vengono usati supporti che p erm etto n o un’unica scrittura, com e la carta o la pellicola fotografica, c’è una grande richiesta di C D -R O M riscrivibili. U na tec nologia oggi disponibile è quella dei C D -R W ( CD-ReWritable, C D -R iscrivibili), che usano su p p o rti della stessa dim ensione dei C D -R . 1 C D -R W però, invece di usare la cianina o la ftalocianina per lo strato sul quale registrare, im piegano una lega di argento, indio, antim onio e tellurio. Q u esta lega ha d u e stati stabili, quello cristallino e quello am orfo, con diverse pro prietà riflettenti. 1 lettori C D -R W utilizzano laser che funzionano a tre potenze distinte. Alla poten più elevata il laser scioglie la lega portan d o la dallo stato cristallino altam ente riflettente a quello am orfo, d o tato d i u n a riflettività m inore e che rappresenta un pit. Alla potenza me dia la lega si scioglie e si ricom pone nello stato cristallino naturale per tornare a rappresen tare u n land Alla potenza p iù bassa è possibile rilevare lo stato del m ateriale (per operazioni di lettura), senza però indurre alcuna trasform azione. I C D -R W vergini sono m olto più costosi dei C D -R vergini e per questo non li han sostituiti com pletam ente. Inoltre il fatto che, una volta scritto, u n C D -R n o n possa essere cancellato accidentalm ente, rappresenta un gran vantaggio per il backup dei dischi.
2.3.10
DVD
II form ato base dei C D /C D -R O M è stato definito attorno al 1980. D a allora la tecnologia è m igliorata, al p u n to che oggi è possibile realizzare dischi ottici di maggiore capacità in m odo econom icam ente conveniente e c’è u n a grande richiesta per questo tipo di supporti. Holly w ood am erebbe fervidamente sostituire le videocassette analogiche con i dischi digitali, dato che hanno una qualità più elevata, sono più econom ici da produrre, durano più a lungo, oc cupano m eno spazio sugli scaffali dei negozi e non devono essere riaw olri. Le aziende di elet tronica stanno cercando un nuovo pro d o tto per visualizzare i successi cinematografici e m olte società inform atiche vorrebbero aggiungere funzionalità m ultim ediali al proprio software. Q u esta com binazione tra tecnologia e d o m an d a proveniente da tre m ercati estremam en te ricchi e p o ten ti h a portato al D V D , che originalm ente era l’acronim o di Digital Video Disk (disco video digitale), m entre ora significa ufficialm ente Digital Versatile Disk (disco digitale versatile). I D V D sono prog ettati in m odo simile ai C D : si in ietta policarbonato in u no stam po e sulla superficie si possono distinguere p it e land che vengono illum inati da un d iodo laser e letti da un fotorilevatore. Le novità riguardano l’uso di:
2.3
Memoria secondaria
97
1. p it p iù piccoli (0,4 u co n tro gli 0,8 dei C D ) 2. u n a spirale più stretta (0,74 n di distanza tra le tracce rispetto agli 1,6 dei C D ) 3. u n laser rosso (a 0,65 n invece che a 0,78 com e nei C D ). Insieme, questi m iglioram enti p erm etto n o u n a capacità sette volte maggiore, che arriva fino a 4,7 C B. U n D V D 1x ha u n a velocità di 1,4 M B/s (contro i 150 KB/s dei C D ). Sfortunata m ente il passaggio ai laser rossi, com e quelli usati nei superm ercati, obbliga i lettori D V D ad avere un secondo laser o una sofisticata ottica di conversione per p o ter leggere i C D e i C D -R O M esistenti, cosa che n o n tu tti i lettori p erm ettono. Inoltre la lettura di C D -R e C D R W p u ò n o n essere possibile sui lettori D V D . La capacità di 4,7 G B è sufficiente? Forse. U tilizzando la com pressione M P E G -2 (stan dardizzata in IS 13346) u n disco D V D da 4 ,7 G B pu ò m em orizzare 133 m in u ti di video a scherm o in tero in alta risoluzione (720 x 4 8 0 ), più di o tto diverse co lonne sonore e sot totito li in 3 2 lingue diverse. C irca il 9 2 % dei film che H ollyw ood ha finora p ro d o tto ha una d u ra ta inferiore ai 133 m in u ti. T uttavia, d ato che alcune applicazioni, com e i giochi m u ltim ediali o le enciclopedie, p o treb b ero richiedere q u a n tità di d ati p iù elevate e d ato che H ollyw ood vorrebbe inserire più film sullo stesso disco, sono stati definiti q u a ttro form ati: 1. singolo lato, singolo strato (4,7 GB) 2. singolo lato, d o p p io strato (8,5 GB) 3. d o p p io lato, singolo strato (9,4 GB) 4 . d o p p io lato, d o p p io strato (17 G B ). Perché così tan ti form ati? In u n a parola sola: politica. Philips e Sony volevano dischi a singolo lato e d o p p io strato per le versioni ad alta capacità, m en tre Toshiba e T im e W arner volevano dischi a d o p p io lato e d o p p io strato . Philips e Sony ritenevano che la gente n o n fosse d isposta a girare i dischi p er cam biar lato, m entre T im e W arner non credeva che p o tesse fun zio n are l’utilizzo di d u e strati su un solo lato. Il com prom esso fu quello di a d o t tare tu tte le soluzioni e di lasciare al m ercato il co m p ito di d eterm in are quale sarebbe sopravvissuta. La tecnologia a do p p io strato h a u n o strato riflettente nella parte bassa, coperto da uno sem iriflettente. A seconda del p u n to in cui il laser è messo a fuoco, esso rim balza su u n fivello o p p u re sull’altro. Il livello più basso richiede che i pit e i land siano leggerm ente più grandi per essere leggibili in m odo affidabile, e per questo m otivo la sua capacità è legger m ente inferiore rispetto a quella dello strato superiore. I dischi a d o p p io lato so n o creati p ren d en d o due dischi a singolo lato da 0 ,6 m m di spessore e in collandoli l’u n o c o n tro l’altro, cioè “schiena co n tro schiena”. Per far sì che tu tte le versioni abb ian o lo stesso spessore, u n disco a singolo lato è com posto d a u n di sco spesso 0,6 m m in collato con u n so tto strato vu o to (o forse, in fu tu ro , con un o co n te nen te 133 m in u ti di p u b b licità, nella speranza che la gente sia curiosa e giri il disco per vedere che cosa c’è sidl'altro lato). La Figura 2 .2 7 illustra la stru ttu ra del disco a do p p io strato e d o p p io lato.
98
Capitolo 2
Figura 2.27
Organizzazione dei sistemi di calcolo
Disco DVD a doppio lato e doppio strato.
II D V D è stato ideato da un consorzio di 10 aziende p ro d uttrici, sette delle quali g iappo nesi, in stretta collaborazione con i principali studi di pro d u zio n e di H ollyw ood (alcuni dei quali sono d i p ro p rietà delle aziende giapponesi facenti parte del consorzio). Le società di c o m p u te r e delle telecom unicazioni n on furono invitate a questo “picnic” e l’attenzione finì per concentrarsi sull’utilizzo del D V D p er il noleggio e la vendita di film. Tra le fu n zionalità standard sono presenti, per esem pio, l’om issione in tem po reale delle scene sca brose (per perm ettere ai genitori di rendere adatto ai bam bini un film vietato ai m inorenni), l’audio a sei canali e il su p p o rto p er il Pan-and-Scari. Q u e st’ultim a funzionalità perm ette di decidere dinam icam en te com e tagliare le b ande laterali dei film (il cui rap p o rto lar ghezza-altezza è di 3:2) per essere visualizzate sugli attuali scherm i televisivi (che han n o un rap p o rto di form a di 4:3). U n altro aspetto che m olto probabilm ente no n sarebbe stato te n u to in co n to dalle so cietà di c o m p u ter e la scelta intenzionale di rendere incom patibili i dischi previsti per gli Stati U n iti rispetto a quelli previsti per l’Europa, e anche per gli altri continenti. H ollyw ood ha preteso questa “caratteristica” poiché i nuovi film escono sem pre prim a negli Stari U niti e vengono d istribuiti in Europa solo q u an d o negli Stati U niti sono orm ai in vendita i video. L'idea era quella di im pedire che i negozi di video europei potessero com prare i video negli Stati U niti prim a dell’uscita in E uropa, riducendo qu in d i gli introiti delle sale cine m atografiche. Se H ollyw ood fosse stata il m otore del m ercato dei calcolatori avrem m o avuto floppy disk da 3,5 pollici negli Stati U n iti e floppy disk da 9 cm in Europa.
2.3.11
Blu-Ray
N el m ercato dei calcolatori nulla rim ane ferm o, tan to m eno la tecnologia per la m em oriz zazione dei dati. Il D V D è stato appena in tro d o tto e già il suo successore m inaccia di re n derlo obsoleto; si tratta del B lu -R ay , chiam ato in questo m odo poiché utilizza un laser blu invece di quello rosso dei D V D . I laser blu h anno una lunghezza d ’on d a più piccola di quelli rossi, il che perm ette u n a messa a fuoco più accurata e l’uso di pit e land p iù piccoli. I d i schi Blu-Ray a singolo lato co n ten g o n o circa 25 G B di dati; quelli a doppio lato 50 GB. La velocità di trasferim ento dati è di circa 4,5 M B /s, buona per essere un disco ottico, m a ancora m o lto lo n tan a da quella dei dischi m agnetici (per esem pio A TA PI-6 a 100 M B /s e U ltra4 SCSI a 320 M B/s). C i si aspetta che alla fine Blu-Ray sostituirà i C D -R O M e i D V D , m a questo passaggio p otrebbe richiedere degli anni.
2.4
2.4
Input/Output
99
Input/Output
C om ’è stato d etto all’inizio di questo capitolo, un calcolatore è com posto da tre com ponenti principali: la C P U , le m em orie e i dispositivi di I/O . Finora abbiam o analizzato la C P U e le m em orie; adesso passiam o allo studio dei dispositivi di I/O e alla loro connessione con il resto del sistema.
2.4.1
Bus
D a un p u n to d i vista fisico la stru ttu ra della m aggior parte dei calcolatori e delle w orksta tion è sim ile a quella m ostrata nella Figura 2.28. L’organizzazione più com une consiste in una scatola m etallica co n ten en te u n a grande scheda di circuiti stam pati nella parte bassa, chiam ata scheda madre (scheda genitore, sem bra più politically correct). La scheda m adre contiene il chip della C P U , alcuni slot nei quali è possibile inserire i m oduli D IM M e vari altri chip di supporto. C o n tien e inoltre un bus stam pato lungo la sua lunghezza e alcune prese nelle quali è possibile inserire i co n n etto ri delle schede d i I /O (il bus P C I). I P C più vecchi h an n o anche un secondo bus (il bus ISA) per connettere le schede di I/O costruite m olto tem po prim a; di solito nei calcolatori più m oderni questo bus non è presente e il suo utilizzo sta rapidam ente scom parendo. La stru ttu ra logica di u n sem plice personal co m puter di fascia bassa è m ostrata nella Figura 2.29. Q u esto sistem a ha un unico bus utilizzato per connettere la C P U , la m em oria e i dispositivi di I/O , m en tre la m aggior p arte dei sistemi ha invece due o p iù bus. C iascun dispositivo di I /O è com posto da due parti: una contenente la m aggior parte dell’elettronica, chiam ata il c o n tro llo re , e un’altra co n ten en te il dispositivo stesso, per esem pio un let tore di dischi. D i solito il controllore è collocato su una scheda inserita in u n o slot libero, tranne per quei controllori che n on sono opzionali (com e la tastiera) e che spesso sono in stallati direttam en te sulla scheda m adre. A nche se lo scherm o (il m onitor) non è opzionale, il controllore video è talvolta situato su u n a scheda aggiuntiva per perm ettere all’u te n te di scegliere tra schede con o senza acceleratori hardw are, m em oria aggiuntiva e altre-caratteristiche avanzate. Il controllore è connesso al suo dispositivo m ediante un cavo che si collega al conn etto re nella parte posteriore della scatola metallica. Controllore SCSI •*
Figura 2.28
Struttura fisica di un personal computer.
100
Capitolo 2
Organizzazione dei sistemi di calcolo
Monitor Tastiera
Lettore CD-ROM
Hard disk
□□□□□
CPU
Memoria
Controllore dello schermo
Controllore della tastiera
Conir ollore deICC ROM
Controllore dell'hard disk
Bus
Figura 2.29
Struttura logica di un semplice personal computer.
Il co m p ito di un controllore è di governare il proprio dispositivo di I/O e gestire il suo ac cesso al bus. Per esem pio, q u an d o un program m a deve ottenere dei dati dal disco, m anda u n com ando al suo controllore, che spedisce delle istruzioni al lettore, tra cui quella per la ricerca su disco. Il lettore, dopo aver individuato la traccia e il settore corretti, restituisce i dati al controllore sotto form a di un flusso seriale di bit. È com pito del controllore spezzare il flusso di b it in unità, generalm ente costituite d a ’una o p iù parole, e scriverle successiva m ente in m em oria. Q u a n d o u n controllore legge e scrive dati in m em oria senza l'intervento della C P U si dice che effettua un D ire c t M e m o ry Access (“accesso d iren o alla m em oria”), meglio conosciuto con il suo acronim o D M A . Di solito, una volta che il trasferim ento è com pletato, il controllore produce un in te r r u p t che obbliga la C P U a sospendere im m ediata m ente l’esecuzione del program m a corrente e a far iniziare una speciale procedura, chiam ata g esto re d e ll’in te r r u p t (interrupt handler) che controlla se ci sono errori, com pie le azioni eventualm ente necessarie e info rm a il sistem a operativo che l’I/O è term inato. D o p o che il gestore delF interrupt ha term in ato il proprio lavoro, la C P U riprende l’esecuzione del pro gram m a precedentem ente sospeso all’arrivo dell’in terru p t. Il bus non è utilizzato solam ente dai controllori di I/O , m a anche dalla C P U quand deve prelevare istruzioni o dati. C h e cosa succede se la C P U e un controllore di T/O cercano di usare il bus allo stesso tem po? U n ch ip ch iam ato arbitro del bus stabilisce i turni. G eneralm ente le periferiche di I /O h an n o la precedenza sulla C P U , d ato che i dischi e altri dispositivi m obili n on possono essere ferm ati e obbligarli ad aspettare vorrebbe dire perdere dati. Q u a n d o nessuna operazione di I/O è in esecuzione, la C P U pu ò utilizzare tu tti i cicli del bus per accedere alla m em oria. T uttavia q u ando un dispositivo di I/O è già in funzione, se richiede l’accesso al bus, questo gli viene subito concesso. Q uesto processo si chiam a furto di c id i e rallenta le prestazioni del calcolatore. Q u esto schem a funzionava bene per i prim i personal com puter, dato che tu tti i com p o n en ti erano più o m eno bilanciati. T uttavia, con l’aum ento della velocità di C P U , m e m orie e dispositivi di I/O , sorse u n problem a: il bus non era più in grado di gestire il carico affidatogli. In un sistem a chiuso, com e le w orkstation adibite a calcoli ingegneristici, la so luzione fu quella di progettare un nuovo bus più veloce per il m odello successivo. Q uesto approccio funzionava correttam ente, d ato che nessuno pensava di riutilizzare i vecchi d i spositivi di I /O con il nuovo sistema.
2.4
Input/Output
101
N el m o n d o dei P C però gli u te n ti aggiornavano spesso le loro C P U , m a allo stesso tem po volevano co n tin u are a utilizzare stam p anti, scanner e m odem anche con il nuovo sistema. Era n ato inoltre u n enorm e m ercato atto rn o alla fo rnitura di periferiche di ogni tipo per il bus del P C IB M e n o n si voleva certo b u tta r via tu tti gli investim enti per rico m inciare da capo. IBM in terp retò questo fatto nel m odo peggiore q u an d o lanciò il suc cessore del P C IB M , la linea PS/2. Il PS/2 era d o ta to di un nuovo bus più veloce, m a m olti p ro d u tto ri di cloni c o n tin u a ro n o a utilizzare il bus dei vecchi P C , ora chiam ato bus ISA (Industry Standard Architecture, “standard industriale di architettura”). M olti p ro d u tto ri di dischi e di altre periferiche c o n tin u a ro n o a costruire controllori per quel bus e così IBM si trovò nella paradossale situazione di essere l’unico p ro d u tto re di P C n o n p iù com patibili con IBM . Alla fine fu obbligata a to rn are a supportare il bus ISA. A prendo una parentesi, occorre n o tare che ISA se u tilizzato nel c o n testo dei livelli di una m acchina significa Instruction Set Architetture (“architettura dell’insieme d ’istruzioni”), m entre Industry Standard Architetture q u an d o si parla di bus. C io n o n o stan te, anche se il m ercato esercitava pressioni affinché nulla venisse m odifi cato, i vecchi bus divennero realm ente tro p p o lenti. Q uesta situazione portò altre società a sviluppare m acchine d o tate di più bus, tra le quali c’era ancora il vecchio bus ISA o il suo successore retrocom patibile EISA ( Extended ISA, “ISA esteso”). O ggi il più diffuso di que sti bus è il PCI ( Peripheral Component Interconnetta “interconnessione di co m ponenti peri ferici”), progettato da Intel. Al fine di incoraggiare l’intero m ercato (com presi i propri con correnti) ad adottarlo, Intel decise però di rendere di dom inio pubblico tu tti i brevetti. Il bus P C I p uò essere utilizzato in varie configurazioni, di cui la p iù com une è illu strata nella Figura 2.30. In questo schem a la C P U com unica con il controllore della m e m oria lungo una connessione dedicata ad alta velocità. Il controllore com unica con la m e m oria e con il bus P C I in m o d o diretto, p er far sì che il traffico tra C P U e m em oria non occupi il bus P C I. Le periferiche ad alta larghezza di banda (cioè alta velocità di rrasferiBus delia memoria
Figura 2.30
Tipico PC odierno con un bus PCI e un bus ISA. La scheda audio e il modem sono dispositivi ISA; il controllore SCSI è un dispositivo PCI.
102
Capitolo 2
Organizzazione dei sistemi di calcolo
m ento dati) possono com u n q u e connettersi direttam ence al bus PC I. Inoltre, in questa con figurazione, il bus PC I ha un p o n te verso il bus ISA in m odo da p o te r continuare a utiliz zare i controllori ISA e i loro dispositivi, anche-se, com e detto precedentem ente, questo bus sca gradualm ente scom parendo. D i solito u n a m acchina pro g ettata in questo m odo h a tre o q u attro slot P C I liberi e u n o o d u e slot ISA, p er consentire agli utenti di collegare sia le vec chie schede ISA di I/O (generalm ente per dispositivi lenti) sia le nuove schede PC I di I/O (di solito p e r periferiche più veloci). AI giorno d ’oggi sono disponibili m olti tipi di dispositivi dì I/O ; ne tratterem o ora al cuni dei più com uni.
2.4.2
Terminali
I term inali sono com posti da due parti principali: la tastiera e il m onitor. Nel m ondo dei m ain frame spesso questi com ponenti sono integrari in un unico dispositivo, collegato al calcolatore principale m ediante una linea seriale o un cavo telefonico. Ancor oggi questi dispositivi sono am piam ente usati per le prenotazioni delle com pagnie aeree, nelle banche e, p iù in generale, nei sistemi basati su m ainfram e. Nel m ondo dei personal com puter la tastiera e il m onitor sono invece dei dispositivi indipendenti; la tecnologia è in ogni caso la stessa. T a stie re Esistono vari tipi di tastiere. Il P C IBM originario era d o tato di una tastiera che aveva, sono ogni casto, un pulsante a scatto che dava un feedback tattile e produceva un clic q u an d o il tasto veniva p rem u to sufficientem ente. O ggi i tasti delle tastiere p iù econom iche hanno sem plicem ente dei co n tatti m eccanici, m entre quelle di qualità più elevata h an n o un foglio di m ateriale elastom ecrico (una specie di gom m a) tra i tasti e il circuito stam pato sottostante. In questi m odelli vi è, sotto ogni tasto, una piccola calotta che si piega q u an d o il tasto viene prem u to a sufficienza; una m inuscola regione di materiale conduttivo presente al suo interno p erm ette di chiudere il circuito. In alcune tastiere, la pressione di un tasto fa scorrere un pic colo corpo m etallico all’in tem o d i u n a b obina conduttrice inducendo in essa una corrente rilevabile. V engono utilizzati anche vari altri m etodi, di tipo m eccanico o elettrom agnetico. La pressione di un tasto di un PC genera un in terru p t che stim ola una parte del si stem a operativo, chiam ata gestore deli'internipt della tastiera. Q uesta routine, leggendo un re gistro hardw are della tastiera, ricava il num ero (da l a 102) associato al tasto prem uto. Anche quan d o si rilascia un tasto viene generato un in terrupt. In questo m odo se l’utente prem e il tasto SHIFT, poi prem e e rilascia il tasto M e infine rilascia il tasto SHIFT, il sistem a opera tivo può capire che l’u tente voleva digitare una “M ” m aiuscola invece che una “m” m in u scola. La gestione di sequenze m u lti-tasto c h e coinvolgono i tasti SHIFT, CTRL e ALI è fatta interam ente via software (com presa la famosa e detestata sequenza CTRL-ALT-CANC utiliz zata p er riavviare i P C IBM e i loro cloni).
Monitor CRT U n m o n ito r contiene u n tubo a raggi catodici, C R T (Cathode Ray Tube), e il proprio ali m entatore. Il C R T è d o tato di un cannone elettronico che indirizza un fascio di elettroni contro uno scherm o fosforescente posizionato vicino alla parte frontale del tubo, com ’è m o strato nella Figura 2.31 (a). 1 m o n ito r a colori h a n n o un làscio di elettroni, per ciascun com pon en te rosso, verde e blu. D u ran te una scansione orizzontale il fascio im piega circa 50 ns
2.4
Input/O utput
103
Scansione orizzontale
Origlia Schermo
Cannone elettronico
Punto
sullo schermo Vuoto Piatti di deviazione verticale
(a) Figura 2.31
Riposizionamento verticale ,
(b)
Riposizionamento orizzontale
(al Spaccato di un CRT. (b) Scansione di un CRT.
per scorrere lungo curro lo scherm o e disegnare una linea orizzontale. Successivamente ese gue u n nuovo rracciam ento orizzontale in direzione opposta per riposizionarsi sul lato sini stro e poter iniziare una nuova passata. U n dispositivo di questo tipo che produce un’im m agine linea p e r linea è chiam ato dispositivo a sc a n sio n e raster. Per controllare la scansione orizzontale si applica una tensione linearm ente crescente ai piatei collocaci alla destra e alla sinistra del cannone elettronico, che servono a deviare oriz zontalm ente il làscio. Il moco verticale è controllato da u n aum ento m olto p iù lento della tensione applicata ai piatti posizionati sopra e sotto il cannone. D opo un num ero d i passate che varia alt’incirca era 4 00 e 1000, le tensioni sui piatti di deviazione orizzontali e verticali vengono invertite rapidam ente per portare nuovam ente il fàscio nell’angolo in alto a sinistra dello scherm o6. In genere u n ’im m agine a pieno scherm o è ridisegnata tra le 30 e le 60 volte al secondo, e in ogn u n a di queste il fascio di elettroni com pie il percorso m ostrato nella Figura 2 .3 1(b). A nche se descrivendo il funzionam ento dei C R T abbiam o detto che il fascio viene spostato sull’area dello scherm o m ediante cam pi elettrici, m olti m odelli, so p rattu tto nel caso dì m o n ito r professionali, usano al loro posto dei campi magnetici. A ll'in tern o del C R T si trova una griglia, che perm ette di produrre sullo scherm o un pattern costituito d a pu n ti. Q u a n d o si applica alla griglia u n a tensione positiva, gli elettroni vengono accelerati facendo si che il fascio colpisca lo scherm o em ettendo luce per un breve istante. Q u an d o invece si applica una tensione negativa gli elettroni vengono respinti, in m odo che n o n passino attraverso la griglia e lo scherm o n o n venga illum inato. La tensione appli cata alla griglia p erm ette q u in d i di far apparire sullo scherm o il corrispondente pattern di bit; questo m eccanism o consente d i convertire un segnale elettrico binario in un’im m agine visiva costituita da p u n ti lum in o si e p u n ti scuri.
Schermi piatti D ato che i C R T sono tro p p o in gom branti e pesanti per essere utilizzati nei calcolatori por tatili, c’è bisogno di u n a tecnologia com pletam ente diversa per i loro scherm i. La tecnolo gia più com u n e è quella dello scherm o a cristalli liquidi, L C D (Liquid Crystal Display).
6
Questo spostamento è spesso detto fly back (N.eLRev
104
Capitolo 2
Organizzazione dei sistemi di calcolo
La sua descrizione verrà fortem ente sem plificata, dato che si tratta di una tecnologia particolarm ente complessa, di cui esistono m olte varianti e che cam bia rapidam ente. 1 cristalli liq u id i sono m olecole organiche viscose che si m uo v o n o com e un liquido, m a che h a n n o anche u n a stru ttu ra spaziale sim ile a quella di un cristallo. Scoperti nel 1888 da un botanico austriaco (R heinitzer), negli anni ’60 sono stati applicati per la prim a volta agli scherm i (per esem pio in quelli d i calcolatrici e orologi). Q u a n d o tu tte le m olecole sono allineate nella stessa direzione le p ro p rietà o ttich e del cristallo d ip en d o n o dalla direzione e dalla polarizzazione della luce incidente. E possibile m odificare l’allineam ento delle m ole cole, e q u in d i le p roprietà o ttich e, tram ite l’applicazione di u n cam po elettrico. In p a rti colare è possibile controllare elettricam ente l’in tensità della luce uscente facendola passare attraverso u n cristallo liquido. Q u esta p roprietà può essere sfruttata per costruire scherm i piatti. U n o scherm o L C D consiste in due lastre di vetro parallele tra le quali è sigillato u n cri stallo liquido. Alle lastre sono attaccati degli elettrodi trasparenti. U na luce (naturale o arti ficiale) proveniente da dietro la lastra posteriore illum ina lo scherm o. G li elettrodi traspa renti collegati a ciascuna lastra sono utilizzati per creare cam pi elettrici all’interno del cri stallo liquido e, variando la tensione sulle diverse parti dello scherm o, si può controllare l’im m agine da rappresentare. Per la visualizzazione sono anche necessari dei filtri di polarizza zione incollati allo scherm o frontale e a quello posteriore. Lo schem a generale è m ostrato nella Figura 2.32(a). A nche se vengono usati diversi tipi di scherm i -LCD, ne considererem o com e esempio solo uno: lo scherm o T N ( TwistedNematic). In questo scherm o la lastra posteriore contiene
C rista llo liq u id o
(b)
(a) Figura 2.32
(a) Struttura di uno schermo LCD. (b) I solchi sulla lastra frontale e su quella posteriore sono perpendicolari tra loro.
2.4
Input/O utput
105
piccoli solchi orizzontali, m entre in quella frontale i solchi sono disposti verticalm ente, com e m ostra la Figura 2.32(b). In assenza di cam po elettrico le molecole del L C D ten d o n o ad al linearsi lungo i solchi c, d ato che gli allineam enti sulle due lastre differiscono di 90 gradi, le m olecole (e q u in d i la stru ttu ra deLcristalio) effettuano u n a torsione nello spazio interm edio. D ietro allo scherm o è collocato un filtro di polarizzazione orizzontale, che perm ette esclusivam ente il passaggio di luce polarizzata in quella direzione, m entre nella parte fron tale c’è un filtro di polarizzazione verticale. Se tra le lastre n o n ci fosse del liquido, la luce lasciata passare dal filtro posteriore sarebbe bloccata da quello anteriore, rendendo lo scherm o uniform em ente nero. La torsione della stru ttu ra del cristallo delle molecole guida la luce nel suo passaggio e ruota la sua polarizzazione rendendola verticale. Q u in d i, in assenza di un cam po elettrico, lo scherm o L C D risulta unifo rm em en te lum inoso. A pplicando tensione a particolari regioni della lastra si distrugge la stru ttu ra cristallina e la sua torsione, bloccando localm ente il pas saggio della luce. È possibile utilizzare d u e schem i per l’applicazione della tensione. Negli scherm i a m atrice passiva (econom ico) en tram b i gli elettrodi con ten g o n o fili paralleli. Per esem pio, in un o scherm o 6 4 0 x 4 8 0 l’elettro d o posteriore potrebbe avere 64 0 fili verticali, e quello frontale 4 8 0 orizzontali. A pplicando una tensione a uno dei cavi verticali e un im pulso a u n o dei cavi orizzontali si m odifica il voltaggio d i un pixel in una particolare posizione, fa cendola diventare scura per un breve intervallo di tem po. A pplicando lo stesso im pulso al pixel successivo e poi a quello ancora seguente si può disegnare sullo scherm o una linea, in m od o sim ile a q u an to avviene in u n C R T. S olitam ente lo scherm o viene in teram ente ri disegnato 60 volte in u n secondo, in m o d o da ingannare l’occhio e fargli credere che stia guard an d o u n ’im m agine costante; anche sotto questo aspetto il p rincipio è lo stesso di un m o n ito r CRT. L’altro schema utilizzato estensivam ente là uso di schermi a matrice attiva: è più co stoso, m a produce un’im m agine di qualità superiore. In questo caso, invece di avere solam ente due insiemi d i fili paralleli, su u n o degli elettrodi è presente, in corrispondenza di ciascun pixel, un piccolo elem ento di com m utazione. A ccendendo o spegnendo questi elementi si può creare sullo scherm o u n o schem a di tensioni, che corrisponde a un arbitrario pattern di bit. Gli elem enti d i com m utazione sono chiam ati thin film transistor (“transistor a pellicola sot tile”) e gli schermi piatti che li utilizzano sono spesso chiam ati schermi TFT. Al giorno d ’og gi la maggior parte dei calcolatori portatili e dei m onitor a schermo piatto per com puter desktop utilizza la tecnologia TFT. Finora abbiam o descritto il funzionam ento di uno scherm o m onocrom atico. Anche se i denagli sono m olto più com plicati, è sufficiente dire che gli scherm i a colori si basano su gli stessi principi. Si usano filtri ottici per separare, in corrispondenza di ogni pixel, la luce bianca nelle com ponenti rossa, verde e blu, in m odo da poterle visualizzare indipendentem ente.
RAM della scheda video Sia gli scherm i C R T sia quelli T F T vengono ridisegnati dalle 60 alle 100 volte al secondo, accedendo a una m em oria speciale, chiam ata RAM della scheda video ( Video RAM), che si trova sulla scheda del controllore dello scherm o. Q uesta m em oria h a una o p iù bitm ap che rappresentano lo scherm o; per esem pio su uno scherm o di 1600 x 1200 pixel (pietwr element, “elem ento d ’im m agine”) la RAM della scheda video deve contenere 1600 x 1200
106
Capitolo 2
Organizzazione dei sistemi di calcolo
valori, u n o per ogni pixel, in realtà, per perm ettere un veloce passaggio d a un’im m agine dello scherm o a u n ’altra, questa m em oria potrebbe contenere più bitm ap di questo tipo. Su u no scherm o d i fascia alta ogni pixel-dovrebbe essere rappresentato d a un valore RG B (da Red, Green e Blue) com posto d a 3 byte, uno per l’intensità di ciascun com ponente (rosso, verde e blu) del colore del pixel. Le leggi dell’ottica ci dicono che qualsiasi colore può essere costruito com b in an d o linearm ente luci rosse, verdi e blu. U n a R A M della scheda video con 1600 x 1200 pixel e 3 byte per pixel richiede circa 5.5 M B per m em orizzare l’im m agine e una q u an tità non indifferente di tem po di C P U per operare su d i essa. Per questa ragione alcuni calcolatori scendono al com prom esso di utiliz zare u n unico n u m ero a 8 bit p er indicare il colore desiderato. Q uesto n u m ero è utilizzato com e indice di una tabella hardw are, chiam ata tavolozza [colorpalette), contenente 25 6 cle m enti, ciascuno dei quali m em orizza u n valore RGB a 24 bit. Q uesto tipo di strategia, chia m ata colore indicizzato, riduce di 2 /3 i requisiti della RAM della scheda video, m a per m ette di visualizzare su scherm o solo 256 colori per volta. Spesso, q u an d o sullo scherm o sono m ostrate contem p o ran eam en te più finestre, solo i colori di una di queste vengono renderizzati correttam ente; infatti, anche se di solito ogni finestra ha la sua propria m appatura, esiste una sola tavolozza hardware. G li scherm i basati su b itm ap richiedono una grande q u a n tità di larghezza di banda. Per visualizzare dati m ultim ediali a scherm o intero occorre trasferire a ogni fotogram m a 5.5 M B di dati. N el caso di video in m ovim ento (jull-motion) sono necessari alm eno 25 fotogram m i al secondo, che co rrisp o n d o n o a u n a 'velocità totale di trasferim ento dati di 137.5 M B /s. Q u esto carico supera d i m o lto le capacità di un bus (E)ISA ed è anche su p e riore a q u a n to era in grado d i gestire il bus P C I originario (127,2 M B /s). A nche se im m a gini di m in o r risoluzione richiedono ovviam ente un trasferim ento di dati m inore, la lar ghezza di b an d a rim ane co m u n q u e u n im p o rta n te problem a. A partire dal Pentium II, per perm ettere u na larghezza di banda maggiore tra le C P U e le RAM delle schede video, Intel ha com inciato a im piegare un nuovo bus verso la RAM video, chiam ato bus AGP (Accelerated Graphics Port, “p o rta p e r la grafica veloce”), che può trasferire 3 2 b it a u n a frequenza di 6 6 M H z fornendo così una velocità di trasferim ento dati di 252 M B /s. Sono state p ro d o tte versioni successive del bus, funzionanti a velocità doppie, e m aggiori 4 e 8 volte, per m ettere a disposizione una larghezza di banda ad atta alla grafica altam ente interattiva senza sovraccaricare il bus P C I principale.
2.4.3
Mouse
Più il tem p o passa, più i calcolatori sono utilizzati da persone con sem pre m inor conoscenza del loro funzionam ento. I calcolatori della generazione E N IA C erano usati da coloro che li avevano costruiti, m entre negli anni ’50 i c o m p u ter venivano utilizzati soltanto da pro gram m atori altam ente specializzati. O ggigiorno invece i calcolatori sono largam ente im pie gati da persone che non sanno (o talvolta non vogliono sapere) troppi dettagli sul funzio nam en to dei calcolatori o sulla loro program m azione. Agli inizi, la m aggior parte dei calcolatori era dotata di un’interfaccia a linea di com ando, attraverso la quale gli uten ti im partivano i com andi. D ato che chi non è uno specialista dei calcolatori reputa che le interfacce a linea di co m ando siano spesso poco am ichevoli, se n o n ad d irittu ra ostili, m olti p ro d u tto ri di calcolatori, in seguito, hanno sviluppato interfacce p un ta-e-d icca, com e quelle del M acintosh e di W indow s. Per poter utilizzare questo tipo
2.4
Input/O utput
107
d'interfaccia è necessario avere u n o stru m e n to per puntare sullo scherm o, e il m etodo p iù co m une consiste nell’usare un m ouse. 11 m ouse è u n piccolo oggetto di plastica situato a fianco della tastiera. Q u a n d o viene m osso sul tavolo, u n piccolo p u n ta to re si sposta, in corrispondenza, sullo scherm o, per m ettend o agli uten ti di p u n tare agli elem enti desiderati. Il m ouse, sulla parte superiore, ha uno, due o tre p ulsanti che consentono all’u ten te di selezionare elem enti e voci dei m enu. Gli u ten ti p iù inesperti preferiscono i m ouse co n u n unico tasto (è infatti difficile prem ere quello sbagliato se ce n’è soltanto uno), m entre quelli più abili preferiscono la potenza di un m ouse a più tasti che p erm ette azioni più sofisticate. Sono stati p ro d o tti tre tipi d i m ouse: m eccanici, o ttici e opto-m eccanici. D p rim o m ouse aveva sul fondo due rotelle di gom m a che sporgevano all’esterno; gli assi delle due rotelle erano disposti perpendicolarm ente, di m odo che, q u ando il m ouse veniva spostato parallelam ente a u no degli assi principali, ruotava soltanto u n a rotella. C iascuna rotella gui dava un a resistenza variabile o un potenziom etro, in m odo che m isurando il loro cam bia m en to era possibile calcolare la rotazione e, di conseguenza, la distanza percorsa dal m ouse lungo u n a particolare direzione. Negli ultim i anni questo tipo di m ouse è stato quasi com pletam ente sostituito da un m odello, m ostrato nella Figura 2.33, che al posto delle due ro telle fa uso di una pallina leggerm ente sporgente sul fondo. Il secondo tip o d i m o u se è quello o ttic o , che non ha né rotelle né pallina. Al loro posto ha, sul fondo, u n L E D (Light Emitting Diode, “d io d o lum inescente”) e un fotorile vatore. Il m ouse o ttico viene utilizzato su u n o speciale ta p p e tin o di plastica sul quale c’è u n a griglia di linee m o lto vicine fra loro; q u a n d o il m ouse si m uove il fotorilevatore ri conosce l’incrocio tra d u e linee rilevando un cam b iam ento nella q u a n tità di luce generata dal L E D che viene riflessa. I circuiti all’in te rn o del m ouse co n ta n o il n u m ero di linee at traversate lun g o ogni direzione.
Puntatore controllato dal mouse
Figura 2.33
Mouse utilizzato per puntare a voci di un menu.
108
Capitolo 2
Organizzazione dei sistemi di calcolo
Il terzo tip o di m ouse è quello opto-m eccanico, anch esso d o tato di una pallina che fa ruotare d u e cilindretti perpendicolari tra loro. I cilindretti sono collegati a codificatori che h a n n o u n a serie di fori attraverso i quali p uò passare la luce; q u an d o il m ouse si sposta, i ci lindretti ru o tan o e la luce colpisce il rilevatore ogni volta che u n foro si trova allineato con il LED e il suo fotorilevatore. Il nu m ero di im pulsi che vengono rilevati è proporzionale allo spostam ento effettuato. A nche se sono possibili diverse soluzioni, in genere un m ouse spedisce al calcolatore una sequenza di 3 byte ogni qualvolta si m uove di una certa distanza m inim a (per esem pio 0,01 pollici), chiam ata in alcuni casi mickey. D i solito questi caratteri vengono spediti lungo una linea seriale, u n b it alla v o lta II prim o byte contiene u n intero con segno che indica q u a n te u n ità sono state percorse dal m ouse nella direzione x rispetto aU’ulrim a rilevazione, m entre il secondo byte fornisce la stessa inform azione per quanto riguarda il m ovim ento lungo y, il terzo byte contiene invece lo stato corrente dei pulsanti del m ouse. A volte si utilizzano 2 byte per i valori di spostam ento di ogni coordinata. Il software del calcolatore riceve queste inform azioni sui m ovim enti relativi del mouse, le converte in coordinate assolute e, in corrispondenza della posizione calcolata, visualizza una piccola freccia Per selezionare un elem ento sullo scherm o l’utente deve soltanto posi zionare la freccia sulla regione desiderata e prem ere un pulsante: il calcolatore può determ i nare quale elem ento è stato selezionato d ato che sa in ogni m om ento in che posizione dello scherm o si trova la freccia.
2.4.4
Stampanti
In questo paragrafo descriverem o alcuni fra i più com uni tipi di stam panti m onocrom ati che (cioè in bianco e nero) e a colori.
Stampanti monocromatiche Il tipo più econom ico di stam pante è la stam pante a matrice di aghi, in cui durante la stam pa viene fatta scorrere lungo una linea una testina contenente dai 7 ai 24 aghi attivabili elettro m agneticam ente. Le stam panti a basso costo hanno sette aghi e possono stam pare, per esem pio, 80 caratteri p er linea usando u n a m atrice di 5 x 7 punti. In realtà una linea di stam pa è com posta da 7 linee orizzontali, ciascuna delle quali consiste di 5 x 80 = 400 punti. Ciascun p u n to può essere stam pato oppure no, a seconda del carattere che deve essere rappresentato. La Figura 2.34(a) m ostra com e viene stam pata la lettera “A ” con una m atrice 5 x 7 . E possibile m igliorare la qualità di stam pa utilizzando più aghi e facendo in m odo che i p u n ti stam pati si sovrappongano parzialm ente. La Figura 2.34(b) m ostra una “A” stam pata utilizzando 24 aghi che p ro d u co n o p u n ti tra loro sovrapposti. D i solito sono necessa rie più passate per ciascuna linea per poter sovrapporre i p u nti c qu in d i l’au m en to della qua lità va di pari passo con la d im in u zio n e della velocità di stam pa. La m aggior parte delle stam pan ti a m atrice p u ò funzionare in m o dalità differenti che p erm etto n o di trovare un bilan cio tra qualità di stam pa e velocità. Le stam panti ad aghi sono econom iche (soprattutto in term ini dei m ateriali di con sum o) e m o lto affidabili, m a sono anche lente, rum orose e di bassa qualità. N ei sistem i at tuali vengono im piegate in tre situazioni principali. Prim o, sono m olto diffuse per la stam pa di grandi (> 30 cm ) schede prestam pate. Secondo, sono adatte a stam pare su piccoli pezzi
2.4
Input/Output
109
oo o o o o * o ooooo o o o o (a)
Figura 2.34
(b)
(a) Lettera "A" rappresentala con una matrice 5 x 7 . (b) Lettera "A" stampata con 24 aghi in sovrapposizione.
di carta, com e gli scontrini delle casse e dei bancom at, le ricevute delle carte di credito e le carte d ’im barco degli aerei. Terzo, sono d i solito il mezzo m eno costoso per stam pare su m o dulo co n tin u o p iù copie utilizzando la carta carbone. Le stampanti a getto d’inchiostro sono il mezzo favorito per la stam pa casalinga a basso costo. U na testina m obile, co n ten en te u n a cartuccia d ’inchiostro, scorre orizzontal m ente lungo il foglio per mezzo di un nastro, m entre l’inchiostro viene spruzzato da piccoli ugelli. Le gocce d ’inchiostro h an n o un volum e di circa un picolitro; ciò corrisponde a dire che un a singola goccia d 'acq u a ne p u ò contenere senza problem i anche 100 m ilioni. Esistono due tipi di stam panti a getto d ’inchiostro: piezoelettriche (usate da Epson) e term iche (usate da C an o n , H P e Lexmark). Le stam panti piezolcttriche a gecto d'inchiostro h an n o u n particolare tipo di cristallo situato vicino al co n tenitore dell’inchiostro. Q u a n d o gli si applica una tensione, il cristallo si deform a leggerm ente, facendo uscire u n a gocciolina d ’inchiostro dall’ugello. Il software p uò controllare la dim ensione della goccia d ’inchiostro, dato che risulta proporzionale alla tensione applicata. Le stam panti a getto d ’inchiostro term iche (chiam ate anche stam panti bubblejet) con tengono una piccola resistenza d en tro ciascun ugello. Q u a n d o si applica loro una tensione la resistenza si scalda in m odo estremamfente veloce, facendo aum entare istantaneam ente la tem peratu ra dell’inchiostro fino al p u n to di ebollizione in m odo da produrre, per vaporiz zazione, una bolla di gas. La bolla di gas occupa più spazio dell’inchiostro che l’h a generata e produce quindi una pressione all’interno dell’ugello; l’inchiostro può muoversi soltanto verso l’apertu ra dell’ugello, da cui esce per finire sulla carta. Subito d o p o l’ugello viene raffreddato e la differenza di pressione aspira all'in tern o della cartuccia un’altra goccia d ’inchiostro. La velocità della stam p an te è legata alla rapid ità con cui si pu ò ripetere il ciclo di ebolli zione/raffreddam ento. Le gocce sono tu tte della stessa dim ensione, m a generalm ente sono più piccole di quelle p ro d o tte dalle stam panti piezolettriche. Di solito le stam panti a getto d ’inchiostro h anno una risoluzione di alm eno 1200 dpi (dotsper inch, “p u n ti per pollice”), m a può anche essere q u attro volte superiore. Sono eco nom iche, silenziose e p ro d u co n o stam pe di b u o n a qualità, m a allo stesso tem po sono lente e utilizzano cartucce d ’inchiostro costose. Q u a n d o si utilizzano le migliori stam panti a getto
110
Capìtolo 2
Organizzazione dei sistemi di calcolo
d ’inchiostro per stam pare fotografie ad alta risoluzione su carta fotografica speciale il risul tato è indistinguibile da una norm ale fotografìa, anche per stam pe di 8 x 10 pollici. D o p o l'invenzione della stam pa, da parte di Jo h an n G utenberg nel quindicesim o se colo, lo sviluppo più significativo nella riproduzione dei testi è probabilm ente rappresentato dalla stampante laser. Q uesto dispositivo com bina in un’unica periferica alta qualità del l’im m agine, eccellente flessibilità, grande velocità e costo lim itato. Le stam panti laser usano u na tecnologia m o lto simile a quella delle fotocopiatrici; difatti m olte società producono pe riferiche che p erm etto n o sia di effettuare fotocopie sia di stam pare (e talvolta di spedire e ri cevere fax). La Figura 2.35 illustra la tecnologia di base. Il cuore della stam pante è un tam buro ro tante m olto preciso (o, in alcuni sistemi di fascia alta, un nastro). All’inizio di ciascun ciclo di pagina il tam b u ro è caricato fino a circa 1000 volt e rivestito con un m ateriale fotosensi bile. Successivamente la luce generata dal laser passa lungo tu tta lunghezza del tam buro, come il fascio di elettroni in u n CRT, con la differenza che, per ottenere la deviazione orizzontale si utilizza uno specchio ottagonale ro tan te invece che una tensione. Il fàscio di luce viene m o d u lato p er p ro d u rre regioni lum inose e regioni scure: le parti del tam b u ro colpite dal rag gio perdono la loro carica elettrica. Il tam buro, dopo aver disegnato u n a linea di p u n ti, ruota di una frazione di grado per perm ettere il disegno della linea successiva. A questo p u n to la prim a linea di p u n ti raggiunge il toner, un contenitore di polvere nera elettrostaticam ente sensibile. II to ner è attirato dai p u n ti che h an n o ancora una carica elettrica, form ando così u n ’im m agine visiva sulla linea del tam b u ro . U n istante dopo, ru o tan d o , il tam b u ro ricoperto di toner viene prem uto con tro il foglio di carta, trasferendo su questo la polvere nera. Il foglio passa quindi attraverso dei rulli riscaldati per fissare l'im m agine, fondendo in m odo perm anente il toner sulla carta. Nel seguito della rotazione il cilindro viene scaricato e ripulito di ogni residuo del toner, per
Laser
c :
o
O
Specchio ottagonale rotante
Cilindro spruzzato e caricato Raggio di luce che colpisce il cilindro Tamburo
Fogli bianchi Figura 2.35
Funzionamento di una stam pante laser.
Pila di fogli stampati
2.4
Input/Output
111
p o ter essere nuovam ente caricato e ricoperto di m ateriale fotosensibile, p ro n to per la stam pa della pagina successiva. È necessario precisare che questo processo è possibile grazie a una com binazione estre m am ente com plessa di fisica, chim ica, m eccanica e ottica. N o n o stan te questa com plessità alcuni p ro d u tto ri vendono dei m eccanism i com pleti, chiam ati motori di stampa, che com pren d o n o tu tte queste fasi. Per realizzare una stam pante com pleta i p ro d u tto ri di stam panti laser co m b in a n o i m o to ri di stam p a con la p ro p ria e lettro n ic a e il p ro p rio softw are. L’elettro n ica consiste in u n a veloce C P U integrata, alcuni m egabyte di m em oria per mem orizzare la m appa dei b it di un’intera pagina e num erosi set di caratteri, alcuni dei quali predefiniti. La m aggior parte delle stam panti accetta com andi che descrivono com e devono essere stam pate le pagine. Q uesti com andi sono espressi in linguaggi com e PC L di H P e PostScript di Adobe. Le stam panti laser da 600 dpi e più possono stam pare in m odo accettabile fotografie in bianco e nero, ma la tecnologia è più com plessa di q u an to potrebbe sem brare. Si consi deri una fotografìa scannerizzata a 600 dpi che deve essere stam pata con una stam pante a 600 dpi. L’im m agine scannerizzata contiene 6 0 0 x 6 00 pixel/pollice, ciascuno dei quali con siste in un valore di grigio com preso fra 0 (bianco) e 255 (nero). Anche la stam pante può stam pare a 6 00 dpi, m a ciascun pixel stam p ato è o nero [toner presente) o bianco (toner as sente): i grigi non possono essere stam pati. Per riprodurre la scala dei grigi la tecnica più com une è quella dei mezzitoni, la stes sa utilizzata per i poster com m erciali. L’im m agine è divisa in celle, solitam ente di 6 x 6 pixel: ogni cella può quindi contenere tra 0 e 36 pixel neri. Le celle con più pixel sono percepite dall’occhio com e più scure rispetto alle altre. 1 valori di grigio com presi tra 0 e 255 sono rappresentati dividendo questo intervallo in 37 zone. I valori da 0 a 6 appartengono alla zo na 0, i valori da 7 a 13 alla zona 1 e così via (la zona 37 è leggerm ente più piccola delle al tre in q u an to 256 non è divisibile esattam ente per 37). O gni qualvolta si incontra un gri gio apparten en te alla zona 0, si lascia la sua cella dei m ezzitoni bianca, com e m ostra la Figu ra 2.36(a). Un valore apparten en te alla zona 1 è stam pato con u n pixel nero; u n o della zo na 2 con due pixel neri, com e m ostra la Figura 2.36(b). Le Figure 2.36(c)-(f) m ostrano al tre zone con valori diversi. Se si prende una fotografia scannerizzata a 600 dpi e la si rappre senta m ediante questa tecnica, la sua risoluzione effettiva si riduce ovviam ente a 100 celle/pollicc; questa risoluzione viene chiam ata frequenza del retino dei mezzitoni, ed è m isurata convenzionalm ente in Ipi (linesper inch, “linee per pollice”).
■ISSISI HI Hi Mi (a) Figura 2.36
(b)
(c)
(d)
(e)
(f)
Mezzitoni per alcuni intervalli di livelli di grigio, (a) 0-6. (b) 14-20. (c) 28-34. (d) 56-62. (e) 105-111. (f) 161-167.
112
Capitolo 2
Organizzazione dei sistemi di calcolo
Stampanti a colori Le im m agini a colori vengono viste in d u e m odi distinti: per luce trasmessa o per luce ri flessa. Le im m agini per luce riflessa, com e quelle prodotte sui m o n ito r CRT, sono create m e diante la sovrapposizione di tre colori prim ari additivi, il rosso, il verde e ii blu. L e im m agini per luce riflessa, com e le fotografie a colori e le im m agini di riviste su carta lucida, assor bono alcune lunghezze d ’o nda di luce e riflettono le restanti. Q ueste im m agini sono create dalla sovapposizione di tre colori prim ari sottrattivi, il ciano (com pletam ente assorbito dal rosso), il giallo (com pletam ente assorbito dal blu) e il m agenta (com pletam ente assorbito dal verde). In teoria ogni colore p uò essere rip ro d o tto m ischiando i colori ciano, giallo e m a genta, ma in pratica è difficile produrre inchiostri sufficientem ente puri da ottenere un vero nero. Per questo m otivo quasi tu tti i sistemi di stam pa a colori utilizzano q u attro colori: il ciano, il giallo, il m agenta e il nero, e sono chiam ati stam panti CM YK (dalle iniziali inglesi dei q u attro colori, con K che sta per blacK , nero). Per rappresentare i colori i m o n ito r usano, al contrario, luce trasmessa c il sistem a RGB. L’insiem e com pleto di colori rappresentabili da uno scherm o o da una stam pante è chia maro gam ut, cioè gam m a dei colori. N essun dispositivo ha u n a gam m a di colori che cor risponde a quelli del m o n d o reale, dato che ogni colore può al m assim o assumere 25 6 in tensità, che prod u co n o in totale solo 16.777.216 colori discreti. A causa di alcune im perfe zioni d o v u te alla tecnologia, il n u m ero cotale di colori si riduce ulteriorm ente e quelli ri m anenti non sono neanche d istribuiti in m odo uniform e nello spettro dei colori. Inoltre la percezione dei colori n on dipende solo dalle leggi della fisica, m a è determ inata in buona parte an ch e dal funzionam ento dei coni e dei bastoncelli dell’occhio um ano. D i conseguenza si vede che non è affatto banale convertire un’im m agine a colori che appare correttam ente sullo scherm o in un identica im m agine stam pata. I problem i prin ci pali che si in co n tran o in questo processo sono i seguenti: 1. i m o n ito r a colori usano luce trasmessa, m entre le stam panti a colori usano luce riflessa 2. i C R T generano 256 intensicà per colore, m entre le stam panti usano i m ezzitoni 3. i m o n ito r hanno un fondo nero, m entre la carta ha un colore chiaro
4. le gam m e dei colori RGB e C M Y K sono diverse. Per o tten ere im m agini stam pate che co rrisp o n d an o alla realtà (e anche alle im m agini a scherm o) è necessario calibrare i dispositivi, utilizzare software sofisticati e affidarsi a una considerevole esperienza da parte dell’u tente. Le cinque tecnologie di stam pa attualm ente in uso si basano sul sistema CM YK. A livello p iù basso troviam o le stam p an ti a colori a getto d ’inchiostro. Esse funzionano com e quelle m onocrom atiche, anche se h anno q u attro cartucce (per i colori C , M , Y c K) al posto di una sola; forniscono a u n basso prezzo risultati di buona qualità per la grafica e risultati ac cettabili p er le fotografie (le stam panti sono econom iche, m a n o n le cartucce). Per ottenere risultati m igliori bisognerebbe utilizzare can e e inchiostri speciali. Esistono due tipi d ’inchiostro: a base di coloran ti e a pigm enti. 1 prim i consistono in coloranti di luiti in un liquido, pro d u co n o colori lum inosi e fluiscono facilm ente, m a il loro principale svantaggio è quello di sbiadirsi q u an d o sono esposti a radiazioni ultraviolette, com e quelle della luce solare. I secondi co ntengono invece delle particelle solide di pigm ento sospese in
2.4
Input/Output
113
un liquido che evapora dalla carta depositando il colore. Q uesti inchiostri no n si sbiadiscono con il tem po, m a non sono lum inosi q u an to quelli basati su coloranti e le particelle di pig m ento h a n n o la tendenza a bloccare gli ugelli, ren d en d o ne necessaria una periodica pulizia. Per stam pare fotografie è necessario usare u n tipo di carta lucida o p atinata appositam ente progettata per trattenere le gocce d ’inchiostro e im pedire che si spandano eccessivamente. U n gradino sopra le stam panti a getto d ’inchiostro troviam o le stampanti a inchio stro solido che co ntengono q u attro speciali inchiostri a cera solidificati in blocchi che ven gono successivam ente sciolti all’intern o di serbatoi riscaldati. Per queste stam panti il tem po di attesa all’accensione p uò raggiungere i 10 m in u ti, per consentire lo scioglim ento dei bloc chi d’inchiostro. L’inchiostro caldo viene spruzzato sulla carta, dove si solidifica e si fonde con essa grazie all'utiiizzo di due rulli rigidi. Il terzo tipo di stam pante a colori è quella laser. F unziona com e la sua “cugina” m onocrom atica, tran n e per il fatto che vengono definite q u attro diverse im m agini C , M , Y e K trasferite su un rullo usando q u attro to n er d istinti. D ato che l’intera bitm ap deve essere ge nerata prim a della stam pa, un’im m agine da 1200 x 1200 dpi per una pagina di 80 pollici quadrati richiede 115 x IO6 pixel. Per m em orizzare la bitm ap nella stam pante, utilizzando per esem pio 4 bit/pixel, sono necessari 55 M B , senza considerare la m em oria richiesta dai processori interni, dal repertorio dei caratteri, ecc. Per questo m otivo le stam panti laser a co lori sono costose; la loro velocità di stam pa è però elevata, la qualità è alta e i colori delle im m agini sono stabili nel tem po. Il quarto tipo di stam p an te a colori è la stampante a getto di cera. Essa ha un am pio nastro rivestito di q u attro inchiostri a cera e suddiviso in settori lunghi q u an to la larghezza della pagina. Q u a n d o la carta passa sotto il nastro migliaia di clem enti riscaldanti sciolgono la cera, che si fonde con la carta sotto form a di pixel utilizzando il sistem a CM YK . U na volta le stam pan ti a cera erano la principale tecnologia di stam pa a colori, m a ora stanno per es sere sostituite da altri tipi i cui m ateriali di consum o sono più econom ici. L’ultim o tipo di stam p an te a colori è la stampante a sublimazione. A nche se il ter m ine ha u n che di freudiano, fisicam ente indica il passaggio dallo stato solido a quello gas soso, senza passare da quello liquido. U n n o to m ateriale che sublim a è il ghiaccio secco (dios sido di carbonio ghiacciato), u n altro è lo zolfo. In u n a stam pante a sublim azione un ele m ento m obile co n tenente i coloranti C M Y K passa sopra una testina di stam pa in cui vi sono migliaia di elem enti riscaldanti program m abili; i coloranti vengono vaporizzati e assorbiti da una carta speciale collocata vicino alla testina. C iascun elem ento riscaldante può produrre 25 6 livelli di tem peratura; m aggiore è la tem peratura, m aggiore è la q u an tità di colorante che si deposita e q u in d i l’intensità del colore. D iversam ente da tu tte le altre stam panti a co lori n o n è necessario ricorrere alla tecnica dei m ezzitoni, dato che è possibile creare una gamma quasi co n tin u a di colori. D i solito le stam pati fotografiche di piccole dim ensioni usano il processo di sublim azione per creare im m agini fotografiche altam ente realistiche su carta spe ciale (e costosa).
2.4.5
Apparecchiature per le telecomunicazioni
Al giorno d ’oggi la m aggior p arte dei calcolatori è connessa a u n a rete d i calcolatori, che spesso è Internet. In questo paragrafo descriverem o com e funzionano le apparecchiature che p erm ettono l’accesso a queste reti.
114
Capìtolo 2
Organizzazione dei sistemi di calcolo
Modem D ato che l’uso dei calcolatori si ir diffuso fortem ente negli ultim i anni, è sem pre più com une che d u e co m p u ter debbano com unicare fra loró. M olti, per esem pio, h an n o un P C a casa e lo utilizzano per com unicare con il loro calcolatore al lavoro, con un Internet provider op pure con u n sistem a bancario on-line. In m olti casi è la linea telefonica a perm ettere la co m unicazione fisica tra d u e sistemi. U na linea telefonica non è adatta a trasm ettere i segnali di un calcolatore, che di solito rappresentano il bit 0 con 0 volt e il bit 1 con 3 o 5 volt, come mostra la Figura 2.37(a). Q uando sono trasmessi su una linea telefonica progettata per la voce, i segnali a due livelli subiscono una notevole distorsione, provocando di conseguenza errori di trasmissione. Tuttavia un se gnale dalla form a sinusoidale e con una frequenza che varia tra 1000 e 2000 H z può essere tra smesso con una distorsione relativam ente piccola; l’uso di questo segnale, chiam ato portante, è alla base della maggior parte dei sistemi di telecomunicazione. D ato che le pulsazioni di u n ’onda sinusoidale sono conosciute a priori, una sinusoide perfetta n o n trasm ette alcuna inform azione. V ariandone però l'am piezza, la frequenza o la fase è possibile trasm ettere u n a sequenza di 1 o di 0, com e m ostra la Figura 2.37. Q uesto processo è conosciuto con il term in e di m odulazione; nella m od u lazion e d ’am piezza [vedi Figura 2.37(b)] si utilizzano due diverse tensioni per rappresentare rispettivam ente 1 valori 0 e 1. Se sì ascoltasse la trasm issione di dati digitali a una velocità m olto bassa si sentirebbe un forte ru m o re p er i valori 1 c nessun rum ore per i valori 0.
Tempo------- *-
V2
(a) o Cj VI O
0 1 0 0 1 0 1 1 0 0 0 1 0 0
_TLJi_r
WWW
(b)
! Ampiezza ! bassa
Bassa ; frequenza
(C)
/ZVW VW VW \ K A Cambiamento di fase
Figura 2.37
Trasmissione bit a bit della stringa 01001011000100 su una linea telefonica. (a) Segnale a due livelli, tb) Modulazione d'ampiezza, (c) Modulazione di frequenza, (d) Modulazione di fase.
2.4
Inpul/Output
115
N ella m o d u la z io n e d i fre q u e n z a [vedi Figura 2 .37(c)] la tensione rim ane a u n livello costante, m a la frequenza della portan te cam bia in corrispondenza dei valori 1 e 0. Se si ascol tassero i dati digitali m odulari rispetto alla frequenza si sentirebbero due toni distinti, in cor rispondenza dei valori 0 e 1. La m odulazione di frequenza è spesso indicata con il term ine m o d u la z io n e (n u m erica) d i fre q u e n z a ( firequency shift keytng). N ella m o d u la z io n e d i fase [vedi Figura 2.37(d)] l’am piezza e la frequenza n o n cam biano, m a la fase della p o rtan te è invertita di 180 gradi q u an d o i dati passano da 0 a 1 o vi ceversa. In sistemi a m odulazione di fase più sofisticati la fase della po rtan te cam bia im provvisam ente di 4 5 , 135, 225 o 315 gradi all’inizio di ogni intervallo di tem po, in m odo da poter rappresentare 2 b it per ogni intervallo; questa codifica viene chiam ata m o d u la z io n e a c o p p ia d i b it. U n o sfasam ento della fase di 4 5 gradi potrebbe rappresentare per esem pio 00, u n o di 135 gradi potrebbe rappresentare 01, e così via. Esistono anche altri schem i che perm etto n o d i trasm ettere 3 o più b it p er intervallo. Il num ero di intervalli di tem po (cioè il num ero di potenziali cam biam enti del segnale al secondo) è chiam ato b a u d . Se si utiliz zano 2 o p iù b it per intervallo, il valore della velocità in bit sarà maggiore di quella in baud; è un errore m o lto com u n e confondere queste d u e u n ità di m isura. Se i dati da trasm ettere consistono in una serie di caratteri a 8 bit, potrebbe essere co m odo disporre di una connessione in grado di trasm ettere sim ultaneam ente 8 bit. Per otte nere ciò servirebbero 8 coppie d i fili, m a, d ato che le linee telefoniche forniscono un solo canale, i bit devono essere spediti in m o d o seriale, uno d o p o l’altro (o in gruppi di due se si usa la m odulazione a coppia di bit). C o n il term ine m odem si indica il dbpositivo che ri ceve d a u n calcolatore i caratteri sotto form a di segnali a due livelli, un b it alla volta, e che trasm ette i bit in gruppi di u no o d u e utilizzando una m odulazione di ampiezza, di frequenza o di fase. D i solito si fa precedere ogni carattere a 8 bit da un bit d ’inizio e lo si fa seguire da un b it di fine, in m odo da m arcarne le estrem ità; in questo m odo ogni carattere richiede 10 bit. Un m odem in fase di trasm issione spedisce i singoli b it di un carattere a intervalli di tem p o regolari. U n a velocità d i 9 6 0 0 baud significa p er esem pio che il segnale cam bia ogni 104 us. Si utilizza poi u n m odem in ricezione per convertire una po rtan te m odulata in strin ghe binarie. D ato che i b it giungono al ricevente a intervalli di tem po uniform i, il m odem determ ina l’inizio del carattere e poi sincronizza il suo orologio per sapere q u ando deve cam pionarc la linea per leggere i b it in entrata. I m odem m oderni funzionano a una tasso di trasferim ento dati com preso tra 2 8.800 e 5 7.600 b it/s, e a u n tasso in baud generalm ente m olto più basso. Per p o ter spedire più bit per baud, si usa una com binazione di tecniche diverse, m o dulando ampiezza, frequenza e fase. Q uasi tu tti questi m odem sono fu ll-d u p lex , il che significa che possono trasm ettere allo stesso tem po in entram be le direzioni (utilizzando frequenze diverse). A l contrario i m o dem e le linee di trasm issione che in un d ato istante possono trasm ettere in una sola dire zione sono chiam ate h alf-d u p lex . Le linee che possono trasm ettere in una sola direzione sono invece chiam ate sim plex.
Digital subscriber line Q u a n d o le società telefoniche riuscirono a raggiungere la velocità di 56 K bps, si co m p lim en taro n o tra loro con grande entusiasm o. N el frattem p o però l’ind u stria della T V via cavo offriva già velocità superiori a 10 M b p s su cavi condivisi e la T V satellitare scava rag-
Capìtolo 2
116
Organizzazione dei sistemi di calcolo
giun g en d o sistem i da 50 M bps. D a to che l’accesso a In te rn e t aveva assunto un’im portanza sem pre m aggiore nei loro affari, le cosid d ette telco s (da telephone companies, com pagnie telefoniche) co m in ciaro n o a rendersi c o n to ch« avevano bisogno di un p ro d o tto p iù com petitivo risp etto alle linee dial-up. La loro risposta fu l’offerta di u n nuovo servizio di ac cesso digitale a In tern et; i servizi che offrono una larghezza di banda m aggiore rispetto al servizio telefonico stan d ard sono spesso ch iam ati a b a n d a la rg a ( broadband), anche se in realtà il term in e n o n ha u n vero significato tecnico, m a è p iù che altro utilizzato a fini prom ozionali. All’inizio vi erano m olte offerte che si sovrapponevano e che rientravano, al variare di x, sotto il n o m e generale di x D S L ( Digital Subscriber Line). In seguito descriverem o il ser vizio A D S L (Asymmetric DSL, D SL asim m etrica), destinato con ogni probabilità a diven tare il p iù diffuso. D ato che lo sviluppo della A D SL è ancora in corso e no n sono stati de finiti tu tti gli standard, alcuni dei dettagli seguenti potrebbero cam biare in futuro; ciono nostante l’im m agine che ne verrà d ata dovrebbe rim anere sostanzialm ente valida. Per mag giori inform azioni riguardo la A D SL si veda (Sum m ers, 1999 e Vetter et al., 2000). La lentezza dei m odem deriva dal fatto che i telefoni sono stati inventati per traspor tare la voce um ana c l’intero sistem a c stato atten tam ente ottim izzato a questo scopo e i dati hanno sem pre interpretato il ruolo dei “fratellastri”. Il cavo che collega un abbonato alla com pagnia telefonica, chiam ato ciclo locale, di solito viene lim itato a 3 0 0 0 H z. Q uesto vincolo, che lim ita anche la velocità di trasferim ento dati, viene o tten u to m ediante un filtro che si trova nell’ufficio della com pagnia telefonica. La larghezza di banda reale del ciclo locale di pende dalla sua lunghezza e p u ò raggiungere 1,1 M H z per distanze di pochi chilom etri. La Figura 2.38 m ostra l'approccio più com une nell’ofFerta del servizio ADSL. Q uello che in pratica viene fatto consiste nel suddividere il ciclo locale in 256 canali indipendenti di 4 3 1 2 ,5 H z ciascuno. Il canale 0 è usato per il servizio telefonico tradizionale, P O T S (Plain Old Telephone Service). I canali 1-5 n on sono utilizzati e servono a m antenere sepa rati la voce e i dati in m odo che non interferiscano tra loro. Dei 250 canali rim anenti, uno è usato per il controllo del traffico in uscita, un altro per il controllo del traffico in entrata, m entre gli altri sono a disposizione per la trasmissione dei dati. U na AD SL corrisponde quindi a 250 m odem . In teoria ciascuno dei canali rim an en ti p u ò essere utilizzato per un flusso dati fùllduplex, ma in pratica le arm oniche, le interferenze e altri effetti m antengono i sistem i reali m olto al di sotto di questo dato teorico. Spetta al fornitore di servizi In te rn et determ inare q u a n ti canali sono usati in uscita e q u a n ti in entrata. D a to che la m aggior p arte degli utenti
V oce
Figura 2.38
F lu sso in u s c ita
Funzionamento di una ADSL.
F lu sso in e n tra ta
2.4
Com m u tatore
audio
Input/Output
117
Codificatore/
Divisore
linea telefonica
i Calcolatore
s DSLA M
M M odem ADSL Im p u n to della compagnia telefonica
Figura 2.39
Ethernet
Edificio ddl'u ten te
Tìpica configurazione dei dispositivi per la ADSL.
scarica più dati di q u an ti n o n ne trasm etta, la m aggior parte dei fo rn ito ri di servizi alloca l’8 0 % -9 0 % della larghezza di b a n d a al canale in en trata (anche se u n a suddivisione 50-50 tra i d u e canali sarebbe tecnicam ente possibile). A questa scelta si deve la lettera “A” nell’acronim o A D SL. U na suddivisione p iu tto sto com une prevede di utilizzare 32 canali in uscita e gli altri in entrata. All’in tern o di ogni canale si controlla costantem ente la qualità della linea e, se neces sario, si m odifica la velocità di trasferknento dati: per questo m otivo canali differenti pos sono avere velocità diverse. I dati vengono sp editi con una com binazione d i m odulazione di am piezza e di fase, che p erm ette di trasm ettere fino a 15 bit per baud. Per esem pio, con 224 canali in en trata e 15 b it/b a u d a 4 0 0 0 baud, si ottiene una larghezza di ban d a in entrata di 13,44 M bps. In pratica, il rapp o rto tra segnale e rum ore non è mai abbastanza b u o n o per ottenere questa velocità, m a su cicli ad alta qualità e su distanze brevi è possibile raggiun gere velocità di 8 M bps. La Figura 2 .3 9 m ostra una tipica organizzazione di una A D SL. In questo schem a l’u ten te o un tecnico della com pagnia telefonica devono installare un dispositivo d ’interfaccia, N 1D (Network Interface Device) presso l’edificio del cliente. Q uesta piccola scatola di pla stica segna la fine della pro p rietà della com pagnia telefonica e l’inizio di quella dell’utente. V icino al N ID (o talvolta co m b in ato con quest’ultim o) è presente un d iv iso re ( splitter), cioè un filtro analogico che divide la banda 0 -4 0 0 0 H z (per il servizio telefonico tradizionale) dai dati. Il segnale P O T S è instradato verso il telefono o il fax esistenti, m entre il segnale dei dati è instradato verso un m odem AD SL. Il m odem A D SL è un processore di segnale digi tale im postato appositam ente per funzionare com e 250 m odem in parallelo a diverse fre quenze. D a to che la m aggior parte dei m odem A D SL attuali è esterna, il calcolatore deve essere connesso attraverso u n collegam ento ad alta velocità. D i solito ciò si ottiene inserendo una scheda E thernet (la p iù diffusa tra le reti locali) nel calcolatore e creando una piccola
118
Capitolo 2
Organizzazione dei sistemi di calcolo
E th ern et a due n o d i che com prende soltanto il calcolatore e il m odem A D SL. A volte si uti lizza una p o rta U SB al posto della E thernet, m a in fu tu ro saranno senza d u b b io disponibili schede specifiche per m odem ADSL. All’altra estrem ità del cavo, presso la com pagnia telefonica, è installato un altro divi sore. Q u i la parte del segnale relativa alla voce è separata tram ite un filtro e spedita verso un norm ale co m m u tato re p er la voce. I segnali a frequenza m aggiore di 2 6 k H z sono instradati verso un nuovo tip o di dispositivo, chiam ato D SL A M (Digital Subscriber Line Access Multiplexer), che contiene lo stesso tip o di processore di segnale digitale all’in tern o del m odem A D SL. D o p o che il segnale digitale è stato riconvertito in u n flusso di bit, si creano i pac chetti di dati da spedire all’ISP.
Internet via cavo O ggi m olte società di T V via cavo offrono l’accesso a In tern et attraverso i propri cavi. D ato che la tecnologia differisce significativam ente da quella della A DSL, vale la pena analizzarla brevem ente. In ogni grande città c’è u n a sede principale dell’operatore via cavo, m entre, sparse sul territorio, ci sono u n gran nu m ero di scatole piene di co m ponenti elettronici, chiam ate sta z io n i d i testa. Le stazioni di testa sono connesse alla sede principale da fibre ottiche o da cavi con un’alta larghezza di banda. D a ciascuna stazione di testa p arto n o dei cavi che raggiungono centinaia di case e uf fici e i clienti si collegano al cavo che passa vicino alla p ro p ria abitazione. C entinaia d i utenti condividono quindi uno stesso cavo che parte dalla stazione di testa e la cui larghezza di banda, in genere, è di circa 750 M H z. Q u esto sistem a è radicalm ente differente dalla A D SL dove gli u ten ti h a n n o un cavo privato (cioè non condiviso) che li connette alla sede della com pagnia telefonica. Tuttavia, all’atto pratico, n o n vi è u na gran differenza tra avere il proprio canale a 1,1 M H z verso la sede della com pagnia telefonica e dover condividere lo spettro di 2 0 0 M H z di u n cavo connesso a una stazione di testa con altri 400 utenti, m età dei quali n o n lo usa nello stesso istante. C iò significa però che u n utente di In tern et via cavo avrà u n servizio m igliore alle 4 di m attina, p iu tto sto che alle 4 di pom eriggio, m entre le prestazioni del servizio A D SL sono costanti per tu tto il giorno. C h i voglia avere u n servizio In tern et via cavo dalle o ttim e prestazioni dovrebbe considerare l’ipotesi di trasferirsi in u n quartiere re sidenziale (gli edifici sono lontani gli un i dagli altri e quindi ci sono pochi clienti per cavo) o ppure in un quartiere povero (nessuno pu ò perm ettersi un servizio Internet). Il fatto che il cavo sia un mezzo condiviso pone il grande problem a di determ inare chi p u ò spedire dati, q u an d o e a quale frequenza. Per vedere com e funziona tu tto ciò, occorre prim a descrivere brevem ente com e funziona la T V via cavo. Nel N o rd Am erica i canali te levisivi via cavo occupano di solito l’intervallo tra 50 e 550 M H z (tranne per le frequenze delle radio FM com prese tra 88 e 108 M H z). Q uesti canali h an n o u n a larghezza di 6 M H z, com prese le bande di sicurezza necessarie per prevenire la sovrapposizione tra canali conti gui. In E uropa lo schem a di allocazione è sim ile, anche se la banda parte da 65 M H z e ogni canale occupa tra i 6 e gli 8 M H z, p er via della maggiore risoluzione richiesta dai sistemi PAL e SECA M . La parte inferiore della b an d a non è utilizzata per la trasm issione televisiva. Per aggiungere il servizio di In tern et, le società via cavo devono risolvere due problem i: 1. com e aggiungere l’accesso a In te rn e t senza interferire con i program m i T V 2. com e ottenere u n traffico bidirezionale, d ato che gli am plificatori sono per loro natura unidirezionali.
2.4
Input/Output
119
Le soluzioni ad o ttate sono le seguenti. I cavi m oderni funzionano bene anche oltre i 750 M H z. I canali in uscita (cioè dall’uten te alla stazione d i testa) sono collocati nella banda com presa tra 5 e 4 2 M H z (leggerm ente p iù alta in E uropa), m entre il traffico in en trata (cioè dalla stazione di testa all’utente) utilizza la parte alta della banda totale (Figura 2.40). O cco rre n o tare che, d a to che i segnali televisivi sono tu tti in en trata, è possibile u ti lizzare am plificatori in uscita solo nella regione tra 5 e 42 M H z e am plificatori in e n tra ta che lavorano dai 54 M H z in su, com ’è m o strato nella figura. D i conseguenza si o ttie ne u n ’asim m etria tra le b an d e in e n tra ta e quelle in uscita, dato che è d isponibile una re gione d i sp ettro sopra le frequenza d ed icata alla televisione m aggiore che non al di sotto. D ’altra parte il traffico è p rin cip alm en te in e n trata e q u in d i ciò n o n im pensierisce né ra t trista gli o p erato ri via cavo. D ’altra parte, com e abbiam o già visto, anche le com pagnie telefoniche forniscono spesso u n servizio d i D SL asim m etrico, senza che ve ne sia alcuna esigenza tecnica. L’accesso a In tern et richiede un apposito m odem , che abbia d u e interfacce: u na verso il calcolatore e l’altra verso il cavo della rete. L’interfaccia tra il calcolatore e il m odem via cavo è sem plice e di solito si tratta d i una scheda E thernet, com e nel caso della A DSL. In futuro l’intero m odem potreb b e essere una piccola scheda inserita all’interno del calcolatore, allo stesso m odo dei m o d em in terni V.9x. L’altra interfaccia è invece p iù com plicata. U na gran parte dello standard via cavo è le gata all’ingegneria delle trasm issioni radio, u n argom ento che esula dallo scopo di questo li bro. Il solo aspetto che vale la pena sottolineare è che i m odem via cavo, com e quelli A D SL, sono sem pre attivi: stabiliscono u n a connessione n o n appena la m acchina viene accesa e la m antengono finché n o n viene spenta, dato che le tariffe degli operatori via cavo non d i p e n d o n o dal tem po di connessione. Per com prendere m eglio il loro funzionam ento, vediam o che cosa succede quan d o u n m odem via cavo viene collegato e acceso. Il m odem effettua una scansione dei canali in en trata p er cercare u no speciale pacchetto spedito periodicam ente dalla stazione di testa e che fornisce alcuni param etri di sistem a. N o n appena trova tale pacchetto il m odem com unica la propria presenza utilizzando uno dei canali in uscita. A questo p u n to la stazione di testa risponde assegnando al m o d em alcuni canali in entrata e in uscita; la stazione di testa può m odificare in un secondo m o m e n to tale assegnam ento p er bilanciare il carico di traffico q uan d o lo reputa necessario. 5 42 54 88 o/
\
108
TV FM
550
TV
750 MHz
Dati in entrata
Frequenze in entrata
Figura 2.40
Allocazione delle frequenze in un classico sistema di TV via cavo utilizzato per l'accesso a Internet.
120
Capitolo 2
Organizzazione dei sistemi di calcolo
Il m odem d eterm ina q u in d i la propria distanza dalla stazione di testa spedendo uno speciale pacchetto e calcolando q u an to tem po im pieghi per ricevere una risposta; questo pro cesso è chiam ato ran g in g . £ im portante che il rrtodem conosca questa distanza affinché possa regolare appropriatam ente l'utilizzo d i canali in uscita e per im postarne correttam ente la tem porizzazione. Q uesti canali sono divisi in intervalli tem porali chiam ati m in islo t; ogni pac chetto di dati in uscita deve entrare in uno o p iù minislot consecutivi. La stazione di testa com unica periodicam ente l’inizio di u n a nuova serie di minislot, m a, per via dei tem pi di propagazione sul cavo, questo segnale n o n è sentito sim ultaneam ente da tu tti i m odem . C on o scen d o la distanza che lo separa dalla stazione di testa ogni m odem p u ò calcolare q u an to tem po p rim a era stato in realtà spedito il prim o m inislot. La lunghezza dei minislot dipende dalla rete, m a una tipica lunghezza del cam po dati è di 8 byte. D u ran te l’inizializzazione la stazione di testa assegna a ciascun m odem un minislot da usare p er richiedere u n a p arte della larghezza di banda in uscita. In genere u n o stesso minislotv iene assegnato a più m odem , generando problem i di contesa. Q u an d o un calcolatore vuole spedire u n pacchetto, lo trasferisce al m odem , che richiede il num ero di minislot ne cessario; se la stazione di testa accetta la richiesta, spedisce u n a conferm a sul canale in en trata indicando al m odem quali minislot sono stati riservati per il suo pacchetto. Il pacchetto viene q u in d i spedito a partire dal minislot che gli è stato allocato ed è inoltre possibile uti lizzare un cam po dell’intestazione p er richiedere pacchetti aggiuntivi. Se invece si verifica una contesa per la richiesta dei minislot, non verrà spedita alcuna conferm a e il m odem aspetterà un tem po casuale prim a di riprovare. D opo ciascun fallimento, il tem p o casuale di attesa viene raddo p p iato di m odo che il carico si distribuisca meglio nel tem po q u an d o il traffico è m olto intenso. I canali in entrata sono gestiti in m aniera differente da quelli in uscita. Per prim a cosa, esiste u n solo m itten te (la stazione di testa) e q u in d i n o n ci pu ò essere contesa, e n o n c’è bi sogno dei minislot, che in realtà non sono altro che una m ultiplazione statistica a divisone di tem po. In secondo luogo, poiché il traffico in en trata è solitam ente m olto p iù grande di quello in uscita, si utilizza una dim ensione di 204 byte per tu tti i pacchetti. U n a parte di questi byte conten g o n o un codice a correzione di errore R eed-Solom on e altre inform azioni di servizio, lasciando solo 184 byte ai dati d d l’utcnte. Q uesti valori sono stati scelti per es sere com patibili con la televisione terrestre basata su M P E G -2, in m odo che la form atta zione dei canali della T V e di quelli del traffico in entrata sia la stessa. La Figura 2 .4 1 m ostra l’organizzazione logica delle connessioni. T o rn an d o alTinizializzazione del m o d em , dopo aver term inato l’operazione di ranging e o tte n u to i propri canali in uscita, quelli in en trata e l’assegnam ento dei minislot, il m odem è Ubero di iniziare a spedire pacchetti. Q u esti giungono alla stazione di testa, che li trasm ette via cavo su u n canale dedicato alla sede principale della com pagnia e qu in d i al fornitore di servizi (che p otrebbe essere la com pagnia stessa). Il prim o pacchetto serve a richiedere all'ISP un indirizzo di rete (tecnicam ente un indirizzo IP), assegnato dinam icam ente. Il m odem inol tre richiede, e ottiene, l’ora del giorno con grande precisione. II passo successivo riguarda la sicurezza. D ato che i cavi sono condivisi, chi lo volesse potreb b e leggere tu tto il traffico che passa da lui. Per questo m otivo il traffico viene intera m ente criptato in entram be le direzioni, p er evitare che qualcuno ficchi il naso (letteralm ente) nei dati dei propri vicini. U na parte della procedura d ’inizializzazionc serve a stabilire le chiavi di cifratura. A prim a vista si p otrebbe pensare che è im possibile che due estranei, la stazione
2.4
Input/O utput
121
9 M bps usando Q PSK e mirtisfoL da 8 byte
Figura 2.41
Tipici dettagli dei canali in entrata e in uscita nel Nord America.
di testa e il m odem , possano stabilire una chiave segreta alla luce del sole e davanti a m i gliaia di persone che li osservano. In realtà ciò è possibile, m a la tecnica utilizzata (l’algo ritm o D iffie-H ellm an) va oltre lo scopo di questo libro. Per u n ’analisi al riguardo si veda (K aufm an et al. 2002). Infine il m odem deve farsi identificare e fornire il proprio n um ero identificativo u n i voco sul canale sicuro. A questo p u n to I’inizializzazione è com pleta e l’utente può registrarsi presso ÌÌS P e com inciare a utilizzare il servizio. C i sarebbero m olte altre cose da dire a proposito dei m odem via cavo; alcuni signifi cativi riferim enti bibliografici sono (Adams e D uichinos, 2 0 0 1; D onaldson e Jones. 2001 e D urta-R oy, 2001).
2.4.6
Macchine fotografiche digitali
Le m acchine fotografiche digitali sono orm ai diventate una periferica del calcolatore, dato che i co m p u ter vengono sem pre più frequentem ente usati anche per la fotografia digitale. Spieghiam o brevem ente com e funziona. T u tte le m acchine fotografiche ha n n o una lente che form a nella parte posteriore, in tern am en te all’apparecchio, un’im m agine del soggetto in quadrato. In im a m acchina fotografica di tipo classico la parte posteriore è coperta da una pellicola su cui si form a u n ’im m agine latente nel m o m en to in cui viene colpita dalla luce; duran te lo sviluppo delle foto si può rendere visibile questa im m agine utilizzando dei co m posti chim ici. U na m acchina fotografica digitale funziona nello stesso m odo tranne per il fatto che al posto della pellicola c e u n a griglia rettangolare di C C D ( Charge-Coupled Device, “dispositivo ad accoppiam ento di carica”), sensibili alla luce (alcune m acchine fotografiche digitali usano i C M O S , m a n o i ci concentrerem o sui p iù com uni C C D ). Q u a n d o u n C C D è colpito dalla luce si carica elettricam ente in m odo proporzionale alla q u an tità di luce ricevuta. Q uesta carica può essere letta da un convertitore analogicodigitale e trasform ata in un valore com preso tra 0 e 255 (per gli apparecchi econom ici) o p pure tra 0 e 4 0 9 5 (per le m acchine fotografiche reflex digitali con un’unica lente). Il fun zionam ento è schem atizzato nella Figura 2.42. C iascun C C D produce un unico valore, ind ipendentem ente dal colore della luce che lo colpisce. Per form are un’im m agine a colori i C C D sono organizzati in gruppi d i q u attro elem enti. U n filtro d i B ayer è posizionato sopra il C C D per perm ettere d ie la luce rossa colpisca solo u no dei q u attro C C D in ciascun gruppo, la luce blu ne colpisca soltanto un
122
Capitolo 2
Organizzazione dei sistemi di calcolo
Un pixel è creato per mezzo di quattro CCD, uno rosso, uno biu e due verdi
L e n te
RAM
M e m o r i a f la s h
o m itro drive
Macchina fotografica digitale Figura 2.42
M acchina fotografica digitale.
altro e la luce verde t due restanti. Si utilizzano d ue elem enti per il verde, in qu an to è m olto p iù pratico utilizzare q u attro C C D per ogni pixel al posto di tre e perché l’occhio u m ano è p iù sensibile alla luce verde che alle luci rosse e blu. Q u a n d o un p ro d u tto re di m acchine fo tografiche digitali afferm a che un m odello ha, per esem pio, 6 m ilioni di pixel, sta m entendo. La m acchina h a 6 m ilioni di C C D , che corrisp o ndono a 1,5 m ilioni di pixel. L'immagine sarà letta com e una griglia di 2 8 2 8 x 2121 pixel (sulle m acchine a basso costo) oppure di 3 000 x 2 0 0 0 pixel (sulle SLR digitali), m entre i pixel aggiuntivi sono p rodotti per in terp o lazione dal softw are intern o alla m acchina fotografica. Q u a n d o viene p rem u to il pulsante p er scattare u n a foto il software com pie tre azioni: im posta la messa a fuoco, determ ina l’esposizione e calcola il bilanciam ento del bianco. La messa a fuoco autom atica funziona analizzando le alte frequenze dell’im m agine e m uovendo la lente finché n o n vengono massimizzate al fine di ottenere il m aggiore dettaglio possibile. L’esposizione è determ inata m isurando la luce che raggiunge i C C D e regolando di conse guenza il diafram m a della lente e il tem po di esposizione, d i m odo che l’intensità lum inosa corrisponda al p u n to m edio dell’intervallo gestito dai C C D . Il bilanciam ento del bianco con siste nel m isurare Io spettro della luce incidente c nel l'effettuare, successivamente, le neces sarie correzioni crom atiche. Successivamente l’im m agine viene letta dai C C D e m em orizzata com e una griglia di pixel nella m em oria interna della m acchina digitale. Le m acchine digitali SLR di livello pro fessionale, utilizzate dai fotografi professionisti, sono in grado dì scattare o tto fotogram m i ad alta risoluzione al secondo per 5 secondi; esse richiedono circa I G B di RAM in te rn a per salvare le im m agini prim a di poterle elaborare e m em orizzare in m odo perm anente. Le m ac chine fotografiche m eno costose h an n o una q u an tità di m em oria RAM leggerm ente m inore.
2.4
Input/O utput
123
N ella fase successiva alla cattu ra dell'im m agine, il software della m acchina effettua la correzione per il bilanciam ento del bianco, in m odo da com pensare le com ponenti rossastre o bluastre della luce (dovute per esem pio a u n soggetto in om b ra o all’uso del flash). In se guito applica u n algoritm o per la riduzione del rum ore e u n altro per com pensare i C C D difettosi. T enta poi di rendere l’im m agine più definita e m eno sfocata (a m eno che questa funzione n o n sia stata disabilitata) cercando i contorni e au m en tan d o l’intensità dei gradiente in to rn o a loro. Infine l’im m agine può essere com pressa per ridurre la q u an tità di spazio richiesta. Un form ato co m unem ente utilizzato è JP E G ( Joint Photographic Experts Group), che prevede l'applicazione della trasform ata di Fourier bidim ensionale e il taglio di alcune com ponenti ad alta frequenza. Q uesta trasform azione riduce il num ero di b it necessari a rappresentare l’im m agine, sacrificando però i dettagli più fini. Q u a n d o sono term inate tu tte le elaborazioni interne alla m acchina fotografica, l’im m agine viene m em orizzata, generalm ente su una m em oria flash o un hard disk rim ovibile di piccole dim ensioni chiam ato microdrive. La fase di post-elaborazione e la scrittura pos sono richiedere alcuni secondi per ciascuna im m agine. Q u an d o l’utente torna a casa può collegare la macchina fotografica digitale al calcolato re utilizzando di solito un cavo USB o FireWire. Le immagini vengono così trasferite dalla mac china fotografica al disco del calcolatore. Utilizzando program m i appositi, com e Adobe P hoto shop, l’utente può ritagliare l’im m agine, regolarne lum inosità, contrasto, bilanciam ento cro m atico, nitidezza e fuoco, rim uovere parti dell’im m agine e applicare num erosi filtri. Q u ando è soddisfatto del risultato l’utente p uò stam pare Ì file delle im m agini con una stam pante a co lori, spedirle via Internet allo stam patore oppure può riversarle su un C D -R O M o un D V D per archiviarle ed eventualm ente stam parle in u n secondo m om ento. In una m acchina foto grafica SLR la quandtà di potenza com putazionale, di RA M , di spazio su hard disk e di software necessario è notevole. II calcolatore non solo deve com piere tu tte le azioni descritte, m a anche com unicare in tem po reale con la C P U della lente e con la C P U del flash, ridisegnare l’im m agine sullo scherm o L C D e gestire tu tti i pulsanti, rotelle, luci, display e tasti della macchina. Si tratta di un sistema integrato estrem am ente potente, che spesso, in term ini di prestazioni, è paragonabile ai calcolatori desktop di qualche anno fa.
2.4.7
Codifica dei caratteri
O g n i calcolatore ha un insiem e di caratteri che, com e m inim o indispensabile, com prende le 26 lettere m aiuscole, le 26 lettere m inuscole, le cifre da 0 a 9 e un insiem e di sim boli spe ciali, com e spazio, p u n to , virgola, segno m eno e ritorno a capo. Per p o ter utilizzare questi caratteri nel calcolatore occorre assegnare loro un num ero: per esem pio a = 1, b = 2, ..., z = 26, + = 27, —= 28. La corrispondenza tra caratteri e n u m eri naturali costituisce u n c o d ice di c a ra tte ri. F. necessario che due calcolatori che com u nicano fra loro utilizzino lo stesso codice, altrim enti non saranno in grado di capirsi. Per questa ragione sono stati definiti alcuni standard, d i cui esam inerem o i due p iù im portanti.
ASCII U n codice am piam ente utilizzato si chiam a A S C II (American Standard Code for Information Interchange, “standard am ericano per lo scam bio d ’inform azioni”). I caratteri A SCII sono definiti da 7 bit, p erm etten d o cosi un totale di 128 caratteri distinti. La Figura 2.43 m ostra
124
Esa
Capitolo 2
Nome
Organizzazione dei sistemi di calcolo
Significato
Esa
Nome
Significato
0
NUl
Nullo
10
DLE
Uscita trasmissione (Data Link Escape)
1
SOH
Inizio intestazione (Start O f Heading)
11
DC1
Controllo periferica 1
2
STX
Inizio lesto (Start O fTextl
12
DC2
Controllo periferica 2
3
ETX
Fine testo (End Of Text)
13
DC3
Controllo periferica 3
4
EOT
Fine trasmissione (End O f Transmission)
14
DC4
Controllo periferica 4
5
ENQ
Interrogazione (Enquiry)
15
NAK
Riconsocimento negativo (Negative AcKnowledgement)
6
ACK
Riconoscimento (ACKnowledgement)
16
SYN
Annulla (SYNchronous Idle)
7
BEL
Campanello (BELL)
17
ETB
End of Transmission Block
8
BS
BackSpace
18
CAN
CANcel
9
HT
Tabulazione orizzontale (Horizontal Tabi 19
EM
Fine supporto (End of Medium)
A
LF
Riga nuova (Line Feed)
1A
SUB
Sostituisci (SUBstitute)
B
VT
Tabulazione verticale (Vertical Tab)
18
ESC
Esc (ESCape)
C
FF
Avanzamento carta/nuova pagina iForm Feed)
1C
FS
Separatore di file (File Separatori
D
CR
Ritorno a capo (Carriage Return)
1D
GS
Separatore di gruppi (Group Separator)
E
SO
Disinserzione (Shift Out)
1E
RS
Separatore di record (Record Separator)
F
SI
Inserzione (Shift In)
1F
US
Separatore di unità (Unit Separator)
Esa
Car
Esa
Car
Esa
Car
Esa
Car
Esa
Car
Esa
Car
20
Spazio
30
0
40
e
50
P
60
•
70
P
21
1
31
1
41
A
51
Q
61
a
71
q
»
32
2
42
B
52
R
62
b
72
r
t
33
3
43
C
53
S
63
c
73
s
22
23 24
$
34
4
44
D
54
T
64
d
74
t
25
%
35
5
45
E
55
U
65
e
75
u
26
&
36
6
46
F
56
V
66
f
76
V
27
1
37
7
47
C
57
w
67
8
77
w
28
(
38
8
48
H
58
X
68
h
78
X
29
)
39
9
49
1
59
Y
69
1
79
y
2A
•
3A
:
4A
1
5A
z
6A
j
7A
z
2B
+
3B
;
4B
K
5B
ì
6B
k
7B
[
2C
l ■
3C
4E
N
5E
*
6E
n
71
~
3F
r
4F
O
5F
6F
o
7F
DEL
2D 2E 2F
ì
Figura 2.43
Caratteri ASCII.
-
2.4
Input/Output
125
il codice A SC II. I codici com presi tra 0 e 1F (in esadecimale) sono caratteri di controllo e non vengono stam pati. M olti dei caratteri di co ntrollo A SCII sono pensati per la trasm issione di dati. U n m es saggio potreb b e per esem pio consistere di u n carattere S O H ( Start o f Header, “inizio inte stazio n e”), un’intestazione, un carattere ST X (Start o f Text, “inizio testo”), il testo stesso, un E T X (End o f Text, “fine testo”) e infine un carattere E O T ( End o f Transmission, “fine tra sm issione”). In realtà i messaggi spediti sulle linee telefoniche e sulle reti sono form attati in m aniera leggerm ente differente e i caratteri di controllo A SCII pensati per la trasmissione n o n sono praticam ente più utilizzati. I caratteri A SC II stam pabili co m p ren d o n o lettere m aiuscole e m inuscole, cifre, sim boli di punteggiatura e alcuni sim boli m atem atici. U N IC O D E Il m ercato dei calcolatori è nato e cresciuto principalm ente negli Stati U niti, il che ha por tato a u n insiem e d i caratteri, quello A S C II, adatto alla lingua inglese, m a m eno per altre lingue. I francesi h an n o bisogno degli accenti (per esem pio, système), i tedeschi dei segni dia critici (per esem pio, fiir), e così via. A lcune lingue europee han n o delle lettere che non sono com prese nel codice A S C II, com e la tedesca K e la danese 0 . A ltre han n o alfabeti com ple tam ente differenti (per esem pio, il russo o l’arabo) e alcune lingue a d d irittu ra n o n hanno alfabeto (per esem pio, il cinese). D ato che i co m p u ter si sono diffusi nei q u attro angoli del m o n d o e i rivenditori d i software desiderano vendere i propri pro d o tti anche nei paesi in cui la m aggior p arte della gente n o n parla inglese, è sorta la necessità di un diverso insieme di caratteri. II prim o tentativo di espandere il codice A SCII fu il codice IS 6 46, che aggiungeva ul teriori 128 caratteri, trasform andolo così in u n codice a 8 b it chiam ato L atin -1 . I caratteri aggiuntivi erano per lo più lettere latine accentate o con segni diacritici. Il tentativo succes sivo fu il codice IS 8859 che introdusse il concetto di code page, un insieme di 256 carat teri specifico d i u n a particolare lingua o di u n g ru p p o di lingue. Il codice IS 8859-1 corri sponde a L atin-1, il codice IS 8859-2 gestisce alcune lingue slave (per esem pio, il ceco e il polacco), m entre il codice IS 8 8 5 9 -3 contiene i caratteri richiesti dal turco, dal maltese, dal l’esperanto, dal galiziano e da altre lingue. Il problem a principale del code page è che il software deve tener traccia di quale pagina è attiva, rendendo tra l’altro im possibile m i schiare lingue diverse in uno stesso docu m en to ; inoltre questo schem a non copre né il giap ponese né il cinese. U n gruppo di p ro d u tto ri di calcolatori ha deciso di risolvere il problem a form ando un consorzio per creare un nuovo sistema, chiam ato U N IC O D E , che successivamente è diventato uno Standard Internazionale (IS 10646). O ggi U N IC O D E è su p p o rtato da alcuni linguaggi di program m azione (per esem pio, Java), da alcuni sistemi operativi (per esem pio, W indow s XP) e da m olte applicazioni. D ato che il m ercato dei calcolatori tende a diventare sem pre p iù globale è m olto probabile che questo standard venga accettato sem pre di più. L’idea alla base d i U N IC O D E consiste nell’assegnare a ogni carattere u n valore a 16 bit, ch iam ato c o d e p o in t; n o n esistono q u in d i caratteri o sequenze speciali com poste da più byte. Il fatto che ogni sim bolo sia co m p o sto da 16 b it rende p iù sem plice la scrittura di program m i.
126
Capitolo 2
Organizzazione dei sistemi di calcolo
U tilizzando sim boli a 16 bit, U N IC O D E ha 6 5 .536 code point. D a to che le lingue di tu tto il m o n d o usano com plessivam ente circa 2 0 0 .000 sim boli, i code point sono una risorsa scarsa che deve essere allocata con m olta attenzione. Circa m età dei code p o in t sono già stati assegnati e il consorzio U N IC O D E valuta in continuazione nuove proposte per i rim anenti. Per far sì che il codice U N IC O D E fosse accettato più velocem ente, il consorzio ha deciso intelligentem ente di utilizzare Latin-1 per i code point compresi tra 0 e 255, rendendo più facile la conversione era A SC II e U N IC O D E . Inoltre, per evitare uno spreco eccessivo di code point, ogni segno diacritico ha il suo proprio code point e spetta al software com binarlo con la lettera vicina per form are u n nuovo carattere. Lo spazio dei code point è diviso in blocchi, m ultipli di 16. A ll’in terno di U N IC O D E a ciascun alfabeto principale è assegnata u n a sequenza di zone consecutive; alcuni esempi (e il nu m ero di code point allocati) sono il latin o (336), il greco (144), il cirillico (256), l’ar m en o (96), l’ebraico (112), il devanagari (128), il gu rm u k h i (128), l’oriya (128), il telugu (128) e il k annada (128). Si noti che a queste lingue sono stati assegnati più code point delle loro lettere. Q u e sta scelta deriva in p arte dal fatto che m olte lingue h a n n o p iù form e per ciascuna lettera; ciascuna lettera inglese ha, per esempio, due forme: quella m inuscola e quella M A IU S C O L A . A lcune lingue h a n n o tre o q u a ttro form e, talvolta d ip en d en ti dalla posi zione della lettera all’in tern o di u n a parola, se si trova cioè all’inizio, nel mezzo o alla fine. I code point, oltre alle lettere di questi alfabeti, sono stati assegnati anche ai segni dia critici ( 1 12), ai sim boli di punteggiatura (112), ai caratteri soprascritti e sottoscritti (48), ai sim boli m atem atici (256), alle form e geom etriche (96) e ai sim boli ornam entali (192). D o p o questi code point ci sono i sim boli richiesti dal cinese, dal giapponese e dal co reano. P rim a ci sono 1024 sim boli fonetici (cioè il katakana e il bopom ofo) e poi gli ideo gram m i H an (20.992), usati sia dal cinese sia dal giapponese, e infine le sillabe coreane Hangul (11.156). 64 0 0 code point sono inoltre stati allocati per uso locale, di m odo che gli u ten ti pos sano definire caratteri speciali per usi particolari. A nche se U N IC O D E risolve m olti problem i legati all’internazionalizzazione, esso non risolve (e non cerca di risolvere) tu tti i problem i globali. Per esem pio, m entre le lettere del l’alfabeto latino sono nel loro ordine corretto, gli ideogram m i H an non sono ordinati com e nel dizionario. D a ciò ne consegue che u n program m a inglese può ordinare alfabeticam ente le parole catc controllando i valori U N IC O D E delle loro iniziali, m entre lo stesso non può però essere fatto con un program m a giapponese, che necessita di tabelle esterne per ca pire quale sim bolo preceda l’altro. U n altro problem a è che con il tem po co n tin u an o ad apparire nuove parole. C in q u a n ta n n i fa nessuno parlava di applet, cyberspazio, gigabyte, laser, modem, smiley o videocassette. Se in inglese l’aggiunta di nuove parole n o n richiede nuovi code point, in giapponese sì. O ltre a nuove parole tecniche, c’è la richiesta di aggiungere alm eno 2 0.000 nuovi nom i personali (so p rattu tto cinesi) e di luoghi. I n on vedenti ritengono che il linguaggio Braille dovrebbe far p arte di U N IC O D E , così com e altri gruppi con particolari interessi (di tu tti i tipi) vorrebbero che ciò che percepiscono fosse codificato, di loro diritto, in code point. Il consorzio U N IC O D E analizza e valuta tu tte le nuove proposte. U N IC O D E utilizza lo stesso code point per i caratteri che, in giapponese e cinese, han n o u n aspetto simile, m a un significato differente o una scrittura leggerm ente diversa (com e se gli elaboratori di testo inglesi scrivessero "blue” com e “ blew" solo perché suonano
2.5
Riepilogo
127
allo stesso m odo). A lcune persone interpretano questo fatto com e un’ottim izzazione dovuta alla scarsità di code point, altri com e un esem pio di im perialism o culturale anglosassone (as segnare ai caratteri valori a 16 b it n o n era forse una scelta altam ente politica?). Per rendere la cosa ancora peggiore si pensi che u n dizionario giapponese com pleto contiene 50.000 kanji (nom i esclusi); avendo a disposizione soltanto 2 0.992 code point per gli ideogram m i H a n , è necessario com piere delle scelte. N o n tu tti i giapponesi ritengono che un consorzio di pro d u tto ri di calcolatori, anche se alcuni sono giapponesi, sia il foro ideale per prendere queste decisioni.
2.5
Riepilogo
I sistemi di calcolo sono costitu iti d a tre tip i di com ponenti: processori, m em orie e dispo sitivi di I/O . Il com p ito di un processore è quello di prelevare istruzioni, decodificarle ed eseguirle. Il ciclo preleva-decodifica-esegui p u ò sem pre essere descritto com e un algoritm o e, difatti, è spesso eseguito da u n in terprete software che funziona a u n livello inferiore. Per guadagnare velocità m olti calcolatori hanno una o più pipeline oppure un’architettura super scalare con più u n ità funzionali che lavorano in parallelo. I sistemi con più processori sono sem pre p iù diffusi. I calcolatori paralleli com pren d o n o gli array di processori, nei quali la stessa operazione è calcolata su più insiem i di dati allo stesso tem po, i m ultiprocessori, nei quali p iù C P U condividono una stessa m em oria, e i m ulticom puter, nei quali p iù calcolatori, ciascuno d o tato di una propria m em oria, com u nicano scam biandosi messaggi. Le m em orie possono essere classificate com e prim arie o secondarie. La m em oria pri m aria è utilizzata per contenere il program m a che viene eseguito in u n d ato m om ento. Il suo tem p o di accesso è breve, di poche decine di nanosecondi al massim o, e indipendente dall’indirizzo al quale si vuole accedere. Le cache riducono ulteriorm ente questo tem po di accesso. A lcune m em orie sono inoltre equipaggiate con codici a correzione d ’errore per m i gliorarne l’affidabilità. Le m em orie secondarie, al contrario, h a n n o tem pi di accesso m olto più lunghi (m illi secondi e più) e d ip en d en ti dalla posizione del dato che deve essere letto o scritto. Le più com uni m em orie secondarie sono i nastri, i dischi m agnetici e i dischi ottici. Esistono d i versi tipi di dischi m agnetici, tra i q u ali i floppy disk, i W inchester, gli ID E , gli SCSI e i R A ID . I dischi ottici co m p ren d o n o i C D -R O M , i C D -R e i D V D . I dispositivi di I/O sono utilizzati per trasferire inform azioni dal e nel calcolatore, e sono collegati al processore e alla m em oria m ediante u n o o più bus. A lcuni esempi com pren d o n o i term inali, i m ouse, le stam p an ti e i m odem . La m aggior parte dei dispositivi di I/O utilizza il codice di caraneri A SC II, anche se U N IC O D E sta rapidam ente guadagnando sem pre p iù consenso m an m ano che il m o n d o dei com puter si va globalizzando.
128
Capitolo 2
Organizzazione dei sistemi di calcolo
Problemi 1.
Consideriamo il funzionamento di una macchina con il percorso dati mostrato nella Figura 2.2. Supponiamo che il caricamento dei registri di input richieda 5 ns, l’esecuzione della ALU 10 ns e la memorizzazione del risultato nel registro 5 ns. Qual è il numero massimo di MIPS che può raggiungere questa macchina senza far ricorso alla pipeline?
2.
Qual è lo scopo del passo 2 nella lista del Paragrafo 2.1.2? Che cosa succederebbe se questo passo fosse omesso?
3.
Sul calcolatore 1 tutte le istruzioni richiedono 10 ns per essere eseguite. Sul calcolatore 2 esse richiedono invece 5 ns. Si può dire con certezza che il calcolatore 2 è più veloce? Si argomenti la risposta.
4.
Immaginiamo di progettare un calcolatore a singolo chip per un sistema integrato. II chip con terrà anche cuna la memoria e funzionerà alla stessa velocità della CPU senza alcuna penaliz zazione per l’accesso ai dati. Si esaminino i principi illustrati nel Paragrafo 2.1.4 e si dica se essi sono così importanti (ipotizzando che si desideri ottenere alte prestazioni).
5.
Un certo calcolo è altamente sequenziale, in quanto ogni passo dipende dai precedenti. Per que sta elaborazione sarebbe più appropriato un array di processori o un processore a pipeline? Si spieghi la scelta.
6.
Per competere con le macchine tipografiche appena inventate, un monastero medioevale decise di riprodurre libri scritti a mano in un gran numero di copie facendo lavorare insieme, in un'e norme stanza, numerosi amanuensi. L’abate pronunciava ad alta voce la prima parola del libro da riprodurre e tutti gli amanuensi la trascrivevano. L'abate pronunciava quindi la seconda pa rola e gli amanuensi la trascrivevano. Questo processo veniva ripetuto finché l’intero libro non era letto ad alta voce e copiato. Quale fra i sistemi con parallelismo a livello di processore de scritti nel Paragrafò 2.1.6 assomiglia più da vicino a questo sistema?
7.
Scendendo nei cinque livelli della gerarchia di memorie trattati nel testo, i tempi di accesso aumentano. Si faccia una ragionevole stima del rapporto del tempo di accesso dei dischi ottici rispetto a quello dei registri della memoria. Si assuma che i dischi siano sempre caricati nel lettore.
8.
Alla tipica domanda: “Credi al topolino dei dentini caduti?” i sociologi possono fornire tre ri sposte, sì, no e non so. In base a ciò la Società di Calcolatori Sociomagnetici ha deciso di co struire un calcolatore per elaborare i dati dei sondaggi. Questo computer ha una memoria tri naria, cioè ciascun byte (tryte?) consiste di 8 trit, ognuno dei quali può contenere i valori 0, 1 oppure 2. Quanti trit sono necesari per memorizzare un numero a 6 bit? Si dia un’espressione per il numero di trit necessari per memorizzare « bit.
9.
Si calcoli la velocità di trasferimento dati dell’occhio umano utilizzando le seguenti informa zioni. Il campo visivo è composto da circa IO6elementi (pixel). Ciascun pixel può essere ridotto alla sovrapposizione di tre colori primari, ciascuno dei quali ha 64 intensità. l a risoluzione tem porale è di 100 ms.
10. Si calcoli la velocità di trasferimento dati dell’orecchio umano usando le seguenti informazioni. Le persone possono sentire frequenze fino a 22 KHz. Per catturare tutta l’informazione conte nuta in un segnale sonoro a 22 KHz è necessario campionari il suono al doppio della frequenza, cioè a 44 KHz. Con ogni probabilità un campione a 16 bit è sufficiente per catturare la mag gior parte delle informazioni uditive (cioè l’orecchio non può distinguere più di 65.536 livelli d’intensità).
Problemi
129
11.
In tutti gli esseri viventi l’informazione genetica è codificata nelle molecole di DNA. Una mo lecola di DNA è una sequenza lineare dei quattro nudeotidi base: A, C, Ge T. Il genoma umano contiene approssimativamente 3 x IO9 nucleotidi sotto forma di circa 30.000 geni. Qual è la capacità totale (in bit) dell’infonnazione del genoma umano? Qual è la massima capacità d ’infor mazione (in bit) del gene medio?
12.
Un certo calcolatore può essere equipaggiato con 268.435.456 byte di memoria. Perché un pro duttore dovrebbe scegliere un numero così particolare, invece di un numero più facile da ri cordare come 250.000.000?
13. Si definisca un codice di Hamming a 7 bit con parità pari per le cifre comprese tra 0 e 9. 14. Si definisca un codice per le cifre comprese tra 0 e 9 la cui distanza di Hamming sia 2. 15.
In un codice di Hamming alcuni bit vengono “sprecati”, nel senso che sono utilizzati per ef fettuare il controllo e non per memorizzare l’informazione. Qual è la percentuale di bit spre cati per messaggi la cui lunghezza totale (dati + bit di controllo) è 2 " - 1? Si valuti numerica mente questa espressione per valori di n compresi tra 3 c 10.
16. Il disco mostrato nella Figura 2.19 ha 1024 settori per traccia e una velocità di rotazione di 7200 RPM. Qual è la velocità di trasferimento dati del disco per una singola traccia? 17. Un calcolatore ha un bus con un tempo di ciclo di 5 ns, durante il quale può leggere o scrivere dalla memoria una parola a 32 bit. Il calcolatore ha un disco Ultra4-SCSI che utilizza un bus e funziona a 160 MB/s. Solitamente la CPU preleva ed esegue un’istruzione a 32 bit a ogni in tervallo di 1 ns. In che misura il disco rallenta la CPU? 18. Si immagini di dover scrivere la parte di un sistema operativo dedicata alla gestione del disco. Dal il punto di vista logico il disco sarà rappresentato come una sequenza di blocchi, a partire da 0 nella parte interna fino a un certo valore massimo nella parte esterna. Quando i file ven gono creati occorre allocare settori liberi, cosa che si può fare a partire dall’interno oppure dal l’esterno. H a importanza la scelta della strategia? Si morivi la risposta. 19.
Q uanto tempo è necessario per leggere un disco con 10.000 cilindri, ciascuno dei quali contiene quattro tracce di 2048 settori? Prima devono essere leni tutti i settori della traccia 0 a partire dal settore 0, poi tutti i settori della traccia I a partire dal settore 0, e -così via. Il tempo di rotazione è di 10 ms e una ricerca richiede 1 ms tra cilindri adiacenti e 20 ms nel caso peggiore. Lo spostamento da una traccia all’altra dello stesso cilindro può essere fatta istantaneamente.
20.
Il RAID livello 3 è in grado di correggere errori singoli utilizzando solo un disco di parità. Qual è la particolarità del RAID livello 2? Dopo tutto anch’esso è in grado di correggere solo gli er rori singoli, ma necessita di un numero maggiore di dischi.
21.
Qual è l’esatta capacità (in byte) di un CD-ROM Modo 2 per il supporto, ormai standardiz zato, da 80 minuti? Qual è la capacità disponibile per i dati degli utenti utilizzando il Modo 1?
22.
Per masterizzare un CD-R il laser deve pulsare ad alta frequenza. Qual è la lunghezza di un im pulso, in nanosecondi, quando la frequenza è lOx e si utilizza il Modo 1?
23.
Per poter inserire 133 minuti di video su un DVD a singolo lato e singolo snato è necessario utilizzare un’elevata compressione. Si calcoli il fattore di compressione richiesto, assumendo che sia disponibile uno spazio di 3,5 GB per la traccia video, che la risoluzione dcU’immagine sia di 720 x 480 pixel con colori a 24 bit e che le immagini siano visualizzate a 30 fraine/s.
24.
I Blu-Ray hanno una velocità di 4,5 MB/s e una capacità di 25 GB. Quanto tempo è necessario per leggere l’intero disco?
130
Capìtolo 2
Organizzazione dei sistemi di calcolo
25. La velocità di trasferimento dati tra la CPU e la sua memoria associata è di vari ordini di gran dezza maggiore rispetto alla velocità delle componenti meccaniche di I/O. In che modo que sto sbilanciamento può causare inefficienze? Cpm’è possibile alleviarle? 26. Un produttore afferma che il proprio terminale può visualizzare una bitmap con 224 colori di versi. Se l’hardwarc ha 1 solo byte per ciascun pixel, com’è possibile ottenere questo valore? 27. Un Terminale ha uno schermo con una risoluzione di 1600 x 1200, che viene ridisegnato 75 volte al secondo. Quanto è lungo l’impulso che corrisponde a un pixel? 28. Una stampante monocromatica può stampare in ogni pagina 50 linee da 80 caratteri. Un ca rattere occupa in media un riquadro di 4 mm2, di cui circa il 25% è ricoperto da toner, mentre il resto ne è privo. Uno strato di toner ha uno spessore di 25 u e una cartuccia di toner per la stampante misura 25 x 8 x 2 cm. Per quante pagine può essere utilizzata una cartuccia? 29. Quando un testo ASCII con parità dispari viene trasmesso in modo asincrono alla velocità di 5600 caratteri/s su un modem da 56.000 bps, qual è la percentuale dei bit ricevuti che con tiene effettivamente dati (e non è overhead)? 30. La società di Modem Hi-Fi ha appena progettato un nuovo modem a modulazione di fre quenza che usa 64 frequenze invece di solo 2. Ciascun secondo è diviso in n intervalli tempo rali uguali, ognuno dei quali contiene uno dei 64 possibili toni. Quanti bit per secondo può trasmettere questo modem, utilizzando la trasmissione asincrona? 31. Un utente Internet si è abbonato a un servizio ADSL a 2 Mbps. La sua vicina si è abbonata a un servizio di Internet via cavo che utilizza una banda condivisa di 12 MHz. Lo schema di mo dulazione utilizzato è QAM-64 e ci sono n case per cavo, ciascuna con un calcolatore. Solo una frazione / d i questi calcolatori è in linea nello stesso momento. In quali condizioni l’utente via cavo ortiene un servizio migliore dell’utente ADSL? 32.
Una macchina fotografica digitale ha una risoluzione di 3000 x 2000 pixel e usa 3 byte/pixel per rappresentare i colori RGB. Il produttore della macchina fotografica vorrebbe poter scri vere su una memoria flash, in soli 2 s, un’immagine JPEG con un fattore di compressione 5x. Quale velocità di trasferimento dati è richiesta?
33. Una macchina fotografica digitale professionale ha un sensore con 16 milioni di pixel, ciascuno con 3 byte/pixel. Quante immagini possono essere memorizzate su una memoria flash da 1 GB se il fattore di compressione è 5x? Si assuma che 1 GB valga 230 byte. 34. Si stimi quanti caratteri, spazi compresi, contiene in genere un libro di informarica. Quanti bit sono necessari per codificare un libro usando il codice ASCII con parità? Quanti CD-ROM servono per immagazzinare una libreria di 10.000 libri? Quanti DVD a doppio lato e doppio strato sono necessari per memorizzare la stessa libreria? 35. Si scriva una procedura hammìng {asci:, codificata) che converta i 7 bit meno significativi di ascii in una parola di codice che sia un intero a l l bit e che venga memorizzato in codificata. 36. Si scriva una finizione distanza (codice, n, k) che prenda come input un array codice di n carat teri di k bit ciascuno e restituisca come output la distanza deH’insicme di caratteri.
Capitolo 3
Livello logico digitale
Alla base della gerarchia m ostrata nella Figura 1.2 si trova il livello logico digitale, ovvero il vero e proprio hardw are del calcolatore. In questo capitolo approfondirem o quegli aspetti della logica digitale che serviranno poi da base per lo studio dei livelli superiori. A nche se gli argom enti affrontati si trovano al confine tra l’inform atica e l’elettronica il m ateriale è “au to co n ten u to ’’: per p oterne seguire la trattazione n o n sono q u in d i necessarie specifiche co noscenze ingegneristiche o relative allhardw are. Gli elem enti base a partire dai quali sono costruiti tutti i calcolatori digitali sono incre dibilm ente semplici. Inizierem o il nostro studio partendo da questi com ponenti elem entari e dalla particolare algebra a d u e valori (algebra di Boole) che si utilizza per analizzarli. Successivamente esam inerem o alcuni circuiti fondam entali, tra cui quelli per eseguire calcoli aritm etici costruiti m ediante semplici com binazioni di porte logiche. L’argom ento successivo sarà l’organizzazione della m em oria, ovvero com ’è possibile com binare le porte logiche per m e morizzare inform azioni. In seguito verrà affrontato il tem a delle C P U e in particolare il m odo in cui C P U com poste d a u n unico chip si interfacciano con m em oria e periferiche. Nella parte finale del capitolo saranno presentati, a titolo di esempio, num erosi prodotti reali.
3.1
Porte logiche e algebra di Boole
I circuiti digitali possono essere costruiti co m b in an d o tra loro u n piccolo n um ero di com po n en ti elem entari. N ei paragrafi successivi descriverem o questi elem enti base, m ostrerem o com e possono essere com binati e in tro d u rrem o una potente tecnica m atem atica utilizzabile per analizzarne il co m portam ento.
3.1.1
Porte logiche
U n circuito digitale è u n circuito in cui sono presenti solo d u e valori logici1. G eneralm ente un valore (per esem pio il num ero binario 0) è rappresentato da un segnale com preso tra 0 e 1 volt, m entre l’altro valore (per esem pio il nu m ero binario 1) è rappresentato da un se
1 In perfetta analogia a quanto accade nella logica classica (N.tLRev.).
132
Capitolo 3
Livello logico digitale
gnale com preso rra 2 e 5 volt; le tensioni al di fuori di questi intervalli non sono ammesse. La base hardw are di tu tti i calcolatori digitali è costituita da alcuni piccoli dispositivi elet tronici, chiam ati porte logiche {gate), ciascuna^delle quali calcola una diversa funzione di questi segnali. I dettagli sul funzionam ento interno delle porte logiche esulano dallo scopo di questo libro, in q u an to rien tran o nel cam po del livello dei dispositivi, che si trova al di sotto del n o stro livello 0. C io n o n o stan te, farem o o ra u n a piccola digressione al riguardo, senza però entrare nei dettagli più complessi, in m odo da fo rn ire u n ’im m agine d ’insiem e dell’idea base. T utta la m oderna logica digitale si fonda, in ultim a analisi, sul fatto che un transistor può essere costru ito in m odo da funzionare com e un velocissimo in te rru tto re binario. Nella Figura 3.1 (a) è possibile vedere u n transistor integrato in u n sem plice circuito. I transistor h an n o tre connessioni verso il m o n d o esterno: il collettore, la base e l’emettitore. Q u an d o la tensione in ingresso scende sotto u n valore critico, chiam ato V,„, il transistor viene disa bilitato e si co m p o rta com e u n a resistenza infinita2. La conseguenza è che l’o u tp u t del cir cuito, V OH„ assum e u n valore vicino a V a: u n a tensione regolata esternam ente che, per q u e sto tipo di transistor, vale generalm ente + 5 volt. Q u an d o , al contrario, V,„ supera il valore critico, il transistor si attiva e si com porta com e u n co nduttore ideale3, facendo scaricare V oul a terra (per convenzione, 0 volt). È im p o rtan te notare che q u an d o V,„ è basso, è alto e viceversa. Q uesto circuito è q uin d i u n invertitore che converte u n valore logico 0 in u n valore logico 1 e un valore lo gico 1 in u n valore logico 0. La resistenza (la linea a zig zàg) è necessaria per lim itare la q u a n tità di corrente nel transistor ed evitare che esso si fonda. In genere il tem po richiesto per passare d a u n o stato a un altro è nell’o rd in e di pochi nanosecondi. La Figura 3 -1(b) m ostra due transistor collegati in serie. Se V, e V 2 sono alte, allora entram bi i transistor saranno in conduzione e V M, sarà portato al valore basso, m entre, se en tram b i gli ingressi sono bassi, allora i transistor corrispondenti saranno disattivati e l’u scita sarà alta. In altre parole sarà alto se e soltanto se sia V, sia V 2 sono alte. Nella Figura 3.1 (c) i due transistor sono collegati in parallelo, invece che in serie. In questa configurazione se u n o dei d u e ingressi è alto, allora il transistor corrispondente sarà attivato e l’uscita sarà scaricata a terra, m entre, se entram bi gli ingressi sono bassi, l’uscita rim arrà alta. Q uesti tre circuiti, cosi com e altri con lo stesso funzionam ento, form ano le tre porte logiche più sem plici, chiam ate rispettivam ente N O T , N A N D e N O R . D ato che spesso le p o rte N O T vengono chiam ate invertitori, nel corso del testo utilizzerem o i due term ini in m odo equivalente. Se assum iam o la convenzione di interpretare “alto” (Vcc volt) com e un valore logico 1 e “basso” (terra) com e un valore logico 0, allora è possibile esprim ere il va lore in uscita com e una funzione dei valori in ingresso. La Figura 3.2(a)-(c) m ostra i sim boli usati per indicare queste tre p o rte logiche e il loro co m portam ento funzionale. Nelle fi gure, A e B rappresentano gli ingressi, X l’uscita e ogni riga specifica il valore in uscita data u n a particolare com binazione dei valori in ingresso. Se si fa passare il valore in uscita della Figura 3.1 (b) in u n circuito invertitore, si ot tiene u n nuovo circuito il cui co m p o rtam en to è esattam ente l’opposto di quello della porta
’ Circuito apeno (N.d T.). 1 Corto circuito (N.d T.).
3.1
Porte logiche e algebra di Boole
133
Wct
Figura 3.1
la) Un invertitore, (b) Una porta
n a n d
.
(c) Una porta n o r .
logica N A N D . In questo nuovo circuito l’uscita vale 1 se e solo se entram bi gli ingressi val gono 1; esso realizza la p o rta logica chiam ata A N D , il cui sim bolo e la cui descrizione fun zionale sono dati nella Figura 3.2(c). A nalogam ente è possibile collegare la p o rta logica N O R a un invertitore, in m o d o da ottenere un circuito la cui uscita valga 1 se alm eno uno dei d u e ingressi vale 1, m entre valga 0 se entram bi gli ingressi valgono 0. La Figura 3.2(e) m ostra il sim bolo e la descrizione funzionale di questo circuito, chiam ato porca logica O R . I piccoli cerchietti, utilizzati com e p arte dei sim boli dell’invertitore, della porta N A N D e della porta N O R , rappresentano sem pre un’inversione. Le p o n e logiche della Figura 3.2 sono i principali elem enti costitutivi del livello logico digitale. D all’analisi precedente è chiaro che le p o n e N A N D e N O R necessitano di due transistor ciascuna, m en tre le p o rte A N D e O R ne richiedono tre; per questa ragione m olti calcolatori sono basati sulle p o rte logiche N A N D e N O R piu tto sto che sulle più familiari porte A N D e O R . In realtà tu tte le p o rte logiche sono im plem entate in m o d o piuttosto d i verso, ma in ogni caso ie p o rte N A N D e N O R rim angono p iù sem plici di quelle A N D e O R Parlando d i p o rte logiche vale la pena precisare che esse possono avere anche più di due ingressi; p er fare u n esem pio u n a porca N A N D potrebbe avere in teoria un num ero di in gressi p iu tto sto elevato, anche se in pratica diffìcilmence ce ne sono più di otto. D ato che ci si riferirà frequentem ente alle principali tecnologie di costruzione delle porte logiche ne ciciamo ora le principali, anche se questo argom ento fa parte del livello dei di spositivi. Le due tecnologie principali sono quella b ip o la re e quella M O S ( Metal Oxide Semiconductor, “sem iconduttore m etallo ossido"). Fra le bipolari, i tipi più im p o rtan ti sono la T T L { Transistor-Transìstor Logic), per anni il m otore del l’elettronica digitale, e la E C L (Emitter-Coupled Logic), utilizzata q u an d o è richiesto un funzionam ento a velocità m olto elevate. A ttu alm en te nei circuiti dei calcolatori si impiega largam ente la tecnologia M O S . Le p o rte logiche M O S sono più lente delle T T L e delle EC L, m a richiedono m olta m en o potenza e han n o una dim ensione decisam ente inferiore, perm ettendo così di m etterne insiem e u n n u m ero elevato in uno spazio lim itato. Esistono diverse varietà d i p o rte M O S , tra cui le P M O S , le N M O S e le C M O S . I transistor M O S , p u r essendo costruiti in m odo differente rispetto ai transistor bipolari, sono tuttavia in grado di funzionare com e degli in-
134
Capitolo 3
Livello logico digitale
NOT
NAND
AND
NOR
T P 0
1
(a)
Figura 3.2
A
B
X
A
B
X
A
B
X
A
B
X
0
D
1
0
0
1
0
0
0
0
0
0
0
1
1
0
1
0
0
1
0
0
1
1
1
0
1
1
0
0
1
0
0
I
0
1
1
1
0
1
1
0
1
1
1
1
1
1
(b)
(c)
(d)
(e)
Simboli e comportamenti funzionali di cinque porte logiche elementari.
te rru tto ri elettronici. La maggior p arte delle C P U e deile m em orie m oderne utilizza la tec nologia C M O S che funziona a 3,3 volt. Q u esto è tu tto ciò che occorre conoscere a p ro p o sito del livello dei dispositivi; i lettori interessati ad approfondire lo studio di questo livello possono consultare i riferim enti bibliografici forniti nel C apitolo 9.
3.1.2
Algebra di Boole
Per poter descrivere i circuiti costruiti com b in an d o le porte logiche occorre definire un nuovo tipo di algebra in cui variabili e funzioni possono assumere soltanto i valori 0 e 1. Q uesta stru ttu ra viene chiam ata a lg eb ra d i B oole, in q u anto è stata sviluppata dal m atem atico in glese G eorge Boole (1815-1864). Per essere precisi, ci riferiam o in realtà a u n particolare tipo di algebra booleana, chiam ata a lg e b ra b o o le a n a m in im ale; ciononostante il term ine “alge bra booleana” è utilizzato in m odo talm ente esteso che non faremo alcuna distinzione. E sattam ente com e esistono le funzioni nell’algebra ordinaria (cioè quella del liceo), esi ston o anche le funzioni nell’algebra booleana. U na funzione booleana ha una o più varia bili di in p u t e genera un valore di o u tp u t che dipende soltanto dai valori di queste variabili. U na sem plice f u n z io n e /p u ò essere definita assum endo c h e /L ^ ) valga 1 se A vale 0 e f(A ) valga 0 se A vale 1; essa corrisponde alla funzione N O T della Figura 3.2(a). U na funzione booleana di « variabili p uò essere com pletam ente descritta m ediante una tabella di 2" righe; dato che esistono 2" possibili com binazioni dei valori di in p u t, ciascuna riga p u ò q uindi indicare il valore della funzione per una d ata com binazione degli input. U na tabella di questo tipo è chiam ata tabella di verità; tu tte le tabelle della Figura 3.2 ne sono u n esem pio. Se si decide di elencare sem pre le righe di una tabella di verità in ordine n u m erico, cioè seguendo la sequenza 00, 01 , 10 e 1 1 nel caso di due variabili, la funzione può essere com pletam ente descritta dal num ero binario a 2 * b it che si o ttiene leggendo in verti cale la colonna del risultato. A dottando questa convenzione, N A N D è 1110, N O R è 1000, A N D è 0001 e O R è 0 1 11. C o n due variabili esistono ovviam ente soltanto 16 diverse fu n zioni booleane, corrispondenti alle 16 com binazioni possibili della stringa a 4 bit che rap presenta i risultati. N ell’algebra ordinaria esiste al contrario un num ero infinito di funzioni a du e variabili, nessuna delle quali p u ò essere descritta dando u n a tabella che specifica i ri sultati per tu tti i possibili valori di in p u t. N ell’algebra ordinaria ogni variabile può infatti assum ere u n infinito num ero di valori.
3.1
Porte logiche e algebra di Boole
135
La Figura 3.3(a) m o stra la tabella di verità di u n a funzione booleana a tre variabili:
M —f ( A , B, O ■Essa co rrisp o n d e alla funzione logica di m aggioranza che vale 0 se la m ag gioranza dei suoi valori di in p u t vale 0, m en tre vale 1 se la m aggioranza degli in p u t vale 1. A nche se è possibile specificare in m o d o co m pleto qualsiasi funzione booleana d an d o n e la sua tabella di verità, all’au m en tare del n u m ero di variabili questa notazione diventa di dim en sio n i eccessivam ente g randi. Per questo m otivo si preferisce spesso ad o ttare una n o tazione differente. Per capire da dove nasce questa notazione alternativa si noti che ogni funzione booleana può essere descritta specificando quali com binazioni delle variabili di input producono, com e risultato, 1. N el caso della funzione m ostrata nella Figura 3-3(a) ci sono quattro com binazioni di variabili di input che rendono M pari a 1. Per convenzione aggiungerem o una linea sopra una variabile di input per indicare che il suo valore è invertito (e non la apporrem o in caso contrario). Utilizzeremo inoltre la notazione implicita della moltiplicazione, oppure un p u n tino, per denotare la funzione booleana A N D (prodotto logico) e il sim bolo + per indicare la funzione booleana O R (som m a logica). Per esempio, seguendo queste convenzioni, ABC as sum e valore 1 solo quando A = 1, B = 0 e C = 1. A nalogam ente AB + B C assume valore 1 solo q u ando (A - 1 e B = 0) o p p u reJB = 1 £ C = 0)_^Le quattro righe della Figura 3.3(a) che producono in o u tp u t il bit 1 sono: ABC, ABC, ABC e ABC; dato che la funzione M è vera ABC
ABC
-D>9ABC
A
B
C
M
0
0
0
0
0
0
1
0
0
1
0
0
0
1
1
1
1
0
0
0
1
0
1
1
1
1
0
1
1
1
1
1
(a) Figura 3.3
-
rS >
B
-D>9ABC
(b)
(a) Tabella di verità della funzione di maggioranza di tre variabili, (b) Un circuito per (a).
M
136
Capitolo 3
Livello logico digitale
(cioè vale 1) se una qualsiasi d i queste quattro com binazioni è vera, è possibile riscrivere in m odo più com patto la tabella di verità usando la seguente notazione M = ABC + A BC + A BC + ABC U na funzione di «variabili può q u in d i essere descritta m ediante una som m a di un massim o di 2 ” term in i, ciascuno dei quali è co stituito dal p ro d o tto logico di n variabili. C o m e vedrem o tra poco questa form ulazione è particolarm ente im p o rtan te in quanto porta d irettam en te a un’im plem entazione della funzione per mezzo di p o rte logiche di tipo standard. E im p o rtan te tenere a m ente la differenza tra una funzione booleana astratta e la sua im plem entazione circuitale. U na funzione booleana consiste di variabili, com e A, B e C , e operatori booleani com e A N D , O R e N O T , ed è descritta per mezzo di una tabella di ve rità o u n a funzione booleana, per esem pio F = ABC + A BC U na funzione booleana può essere im plem entata m ediante un circuito elettronico (che, in generale, p uò essere realizzato in vari m odi), che utilizza segnali per rappresentare le varia bili di in p u t e di o u tp u t oltre ad alcune porte logiche com e A N D , O R e N O T . In seguito, anche se talvolta potrà essere am biguo, utilizzerem qja notazione A N D , O R e N O T per ri ferirci agli operatori booleani e a n d , o r e NOT p e r riferirci alle p o rte logiche.
3.1.3
Implementazione delle funzioni booleane
C om e d etto precedente mence è possibile im plem entare fàcilmente una funzione booleana se la si form ula com e una som m a di prodocti. U tilizzando la Figura 3.3 com e esempio possiamo vedere com e si realizza questa im plem entazione. Nella Figura 3.3(b) gli in put A, B e C sono rappresentati sul lato sinistro, m entre l’o u tp u t della funzione è m ostrato a destra. D ato che è necessario disporre dei com plem enti (inversi) delle variabili di input, essi sono generati inter cettando gli input e facendoli passare attraverso gli invertitori indicati con i num eri 1, 2 e 3. Per rendere la figura più leggibile sono state disegnate sei linee verticali, tre delle quali con nesse alle variabili di inp u t e le restanti tre ai loro com plem enti. Q ueste linee forniscono un m odo pratico per originare gli input delle porte logiche successive. Per esempio le porte 5, 6 e 7 usano A com e inpuc; in u n circuito reale quesce porte logiche potrebbero essere collegate direttam ente ad A senza utilizzare alcun filo “verticale” interm edio. Il circuito contiene q u attro porte AND, una per ciascun term ine che com pone l’equa zione di M (cioè una per ogni riga della tabella di verità in cui il b it della colonna risultato vale 1). C iascuna porta AND calcola una riga della tabella di verità, com ’è indicato nella fi gura. Il risultato finale viene poi calcolato effettuando I’o r fra tu tti i p ro d o tti. Nel circuito m ostrato nella Figura 3.3(b) è stata utilizzata una convenzione che verrà im piegata frequencernence nel corso del testo; l’incrocio fra due linee non im plica alcuna co n nessione a m eno che non sia presente u n pallino nero nel p u n to di intersezione. Per esem p io l’o u tp u t della porta 3 incrocia tu tte e sei le linee verticali, m a è connesso soltanto con C. D ato che alcuni autori utilizzano convenzioni diverse, occorre prestare attenzione alla no tazione im piegata.
3.1
Porte logiche e algebra di Boole
137
Seguendo l’esem pio della Figura 3.3 dovrebbe essere chiaro com e si possa im plem en tare un circuito che realizzi una qualsiasi funzione booleana. 1. Si scrive la tabella di verità della funzione. 2. C i si m unisce di invertitori per generare la negazione di ciascun input. 3.
Si utilizza una porta AND per ciascun term ine il cui valore nella colonna risultato vale 1.
4. Si collegano le porte
and
agli in p u t appropriati.
5. Si co n n etto n o tu tti gli o u tp u t delle porte
and
nella p o rta OR.
Anche se abbiam o dim ostrato la possibile im plem entazione di una qualsiasi funzione booleana m ediante le porte NOT, AND e O R , spesso è più vantaggioso im plem entare circuiti utilizzando u n solo tipo d i p o rta logica. F o rtu n atam en te esiste un m odo d iretto per convertire i circuiti generati daH’algoritm o precedente in u n o che utilizzi unicam ente la p o rta NAND. oppure la NOR. L’unica cosa che serve per effettuare una simile conversione è un m odo per im plem entare le p o rte n o t , a n d e OR utilizzando u n solo tip o di p o rta logica. La Figura 3.4 m ostra l’im plem entazione di queste tre p o rte utilizzando soltanto porte NAND (riga in alto), oppure sol tanto p o rte NOR (riga in basso). Q uesto è il m odo più diretto, m a esistono tuttavia anche altri m eto d i d i conversione. U n m etodo per im plem entare u n a funzione booleana utilizzando soltanto le porte NAND o NOR consiste nel realizzarla inizialm ente m ediante le porte NOT, AND e OR seguendo
(a)
AB
■
O
- r
■ o^
>
A +B
(c)
Figura 3.4
Costruzione delle porte logiche (a) porte n o r .
not
,(b) a n d e (c) OR utilizzando soltanto
138
Capitolo 3
Livello logico digitale
la precedente procedura. Successivam ente occorre sostituire le p o rte logiche con p iù ingressi con circuiti equivalenti com posti da porte con due soli ingressi. A + tì + C + D può per esem pio essere calcolata com e (A+ B) + (C+ D) utilizzando tre p o rte logiche a due ingressi. Infine le porte NOT, AMD e OR devono essere sostituite dai circuiti della Figura 3.4. Q uesta procedura m ostra che esiste sem pre una possibile im plem entazione; tuttavia i circuiti o tte n u ti n o n sono ottim ali, nel senso che non utilizzano il m inim o num ero possi bile di porte logiche. Sia le p o rte NAND sia le p o rte NOR costituiscono un insiem e di con nettivi funzionalmente com pleto, nel senso che una qualsiasi funzione booleana può es sere calcolata usando soltanto uno di questi due tipi di porte. N essun’altra porta logica gode di questa proprietà; questo è u n ulteriore m otivo p er il quale NAND e NOR sono spesso urilizzate com e elem enti base nella costruzione dei circuiti.
3.1.4
Equivalenza di circuiti
Spesso i progettisti cercano dì ridurre il nu m ero di porte logiche utilizzate nei loro prodotti per lim itare il costo dei com p o n en ti, le dim ensioni delle schede con i circuiti stam pati, il consum o energetico e altri fattori. Per ridurre la com plessità d i u n circuito un progettista deve trovare un altro circuito che calcoli la stessa funzione di quello originario, m a che sia com posto da un nu m ero inferiore di p o rte (oppure da p o rte più sem plici, per esem pio porte a d u e ingressi al posto di porte a q u attro ingressi). C o m e esem pio di utilizzo di tecniche del l'algebra booleana per la ricerca di circuiti equi valenti, consideriam o il circuito e la tabella di verità per la funzione AB + A C m ostrati nel la Figura 3.5(a). M olte delle regole dell’algebra ordinaria valgono anche p er l’algebra booleana;
A
B
c
AB
AC
AB +AC
A
B
c
A
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
1
0
0
1
0
0
0
0
0
1
0
0
1
0
0
1
1
0
0
0
0
1
1
0
1
0
1
0
0
0
0
0
1
0
0
1
0
0
1
0
1
0
1
1
1
1
1
1
1
0
1
0
1
1
0 1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
(a) Figura 3.5
B + C A(B + C>
0
Due funzioni equivalenti, (a) AB +AC. (b) A ( B + C ).
(b>
3.1
Porte logiche e algebra di Boole
139
in particolare, usando la p roprietà distributiva, è possibile fattorizzare AB +AC nella form a A (B + C), la cui tabella di verità e il cui circuito sono m ostrati nella Figura 3.5(b). D ato che due fruizioni sono equivalenti se e solo se h a n n o lo stesso valore di o u tp u t per tu tti i possi bili in p u t, è facile verificare dalle tabelle di verità della Figura 3-5 che A (B + C) e AB +AC sono effettivam ente equivalenti. P u r essendo equivalenti il circuito della Figura 3.5(b) è chiaram ente m igliore di quello della Figura 3.5(a), in q u an to è com posto da un num ero m i nore di p o n e logiche. D i solito un progettista di circuiti parte da una form ula e in seguito, applicando le leggi dell'algebra di Boole, cerca di sem plificarla. D alla funzione finale può infine essere costruito il circuito. Per utilizzare questo approccio occorre conoscere alcune identità: le principali sono elencate nella Figura 3.6. È interessante notare che ciascuna legge com pare in d u e form e, d u a li 1 u n a rispetto all’altra. S cam biando A N D con O R e anche 1 con 0 è possibile creare u n a delle d u e form e a partire dall’altra. E possibile verificare tu tte le leggi co struendo le loro tabelle di verità; i risultati sono ragionevolm ente intuitivi per tu tte le leggi tran n e che per la legge d i D e M organ, la p ro p rietà di assorbim ento e la legge d istrib u tiv a della som m a rispetto al p ro d o n o . La legge_di D e M organ può inoltre essere estesa a più di due va riabili, per esem pio ABC = A + B + C. La legge di D e M organ suggerisce una notazione alternativa. La Figura 3.7(a) m ostra la form a A N D in cui la negazione è indicata, sia per gli in p u t sia per gli o u tp u t, m ediante i cer chierti di inversione. U na porta logica OR con gli input invertiti è quindi equivalente a una porta NAND. D alla Figura 3.7(b), che rappresenta la form a duale della legge di D e M organ, dovrebbe essere chiaro che una porta NOR p u ò essere disegnata com e una porta AND con gli inpu t invertiti. N egando entram be le form e della legge di D e M organ si ottengono le Figu re 3.7(c) e (d), che m ostrano due rappresentazioni equivalenti delle porte logiche AND e OR. Esistono simboli analoghi per le form e a più variabili della legge di D e M organ (per esempio, una porta n a n d a n input diventa una porta OR con n input invertiti). La conversione della tabella di verità dalla rappresentazione som m a-d i-p ro d o tti alla form a pura NAND o NOR risulta agevolata dalle identità della Figura 3.7 e dalle corrispon denti versioni per le p o rte a più ingressi. C o m e esem pio consideriam o la funzione X O R
Proprietà commutativa
AB = BA
II
A +A =A >1
Complementazione
1 +A = 1
AA = A
> +
Idempotenza
Forma OR 0 +A =A
> II o
Assorbimento
> II 2*
Forma AND
Elemento neutro
II o
Nome
A + B=B +A
Proprietà associativa
(AB)C = A(BC)
(A + 8 ) + C = A +
(a) Figura 3.22
r
5
5^
>
f
(b)
Latch di tipo n o r nello stato 0. (b) Latch di tipo di verità del n o r .
(a)
A
B
NOR
0
0
1
0
1
0
1
0
0
1
1
0
(c )
nor
nello stato 1. (c) Tabella
3.3
Memoria
155
Q viene reinserito com e in p u t della p o rta NOR visualizzata in alto, e n tra m b i gli in p u t di questa p o rta valgono 0 gen eran d o com e o u tp u t il valore 1. Il valore 1 è riutilizzato com e in p u t della p o rta visualizzata in basso, i cui in p u t sono 1 e 0 e p ro d u c o n o com e o u tp u t Q = 0. Q u e sto stato , m o strato nella Figura 3 .22(a), è stabile. Im m aginiam o ora che Q non sia 0, m a 1, m entre Re S co>ntinuano a valere 0. La porta logica visualizzata in alto ha com e in p u t 0 e 1; il suo o u tp u t Q vale 0 ed è riutilizzato com e in p u t della p o rta visualizzata in basso. A nche questo stato è stabile ed è m ostrato nella Figu ra 3.22(b). U no stato in cui entram bi gli o u tp u t valgono 0 è invece instabile, in q u anto ob bliga entram b e le p o rte ad avere due 0 com e in p u t, il che, se fosse vero, produrrebbe com e risultato 1 e n o n 0. A nalogam ente è im possibile che entram bi gli o u tp u t valgano 1, dato che ciò forzerebbe gli in p u t a 0 e 1, il cui risultato dovrebbe essere 0 e non 1. La conclusione e semplice: per R = S = 0 il latch ha d u e stati stabili che identificherem o con 0 e 1 in base al valore di Q. E sam iniam o ora quali effetti p ro d u co n o sullo stato del latch i valori dell’input. Sup poniam o che 5 diventi 1, m entre Q = 0. Gli input del NOR superiore sono quindi 1 e 0 e forzano l’o u tp u t Q a valere 0. Q u e sto cam biam ento p o rta en tram b i gli in p u t della porta in feriore a valere 0, p roducendo in o u tp u t il valore 1. S ettando quindi 5 (cioè im postandone il valore a 1) si p uò far passare lo stato da 0 a 1. S ettando R a 1 quan d o il latch si trova nello stato 0 non si produce invece alcun effetto, d ato che l’o u tp u t della p o rta NOR in basso è 0 sia che i suoi in p u t valgano 10 sia che valgano 11. A pplicando un ragionam ento sim ile si p u ò verificare facilm ente che im postare S a 1 q u an d o il latch è nello stato Q = 1 n o n p roduce alcun effetto, m entre settando R si m odi fica lo stato del latch p o rtan d o lo nello stato Q = 0. R iassum endo si può dire che quan d o S è im postato tem poraneam ente a 1 lo stato del latch diventa Q « 1, in dipendentem ente dallo stato in cui si trovava precedentem ente. A llo stesso m odo q u an d o si im posta tem poranea m ente /? a 1 si forza il latch a passare nello stato Q = 0. Il circuito “ricorda” quindi quale va lore, se S o ppure R, è stato settato per ultim o; utilizzando questa proprietà è possibile co struire le m em orie dei calcolatori.
Latch SR temporizzato Spesso è preferibile im pedire che u n latch cam bi di stato se non in specifici m om enti. Un circuito che gode di questa caratteristica è d e n o latch SR te m p o riz za to ; per costruirlo oc corre m odificare leggerm ente il circuito yjsto precedentem ente. Il circuito della Figura 3.23 h a u n in p u t aggiuntivo, il clock, il cui valore è generalm ente 0. Q u a n d o il clock vale 0 en-
Figura 3.23
Latch SR tem porizzato.
156
Capitolo i
Livello logico digitale
tram be le porte AN D generano in o u tp u t il valore 0, in d ipendentem ente dai valori di S e R, im pedendo q u in d i al latch di cam biare di stato. Q u a n d o il clock vale 1 le porte AN D non bloccano più i segnali 5 e R che posso n o d u n q u e to rnare a p ilotare lo stato del latch. N o n o stan te il suo nom e n o n è obbligatorio che il segnale collegato a ll'in p u t aggiuntivo debba per forza essere com an d ato da un clock. I term ini enable e strobe sono largam ente utilizzati p e r indicare che l’in p u t clock vale 1, ovvero che il circuito è dip en d en te dallo stato di S e d a quello di R Finora ab b iam o in ten zio n alm en te evitato di spiegare che cosa succede se sia 5 sia R valgono 1: il circu ito diventa n on d eterm in istico finché sia R sia S non to rn in o ad assu m ere il valore 0. L’unico stato co nsistente per S = R = 1 è q u a n d o Q = Q = 0; n o n ap pena en tram b i gli in p u t rito rn an o al valore 0 il latch deve tuttavia passare istantaneam ente in u n o dei suoi du e stati stabili. Se u n o dei d u e in p u t to rn a a 0 prim a dell’altro, prevale quello che rim an e al valore 1 più a lungo, d a to che q u an d o u n o solo degli in p u t vale 1 esso d eterm in a lo stato del latch. Se invece en tram b i gli in p u t rito rn an o a 0 nello stesso istante {cosa che p uò verificarsi m o lto raram ente) il latch passa in uno dei d u e stati sta bili in m o d o del tu tto casuale.
Latch D temporizzato
U n b u o n m odo per risolvere l’am b ig u ità dei latch SR (causata dalla situazione S = R = 1) è . . . evitare che si verifichi. La Figura 3.24 m ostra un circuito che ha un solo input, D. D ato che l’in p u t della p o rta A N D rappresentata in basso’ è* sem pre il co m p lem en to dell’in p u t di quella superiore, n o n p u ò mai accadere che e n tra m b i gli in p u t valgono 1. Q u a n d o D = 1 e il clock vale 1, il latch viene p o rta to nello stato Q = 1, m entre, q u an d o D « 0 e il clock vale 1, il latch passa nello stato Q = 0. In altre parole q u an d o il clock vale 1 il valore cor rente di D viene cam p io n ato e m em orizzato nel latch. Q u e sto circuito, chiam ato la tc h D te m p o riz z a to , è una vera e p ropria m em oria a 1 bit, in cui il valore m em orizzato è sem pre disponibile sulla linea Q, Per caricare in m em oria il valore corrente di D occorre spe dire u n im pulso positivo sulla linea dei clock. Il circuito appena descritto richiede 11 transistor; esistono tuttavia circuiti più sofist cati (m a con un’im plem entazione m eno ovvia) che possono m em orizzare 1 bit utilizzando solo sei transistor. N elle im plem entazioni reali si adottano queste soluzioni p iù sofisticate, che im piegano m eno transistor.
Figura 3.24
Latch D temporizzato.
3.3
3.3.2
Memoria
157
Flip-flop
In m olti circuiti è necessario cam pionare il valore di una certa linea in un particolare istante e m em orizzarlo. In questi circuiti, chiam ati flip-flop, la transizione di stato non si verifica q u an d o il clock vale 1, ma d u ran te la transizione del clock da 0 a 1 (fronte di salita) oppure da 1 a 0 (fronte di discesa). In questa situazione la lunghezza dell’im pulso del clock non ha alcuna im portanza, purch é le transizioni si verifichino con sufficiente velocità. Per sottolinearlo ulterio rm en te ripetiam o la differenza che c’è tra un flip-flop e un latch: un flip-flop è a com mutazione sul fronte, m entre un latch è a com mutazione a li vello. O ccorre però prestare attenzione al fatto che in letteratura spesso questi term ini ven gono confusi; m olti au to ri utilizzano il term ine “flip-flop” per indicare u n latch e viceversa. Esistono vari approcci per progettare u n flip-flop. Se per esem pio esistesse un m etodo per generare u n im pulso d i lunghezza estrem am ente breve sul fronte di salita, si potrebbe im m ettere tale im pulso in u n latch D . Il circuito che im plem enta questa soluzione è m o strato nella Figura 3.25(a). A prim a vista potrebbe sem brare che l’o u tp u t della porta A N D debba essere sem pre zero, dato che l ’A N D tra un qualsiasi segnale e il suo inverso vale sem pre zero; in realtà la situa zione, anche se in m odo sottile, è diversa. L’invertitore induce un piccolo, m a non nullo, ri tardo d i propagazione che perm ette al circuito di funzionare in m odo corretto. S upponiam o di m isurare la tensione in q u attro p u n ti diversi: a, b, c e d. Il segnale di in p u t, m isurato in a, è u n lungo im pulso di clock, com e m ostra, in basso, la Figura 3.25(b); il segnale in b è invece rappresentato dal grafico che nella figura si trova sopra quello precedente. Si noti che questo segnale, oltre a essere stato invertito, risulta anche sfasato di un ritardo che è di po chi nanosecondi (a seconda dal tipo di invertitore utilizzato).
n A
A
------------ H ------- S
(a)
d -
u
a —— — Tem po------(b) Figura 3.25
(a) G eneratore d'im pulsi, (b) Diagrammi temporali.
158
Capitolo 3
Figura 3.26
Livello logico digitale
Flip-flop D.
A nche il segnale c subisce u n ritardo, che però è determ inato soltanto dal tem po di propaga zione del segnale (a due terzi della velocità della luce). Se la distanza tra a c c i , per esempio, di 20 nm , il ritardo di propagazione è di un decim o di picosecondo. Tale valore è certam ente trascurabile rispetto al tem po di com m utazione dell’invertitore. D i conseguenza per qualsiasi intento o scopo del circuito, il segnale c p uò essere considerato identico al segnale a. Q u a n d o gli in p u t be c vengono processati dalla p o rta A N D si o ttiene com e risultato un im pulso di breve durata, com e m ostra la Figura 3.25(b); la larghezza A dell’im pulso è uguale al ritardo deH’invertitore, generalm ente inferiore a 5 ns. C om ’è illustrato nella Figura 3.25(b) l’o u tp u t della porta A N D corrisponde sem p licem entea questo im pulso sfasato del ritardo in tern o alla p o rta logica AND. Q uesto sfasamento tem porale significa che il latch D verrà atti vato con un ritardo fisso rispetto al fronte di salita del clock; tuttavia ciò non ha alcun effetto sulla durata dell’impulso. Un im pulso di 5 ns che segnala quando cam pionare la linea D può essere considerato sufficientem ente corto per u n a m em oria con u n ciclo della durata di 50 ns; in u n caso simile il circuito com pleto potrebbe essere quello della Figura 3.26. O ccorre sottolineare che il vantaggio dell’architettura di questo flip-flop è di essere di fàcile com prensione; tuttavia nella realtà si ricorre di solito ad architetture più sofisticate. La Figura 3 .2 7 m ostra i sim boli co m u n em en te usati per i latch e i flip-flop. La Figu ra 3.27(a) indica un latch il cui stato viene caricato q u an d o il clock, CK, vale I; al c o n trario lo stato del latch della Figura 3 .2 7 (b ) è generalm ente 1, m a passa tem p oraneam ente al valore 0 per assum ere lo stato dalla linea D. Le Figure 3.27(c) e (d) rappresentano due flip-flop invece che due latch; ciò è indicato dal sim bolo triangolare vicino all’in p u t del dock. La Figura 3.27(c) cam bia stato in corrispondenza del fronte di salita dell’im pulso del clock (transizione da 0 a 1), m entre la Figura 3.27(d) cam bia stato in corrispondenza del fronte di discesa (transizione da 1 a 0). M olti latch e flip-flop, seppur non tu tti, h an n o anche
D
Q
Q
— C CK
CK (a )
Figura 3.27
D
D
Q
> CK
(b)
Flip-flop D temporizzati.
(c)
D
Q
— C > CK
(d)
3.3
Memoria
159
l’o u tp u t Q e alcuni sono d o tati di due in p u t aggiuntivi, Set o Preset (che forzano lo stato a Q - 1) e Reset o Clear (che forzano lo stato a Q = 0).
3.3.3
Registri
Tra le svariate configurazioni in cui i flip-flop sono disponibili, la Figura 3.28(a) ne m ostra una particolarm ente sem plice consistente in d u e flip-flop dotati dei segnali Clear e Preset. I d ue flip-flop, p u r essendo integrati nello stesso chip a 14 pin, no n sono in relazione l’uno Vcc 14
12
13
11
10
D_
CLR
CLR D
D
Q
Q
>CK Ò PR
>CK Ò PR
T
I
TERRA
(a) Vcc
(b)
Figura 3.28
(a) Flip-flop D duale, (b) Flip-flop ottale.
160
Capitolo 3
Livello logico digitale
con 1 altro. La Figura 3.28(b) m ostra invece u n a configurazione diversa: un flip-flop ottale. In questo caso gli o tto flip-flop D (ai quali si deve il term ine “ottale”) non solo sono sprov visti di Q e delle linee di reim postazione, m a inoltre tu tte le linee di clock sono collegate fra loro e pilotate dal pin 1 1 .1 singoli flip-flop sono del tipo m ostrato nella Figura 3 .2 7 (d), an che se il cerchietto d ’inversione non è presente per via dell’invertitore collegato al pin 11; per questa differenza i flip-flop vengono caricati in corrispondenza della transizione di sa lita. A nche tu tti e o tto i canali di cancellazione sono collegati fra loro, di m odo che il pas saggio del pin 1 al valore 0 forzi tu tti i flip-flop ad assumere lo stato 0. C i si potrebbe chie dere per quale m otivo il pin 11 è invertito nella linea di in p u t per poi essere invertito n u o vam ente in corrispondenza di ciascun segnale CK. Il m otivo è che un segnale potrebbe non avere sufficiente corrente per pilotare tu tti i flip-flop; l’invertitore svolge in realtà il ruolo di am plificatore. U n a ragione p er unire tu tte le linee di d o c k e di cancellazione porrebbe essere quella di risparm iare pin; in realtà in questa configurazione il vero m otivo è che il chip è utilizzato com e u n registro a 8 bit e n o n com e o tto flip-flop scollegati. U nendo i rispettivi p in 1 e 11 è possibile utilizzare due di questi chip in parallelo per form are un registro a 16 bit. N el corso del C ap ito lo 4 analizzerem o più d a vicino i registri e il loro impiego.
3.3.4
Organizzazione della memoria
Nei paragrafi precedenti siam o p artiti dalla sem plice m em oria a 1 bit della Figura 3.24 per arrivare alla m em oria a 8 bit della Figura 3 .2 8 . Per realizzare m em orie di dim ensione m ag giore è però necessaria u n ’organizzazione di tip o diverso, nella quale sia possibile indirizzare singole parole. La Figura 3 .2 9 m ostra u n ’organizzazione della m em oria m olto com une che soddisfa questo requisito. L’esem pio illustra una m em oria con q u attro parole a 3 b it in cui ciascuna operazione legge o scrive un’intera parola. A nche se la m em oria h a u n a capacità to tale (12 bit) decisam ente maggiore rispetto a quella del flip-flop ottale visto precedentem ente, essa richiede un num ero inferiore di pin. U na caratteristica ancora più rilevante è che que sta organizzazione è facilm ente estendibile a m em orie di dim ensione maggiore. A prim a vista la m em oria della Figura 3.29 potrebbe sem brare complessa, ma in realtà, se si considera la regolarità della stru ttu ra, si n ota che è piuttosto sem plice. Delle o tto linee di in p u t tre sono per i dati, I0 , I, e I2, d u e per l’indirizzo, A^ e A ,, e tre per i controlli, c s per la selezione del chip, RD per distinguere tra lettura e scrittura e OE per l’abilitazione del l’o u tp u t. Le tre linee di o u tp u t, O 0, O , e 0 2, sono invece dedicate ai dati. In linea di p rin cipio è possibile inserire questa m em oria in u n contenitore con 14 pin, alim entazione e terra com presi, co n tro i 2 0 pin di un flip-flop ottale. Per utilizzare questo chip è necessario che una com ponente logica esterna im posti, in caso di lettura, sia c s sia r d al valore alto (valore logico 1), m entre, in caso d i scrittura, li im posti al valore basso (valore logico 0). Le d u e linee dell’indirizzo devono essere im postate in m o d o d a indicare quale delle q u attro parole a 3 bit deve essere letta o scritta, in lettura le linee di in p u t n o n vengono utilizzate e la parola selezionata viene resa disponibile sulle li nee dì o u tp u t. In scrittura i bit presenti sulle linee di input dei dati vengono caricati nella parola di m em oria selezionata, m entre le lince di o u tp u t non vengono utilizzate. Per com prendere il fu n zio n am en to della m em oria osserviam o ora in m odo p iù d et tagliato la Figura 3.29. Le q u a ttro p o rte a n d situate a sinistra della m em oria fo rm ano un d ecodificatore e servono a selezionare la parola. 1 q u a ttro invertitori in in p u t sono stati
3.3
Memoria
161
Dati in input
ftsrola 0
Parola 1
Abilitazione dell'outpuL = CS • RD • O E
Figura 3.29
Diagramma logico di una memoria 4 x 3 . Ogni riga è una della quattro parole a 3 bit. Lettura e scrittura riguardano sempre parole complete.
collocati per far sì che ciascuna p o rta logica sia abilitata (l’o u tp u t è alto) da un indirizzo diverso. C iascu n a p o rta è collegata a u n a linea per la selezione di u n a delle parole, in d i cate d all’alto verso il basso con i n u m eri 0, 1, 2 e 3. Q u a n d o il ch ip viene selezionato per u n ’operazione di scrittu ra la linea verticale etich ettata con CS 4 RDassum e valore alto, abi litan d o q u in d i u n a della q u a ttro p o rte d i scrittura; la porta abilitata d ip en d e d a quale linea per la selezione della parola ha assunto valore alto. L’o u tp u t della p o rta di scrittu ra guida tu tti i segnali CK relativi alla parola selezionata, caricando i dati di in p u t nei flip-flop che
162
Capitolo 3
Livello logico digitale
co stitu isco n o la parola stessa. La scrittu ra è possibile so ltanto q u a n d o CS c alto e RD è bas so; l’unica parola a essere scritta è quella selezionata dai segnali e A j, m en tre le altre n o n vengono m odificate. L’operazione d i lettura è simile: la decodifica dell’indirizzo, per esem pio, si svolge esat tam ente nello stesso m odo, la linea CS • RD assum e però valore basso, disabilitando di con seguenza tu tte le porte di scrittura e im pedendo la m odifica dei flip-flop. La linea per la se lezione della parola scelta abilita le p o rte AND cui sono collegati i b it Q della parola selezio nata. La parola selezionata spedisce q u in d i i p ropri dati alle porte OR m ostrate nella parte bassa della figura. D ato che le altre parole generano in o u tp u t valori 0, il risultato delle porte OR è identico al valore m em orizzato nella parola selezionata. Le tre parole non selezionate n on forniscono q u in d i alcun co n trib u to all’o u tp u t finale. A nche se si potrebbe progettare un circuito nel quale le tre porte OR siano collegate di rettam ente alle tre linee di o u tp u t dei dati, in alcuni casi ciò potrebbe causare dei problem i. N eirillustrazione abbiam o d istin to le linee di in p u t da quelle di o u tp u t, m a nelle m em orie reali si utilizzano le stesse linee. Se avessimo collegato le p o n e OR alle linee di o u tp u t il chip avrebbe cercato di spedire in o u tp u t i dati anche du ran te un’operazione di scrittura, forzando ciascuna linea ad assum ere u n particolare valore e interferendo qu in d i con i dati di input. Per questo m otivo è preferibile avere la possibilità di connettere le p o rte OR alle linee di o u t p u t d u ran te le letture e di disconnetterle com pletam ente d u ran te le scritture. Q uello di cui abbiam o bisogno è un in terru tto re elettronico che possa instaurare o interrom pere una co n nessione in pochi nanosecondi. ' * U n in terru tto re del genere è chiam ato buffer non invertente e la Figura 3-30(a) m o stra il sim bolo che lo rappresenta. Esso ha u n d ato di input, u n dato di o u tp u t e u n in p u t d i controllo. Q u a n d o l’in p u t di controllo è alto il buffer funge da collegam ento, com e m o stra la Figura 3 .30(b). Q u a n d o invece l’in p u t di controllo è basso il buffer si com porta com e un circuito aperto, com e m ostra la Figura 3.30(c): è com e se qualcuno avesse scollegato il dato d i o u tp u t dal resto del circuito con una pinza tagliafili. Tuttavia, diversam ente dall’utilizzo di u n a pinza tagliafili, la connessione p u ò essere ripristinata in pochi nanosecondi sem plicem ente reim postando il segnale di controllo al valore alto. La Figura 3 30(d) m ostra u n buffer invertente che si co m p o rta com e un norm ale in vertitore q u a n d o il controllo ha valore alto e d isconnette l’o u tp u t dal circuito q u a n d o il con trollo h a valore basso. 1 d u e buffer sono dispositivi a tre stati, in q u an to possono generare in o u tp u t i valori 0 e 1, o p p u re nessuno dei d ue (circuito aperto). I buffer inoltre am pli ficano il segnale e possono q u in d i guidare più in p u t allo stesso tem po; talvolta vengono
Dato in input
Dato output
!> * Controllo (a)
Figura 3.30
ibi
(c)
(d )
(a) Buffer non invertente, (b) Risultato di (a) quando il controllo è alto, (c) Risultato di (a) quando il controllo è basso, (d) Buffer invertente.
3.3
Memoria
163
impiegaci all'in tern o dei circuiti pro p rio per questa ragione, anche q u ando non sono ri chieste le loro proprietà d ’inversione. T ornan d o al circuito della m em oria dovrebbe essere chiaro quale sia il ruolo dei buffer n o n invertenti che si trovano sulle linee di o u tp u t dei dati. Q u a n d o C S , RD e OE ha n n o tu tti il valore alto anche il segnale per l’abilitazione d e ilo u tp u r è alto; ciò perm ette di attivare i buffer e di spedire una parola sulle linee di o u tp u r. Al contrario, quan d o u n o qualsiasi dei segnali C S , RD e OE è basso, l’o u tp u t è scollegato dal resto del circuirò.
3.3.5
Chip di memoria
U n a pro p rietà interessante della m em oria della Figura 3.29 è che p u ò essere facilm ente am pliata. Q uella che abbiam o descritto è una m em oria 4 x 3 , costituita cioè da q u attro parole di 3 b it ciascuna. Per estenderla alla dim ensione 4 x 8 occorre sem plicem ente aggiungere cinque colonne com poste d a q u attro flip-flop ciascuna, cosi com e cinque linee di in p u t ag giuntive e altrettante linee di o u tp u t. Per passare dalla dim ensione 4 x 3 a quella 8 x 3 si devono aggiungere q u attro nuove righe di tre flip-flop ciascuna, oltre a una linea aggiun tiva, A2, per l’indirizzo. U na m em oria con questa stru ttu ra dovrebbe avere un num ero di pa role esprim ibile com e u n a potenza di 2 al fine d i massimizzare l’efficienza; il num ero di b it di u n a parola può invece assum ere qualsiasi valore. D ato che la tecnologia dei circuiti integrati è particolarm ente adatta a realizzare chip la cui struttu ra interna abbia u no schem a bidim ensionale ripetuto, i chip di m em oria ne sono un’applicazione ideale. C o n l’avanzam ento della tecnologia co n tin u a ad aum entare il num ero di b it che si p u ò inserire in u n chip. Tale valore raddoppia all incirca ogni 18 mesi (legge di M oore). I chip di dim ensioni maggiori n o n sem pre ren d o n o obsoleti quelli più piccoli, dato che spesso occorre trovare dei com prom essi tra diversi fattori, quaii la capacità, la velocità, l'alim entazione, il prezzo e la com o d ità di interfacciam ento. D i solito i chip di dim ensioni m aggiori sono venduti com e p ro d o tti di qualità superiore e q u in d i a u n prezzo per bit più elevato rispetto a quelli più vecchi e p iù piccoli. Fissata u n a dim ensione della m em oria esistono diversi m odi per organizzare il chip. La Figura 3.31 m ostra d u e possibili organizzazioni per un vecchio chip di m em oria della di m ensione di 4 M bit: 5 1 2K x 8 e 4 0 9 6 K x 1. Per inciso, le dim ensioni dei chip di m em o ria sono generalm ente indicate in b it, e non in byte, e anche noi ci atterrem o a questa co n venzione. N ella Figura 3-31 (a) sono necessarie 19 linee per indirizzare un o dei 2 19 byte e o tto linee dì o u tp u t p er caricare e m em òrizzare ì byte selezionati. O ccorre sottolineare u n aspetto della term inologia utilizzata. Su alcuni pin l’applica zione di un ’alta tensione genera una qualche azione, m entre su altri le azioni sono innescate da bassi valori di tensione. Per evitare confusione d uerno che un segnale è asserito (piutto sto che dire che assum e valore alto o basso) per indicare che è im postato in m odo da gene rare una qualche azione. Alcuni pin sono asserid con valore alto, m entre altri con valore basso. I pin asseriti con valore basso sono identificati d a u n a linea sopra il loro nom e. U n segnale chiam ato CS (Chip Select) viene q uindi asserito con il valore alto, m entre u n o chiam ato CS è asserito con il valore basso. L’opp o sto di asserito è negato; q u an d o no n succede nulla di particolare i pin sono negati. T orniam o ora al nostro chip d i m em oria. D ato che un calcolatore ha di solito vari chip di m em oria è necessario disporre di u n segnale che selezioni il chip richiesto in un dato m o m ento, di m odo che solo esso risponda al segnale, m entre tu tti gli altri lo ignorino. Per que-
164
Capitolo 3
AO Al A2 A3 A4 A5 A6 A7 A8 A9 A IO Al 1 A12 A13 Al 4 Al 5 A16 A17 A18
Livello logico digitale
AO-
A1 • DO D1 Chip di memoria 512K X 8
D2
(4 Mbit)
D5
D4
Chip di memoria 4096K X 1 - D (4 Mbit)
D6
07
RASCÀS ■
TTT
TTT
(a)
(b)
CS
Figura 3.31
D3
A2 • A3 ■ A4 ■ A5 ■ A6 • A7 ■ A8 • A9 • A IO '
WE
OE
CS
WE
OE
D u e modi di o rg an izzare un chip di m em oria a 4 Mbit.
sto scopo si utilizza il segnale C S , asserito q u an d o si intende abilitare il chip. Inoltre è ne cessario u n m etodo per distinguere tra le operazioni di lettura e quelle di scrittura; ciò viene fatto dal segnale we [Write Enablè), utilizzato per indicare che i dati devono essere scritti p iu t tosto che letti. Infine il segnale ÒE {Output Enablè) viene asserito per guidare i segnali di output; q uan d o n o n è asserito, l’o u tp u t del chip è sconnesso dal circuito. N ella Figura 3.31 (b) si utilizza u n diverso schem a p er l’indirizzam ento. Al suo in tern o q uesto ch ip è organizzato com e u n a m atrice d i 2048 x 2 0 4 8 celle a 1 bit, che for n iscono u n a capacità totale di 4 M b it. Per indirizzare il chip si seleziona inizialm ente una riga im m e tte n d o un nu m ero a 11 bit sui pin dell’indirizzo e asserendo il segnale r a s (Row Address Strobe, “strobe dell’indirizzo di riga”). Successivam ente si im m e tte sui p in del l’indirizzo u n n u m ero di co lo n n a e si asserisce il segnale C A S {Column Address Strobe, “stro b e d ell’indirizzo d i co lo n n a”). Il chip risp o n d e accettan d o , o p p u re g en erando in o u tp u t, u n d a to da 1 bit. I chip di m em oria di grandi dim ensioni sono spesso costruiti com e m atrici d i n x n indirizzate da nu m eri di riga e colonna. Q uesto tipo di architettura riduce il num ero di p in necessari, m a rende allo stesso tem p o p iù len to il chip, in q u an to sono necessari d ue cicli di indirizzam ento, uno per la riga e u no per la colonna. Per riguadagnare parte della velocità persa a causa dell’architettura, in alcuni chip è possibile specificare u n indirizzo di riga se guito da una sequenza di indirizzi di colonna in m odo da p o ter accedere a bit consecutivi all’in tern o di u n a stessa riga. A n n i fa i ch ip di m em o ria p iù grandi erano spesso organizzati com e nella Figu ra 3 .3 1 (b ). Q u a n d o però la d im en sio n e delle parole di m em oria è passata da 8 b it a 32 b it, i chip larghi 1 b it sono diven tati poco co nvenienti. Per costruire u n a m em oria con parole a 32 b it m ed ian te chip 4 0 9 6 K x 1 è in fatti necessario utilizzarne 3 2 in parallelo.
3.3
DO D1 D2 D3 D4 Chip di memoria 32M X 16
D5 D6
07 (512 Mbit)
-D8 -D9
Memoria
165
AO ■
A1 ■ A2 ■ A3 ■ A4 • A5 • A6 • A7 • A8 • A9 ■ A IO Al 1 A12 ■
Chip di memoria 128M x 4 (512 Mbit)
DO D1 D2 D3
-D 10
-D11
RAS -
-D12
CAS ■
-D13
Banco 0 Banco 1
-D14 •D 15
i l i CS
WE
OE
Banco 0• Banco 1 ■
TTT CS
(a)
Figura 3.32
WE
OE
(b)
D u e m odi di o rg an izzare un chip di m em oria a 512 Mbit.
Q uesti 32 chip forniscono u n a capacità totale di 16 M B, m entre l’utilizzo di chip 512K x 8 richiede solo q u a ttro chip in parallelo e fornisce m em orie della dim en sio n e di 2 M B. Per evitare di avere 32 ch ip per la m em oria, quasi tu tti i p ro d u tto ri offrono attu alm en te fa miglie di ch ip con larghezze da 4, 8 e 16 bit. O v v iam ente se si considerano parole a 6 4 b it la situazione è ancora p iù critica. La Figura 3.32 m ostra d u e esem pi di m o d ern i chip a 512 M b it. I chip h an n o quattro banchi di m em oria d i 128 M b it ciascuno e richiedono q u indi d u e linee per la selezione del banco desiderato. La Figura 3.32(a) m ostra un progetto 3 2 M x 16, con 13 linee per il se gnale R A S , 10 linee per il segnale C A S e 2 linee per la selezione del banco. L’insiem e di q ue sti 25 segnali p erm ette di indirizzare ciascuna delle 225 celle interne, tu tte a 16 bit. La Figu ra 3.32(b) m ostra invece u n progetto l2 8 M x 4, con 13 linee p er il segnale R A S , 12 linee per il segnale C A S e 2 linee p er la selezione del banco. In questo caso i 2 7 segnali perm et tono di selezionare u n a qualsiasi delle 2 27 celle interne a 4 bit. La scelta del n u m ero di righe e colonne di u n chip dipende da scelte ingegneristiche; in ogni caso n o n è necessario che la m atrice sia quadrata. Q uesti esem pi m e tto n o in evidenza d u e distinti problem i, n o n collegati tra loro, che riguardano la progettazione dei chip di m em oria. Il prim o concerne la larghezza dell’o u tp u t (in bit): il chip invia 1, 4, 8, 16 o un altro n um ero di b it in u n a volta sola? Il secondo corrisponde a chiedersi se tu tti gli indirizzi vengono forniti allo stesso tem po su p in distinti oppure si forniscono prim a i valori di riga e poi quelli di colonna com e negli esem pi della Figura 3.32. U n ingegnere che deve costruire un chip di m em oria, p rim a di com inciare a progettare il proprio chip, deve dare una risposta a queste dom ande.
166
3.3.6
Capitolo 3
Livello logico digitale
RAM e ROM
Tutte le m em orie studiate finora possono essere sia lette sia scritte. Le m em orie di questo tipo sono chiam ate RAM (Random Access Memory."'“m em oria ad accesso casuale”); il term ine è fuorviarne in q uanto tu tti i chip di m em oria sono accessibili in m odo casuale, m a orm ai è tal m ente radicato che è impossibile m odificarlo. Esistono due tipi di RAM: statiche e dinam i che. Le RAM statiche (SRAM) sono costruite utilizzando circuiti simili ai flip-flop D e hanno la proprietà di m antenere il proprio contenuto fintanto che vi è alimentazione: per secondi, m inuti, ore o anche giorni. Le RAM statiche sono m olto veloci e i loro tem pi di accesso sono usualm ente dell’ordine dei nanosecondi. Per questa ragione sono m olto diffuse com e m em o rie cache di secondo livello. Al contrario le RAM dinam iche (D RA M ) non usano flip-flop, m a sono com poste da un array di celle, ciascuna delle quali contiene un transistor e un piccolo condensatore. Il con densatore può essere caricato o scaricato per m em orizzare i valori 0 oppure 1. D ato che la ca rica elettrica tende a disperdersi occorre effettuare, a intervalli temporali di pochi millisecondi, un refresh (ricarica) di ciascun bit della RAM dinam ica per evitare che i dati vadano persi. Le RAM dinam iche richiedono un’interfaccia più complessa rispetto a quelle statiche per via dei com ponenti logici esterni che devono occuparsi del refresh; in m olte applicazioni questo svan taggio è com pensato dalla m aggior capacità che le RAM dinam iche possono offrire. Le RAM dinam iche h anno un’elevata densità (molti bit per chip) dato che richiedono soltanto un transistor e un condensatore per b it (rispetto ai sei transistor per bit della migliore RAM statica). Per questa ragione le m em orie centrali sono quasi sem pre costruite utilizzando R A M dinam iche. Q uesta grande capacità h a però un prezzo: le RAM dinam iche sono lente (decine di nanosecondi). Per cercare di trarre vantaggio dalle proprietà di entram bi i tipi di m em oria spesso si ricorre a u n uso com binato, realizzando una cache con RAM statica e la m em oria centrale con RAM dinam ica. Esistono vari tipi di chip di RAM dinam ica. Il più datato è il D RA M FPM (Fast Page Mode), ancora utilizzato nei calcolatori più vecchi, internam ente è organizzato a m atrice di bit, e per funzionare occorre che f hardware fornisca prim a l’indirizzo di riga e poi quello di colon na, allo stesso m odo di quan to avveniva con i segnali RAS e CAS nel contesto della Figura 3 .3 1. Inoltre si utilizzano dei segnali espliciti per indicare alla m em oria quando rispondere; dunque il funzionam ento della m em oria è asincrono rispetto al clock principale del sistema. La D R A M FPM è stata sostituita dalla D R A M E D O (Extended Data Output) in cui un riferim ento alla mem oria p uò avere inizio ancor prim a che sia com pletato il precedente. Q uesta semplice strategia a pipeline non accelera il singolo riferim ento, m a aum enta la larghezza di banda della memoria. I chip FPM e E D O lavoravano in m odo accettabile quando i chip di m em oria avevano dei cicli di 12 ns, o erano addirittura più lenti. Q u a n d o i processori sono diventati così veloci da richiedere m em orie più rapide, i chip FPM e E D O sono stati sostituiti dalle SD R A M (Synchrortus DRAM, D RA M sincrona); la SD R A M è una RAM ibrida, in parte statica e in p an e dinam ica, ed è guidata dal clock principale del sistema. Il maggior vantaggio di queste RAM è che il clock elim ina la necessità dei segnali di controllo per specificare al chip quando deve rispondere. Al contrario la C P U com unica alla m em oria per quanti cicli deve funzionare e poi fa partire l’esecuzione. Ad ogni ciclo la m em oria m anda in o u tp u t 4, 8 o 16 bit, a se conda del num ero delle sue linee di o u tp u t. L’eliminazione dei segnali di controllo aum enta il tasso di trasferim ento dati tra C P U e m em oria.
3.3
Memoria
167
D opo la SD R A M il passaggio successivo è stata la SD R A M D D R ( Doublé Data Rate, “m em oria a duplice tasso di trasferim ento”). In queste m em orie il chip produce un o u tp u t sul fronte di salita del segnale d i clock e u no sul fronte di discesa, raddoppiando così il tasso di trasferim ento dati. U n chip D D R largo 8 bit e funzionante a 200 M H z genera in o u t p ut, per 200 m ilioni di volte al secondo (ovviam ente per un breve intervallo di tem po), due valori a 8 bit; questi dati corrisp o n d o n o a u n burst rate (cioè una frequenza di picco) teo rico di 3,2 G bps.
Chip di memoria non volatile Le RAM non sono l’unico tipo di chip di m em oria. In m olte applicazioni, com e i giocattoli, gli elettrodom estici e le autom obili, il program m a e alcuni dati devono rim anere memorizzati anche quando viene tolta l’alimentazione. Inoltre non si richiede mai la modifica del program m a né dei dati installati. Q uesti requisiti h an n o portato allo sviluppo delle ROM ( Read-Only Memory, “m em oria di sola lettura”) che non possono essere m odificate o cancellate, né inten zionalm ente né accidentalm ente. I dati sono inseriti d urante la sua fabbricazione. C iò avviene esponendo alla luce u n materiale fotosensibile attraverso una maschera contenente il pattern di bit desiderato e incidendo quindi la superficie esposta (o non esposta). L’unico m odo per cambiare il program m a consiste nella sostituzione dell’intero chip. In grandi volum i le R O M sono m olto più econom iche delle RAM dato che il costo per la realizzazione della maschera viene am m ortizzato dal gran num ero di esemplari. Le m em o rie R O M n o n sono però flessibili, dato che n o n possono essere m odificate dopo la fabbrica zione; inoltre il tem po che passa tra l’ordine e la ricezione delle R O M pu ò essere di settimane. Per far sì che le aziende potessero sviluppare più agevolmente nuovi prodotti basati su R O M sono state inventate le PROM ( Programmab/e ROM, R O M program m abile). U na P R O M dif ferisce da u n a R O M per il fatto che può essere program m ata (una volta) sul posto, evitando quindi i tem pi per il com pletam ento dell’ordine da parte del produttore. M olte P R O M con tengono un array di piccoli fusibili, che possono essere bruciati: ciò viene fatto selezionando righe e colonne e applicando un’alta tensione a u n particolare pin del chip. Il passo successivo in questa linea di prodotti è stata la EPROM (Erasable PROM, PR O M cancellabile), i cui cam pi non solo possono essere program m ati, ma anche cancellati. Q u ando si espone la piccola lente al quarzo che si trova nella E P R O M a un’intensa luce ultravioletta per 15 m inuti, tu tti i bit assum ono il valore 1. Se ci si aspetta che la produzione di un chip ri chiederà u n gran num ero di fasi di tesr'le E PR O M risultano m olto più econom iche delle P R O M , dato che possono essere riutilizzate. In genere le E P R O M hanno la stessa organizza zione delle RAM statiche. La E P R O M 27C 0 4 0 a 4 M bit utilizza per esempio la stessa orga nizzazione della Figura 3.31 (a), generalm ente impiegata per una RAM statica. M eglio ancora delle E P R O M sono la EEPROM (la prim a E sta per elettricamente) che possono essere cancellate applicando impulsi elettrici invece di dover inserire il chip in una ca mera speciale per l’esposizione alla luce ultravioletta. Inoltre queste m em orie sono riprogram m abili senza doverle rim uovere dal circuito, m entre una E PR O M deve essere inserita nello spe ciale dispositivo che ne perm ette la program m azione. Le E E PR O M però non possono essere più grandi di 1/64 delle com uni E PR O M e la loro velocità è solo la m età. Le E E PR O M non possono com petere con le D R A M e le SRAM dato che sono 10 volte p iù lente, h an n o una capacità 100 volte m inore e sono m olto più costose; esse sono utilizzate solo quando la loro proprietà di non volatilità è cruciale.
168
Capitolo 3
Tipo
Livello logico digitale
Categoria
Cancellazione
Volatile
Byte modificabili
Tipico utilizzo
SRAM
Read/write
Elettrica
SI
Sì
Cache di secondo livello
DRAM
Read/write
Elettrica
Sì
Sì
Memoria centrale (vecchia)
SDRAM
Read/write
Elettrica
SI
Sì
Memoria centrale (recente)
ROM
Read-only
Impossibile
No
No
Elettrodomestici (prodotti in grandi volumi)
PROM
Read-only
Impossibile
No
No
Dispositivi (prodotti in piccoli volumii
EPROM
Read-mostly
Raggi U V
No
No
Prototipazione di dispositivi
EEPROM
Read-mostly
Elettrica
Si
No
Prototipazione di dispositivi
Flash
Read/write
Elettrica
No
No
"Pellicola" per macchine fotografiche digitali
Figura 3.33
^
Confronto Ira vari tipi di memoria.
Un tipo più recente di E E PR O M è la m e m o ria flash. D iversam ente dalla E P R O M , che è cancellabile per esposizione alla luce ultravioletta, e dalla E E PR O M , nella quale ogni sin golo byte è cancellabile, la m em oria flash è cancellabile a blocchi e riscrivibile. C o m e la EE PR O M anche la m em oria flash p uò essere cancellata senza doverla rim uovere dal circuito. Vari p ro d u tto ri forniscono piccole schede con circuiti stam pati che contengono una m em oria flash; la sua capacità può raggiungere 1 G B e spesso viene usata, oltre che per altri scopi, com e “pellicola” per m em orizzare le foto delle m acchine fotografiche digitali. In fu tu ro le m em orie flash potrebbero sostituire i dischi; ciò rappresenterebbe un enorm e m iglioram ento per via del loro tem po di accesso d i 50 ns. Il principale problem a ingegneristico è che a t tualm ente si esauriscono dopo 100.000 cancellazioni, m entre i dischi resistono per vari anni, in dip en d en tem en te da q u an te volte vengono riscritti. La Figura 3.3 3 m ostra un riepilogo dei vari tip i di m em orie.
3.4
Chip della CPU e bus
Forti delle conoscenze acquisite sui chip SSI, M SI e su quelli di m em oria possiamo ora co m inciare a m ettere insieme i vari pezzi per affrontare il sistema nel suo complesso. In questo paragrafo analizzeremo inizialm ente alcuni aspetti generali delle C P U dal p u nto di vista del li vello logico digitale, c o n ta tti compresi (significato dei segnali sui singoli pin), e fornirem o an che un’introduzione all’architettura dei bus, dato che le C P U dipendono strettam ente dal m odo in cui questi sono progettati. Nei paragrafi successivi darem o esempi più dettagliati di C P U , bus, e loro interfacce.
3.4.1
Chip della CPU
T u tte le C P U m o d ern e sono c o n te n u te in u n u nico chip, rendendo in questo m odo ben defin ita l'in terazio n e con il resto del sistem a. O g n i chip di C P U ha u n insiem e di pin at traverso il quale passano tu tte le relative com unicazioni verso il m o n d o esterno. Alcuni
3.4
Chip della CPU e bus
169
p in spediscono i segnali della C P U , a ltri ricevono quelli del m o n d o esterno e altri anco ra possono fare en tram b e le cose. C o n o scen d o la funzione di tu tti i pin possiam o capire in quale m o d o la C P U interagisce con la m em o ria e i dispositivi di I /O nel livello logico digitale. I pin di u n a C P U possono essere divisi in tre tipi: indirizzi, dati e co ntrolli. Q u esti p in sono collegati ad analoghi pin p resenti sulla m em oria, o sui ch ip di I/O , m ediante un insiem e di cavi paralleli ch iam ato bus. La C P U , p er prelevare un’istruzione, ne im posta l’indirizzo sui suoi pin di indirizzam en to , e poi asserisce una o più linee di co n trollo per inform are la m em oria che vuole leggere u n a parola. La m em oria risponde spedendo la pa rola richiesta sui p in della C P U d edicati ai d ati e asserendo u n segnale che notifica che l’operazione è stata com p letata. Q u a n d o la C P U vede questo segnale accetta la parola ed esegue l’istruzione. Se l’istruzione richiede la lettu ra o la scrittura di cen i dati, l’intero processo viene ri p etuto per ogni parola di dati. In seguito entrerem o nei dettagli, ma per il m om ento è im po rtan te capire che la C P U com unica con la m em oria e i dispositivi di I/O inviando e ac cettando segnali sui propri pin. N o n esiste altro tip o di com unicazione. D ue dei principali param etri che d eterm in an o le prestazioni di una C P U sono il n u m ero di pin d ’indirizzo e il num ero di pin di dati. U n chip con m pin d ’indirizzo può in dirizzare fino a 2 m locazioni d i m em oria; valori co m u n i di m sono 16, 2 0 , 32 e 64. A nalogam ente un chip con n pin di dati può leggere o scrivere in un’unica operazione una parola a n b it (valori co m u n i di n sono 8, 16, 32 , 36 e 64). U na C P U con 8 pin di dati do vrà eseguire q u attro operazioni per leggere u n a parola a 32 bit, m entre una C P U con 32 pin di dati può com piere lo stesso lavoro in u n a sola operazione. Il chip con 32 pin di dati è qu in d i m olto più veloce, m a m olto più costoso. O ltre ai pin d ’indirizzo e dei dati, le C P U sono d otate anche di alcuni p in di controllo. Q uesti regolano il flusso e la tem porizzazione dei dati da e verso la C P U , e possono essere utilizzati anche in vari altri m odi. T utte le C P U h an n o pin per l’alim entazione (generalm ente + 3,3 oppu re +5 volt) e per la terra, oltre a u n segnale di clock (un’on d a quadra con u n a par ticolare frequenza); gli altri p in v ariano invece in m odo considerevole da ch ip a chip. C io n o n o stan te i pin di co ntrollo possono essere approssim ativam ente raggruppati nelle se guenti categorie principali: 1. controllo del bus U 2. in terru p t 3. arbitraggio del bus 4. com unicazione con il coprocessore 5. stato 6. altro. In seguito descriverem o brevem ente queste categorie, m entre fornirem o maggiori dettagli qu an d o studierem o i chip del Pentium 4, dell’U ltraSPA RC III e dell’8051. La Figura 3.34 m ostra un generico chip di u n a C P U che usa questi gruppi di segnali. I pin per il controllo del bus m andano principalm ente sul bus dei segnali dalla C P U (destinati alla m em oria e ai chip di I/O ) per notificare q u an d o la C P U vuole leggere dalla
170
Capitolo 3
Figura 3.34
Livello logico digitale
Una generica CPU. Le frecce indicano i segnali di input e di output. I trattini diagonali indicano pin multipli; per una specifica CPU un valore ne indica la quantità.
o scrivere in m em oria oppure com piere altre azioni. La C P U utilizza questi pin per controllare il resto del sistem a e com unicargli quali operazioni in tende com piere. I pin di in te rru p t sono degli in p u t che giu n g o n o alla C P U dalle periferiche. N ella m aggior p arte dei sistem i la C P U p u ò co m u n icare a un dispositivo di I/O l’inizio di un’op erazione e, m en tre questo p o rta avanti il p ro p rio lavoro, passa a eseguire qualche al tra operazione. N o n appena il dispositivo ha co m p letato la pro p ria operazione asserisce un segnale su u n o di questi pin in m o d o da in terro m p ere la C P U e p erm etterle di utiliz zare il dispositivo, per esem pio per controllare se si siano verificati degli errori di I/O . A lcu ne C P U h an n o un pin d i o u tp u t per spedire u na conferm a in risposta a un segnale di in terru p t. I pin p er l’arbitraggio del bus sono necessari per regolare il traffico sul bus, allo scopo di evitare che due dispositivi cerchino di usarlo nello stesso m om ento. Ai fini dell’arbitraggio la C P U co n ta q u an to un altro dispositivo e anch'essa deve fare esplicita richiesta di u ti lizzo del bus. A lcune C P U sono progettare per funzionare con coprocessori com e i chip in virgola m obile oppure, in alcuni casi, i chip grafici o di altro tipo. Per facilitare la com unicazione tra C P U e coprocessore sono disponibili pin speciali per ricevere e soddisfare vari tipi di ri chieste. O ltre a questi segnali alcune C P U possono avere altri pin per altri scopi, per esem pio per fornire o ricevere inform azioni di stato, o p er resettare il calcolatore o ancora per ga rantire co m patibilità con chip dì I /O più vecchi.
3.4.2
Bus del calcolatore
Un b u s è u n collegam ento elettrico che unisce diversi dispositivi. I bus possono essere clas sificati in base alla loro funzione; alcuni di loro sono im piegati internam ente alla C P U per trasferire d ati da e verso la ALU, m en tre altri sono esterni alla C P U e servono a connetterla con la m em oria o con altri dispositivi di I/O . C iascun tipo di bus soddisfa certi requisiti e gode di p ro p rietà specifiche. In questo paragrafo e nei successivi ci concentrerem o sui bus
3.4
Chip della CPU e bus
171
che co n n etto n o la C P U alla m em oria e ai dispositivi di I /O , m entre nel prossim o capitolo esam inerem o in m odo più dettagliato i bus intern i alla C P U . 1 prim i P C avevano un unico bus esterno chiam ato anche bus di sistema. Esso era com posto d a 50 a 100 fili paralleli di ram e che si inserivano nella scheda m adre e i cui connettori erano distanziati a intervalli regolari per perm ettere l’inserim ento di m em orie e schede di I/O . G eneralm ente i personal com puter m oderni hanno invece un bus specifico tra la C P U e la m em oria e (almeno) un altro bus per le periferiche. La Figura 3.35 m ostra un sistema m ini male, com posto da un bus di m em oria e un bus di I/O . C o m e spesso avviene in letteratura i bus sono stati disegnati nella figura com e frecce “larg h e ”. Vi è u n a sottile differenza tra una linea spessa e u n a linea intersecata da un trat tino diagonale vicino al quale si legge un num ero (di bit). Q u an d o tu tti i bit sono dello stesso tipo, cioè sono, per esem pio, b it d ’indirizzo o ppure bit di dati, si usa co m unem ente il tra t tino diagonale. Q u a n d o invece sono coinvolte linee d ’indirizzo, di dati e di controllo si uti lizza con più frequenza la freccia spessa. M entre i progettisti della C P U sono liberi di utilizzare all’interno del chip il tipo di bus che preferiscono, p er i bus esterni bisogna invece definire delle precise regole di funzio nam en to , che devono essere rispettate dai dispositivi a loro collegati. La cosa consente che anche schede progettate da altri p ro d u tto ri possano collegarsi correttam ente al bus. L’insieme di queste regole è d etto protocollo del bus. In oltre devono essere definite le specifiche m ec caniche ed elettriche in m odo che le schede p ro d o tte da terze parti abbiano le dim ensioni corrette e i loro connettori siano m eccanicam ente com patibili con quelli della scheda m a dre in term ini di tensione, tem porizzazione, e così via. Nel m ondo dei calcolatori esiste u n gran nu m ero di bus am piam ente utilizzati. Alcuni fra i p iù conosciuti, sia attuali sia d ’im portanza storica, sono i seguenti (tra parentesi sono indicati i calcolatori che li h an n o ad o ttati): l’O m n ib u s (P D P -8 ), l’U nibus (P D P -11), il M ulribus (8086), il bus V M E (apparecchiature per i laboratori di fisica), il bus P C IBM (P C /X T ), il bus ISA (P C /A T ), il bus EISA (80386), il M icro C h an n el (PS/2), il N ubus (M acintosh), il bus P C I (m olti PC ), il bus SCSI (m olti P C e w orkstation), l’Universal Serial Bus (P C m oderni) e il FireW ire (elettronica di consum o). Il m o n d o sarebbe probabilm ente C h ip della C P U
Figura 3.35
Sistema di un calcolatore con più bus.
Capitolo 3
172
Livello logico digitale
M a ste r
S la v e
E s e m p io
CPU
M e m o r ia
P r e lie v o d e lie is t r u z io n i e d e i da ti
CPU
D i s p o s i t i v o d i I/ O
I n i z i o d e l t ra s fe rim e n to d e i dati
CPU
C o p ro ce sso re
F i s s a g g i o d e ll is t r u z io n e a l c o p r o c e s s o r e rld p a r te d e lla C P U
I/ O
M e m o r ia
D M A ( D ir e c t M e m o r y A c c e s s )
C o p ro ce sso re
CPU
P r e lie v o d e g li o p e r a n d i d a lla C P U d a p a rte d e l c o p r o c e s s o r e
Figura 3.36
Esempi di master e slave del bus.
m igliore se ru tti, tran n e u n o , sparissero di colpo dalla faccia della terra (d’accordo, è un po’ tro p p o , m a che cosa dire se ne scom parissero tu tti tranne due?). S fortunatam ente sem bra m o lto diffìcile che avvenga u n a standardizzazione in quest’area, in q u an to sono stati già fatti troppi investim enti in tu tti questi sistem i, fra loro incom patibili. C om in ciam o il nostro studio parten d o dal funzionam ento dei bus. A lcune periferiche che si collegano al bus sono attive e possono iniziare un trasferim ento dati, m entre altre sono passive e restano in attesa di u n a richiesta. Q uelle attive sono chiam ate master , e quelle pas sive slave. Q u a n d o la C P U o rd in a al controllore di un disco di leggere o scrivere un blocco, svolge il ruolo di master, e il controllore del disco quello di slave. Successivamente però il controllore del disco fungerà da m aster nel m om ento in cui o rd in a alla m em oria di accet tare le parole che sta leggendo dal disco. La Figura 3.36 elenca alcune tipiche com binazioni di m aster e slave. La m em oria n o n può mai fungere da master. M olto spesso i segnali digitali generati dalle periferiche sono troppo deboli per alimentare un bus, so p rattu tto se è relativam ente lungo o se è collegato a m olti dispositivi. Per questo m otivo m olti m aster sono connessi al bus m ediante un chip chiam ato driver del bus, che funge essenzialm ente da am plificatore digitale; in m odo analogo la m aggior parte degli slave sono connessi al bus attraverso u n ricevitore del bus. Per le periferiche che possono svol gere sia il ruolo di m aster sia quello di slave si utilizza un chip chiam ato trasmettitore-ri cevitore del bus. Spesso questi chip d ’interfaccia sono dei dispositivi a tre stati per perm et tere loro d i essere Liberi (sconnessi) q u an d o non sono necessari; un’altra possibilità, che per m ette di o ttenere Io stesso effetto, consiste nell’agganciare la periferica al bus tram ite un col lettore aperto. Q u a n d o d u e o più dispositivi su una linea a collettore aperto asseriscono la linea nello stesso istante, il risultato è un O R di tu tti i segnali; spesso questa organizzazione è ch iam ata OR-cablata. Nella m aggior parte dei bus alcune linee sono a tre stati m entre al tre, che richiedono la proprietà di essere O R -cablate, sono a collettore aperto. Allo stesso m odo della C P U anche il bus ha i propri indirizzi, i propri dati e le p ro prie linee d i controllo. C io n o n o sta n te n o n è necessario che vi sia una corrispondenza unoa-u n o tra i p in della C P U e i segnali del bus. A lcune C P U h a n n o per esem pio tre pin che codificano se si sta effettu an d o u n a le ttu ra o u na scrittu ra d a m em oria, u n a le ttu ra o una scrittu ra di I /O o p p u re un’altra operazione. U n norm ale bus p o treb b e avere una linea per la lettu ra da m em oria, u n a seconda per la scrittu ra in m em oria, una terza per la le ttu ra da periferica, una q u arta p er la scrittu ra su periferica e così via. In qu esto caso si renderebbe necessario un decodificatore tra la C P U e il bus per far corrispondere le d u e estrem ità, cioè p er convertire il segnale codificato in 3 b it in segnali distin ti che possono essere spe d iti sulle varie linee del bus.
3.4
Chip della CPU e bus
173
Il progetto e il funzionam ento dei bus sono argom enti piu tto sto complessi, sono tra t taci in vari libri (A nderson et al., 2004; Solari e W illse, 2004). Le principali decisioni da prendere nella progettazione di un bus riguardano l’ampiezza, la temporizzazione, l’arbitraggio e le operazioni che consente. C iascuna di queste scelte ha un im p atto significativo sulla ve locità e sulla larghezza di ban d a del bus.
3.4.3
Ampiezza del bus
N ella progettazione dei bus il param etro più scontato da considerare è la sua ampiezza. M aggiore è il num ero di linee d ’indirizzo di u n bus, maggiore sarà la q u a n tità di m em oria che la C P U potrà indirizzare d irettam ente. Se u n bus ha n linee d ’indirizzi, una C P U può indirizzare 2 " diverse locazioni di m em oria. La cosa sem bra p iu tto sto semplice. Il problem a è che bus più larghi richiedono un num ero m aggiore di fili rispetto a quelli più stretti. Q uesto significa anche una m aggiore occupazione di spazio (per esem pio sulla scheda m adre) e la necessità di utilizzare connettori più grandi. D ato che tu tti questi fattori rendono il bus p iù costoso occorre trovare u n com prom esso tra la dim ensione massima di m em oria e il costo del sistema. U n sistema con 64 linee d ’indirizzi e 232 byte di m em oria costerà più di u no con 32 linee d ’indirizzi e 232 byte di m em oria, m a nel secondo caso non è possibile espandere la m em oria in u n secondo m om ento. Il risultato di questa osservazione è che m olti progettisti di sistemi tendono a essere poco lungim iranti, con conseguenze negative. Il P C IBM originario conteneva una C P U 8088 e un bus con indirizzi a 20 bit, com e m ostrato nella Figura 3.37(a); con 20 bit a disposi zione il P C poteva indirizzare soltanto 1 M B di m em oria. C o n la C P U successiva, l’8 0 286, Intel decise di aum entare lo spazio degli indirizzi a 16 M B; questo au m en to richiese l’aggiunta di q u attro linee di bus (senza m odificare te 20 precedenti p er ragioni di retrocom patibilità), com e m ostra la Figura 3.37(b). P u rtro p p o fu necessario aggiungere anche alcune nuove linee di controllo per gestire le nuove linee d ’in dirizzo. Q u a n d o apparve l’8 0 3 8 6 furono aggiunte altre o tto linee d’indirizzo oltre alle linee di co n tro llo aggiuntive, com e m ostra la Figura 3.37(c). Il progetto risultante (il bus EISA)
I n d i r i z z i a 2 0 b il
(a)
(b)
Figura 3.37 Crescita nel tem po degli indirizzi de! bus.
(c)
174
Capitolo 3
Livello logico digitale
è m o lto m eno ordinato d i com e sarebbe p o tu to essere se si fosse p artiti da zero avendo a d i sposizione fin dall'inizio tu tte e 32 le linee. C o n il tem po, non solo tende a crescere il'n u m ero delle linee d ’indirizzo, m a anche il num ero delle linee di dati, seppur per una ragion diversa. Esistono due m odi per au m en tare la larghezza di ban d a dei dati su u n bus: d im inuire il periodo di clock del bus (più tra sferim enti/s) o p p u re aum entare la larghezza dei dati del bus. U n’altra possibilità è quella di aum en tare la velocità del bus, anche se ciò p one alcune difficoltà; i segnali su linee distinte viaggiano infatti a velocità leggerm ente diverse. Q uesto problem a è conosciuto com e d isa l lin e a m e n to d el b u s, e più il bus è veloce più questo problem a diventa m arcato. U n altro problem a che sorge nel caso in cui si in ten d a velocizzare il bus è la perdita della retrocom patibilità. Schede progettate per bus più lenti non funzioneranno con il nuovo bus. R endere inutilizzabili le vecchie schede n o n rende di certo felici né i proprietari di queste schede né i loro p ro d u tto ri. Per q u esta ragione l’approccio p iù utilizzato è quello di aggiungere nuove linee di d ati, com e m o stra to nella Figura 3 .3 7 . In ogni caso, com e ci si p o treb b e aspettare, questa crescita increm entale no n genera com e risultato u n ’a rch ite t tu ra sem plice e o rd in ata. I P C IB M e i loro successori, per fare un esem pio, sono passati d a o tto linee di dati a 16 e, in seguito, a 32 su un bus che è rim asto essenzialm ente dello stesso tipo. Per aggirare il problem a di bus tro p p o am pi a volte i progettisti op tan o per un bus multiplexato. In questa architettura invece d i tenere .separate le linee d ’indirizzo e quelle dei dati, si utilizza u n certo num ero d i linee, per esem pio 32, per entram bi. A ll’inizio di un’o perazione sul bus le linee sono utilizzate per gli indirizzi, m entre in seguito vengono im pie gate p er i dati. Per esem pio nel caso di u n a scrittura in m em oria questo significa che le li nee d ’indirizzo devono essere im postate ai valori corretti e propagate fino alla m em oria prim a di spedire i dati sul bus. Q u a n d o si utilizzano linee separate è invece possibile spedire gli in dirizzi e i dati allo stesso tem po. L’uso del m ulripiexing riduce l’am piezza del bus (e quindi il costo), m a rende il sistem a più lento. Q u a n d o devono prendere le proprie decisioni, i pro gettisti sono obbligati a valutare a tten tam en te tu tte queste possibilità.
3.4.4
Temporizzazione del bus
I bus possono essere separati in d u e categorie distinte in base alla loro tem porizzazione. Un bus sincrono h a una linea pilotata da un oscillatore a cristalli: su questa linea un segnale co n siste in un’o n d a quadra con frequenza generalm ente com presa tra 5 e 100 M H z. T utte le operazioni sul bus richiedono u n num ero intero di questi cicli, chiam ati cicli di bus. L’aJcro tipo di bus, il bus asincrono, n on ha invece un orologio principale; i cicli di bus possono avere u n a qualsiasi lunghezza e n o n devono essere necessariam ente uguali nella com unica zione tra dispositivi.
Bus sincroni C onsideriam o la tem porizzazione m ostrata nella Figura 3.38(a) com e esem pio del funzio nam en to d i un bus sincrono e riferiam oci a u n clock a 100 M H z , che fornisce u n ciclo di bus di 10 ns. A nche se questo valore potrebbe sem brare un po’ lento rispetto alle velocità delle C P U , superiori a 3 G H z , occorre considerare che solo pochi bus dei P C esistenti sono m olto più veloci. Per fare u n esem pio il bus PC I, m olto diffuso, funziona generalm ente a
3.4
Chip della CPU e bus
175
-------------------------Ci do di lettura con 1 stato di attesa-------------------- ► t _
J
i
\
*AD
2
l
•
r ■
ADDRESS
/c
i
Tempo
Simbolo
Parametro
T ad
R it a r d o d e ll'o u t p u t d e l l 'in d i r iz z o
Tmi
I n d ir iz z o s ta b ile p r im a d i M R E Q
Min
Max
Unità
4
n se c
2
T„
R it a r d o d i M R E Q risp e tto al fro n te d i d is c e s a d i
T«
R it a r d o d i R D risp e tto a l fro n te d i d is c e s a d i in T,
in T,
T «
T e m p o d i im p o s t a z . d e i da ti p r im a d e l fro n te d i d is c e s a d i
Tmh
R it a r d o d i M R E Q risp e tto al fro n te
T rh
R it a r d o d i R D risp e tto a l fro n te d i d is c e s a d i *1» in T 3
Toh
T e m p o d i m a n t e n i m e n tc r'd e i dati d o p o la n e g a z io n e d i R D
di d is c e s a di O
nsec 3
nsec
3
. n se c
3
n se c
3
n se c
2
in T j
0
nse c
nsec
(b)
Figura 3.38
(a) Temporizzazione di una lettura su un bus sincrono, (b) Specifiche di alcuni tempi critici.
33 M H z oppure a 66 M H z. Le ragioni per le quali i bus attuali sono lenti sono già state sot tolineate (disallineam ento, retrocom patibilità, ecc). N el nostro esem pio assum erem o in o ltre che la le ttu ra dalla m em oria richieda 15 ns a partire dal m o m e n to in cui l’indirizzo è stabile. C o n questi p aram etri, com e vedrem o a breve, saranno necessari tre cicli d i bus per leggere una parola. C o m e m o stra la figura, il p rim o ciclo inizia in co rrisp o n d en za del fro n te dì salita di T , e il terzo te rm in a nel fro n te
176
Capitolo 3
Livello logico digitale
d i salita di T 4. Si noti che i fro n ti di salita e di discesa no n sono stati disegnati vertical m en te in q u a n to nessun segnale elettrico p u ò cam biare il p ro p rio valore in un tem p o nullo. In questo esem pio assum erem o che il segnale im pieghi 1 ns per cam biare valore. 11 clock e le linee r d d r e s s , DATA, MREQ, RD e w ait sono tu tti m ostrati u sando fa stessa scala tem porale. L’inizio di T | è definito dal fronte di salita del clock. A partire da T , la C P U fornisce l’indirizzo della parola sulle linee d ’indirizzo. D ato che l’indirizzo non è un singolo valore, com e invece il clock, n on possiam o m ostrarlo nella figura com e una sìngola linea; viene q u in di rappresentato con due linee che si incrociano nel m om ento in cui l’indirizzo cambia, [^ombreggiatura prim a del p u n to d’intersezione indica inoltre che il valore non è im portante. A dottando la stessa convenzione vediam o che il co n ten u to delle linee dei dati no n è signi ficativo fino a T j . D opo che le linee d ’indirizzo si sono stabilizzate sui nuovi valori, vengono asserite MREQ e RD. La prim a indica che si sta per accedere alla m em oria (invece che a un dispositivo di I/O ), m entre la seconda è asserita per le letture e negata per le scritture. D ato che la m em oria im piega 15 ns dopo che l’indirizzo è stabile (inizia durante il prim o ciclo di clock) non può for nire i dati richiesti d urante T 2. La m em oria asserisce la linea wait all’inizio di T i per segna lare alla C P U di non aspettarla. Q uesta azione inserisce alcuni stati d i attesa (cicli di bus addizionali) finché la m em oria non com pleti l’operazione e neghi w a i t . N ell’esempio è stato inserito uno stato di attesa ( T J , dato che la m em oria è troppi) lenta. All’inizio di T\ la m em oria nega W A I T , in q u anto è sicuro che Ì dati saranno disponibili nel corso del ciclo corrente. D urante la prim a m età di T 3, la m em oria m ene i dati sulle linee apposite. N el fronte di discesa di T 3 la C P U consulta (cioè legge) le linee dei dati, m em orizzando il valore in un suo registro. D ovendo leggere i dati la C P U nega MREQ e RD. Se necessario può com inciare un al tro ciclo di m em oria nel successivo fronte di salita del clock. Q uesta sequenza può essere ri petuta indefinitam ente. C hiariam o ora il significato degli o tto sìm boli presenti nel diagram m a della Figura 3-38(b) che elenca le specifiche di tem porizzazione. Per esem pio, è l’intervallo di tem po tra il fronte di salita del ciclo di clock T , e il m om ento in cui vengono im postate le linee d ’indirizzo. Secondo le specifiche di tem porizzazione, T ADs 4 ns. Q uesto significa che il pro du tto re della C P U garantisce che d u ran te ogni ciclo di lettura la C P U m anderà in o u tp u t l’indirizzo d a leggere entro 1 I ns dal p u n to m edio del fronte di salita di T ,. Le specifiche di tem porizzazione richiedono inoltre che i dati siano disponibili sulle li nee alm eno T DS ns (cioè 2 ns) prim a del fronte di discesa di T 3. La cosa è necessaria per dare il tem po alla linea di stabilizzarsi prim a che la C P U legga. La com binazione dei vincoli su T AD e T DS fa si che, nel caso peggiore, la m em oria abbia a disposizione soltanto 25 - 4 —2 = 19 ns tra il m om ento in cui appare l’indirizzo c quello in cui deve fornire i dati. D ato che sono su f ficienti 10 ns, anche nel caso peggiore una m em oria a 10 ns è sem pre in grado di fornire la ri sposta d urante il d c lo T 3. Al contrario u n a m em oria a 20 ns potrebbe non farcela in tem po e in tal caso dovrebbe inserire u n secondo stato di attesa e rispondere durante T 4. Le specifiche di tem porizzazione garantiscono inoltre che l’indirizzo venga im postato alm eno 2 ns prim a che MREQ sia asserito. Q uesto intervallo tem porale può essere significativo nel caso in cui MREQ piloti la selezione del chip sulla memoria; questo poiché alcune m em o rie richiedono u n certo tem po per l’im postazione dell’indirizzo prim a di selezionare il chip. E
3.4
Chip della CPU e bus
177
chiaro che un progettista di C P U n o n dovrebbe scegliere un chip di m em oria che richiede un tem po di setup di 3 ns. I vincoli su I'm e T ri fanno sì che M R E Q e R D vengano asseriti entro 3 ns dalla discesa del clock T |. Nel caso peggiore il chip di m em oria, per m ettere i propri dati sul bus, avrà a di sposinone solo 10 + 10 - 3 - 2 *-»- frequenza di clock 23 + -*- Diagnostica
TRDY# Rarità * BN R *
Inizializzazione Snooping
Dati
DRDY* D BSY? t — Altri segnali
Ferità» •* * Mise - * —+
Alim entazione
Figura 3.45
Disposizione logica dei contatti del Pentium 4 . 1 nomi interamente in maiuscolo sono i nomi ufficiali di Intel per i singoli segnali; gli altri sono nomi di gruppi di segnali o descrizioni dei segnali.
D opo aver acquisito il bus, una C P U o un altro m aster può effettuare una richiesta sul bus utilizzando il successivo g ru p p o di segnali. G li indirizzi h an n o 3 6 bit, m a i 3 m eno signifi cativi devono valere sem pre 0; n on h an n o bisogno di alcun c o n tatto e quindi A# ha soltanto 33 pin. T utti i trasferim enti sono a 8 byte e sono allineati ai lim iti di un gruppo di 8 byte. C o n indirizzi a 36 bit la m assim a dim ensione indirizzabile della m em oria è di 230 byte, pari a 64 GB. Q u an d o si scrive un indirizzo sul bus il segnale ADS# viene asserito per com unicare alla destinazione (per esempio la mem oria) che le linee d ’indirizzo sono valide. Successivamente si utilizzano le linee REQ# per spedire il tipo di ciclo di bus richiesto (per esempio leggere una parola oppure scrivere un blocco). Le due linee di parità proteggono A# e REQ#. Le cinque linee degli errori sono utilizzate per riportare errori in virgola m obile, in terni, sul controllo (cioè sull hardw are) della m acchina o di altro tipo. Il gru p p o Risposta contien e i segnali utilizzati dallo slave per restituire un risultato al master. RS# contiene il codice di stato (status code) m entre TRDY# indica che lo slave è pronto
188
Capitolo 3
Livello logico digitale
per accettare dati dal master. A nche su questi segnali viene effettuato un controllo di parità. BNR è utilizzato per asserire u n o stato di attesa q uan d o il dispositivo indirizzato non è in grado di rispondere in tem po. " L’u ltim o gruppo è utilizzato per il trasferim ento effettivo dei dati. D # è usato per in serire 8 byte di dati nel bus e la loro presenza viene annunciata asserendo D R D Y # . D B S Y # viene invece utilizzato per com unicare a tu tti i dispositivi che in quel m o m en to il bus è oc cupato. I segnali di dati m iscellanei riguardano altri asperei. RESET# serve per reinizializzare la C P U in caso di calamità o quando l’utente preme il pulsante di reset sulla parte frontale del PC. È possibile configurare il P entium 4 in m o d o che utilizzi gli in terru p t allo stesso m odo dell’8088 (per la retrocom patibilità) o p p u re secondo una nuova m odalità che impiega un dispositivo chiam ato A P IC (Advanced Programmable Interrupt Controlla). Il Pentium 4 p uò funzionare a varie tensioni, m a deve sapere quale di queste viene u ti lizzata. I segnali per la gestione dell’alim entazione sono utilizzati per la selezione autom atica della tensione, p er com unicare alla C P U che la tensione è stabile e per altri aspetti riguar dan ti l’alim entazione. Sem pre m ed ian te questi segnali vengono gestiti i vari stati di riposo, dato che la loro scelta è fatta allo scopo di ridurre il consum o energetico. Il Pentium 4, n o n o stan te u n a gestione sofisticata dell’alim entazione, si riscalda no te volm ente. Il gru p p o per la gestione del calore ha a che fare con la tem peratura e perm ette alla C P U di com unicare all’am biente circostante che si trova in pericolo di surriscaldam ento. Se la sua tem p eratu ra in tern a raggiunge 130°C (266°F) viene asserito u n o dei pin. Q u an d o una C P U raggiunge questa tem peratura significa che sta sognando di andare in pensione e progetta di diventare un fornello da campeggio! Il gru p p o di segnali della frequenza di clock deve determ inare la frequenza del bus di sistema. Il g ru p p o p er la diagnostica contiene invece segnali per sistemi di test e debugging secondo lo standard IEEE 1 1 4 9 .1 dei test JT A G . II gruppo di inizializzazione gestisce il boot, cioè l’avvio del sistema. L’u ltim o g ru p p o è un calderone di segnali tra i quali ne troviam o u n o che indica se la socket della C P U è occupata, u n o che abilita l’em ulazione 8088 e altri dedicati a u ti lizzi p articolari.
Pipeline sul bus di memoria del Pentium 4 Le odierne C P U com e il Pentium 4 sono m olto p iù veloci rispetto alle m oderne m em orie D R A M . Per evitare che la C P U rim anga in attesa a causa della m ancanza di dati è fondam entale ottenere dalla m em oria il m assim o th ro u g h p u t possibile. Per questa ragione il bus di m em oria del Pentium 4 è alcam ente stru ttu ra to a pipeline, al p u n to che su di esso pos sono avvenire fino a o tto transazioni contem poranee. Il concetto di pipeline è stato visto nel contesto delle C P U (Figura 2.4) nel corso del C ap itolo 2, e anche le m em orie possono avere un’arch itettu ra a pipeline. Per consentire l’uso della pipeline, le richieste di m em oria del Pentium 4, chiam ate tr a n sazio n i, sono com poste da sei stadi. 1. Fase di arbitraggio del bus. 2. Fase di richiesta.
3.5
Esempi di chip della CPU
189
3. Fase di segnalazione dell’errore. 4. Fase di investigazione ( snoop). 5. Fase di risposta. 6. Fase dei dati. N o n tu tte le fasi sono necessarie per tu tte le transazioni. La p rim a fase determ ina quale dei potenziali m aster del bus diventerà effettivam ente tale. La seconda perm ette di inserire gli indirizzi nel bus e di effettuare richieste. La fase di segnalazione deU’crrore consente allo slave di annunciare che l’indirizzo ha un errore di parità o che qualcosa è andato storto. La fase di investigazione (snoop), necessaria solo nei sistemi m ultiprocessore, perm ette a una C P U di indagare su un’altra. La fase di risposta è il m om ento in cui il m aster viene a sapere se sta per ricevere o ppure no i dati che desiderava. Infine l’ultim a perm ette il trasferim ento effet tivo dei dati verso la C P U che li ha richiesti. Il segreto dell’organizzazione a pipeline del bus di m em oria del Pentium 4 è che cia scuna fase utilizza diversi segnali del bus, essendo così com pletam ente indipendente dalle al tre. I sei gruppi di segnali richiesti sono quelli m ostrati sulla sinistra della Figura 3.45. Per fare un esem pio, u n a C P U può cercare di ottenere il bus utilizzando i segnali di arbitraggio. D o p o aver acquisito il d iritto a procedere, rilascia queste linee e inizia a utilizzare il gruppo di linee relative a Richiesta. N ello stesso tem po un’altra C P U o u n dispositivo di I/O può entrare nella fase di arbitraggio, e così via. La Figura 3 .46 m ostra com e possono avvenire nello stesso m o m en to p iù transazioni del bus. Ciclo di bus t7
0, m agari osservando la locazione cui tt è stata assegnata, allora può usare il codice m igliore della Figura 5.30(a). Il vecchio F O R T R A N stabiliva che tu tti i cicli dovevano es sere eseguiti alm eno u n a volta, pro p rio per consentire sem pre la generazione del codice più efficiente della Figura 5.30(a). N el 1977 anche la co m unità F O R T R A N capi che non era una b u o n a idea avere un’istruzione di ciclo dalla sem antica stravagante, e che ogni tan to re stituiva u n a risposta errata, solo per risparm iare u n ’istruzione di salto per ciclo, e corresse il tiro. C e Java n on h an n o mai avuto questo problem a.
5.5.7
Input/Output
N essun raggruppam ento d istruzioni m anifesta la stessa variabilità tra m acchine diverse com e le istruzioni di I/O . A ttualm ente i personal c o m p u ter usano tre schem i diversi di I/O : 1. I/O p rogram m ato con attesa attiva 2. I/O interrupt driven (cioè innescato dagli interrupt) 3. I/O con D M A . Vediamoli in dettaglio. Il m etodo di I/O più sem plice possibile è quello p ro g ra m m a to , im piegato di solito nei microprocessori di fascia bassa come, per esem pio, i sistemi integrati o i sistemi che devono rispondere rapidam ente agli stim oli esterni (sistemi in tem po reale). Q ueste C P U h an n o in genere u n a sola istruzione di in p u t e una sola di o u tp u t, che trasferisce un ca rattere per volta da un prefissato registro al dispositivo di I/O prescelto. Il processore deve eseguire una sequenza prestabilita d istruzioni per ciascun carattere letto o scrino. C o m e sem plice esem pio di questo m etodo, si consideri il term inale con q u attro regi stri di 1 byte m ostrato nella Figura 5.31. D u e registri sono utilizzati per lo stato e i dati in inpu t, m entre gli altri due sono usati per lo stato e i dati in o u tp u t. O gni registro ha un in dirizzo unico. Se l’I /O è m appato in m em oria, i q u a ttro registri fanno parte dello spazio de gli indirizzi della m em oria del co m p u ter e possono essere letti e scritti m ediante le istruzioni ordinarie. In caso contrario ci sono istruzioni speciali di I/O , che chiam iam o IN e OUT, per
5.5
Carattere disponibile
Figura 5.31
373
Pronto per un nuovo carattere
/ Stato della tastiera
Intcrrupt abilitati
Tipi d'istruzioni
Stato dello schermo
Interrupt abilitati
Buffer della tastiera
Buffer dello schermo
Carattere ricevuto
Carattere da visu alizzare
Registri dei dispositivi di un semplice terminale.
la lettura e la scrittura dei registri. In entram bi i casi l’I/O avviene tram ite il trasferim ento dati e dei loro stato tra la C P U e questi registri. Il registro dello stato della tastiera utilizza 2 soli bit degli 8 disponibili: il bit più si gnificativo (il 7) è posto a 1 via hardw are ogniqualvolta arriva un carattere; questo evento solleva u n in te rru p t se e solo se il b it 6 era stato asserito precedentem ente via software (trat terem o gli in te rru p t p iù avanti). N el caso dell’I/O program m ato la C P U aspetta dati in in gresso effettuando un ciclo serrato e ripetuto di letture sul registro di stato della tastiera, aspet tando che il b it 7 assum a il valore 1. N on appena ciò si verifica, il software legge il carattere dal registro buffer della tastiera. La lettura del registro dati della tastiera causa l’azzeram ento del b it CARATTERE DISPONIBILE. L'output funziona in m odo analogo. Per visualizzare un carattere sullo schermo il software per prim a cosa legge il registro di stato dello scherm o per assicurarsi che il bit PRONTO valga 1 e in caso negativo cid a finché il b it n on viene asserito a indicare che il dispositivo è pronto ad accettare un carattere. N o n appena il term inale è pronto, il software scrive un carattere nel registro di buffer dello scherm o, il che provoca la sua trasmissione allo scherm o e anche l’az zeram ento del bit PRONTO (nel registro di stato dello schermo) da parte del dispositivo. D opo la visualizzazione del carattere, il controllore im posta autom aticam ente a 1 il bit PRONTO non appena il dispositivo è preparato a trattare il carattere successivo. U n esem pio di I/O p rogram m ato è d ato dalla procedura Java nella Figura 5.32. Q uesta procedura presenta d u e param etri: u n array di caratteri per riporre il risultato e il num ero di caratteri (couni) presenti nell array (al m assim o 1024). Il corpo della procedura è costi tu ito da un ciclo che restituisce u n carattere alla volta. Per ogni carattere la C P U deve at tendere in n an zitu tto che il dispositivo sia pro n to prim a di poter ottenerlo. È ragionevole p e n sare che le procedure in e out siano delle rou tin e scritte in linguaggio assem blativo per la let tura e la scrittura dei registri di dispositivo specificati dai rispettivi param etri (il registro di stato per in, quello di buffer p er out). La divisione per 128 perm ette di sbarazzarsi dei 7 bit m eno significativi, rip o rtan d o il bit PRONTO in posizione 0. Lo svantaggio principale dell’I /O p rogram m ato è che la C P U passa gran parte del suo tem po in un ciclo serrato in cui atten d e che il dispositivo risulti pronto. Q uesto approccio si chiam a attesa attiva (btisy waiting) ed è accettabile se la C P U n o n ha nuli’altro da esegui re (sebbene anche un sem plice controllore debba spesso m onitorare m olteplici eventi con correnti). Tuttavia questa strategia è u n o spreco in tutti quei casi in cui ci siano da svolgere
374
Capitolo 5
Livello di architettura dell'insieme d'istruzioni
pubiìc static void output_buffer(char bufi |,in t count) [ // Spedisce un blocco di dati ai dispositivo int status, i, ready; for (i = 0 ; i < c o u n f i++) { do { status = ìn(display_status_reg); ready = (status » 7) & 0x01 ; j w h ile (ready != 1); out(display_buffer reg, buffi];
// ottiene lo stato // isola il bit P R O N T O
) I
Figura 5.32
Esempio di I/O programmato.
altri com p iti, quali l’esecuzione di ulteriori program m i, e richiede perciò l’individuazione di u n altro m etodo di I/O . Un m odo per evitare l’attesa attiva è far sì che la C P U fàccia partire il dispositivo di I/O e gli impartisca l’ordine di generare un in terru p t quando ha finito. Possiamo capire com e fun ziona guardando la Figura 5.31. Il software può richiedere all’hardware di segnalargli quando un’operazione d i I/O è conclusa tram ite l’asserzione del bit INTERRUPT a b i l i t a t i nel re gistro di dispositivo. Riprenderem o 1analisi degli interrupt più avanti in questo capitolo quando tratterem o il controllo del flusso. Val la pena far presente che in m o lti co m puter il segnale di in terru p t viene generato m etten d o in A N D i b it INTERRUPT ABILITATI e PRONTO. Se il software abilitasse gli in te rru p t p rim a dì com inciare le operazioni dì T/O, verrebbe sollevato im m ediatam ente un in te rru p t, poiché il b it PRONTO varrebbe 1. D u n q u e potrebbe essere indispensabile prim a far partire il dispositivo, per poi abilitare im m ediatam ente gli in te rru p t. La scrittura di un byte nel registro di stato n on m odifica il bit PRONTO, che è di sola lettura. Benché l’I/O guidato dagli in te rru p t costituisca u n grande progresso rispetto all’I/O program m ato, è ben lungi dall'essere perfetto. Il problem a è che ci vuole un in terru p t per ogni carattere trasferito, e l’elaborazione dì un in terru p t è gravosa. O ccorre un m odo per ri durre drasticam ente il n u m ero di in terru p t. La soluzione si ottiene to rn an d o all’I /O program m ato, m a affidandolo a qualcun altro che non sia la C P U (la soluzione di m olti problem i consiste nell’affidare il lavoro a qualcun altro). La Figura 5.33 m ostra com e fare: aggiungiam o al sistem a un nuovo chip, il control lore D M A (Direct Memory Access), con accesso d iretto al bus. Il chip D M A ha al suo interno alm eno quattro registri accessibili dal software in esecuzio ne nella C PU : il prim o contiene l’indirizzo di m em oria di partenza per la lettura o scrittura; il secondo conta il num ero d i byte (o parole) d a trasferire; il terzo specifica il num ero di dispo sitivo o lo spazio d'indirizzam ento di I/O da usare, il che determ ina il dispositivo di I/O deside rato; il quarto stabilisce se i dati vanno letti dal dispositivo di I/O o se vanno scritti su di esso. Per trasferire un blocco di 32 byte dall’indirizzo di m em oria 100 al term inale (sia questo il dispositivo 4) la C P U scrive i num eri 3 2 ,1 0 0 e 4 nei primi tre registri D M A , più il codice per la scrittura (poniam o sia 1) nel q u arto registro, come illustrato nella Figura 5.33. A que sto p u n to il D M A effettua una richiesta di bus p er leggere il byte 100 dalla m em oria, analo-
53
Tipi d'istruzioni
375
Terminale
Figura 5.33
Controllore DMA,
gamence a com e farebbe la C PU . U na volta otten u to il byte, il controllore D M A effettuerebbe una richiesta di I/O al dispositivo 4 finalizzata alla scrittura del byte. D opo il com pletam ento di queste due operazioni, il controllore D M A increm enta di 1 il suo registro d ’indirizzo e decrem enta di 1 il suo registro contatore. Se il registro contatore è ancora positivo, si prosegue con la lettura da m em oria di un altro byte e con la relativa scrittura nel dispositivo. Infine, quando il contatore si azzera, il controllore D M A sm ette di trasferire dati e m anda un im pulso sulla linea di in terru p t collegata al chip della C P U . In presenza di D M A , la C P U deve solo inizializzare pochi registri, dopo di che è libera di svolgere altri com piti fino al com pletam ento del trasferim ento, segnalato da un in terru p t proveniente dal controllore D M A . Alcuni controllori D M A dispongono di due, tre o più insiemi di registri per controllare tra sferim enti sim ultanei. A nche se con il D M A la C P U viene sollevata dal carico pesante dell’I/O , il procedi m en to non è del tu tto gratuito. Se un dispositivo ad alta velocità, per esem pio un disco, è in fase di trasferim ento controllato dal D M A , d vorranno m olti cicli di bus per gli accessi alla m em oria e al dispositivo. D u ran te questi c id i la C P U deve restare in attesa (il D M A ha una priorità di bus sem pre m aggiore di quella della C P U , perché i dispositivi di I/O diffi cilm ente tollerano i ritardi). Il fenom eno che si verifica q u an d o il controllore D M A sottrae cicli di bus alla C P U si dice ap p ro p ria z io n e d i d d i [cycU stealing, “furto di c id i”). N ondim eno il guadagno che si ottiene n d n o n dover gestire u n in terru p t per byte (o per parola) ripaga largam ente del d an n o derivato dall’appropriazione d i cicli.
5.5.8
Istruzioni di Pentium 4
In questo paragrafo e nei d u e successivi analizzerem o gli insiemi d ’istruzioni delle nostre tre architetture esemplificative: il Pentium 4, l ’U ltraSPA RC e l’8 0 5 1. C iascuna di loro dispone di un nucleo d istruzioni generate norm alm en te dai com pilatori, più un insieme d ’istruzioni usate raram ente o destinate esclusivam ente al sistem a operativo. N ella nostra analisi focaliz ziam o l’attenzione sulle istruzioni com uni. C om inciam o dal Pentium 4.
376
Capitolo 5
Livello di architettura dell'insieme d'istruzioni
L’insiem e d ’istruzioni del P en tiu m 4 è u n a m iscellanea di vere istruzioni di 32 b it e re sti dell’8088, suo an ten ato diretto. N ella Figura 5.34 m ostriam o una piccola selezione di co m un i istruzioni utilizzabili facilm ente dai com pilatori e dai program m atori odierni. È una lista cu tt’altro che com pleta, visto che non include le istruzioni in virgola m obile, le istru zioni di controllo, né altre di uso m eno frequente (tipo l’uso del byte AL com e chiave di ri cerca). In ogni caso restituisce u n a rappresentazione abbastanza fedele delle potenzialità del P entium 4. M olte delle istruzioni del Pentium 4 referenziano un o o due operandi, che possono tro varsi nei registri o in m em oria. Per esem pio l’istruzione a d d som m a la sorgente alla desti nazione, m en tre la INC increm enta il suo operan do di 1. A lcune istruzioni presentano va rianti strettam ence connesse tra loro. Per esem pio l’istruzione di scorrim ento può spostare i bit verso sinistra o verso destra, e può trattare il bic di segno in m odo speciale o m eno. G ran parce delle istruzioni presenta una varietà di codifiche, che cam bia a seconda della natura degli operandi. I cam pi S R C della Figura 5-34 sono sorgenti d ’inform azioni e non vengono m odifi cati. Invece i cam pi D S T sono destinazioni e di no rm a vengono m odificati dall’istruzione. Ci sono alcune regole chc stabiliscono che cosa pu ò fungere da sorgente e che cosa da de stinazione, che cam biano d a istruzione a istruzione senza nessun criterio particolare, m a no n ce ne curiam o in questa sede. M olte istruzioni presentano tre varianti, con operandi di 8, 16 e 32 bit. La distinzione tra i tipi avviene tram ite l’opcode e/o un bit dell’istruzione. La lista della figura si sofferm a so p ra ttu tto sulle istruzioni di 32 bit. Per sem plicità abbiam o suddiviso le istruzioni in vari gruppi: il prim o contiene le istru zioni per il trasferim ento dati all’intern o della m acchina, tra registri, e locazioni di m em o ria o di stack. Il secondo gru p p o si occupa dell’aritm etica, con o senza segno. Nel caso della m oltiplicazione e della divisione, il p ro d o tto o il dividendo di 64 bit sono m em orizzati in EAX (la parte m eno significativa) e EDX (la parte più significativa). II terzo g ru p p o si occupa del l’aritm etica dei decimali in codifica binaria, detti anche B C D , che tratta ogni byte com e due n ib b le (mezzi byte) di 4 bit. O g n i nibble contiene una cifra decim ale (da 0 a 9); le configurazioni da 1010 a 1111 sono inutilizzate. Così un intero d i 16 b it p u ò contenere u n n u m ero decim ale com preso tra 0 e 9999. Q uesta codifica è poco efficiente, m a n o n richiede la conversione dell’in p u t da decim ale in binario e quindi del l’o u tp u t in decim ale. Q ueste istruzioni sono usate per l'aritm etica dei num eri B C D , m olto utilizzati dai program m i C O B O L . Le istruzioni booleane e quelle di scorrim ento/rotazione m anipolano in m odi diversi i bit all’in te m o dei byte o delle parole. N e presentiam o diverse varianti.
I due gruppi successivi trattano test, confronti, e salti basati sui loro risultati. I risulta ti dei test e dei confronti sono salvati in vari bit del registro EFLAGS. Jxx individua un in sieme d’istruzioni di salto condizionato dal risultato del confronto precedente (cioè dai bit di EFLAGS). II Pentium 4 dispone d i parecchie istruzioni per caricam ento, m em orizzazione, trasfe rim ento, co n fro n to e scansione di stringhe di caratteri o di parole. Q ueste istruzioni pos sono essere precedute da un byte speciale chiam ato rep che ne causa l’esecuzione ripetuta finché non venga soddisfatta la condizione che ECX, decrem entato a ogni iterazione, abbia raggiunto il valore 0. Così facendo è possibile trasferire, confrontare, e così via, blocchi ar bitrari di dati. II gru p p o successivo gestisce i codici di condizione.
5.5
Tipi d'istruzioni
377
Trasferim ento del controllo
Trasferimenti MOV DST,SRC
Trasferisce SRC in DST
JMP ADDR
Salta all'in d irizzo ADDR
PUSH SRC
Impila SRC tuli» stack
Jxx ADDR
Salti condizionati d a EFLAGS
POP DST
Pop di una parola dallo stack e la pone in DST
CALL ADDR
C hiam a la pro ced u ra all'in d irizzo ADDR
XCHC DS1, DS2
Scambia D Sl e DS2
RET
Ritom o da procedura
LEA DST.SRC
Carica in DST l'in d iri/m effettivo di SRC
IRET
Ritorno da interrupt
CM OVcc DST, SRC
Trasferimento condizionato
LOOPxx
C id a jjp c h ^ la -e o o d iz io n e non sia soddisfatta
IN T n
Innesca un interrupt software
INTO
Innesca un interrupt se il bit di overflow = 1
Aritm etica ADD DST. SRC
Somma SRC a DST
SUB DST. SRC
Sottrae SRC da DST
MUL SRC
M oltiplica EAX co n SRC (senza segno)
LOOS
Carica una stringa
IMUL SRC
Moltiplica EAX co n SRC (con segno)
STOS
M em orizza u na stringa
DIV SRC
Divide EDXrEAX per SRC (senza segno)
MOVS
M uove una stringa
IDIVSRC
Divide EDX:EAX per SRC (con segno)
CMPS
C opia u n a stringa
ADC DST.SRC
Somma SRC a DST e som m a il bit di riporto
SCAS
Scandisce u na stringa
SBB DST.SRC
Sottrae SRC e il riporto da DST
INC DST
Incrementa DST di 1
Stringhe
Codici di condizione STC
Asserisce il bit di riporto in EFLAGS
CLC
A zzera il bit di riporto in EFLAGS
CMC
C om plem ento del bit di riporto in EFLAGS
Decimali in codifica binaria
STD
Asserisce il bit di d irezio n e in EFLAGS
DAA
Codifica decim ale
CLD
A zzera il bit di direzione in EFLAGS
DAS
Codifica decim ale per la sottrazione
STI
Asserisce il bit di interrupt In EFLAGS
AAA
Codifica ASCII per l'addizione
CU
A zzera il b it di interrupt in EFLAGS
AAS
Codifica ASCII per la sottrazione
PUSHFD
Impila EFLAGS sullo stack
AAM
Codifica ASCII per la moltiplicazione
POPFD
Fa la p o p di EFLAGS dallo stack
AAD
Codifica ASCII per la divisione
LAHF
C arica AH d a EFLAGS
SAHF
M em orizza AH in EFLAGS
DEC DST NEC DST
Dee rem enta DST di 1 Nega DST (lo sottrae a 0)
B o rirn e AND DST SRC
AND di SRC e DST, nsultato in DST
M iscellanea
OR DST, SRC
OR di SRC e DST, risultato in DST
SWAP DST
C am bia ordinam ento dei byte di DST
XOR DST. SRC
OR esclusivo di SRC e DST. risultato in DST
CW Q
Estende EAX a EDX: EAX per la divisione
N OTDST
Rimpiazza DST con il suo com plem ento a uno
CWDE
Estende il num ero di 16 bit in AX a EAX
ENTER SIZE. LV Crea record d'attivazione di SIZE byte Scorrim ento/rotazione SAiy SAR DST,#
Scorrimento di DST verso s/d di # bit
SHiy SHR DST,#
Scorrimento logico di DST verso s/d di # bit
ROL/ROR DST.#
Rotazione di DST v e n o v/d di # bit
RCU RCR DST,#
Rotazione di DST attraverso il riporto di # bit
LEAVE
Disfa il record d'attivazione creato d a ENTER
NOP
O p erazio n e nulla
HLT
Term inazione
IN AL, PORT
U n b yte in input d a PORT ad AL
OUT PORT. AL U n byte in output d a AL a PORT WAIT
A ttende un interrupt
Test/confronto TEST SRC1,SRC2
AND degli operandi, modifica EFLAGS
i/d « sinistra/destra SRC s snrg m tr
CMP SRC1 ,SRC2
Modifica EFLAGS secondo SRC1 - SRC2
DST = destinazione
Figura 5.34
Alcune istruzioni intere di Pentium 4.
t ■ numero di scorrim enh/rotaziom LV - puntatore a lle varia b ili lo cali
378
Capitolo 5
Livello di architettura dell'insieme d'istruzioni
L’ultim o g ru p p o è u n a m iscellanea d ’istruzioni che non rientrano in nessuna delle ca tegorie precedenti e com prende le conversioni, la gestione dei record d ’attivazione dello stack, la term inazione della C P U e l’I/O . ** Il P en tiu m 4 prevede m o lti p r e f ì s s i , tra cui il su m m enzionato R E P . O g n u n o di que sti prefìssi è u n byte speciale che p u ò precedere la m aggior parte delle istruzioni, analo g am en te a WIDE n cll’IJV M . REP p rovoca la ripetizione dell’istruzione successiva finché e c x n o n raggiunga 0, com e già detto . R EP Z e REPNZ causano la ripetizione dell’istru zione che p reced o n o fm ta n to che il codice di condizione Z non viene, rispettivam ente, as serito o azzerato. LOCK riserva il bus p er tu tta la d u rata dell’esecuzione d i un’istruzione, per consentire la sincronizzazione m ultiprocessore. A ltri prefìssi vengono usati per forzare un’istru zio n e in m od alità di 16 bit o di 32 b it, il che no n solo cam bia la lunghezza degli o peran d i, m a ridefinisce co m p letam en te le m o d alità d ’indirizzam ento. in fin e il P en tiu m 4 d isp o n e di u n com plesso schem a d i segm entazione del codice, dei d ati, dello stack e al tro, un altro retaggio dell’80 8 8 . S ono previsti alcuni prefissi per forzare l’uso d ’indirizzi di m em oria in d eterm in ati segm enti, ma (fo rtu n atam en te) non sono oggetto della nostra analisi.
5.5.9
Istruzioni di UltraSPARC III
La F igura 5.35 elenca tu tte le istru zio n i in m od alità u te n te che un co m p ilato re per U ltraSPA RC 111 potrebbe generare. N o n sono incluse-nella lista le istruzioni in virgola m o bile, le istruzioni di controllo (com e quelle p er la gestione della cache o il riavvio di sistema), le istruzioni che coinvolgono spazi degli indirizzi diversi da quello dell’uten te e le istruzioni obsolete. L’insiem e è so rprendentem ente piccolo: UltraSPARC III è davvero un R ISC. Le istruzioni l o a d e STORE sono ovvie, con versioni per 1, 2, 4 o 8 byte. Q u an d o si carica un num ero co stituito da m eno di 64 b it in u n registro (di 64 bit), si p u ò decidere se estenderlo con segno o con zero (ci sono istruzioni disponibili a entram bi gli scopi). Il gru p p o successivo riguarda l'aritm etica. Solo le istruzioni il cui n o m e contiene i ca ratteri CC possono im postare i b it dei codici di condizione NZVC . Sulle m acchine C IS C sono m olte le istruzioni che m odificano i codici di condizione, ma su quelle R ISC ciò non è au spicabile perché riduce la libertà del com pilatore di spostare le istruzioni nel tentativo di riem pire gli intervalli di ritardo. Se l’o rd in e originale delle istruzioni è A ... B ... C , dove A im posta alcuni codici di condizione poi esam inati da B, il com pilatore non può inserire C tra A e B nel caso C m odificasse i codici di condizione. Per questa ragione m olte istruzioni ven gono fo rnite in duplice versione, di m odo che il com pilatore usi preferenzialm ente la ver sione che n on m odifica i codici di condizione, a m eno che abbia intenzione di esam inarne il co n ten u to in u n m o m en to successivo. La m oltiplicazione e la divisione con e senza segno sono incluse nel corredo. L’aritm etica con tag (contrassegno) prevede un form ato speciale chc utilizza num eri di 30 bit. Può essere usata da quei linguaggi, com e Sm alltalk o Prolog, in cui il tipo delle va riabili n on è n o to al m o m en to della com pilazione e p u ò cam biare d u ran te l’esecuzione. Per i num eri con tag il com pilatore può generare un’istruzione A D D con tag, e solo in fase di esecuzione la m acchina determ ina se im piegare una A D D intera o in virgola m obile. Il gru p po di scorrim ento/rotazione contiene un o scorrim ento verso sinistra e due vers destra, ciascuno nella versione di 32 bit e in quella estesa di 64 bit. SL L trasla tu tti i 64 bit
5.5
Tipi d'istruzioni
379
Booleane
C aricam ento
LDS8 ADDR,DST
Carica byte con segno (8 bit)
AND R1.S2.DST
LDUB ADDR,DST
Carica byte senza segno (8 bit)
ANDCC *
AND e modifica di cc
LD5H ADDR,DST
Carica mezza parola con segno (16 bit)
ANDN
NAND
LDUH ADDR.DST
Carica mezza parola senza segno ( 16 bit)
LDSW ADDR,DST
Carica parola con segno (32 bit)
OR R1,S2,DST
OR
LDUW ADDR.DST
Carica parola senza segno (32 bit;
ORCC
OR e modifica di cc
LDX ADDR,DST
Carica parola estesa 64 bit)
ORN
NOR
ORNCC *
NOR e modifica di cc
XOR R1.S2.DST
XOR XOR e modifica di cc
M em orizzazione
•
^ N Q N £C '
STB SRCADDR
Memorizza byte (8 bit)
XORCC
STH SRC.ADDR
Memorizza mezza parola ( 16 bit)
XNOR
STW SRC.ADDR
Memorizza parola (32 bit)
XNORCC *
STX SRC.ADDR
Memorizza parola estesa (64 bit)
*
AND
NAND e modifica di cc
NOR ESCLUSIVO NOR ESCLUSIVO e modifica di cc
Trasferimento di controllo Aritmetica
BPcc ADDR
Salto con predizione
ADO R1.S2.DST
Somma
BPr SRC.ADDR
Salta in base al registro
Somma e modifica di cc
CALL ADDR
Chiamata di procedura
Somma con riporto
RETURN ADDR
Ritorno da procedura
ADOCCC "
Somma con riporto e modifica di cc
IMPl ADDR.DST
Salta e collega
SUB R1,S2,DST
Sottrazione
SAVE R1.S2.DST
Avanza finestra di registri
SUBCC
ADOCC * ADOC
*
Sottrazione e modifica di cc
RESTORF '
Ripnstina finestra di registri
SUBC
Sottrazione con riporto
Tee CCTRAP*
Trap condizionata
SUBCCC -
Sottrazione con riporto e modifica di cc
PREFETCH FCN
Pretendi dei dati dalla memoria
MULX R1,S2,DST
Moltiplicazione
LDSTUB ADDR.R
Loadttore atomica
SDfVX R1,S2,DST
Divisione con segno
MEMBAR MASK
Barriera di memoria
UD1VX Rl,S2,DST
Divisione senza segno
TADCCR1,S2.DST
Somma con tag
*
-
M iscellanea
Scorrim ento/rotazione
SETHI CON,DST
Imposta i bit dal 10 al 31
MOVcc CC,S2,DST
Trasferimento condizionato
SLL R1.S2.DST
Scorr. logico a sinistra (32 bit)
MOVr R1.S2.DST
Trasferimento in base al registro
SLIX R1.S2.DST
Scorr. logico a sinistra esteso (64 bit) ^
NOP
Operazione nulla
SRL RI.S2,DST
Scorr. logico a destra *32 bit)
POPC SI .DST
Censimento
SRIX R I.52.DST
Scorr. logico a destra esteso (64 bit)
RDCCR V,DST
Lettura del registro codici di condizione
SRA R1.S2,DST
Scorr. aritmetico a destra (32 bit)
VVRCCR R1.S2.V
Scnttura del registro codici d » condizione
SRAX R1,S2,DST
Scorr. aritmetico a destra esteso (64 bit!
RDPCVDST
Lettura del program counter
SRC DST Ri S2 ADDR
m
= = ■ *
registro sorgente registro destinazione registro sorgente sorgerne registro o immediata indirizzo di memoria
Figura 5.35
TRAP* FCN MASK CON V
a = = * *
numero della trap codice di funzione tipo (fi operazione costante indicatore di registro
Principali istruzioni intere di UltraSPARC III.
CC R cc f Scorr.
■ = = a
insieme di codici di condizione registro destinazione co d k e di condizione LZ. LEZ, Z, NZ. GZ. CEZ scommento
380
Capitolo 5
Livello di architettura dell'insieme d'istruzioni
per m antenere la com patibilità con le vecchie versioni del software. G li scorrim enti sono usati so p ra ttu tto per la m anipolazione di bit. G ran parte delle m acchine C IS C dispone di un n u m ero ingente d istruzioni d i scorrim ento e rotazione, quasi tu tte com pletam ente inutili. Pochi scrittori di com pilatori passeranno le notti a piangerne la scomparsa! Il gru p p o d istruzioni booleanc è analogo al gruppo delle aritm etiche. C o m p ren d e le operazioni A N D , O R , O R E SC L U S IV O , A N D N , O R N , and X N O R N . Le ultim e tre sono di dub b ia utilità, però possono essere svolte in un solo ciclo e richiedono poco hardw are sup plem entare; per questo m otivo sono state incluse nel progetto. A nche i progettisti delle m ac chine R ISC di tan to in tan to soccom bono alle tentazioni. Il gru p p o successivo d ’istruzioni contiene i trasferim enti di controllo. BPcc rappresenta l’insiem e delle istruzioni che saltano al verificarsi di varie condizioni c inoltre specificano nell’istruzione stessa se il com pilatore prevede che il salto verrà intrapreso o m eno. BPr esa m in a u n registro e salta condizionatam ente alla condizione rilevata. S ono previste due m od alità di ch iam ata di procedura. L’istruzione CALL usa il for m ato 4 della Figura 5 .15 con un offset di 30 b it relativo al PC (espresso in parole). Q uesto valore è sufficiente a raggiungere u n ’istru zio n e en tro 2 G B dal ch iam an te, in en tram b e le direzioni. L’istruzione CALL deposita l’indirizzo di rito rn o in RI 5, che diventa R31 dopo la chiam ata. L’altra m odalità di chiam ata di p rocedura si ha usando l’istruzione JMPL, che è di for m ato la o lb , che consente di porre l’indirizzo di ritorno in un registro qualsiasi. Q uesta m odalità è utile q u an d o l’indirizzo di destinazione è calcolato d u ra n te l’esecuzione. SAVE e RESTORE m anipolano la finestra di registri e il p u n tato re allo stack. E ntram be fanno scattare una trap q u an d o la finestra successiva (o precedente) n o n è disponibile. L’ultim o g ruppo contiene alcune istruzioni di vario genere. SETHI serve per ovviare all’im possibilità di tenere un operan d o im m ediato di 32 bit in u n registro. Il m o d o di p ro cedere è usare SETHI per im postare i b it da 10 a 31 e affidare quindi i b it rim anenti all’i struzione successiva grazie al form ato im m ediato ( lb ).
Figura 5.36
Istruzione
Come simularla
MOV SRC,DST
O R di SRC con CO e memorizza il risultalo in DST
CM P SRC1 ,SRC2
SU BCC di SRC2 da SRC1 e memorizza il risultato in CO
TST SRC
O RCC di SRC con CO e memorizza il risultato in CO
NOT DST
XNO R di DST con G0
NEG DST
SUB di DST da GO e memorizza il risultato in DST
INCDST
A D D 1 a DST (operando immediato)
DECDST
SUB 1 da DST (operando immediato)
CLR DST
O R di GO con se stesso e memorizza il risultato in DST
NOP
SETHI di GO a 0
RET
JMPL % I7+8,% G0
Alcune istruzioni sim ulate da UltraSPARC III.
5.5
Tipi d'istruzioni
381
L’istruzione di censim ento (population couni) è un mistero. C o n ta il num ero di b it 1 in una parola. Si vocifera che sia utile alla sim ulazione di esplosioni di bom be atom iche e che il N ational L aboratory di Los Alam os (un grande finanziatore) guardi di buon occhio le m acchine che la m etto n o a disposizione. Le ultim e tre istruzioni servono alla lettura e scrit tura di registri speciali. U n gran n u m ero di co m u n i istruzioni C IS C m anca dalla lista; può però essere sim u lato facilm ente usando GO o un o perando costante (form ato lb ). A lcune di queste sono elen cate nella Figura 5.36. Sono tu tte riconosciute dall’assem bler dell’U ltraSPA R C ITI e gene rate spesso dai com pilatori. M olte di loro sfru ttan o il fatto che GO è cablato con il valore 0 e che istruzioni di scrittura su di esso n on h an n o alcun effetto.
5.5.10
Istruzioni di 8051
Q u esto processore h a u n repertorio d istruzioni semplice, la Figura 5.37 ne m ostra la prim a parte. O g n i riga specifica il nom e abbreviato dell’istruzione, ne dà una descrizione concisa e indica le m odalità d ’indirizzam ento per la sorgente o per la destinazione, a seconda che nella descrizione si parli di sre o di dst. C o m e ci si poteva attendere, ci sono m olte istruzioni MOV per il trasferim ento di dati tra ACC (accum ulatore), i registri e la m em oria. Ci sono istru zioni per le operazioni di p u sh e di pop su d i u n o stack indirizzato d a un registro dedicato. Le locazioni di m em oria oltre l’indirizzo 2 5 6 si trovano sem pre nella m em oria esterna, dato che l’8 0 5 1 ha soli 128 byte di m em oria e l’8 0 5 2 ne ha a p p u n to 256, e sono indirizzate sem pre in m odo in diretto tram ite il registro di 16 bit DPTR. Il g ruppo dei trasferim enti è com pletato da istruzioni m iste per lo scam bio di porzioni di registri. L’8 0 5 1 dispone di semplici istruzioni aritm etiche per som m a, sottrazione, m oltiplica zione e divisione, dove le ultim e d u e usano registri prefissati. Sono disponibili anche istru zioni d ’increm ento e decrem ento, usate di frequente. C i sono anche le istruzioni booleane e di rotazione. Le restanti istruzioni dell’8051, elencate nella Figura 5.38, com p ren d o n o le istruzioni sui b it com e, per esem pio SETB 43
che asserisce il b it 43, m a n on m odifica gli altri bit dello stesso byte. V engono poi le istru zioni di trasferim ento del controllo, com presi i salti e le chiam ate di subroutine, più due salti condizionati CJNE che co n fro n tan o la sorgente con qualcos’altro, e l’istruzione DJNZ usata nei cid i.
5.5.11
Insiemi d'istruzioni a confronto
I tre esempi d i insiemi d ’istruzioni che abbiam o visto sono m olto diversi tra loro. Il Pentium 4 è una classica m acchina C IS C a 32 b it e a d u e indirizzi, con una lunga storia, m odalità d ’in dirizzam ento peculiari e m o lto irregolari, n o n ch é con m olte istruzioni per l’accesso in m e m oria. L’U ltraSPA R C III è u n a m oderna m acchina R ISC a 64 bit e a tre indirizzi, con ar ch itettu ra load/store, a m alapena qualche m odalità d ’indirizzam ento e un insiem e d ’istru zioni efficiente e co m patto. L’8 0 5 1 è u n m inuscolo processore integrato, progettato per es sere realizzato su u n solo chip.
382
Capitolo 5
Livello di architettura dell'insieme d'istruzioni
Istr.
Descrizione
MOV
Trasi. sre In A C C
MOV
Trast sre in un registro
X
MOV
Trasf. sre in memoria
X
MOV
Trast. sre nella RAM indiretta
X
MOV
Trast costante di 16 bit in DPTR
MOVC
Trasf. codice all’offset in ACC relativo a DPTR
MOVC
Trasf. codice all'offset in ACC relativo a PC
MOVX
Trasf. byte da RAM esterna in ACC
MOVX
Trasf. byte da RAM eslema in ACC iramite DPTR
MOVX
Trasf. byte in RAM esterna da ACC
MOVX
Trasf. byte in RAM esterna da ACC tramite DPTR
ACC **
PUSH
Push del byte sre sullo stack
POP
Pop del byte sullo stack in dst
XCH
Scambia ACC e dst
XCHD
Scambia delle cifre meno significative tra ACC e dst
A reg.
Dir.
A reg. ind.
X
X
X
X
X X
X X
Imm.
X
X
X X
X
X
X X
X
X
X
X
SWAP
Scambio incrociato dei nibble di dst
ADD
Somma sre ad ACC
X
X
X
ADD C
Somma sre ad ACC con riporto
X
X
X
X
SUBB
Sottrae 5re da ACC
X
X
X
X
INC
Incrementa dst
X
X
X
X
DEC
Deere menta dst
X
X
X
X
INC
DPTR
MUL
Moltiplicazione
DIV
Divisione
DA
Codifica decimate di dst
AN L
AN D di sre e ACC
X
X
X
X
X
X
X
X
X
X
ANI
AN D di ACC e dst
X
ANL
AN D di op. immediato e dst
X
ORL
O R dì sre e ACC
ORL
O R di ACC e dsl
O RL
O R di op. immediato e dsl
XRL
XO R di sre e ACC
XRL
XOR di ACC e dst
XRL
XO R di op. immediato e dst
CLR
Azzera dst
X
CPl
Complementa dst
X
RL
Rotazione di dsl verso sinistra
X
RLC
Rotazione di dst verso sinistra attraverso il riporto
X
X
X X
X X
X X X
RR
Rotazione di dst verso destra
X
RRC
Rotazione di dst verso destra attraverso il riporto
X
Figura 5.37
X
Prima parte dell'insieme d'istruzioni di 8051.
C
bit
5.5
Istr.
Descrizione
ACC
A reg.
Dir.
Tipi d'istruzioni
A reg. ind.
Imm.
383
C
bit
CLR
Azzera il bit
X
X
SETB
Asserisce il bit
X
X
CPl
Complemento il bit
X
X
ANI
AN D di sre e del riporto
X
ANL
AN D del complemento di sre e del riporto
X
O RI
O R di sre e del riporto
X
O RI
O R del complemento di sre e del riporto
X
MOV
Trasferisce sre nel riporto
X X
MOV
Trasferisce il riporto in sre
JV
Salto relativo se il riporto è asserito
JNC
Salto relativo se il riporto non è asserito
)B
Salto relativo se il bit diretto è asserito
X
JNB
Salto relativo se il bit diretto non è asserito
X
JBC
Salto relativo se il bit diretto è asserito e il riporto no
X
ACALL
Chiamata di subroutine (indirizzo di 11 bit)
LCALL
Chiamata di subroutine (indirizzo di 16 bit)
RET
Ritorno da subroutine
RETI
Ritomo da interrupt
SJMP
Salto relativo breve (indirizzo di 8 bit)
AJMP
Salto assoluto (indirizzo di 11 bit)
LJMP
Salto assoluto (indirizzo di 16 bit)
JMP
Salto indiretto relativo a DPR + ACC
|Z
Salta se ACC è zero
|NZ
Salta se ACC è diverso da zero
CJNE
Confronta sre con ACC, salta se diversi
CINE
Confronta sre con op. immediato, salta se diversi
DJNZ
Decrementa dst e salta se non nullo
NOP
Operazione nulla
Figura 5.38
X
x
X X
Seconda parte dell'insieme distruzioni dell'8051.
Se ogni m acchina è fatta a m odo proprio ci sono delle buone ragioni. Il progetto del Pentium 4 risponde a tre esigenze principali: 1. retrocom patibilità 2. retrocom patibilità 3. retrocom patibilità. C onsid eran d o Io stato dell’arte attuale, a nessuno verrebbe in m ente di progettare una m ac china così irregolare e con così pochi registri, tu tti diversi tra loro. Q ueste caratteristiche com plicano la scrittura dei com pilatori. La m ancanza di registri inoltre costringe i com pilatori a riversare co n tin u am en te le variabili in m em oria per poi ricaricarle, un lavoro gravoso an-
384
Capitolo 5
Livello di architettura dell'insieme d'istruzioni
che se si h an n o d u e o tre livelli di cache. La velocità del Pentium 4 è una riprova delle ca pacità degli ingegneri dell’Intel, a d ispetto dei vincoli posti dall’ISA. Eppure abbiam o visto nel capitolo precedente q u an to sia com plessa \A sua im plem entazione. L’U ltraSPA R C III rappresenta u n progetto di ISA allo stato dell’arte. H a u n ISA di 64 bit (con bus di 128 bit), ha m olti registri e un insiem e d istruzioni che predilige le opera zioni a tre registri, più un piccolo gru p p o d ’istruzioni l o a d e S TORE. T utte le istruzioni sono delta stessa lunghezza, anche se il n u m ero di form ati è sfuggito u n p o ’ di m ano. C io n o n o stan te l’im plem entazione resta sem plice ed efficiente. G ran parte dei nuovi progetti tende a som igliare alI’UltraSPA RC III, m a con m eno form ati d istruzione. L’8 0 5 1 offre u n insiem e d istruzioni sem plice e abbastanza regolare, con relativam ente poche istruzioni e poche m odalità d ’indirizzam ento. Si distingue per la presenza di q u attro insiem i di registri p e r l’eleborazione rapida degli in terru p t, per la capacità di rendere i regi stri accessibili nello spazio di m em oria e per le istruzioni di m anipolazione dei bit sorpren dentem ente potenti. U suo vanto principale è di richiedere un num ero m olto lim itato di rransitor per ['im plem entazione, il che consente di ospitarne un gran n u m ero su di una sola pia stra, d an d o luogo a u n costo unitario di C P U m olto contenuto.
5.6
Controllo del flusso
Il co ntrollo del flusso riguarda la sequenza con cui le istruzioni vengono eseguite dinam icam ente, ovvero d u ran te l’esecuzione del program m a. In m ancanza d ’istruzioni di salto o di chiam ate di procedura, le istruzioni vengono eseguite di norm a nello stesso ordine con cui si susseguono in m em oria. Le chiam ate di procedura alterano il controllo del flusso, perché arrestano la procedura corren tem en te in esecuzione e com inciano l’esecuzione della proce d u ra chiam ata. Le coroutine sono legate alle procedure e causano un’alterazione sim ile (sono utili nella sim ulazione di processi paralleli). A nche le trap e gli in te rru p t provocano un'alte razione del flusso esecutivo q u an d o si verificano certe condizioni speciali. Sono tu tti argo m enti trattati nei paragrafi successivi,
5.6.1
Flusso sequenziale e diramazioni
M olte istruzioni n o n alterano il co ntrollo del flusso; dopo l’esecuzione di u n ’istruzione, viene recuperata ed eseguita l’istruzione che la segue in m e m o ria Al term ine dì ciascuna istru zione, il program co u n ter viene in crem en tato della lunghezza dell’istruzione elaborata. Se Io si osserva p er u n tem po abbastanza lungo, rispetto al tem po di esecuzione di una singola istruzione, il program co u n ter è u n a funzione lineare nella variabile tem p o e che aum enta, in ogni u n ità di tem po, di una q u an tità pari alla lunghezza m edia delle istruzioni diviso il loro tem po m edio d i esecuzione. I n altre parole, l’ordine dinam ico secondo cui il processore esegue le istruzioni è quello con cui appaiono nel listato del program m a, com e m ostrato dalla Figura 5-39(a). Se u n program m a contiene salti, questa semplice relazione tra ordinam ento delle istruzioni in m em oria e ordine dì esecuzione non vale più. In presenza di salti il program co u n ter n o n è più u n a funzione m o n o to n a crescente nel tem po, com e si evince dalla Figu ra 5.39(b). In ragione di ciò, diventa difficile visualizzare la sequenza di esecuzione delle istru zioni a partire dal listato.
5.6
(a) Figura 5.39
Controllo del flusso
385
(b)
Valore del program counter in funzione del tempo, (a) Senza salti, (b) Con salti.
Q u an d o i program m atori in co n tran o difficoltà nel tener traccia della sequenza di esecuzione delle istruzioni da parte del processore, co m m etto n o errori con più facilità. Q uesta osserva zione ha p o rtato D ijkstra a scrivere u n a n o ta (1968a), allora controversa, dal titolo “G O T O S tatem ent C onsidered H a rm fu l” (“L’istruzione G O T O è da considerarsi dannosa”), in cui suggeriva di evitare le istruzioni di g o t o . D a quel testo è scaturita la rivoluzione della pro gram m azione struttu rata, tra i cui dogm i c’è la sostituzione di tu n i i com andi g o t o con form e di controllo più stru ttu rate, quali i cicli. N aturalm ente q u ando questi program m i ven gono com pilati in program m i di livello 2, questi ultim i possono contenere m olti salti, dal m o m en to che l’im plem entazione d i i f , w h i l e e di altre stru ttu re di controllo di alto li vello richiede la capacità di saltare da u n a parte all’altra.
5.6.2
Procedure
Le procedure costituiscono la tecnica più im p o rtan te per la strutturazione dei program m i. D a un certo p u n to di vista u n a chiamata'cLi procedura altera il flusso esecutivo tan to qu an to un salto, m a a differenza di un salto alla term inazione del suo com pito la procedura ripassa il controllo al co m ando o all’istruzione che segue la sua chiam ata. Tuttavia, da un altro p u n to di vista, il corpo di una procedura può essere visto com e la definizione di una nuova istruzione di alto livello. C osì facendo, la chiam ata di procedura è concepibile com e un’istruzione singola, senza riguardo alla sua effettiva com plessità. Per la com prensione di una porzione di codice co n ten en te una chiam ata di procedura è sufficiente sapere che cosa fa, non come lo fa. U na tipologia di procedure particolarm ente interessanti è quella delle p ro c e d u re ric o r sive, ovvero quelle procedure che richiam ano se stesse direttam ente o indirettam ente attra verso u n a successione di altre procedure. Lo studio delle procedure ricorsive favorisce una profonda com prensione del m odo in cui sono im plem entate le chiam ate di procedura, e della natura delle variabili locali. D iam o ora un esem pio di procedura ricorsiva.
386
Capitolo 5
Livello di architettura dell'insieme d'istruzioni
Piolo 1
Piolo 2
/
Figura 5.40
Piolo 3
J
Configurazione iniziale del problema della torre di Hanoi con cinque dischi.
Q uello della “torre di H a n o i” è un vecchio problem a che am m ette u n a sem plice soluzione basata sulla ricorsione. In u n m onastero di H an o i ci sono tre pioli d ’oro: sul prim o sono im pilati, attraverso u n foro apposito, 64 dischi d ’oro. I dischi sono di dim ensioni diverse e cia scuno è poggiato su di u n disco di diam etro m aggiore del proprio. G li altri due pioli sono inizialm ente vuoti. I m onaci del m onastero h a n n o il com pito di trasferire tu tti i dischi (uno alla volta) sul terzo piolo, m a senza mai poggiare un disco di dim ensioni maggiori su uno p iù piccolo. Si dice che q u an d o avranno evaso il loro com pito, il m ondo avrà fine. Se vo lete sperim entare d irettam en te p otete provare a usare dei dischi qu alu n q u e (e m eno di 64), m a una volta che avrete risolto il problem a non aspettatevi che succeda alcunché. Per o tte nere l’effetto “fine del m o n d o ” dovete usarne 64 e tu tti d ’oro. La Figura 5.40 m ostra la con figurazione iniziale con 5 dischi. La soluzione consiste nel m uovere gli n dischi dal piolo 1 al piolo 3 spostandone prim a n — 1 dal piolo 1 al 2, q u in d i im p ilan d o il disco rim anente sul piolo 3 e infine spostando gli n — 1 dischi del piolo 2 sul piolo 3. La Figura 5.41 illustra questa soluzione (per n = 3). Per risolvere il problem a abbiam o bisogno di una procedura per spostare n dischi dal piolo i al piolo j. La sua invocazione towers(n , i , j )
produce la visualizzazione della soluzione. Per prim a cosa la procedura effettua il test n = 1. Se così fosse la soluzione sarebbe banale, basterebe spostare il disco d a z a j. Se « * 1 allora la soluzione consiste nelle tre fasi già illustrate, ciascuna delle quali com porta una chiam ata di procedura ricorsiva. La soluzione com pleta è data dalla Figura 5.42. La chiam ata t owers(3 , 1
, 3)
che risolve il problem a della Figura 5.41, provoca altre tre chiam ate, e cioè t owers(2 , 1, 2 ) towers(1, 1, 3 ) towers(2 , 2 3 )
,
La p rim a e la terza causano a loro volta tre chiam ate, per un totale di sette.
5.6
Controllo del flusso
387
Stato iniziale
e
G
B
Quindi sposta un disco dal piolo 1 al piolo 3
Infine sposta due dischi dal piolo 2 al piolo 3
(3
Figura 5.41
F^ssi necessari per la so luzio ne del problema della torre di H anoi con tre dischi.
Al fine di p o ter gestire le procedure ricorsive abbiam o bisogno di un o stack per m em oriz zare i param etri e le variabili locali a ogni invocazione, analogam ente a qu an to m ostrato nel caso dell’IJV M . O g n i volta che una procedura viene chiam ata, in cim a allo stack viene al locato un record d ’attivazione p er la procedura stessa. Il record d ’attivazione di creazione p iù recente è quello in uso corrente. N ei nostri esempi lo stack cresce verso l’alto, dagli indirizzi di m em oria più piccoli ai più grandi, p ro p rio com e nell’IJV M . Perciò il record d ’attivazione più recente è caratterizzato da un indirizzo m aggiore di tu tti gli altri. O ltre al p u n tato re allo stack, che p u n ta alla cim a della pila, risulta spesso conveniente avere un p u n ta to re al record d ’attivazione, FP (framepointer), che p u n ta a una locazione
388
Capitolo 5
Livello di architettura dell'insieme d'istruzioni
public void towers{int n, int i, int j) { int k; if (n = 1) System.out.println( “Sposta un disco da ’ + i + 11a “ + j); else { k = 6 - i - j; towers(n —1,», k); towers(1, i, j); towersfn - 1, k, j);
1 }
Figura 5.42
Procedura per la soluzione del problema della torre di Hanoi.
n o ta del record d ’attivazione (per esem pio il p u n ta to re di collegam ento, com e nell’IJV M , o la p rim a variabile locale). La Figura 5.43 m ostra il record d ’attivazione di una m acchina con parole di 32 bit. La chiam ata originale t o w e r s im pila n, i e j in cim a allo stack ed esegue q u in d i un’istruzione CALL che im pila l’indirizzo di ritorno sullo stack, all’indirizzo 1012. Al m o m en to dellingresso, la p ro ced u ra m em orizza nello stack il vecchio valore di FP alla locazione 1016 e in crem en ta il p u n ta to re allo stack per allocare spazio sufficiente alle variabili locali. Poiché c’è u n a sola variabile locale di 32 bit ( k), SP è increm entato di 4 in 4 fino a 1020. La Figura 5.43(a) m ostra la situazione dello stack al term in e di queste operazioni. Le p rim e cose che una procedura invocata deve fare sono il salvataggio del vecchio FP (così che possa essere ripristinato all’uscita della procedura), la copia di SP ir f p e l’even tuale increm ento di F P di una parola, a seconda della locazione cui puntare nel nuovo record d ’attivazione. In questo esem pio FP p u n ta alla prim a variabile locale, m a nell’IJV M LV in dirizzava il p u n tato re di collegam ento. La gestione del p u n tato re al record d'attivazione può essere leggerm ente diversa su m acchine distinte, a seconda chc abbia l’indirizzo della base del record d ’attivazione, com e nella Figura 5-43, o della sua cim a o p p u re di altro. A tal fine è urile confrontare le Figure 5,43 e 4 .1 2 per com prendere due m odi alternativi di gestire il p u n tato re d i collegam ento. C i sono anche altri m odi possibili. C o m u n q u e sia, il p u n to chiave è poter effettuare un rito rn o da procedura e ripristinare lo stato dello stack alla si tuazione in cui si trovava appena prim a dell’invocazione della procedura corrente. Il codice che si preoccupa di salvare il vecchio F P , che stabilisce il nuovo FP e accre sce il p u n tato re allo stack p er riservare spazio alle variabili locali si chiam a p ro lo g o della p ro c e d u ra (procedure prolog). All’uscita dalla procedura si rende invece necessario ripulire lo stack, che rappresenta la fase di e p ilo g o d e lla p r o c e d u r a D ue delle caraneristiche più im p o rtan ti di ogni co m p u ter sono la brevità e la velocità dei m eccanism i di prologo ed epi logo delle procedure. Se sono lunghi e lenti, le chiam ate di procedura ne soffriranno e i pro gram m atori devoti all’efficienza im p areran n o a evitare di scrivere m olte procedure brevi, cui preferiranno program m i lunghi, m onolitici e poco strutturati. Le istruzioni ENTER e LEAVE del P entium 4 sono state progettate p ro p rio per far funzionare i prologhi e gli epiloghi delle procedure in m odo efficiente. N atu ralm en te queste istruzioni hanno u n loro m odello di ge-
5.6
Controllo del flusso
389
Indirizzo
SP —
SP —
k Vecchio FP - 1024
r -
Ind. dì ritomo
k
1068
Vecchio FP = 1024 1064 Ind. di ritorno
j=3 i= 1
SP — r-
FP
_
Vecchio FF = 1000
k —
Vecchio FP =
n = 1'
1048
k*3
1044
— Vecchio FP
1000 1040
Ind. di ritorno
Ind. di ritorno
Ind. di ritorno
Ind. di ritomo
j=2
j=2
J-2
j=2
1032
i= 1
i= 1
i= 1
i= 1
1028
2
o=2
n- 2
1024
k=2
k=2
k=2
1020
n= 2
►
ri: -
k=I
k
SP
Vecchio FP = 1000
FP-
k=3
k
1052
i= \
1
FP
1060 1056
1036
Vecchio FP
Vecchio FP
Vecchio FP
Vecchio FP
Vecchio FP
1016
Ind. di ritorno
ln b) ...
j
if {if (fe < BUF SIZE - 1) return(k-t-l); else returniO);) ) class producer extends Thread { native void up(int s); native void down(int s); public void run( ) ( long prime = 2;
tì
// classe produttore // metodi sui semafori // codice del produttore // variabile di lavoro
while (prime < m.M AX_PRIME) ( prime = next_prime< prime); down(m.available); m.bufferlm.in) = prime; m.in = m.next(m.in); up(m.filled); J
// istruzione I l istruzione // istruzione Il istruzione // istruzione
private long next_prime(long prim e)!... 1
P1 P2 P3 P4 P5
// funzione che calcola il numero primo successivo
) class consumer extends Thread I native void up(int s); native void downlint s); public void run( ) { long emirp = 2; while (emirp < m.MAX_PRIME) ( down(m.fìlled); emirp = m.bufferlm.outl; m.out = m.next(m.out); up(m. available); System.out-println(emirp); )
H classe consumatore I l metodi sui semafori I l codice del consumatore I l variabile di lavoro
•*
I l istruzione // istruzione I l istruzione // istruzione I l istruzione
CI C2 C3 C4 C5
} )
Figura 6.28
Calcolo parallelo con i semafori.
chiam ate di sistem a up e down (rispettivam ente) e che accettano in ingresso param etri in teri. Q uesti m etodi ci co n sen to n o di esprim ere l’uso dei semafori in Java. La Figura 6 .2 8 m o stra com e elim in are la corsa critica tram ite l’uso dei sem afori. A ggiungiam o alla classe m i due sem afori a v a i l a b l e (disponibile), che inizialm ente vale 100, e f i l l e d (riem pito), posto inizialm ente a 0. C om e prim a, il pro d u tto re com incia l’e secuzione d a P 1 e il consum atore parte da C I . L’esecuzione di down su f i l l e d interrom pe
454
Capitolo 6
Livello macchina del sistema operativo
im m ediatam ente il processo consum atore. Q u a n d o il p roduttore ha trovato il n um ero prim o invoca dow n con param etro a v a i l a b l e , assegnandogli il valore 99. All’istruzione P5 chiam a u p con param etro f i l l e d , assegnandogli il valore 1 e liberando così il consum a tore dall’attesa; questi può ora com pletare la sua chiam ata down sospesa. In questo istante f i l l e d vale 0 ed entram bi i processi sono in esecuzione. T orniam o alla precedente situazione di corsa critica in una situazione in cui in = 22, out= 21 , il p ro d u tto re si trova in P I e il consum atore in C 5. D u n q u e il consum atore com pleta l’istruzione e torna a C l , dove invoca dow n su f i l l e d , che passa così da 1 a 0. Poi il consum atore preleva l'u ltim o n u m ero disponibile nel buffer, chiam a up su a v a i l a b l e , che arriva a 100, stam pa a scherm o il valore e to rn a nuovam ente in C l . U n attim o prim a che il consum atore chiam i dow n, il p ro d u tto re trova il successivo num ero prim o ed esegue in rapida successione le istruzioni P 2, P3 e P4. Adesso f i l l e d vale 0. Il p ro d u tto re è sul p u n to di eseguire una up su f i l l e d e il consum atore una down sullo stesso param etro. Se il consum atore esegue per prim o l’istru zione rim arrà sospeso finché il p ro d u tto re non lo libererà (chiam ando la u p ). Se invece parte p er prim o il p ro d u tto re, questi p o rrà il sem aforo a 1 e il consum atore n o n verrà sospeso. In entram bi i casi non viene perso alcun segnale di risveglio; era proprio l’obiettivo che ci era vam o proposti in tro d u cen d o i sem afori. La proprietà essenziale delle operazioni sui semafori è che sono indivisibili: una volta iniziata un’operazione su di un sem aforo, nessun altro processo può usare il sem aforo fin che il prim o non abbia com pletato l’operazione o n o n rim anga sospeso. Per di più, l’uso dei sem afori scongiura la perdita dei segnali di risveglio. L’istruzione i f della Figura 6.25 non è indivisibile: è possibile che un processo spedisca un segnale di risveglio tra la valutazione della condizione e l’esecuzione dell’istruzione selezionata. Il problem a della sincronizzazione di processi è stato risolto dichiarando indivisibili le chia mate di sistema up e dow n, richiam ate dai m etodi up e dow n. Perché ciò accada, il sistema operativo deve proibire che un semaforo venga usato da più di un processo per volta, o può alm eno limitarsi a interrom pere l’esecuzione di ogni altro processo finché quello impiegato nella chiam ata di sistema non la porti a com pim ento. Sui sistemi m onoprocessore i semafori sono im plem entati, qualche volta, m ediante la disattivazione degli in terru p t durante le operazioni sui semafori. Sui sistemi multiprocessore questo stratagem m a non funziona. La sincronizzazione m ediante sem afori funziona per un num ero arbitrario di processi. Ci possono essere allo stesso tem po m olti processi dorm ienti, im pegnati nel tentativo di com pletare u n a chiam ata di sistem a dow n sullo stesso semaforo. Q u a n d o un altro processo ef fettua una up su quel sem aforo, u n o dei processi in attesa può com pletare finalm ente la down e riprendere l’esecuzione. Il valore del sem aforo resta 0 e gli altri processi restano in attesa. U siam o u n ’analogia p e r chiarire la n atu ra dei semafori. Im m aginate u n torneo con 20 squadre di pallavolo suddiviso in 10 partite (i processi), ciascuna disputata sul proprio cam po, e u n a cassa (il semaforo) co n ten en te i palloni. S fortunatam ente ci sono solo 7 palloni d i sponibili (il sem aforo assum e valori tra 0 e 7). L’inserim ento di u n pallone nella cassa equi vale a una u p perché increm enta il valore del sem aforo; l’estrazione di un pallone corrisponde a una down poiché ne decrem enra il valore. All inizio del torneo ogni cam po invia un giocatore al canestro per appropriarsi di un pallone. Sette di loro riusciranno nell im presa (com pletano la dow n), tre sono costretti ad aspettare u n pallone (cioè non riescono a com pletare la dow n). Le loro partite sono tem po-
6.4
Sistemi operativi di esempio
455
rancam ente sospese; prim a o poi una delle altre partite finirà e il rispettivo pallone verrà ri po rtato nel canestro (esecuzione di u n a up). G razie a questa operazione un o dei tre gioca tori in attesa p o trà accaparrarsi la palla (com pletando la sua down incom piuta) e dar via alla propria partita. G li altri due giocatori restano in attesa che vengano riportati nel cesto altri palloni; solo allora le u ltim e due partite p o tra n n o essere disputate.
6.4
Sistemi operativi di esempio
In questo paragrafo procediam o con la trattazione dei nostri sistemi d ’esem pio, il Pentium 4 e l’U ltraSPA R C III. Per ciascuno analizzerem o un sistema operativo: per il Pentium 4 ci riferiamo a W indow s XP (d’ora in poi solo XP), e per l’UltraSPARC III a U N IX . C om inciam o da quest’ultim o perché è più sem plice e per m olti versi più elegante. Inoltre questo ordine è più sensato e naturale dal m o m en to che U N IX è stato progettato e im plem entato m olto tem po p rim a d i X P e Io ha assai influenzato.
6.4.1
Introduzione
UNIX U N I X venne sviluppato presso i lahoratori Bell nei prim i anni ’70. La prim a versione, scritta da K en T h o m p so n in linguaggio assem blativo del m in ico m p u ter P D P -7, venne presto se guita da una versione per il P D P -1 1 (scritta nell’allora nuovo linguaggio C , ideato e svilup p ato da D ennis Ritchie). Nel 1974 R itchie e T h o m p so n pubblicarono u n articolo su U N IX che è rim asto u n a p ietra m iliare del settore (Ritchie e T h o m p so n , 1974). I n ragione del la voro descritto in quell’articolo furono successivamente insigniti del prestigioso A C M T uring Award (Ritchie, 1984; T h o m p so n , 1984). La pubblicazione dell’articolo stim olò m olte u n i versità a richiedere u n a copia di U N IX ai laboratori Bell. Essendo questi di proprietà della A T& T, ai tem pi un’azienda m onopolista cui non era concesso fare affari nel m ondo del l’inform atica, la richiesta venne accolta senza difficoltà e la licenza di U N IX venne ceduta alle università p er u n a m odica cifra. Per una di quelle coincidenze che spesso fanno la storia, il P D P -1 1 era il co m p u ter pre d iletto dai d ip artim en ti di inform atica di t}uasi tu tte le università e i sistemi operativi di cui era equipaggiato erano considerati terribili tan to dai professori q u an to dagli studenti. U N IX colm ò velocem ente questa lacuna, specialm ente perché era distribuito con tu tti i codici sor genti e così chiunque poteva armeggiarci lìberam ente, cosa che fecero in m olti. U na delle prim e università a procurarsi U N IX fu la U niversity o f California, a Berkeley. Avendo a disposizione tu tto il codice sorgente, i ricercatori di Berkeley poterono modificare il sistema in m odo sostanziale. Tra i risultati più im portanti ci fu l’im plem entazione sul m i nicom p u ter VAX, l’aggiunta della m em oria virtuale paginata, l’estensione dei nom i di file da 14 a 255 caratteri e l’inclusione del protocollo di reteT C P /IP , usato ancor oggi in Internet (so prattu tto perché si trovava nello U N IX di Berkeley all’avvento delle reti). M entre Berkeley procedeva nelle sue m odifiche, la stessa A T & T continuava a svilup pare U N IX , giungendo al System III nel 1982 e al System V nel 1984. Alla fine degli anni ’80 circolavano due versioni di U N IX diverse e abbastanza incom patibili: U N IX Berkeley e
456
Capitolo 6
Livello macchina del sistema operativo
System V. Q u esta scissione del m o n d o di U N IX , un ita al fatto che m ancavano gli standard per i form ati dei program m i binari, inibì fortem ente il successo com m erciale di U N I X per ché nessun forn ito re di software avrebbe p o tu to scrivere e confezionare program m i U N IX che funzionassero su ogni sistem a U N IX (a differenza di M S -D O S ). D opo m olti litigi, il com itato p er gli standard IEEE creò u n o standard chiam ato P O S IX (PortabU Operating System-IX, “sistem a operativo p ortabile-IX ”), n oto anche con il nom e di P i 003 (il suo n u m ero di standard IEEE). Successivam ente PO SIX è divenuto un o standard intem azionale. Lo standard è divìso in m olte sezioni, ciascuna dedicata a una parte differente di U N IX . La p rim a sezione, P I 003.1, definisce le chiam ate di sistema; la seconda sezione, P I 003.2, definisce le funzionalità basilari e così via; P 1003.1 definisce circa 60 chiam ate di sistema che devono essere fornite da tu tti i sistemi conform i allo standard. Si tratta delle chiam ate elem entari per la lettura e scrittura di file, per la creazione di nuovi processi, e così via. Praticam ente tu tti i sistemi U N IX oggi in com m ercio sup p o rtan o le chiam ate di sistema PI 003.1 e in genere molti ne supportano anche altre, in special m odo quelle definite da System V e/o d a U N IX Berkeley. Q u este chiam ate di sistem a addizionali possono raggiungere fa cilm ente le 200 unità. Nel 1987 l’autore di questo libro distribuì il codice sorgente di M IN IX , una piccola versione d i U N IX , per uso accadem ico (T anenbaum , 1987). Linus Torvald, dopo aver stu diato M IN IX presso la sua università di H elsinki e dopo averlo installato sul suo P C di casa, decise di scrivere un proprio clone di M IN IX , battezzato Linux e divenuto da allora m olto popolare. M IN IX e Linux sono en tram b i co n fo rm i allo standard e tu tto q u an to verrà detto in questo capitolo su U N IX si applica anche a loro, se n o n specificato diversamente. M algrado queste varianti di U N IX differiscano m olto al loro interno, in questo capitolo parlerem o per lo più del l'interfaccia delle loro chiam ate di sistema, che accom una tu tte le versioni. Il sistem a operativo dell’U ltraSPA R C III si chiam a S olaris e si basa sul System V, m a sup p o rta allo stesso tem po gran parte delle chiam ate di sistema di Berkeley. La Figura 6 .2 9 fornisce una prim a suddivisione in categorie delle chiam ate di sistema di Solaris. Le categorie p iù num erose e im p o rtan ti com prendono le chiam ate di sistema per la gestione dei file e delle directory, m olte delle quali appartengono a PI 003.1. Buona parte delle altre chiam ate di sistema deriva invece dal System V.
Categoria
Alcuni esempi
Gestione dei file
Apertura, lettura, scrittura, chiusura e iock di file
Geritone delle directory
Creazione e cancellazione delle directory; trasferimento di file
Gestione dei processi
Generazione, terminazione, tracing dei processi e invio di segnali tra loro
Gestione della memoria
Condivisione di memoria tra processi; protezione di pagine
Lettura e scrittura di parametri
Consultazione dell’ID di un utente, di un gruppo, di un processo; assegnamento della priorità
Data e ora
Impostazione dell’ora di accesso a file; timer d'intervallo; profilo esecutivo
Rete
Imposta/accetta connessioni; invia/riceve messaggi
Miscel lanea
Creazione di utenti; manipolazione delle quote su disco; riaw io del sistema
Figura 6.29
Suddivisione approssimativa delie chiamate di sistema U N IX.
6.4
Sistemi operativi di esempio
457
La categoria delle ch iam ate di rete è invece d o v u ta so p ra ttu tto a U N IX Berkeley, che ha in tro d o tto il co n cetto di so c k e t, ossia il p u n to term inale di una connessione di rete, m odellata sull’esem pio delle prese a m u ro p er le connessioni telefoniche. U n processo U N IX p u ò creare u n a socket, collegarsi a essa e stabilire u n a connessione a u n a socket di u n ’altra m acchina, grazie alla quale p u ò scam biare dati in m o d o bidirezionale, avvalen dosi in genere del p ro to co llo T C P /IP . U na frazione rilevante dei server di In te rn e t fu n zio n an o con U N IX p ro p rio p erché la sua tecnologia di rete esiste d a decenni ed è orm ai stabile e m atura. È diffìcile fare delle asserzioni generali sulla stru ttu ra del sistem a operativo U N IX per ché ne esistono m olte im plem entazioni, ciascuna a suo m odo diversa dalle altre. C iò n o n dim en o , la Figura 6 .3 0 vale per quasi tu tte le im plem entazioni. Alla sua base si trova il li vello dei driver di dispositivo che m ette il sistem a operativo al riparo dal c o n ta tto con l’hardw are vero e proprio. In un prim o m o m en to i driver di dispositivo venivano scritti com e en tità indipen d en ti e separate dagli altri driver, causando un 'in u tile reiterazione degli sforzi, visto che m olti driver devono affrontare problem atiche analoghe, quali il controllo del flusso, la gestione degli errori, le priorità, la separazione dei dati dal controllo, e così via. Q uesta osservazione suggerì a D ennis R itchie Io sviluppo del m odello stream (“flusso”) per la scrit tura di driver m odulari. U no stream p erm ette di stabilire una connessione bidirezionale tra u n processo dell’u ten te e u n dispositivo hardw are e di inserire u n o o più m oduli lungo il percorso. Il processo d d l ’u ten te invia dati lungo lo stream e questi vengono elaborati o tra sform ati da ciascun m odulo finché n on giungono all’hardware. 1 dati provenienti dai di spositivi subiscono l’elaborazione inversa. Al di sopra dei driver di dispositivo c’è il file system che gestisce i nom i dei file, le directory, l’allocazione dei blocchi del disco, la protezione e altro ancora. Parte del file system è la cach e a b lo c c h i che m em orizza i blocchi letti dal disco p iù di recente in caso dovessero tornare utili a breve. N el corso degli anni sono stati utilizzati m olti file system diversi, tra cui il fast file system di Berkeley (M cK usick et al., 1984) e file system a stru ttu ra logarit m ica (R osenblum e O u sterh o u t, 1991; Seltzer et al., 1993). U n ’altra parte del kernel U N IX riguarda la gestione dei processi che, tra le altre cose, si occupa della IP C (InterProctss Communication, “com unicazione tra processi”). La IPC
M o d alità
utente
M o d alità ” k ern el
Figura 6.30
Struttura di un com une sistema UNIX.
458
Capitolo 6
Livello macchina del sistema operativo
m ette a disposizione svariati m eccanism i che co n sentono al processi di com unicare tra loro e di sincronizzarsi per evitare le corse critiche. Il codice per la gestione dei processi gestisce anche lo scheduling dei processi in base alle loro1priorità. A nche i segnali, che costituiscono una form a di in te rru p t software (asincrono), sono gestiti a questo livello, così com e la m e m oria. La gran parte dei sistem i U N IX su p p o rta la m em oria virtuale con paginazione su ri chiesta e alle volte fornisce anche delle caratteristiche in più, com e la possibilità di condivi dere regioni dello spazio degli indirizzi tra più processi. Sin dalla sua nascita, U N IX fu pensato com e un sistema dalle dim ensioni co n ten u te al fine di increm entarne affidabilità e prestazioni. La prim a versione di U N IX era tutta te stuale e usava term inali che potevano visualizzare 24 o 25 righe di 80 caratteri A SC II. L’interfaccia u tente era gestita dalla shell (“conchiglia, involucro”), un program m a che gi rava a livello utente e offriva un’interfaccia a linea di com ando. Poiché la shell n o n faceva parte del kernel era facile aggiungere a U N IX nuove shell, e con il passare del tem po ne sono state realizzate m olte altre, sem pre più sofisticate. In seguito all’introduzione dei prim i term inali grafici, venne sviluppato presso il M .I.T. un sistem a a finestre per U N IX chiam ato X W in d o w s, poi raffinato m ediante l’aggiunta di M otif, una G U I (Craphical User Interface, “interfaccia grafica per l’utente”) più elaborata. Q uasi tu tto il codice di X W indow s e di M o tif gira a livello utente, fuori dal kernel, perché si attiene alla filosofia di U N IX che vuole il kernel di dim ensioni contenute.
Windows XP Al suo lancio nel 1981, il prim o P C IB M era equipaggiato con M S -D O S 1.0, un sistem a operativo a 16 b it, a singolo u ten te e o rien tato alla linea di com ando. Q u esto sistem a ope rativo era costitu ito da 8 KB di codice residence in m em oria. D ue anni d o p o fece la sua com parsa M S -D O S 2.0, u n sistem a m o lto p iù p o te n te d a 24 KB; conteneva un elabora tore di linea di co m an d o (la shell) p iù un certo num ero di caratteristiche prese in prestito da U N IX . Nel 1984 IBM lanciò sul m ercato i P C /A T basati sul 286 ed equipaggiati con M S -D O S 3.0, che aveva orm ai raggiunto i 36 KB. C o n il passare degli anni M S -D O S c o n tinu ò ad acquisire nuove funzionalità, m a restava p u r sem pre un sistem a o rien tato alla li nea d i com ando. Ispirata dal successo dei M acintosh di A pple, M icrosoft decise di dotare M S -D O S di un’interfaccia grafica per l’u ten te che chiam ò W in d o w s. Le prim e tre versioni di W indow s, culm in ate nella versione 3.x, n o n erano veri sistem i operativi, bensì interfacce grafiche per l’uten te m o n tate su M S -D O S , che m anteneva ancora il controllo della m acchina. T utti i pro gram m i giravano nello stesso spazio degli indirizzi e così un baco in u n o di loro poteva ar restare m alam ente l'in tero sistem a. La distribuzione di W indow s 95 nel 1995 m antenne M S -D O S , anche se introdusse la nuova versione 7.0. W indow s 95 e M S -D O S 7.0 assom m avano insiem e quasi tu tte le ca ratteristiche di un sistem a operativo com pleto, com presa la m em oria virtuale, la gestione dei processi e la m ulriprogram m azione. Tuttavia W indow s 95 n o n era un program m a a 32 bit effettivi, ma conteneva grosse porzioni di codice a 16 bit (affiancate al codice a 32 bit) e si appoggiava ancora sul file system di M S -D O S , ereditandone quasi rutti i limiti. I soli cam biam enti di u n a certa im portanza furono l’aggiunta del su pporto dei nom i di file lunghi, a estendere gli 8 + 3 caratteri consentiti in M S -D O S , e la possibilità di avere più di 65.536 blocchi su u n disco.
6.4
Sistemi operativi di esempio
4S9
M S -D O S sopravvisse anche al lancio di W indow s 98 nel 1998 (anche se era arrivato nel frattem po alla versione 7.1) e cont i nuò a eseguire codice a 16 bit. N onostante la m igra zione di qualche altra funzionalità dalla parte M S -D O S verso W indow s e l’organizzazione dei dischi che rendeva sta n d a rd il su p p o rto dei dischi grandi, al di là delle apparenze, W indow s 98 n on era poi cosi diverso da W indow 95. La differenza principale stava nell’in terfaccia per l’utente che integrava in m odo p iù stretto il desktop, In tern et e la riproduzione video. Fu questa integrazione ad attirare l’attenzione del D ipartim ento di Giustizia degli Stati U niti che citò M icrosoft in giudizio per aver assunto una posizione illegale di m onopolio. A W indow s 98 succedette p er breve tem p o W indow s M illennium E dition (M E) che ne co stituiva una versione leggerm ente m igliorata. Parallelam ente a questi sviluppi, M icrosoft stava lavorando alacrem ente al com pleta m ento di u n nuovo sistem a operativo a 32 bit, per la cui scrittura era partita da zero, e che chiam ò W in d o w s N ew T e c h n o lo g y o W in d o w s N T . In un prim o m o m en to venne pre sentato com e il sistema operativo che avrebbe rim piazzato tu tti gli altri nei PC basati su Intel, m a per qualche ragione ebbe u n a diffusione lenta e venne p iù tardi ricollocato nelle fasce alte di m ercato, dove conquistò una propria nicchia. La seconda versione di N T prese il nom e di W indow s 2000 e divenne la versione di p u n ta, anche nel m ercato dei desktop. XP è il successore di W indow s 20 0 0 , m a si tratta in questo caso di cam biam enti secondari, per cui X P è essenzialm ente u n a versione m igliorata di W indow s 2000. X P è com m ercializzato in due versioni, server e client, pressoché identiche e generate a partire dallo stesso codice sorgente. La versione server è stata ideata per le m acchine usate com e server di file e di stam pa su L A N e com prende perciò alcune funzionalità gestionali più elaborate di quelle della versione client, destinata invece ai desktop con singolo utente. La versione server è distrib u ita in alcune varianti (enterprise) ideate per grandi installazioni. Le varianti vengono messe a p u n to diversam ente, ottim izzandole per l’am biente in cui ci si aspetta di installarle. Al di là di queste differenze, le versioni sono tu tte m olto simili e in fatti quasi tu tti i file eseguibili sono identici in tu tte le versioni. Lo stesso XP, per stabilire la propria versione, accede a u n a variabile conservata in una stru ttu ra dati interna (il regi stro) cui è in terdetto l’accesso agli utenti, perché non possano m odificarla e convertire la ver sione client (econom ica) nelle versioni server o enterprise (m olto più costose). N o n faremo più alcuna distinzione tra le varie versioni d i XP. M entre M S -D O S e tu tte le versioni precedenti di W indow s erano sistemi a utente sin golo, X P su p p o rta la m ulciprogram m azione, consentendo a p iù u ten ti per volta di lavorare sulla stessa m acchina. Per esem pio un server di rete potrebbe avere più u ten ti attivi allo stesso tem po sulla rete, consentendo a ciascuno l’accesso ai propri file. X P è un sistem a operativo per la m ultiprogram m azione, a 32 bit: su p p o rta la coesisten za di p iù processi u tente, o g n u n o d o tato di u n proprio spazio degli indirizzi virtuali di 32 b it e paginato a richiesta. XP stesso è scritto tu tto in codice di 32 bit. U no dei m iglioram enti innovativi di N T rispetto a W indow s 95 era la sua stru ttu ra m odulare basata su u n kernel relativam ente piccolo, la cui esecuzione avveniva in m odalità kernel, più svariati processi server in esecuzione in m odalità utente. I processi utente inte ragivano con i processi server sul m odello client-server: un client invia un messaggio di ri chiesta al server, il server svolge il lavoro e restituisce il risultato al client con un secondo messaggio. La stru ttu ra m odulare consentì una facile portabilità su m olti altri calcolatori non appartenen ti alla linea Intel, com presi i D E C Alpha, i Pow erPC IBM e i M IPS SG1. C ’è da
460
Capitolo 6
Livello macchina del sistema operativo
dire però che, per ragioni di prestazioni, a partire da N T 4.0 gran parte del sistema è stato reinserito nel kernel. Potrem m o certo dilungarci m olto sulla stru ttu ra di XI5 e sull’interfaccia delle sue chia m ate di sistema, m a il nostro interesse principale verte sull’aspetto delle m acchine virtuali indo tte dai diversi sistem i operativi (cioè dalle loro chiam ate di sistem a), perciò diam o qui un breve resoconto della stru ttu ra del sistem a p er passare poi all’interfaccia delle chiam ate di sistema. La Figura 6.31 illustra la stru ttu ra di XP, costituita da un certo num ero di m oduli o r ganizzati a livelli e che contrib u isco n o a im plem entare ìl siscema operativo. A ogni m o dulo corrisp o n d e u n a fun zio n e particolare e un’interfaccia ben definita c o n gli altri m oduli. Q uasi tutti i m o d u li sono scritti in C , anche se una parte dell’interfaccia del dispositivo grafico è scritta in C + + e u n a piccola p orzione dei livelli più bassi è scritta in linguaggio assemblarivo. Alla base della struttura c’è un sottile livello di astrazione hardw are (hardwareabstraction layer) che h a lo scopo di presentare al resto del sistema operativo dispositivi hardware astratti e privi degli spigoli e delle idiosincrasie di cui abbonda l’hardware reale. Tra i dispositivi m o dellati ci sono le cache non residenti nel chip, i timer, i bus di I/O , i controllori di interrupt e i D M A . La loro presentazione in form a idealizzata al resto del sistema operativo facilita la por tabilità di X P su altre piattaform e hardware, dal m om ento che tu tte le m odifiche da effettuare sono concentrate. Al di sopra del livello di astrazione hardw are si trova un livello che contiene il kernel e i driver d i dispositivo; entram bi possono accedere direttam ente all’hardw are visto che con tengono porzioni di codice che d ip en d o n o dall’hardw are stesso.
Modalità utente
Ambiente esecutivo Modalità kernel
Figura 6.31
Struttura di W indows XP.
6.4
Sistemi operativi di esempio
461
Il kernel su p p o rta gli oggetti prim itivi del kernel, cioè gli in terru p t e le trap, oltre alla gestione delie eccezioni, lo scheduling dei processi, la sincronizzazione m ultiprocesso e la tem porizzazione. L'obiettivo di questo livello è di rendere la parte restante del sistem a operativo com pletam ente in dipendente dall’hardw are e perciò facilm ente portabile. II kernel risiede perm anen tem en te in m em oria principale ed è non preemptible, anche se può cedere il con trollo tem po ran eam en te p e r l’assistenza agii in terru p t di I/O . O g n i driver di d isp ositivo p uò controllare u n o o più dispositivi di I/O , m a può an che svolgere delle azioni che n on sono legate a un dispositivo specifico, com e cifrare flussi di dati o anche soltanto fornire accesso alle stru ttu re dati del kernel. D a to che gli u tenti pos sono installare nuovi driver di dispositivo, essi hanno il potere di intaccare il kernel e pre giudicare lo stato del sistema; per questa ragione è im portante che i driver vengano scrini con m o lta cura. Al d i sopra del kernel e dei driver dei dispositivi si trova la parte superiore del sistem a operativo, detta esecutiva ( executive). Q u esta parte (suddivisa a sua volta in tre livelli) di pende dall’arch itcttu ra e p u ò essere p o rta ta su m acchine differenti con u n o sforzo relativa m en te m odesto. Il livello inferiore contiene il file system e il gestore degli oggetti. Il file system gesti sce l’uso dei file e delle directory, e il gestore degli oggetti (object manager) gestisce gli og getti conosciuti dal kernel, tra cui i processi, i thread (processi leggeri con ten u ti in un solo spazio degli indirizzi), i file, le directory, i sem afori, i dispositivi di I/O , i tim er e altro. Il ge store degli oggetti controlla anche u no spazio dei n o m i in cui vengono inseriti gii oggetti di nuova creazione affinché siano successivam ente reperibili. Il livello successivo consta di sei parti principali, com e illustrato nella Figura 6.31. Il gestore di I/O m ette a disposizione u no schem a generale per la gestione di dispositivi di I /O e fornisce alcuni servizi generici di I/O . Il gestore della cache dei file è ad d etto alla gestione dei blocchi dei file e assiste il ge store della m em oria virtuale nella scelta dei blocchi da m antenere in m em oria, ed è respon sabile della gestione dei file m appati in m em oria. X P può essere configurato con file system m ultipli, nel qual caso il gestore della cache svolge il pro p rio lavoro per co n tò di tutti. Q u an d o si rende necessario reperire u n blocco, questo viene richiesto al gestore della cache; se n o n è presente in cache, il gestore si rivolge al file system appropriato per ottenerlo. Il ge store della cache interagisce con il gestore della m em oria virtuale perché i file possono es sere m appati negli spazi degli indirizzi dei processi e si richiede quindi un controllo di coe renza dei dati. Il gestore della memoria virtuale im plem enta l’architettura di m em oria virtuale pa ginata a richiesta d i XP. Gestisce la corrispondenza tra pagine virtuali e blocchi di m em oria, e assicura la validità delle regole di protezione secondo cui ogni processo può accedere alle sole pagine appartenenti al proprio spazio degli indirizzi (eccetto in determ inate circostanze speciali). Gestisce inoltre alcune chiam ate di sistem a che coinvolgono la m em oria virtuale. Il gestore dei processi e dei thread si occupa dei m eccanism i di funzionam ento di processi e thread per ciò che riguarda la loro creazione e distruzione, ma non le loro politi che di utilizzo. Il m on itor d i sicurezza (security reference monitor) rafforza il già elaborato m eccani sm o di sicurezza di X P che soddisfa i requisiti del Libro arancione C 2 del D ip artim ento della Difesa degli Stati U niti. Il Libro arancione detta un gran num ero dì regole cui si devono
462
Capitolo 6
Livello macchina del sistema operativo
conform are i sistem i inform atici, a partire dall’autenticazione tram ite login, passando per la gestione del con trollo degli accessi, per finire al fatto che le pagine virtuali devono essere az zerate prim a di essere riutilizzate. l ’interfaccia del dispositivo grafico si occupa della gestione delle im m agini per lo scherm o e la stam pante. Fornisce agli u ten ti le chiam ate di sistema per scrivere sul m o n ito r o sulla stam pante in m odo in d ip en d en te dal dispositivo. C o n tien e inoltre i driver del di spositivo hardw are per l’uscita grafica; nelle versioni precedenti a X P 4 .0 i driver si trova vano nello spazio utente, ma le prestazioni erano m olto deludenti. M icrosoft li ha poi tra sferiti nel kernel per renderli più veloci. A nche il m odulo W in32, che gestisce gran parte delle chiam ate di sistema, si trovava originariam ente nello spazio utente ed è stato successivam ente portato nel kernel. In cim a alla p arte esecutiva c’è un livello sottile di servizi di sistema che fornisce un’in terfaccia alla parte esecutiva: riceve le chiam ate X P vere e proprie e le sm ista agli altri com ponenti della p arte esecutiva. A ll’esterno del kernel si trovano i program m i uten te e il sottosistem a am bientale (environmentalsubsystem). Q u est’u ltim o è stato previsto per scoraggiare i program m i uten te dall’effettuare direttam ente le chiam ate di sistem a (anche se è tecnicam ente possibile) e m ette loro a disposizione un insiem e d i chiam ate di funzioni. O riginariam ente esistevano tre sottosistem i am bientali; W in 3 2 (per i p rogram m i di N T, W indow s 20 0 0 , XP o anche di W indow s 9 5 /9 8 /M E ), PO SIX (per i program m i U N IX ) e O S /2 (per i program m i O S /2 ). Dei tre solo W in 3 2 è supportato, anche se esiste u n nuovo m odulo di servizi che garantisce u n m odesto su p p o rto di U N IX . Le applicazioni di W indow s usano le funzioni di W in 3 2 e com unicano con il sottosi stem a W in 3 2 per effettuare le chiam ate di sistema. Il sottosistema W in32 a c c e ttale chia m ate di funzioni W in 3 2 (descritte in seguito) e usa il m odulo di libreria interfaccia di si stema (che è in realtà un file DLL, si veda al riguardo il C apitolo 7) per effettuare le vere chiam ate di sistem a di XP, necessarie a svolgere il com pito richiesto. D o p o aver esam inato brevem ente la stru ttu ra di XP. corniam o ora al nostro interesse principale: i servizi offerti da XP. La loro interfaccia è il p u n to di co n tatto tra il program m atore e il sistema. P u rtro p p o M icrosoft non ha m ai reso pubblica la lista com pleta delle chiam ate di sistem a XP, che tuttavia cam bia d a distribuzione a distribuzione. Tali carenze rendono praticam ente im possibile la scrittura di program m i che possano effettuare chiam ate di sistem a dirette. M icro so ft ha preferito rendere pubb lico u n insiem e di chiam ate detto API di W in32 {Application Prograniming Interface, “interfaccia p e r la p ro g ram m azio n e delle applica zioni”). Si tra tta di p rocedure di libreria che alle volte si avvalgono delle ch iam ate di si stem a p e r eseguire il co m p ito loro richiesto, alle altre operano d irettam en te nella proce d u ra di libreria aH’in te rn o dello spazio u te n te o nel sottosistem a W in 3 2 . Le ch iam ate API di W in 3 2 n o n cam biano con le versioni di W indow s, in m odo da garantire la stabilità delle applicazioni. C io n o n o sta n te , esistono an ch e alcune chiam ate A P I d i X P che possono però variare tra le diverse versioni. C i lim itiam o qui allo stu d io delle API di W in 3 2 per ché, an ch e se non esauriscono tu tte le ch iam ate dei sistem a, sono ben d o cu m e n tate e p iù stabili nel tem po. In seguito all’a d a tta m e n to d i W indow s alle m acchine a 64 bit, M icrosoft ha cam biato il nom e di W in 3 2 p er in cludere la versione a 64 b it, m a ai n o stri fini basterà l’analisi della p rim a versione.
6.4
Sistemi operativi di esempio
463
La filosofia delle API di W in 3 2 è com pietam ence diversa da quella di U N IX . N el caso di U N IX le chiam ate di sistem a sono tu tte pubbliche e form ano un’interfaccia m inim ale: l’elim inazione di u n a sola d i loro ridurrebbe la funzionalità del sistem a operativo. A l con trario W in 3 2 fornisce un’interfaccia rid o n d an te (ci sono spesso tre o q u attro m odi diversi di Sire la stessa cosa) che com prende anche alcune funzioni che non dovrebbero essere (e che infatti n on sono) chiam ate di sistem a, p e r esem pio una chiam ata A PI per la copia di un file intero. M olte chiam ate API di W in 3 2 servono a creare oggetti del kernel, com e file, processi, thread, pipe, e cosi via, e com e risultato restituiscono al chiam ante l ' h a n d l e (“im pugnatura") dei [oggetto. L’handle può poi essere usato per svolgere le operazioni definite sull'oggetto. L’handle appartiene al processo che ha creato l’oggetto corrispondente e non può essere pas sato d irettam en te a un altro processo perché ne faccia uso (nello stesso m odo in cui i de scrittori di file U N IX n o n possono essere passati ad altri processi perché ne facciano uso). Tuttavìa, in determ in ate circostanze è possibile duplicare un handle e passarne la copia a un altro processo in m odo p ro tetto , consentendogli l’accesso a un oggetto che n o n gli appar tiene. U n handle p uò essere accom pagnato d a un descrittore di sicurezza che specifica in det taglio quali processi possono operare su di esso, e con quali operazioni. Q u alche volta si sente parlare di X P com e di un sistem a orientato agli oggetti, perché l’unico m o d o di m anipolare gli oggetti del kernel è di invocare m etodi (funzioni API) sui loro handle. D ’altra parte, m ancano a XP alcune delle proprietà fondam entali dei sistemi orientati agli oggetti quali l’ereditarietà e il polim orfism o. Le API di W in 3 2 erano disponibili anche in W indow s 9 5 /9 8 /M E (e su W indow s C E, il sistem a operativo per l’elettronica dì consum o), a parte qualche eccezione. Per esem pio W indow s 9 5 /9 8 erano sprovvisti della sicurezza, perciò le chiam ate A PI che h an n o a che fare con la sicurezza restituirebbero su W in d o w s 9 5 /9 8 u n a segnalazione d ’errore. Inoltre, i nom i di file di XP usano l’insiem e di caratteri U nicode, che non era ancora disponibile su W indow s 95/98. C i sono differenze anche nel tipo dei param etri di alcune chiam ate dì fun zioni API. Per esem pio, in X P le coordinate dello scherm o che si trovano nelle funzioni gra fiche sono num eri a 32 bit effettivi; in W indow s 9 5 /9 8 venivano usati solo i 16 b it m eno significativi (per la retrocom patibilità con W indow s 3.1). Se da una parte, l’esistenza delle A PI d i W in 3 2 nei diversi sistemi operativi facilita la portabilità dei program m i, dall’altra evi denzia ancor d i più la distanza che esiste tra di loro e le chiam ate di sistema vere e proprie. «A
6.4.2
Esempi di memoria virtuale
In questo paragrafo affrontiam o la m em oria virtuale di U N IX e di X P che, dal p u n to di vi sta del program m atore, sono m o lto simili.
Memoria virtuale di UNIX T utti i processi U N IX h an n o tre segm enti: codice, dati e stack (Figura 6.32). N elle m ac chine d o tate di un solo spazio lineare d ’indirizzi, in genere si pone il codice alla base della m em oria, lo si fa seguire dai dati e si alloca lo stack in cim a alla m em oria stessa. La d im en sione del codice è fissa, m en tre i dati e lo stack sono liberi di crescere in direzioni opposte. Q uesto m odello è m olto sem plice da im plem entare su qualsiasi m acchina ed è quello usato da Solaris.
464
Capitolo 6
Livello macchina del sistema operativo
In d ir iz z i
OxFFFFFFFF
Stack
~T" _L_ Dati C o d ic e
0 Figura 6.32
Spazio dogli indirizzi di un processo UNIX.
Inoltre, se la m acchina consente la paginazione, l’intero spazio degli indirizzi può essere pa ginato senza che il program m atore neanche se ne accorga. L’unica cosa che il program m a tore sa è che può prendersi più spazio per i suoi program m i di q u an to ce nc sia in m em o ria fisica. Per consentire com u n q u e la condivisione di tem po tra un num ero arbitrario di processi, i sistemi U N IX che non dispongono della paginazione, in genere fanno lo swap tra m em oria e disco di interi processi p er volta. Per q u a n to riguarda la m em oria virtuale (con paginazione a richiesta) dello U N IX Berkeley n o n resta da aggiungere altro. Per il System V (e quindi Solaris) invece va aggiun to che esso com prende diverse funzionalità che consentono agli u ten ti una gestione m olto più sofisticata della loro m em oria virtuale. D i particolare im portanza è la possibilità che un processo m appi un file (o una sua parte) nel proprio spazio degli indirizzi. Per esem pio, se u n file di 12 KB è m appato all’indirizzo virtuale Ì4 4 KB, la lettura della parola aH’indirizzo 144 KB equivale alla lettura della p rim a parola del file. G razie a questo m eccanism o è pos sibile leggere e scrivere file senza ricorrere alle chiam ate di sistema. D ato che la dim ensione di u n file p uò eccedere quella dello spazio degli indirizzi virtuali, è possibile m apparne in m em oria anche solo u n a parte. L'operazione com incia con l’apertura del file che restituisce il suo descrittore fd, usato successivam ente per identificare il file corrispondente d a m appare. Q u in d i il processo effettua la chiam ata p a d d r = m m a p (indiriz z q _ v i r t u a l e , lunghezza, protezione, flag., fd,
f ile_of fset)
che m appa l u n g h e z z a byte, a partire dalla posizione o f f s e t all’interno del file, negli in dirizzi virtuali che com inciano a i n d i r i z z o _ v i r t u a l e . In alternativa è possibile im po stare il param etro f l a g in m odo che sia il sistem a a scegliere un indirizzo virtuale, restituito nella variabile p a d d r . La regione m appata deve com prendere un num ero intero di pagine e deve essere allineata alle loro estremità. II param etro p r o t e z i o n e può specificare una com binazione qualsiasi di permessi in lettura, scrittura o esecuzione. La corrispondenza pu ò es sere poi rimossa con la chiam ata u n m a p . Più processi possono m appare lo stesso file contem poraneam ente. La condivisione può avvenire secondo d u e opzioni. La p rim a prevede che tu tte le pagine siano condivise, perciò le scritture effettuate da u n processo sono visibili a tu tti gli altri. Q uesta opzione m ette a di sposizione u n percorso per la com unicazione tra processi con larghezza di banda elevata. L’altra opzione prevede la condi visione delle pagine fintanto che non siano state m odificate; non appena u n processo tenta d i scrivere in u n a pagina si verifica u n errore di protezione, a seguito
6.4
Sistemi operativi di esempio
465
del quale il sistem a operativo fornisce al processo u na copia privata della pagina su cui scri vere. Q u esto schema, noto con il nom e di copia dopo scrittura (copy on write), to rn a utile quando si vuol dare a ogni processo l’illusione d i essere l'unico a m appare un certo file.
Memoria virtuale di Windows XP In X P ogni processo utente ha il proprio spazio degli indirizzi virtuali. G li indirizzi virtuali sono lunghi 32 bit, così ogni processo ha u no spazio degli indirizzi virtuali di 4 G B. I prim i 2 GB sono disponibili per ìl codice e i dati, i successivi 2 GB perm ettono l’accesso (limitato) alla m em oria del kernel, fatta eccezione per le versioni Server di W indow s, in cui la suddivi sione è di 3 G B per l'u ten te e 1 GB per il kernel. Lo spazio degli indirizzi virtuali è paginato a richiesta, con una dim ensione di pagina fissa (4 KB nel Pentium 4). Le pagine virtuali si possono trovare in u n o dei tre stati seguenti: libero, riservato o im pegnato. U na pagina libera è una pagina non attualm ente in uso; un riferim ento a essa causa un errore di pagina. All’avvio di u n processo tu tte le sue pagine sono libere finché non co m incia la corrispondenza tra pro g ram m a e dati nel suo spazio degli indirizzi. U n a volta che una parte del codice o dei dati è m appata in una pagina, questa si dice impegnata icommitted). Un riferim ento a una pagina im pegnata viene m appato per mezzo dell’hardw are della m e m oria virtuale e h a successo solo se la pagina si trova in m em oria principale. In caso con trario, si verifica un errore di pagina e il sistema operativo si preoccupa di caricare la pagina dal disco. U na pagina virtuale p uò anche essere riservata per indicare che non è disponibile alla corrispondenza, a m eno che la riserva venga rimossa esplicitam ente. O ltre a questi a t tributi, u n a pagina può anche essere leggibile, scrivibile o eseguibile. I prim i e gli ultim i 64 KB di m em oria sono sem pre liberi al fine di intercettare gli errori di p u n tam en to (Ì puntatori non inizializzati valgono in genere 0 o - 1 ) . A ciascuna pagina im pegnata corrisponde su disco una pagina om bra (shadowpage) dove viene conservata q u an d o non è presente in m em oria principale. Le pagine libere o riservate n o n h a n n o una pagina o m bra, perciò i riferim enti a esse causano errori di pagina (il sistem a non può caricare u n a pagina dal disco se questa n o n esìste). Le pagine o m b ra sono orga nizzate su disco in u no o più file di paginazione. Il sistema operativo si preoccupa di tener traccia della corrispondenza tra le pagine virtuali e le parti dei file di paginazione. Nel caso del testo del program m a (con perm esso di sola esecuzione) è il file binario eseguibile a con tenere le pagine om bra; le pagine di dati sono invece con ten u te in file speciali. XP, al pari di System V, p e rm e ite la corrispondenza diretta tra file e regioni dello spa zio degli indirizzi virtuali (cioè in sequenze di pagine consecutive). U na volta m appato nello spazio degli indirizzi, u n file può essere letto o scritto tram ite le com uni operazioni di rife rim ento alla m em oria. I file m ap p ati in m em oria sono im plem entati allo stesso m odo delle pagine im pegnate, con la sola differenza che le pagine om bra si trovano in questo caso nei file stessi invece che nel file d i paginazione. D i conseguenza, è possibile che la versione di un file m appato in m e m oria sia diversa da quella su disco (a causa d i scritture recenti nello spazio degli indirizzi virtuali). In ogni caso, il file viene aggiornato q u an d o estrom esso dalla m em oria o a seguito di una richiesta esplicita di flush (che forza u n a scrittura dei cam biam enti su disco). XP perm ette espressam ente la corrispondenza contem poranea di un file da parte di due o più processi, anche a indirizzi virtuali differenti. G razie alla lettura e scrittura di parole di m em oria, i processi possono com unicare tra loro e scam biarsi dati con una larghezza di
466
Capitolo 6
Livello macchina del sistema operativo
banda m olto elevata, poiché n o n è richiesta alcuna operazione di copia. Processi diversi pos sono avere permessi d ’accesso diversi. Poiché tu tti i processi che m appano lo stesso file con dividono le stesse pagine, i cam biam enti effettuati da uno di loro sono visibili im m ediata m en te a tu tti gli altri, anche se n o n è ancora stata aggiornata la copia su disco. Le A PI di W in 3 2 co ntengono diverse finizioni per consentire a un processo la gestione esplicita della propria m em oria virtuale; le più im portanti sono elencate nella Figura 6.33. T utte queste funzioni operano su regioni costituite da una singola pagina o d a una sequenza di d u e o più pagine consecutive nello spazio degli indirizzi virtuali. Le p rim e q u a ttro funzioni API sono autoesplicarive. C o n le altre due, u n processo può costringere la paginazione a tenere u n certo num ero di pagine in m em oria o p u ò rim uovere questo vincolo. La cosa p u ò essere utile alle applicazioni in tem po reale, m a è consentita solo ai program m i dell’am m inistratore di sistema. Inoltre, il sistema operativo stabilisce dei v in coli cui devono attenersi i processi perché non d iventino tro p p o avidi. Seppur n o n elencate nella Figura 6 .3 3 , XP dispone di funzioni API p er consentire a un processo di accedere alla m em oria virtuale di un altro processo p er il quale ha ricevuto il controllo (cioè di cui ha un handle). Le ultim e q u attro funzioni API elencate servono alla gestione dei file m appari in m e m oria. La m appatura di un file com incia con la creazione di un oggetto di m appatura file m ediante C r e a te F ile M a p p in g . La funzione restituisce un handle dell’oggetto di m ap patu ra file e, se richiesto, lo associa a un n o m e nel file system perché possa essere usato da un altro processo. Le due funzioni seguenti servono rispettivam ente alla corrispondenza e alla rim ozione di file dalla m em oria. L’ultim a funzione può essere invocata da un processo per m appare un file già m appato da u n altro processo. In questo m odo, due o p iù processi possono condividere regioni dei rispettivi spazi degli indirizzi. Q ueste sono le funzioni A PI basilari a tto rn o alle quali è co struito il sistem a di gestione della m em oria. Per fare u n esem pio, esistono funzioni API per l’allocazione o la rim ozione di stru ttu re dati in u n o o p iù heap (“m ucchio, cu m u lo ). G li heap sono usati per la m e m orizzazione di quelle stru ttu re dati che vengono create e d istru tte d in am icam ente e che Funzione API
Significato
VirtualAlloc
Riserva o impegna una pagina
VirtualFree
Libera o disimpegna una pagina
VirtualProtect
Cambia la protezione in lettura/scrittura/esecuzione di una regione
VirtualQuery
Esamina lo stato di una regione
VirtualLock
Rende una regione residente in memoria (cioè ne disabilita la paginazione)
VirtualUnlock
Rende una regione paginabile nel modo consueto
CreateFileMapping
Crea un oggetto di mappatura file e gli assegna un nome (se specificato)
MapViewOfFile
Colloca (una parte di) un file nello spazio degli indirizzi
UnmapViewOfFile
Rimuove un file mappato dallo spazio degli indirizzi
OpenFileMapping
Apre un oggetto di mappatura file precedentemente creato
Figura 6.33
Le più importanti chiamate API di Windows XP per la gestione della memoria virtuale.
6.4
Sistemi operativi di esempio
467
no n sono oggetto di garbage collection (l’operazione di rim ozione au tom atica delle stru t ture dati inutilizzate a cura del sistem a), perciò sta al softw are dell’uten te liberare i blocchi di m em oria virtuale che non sono più in uso. La gestione dello heap in XP è sim ile alla funzione m a l l o c dei sistem i U N IX , co n la differenza che in X P ci possono essere più heap gestiti in d ip en d en tem en te.
6.4.3
Esempi di I/O virtuale
L’obiettivo principale del sistem a operativo è quello di fornire servizi ai program m i utente, so p rattu tto servizi di I /O com e la scrittu ra e la lettura di file. Sia U N IX sia X P offrono un am pio ventaglio di servizi di I/O ai program m i u tente. Se è vero che esiste una chiam ata XP equivalente a ogni chiam ata U N IX , n o n vale l’inverso, perché X P possiede m olte più chia m ate e ogni sua chiam ata è m olto più com plicata della co n tro p arte U N IX .
I/O virtuale di UNIX B uona parte del successo d i U N IX risiede nella sua sem plicità che, a sua volta, è u n a con seguenza d ire tta dell’organizzazione del file system . U n file o rd in ario è una sequenza li neare di byte che com incia alla posizione 0 e prosegue fino a un m assim o di 232 - 1 byte. Il sistem a operativo n o n im p o n e alcu n a s tru ttu ra ai file, anche se gli u te n ti in terp retan o i file di testo A S C II com e u n a successione di righe, ciascuna co m p leta ta da un carattere di fine linea. A ogni file aperto è associato un p u n tato re al byte successivo da leggere o in cui scri vere. Le chiam ate di sistem a r e a d e w r i t e leggono o scrivono dati a partire dalla posizione nel file indicata dal pu n tato re. E ntram be le chiam ate im plicano l’avanzam ento del p u n ta tore d i u n num ero di posizioni uguale al n u m ero di byte trasferiti. È tuttavia possibile l’ac cesso d iretto a u n a posizione del file fornendone il valore al puntatore. O ltre ai file ordinari, U N IX su p p o rta anche file speciali, usati per accedere ai disposi tivi di I/O . In genere ogni dispositivo di I /O è associato a un o o p iù file speciali. U n p ro gram m a p uò utilizzare il dispositivo di I /O attraverso la lettura o scrittura su quésti file. È questo il m odo in cui vengono gestiti dischi, stam panti, term inali e m olti altri dispositivi. La Figura 6.34 elenca le chiam ate di U N IX p iù im p o rtan ti relative al file system. La chiam ata c r e a t (C R EA TE sarebbe sbagliato!) è utilizzabile per creare un nuovo file, anche se non è più necessaria perché nelle ultim e versioni anche la funzione o p e n è in grado di farlo, u n l i n k cancella un file, nell’ipotesi che questo si trovi in una sola directory. La chiam ata o p e n si usa per aprire file esistenti (e per crearne di nuovi). L’indicatore m ode specifica la m odalità d ’apertu ra (in lettura, scrittura, e così via). La chiam ata restitui sce com e risultato il descrittore di file, un piccolo intero che serve a identificare il file nelle chiam ate successive. L’I/O propriam ente d e n o si svolge con le chiam ate r e a d e w r i t e , le quali prendono in ingresso il descrittore del file da usare, u n buffer per i dati da leggere o contenente i dati da scrivere, p iù un valore c o u n t che stabilisce la q u an tità di dati da trasm ettere, l s e e k serve a spostare il p u n tato re al file, in m odo da realizzare l’accesso d iretto alle sue posizioni. La chiam ata s t a t serve per o tten ere inform azioni sui file, quali la dim ensione, la data d ell'u ltim o accesso, il p ro p rietario e altro ancora, chm od m odifica la m odalità di pro tezione del file, p er esem pio c o n sen ten d o o negando la lettu ra del file agli u te n ti che non
468
Capitolo 6
Livello macchina del sistema operativo
Chiamata di sistema
Significato
creatfname. mode)
Crea un file (mode specifica la modalità di protezione)
unlink(name)
Cancella un file (assumendo d ie ci sia un solo link a esso)
o p e n (n a m e , m o d e )
Apre o crea un file e restituisce il suo descrittore
dose(fd)
Chiude un file
readtfd, buffer, count)
Legge count byte in un buffer
write(fd. buffer, count)
Scrive count byte da un buffer
lseek(fd, offset, w)
Sposta il puntatore del file secondo offset e w
slatinarne, buffer)
Restituisce le informazioni sul file
chmode(name, mode)
Cambia la modalilà di protezione del file
fcntllfd, c m d ,...)
Esegue varie operazioni di controllo come il lock di (parte di) un file
Figura 6.34
Chiamate principali per il file system di UNIX.
n e sono p ro p rietari. Infine f o n t i svolge svariate operazioni, tra cui l’aggiunta o la rim o zione di u n blocco che indica se il file è stato riservato o m eno per l’accesso esclusivo da p a rte d i u n processo. La Figura 6.35 illustra il funzionam ento delle principali chiam ate di I/O ; il codice raffi gurato è ridono, in quan to n on com prende il pur necessario controllo degli errori. Prim a di entrare nel ciclo, il program m a apre u n file esistente, d a t a , e ne crea uno nuovo, n ew f ; le due chiam ate prendono in ingresso com e secondo param etro i bit di protezione che specifi cano la m odalità dei due file, rispettivam ente in lettura e in scrittura, e restituiscono a loro volta due descrittori di file, i n f d e o u t f d . Se una delle due chiam ate non dovesse andare a buo n fine, restituirebbe u n descrittore di file negativo, a indicare l’insuccesso. La procedura r e a d ha tre param etri: un descrittore di file, un buffer e un num ero di byte. La r e a d prova a leggere dal file il nu m ero di byte specificato e a porlo nel buffer, ma il nu m ero di byte effettivam ente letto è restituito in c o u n t e sarà m inore di b y t e s se il file è tro p p o corto. La chiam ata w r i t e ripone i byte appena letti nel file di o u tp u t. Il ciclo pro segue finché non term ina la lettura d i tu tto il file di in p u t, al che il ciclo term ina e i file ven gono chiusi. I descrittori di file di U N IX sono dei num eri interi (in genere m inori di 20): i descrittori 0, 1 e 2 sono speciali e riservati risp ettivam ente a standard input, standard o u tp u t e standard error, che p u n ta n o di n o rm a alla tastiera, allo scherm o e ancora allo scherm o, m a che possono essere rediretti1 su file specificati dall’utente. M olti program m i di U N IX pren d o n o dati in ingresso dallo standard in p u t e scrivono in uscita sullo standard o u tp u t; spesso sono chiam ati filtri. Intim am ente legato al file system è il directory system. O gni utente può possedere m olte directory, che a loro volta possono contenere file o altre sottodirectory. I sistemi U N IX sono configurati spesso com e m ostrato dalla Figura 6.36, con una directory principale, la directory
1 Per redirczionc di un puntatore (descrittore di file) si intende l’attribuzione a esso di una nuova locazione (direzione) a cui puntare (N.d. Z).
6.4
Sistemi operativi di esempio
469
/* Apertura dei descrittori di file. •/ infd = openf'data", 0); outfd = creat("newf" , ProtectionBits); r Ciclo di copia. */ do ( count = readonfd, buffer, bytes); if (count > 0) write(outfd, buffer, count); ) while (count > 0); r Chiusura dei file. */ close(infd); closet outfd);
Figura 6.35
Frammento di programma per la copia di un file con chiamate di sistema UNIX. Usiamo il C perché mette bene in evidenza le chiamate di sistema di livello più basso (a differenza di lava, che le nasconde).
rad ice ( root directory), che contiene le sottodirectory bin (per i program m i di esecuzione fre quente), dev (per i file speciali di dispositivi di I/O ), lib (per le librerie) e usr (per le directory degli utenti). NeH’esem pio la directory usr contiene le sottodirectory aste jirrr, la prim a con tiene a sua volta d u e file, data e foo.c, e u n a sottodirectory, bin, che contiene q u a ttro giochi. U n file è rintracciabile tram ite il suo percorso (patii) a partire dalla radice. U n per corso contiene la lista di tu tte le directory attraversate dalla radice fino al file, separate da un carattere barra. Per esem pio, il percorso assoluto del file gioco2 è lusrlastibini gioco!. Si dice percorso assoluto un percorso di file che com incia dalla radice. A ciascun pro g ram m a in esecuzione è associata una directory di lavoro ( working directory). 1 percorsi dei file possono essere specificati relativam ente alla directory di lavoro, nel qual caso com inciano con una barra, perché siano distinguibili dai percorsi assoluti. Parliam o in tal caso d i percorsi relativi: se la directory di lavoro è lusr/ast, gioco3, il file è raggiungibile usando il percorso relativo binigiocod. Un utente p u ò creare un collegamento (link) a un file di u n altro u ten te grazie alla chiam ata di sistema l i n k . N ell’esem pio prece den te Iusr/ast/binIgioco3 e lusr/jimJjotto p u n tan o allo stesso file. N o n sono permessi collegam enti a directory per evirare la form azione di cid i nel directory system. Le chiam ate o p e n e c r e a t accettano com e param etro sia percorsi relativi sia assoluti. Le principali chiam ate di sistem a per la gestione delle directory U N IX sono elencate nella Figura 6.37. m k d ir crea una nuova directory e r m d i r rim uove una directory (vuota) già esistente. Le successive tre chiam ate si usano per leggere gli elem enti di una directory: la prim a apre la directory, la seconda legge i suoi elem enti, la terza chiude la directory, c h d i r cam bia la directory di lavoro. l i n k crea in una directory u n nuovo elem ento che p u n ta a un file esistente. Per esem pio, l’elem ento /usr/jimljotto potrebbe essere stato creato dalla chiam ata link(’/usr/ast/bin/gioco3', '/u
s r
/jim/jotto”)
o da una ch iam ata equivalente con, in ingresso, percorsi relativi d ip en d e n ti dalla directory di lavoro del p rogram m a che effettua la chiam ata, u n l i n k rim uove u n elem ento dalla directory: se il file ha un solo collegam ento viene cancellato, m a se ne ha di p iù viene m an te n u to . N o n ha alcuna im p o rtan za se il collegam ento rim osso era l’originale o una copia.
470
Capitolo 6
Livello macchina del sistema operativo
Directory radice
Figura 6 .3 6
fòrte del directory system di un tipico sistema U N IX .
U na volta creato, u n collegam ento ha tu tti i d iritti e le p roprietà d ello rig in ale , da cui è indistin g u ib ile. La chiam ata u n lin k ( V u s r / a s t / b in / g io c o 3 ’ )
rende gioco3 accessibile d ’ora in poi solo attraverso il percorso /usr/jim/jotto. In questo m odo è possibile usare l i n k e u n l i n k per “trasferire” file d a una directory all’altra. A ogni file (e alle directory, che sono esse stesse dei file) è associata una stringa di bit che specifica chi può accedervi, ed è costituita da tre cam pi RWX: il prim o controlla i per-
6.4
Chiamata di sistema
Significato
mkdirtname, mode)
Crea una directory nuova
rmdinname)
Elimina una directory vuota
opendir(namei
Apre una directory per la lettura
Sistemi operativi di esempio
readdirtdirpointer)
Legge l'elemento successivo di una directory
closedir(dirpointer)
Chiude una directory
chdirtdirnamel
Cambia la directory di lavoro in dimume
linktnamel, name2)
Crea un elemento di directory nameJ che punta a namel
unlink(name)
Rimuove nume dalla sua directory
Figura 6 .3 7
471
Chiam ate prin cip ali di U N IX per la gestione delle directory.
messi si lettu ra (R), scrittura (W ) ed esecuzione (X) del proprietario, il secondo controlla i permessi degli altri utenti dello stesso gruppo, il terzo riguarda tu tti gli altri utenti. C osì RW X R-X —X vuol dire che il proprietario può leggere, scrivere ed eseguire il file (se si tratta di un program m a eseguibile, altrim enti la X sarebbe assente), m entre gli altri u te n ti del suo g ru p p o possono solo leggerlo o eseguirlo e gli estranei possono solo eseguirlo. C o n questi permessi gli estranei possono usare il program m a, m a non rubarlo (copiarlo), poiché non h a n n o il perm esso in lettura. L’attribuzione di un gru ppo agli u ten ti è fatta dall’am m ini stratore di sistema, chiam ato in genere superuser, che h a anche il potere di scavalcare il m ec canism o di protezione e p u ò leggere, scrivere o eseguire q u alunque file. V eniam o ora brevem ente all’im plem entazione dei file e delle directory U N IX (per una trattazione com pleta si veda Vahalia, 1996). A ogni file (e q u in d i a ogni directory) è asso ciato un blocco d ’inform azioni di 64 byte d etto i-n o d e , che contiene le inform azioni sul proprietario e sui permessi del file, sulla locazione dei d ati e altre cose simili. Gli i-node dei file sono conservati in sequenza all’inizio del disco o all’inizio di u n gruppo di cilindri, se il disco è così suddiviso. U N IX è in grado di calcolare l’indirizzo su disco di un i-node a par tire dal suo nu m ero nella sequenza. G li elem enti delle director)' consistono in d u e parti: un nom e di file e un num ero di i-node. Q u a n d o un program m a esegue o p en ( ' f oo . c " , 0 )
il sistema cerca il file di nom e “foo.c” nella directory di lavoro al fine di localizzarne il n u m ero di i-node. U na volta trovatone il num ero p u ò accedere all’i-node e a tu tte le inform a zioni sul file. Se viene specificato u n percorso più lungo, i passi precedenti vengono ripetuti finche non sia stato attraversato l’intero percorso. Per esem pio, per localizzare il num ero di i-node d i lusrlastidata, il sistem a cerca prim a l’elem ento usr nella directory radice. Q u a n d o h a tro vato fi-n o d e di usr può leggere il file co rrispondente (ripetiam o: in U N IX le directory sono file) e cercare al suo in tern o l’elem ento ast, arrivando a localizzare il num ero di i-node del file lusrlast. La lettura di /usr/ast consente al sistem a di trovare l’elem ento data e quindi il num ero di i-node di Iusr!astidata. G razie a quel num ero è possibile trovare tu tto q u an to ri guarda il file suddetto.
472
Capitolo fa
Livello macchina del sistema operativo
Il form ato, i co n ten u ti e l’organizzazione degli i-node variano leggerm ente da sistema a sistem a (specie se il sistema svolge attività di rete), m a alm eno le voci seguenti si trovano in tu tte le versioni d i i-node: 1.
il tipo del file, i 9 b it di protezione RW X e qualche altro bit
2.
il num ero di collegam enti al file (num ero
di elem enti di directory che lo punta)
3. l’identità del proprietario 4. il gru p p o del proprietario 5. la lunghezza del file in byte 6. tredici indirizzi su disco 7.
la data dell’ultim o accesso in lettura
8. la data dell’ultim o accesso in scrittura 9.
la data dell’ultim a m odifica all’i-node.
R iguardo il tipo, un file può essere un file o rdinario, una directory o un o dei due tipi di file speciali che si usano per distinguere i dispositivi di I/O stru ttu rati a blocchi d a quelli n o n stru ttu rati. A bbiam o già analizzato il num ero di collegam enti e l'identificativo del proprie tario. La lunghezza del file è data da u n intero di 32‘bit che specifica l’ultim a locazione del file con u n c o n te n u to inform ativo: è del tu tto lecito creare un file, fare u n a l s e e k alla po sizione 1.000.000 e scrivere un byte, nel qual caso la lunghezza del file è di 1.000.001 byte. Va d etto però che l’eventuale m em orizzazione del file non richiederebbe alcuno spazio per i byte “m an can ti”. I prim i 10 indirizzi del disco p u n ta n o a blocchi di d ati. Se la d im ensione di un blocco è 1024 byte, in q uesto m o d o è possibile gestire file fino alla dim ensione di 10.240 byte. L’indirizzo 1 1 p u n ta a u n blocco del disco che si chiam a blocco indiretto, co n te n ente 2 5 6 indirizzi del disco. In questo m o d o è possibile gestire file fino alla d im ensione di 10.240 + 2 5 6 x 1024 = 2 7 2 .3 8 4 byte. N el caso dei file ancora p iù grandi si usa l’in dirizzo 12 che p u n ta a u n blocco c o n te n e n te 2 56 blocchi in d iretti, riuscendo a gestire così file di 272.384 + 2 56 x 256 x 1024 = 6 7 .3 8 1 .2 4 8 byte. Se anche questo schem a con blocco indiretto doppio non è sufficiente per co n ten ere il file, si usa l’indirizzo 13 per p u n ta re a u n blocco indiretto triplo c o n te n e n te 2 5 6 indirizzi di blocchi ind iretti d o ppi. U sando co n g iu n ta m e n te gli indirizzi dei blocchi d iretti, in d iretti, in diretti d o p p i e tripli si pos sono indirizzare 16.8 4 3 .0 1 8 blocchi, raggiungendo il lim ite teorico di d im en sio n e p er i file d i 1 7 .2 4 7 .2 5 0 .4 3 2 byte. In realtà, essendo i p u n ta to ri di file di 32 b it, il lim ite pra tico è di 4 .2 9 4 .9 6 7 .2 9 5 byte. I blocchi liberi del disco sono m a n te n u ti in una lista co n caten ata da cui vengono rim ossi u n o alla volta q u a n d o necessari. Di conseguenza, i bloc chi di ciascun file si trovano sparpagliati alla rin fusa per tu tto il disco. Al fine di rendere le operazioni di I /O più efficienti, all’ap ertu ra di un file il suo inode viene copiato (per ragioni di com odità) in u na tabella in m em oria principale e lì m an te n u to finché il file n on viene chiuso. In o ltre viene te n u ta in m em o ria anche u n a raccolta dei blocchi referenziati di recente; p oiché i file vengono letti in m o d o sequenziale nella stragrande m aggioranza dei casi, succede spesso che un riferim ento alla locazione di un
6.4
Sistemi operativi di esempio
473
file si trovi a ll'in tern o dello stesso blocco dei riferim en to precedente. M otivato da questa considerazione, il sistem a cerca di leggere an ch e il blocco successivo a quello co rren tem en te in lettu ra p rim a che venga effettivam ente referenziato, in m odo d a accelerare l’esecuzione. T u tti questi m eccanism i d i ottim izzazione sono nascosti all’utente: q u an d o un u te n te ef fettua u n a r e a d , il suo pro g ram m a resta sospeso finché n o n siano disponibili nel buffer i d ati d a luì richiesti. Alla luce di queste nozioni, possiamo ora capire com e funziona l’I/O su file. La o p e n in duce il sistema a cercare le directory nel percorso specificato: se la ricerca ha successo, l’i-node viene caricato nella tabella interna. Le chiam ate r e a d e w r i t e richiedono al sistema il cal colo del num ero di blocco a partire dalla posizione corrente nel file. Gli indirizzi su disco dei prim i 10 blocchi si trovano sem pre in m em oria centrale (nell’i-node); i blocchi di num ero mag giore richiedono la lettura preventiva di uno o più blocchi indiretti. I s e e k si lim ita a spostare il puntatore alia posizione corrente senza effettuare alcun I/O . È ora sem plice com prendere anche l i n k e u n l i n k : l i n k cerca all’in tern o del prim o argom ento il nu m ero dì Ì-node, q u in d i crea u n elem ento di directory nei secondo argom ento, assegnandogli Io stesso num ero di i-node. Infin e increm enta di u n ’u n ità il n u m ero di colle gam enti nell’i-node. u n l i n k rim uove un elem ento da una directory e decrem enta il nu m ero d i collegam enti nell’i-node. Se il num ero arriva a zero, il file viene cancellato e i suoi blocchi resi disponibili tram ite la loro inserzione nella lista dei blocchi liberi.
I/O virtuale di Windows XP X P sup p o rta m olti file system , tra cui i più im p o rta n ti sono N T F S [N T File System) e FAT (File Allocation Table, “tabella di allocazione dei file”). N T F S è stato sviluppato specificam en te per XP; FAT è il vecchio file system di M S -D O S , usato anche da W indow s 9 5 /9 8 (an che se con l’introduzione dei nom i di file lunghi). Poiché FAT è orm ai obsoleto ci lim itiam o allo stu d io del prim o. I nom i d i file in N T F S possono essere lunghi un massim o di 255 caratteri e utilizzano U nicode per consentire agli utenti di quei paesi la cui lingua non deriva dal latino (per esem pio i giapponesi, gli indiani o gli israeliani), di attribuire ai file nom i nella loro lingua m a dre. Per la precisione, X P usa U nicode estesam ente al proprio interno; fin da W indow s 2000 il sistema viene d istribuito in un unico codice bin ario e le differenze linguistiche, che si m a nifestano nei m enu, nei messaggi di errore, e così via, sono gestite tram ite file di configura zione differenziati per nazione. N T F S è ’un sistema com pletam ente case sensitive (cioè, per esem pio, pippo è diverso da PIPPO) m a sfortu n atam ente le API di W in 3 2 lo sono solo par zialm ente per i nom i dì file e n on lo sono affatto per i nom i di directory, così questa pro p rietà viene a m ancare ai p rogram m i che usano W in32. C o m e p er U N IX , un file X P è sem plicem ente una sequenza lineare di byte, che però può raggiungere i - 1 byte. Pertanto i p u n tato ri di file, che esistono com e in U N IX , sono di 64 bit invece che di 32 per gestire la massima lunghezza possibile. Le chiam ate di funzioni A PI di W in 3 2 per la m anipolazione dei file e delle directory sono abbastanza si mili alla loro co n tro p arte U N IX , a parte il fatto che h an n o spesso più param etri e che si av valgono di un m odello di sicurezza diverso. L’apertura di un file restituisce un handle, poi usato per la lettura o la scritrura del file. A differenza di U N IX , però, gli handle non sono piccoli interi, e lo standard in p u t, lo standard o u tp u t e lo standard error non sono predefi niti com e 0, 1 e 2, bensì devono essere acquisiti esplicitam ente (tranne che in m odalità con
474
Capitolo 6
Livello macchina del sistema operativo
sole, in cui sono già aperti). Le funzioni principali delle A PI di W in 3 2 per la gestione dei file sono elencate nella Figura 6.38. V eniam o ora alle chiam ate d i sistema. C r « a t e F ile genera un file nuovo e restituisce il suo handle; si usa anche per aprire i file già esistenti, dato che no n esiste u n a funzione open specifica. Nella figura non abbiam o incluso i param etri delle funzioni API di XP perché sono m olto volum inosi. Solo per fare un esem pio, i param etri della C r e a t e F il e sono sette: 1. un p u n tato re al nom e del file da creare o da aprire
2. dei flag per indicare se il file p u ò essere letto, scritto, o entram be le cose 3. dei flag che specificano se il file può essere a p en o contem poraneam ente da più processi 4. u n p u n tato re al descrittore di sicurezza che stabilisce chi p u ò accedere al file 5. dei flag che indicano il co m p o rtam en to da assum ere se il file esiste/non esiste 6. dei flag che riguardano gli attrib u ti del file, com e il suo essere un file di archivio, com presso, e così via 7. l’h andle di un file da cui clonare gli a ttrib u ti per l’attribuzione al nuovo file. Le sei funzioni API successive nella Figura 6.38 sono abbastanza simili alle corrispondenti chiam ate di U N IX . Le ultim e due co n sen to n o di porre o di togliere il lock su una regione di un file p er garantirne l’accesso esclusivo da p arte di un processo (ovvero la m u tu a esclu sione tra processi). A partire da queste funzioni API è possibile scrivere una procedura per la copia di un file analoga a quella della Figura 6.35. La Figura 6 .39 m ostra una siffatta procedura (senza controllo degli errori), concepita sul m odello della versione U N IX . N ella pratica no n c’è al cun bisogno di usare il codice della figura, perché esiste la funzione API C o p y F ile che chiama una procedura di libreria il cui codice è sim ile a quello indicato nell’esempio. X P su p p o rta un file system gerarchico sim ile a quello di U N IX , anche se il caranere separatore dei com ponenti di un nom e è \ invece di /, un retaggio di M S -D O S . Esiste il Funzione API
UNIX
CreateFile
open
Crea un file o apre un file esistente; restituisce l'handle
DeleteFile
unlink
Cancella un file esistente
CloseHandle
dose
Chiude un file
ReadFile
read
Legge dati da un file
WriteFile
write
Scrive dati in un file
SetFilePointer
Iseek
Assegna al puntatore del file una determinata posizione
GetFileAttributes
stai
Restituisce le informazioni sul file
LockFile
fcntl
Mette in lock una regione del file per garantire la mutua esclusione
UnlockFile
fcntl
Toglie il lock da una regione di un file precedentemente riservata
Figura 6.38
Significato
Funzioni principali delle API di W in32 per l'I/O di file. La seconda colonna riporta la funzione di U N IX più simile.
6.4
Sistemi operativi di esempio
475
/* Apertura dei file per input e output. V inhandle = CrealeFileCdata", G EN ER IC .R EA D , 0. N ULL, O PEN _EXISTIN G, 0, N ULL); outhandle - CreateFileTnew f", CENERIC_W R1TE, 0. N ULL. CREATE.ALW AYS, FILE_ATTRIBUTE_N O RM AL, N ULL); f Copia del file. */ do) s = ReadFileOnhandle, buffer. BU F_SIZE, &counl, NULL); if (s > 0 && count > 0) WriteFilelouthandle. buffer, count, &ocnt, N ULL); I while (s > 0 && count > 0); /* Chiusura dei file. */ CloseHandletinhandle); CìoseHandlefouthandle);
Figura 6.39
Frammento di programma per la copia di un file con le funzioni API di W indows XP. Usiamo il C perché mette bene in evidenza le chiamate di sistema di livello più basso (a differenza di Java, che le nasconde).
concetto di director)' di lavoro e i nom i di percorso possono essere assoluti o relativi. C ’è com unque una differenza sostanziale rispetto a U N IX : U N IX perm ette di “m ontare” (mount) insiem e i file system di dischi o di m acchine diversi in u n unico albero dei nom i, nascon d en d o così la stru ttu ra dei dischi al software. XP 4.0 non presenta questa proprietà, perciò i nom i di file assoluti devono com inciare con la lettera del drive (l’unità) che indica il disco logico in cui si trova il file, per esem pio in C:\windows\systemXfoo.dlL A partire da W indow s 2000 è stata in tro d o tta la possibilità di m ontare un file system nello stile di U N IX . La Figura 6 .4 0 elenca le funzioni API più im p o rtan ti per la gestione delle directory in sieme alle corrispettive funzioni U N IX . I loro n o m i sono sufficientem ente autoesplicativi. XP è dotato di un m eccanism o di sicurezza m olto più elaborato di quello di molti si stemi U N IX Benché esistano centinaia di funzioni API relative alla sicurezza, cerchiamo di fornire una breve descrizione dell’idea generale. Q u ando un utente effettua il login, il sistema operativo affida al suo processo iniziale un gettone di accesso {accesi token) che contiene il SID (Security ID) dell’utente, u n a lista dei gruppi d i sicurezza cui egli appartiene, i privilegi speciali di cui dispone e poche altre inform azioni. L’idea del gettone di accesso è di concentrare tutte le inform azioni di sicurezza in un solo posto facile da reperire. Tutti i processi creati a partire da quello iniziale ereditano lo stesso gettóne di accesso. U no dei param etri d ’ingresso che può essere passato all atto della creazione di un og getto è il suo descrittore di sicurezza, co n ten en te una lista di controllo degli accessi, ACL {Access Control List). O gni elem ento della lista consente oppure vieta un certo insiem e di operazioni sull’oggetto da parte di u n certo SID o di un determ inato gruppo. Per esem pio u n file potrebbe avere un descrittore di sicurezza secondo cui M arta non ha accesso al file, M arco p u ò leggerlo soltanto, L inda p u ò leggerlo o scrivervi e tu tti i m em bri del gruppo XYZ possono soltanto leggere la lunghezza del file, n ien t’altro. Q u a n d o un processo cerca di eseguire un’operazione su un oggetto tram ite l’handle re stituitogli dall’apertura dell’oggetto stesso, il gestore della sicurezza recupera il gettone di ac cesso del processo e scorre gli elem enti della ACL uno per volta. N on appena incontra un elem ento corrispondente al SID o a gru p p o del chiam ante, il tipo di accesso ivi consentito è considerato com e definitivo. Per questo m otivo si usa elencare nella A CL prim a gli eie-
476
Capitolo 6
Livello macchina del sistema operativo
Funzione API
UNIX
Significato
CreateDirectory
mkdir
Crea una directory nuova
RemoveDirectory
rmdir
Elimina una directory vuota
FindFirstFile
opendir
Prepara alla lettura degli elementi di una directory
FindNextFile
readdir
MoveFile SetCurrentDirectory
Figura 6.40
Legge l’elemento di directory successivo Sposta un file da una directory in un'altra
chdir
Cambia la directory di lavoro corrente
Principali funzioni API di W in32 per la gestione di directory. La seconda colonna indica la funzione di U N IX più simile, se ne esiste una.
m enti che negano l’accesso, poi quelli che Io consentono, così che un u ten te cui è stato ne gato espressam ente l’accesso non riesca a rientrare dalla porta di servizio perché appartenente a u n gruppo autorizzato. Il descrittore di sicurezza contiene anche inform azioni per la cer tificazione degli accessi all’oggetto. D iam o ora u no sguardo all’im plem entazione di file e directory XP. O gni disco è sud diviso in volum i statici in d ip en d en ti che h an n o la stessa finizione delle partizioni U N IX . O gn i volum e contiene una b it m ap, file e directory, più altre stru ttu re dati per la gestione delle inform azioni. C iascun volum e è organizzato tò m e una sequenza lineare di cluster (“raggruppam enti”) di dim ensione prefissata (com presa tra i 512 byte e i 64 KB) che di pende dalla dim ensione del volum e stesso. I riferim enti a un eluster avvengono tram ite il suo offset d all’inizio del volum e, per il quale si usa un num ero di 64 bit. La stru ttu ra d ati principale di u n volum e è la M FT (Master File Table, “tabella princi pale di allocazione dei file”) che contiene un elem ento per ogni file o directory del volum e, analogo all’i-node di U N IX . La stessa M F T è un file e perciò p u ò essere posizionata ovun que nel volum e, risolvendo così il problem a di U N IX relativo alla presenza di blocchi del disco corrotti (rovinati) all’in tern o degli i-node. La M F T (illustrata nella Figura 6 .4 1) com incia con un’intestazione contenente le infor m azioni relative al volum e, com e il p u n ta to re alla directory di radice, il file di boot, il file dei blocchi corro tti, l’am m inistrazione della lista delle locazioni libere, e così via. Di seguito si trovano gli elem enti relativi ai file o alle directory che occupano 1 KB ciascuno, tranne q u an d o la dim ensione del cluster è di 2 KB o più. O g n i elem ento contiene i m etadari (infor m azioni am m inistrative) che riguardano il file o la directory. Sono consentiti diversi form ati, un o dei quali è presentato nella Figura 6.41. Il cam po delle inform azioni standard contiene alcuni dati com e le etichette tem porali (lime stamp) necessarie al co m p u to del num ero di collegam enti, i b it di sola lettu ra o di ar chivio, e così via. Q uesto cam po ha lunghezza fissa ed è sem pre presente tra i m etadati. Il cam po del n o m e del file contiene un m assim o di 255 caratteri U nicode. A ffinché i file sia no ancora accessibili dai program m i a 16 bit, viene fornito anche un cam po per il nom e M S -D O S costitu ito da o tto caratteri alfanum erici eventualm ente seguiti da un p u n to e da no n più di tre caratteri alfanum erici per l’estensione. Se il vero nom e del file rispetta già lo stand ard M S -D O S 8+3, n on viene fornito u n secondo nom e M S -D O S . Il cam po successivo contiene le inform azioni di sicurezza. Fino alla versione di XP 4.0 questo cam po conteneva il descrittore di file vero e proprio. A partire d a W indow s 2000 si
6.4
Informazioni
standard
Nome del file
Nome MS-DOS
Sistemi operativi di esempio
Sicurezza
477
Dati
--------------V-------------Elemento di MFT per un file Intestazione di MFT
MFT
Figura 6.41
Tabella MFT di W indows XP.
è deciso di accentrare tu tte le inform azioni di sicurezza in un file unico e lasciare nel cam po sicurezza u n p u n tato re a u n a locazione del file. Il cam po dei d ati nell’elem ento di M F T contiene il file vero e proprio se questo è ab bastanza piccolo, risparm iando così un accesso a disco. Q u esto stratagem m a si chiam a file immediato (M ullender eT an en b au m , 1984). Per q u anto riguarda i file più grandi, il cam po dati con tien e i p u n tato ri ai cluster co n ten en ti i d ati oppure, più com unem ente, a intere se quenze di cluster consecutivi; così con un solo identificativo di cluster e un param etro di lunghezza è possibile specificare una q u an tità di dati arbitraria. Se un elem ento di M F T do vesse rivelarsi insufficiente a contenere tu tte le inform azioni richieste da un file è sem pre pos sibile accorparlo a u n o o p iù elem enti successivi della tabella. La dim ensione m assima dei file è di 2M byte. Per capire q u an to grande sia 2M byte, si im m agini u n a sequenza di zeri e di u no che o ccupino ciascuno u n m illim etro: una sequenza di 26 bit siffatti (2M byte) sarebbe lunga 15 anni luce, abbastanza per oltrepassare i confini del sistem a solare, raggiungere A lpha C en tau ri e tornare indietro. Il file system N T F S presenta m olte altre p roprietà interessanti, tra cui la com pressione dei dati e la tolleranza agli errori o tte n u ta per mezzo delle transazioni atom iche. Per infor m azioni ulteriori riguardo N T F S si consulti (Russinovich e Solom on 2005).
6.4.4
Esempi di gestione dei processi
U N IX e X P prevedono en tram b i la possibilità di suddividere un com pito (job) tra p iù pro cessi che possono girare in m o d o (pseudo) parallelo e com unicare con lo schem a produttoreconsum atore già illustrato. In questo paragrafo analizziam o la gestione dei processi dei due sistem i. Vedrem o anche che en tram b i su p p o rtan o il parallelism o all’interno di un singolo processo m ediante i thread.
Gestione dei processi in UNIX U n processo U N IX p u ò in ogni istante usare la chiam ata di sistem a f o r k per creare u n sot toprocesso che è una sua esatta replica. Il processo originale è d etto genitore e quello nuovo si chiam a processo figlio. A ppena d o p o la f o r k , i due processi sono identici e condividono
478
Capitolo 6
Livello macchina del sistema operativo
ad d irittu ra gli stessi descrittori di file. Di lì in poi ciascuno prosegue per la propria strada e svolge il proprio com pito indip en d en tem en te dall’altro. Spesse volte il processo figlio m anipola i d escritto ri di file ed esegue una chiam ata di sistema e x e c che rimpiazza il suo p rogram m a e i suoi dati con il program m a e i dati con tenuti in un certo file eseguibile specificato com e param etro della chiam ata e x e c . Per esem pio, q u an d o un u tente im m ette il co m an d o xyz in un term inale, l’interprete a linea di co m an d o (la shell) esegue una f o r k per creare u n processo figlio che svolga il program m a xyz a seguito di una e x e c . I d u e processi girano in parallelo (con o senza e x e c ) a m eno che il genitore voglia at tendere la term inazione del figlio p rim a d i continuare. In questa evenienza, il genitore ese gue una chiam ata di sistem a w a i t o w a i t p i d che causa la sua sospensione fino al term ine dell’esecuzione del figlio. Solo allora il genitore riprende l’esecuzione. I processi possono eseguire q u an te f o r k vogliono, dando vita così a un albero di pro cessi. La Figura 6 .4 2 m ostra il processo A che ha eseguito due f o r k e ha così generato i due figli B e C. A nche B ha eseguito d u e volte una f o r k , m entre C l’ha eseguita una volta sola, per u n totale di sei processi. In U N IX i processi possono com unicare tra loro attraverso una stru ttu ra chiam ata pipe (“co n d u ttu ra”). Una pipe è una specie di buffer in cui un processo può scrivere un flusso di dati disponibili al prelievo da p arte di u n altro processo. I byte sono prelevati da una pipe sem pre nell’ordine in cui sono stati inseriti, n on è mai consentito l’accesso diretto a una certa posizione. Le pipe n on preservano le estrem ità dei messaggi, perciò se un processo effettua q u attro scritture da 128 byte e u n altro processo effettua una lettura da 512 byte, il secondo riceverà tu tti i dati in una volta sola, senza alcuna traccia del fatto che sono stati scritti in più operazioni. System V e Solaris m etto n o a disposizione u n ’altra m odalità di com unicazione tra pro cessi che usa le code di messaggi (message queuè). U n processo può usare la chiam ata m s g g e t per creare una nuova coda di messaggi o aprirne una esistente, può invocare m s g s n d o m s g r e c v per spedire o ricevere un messaggio su una coda. 1 messaggi che passano in una coda differiscono p er m olti versi da quelli che attraversano le pipe. In n a n zitu tto vengono preservati gli estrem i dei messaggi, m entre una pipe è solo un flusso di dati. Poi i messaggi possono avere priorità, così quelli urgenti possono sopravanzare quelli m eno im portanti. Infine, i messaggi h an n o un tipo, che p uò essere specificato tram ite la m s g r e c v . U n altro m eccanism o per la com unicazione tra processi è la condivisionc di una o più regioni dei loro spazi degli indirizzi. U N IX gestisce la condivisione di m em oria attraverso la
Processo o rig in ale
Figlio di A
Nipote di A
Figura 6.42
Albero di processi in UN IX.
6.4
Sistemi operativi dì esempio
479
corrispondenza sim ultanea tra alcune pagine e gli spazi degli indirizzi di tu tti i processi. L’effetto di questa soluzione è che una scrittura operata in una regione condivisa e im m e diatam ente visibile agli altri processi. Q u esto m eccanism o garantisce una com unicazione con larghezza di banda m o lto elevata. Le chiam ate di sistema coinvolte nella condivisione di m e m oria si chiam ano s h m a t e sh m o p . U n’altra caratteristica di System V e di Solaris è il supporto dei semafori, il cui funzio nam ento ricalca in buona sostanza q u an to visto nell’esem pio del produttore-consum atore. T u tti i sistem i U N IX forniscono la gestione di thread m u ltipli all’in tern o di un sin golo processo. 1 th r e a d sono processi leggeri che con d iv id o n o lo stesso spazio degli in d i rizzi e tu tto ciò che gli è associato: i d escritto ri d i file, le variabili d ’am biente e i tim er esterni. T uttavia, ogni thread ha il p ro p rio p rogram counter, i propri registri e il proprio stack. Q u a n d o u n thread si blocca (per esem pio p erché si trova in attesa del co m p leta m ento di un’operazione di I/O o di u n altro evento) l’esecuzione può passare agii altri thread dello stesso processo. D ue thread p ro d u tto re-co n su m ato re che operan o all’in tern o dello stesso processo sono sim ili, m a n o n id entici, a d u e processi c o stitu iti ciascuno d a un solo th read e che co n d iv id o n o u n segm ento di m em o ria com e buffer. Le differenze stan n o nel fatto che in q u est’u ltim o caso ogni processo ha i p ropri descrittori di file, variabili d ’am biente, e così via, m en tre nel p rim o caso questi enti sono condivisi. A bbiam o in co n tra to i th read Java nell’esem pio d el p ro d u ttto re -c o n su m a to re. Spesso il sistem a esecutivo di Java si avvale dei thread del sistem a o perativo p e r i propri thread, m a p u ò anche scegliere di n o n farlo. I server w eb so n o u n b u o n esem pio per illustrare l’utilità dei thread. Q u esti server pos sono contenere una cache della pagine web usate più com unem ente, così se arriva la richie sta di u n a pagina presente nella cache, q uesta p u ò essere inviata im m ediatam ente. In caso contrario, la pagina deve essere caricata dal disco e ciò com porta tem pi maggiori (20 m s circa), d u ran te i quali il processo resta bloccato e non può servire nuove richieste in ingresso, an che se si trattasse d i richieste di pagine nella cache. L a soluzione consiste nel generare più th read all’in terno del processo server, dove tu tti condivid o n o la stessa cache delle pagine web. Q u a n d o si blocca un thread, gli altri possono continu are a gestire le richieste in ingresso. In alternativa, sarebbe possìbile m oltiplicare il n u m ero dei processi invece di quello dei thread, m a ciò richiederebbe probabilm ente una replica della cache per ogni processo, con conseguente spreco di m em oria. Lo standard di U N IX per i thread* si chiam a p th re a d ed è definito dal docum ento P 10 0 3 .1 C . Sono previste chiam ate per la gestione e per la sincronizzazione di thread, ma non è specificato se questi devono risiedere nello spazio del kernel o in quello dell’utente. Le chiam ate p iù com uni per la gestione dei thread sono elencate nella Figura 6.43. La prim a chiam ata, p t h r e a d _ c r e a t e , crea un nuovo thread, e dopo il suo com ple tam en to lo spazio degli indirizzi del chiam ante contiene un thread in più in esecuzione. Q u a n d o u n thread ha com pletato il proprio com pito chiam a p t h r e a d _ e x i t , che ne p ro voca la term inazione. U n th read p uò attendere la term inazione di u n altro th read tram ite la chiam ata p t h r e a d _ j o i n : se il thread che si vuole attendere è già term inato la chiam ata si interrom pe im m ediatam ente, altrim enti il chiam ante resta bloccato in attesa. I thread si sincronizzano grazie a particolari lock chiam ati m u te x e usati generalm ente per sorvegliare l’uso di buffer condivisi da d u e thread. Per avere la certezza di essere l’unico ad accedere a u n a risorsa condivisa, un thread deve assicurarsi il m utex prim a di m odificare
480
Capitolo 6
Livello macchina del sistema operativo
Chiamata di thread
Significato
pthread_create
Crea un nuovo thread nello spazio degli indirizzi del chiamante
pthread_exit
Provoca la terminazione del thread chiamante
pthread.join
Aspetta la terminazione di un thread
pthread_mutex_init
Crea un nuovo mutex
pthread_mutex_destroy
Distrugge un mutex
pthread_mutex_lock
Riserva un mutex
pthread_mutex_u n lock
Rilascia un mutex
pthread_cond_init
Crea una variabile di condizione
pthread_cond_destroy
Distrugge una variabile di condizione
pthread_cond_wait
Attende su una variabile di condizione
pthread_cond_signal
Libera un thread in attesa su di una variabile di condizione
Figura 6.43
Principali chiamate POSIX per i thread.
la risorsa e deve rim uoverlo n o n appena ha concluso il proprio accesso. Se tu tti i thread se guissero questo protocollo, evitare le corse critiche sarebbe possibile. I m utex som igliano a sem afori binari, cioè a sem afori che possono assum ere solo i valori 0 e 1. Il nom e “m utex” deriva dal fatto che sono usati p er assicurare la m utua esclusione (mutuai exclusion) da certe risorse. Le chiam ate p t h r e a d _ m u t e x _ i n i t e p t h r e a d _ m u t e x _ d e s t r o y servono ri spettiv am en te a creare e a distruggere u n m utex. U n m utex p u ò trovarsi in un o di due sta ti: riserv ato o n o n riservato. Per riservare u n m utex no n riserv ato , un th re a d usa p t h r e a d _ m u t e x _ l o c k che ha effetto im m ediato; viceversa, se il m utex è già riservato la ch iam ata diventa bloccante. S petta al th read che aveva riservato il m u tex precedentem en te chiam are p t h r e a d _ m u t e x _ u n l o c k per rilasciarlo no n ap p en a abbia co m pletato le p ro p rie operazioni sulla risorsa condivisa. I m utex servono a salvaguardare gli accessi a breve term ine alle variabili condivise, m entre per la sincronizzazione a lungo term ine (com e neH’artesa per un’unità a nastro) si usano le variabili di condizione. La loro creazione e distruzione avviene tram ite le chia m ate p t h r e a d _ c o n d _ i n i t e p t h r e a d _ c o n d _ d e s t r o y . L’uso di una variabile di condizione coinvolge due thread, u n o in attesa sulla variabile e un altro che effettua la segnalazione per sopraggiunta disponibilità. Per esempio, se un thread realizza che l’u n ità a nastro che gli serve è occupata, chiam a p t h r e a d _ c o n d _ w a i t su una variabile di condizione associata all’u n ità e precedentem ente concordata tra tu tti i thread. Q u a n d o il thread che ha in uso l’u n ità com pleta la propria attività su di essa (non im porta q u an to tem p o do p o ), chiam a p t h r e a d _ c o n d _ s i g n a l per liberare esattam ente u n thread in attesa su quella variabile di condizione (se ce n è alm eno uno). Se non c’è alcun thread in attesa il segnale va perso; le variabili di condizione non sono contatori com e i semafori. Esistono poche altre operazioni definite sui th read, sui m utex e sulle variabili di condizione che però non tratterem o.
6.4
Sistemi operativi di esempio
481
Gestione dei processi in Windows XP XP supp o rta esistenza, com unicazione e sincronizzazione di più processi. O gni processo contiene alm eno un thread, che a sua volta contiene alm eno u n a fibra (thread leggero). Pro cessi, thread e fibre costituiscono u n insiem e d i strum enti m olto generale per la gestione del parallelism o sia su sistemi uniprocessore (m acchine con C P U singola) sia m ultiprocessore (m acchine con p iù C P U ). I processi sono creati m ediante la funzione A PI C r e a t e P r o c e s s che accetta 10 pa ram etri, ciascuno d o tato di m olte opzioni. Si tratta evidentem ente di un progetto m olto più complesso dello schem a di U N IX , la cui f ork n on h a param etri, m entre e x e c ne ha solo tre: il pu n tato re al nom e del file da eseguire, l’array dei param etri individuati nella linea di co m an d o e le strin g h e d ’am b ien te. C o n b u o n a approssim azione, i 10 p aram etri di C r e a t e P r o c e s s servono a contenere: 1. un p u n tato re al nom e del file eseguibile 2. la stessa linea di co m ando (prim a dell’analisi di parsing) 3. un p u n tato re al descrittore di sicurezza del processo 4. un p u n tato re al descrittore di sicurezza del thread iniziale 5. un b it che d eterm ina se il nuovo processo eredita gli handle del processo creatore 6. vari flag (per esem pio la m odalità d ’errore, la priorità, il debugging, le console) 7. u n p u n tato re alle stringhe d ’am biente 8. u n p u n tato re al nom e della directory d i lavoro del nuovo processo 9. un p u n tato re alla stru ttu ra che descrive la finestra iniziale a scherm o 10. un p u n tato re alla stru ttu ra che serve p er restituire 18 valori ai chiam ante. X P non im p o n e alcun rap p o rto di parentela o gerarchia tra processi: tu tti i processi creati sono uguali. D ’altra parte, poiché u n o dei 18 param etri restituiti al chiam ante è l’handle del nuovo processo (che gli consente u n certo controllo sul processo neonato) risulta definita im plicitam ente una gerarchia in base alla relazione “il processo x possiede l’handle del pro cesso y \ N o n o stan te sia vietato il passaggio d iretto di handle tra processi, c’è co m u n q u e un m odo con cui u n processo p u ò adattare un handle p er passarlo a un altro e così la gerarchia definita im plicitam ente può avere vita breve. O g n i processo di XP all’atto della creazione contiene un solo thread, m a è possibile ag g iu n g e te n e successivam ente di nuovi. La creazione dei thread è più sem plice di quella dei processi; C r ea teT h re a d h a soli 6 param etri invece di 10: descrittore di sicurezza, dim en sione dello stack, indirizzo iniziale, un param etro definito dall’utente, stato iniziale (pronto o bloccato) e ID . La creazione dei thread è svolta dal kernel che è d u n q u e al corrente della loro esistenza (i thread n o n sono im plem entati interam ente nello spazio dell’utente com e avviene in altri sistemi). D u ra n te la p ro p ria attiv ità d i scheduling, il kernel no n solo sceglie quale processo far eseguire, m a anche quale dei suoi th read . C iò significa che il kernel è sem pre infor-
482
Capitolo 6
Livello macchina del sistema operativo
m aro sullo stato (p ro n to o bloccato) di ogni thread. I thread sono oggetti del kernel e in q u a n to tali h a n n o un h an d le e un d escritto re di sicurezza. Poiché è possibile il passaggio di h an d le tra processi, è altresì possibile per u n processo controllare i th read di un altro processo. E questa una caratteristica utile, p er esem pio, alla scrittu ra di debugger. La gestione dell’alternanza tra i thread di X P è abbastanza costosa, perché ogni pas saggio dall’esecuzione di u n thread a u n altro co m p o rta l’ingresso e l’uscita dal kernel. X P m ette a disposizione le fibre p e r fo rn ire u n o pseudoparallclism o leggero; sono sim ili ai thread, m a il loro scheduling viene effettuato nello spazio dell’uten te a opera del program m a che le ha create (o dal suo sistem a ru n tim e). O g n i thread pu ò con ten ere p iù fibre, allo stesso m o d o d i com e u n processo p u ò co n ten ere p iù thread, con la differenza però che q u a n d o u n a fibra si blocca si aggiunge d a sola alla coda delle fibre bloccate e sceglie u n ’al tra fibra dello stesso th read a cui passare l’esecuzione. Il kernel n o n si accorge di questa transizione perché resta in esecuzione, anche se l’esecuzione è passata da una fibra all’al tra. Il kernel si cura solo dei processi e dei th read, non delle fibre. Le fibre si rivelano utili, per esem pio, q u a n d o c’è bisogno di p o rtare su X P un p rogram m a che gestisce da solo i propri thread. I processi possono co m u n icare in u n n u m ero svariato di m odi; attraverso pipe, pipe con no m e, mailslot, socket, ch iam ate di p ro cedura a distanza e file condivisi. Alla crea zione d i u n a pipe si può scegliere tra d u e m o d alità di fu n zionam ento: a byte e a messaggi. Le pipe a byte fu n zio n an o com e quelle di U N IX . Le pipe a messaggi sono abbastanza si m ili, m a preservano le estrem ità dei messaggi: cosi q u a ttro scrittu re di 128 byte ciascuna verran n o ricevute com e q u a ttro messaggi di 128 byte e non com e u n solo messaggio di 51 2 byte, com e accadrebbe con u n a pipe a byte. E sistono anche le pipe con no m e, che m e tto n o a disposizione en tram b e le m o dalità. A differenza delle pipe o rdinarie, le pipe con n o m e possono essere usate anche via rete. U na caratteristica di X P che n o n è presente in U N IX è d ata dalle mailslot, per certi versi sim ili alle pipe, m a n o n del tu tto ; a differenza delle pipe sono infatti m o n odirezio nali. In o ltre possono essere usate via rete, m a n o n garantiscono la ricezione d ell’in form a zione. In fin e co n sen to n o al processo m itte n te di inviare il messaggio in m odo broadcast a m olti d estinatari. Le socket sono com e le p ip e, se n o n che di n o rm a collegano processi che risiedono su m acchine diverse, m a possono essere usate anche per la com unicazione tra processi della stessa m acchina. In genere n o n assicurano vantaggi particolari risp etto alla connessione di d u e m acchine tram ite una p ipe, co n o senza nom e. Le chiam ate di p ro ced u ra a d istanza (remote procedure call ) co n sen to n o al processo A di richiedere al processo B di chiam are p er p ro p rio co n to una terza pro ced u ra nello spa zio degli indirizzi di B, e d i farsi restituire il risultato. E sistono diverse lim itazioni sui p a ram etri; p er esem pio non ha alcun senso passare un p u n ta to re a un altro processo. Infine i processi possono condividere la m em oria attraverso la sovrapposizione di uno stesso file. T u tte le scrittu re effettuate da un processo co m p aio n o anche nello spazio degli indirizzi dell’altro processo. C o n q u esto m eccanism o l’im plem entazione del buffer co n diviso nelPesem pio del p ro d u tto re -c o n su m a to re è m o lto sem plice. C osì com e X P fornisce m olti m eccanism i d i com unicazione tra processi, m ette anche a disposizione u n gran num ero di tecniche di sincronizzazione, tra cui i sem afori, i tnutex, le sezioni critiche e gli eventi. Sono tu tti m eccanism i che operano a livello dei thread, non
6.5
Riepilogo
483
dei processi, perciò se u n thread si blocca su u n sem aforo ciò n o n h a alcun effetto sugli (even tuali) altri thread dello stesso processo, che possono così continuare la propria esecuzione. La funzione API C reateS em ap h ore crea un nuovo semaforo, con la possibilità di as segnargli un certo valore e un valore massimo. 1 semafori sono oggetti del kernel e hanno quindi un handle e u n descrittore di sicurezza. È possibile duplicare l’handle di un semaforo attraverso la chiam ata D u p lic a te H a n d le e passarlo a u n altro processo affinché diversi processi si sin cronizzino sullo stesso semaforo. Sono presenti le chiam ate per le operazioni di up e dow n, anche se hanno nom i un po’ peculiari: R elea seS em a p h o re e W a itF o r S in g le O b je c t ri spettivam ente. Inoltre è possibile passare a W a itF o r S in g le O b je c t un rim eout dopo il quale il thread chiam ante viene liberato in ogni caso, anche se il semaforo resta a 0 (e sebbene l’uso del tim er reintroduca le corse critiche). Anche i mutex sono oggetti del kernel usati per la sincronizzazione, ma sono più sem plici dei semafori perché non sono associati a contatori. Sono fondamentalmente dei lock cui corrispondono le funzioni API W a itF o r S in g le O b je c t (per riservarli) e R e le a seM u te x (per rilasciarli). Al pari degli handle dei semafori, anche gli handle dei mutex possono essere duplicati e passati tra processi di modo che processi diversi accedano agli stessi mutex. Il terzo m eccanism o di sincronizzazione si basa sulle sezioni critiche, simili ai mutex D iversam ente da questi però, le sezioni critiche non sono oggetti del kernel, m a sono locali allo spazio degli indirizzi del thread che le ha generate. Di conseguenza non hanno handle né descrittori di sicurezza e non possono essere passare da un processo all’altro. Vengono riservate e rilasciate per mezzo delle chiamate E n t e r C r i t i c a l S e c t i o n e L e a v e C r it ic a lS e c t io n . Sono funzioni m olto più veloci delle analoghe definite sui m utex, perché vengono svolte in teram ente nello spazio dell’utente. L’ultim a form a di sincronizzazione usa ancora oggetti del kernel, che prendono il nom e di eventi. U n thread può attendere che si verifichi un evento richiam ando W a itF o r S in g le O b je c t, può liberare un thread in attesa su u n evento per mezzo di S e tE v e n t, o addirittu ra invocare P u ls e E v e n t per risvegliare tutti i thread in attesa su quell’evento. Anche gli eventi presentano m olte varianti e consentono di scegliere tra diverse opzioni. E possibile attribuire un nom e agli eventi, ai m utex e ai sem afori e m em orizzarli nel file system , p roprio com e avviene per le pipe con nom e. D ue o più processi possono poi sincronizzarsi tram ite la sem plice apertura dello stesso evento, m utex o sem aforo, senza il bisogno che u n processo crei l’oggetto e ne duplichi l’handle per passarlo a tu tti gli altri.
6.5
Riepilogo
Si può guardare al sistem a operativo com e al garante di alcune funzionalità architetturali n o n presenti nel livello ISA. Prim e fra tu tte ci sono la m em oria virtuale, le istruzioni virtuali di I/O e il sup p o rto del calcolo parallelo. La m em oria virtuale è una funzionalità architetturale che h a lo scopo di fornire ai pro gram m i spazi d ’indirizzi più grandi della m em oria fisica del sistem a, insiem e a un m eccani sm o flessibile e corretto per la protezione e la condivisione della m em oria. Può essere im plem entata con la paginazione pura, co n la segm entazione pura o con una com binazione delle due. Nel prim o caso lo spazio degli indirizzi è suddiviso in pagine virtuali di uguale dim ensione, alcune delle quali sono co n ten u te in blocchi fisici di m em oria. Un accesso a
484
Capitolo 6
Livello macchina del sistema operativo
una pagina in m em oria è tra d o tto dalla M M U nell’indirizzo fisico corretto, altrim enti il te n tativo di accesso causa un errore di pagina. Pentium 4 e U ltraSPARC III dispongono en tram bi d i M M U che gestiscono la m em oria virtuale e la paginazione. L’astrazione di I/O più im p o rtan te presente a questo livello è il file. U n file consiste in una sequenza di byte o di record logici che p uò essere letta o scritta senza alcuna nozione del funzionam ento dei dischi, delle u n ità a nastro o di altri dispositivi di I/O . L’accesso ai file p uò essere sequenziale o diretto (per chiave o per num ero di record). Le directory sono utilizzate per raggruppare file. Q uesti possono essere m em orizzati in settori consecutivi del disco o sparpagliati al suo interno. N el secondo caso, che è il p iù frequente nei dischi nor mali, si fa uso di stru ttu re dati p er la localizzazione dei blocchi di un file. E possibile m an tenere traccia delle locazioni libere del disco tram ite una lista o una bit map. Il calcolo parallelo viene spesso gestito e im plem entato tram ite la sim ulazione di pro cessi m ultipli che condividono a tem po la singola C P U . Le interazioni tra processi, se non controllate o p p o rtu n am en te, possono portare a corse critiche. Per scongiurare questo pro blem a si in tro d u co n o prim itive d i sincronizzazione, di cui un esem pio è dato dai semafori. Grazie ai sem afori è possibile risolvere problem i analoghi a quello del p ro d u ttore-consum a tore in m aniera sem plice ed elegante. XP e U N IX sono due esempi di sistemi operativi m olto sofisticati. Entram bi supportano paginazione, corrispondenza tra file in m em oria e file system gerarchico, ed entram bi inten d o n o i file com e semplici sequenze di byte. Infine tu tti e due i sistemi operativi forniscono la gestione dei processi e dei thread, nonché diverse modalità per la loro sincronizzazione.
Problemi
485
Problemi 1.
Perché un sistema operativo interpreta solo alcune delle istruzioni del livello 3, mentre un mi croprogramma interpreta tutte le istruzioni del livello ISA?
2.
Una macchina ha uno spazio degli indirizzi virtuali di 32 bit indirizzabile al byte. La dimen sione di pagina è di 4 KB. Q uante pagine d ’indirizzi virtuali esistono?
3.
È necessario che le pagine abbiano dimensioni pari a potenze di 2? Sarebbe possibile, in teoria, implementare pagine di 4000 byte? Se sì, si tratterebbe di una soluzione pratica?
4. Una memoria virtuale ha dimensioni di pagina di 1024 parole, otto pagine virtuali e quattro blocchi fìsici di memoria. La tabella delle pagine è la seguente: Pagina virtuale
Blocco di m em oria
0
3
1
1
2
assente dalla m em oria
3
atte n te dalla m em oria
4
2
5
assente dalla m em oria
6
0
7
assente dalla m em oria
a. Elencare tutti gli indirizzi virtuali che causerebbero un errore di pagina. b. Quali sono gli indirizzi fisici corrispondenti a 0, 3728, 1023, 1024, 1025, 7800 e 4096? 5.
Un computer ha 16 pagine d ’indirizzi virtuali e solo quattro blocchi di memoria. La memoria è inizialmente vuota. Se un programma accede alle pagine virtuali secondo l’ordine 0, 7, 2, 7, 5, 8, 9, 2, 4 a. Quali riferimenti causerebbero un errore di pagina se si usa LRU? b. Quali riferimenti causerebbero un errore di pagina se si usa FIFO?
6 . Nel Paragrafo 6.1.4 è stato introdotto un algortimo per l’implementazione della sostituzione delle pagine secondo la strategia FIFO. Se ne progetti una versione più efficiente. Suggerimento: è possibile limitarsi ad aggiornare il contatore della sola pagina appena caricata, lasciando in variato quello delle altre pagine. 7.
Nei sistemi paginati trattati nel capitolo, il gestore degli errori di pagina faceva parte del livello ISA e non era contenuto perciò nello spazio degli indirizzi di alcun programma del livello OSM. In realtà lo stesso gestore degli errori di pagina occupa alcune pagine e potrebbe venire esso stesso rimosso in determinate circostanze (per esempio se si adottasse la politica di sosti tuzione delle pagine FIFO). Che cosa accadrebbe se il gestore degli errori di pagina non si tro vasse in memoria quando capita un errore di pagina? Come si potrebbe risolvere il problema?
486
Capitolo 6
Livello macchina del sistema operativo
8.
Non tutti i computer dispongono di un meccanismo che asserisce automaticamente un bit hardware quando viene effettuata una scrittura in una pagina. Nondimeno è utile tener trac cia delle pagine modificate al fine di evitare la scrittura su disco di tutte le pagine caricate (quando non servono più). Se in ogni pagina esistono alcuni bit hardware per l’abilitazione separata dei permessi in lettura, in scrittura e in esecuzione, come può il sistema operativo usare questi bit per stabilire se una pagina è “pulita” o se è stata modificata?
9.
U na memoria segmentata è a paginazione dei segmenti. Ogni indirizzo virtuale ha 2 bit per il numero di segmento, 2 bit per il numero di pagina e 11 bit per l’offset all’interno della pa gina. La memoria principale contiene 32 KB, suddivisi in pagine di 2 KB. Per ogni segmento sono possibili solo le configurazioni seguenti: in sola lettura, in lettura/esecuzione, in let tura/scrittura o in lettura/scrittura/csecuzione. La tabella delle pagine e le modalità di prote zione sono le seguenti: Segm ento 0
Segm ento 1
Segm ento 2
Segm ento 3
Sola lettura
Lettura/ esecuzione
Lettura/ scrittu ra/esecu zio n e
L ettura/ scrittu ra
Pagina virtuale
Blocco di m em oria
Pagina virtuale
Blocco di m em oria
0 1 2 3
9 3 su disco 12
0 1 2 3
su disco 0 15 8
Tabella d elle pagine non presente in m em oria princtpale
Pagina virtuale
Blocco di m em oria
0 1 2 3
14 1 6 su disco
Per ognuno dei seguenti accessi alla memoria virtuale si indichi l’indirizzo fisico che viene calcolato. Se si verifica un errore di pagina, specificarne il tipo. Accesso 1. fetch di dati 2. fetch di dati 3. fetch di dati 4. memorizzazione di dati 5. memorizzazione di dati 6. memorizzazione di dati 7. salto a 8. fetch di dati 9. fetch di dati 10. salto a
Segmento
Pagina
0 1 3 0 3 3 1 0 2 3
1 I 3 1 1 0 3 2 0 0
Offset nella pagina 1 10 2047 4 2 14 100 50 5 60
10.
Alcuni calcolatori consentono l’I/O direttamente nello spazio dell’utente. Per esempio, un pro gramma potrebbe avviare un trasferimento dal disco verso un buffer di un processo dell’utente. Questa possibilità può causare problemi se la memoria virtuale è implementata con compatta mento? Si argomenti la risposta.
11.
I sistemi operativi che permettono la corrispondenza tra file in memoria richiedono che essa avvenga su multipli di pagine (e che rispetti le estremità delle pagine). Per esempio, se le pa gine sono di 4 KB, un file può essere mappato a partire dall’indirizzo virtuale 4096, ma non dall'indirizzo 5000. Perché?
12.
Quando nel Pentium 4 viene caricato un registro di segmento, il descrittore corrispondente viene rintracciato e caricato all’interno di una porzione invisibile del registro di segmento. Si dia una giustificazione per questa scelta dei progettisti Intel.
Problemi
487
13.
U n programma del Pentium 4 effettua un accesso al segmento locale 10 con offset 8000. Il campo BASE dell’elemento di LDT corrispondente al segmento 10 contiene il numero 10000. Quale elemento della directory delle pagine usa il Pentium 4? Qual è il numero di pagina? Qual è l’offset?
14.
Si confrontino alcuni possibili algoritmi per l’estromissione dei segmenti in una memoria seg mentata, ma non paginata. Si confrontino la frammentazione interna e quella esterna. Che cosa si può fare per ridurle?
15. 16.
17.
18. 19.
I supermercati sono abituati ad affrontare un problema molto simile a quello della sostituzione di pagine nei sistemi con memoria virtuale. 1 loro scaffali hanno una capienza fissa a fronte di un numero di prodotti sempre crescente. Se viene commercializzato un nuovo prodotto rivo luzionario, diciamo un cibo per cani molto proteico, sarà necessario fargli spazio estromettendo alcuni prodotti dall’inventario. Gli algoritmi disponibili sono i soliti LRU e FIFO. Quale sareb be preferibile in questo contesto? La cache e la paginazione sono per molti versi simili. In entrambi i casi ci sono due livelli di memoria (la cache e la memoria principale nel primo caso, la memoria e il disco nel secondo). In questo capitolo abbiamo enunciato alcune argomentazioni a favore delle pagine di disco grandi e altre a favore di quelle piccole. Valgono le stesse argomentazioni per la dimensione delle linee di cache? Perché molti file system richiedono l'apertura preventiva di un file con una chiamata di sistema o p e n prima della lettura? Si confrontino il metodo che usa la bit map e quello che usa la lista delle lacune per la gestione dello spazio libero su di un disco con 800 cilindri, ciascuno costituito di 5 tracce di 32 settori. Quante lacune ci vorrebbero perché la lista relativa ecceda la dimensione della bit map? Si ipo tizzi che l’unità di allocazione sia il settore e che una lacuna richieda un elemento di tabella di 32 bit.
20.
Al fine di prevedere le prestazioni del disco è utile avere un modello dell’allocazione dei dati. Si supponga che il disco sia uno spazio lineare degli indirizzi con svariati settori, costituito da una sequenza di blocchi di dati, quindi da una lacuna, da un'altra sequenza di blocchi di dati, e così via. Se alcune misure empiriche dimostrano che le distribuzioni di probabilità dei dati e delle lacune sono uguali e attribuiscono probabilità 2~* alle sequenze di lunghezza V, qual è il valore atteso delle lacune in un disco? 21 . In un certo calcolatore, un programma può creare tanti file quanti sono necessari, e tutti i suoi file possono crescere dinamicamente durante l’esecuzione, senza dare alcuna indicazione pre ventiva al sistema operativo circa la lorQ dimensione finale. Su un sistema siffatto i file verranno memorizzati in settori consecutivi? Si motivi la risposta. 22.
Le statistiche hanno dimostrato che più della metà dei file ha dimensioni di pochi KB e che la stragrande maggioranza dei file è al di sotto di un certo numero di KB (attorno agli 8 KB). D ’altro canto, il 10% dei file più voluminosi è responsabile del 95% delfiniera occupazione di spazio su disco. A partire da questi dati, che conclusione si può trarre circa la dimensione dei blocchi del disco?
23 .
Si consideri una possibile implementazione delle istruzioni sui semafori da parte di un sistema operativo: quando la CPU sta per effettuare una up o down su un semaforo (una variabile in tera in memoria), il sistema imposta o maschera i bit di priorità della CPU in modo tale da di sabilitare tutti gli interrupt. Quindi effettua il fetch del semaforo, lo modifica e salta in base al suo valore. Solo a questo punto riabilita gli interrupt. Il metodo funziona se: a. c'è una sola CPU che effettua la commutazione tra processi ogni 100 ms b. due CPU condividono una memoria comune in cui si trova il semaforo.
488
Capitolo 6
Livello macchina del sistema operativo
24.
I produttori del Sistema Operativo indistruttibile hanno ricevuto delle lamentele da parte di clienti a proposito ddl'ultim a distribuzione del sistema, in cui sono state introdotte le ope razioni sui semafori. Secondo i clienti è immorale che un processo si blocchi (lo definiscono “poltrire”). Dato che l’azienda crede nel motto secondo cui il cliente ha sempre ragione, si è pensato di introdurre una terza operazione a supporto di up e down: l'operazione p e e k (“sbir ciare”), che si limita a esaminare il valore di un semaforo senza modificarlo e senza sospen dere l’esecuzione. In tal modo, se un programma crede sia immorale fermare la propria ese cuzione, può cominciare con l’ispezionare il semaforo e stabilire se è sicuro effettuare una d o w n . Questa soluzione funziona se il semaforo è usato da tre o più processi? E se è usato da due processi?
25.
Redigere una tabella che indichi, in funzione dei tempi sorto indicati (da 0 a 1000 ms), quale dei processi PI, P2 e P3 sia in esecuzione e quale sia bloccato. Tutti e tre i processi effettuano istruzioni up e down sullo stesso semaforo. Quando due processi sono bloccati eviene eseguita una u p , viene risvegliato il processo con nominativo più basso, ovvero PI ha precedenza su P2 e P3. e cosi via. All’inizio tutti e tre i processi sono in esecuzione e il semaforo vale 1. Al tempo Al tempo Al tempo Ai tempo Al tempo Al tempo Al tempo Al tempo Al tempo
t - 100 t = 200 / = 300 ; = 400 t = 500 i = 600 t = 700 t = 800 t = 900
PI effettua una down Pi effettuauna down P2effettua una up P3 effettua una down Pi effettua una down P2 effettua una up P2 effettua una down Pi effettua una up Pi effettua una u p
26.
Nei sistemi di prenotazioni aeree è necessario assicurare che durante l’accesso a un file da parte di un processo, nessun altro possa accedervi. In caso contrario due processi diversi, creati per conto di due compagnie aeree diverse, potrebbero prenotare inavvertitamente lo stesso posto dello stesso volo. Si progetti un metodo di sincronizzazione che usi i semafori per garantire l’accesso esclusivo dei processi ai file (ipotizzando che i processi obbediscano alle regole pro poste).
27.
Gli architetti degli elaboratori spesso forniscono un’istruzione t s l ( Test and Set Lock, “esa mina e riserva”) per rendere possibile l’implementazione dei semafori sui computer con più CPU che condividono la stessa memoria. T S L s esamina la locazione X: se contiene il va lore 0, viene posta a 1 aH’mterno di un solo, indivisibile ciclo di memoria, e l'istruzione suc cessiva viene saltata. Se invece non vale 0, la t s l si comporta come una n o p . Grazie a T S L è possibile scrivere procedure lock e unlock con le seguenti proprietà: lock(x) verifica se x è ri servata, in caso contrario la riserva e restituisce il controllo. Se x è riservata invece aspetta fin ché non venga rilasciata, dopo di che la riserva e restituisce il controllo, unlock libera una va riabile riservata. Se tutti i processi riservano la tabella dei semafori prima di usarla, solo un processo per volta può manipolare le variabili e i puntatori, evitando così le corse critiche. Si scrivano le procedure lock e unlock in linguaggio assemblaci™ (dopo aver fatto le ipotesi ri tenute ragionevoli).
28.
Si mostrino i valori di in e out p e r un buffer circolare lungo 65 parole dopo ciascuna delle se guenti operazioni. Entrambi partono da 0. a. Inserimento di 22 parole. b. Estrazione di 9 parole. c. Inserimento di 40 parole.
Problemi
489
d. Estrazione di 17 parole. e. Inserimento di 12 parole. f. Estrazione di 45 parole. g. Inserimento di 8 parole. h. Estrazione di 11 parole. 29.
Se una versione di UNIX usa blocchi del disco di 2 KB e memorizza in ogni blocco indiretto (singolo, doppio o triplo) 512 indirizzi del disco, qual è la dimensione massima di file? (si con siderino puntatori a file di 64 bit).
30.
Si supponga che la chiamata di sistema di UNIX unlink( V u s r / a s t / b i n / g i o c o 3 ‘)
sia eseguita nel contesto della Figura 6.36. Si descrivano con cura i cambiamenti risultanti nel directory system. 31. Si immagini di dover implementare UNIX su di un microcomputcr con pochissima memoria. Se, nonostante tutti gli sforzi adoperati, il sistema risulta ancora troppo grande, si rende ne cessario il sacrificio di una chiamata di sistema. La scelta ricade su p i p e , usata per la creazione delle pipe che permettono la comunicazione di flussi di byte tra processi. È ancora possibile im plementare la redirezione di I/O in qualche modo? E le pipeline? Si analizzino il problema e le sue possibili soluzioni. 32. I membri della commissione per l'Uguaglianza dei Descrittori di File stanno organizzando una protesta contro UNIX perché le sue chiamate che restituiscono descrittori di file, restituiscono sempre il numero più piccolo non ancora in uso. Di conseguenza i descrittori di file corrispon denti ai numeri grandi non vengono quasi mai usati. La loro proposta è di far si che venga resti tuito il numero più piccolo non ancora usato dal programma, invece che quello più piccolo at tualmente inutilizzato. Sostengono che si tratta di una richiesta banale da implementare, che non comporterà la modifica dei programmi esistenti e che renderà il sistema più equo. Che cosa ne pensate? 33.
In XP è possibile generare una lista di controllo degli accessi affinché Roberta non abbia alcun accesso a un certo file e tutti gli altri utenti ne abbiano pieno accesso. Quale può essere l’implementazione di una lista siffatta?
34.
Si descrivano due modi diversi di programmare il problema del produttore-consumatore usando i buffer condivisi e i semafori di XP. Si rifletta in parricolar modo sull’implementazione del buffer condiviso nelle due soluzioni proposte.,
35.
Capita frequentemente di usare la simulazione per valutare il comportamento degli algoritmi di sostituzione delle pagine. A tal fine, si scriva un simulatore per una memoria virtuale pa ginata, con 64 pagine di 1 KB. Il simulatore dovrebbe mantenere in memoria una tabella con 64 elementi, uno per pagina, per indicare il numero della pagina fisica corrispondente a ogni pagina virtuale. Il simulatore dovrebbe leggere da un file gli indirizzi virtuali scritti in deci male, uno per riga. Se la pagina corrispondente è in memoria, è sufficiente annotare un suc cesso di pagina (un page hit). Se non è in memoria, il simulatore chiama una procedura per la scelta della pagina da estromettere dalla memoria (cioè per la scelta dell’elemento della ta bella da sovrascrivere) e registra un fallimento di pagina (un page miss). Nella realtà non av viene alcuno spostamento di pagina, ma solo la sua simulazione. Si generi un file d'indirizzi casuali e si valutino le prestazioni di LRU e di FIFO. Q uindi si generi un file d’indirizzi in cui una frazione costante x degli indirizzi sia ottenuta sommando quattro byte agli indirizzi appena precedenti (per simulare il principio di località). Si eseguano dei test per valori di versi di x e si riferiscano i risultati ottenuti.
490
Capitolo 6
Livello macchina del sistema operativo
36.
Il programma dellaFigura 6.25 Ha una corsa critica fatale perché due thread accedono alle stesse variabili condivise in modo non controllato, senza usare semafori o altre tecniche di mutua esclu sione. Si esegua il programma e si osservi quanto tempo passa prima del suo bloccaggio. Se non si osserva alcun bloccaggio, si incrementino le dimensioni della finestra di vulnerabilità inse rendo qualche istruzione tra la modifica di m . i n e m . o u t e la loro valutazione. Q uante istru zioni bisogna aggiungere perché l’esecuzione si fermi, per esempio, una volta all'ora?
37.
Si scriva un programma per UNIX o per XP che prende in input il nome di una directory e che stampa la lista dei file in essa contenuti, uno per riga. Il nome dì ogni file va fatto seguire dalla stampa della sua dimensione. Si stampino i nomi dei file nell’ordine in cui si trovano nella director)'. Gli elementi inutilizzati di una directory devono essere stampati con la dicitura (inutilizzato).
Capitolo 7
Livello del linguaggio assemblativo
M entre nei C apitoli 4, 5 e 6 abbiam o illustrato tre diversi livelli che si trovano nella m ag gior parte degli odierni calcolatori, qui affronterem o principalm ente un ulteriore livello, presente anch’esso su praticam ente tu tti i calcolatori m oderni, quello del linguaggio assem blativo. La differenza principale che contraddistingue questo livello rispetto ai livelli di microarchitettura, ISA e m acchina del sistema operativo è che il livello del linguaggio assem blativo è im plem entato m ediante traduzione invece che interpretazione. I program m i che si occupano di trad u rre in un particolare linguaggio un program m a scrino dall’u ten te in un altro linguaggio sono chiam ati traduttori. Il linguaggio nel quale è scritto il program m a originale viene chiam ato linguaggio sorgente, e linguaggio destina zione quello nel quale viene convertito. Sia il linguaggio sorgente sia il linguaggio destina zione definiscono dei livelli. Se esistesse un processore in grado di eseguire direttam ente i program m i scrini nel linguaggio sorgente, tradurre il program m a originale nel linguaggio destinazione non sarebbe necessario. Si usa la traduzione q u an d o si ha a disposizione un processore (un processore hardw are oppure un interprete) per il linguaggio destinazione, ma non per il linguaggio sorgente. Se la traduzione viene effettuata co rrettam ente, l’esecuzione del program m a trad o tto fornisce esattam ente lo stesso risultato che si otterrebbe dal program m a sorgente se si avesse a di sposizione un processore in grado di eseguirlo. D i conseguenza è possibile im plem entare un nuovo livello per il quale non esiste un. processore, traducendo inizialm ente i suoi pro gram m i in un livello destinazione ed eseguendo poi i program m i del livello destinazione ot tenuti dalla traduzione. È im p o rtan te notare la differenza che esiste fra traduzione, da una parte, e interpreta zione, dall’altra. Nella traduzione il program m a originale non viene eseguito direttam ente, m a viene invece convertito in u n program m a equivalente chiam ato programma oggetto o programma eseguibile binario la cui esecuzione è portata avanti solo dopo che la tra d u zione è stata com pletata. La traduzione viene realizzata in due passi distinti: 1. generazione di un program m a equivalente nel linguaggio destinazione 2. esecuzione del pro g ram m a appena generato. Q uesti due passi non sono sim ultanei: il secondo non inizia finche il prim o non sia stato com pletato. Al contrario, nell interpretazione esiste un unico passo: l’esecuzione del prò-
492
Capitolo 7
Livello del linguaggio assemblativi)
gram m a sorgente originale. N o n occorre generare, in u n a fase iniziale, alcun program m a equi valente, anche se a volte il program m a sorgente può essere convertito in una form a inter m edia (per esem pio il bytecode d i Java) per facilitarne l’interpretazione. M e n tre si esegue il pro g ram m a oggetto sono coinvolti solam ente tre livelli: il livello di m icroarchitettura, il livello ISA e il livello m acchina del sistema operativo. Di conseguenza, duran te l'esecuzione è possibile trovare nella m em oria del calcolatore tre diversi program m i: il pro g ram m a oggetto dell’u ten te, il sistem a operativo e il m icroprogram m a {se esiste), m entre è svanita qualsiasi traccia del p rogram m a sorgente originale. Il num ero di livelli pre senti al m o m en to dell’esecuzione p u ò d u n q u e essere diverso dal n u m ero di livelli presenti prim a di effettuare la traduzione. O ccorre tuttavia tener presente che, m entre noi definiam o un livello in base alle istruzioni e ai co stru tti linguistici resi disponibili ai suoi program m atori (e non solo in base alle tecniche im plem entaci ve), altri autori d istinguono n etta m en te i livelli im p lem en tati dagli interpreti che lavorano a tem p o di esecuzione dai livelli im plem entati m ediante la traduzione.
7.1
Introduzione al linguaggio assemblativo
A seconda della relazione che intercorre tra il linguaggio sorgente e il linguaggio destina zione è possibile dividere som m ariam ente i trad u tto ri in due gruppi. Q u a n d o il linguaggio sorgente è essenzialm ente im a rappresentazione sim bolica di un linguaggio m acchina n u m erico, il tra d u tto re è chiam ato assemblatore e il linguaggio sorgente è chiam ato linguag gio assemblativo. Q u a n d o il linguaggio sorgente è un linguaggio ad alto livello com e Java o pp u re C e il linguaggio destinazione è u n linguaggio m acchina num erico oppure una sua rappresentazione sim bolica: in questo caso il trad u tto re viene chiam ato compilatore.
7.1.1
Che cos'è un linguaggio assemblativo
U n puro linguaggio assemblativo è u n linguaggio nel quale ciascuna istruzione produce esat tam ente u n ’istruzione m acchina. In altre parole esiste una corrispondenza uno-a-uno tra le istruzioni m acchina e le istruzioni del program m a assemblativo. Se ciascuna linea del lin guaggio assem blativo contiene esattam ente un’istruzione m acchina, u n program m a assem blativo di n linee genererà u n pro g ram m a in linguaggio m acchina di n parole. La ragione d ell’utilizzo del linguaggio assem blativo al posto del linguaggio m acchina (in esadecim ale) è che è m olto più facile program m are utilizzando il linguaggio assem bla tivo. L’uso di una form a sim bolica p er Ì nom i e gli indirizzi, al posto della rappresentazione b in aria o p p u re ottale, costituisce u n ’enorm e differenza. La m aggior parte dei program m atori è in grado di ricordare che ADD, SUB, m u l e d i v sono le abbreviazioni di aggiungi, sottrai, m oltiplica e dividi, m en tre pochi riescono a ricordarsi Ì corrispondenti valori n u m erici utilizzati dalla m acchina. Il pro g ram m atore in linguaggio assem blativo deve ricor darsi solam ente i nom i sim bolici, d ato che sarà com pito dell’assem blatorc tradurli in istru zioni m acchina. La stessa osservazione vale per gli indirizzi. U n program m atore pu ò assegnare nom i sim bolici alle locazioni di m em oria e lasciare all’assem blatore il co m pito di determ inare i corri spondenti valori num erici. P rogram m ando d irettam ente in linguaggio m acchina è invece o b
7.1
Introduzione al linguaggio assemblativo
493
bligatorio lavorare sem pre con i valori num erici degli indirizzi. Per questi m otivi al giorno d ’oggi nessuno program m a più in linguaggio m acchina, anche se alcuni decenni fa, prim a che venissero inventati gli assem blatori, era necessario farlo. Il linguaggio assem blativo, oltre alla corrispondenza uno-a-uno tra le sue istruzioni e le istruzioni m acchina, gode di un’altra p roprietà che lo contraddistingue dai linguaggi ad aito livello. Il program m atore in linguaggio assem blativo h a accesso a tu tte le funzionalità e a tu tte le istruzioni disponibili nella m acchina di destinazione, m entre il program m atore in linguaggio ad alto livello n on ha la stessa libertà di accesso. Se per esem pio la m acchina di destinazione ha un bit di overflow, u n program m a assem blativo p u ò testarlo, m entre un pro g ram m a Java non lo p uò fare d irettam ente. U n program m a assem blativo, diversam ente d a uno ad alto livello, può q u in d i eseguire qualsiasi istruzione dell’insiem e delle istruzioni della m acchina di destinazione. In poche parole, tu tto ciò che può essere fatto in linguaggio m ac china, p u ò anche essere fatto in linguaggio assem blativo. Al contrario, u n program m atore in linguaggio ad alto livello non ha a disposizione ru n e le istruzioni, i registri e le funzio nalità della m acchina. I linguaggi per la program m azione di sistem i, com e C , sono spesso trasversali rispetto a questi d u e tipi, dato che la loro sintassi è ad alto livello, m a forniscono allo stesso tem po m olte delle possibilità di accesso alla m acchina ripichc dei linguaggi as semblativi. U n ’ultim a differenza che vale la pena rendere più esplicita è che i program m i in lin guaggio assem blativo vengono scritti per una specifica famiglia di m acchine, m entre un pro gram m a scritto in un linguaggio ad alto livello può essere eseguito su m olte m acchine di verse. La possibilità di portare il software da u n a m acchina a un’altra rappresenta un grande vantaggio per m olte applicazioni.
7.1.2
Perché usare il linguaggio assemblativo
Program m are in linguaggio assem blativo è diffìcile. N o n ci si faccia illusioni. N o n è un la voro per p rogram m atori pavidi e debolucci. Inoltre scrivere u n program m a in linguaggio as sem blativo richiede m olto p iù tem p o che scriverlo in un linguaggio ad alto livello, e anche la correzione degli errori e l’aggiornam ento del codice sono operazioni m olto più complesse. M a allora, perche m ai si dovrebbe program m are in linguaggio assemblativo? Esistono d ue m otivi: le prestazioni e le possibilità di accesso alla m acchina. Prim a di tu tto un esperto program m atore in linguaggio assem blativo p uò spesso creare codice m olto più piccolo e ve loce di q u a n to possa fare u n p ro gram m atore in linguaggio ad alto livello. Per alcune appli cazioni la velocità e la dim ensione rappresentano d ue fattori critici; in questa categoria ri cadono i driver dei dispositivi, le routine del BIO S, i cicli interni di program m i le cui pre stazioni h a n n o un’im portanza fondam entale e m olte delle applicazioni integrate, com e il co dice di u n a sm art card o d i u n telefono cellulare. In secondo luogo, alcune procedure devono accedere in m odo com pleto all'hardw are (cosa che in genere è im possibile con i linguaggi ad alto livello). In questa categoria ritro viam o p er esem pio i gestori a basso livello degli in te rru p t e delle eccezioni dei sistemi ope rativi e i controllori dei dispositivi di m olti sistem i integrati che funzionano in tem po reale. Il prim o m otivo che spinge a program m are in linguaggio assem blativo (l’otten im en to di prestazioni più elevate) è di solito quello più im portante; analizziam olo qu in d i p iù d a vi cino. Nella m aggior parte dei program m i una piccola percentuale dell’intcro codice è re sponsabile di un’elevata percentuale del tem p o di esecuzione. C apita co m unem ente che l’l %
494
Capitolo 7
Livello del linguaggio assemblativo
del program m a sia responsabile del 50% del tem po di esecuzione e che il 10% del program m a ne sia responsabile per il 90% . A ssum iam o, per esem pio, che scrivere un-program m a in un linguaggio ad alto livello richieda 10 an n i-u o m o di lavoro e che il pro g ram m a risultante im pieghi 100 s per eseguire un d eterm in ato bencbmark (cioè u n program m a di test im piegato per confrontare le presta zioni di calcolatori, com pilatori, ecc.). Scrivere l’intero program m a in linguaggio assembla tivo richiederebbe invece 50 an n i-u o m o di lavoro, dato che i p rogram m atori in linguaggio assem blativo sono m eno produttivi. Il program m a risultante potrebbe eseguire il benchm ark in soli 3 3 s, in q u an to un abile p ro gram m atore pu ò battere un efficiente com pilatore di un fattore 3 (anche se si potrebbe disquisire senza fine a proposito di questo rapporto). La si tuazione è m ostrata nella Figura 7.1. Basandosi sulla precedente osservazione, secondo la quale solo una piccola frazione del codice è responsabile della m aggior p arte del tem po d ì esecuzione, è possibile seguire un ap proccio diverso. Il program m a viene inizialm ente scritto in un linguaggio ad alto livello e successivam ente si esegue una serie di m isurazioni per stabilire quali parti del program m a determ in an o la m aggior parte del tem p o di esecuzione. Tra queste m isurazioni troviam o ge neralm ente l’uso del clock di sistem a per calcolare la q u an tità di tem po spesa in ciascuna procedura, e il conteggio del nu m ero di volte che ciascun ciclo viene eseguito. C o m e esem pio assum iam o che il 10% dell’intero program m a sia responsabile del 90% del tem po d i esecuzione. È possibile m igliorare il 10% più critico riscrivendolo in linguag gio assem blativo. Q uesto processo è chiam ato m essa a p u n to ed è illustrato nella Figura 7.1. In questo caso la riscrittura delle procedure richiede ulteriori 5 an n i-u o m o di program m a zione, ma, allo stesso tem po, p erm ette di ridurre il tem po di esecuzione da 90 a 30 s. Può essere interessante confrontare l’approccio che unisce il linguaggio ad alto livello e il linguaggio assem blativo con la versione del program m a che im piega solam ente il lin guaggio assem blativo (vedi Figura 7.1). Il program m a o tten u to con la seconda tecnica ri sulta più veloce del 2 0% (33 s co n tro 40), m a questo m iglioram ento è o tte n u to a un prezzo tre volte m aggiore (50 an n i-u o m o di program m azione contro 15). Inoltre il vantaggio reale e ancora maggiore, d ato che riprogram m are in codice assem baltivo una procedura già te-
Linguaggio assemblativo Linguaggio ad alto livello Approccio misto prima della messa a punto 10% più critico Restante 90% Totale Approccio misto dopo la messa a punto 10% più critico Restante 90% Totale
Figura 7.1
Anni/uomo di programmazione richiesti
Tempo d'esecuzione del programma in secondi
50 10
33 100
1 9
90 10
10
100
6 9
30 10
—
—
15
40
Confronto tra linguaggio assemblativo e linguaggio ad alto livello, con e senza messa a punto.
7.1
Introduzione al linguaggio assemblativo
495
stata e corretta in linguaggio ad alto livello è in realtà m o lto più sem plice che scriverla da zero in linguaggio assem blativo. In altre parole la stim a di 5 an n i-u o m o di program m azione necessari per riscrivere le procedure più critiche è sovrabbondante. Se la riscrittura del co dice richiedesse solam ente 1 an n o -u o m o di lavoro, il rapporto tra il costo dell’approccio m i sto e il costo dell’approccio puram ente assem blativo sarebbe superiore di 4 a 1, a favore del l’approccio m isto. U tilizzando u n linguaggio ad alto livello non ci si deve dedicare allo spostam ento di bit da u n a parte all’altra e spesso ciò p erm ette di avere una com prensione più profonda del problem a, consentendo in alcuni casi d i m igliorare realmente le prestazioni. Q uesta situa zione si verifica m olto p iù raram ente ai program m atori di linguaggio assemblativo, che in genere si destreggiano con le istruzioni per risparm iare anche pochi cicli. In conclusione esistono alm eno q u a ttro b u o n e ragioni per studiare il linguaggio as sem blativo. In prim o luogo, il successo o il fallim ento di un progetto di grandi dim ensioni possono dip en d ere dalla capacità di sprem ere le prestazioni fino a ottenere, per alcune pro cedure critiche, un fattore di m iglioram ento di 2 o p pure 3, e per ottenere ciò è im p o rtan te essere in grado di scrivere un codice assem blativo di buon livello q u an d o è realm ente ne cessario farlo. Inoltre, a volte il codice assem blativo è l’unica soluzione alla m ancanza di m em oria. Le sm art card contengono u n a C P U , m a poche h an n o u n m egabyte di m em oria e ancora m eno sono d o tate di un hard disk per effettuare la paginazione. C io n o n o stan te esse devono ese guire com plessi calcoli crittografici utilizzando risorse lim itate. Per ragioni di costo spesso i processori integrati negli elettrodom estici h an n o u n a q u a n tità m in im a di m em oria. Per li m itare il consum o energetico, i P D A c altri dispositivi elettronici senza fili alim entati a bat terie sono spesso dotati di una m em oria talm ente piccola che è indispensabile scrivere co dice m olto efficiente. La terza ragione è che un com pilatore deve produrre un risultato utilizzabile da u n as sem blatore o p p u re eseguire esso stesso il processo di assemblaggio. C o m prendere il lin guaggio assem blativo è q u in d i essenziale per capire com e lavorano i com pilatori. Infine, Io studio del linguaggio assem blativo p erm ette di avere una visione più chiara del funzionam ento delle m acchine reali. Per gli studenti di architettura degli elaboratori scri vere anche poche righe di codice assem blativo è l’unico m odo per avere consapevolezza di che cosa sono realm ente le m acchine a livello di m icroarchitettura. «4
7.1.3
Formato delle istruzioni del linguaggio assemblativo
La stru ttu ra delle istruzioni di u n linguaggio assem blativo rispecchia la stru ttu ra delle istru zioni m acchina, delle quali le prim e forniscono u n a rappresentazione simbolica; cionono stante i linguaggi assemblativi di m acchine diverse e di livelli differenti h an n o u n num ero sufficiente di somiglianze da perm ettere di parlare di linguaggio assemblativo in term ini ge nerali. La Figura 7.2 m ostra alcuni fram m enti del linguaggio assem blativo del Pentium 4, del M o to ro la 680x0 e dell’(U ltra)SPA RC , che eseguono [ istruzione N - / + J. N egli esempi le istruzioni sopra la linea vuota eseguono la com putazione e quelle al di sotto sono invece i com andi che indicano all’assem blatore di riservare spazio di m em oria per le variabili / , / e N c no n rappresentano alcuna istruzione m acchina. E sistono differenti assem blatori p er la famiglia Intel, ciascuno dei quali ha una pro pria sintassi. Nel corso di questo capitolo utilizzerem o per i nostri esem pi il linguaggio as-
496
Capitolo 7
Livello del linguaggio assemblativo
Etichetta
Codice operativo
Operandi
FORM ULA:
MOV ADD MOV
EAX.I FAX,] N,EAX
DD DD DD
3 4 0
1 J N
Commenti -
; registro EAX = 1 ; registro EAX = 1 + J ; N = 1+ | ; riserva 4 byte inizializzati a 3 ; riserva 4 byte inizializzati a 4 ; riserva 4 byte inizializzati a 0
(a)
Etichetta
Codice operativo
Operandi
Commenti
FORMULA
MOVE.L ADD.L M OVE.L
1. DO 1, DO DO, N
; registro DO = 1 ; registro DO = 1 + | ; N =1 + |
1 J N
DO DC.L DC.L
3 4 0
; riserva 4 byte inizializzati a 3 ; riserva 4 byte inizializzati a 4 ; riserva 4 byte inizializzati a 0 (b)
Etiche Ita
Codice operativo
Operandi
Commenti
FORMULA:
SETHI LD SETHI LD NOP ADD SETHI ST
%HI(I),%R1 I%R1 + %LO(l)l,%R1 %HI(J),%R2 |%R2 + % LO (|)l,% R2 ' '
! R1 = bit più significativi dell'indirizzo di 1 ! RI = 1 ! R2 = bit più significativi dell'indirizzo di J !R 2 = J ! attende J dalla memoria I R2 = RI -t- R2 ! RI = bit più significativi dell'indirizzo di N
1: ): N:
%R1 ,% R2,% R2 % R2,l% R1 + %LO(NH
.W O RD 3 .W O RD 4 W O RD 0
! riserva 4 byte inizializzati a 3 ! riserva 4 byte inizializzati a 4 ! riserva 4 byte inizializzati a 0 (c)
Figura 7.2
Esecuzione di N = / + J. (a) Pentium 4. (b) Motorola 680x0. (c) SPARC.
sem blativo M icrosoft M A SM . A nche se ci co n centrerem o sul Pentium 4, tu tto ciò che di rem o varrà in m o d o equivalente anche per il 3 86, il 4 86, il P entium e il P entium Pro. Per gli esem pi dello SPARC ci baserem o sull’assemblacore fo rnito dalla Sun. A nche in questo caso ogni cosa che direm o potrà essere applicata alle versioni precedenti (a 32 bit) di SPARC. Per ragioni di u n ifo rm ità utilizzerem o sem pre lettere m aiuscole per i codici operativi e per i registri (seguendo la convenzione del P entium 4), anche se l’assem blatore della Sun ri chiede lettere m inuscole. Le istruzioni del linguaggio assem blativo sono com poste da q u attro pani: un cam po etichetta, u n cam po p e r l’operazione (codice operativo o opcode), un cam po per gli operandi e u n cam po per i com m enti. Le etichette sono utilizzate per fornire nom i sim bolici agli in dirizzi, e sono necessarie per definire le destinazioni alle quali p o rtan o le istruzioni che ef fettuano salti e per p o ter accedere alle parole di dati m em orizzate m ediante nom i simbolici. Se un’istruzione è etichettata, l’etichetta inizia (di solito) nella colonna 1. Le tre sezioni della Figura 7.2 h an n o q u a ttro etichette: FORMULA , /, J e N. Si noti che il linguaggio assem blativo di SPARC richiede che ogni etichetta term in i con il carattere
7.1
Introduzione al linguaggio assemblativo
497
“due p u n ti”, m entre ciò non avviene per quello d i M otorola. Il linguaggio assemblativo di Intel richiede i “due p u n ti” solo nelle etichette del codice, m a non in quelle dei dati. N on c’è niente di im p o rtan te in questa differenza: è solo che no n tu tti i progettisti di assem bla to ri h a n n o gli stessi gusti e n on c’è alcun aspetto dell’architettura sottostante che suggerisca una scelta piutto sto che un'altra. U n vantaggio offerto dalla notazione che usa i “d u e p u n ti” è che un’etichetta può com parire, da sola, su una linea, m entre il codice operativo viene scritto nella p rim a colonna della linea successiva. Q u esto stile si rivela in un certo m odo utile per i com pilatori. Senza i “d u e p u n ti” sarebbe im possibile distinguere un’etichetta da un codice operativo, nel caso in cui entram bi occupino, da soli, una linea del codice assemblativo. U sando i “due p u n ti” si elim ina questa potenziale am biguità. U n a caratteristica infelice di alcuni assem blatori lim ita a sei o a o tto il num ero di ca ratteri di u n ’etichetta, m entre la m aggior parte dei linguaggi ad alto livello perm ette di u ti lizzare no m i di lunghezza arbitraria. N om i lunghi e scelti in m odo appropriato rendono i program m i m olto più leggibili e facili da capire da chi non ne è l’autore. Le tre le m acchine sono d o tate di registri con nom i m olto differenti. I registri del Pentium 4 h an n o nom i com e EAX, EBX, ECX, ecc. I registri di M otorola sono chiam ati DO, D I , D2, ecc. I registri SPARC h anno invece più nom i; ncH’esem pio abbiam o utilizzato i nom i %R1 e %R2. Il cam po C odice operativo contiene u n ’abbreviazione sim bolica del codice operativo op p u re un co m ando per l’assem blatore stesso. La scelta di un nom e appropriato è solo una questione di gusti e spesso i progettisti di differenti linguaggi assemblativi com piono scelte diverse. I progettisti dell’assem blatore Intel h an n o deciso di usare MOV sia per caricare u n re gistro dalla m em oria sia per m em orizzare un registro. I progettisti M otorola hanno scelto move per en tram b e le operazioni. Al co ntrario i progettisti dell’assem blatore SPARC hanno deciso di usare LD p er la p rim a operazione e ST per la seconda. A nche queste scelte non hanno n iente a che fare con la natu ra della m acchina. C ontrariam ente a quan to abbiam o appena visto, nel linguaggio assemblativo di SPARC, la necessità di utilizzare d u e istruzioni m acchina, a partire da SETHI, per accedere alla m e m oria è u n a proprietà intrinseca della m acchina. In SPARC infatti gli indirizzi virtuali pos sono essere a 32 b it (SPARC Version 8) o ppure a 44 bit (SPARC Version 9 ), m entre le istru zioni possono gestire u n m assim o di 22 b it di d ati im m ediati. Per fornire tu tti i bit di un indirizzo virtuale com pleto sono q u in d i necessarie, sem pre, due istruzioni. L’istruzione sethi
% h i (i ), »r i
u
azzera i 32 b it più significativi e i 10 m eno significativi del registro (a 64 bit) R I, e succes sivam ente inserisce i 22 bit dell’indirizzo a 3 2 b it di / nei bit com presi tra le posizioni 10 e 32 di R I . L’istruzione successiva LD[ %Rl+%LO(I) 1 i %R 1
aggiunge R I c i 10 bit m en o significativi dell’indirizzo di 1 per form are l’indirizzo com pleto di I, prelevare quella parola dalla m em oria e inserirla in R I . In un concorso di bellezza con voti da I a 10, queste istruzioni otterrebbero un risultato di - 2 0 . SPARC non è però stato progettato per la bellezza del suo linguaggio assem blativo, m a per garantire un’alta velocità di esecuzione, e questo obiettivo riesce a raggiungerlo egregiamente. Gli operandi della famiglia P entium , del 680x0 e dello SPARC possono essere byte, parole e parole lunghe (4 byte): com e fa l’assem blatore a sapere quale lunghezza è stata uri-
Capitolo 7
498
Livello del linguaggio assemblativo
lizzata per l’operando? A nche in questo caso le scelte dei progettisti han n o portato a solu zioni differenti. Sul Pentium 4 i registri con lunghezze diverse h an n o nom i differenti; EAX è utilizzato p er esem pio per spostare elem enti d i 32 bit, AX è utilizzato per spostare elem enti di 16 b it, m entre al e AH sono usati per spostare elem enti di 8 bit. I progettisti dell’assem blatore M otorola h an n o invece deciso di aggiungere a ciascun codice operativo il suffisso .L per le parole lunghe, . W per le parole e .tì per i byte, invece di assegnare nom i diversi per i sottoinsiem i di DO, ecc. Al co ntrario SPARC usa codici operativi diversi per lunghezze dif ferenti (per esem pio, LDSB, LDSH e LDSW per caricare rispettivam ente byte con segno, se m iparole e parole in registri a 64 bit). T utte e tre le soluzioni sono valide, m a sottolineano ancora una volta la n atura arbitraria della progettazione di un linguaggio. I tre assem blatori differiscono anche nel m odo in cui riservano lo spazio per i dati. I progettisti del linguaggio assem blativo di Intel h an n o scelto DD ( Define Doublé), dato che sull’8088 u n a parola era dì 16 bit. Q uelli di M otorola hanno preferito dc ( Define Constant), m entre quelli di SPARC hanno scelto fin daH'inizio .WORD. A ncora una volta si tratta di scelte arbitrarie. N elle istruzioni del linguaggio assem blativo il cam po O perandi viene utilizzato per spe cificare gli indirizzi e i registri utilizzati com e operandi dall’istruzione m acchina. N el caso di un’istruzione per la som m a di interi il cam po operandi indica quali elem enti devono es sere so m m ati fra loro. N el caso di u n ’istruzione di salto indica invece a quale indirizzo deve portate la diram azione. G li operandi possono essere registri, costanti, locazioni di m em oria, e così via. II cam po C o m m en ti è il luogo in cui i program m atori possono inserire utili spiega zioni sul funzionam ento del program m a a beneficio di altri program m atori che in seguito lo potrebbero utilizzare o m odificare (o a benefìcio del program m atore stesso alcuni anni dopo aver scritto il codice). U n program m a ir linguaggio assemblativo senza una tale d o cum entazione è praticam ente incom prensibile, spesso anche per il suo stesso autore. Il cam po dei com m enti è d estinato esclusivam ente all’uso da parte dell’uom o e non ha alcun effetto sul processo di assemblaggio né tan to m e n o sul program m a che verrà generato.
7.1.4
Pseudoistruzioni
U n linguaggio assem blativo, oltre a specificare quali istruzioni m acchina devono essere ese guite, può anche contenere dei com andi indirizzati all’assem blatore stesso, per richiedere, per esem pio, di allocare una certa q u an tità di m em oria oppure per passare a una nuova pa gina del listato. I com andi d iretti all’assem blatore sono chiam ati pseudoistruzioni o anche direttive dell’assemblatore. N ella Figura 7.2(a) abbiam o già visto una pscudoistruzione m olto com une: DD (nella Figura 7.3 ne sono elencate altre, tratte dal l’assem blatore M icrosoft M A SM p e r le m acchine Intel). La pseudoistruzione SEGMENT inizia u n nuovo segm ento, m entre ENDS lo term ina. E con sen tito iniziare un segm ento di testo, co n ten ente codice, poi un segm ento dati e tornare successivamente al segm ento testo, e così via. ALIGN forza l’indirizzo della linea successiva, c o n te n en te in genere dati, a essere un m u ltip lo d ell’arg o m en to della pscudoistru zio n e. Per esem pio se il segm ento co n tien e già 61 byte d i d ati, l'indirizzo allocato subito d o p o la pseudoistruzione ALIGN 4 sarà 64. EQU assegna un nom e sim bolico a un’espressione. Per esempio, dopo la pseudoistruzione BASE EQU 1000
7.1
Introduzione al linguaggio assemblativo
Pseudoistruzione
Significato
SECMENT
Inizia un nuovo segmento (lesto, dati, ecc.) con certi attributi
ENDS
Termina il segmento corrente
ALIGN
Controlla l'allineamento della successiva istruzione o dei successivi dati
EQU
Definisce un nuovo simbolo uguale a una data espressione
DB
Alloca spazio per memorizzare uno o più byte (inizializzati)
DW
Alloca spazio per memorizzare uno o più elementi di dati (inizializzati) a 16 bit (parola)
DD
Alloca spazio per memorizzare uno o più elementi di dati (inizializzati) a 32 bit (parola doppia)
DQ
Alloca spazio per memorizzare uno o più elementi di dati (inizializzati) a 64 bit (parola quadrupla)
PROC
Inizia una procedura
ENDP
Termina una procedura
MACRO
Inizia una definizione di macro
ENDM
Termina una definizione di macro
PUBLIC
Esporta un nome definito nel modulo
EXTERN
Importa un nome da un altro modulo
INCLUDE
Preleva e include un altro file
IF
Inizia un assemblaggio condizionale in base a una data espressione
ELSE
Inizia un assemblaggio condizionale se la condizione IF precedente è falsa
ENDIF
Termina un assemblaggio condizionale
COM M ENT
Definisce un nuovo carattere di inizio commento
PACE
Genera un'interruzione di pagina nel listalo
END
Termina il programma assemblativo
Figura 7.3
499
Pseudoistruzioni (direttive) dell'assemblatore del Pentium 4 (MASM).
il sim bolo BASE p uò essere usato in qualsiasi p u n to al posto di 1000. L’espressione che se gue EQU può com prendere alcuni sim boli definiti dal program m atore oltre a operatori arit metici e di altro tipo, com e m ostra il seguente esem pio LIMIT EQU 4 • BASE ♦ 2000
La m aggior p arte degli assem blatori, com preso M A SM , richiede che u n sim bolo sia definito prim a di essere utilizzato in un’espressione com e quella appena vista. Le successive q u attro pseudoistruzioni, D B , DW , DD e D Q , allocano m em oria rispetti vam ente per u n a o più variabili della d im ensione di 1 , 2 , 4 oppure 8 byte. Per esem pio, TABLE DB 11, 23 , 4 9
alloca spazio per 3 byte e li inizializza rispettivam ente ai valori 11, 23 c 49. Essa definisce inoltre il sim bolo TABLE e lo associa all’indirizzo in cui è m em orizzato il valore 11. Le pseudoistruzioni PROC e ENDP definiscono rispettivam ente l’inizio e la fine delle procedure del linguaggio assemblativo, che h an n o la stessa funzione delle procedure definite
500
Capitolo 7
Livello del linguaggio assemblativo
in altri linguaggi di program m azione. A nalogam ente le direttive MACRO e ENDM delim itano l’area in cui com pare la definizione di u n a m acroistruzione (argom ento trattato più avanti nel corso del capitolo). •» Le due successive pseudoistruzioni, PUBLIC e EXTERN, controllano la visibilità dei sim boli. E una pratica com u n e scrivere i program m i in più file e spesso capita che una proce d u ra c o n ten u ta in u n file richiam i una procedura o acceda ai dati definiti in un altro file. La pseudoistruzione p u b l ic p erm ette d i esportare u n sim bolo che deve essere reso dispo nibile anche ad altri file, rendendo così possibili i riferim enti tra file diversi. A nalogam ente, per im pedire che l’assem blatore segnali u n errore quando in contra u n sim bolo che n o n è ancora stato definito, si può dichiarare un sim bolo com e EXTERN. Q uesta pseudoistruzione indica all'assem blatore che la definzione del sim bolo com pare in un altro file. I sim boli che n o n sono dichiarati m ediante alcuna delle due pseudoistruzioni precedenti sono visibili sol tan to localm ente, all’interno dello stesso file. C iò significa che l’utilizzo, per esempio, di FOO in più file non genererà alcun conflitto, d ato che ciascuna definizione è locale al file in cui si trova. La direttiva INCLUDE fa sì che l’assem blatore prelevi un altro file e lo includa intera m ente all in tern o di quello corrente. Spesso tali file co m prendono definizioni, m acroistru zioni e altri elem enti che sono richiesti in p iù file. M o lti assem blatori, com preso M A SM , su p p o rtan o l’assem blaggio condizionale. Per esem pio, WORDSIZE EQU 16 IF WORDSIZE GT 16 WSIZE: ELSE WSIZE: ENDIF
DD 32 DD 16
alloca u n a singola parola a 3 2 b it e chiam a W SIZE il suo indirizzo. La parola è inizializzata a 32 o p p u re a 16, in base al valore di WORDSIZE (in questo caso, 16). In genere si utilizza questo m etodo per allocare una variabile q u an d o occorre scrivere un program m a che possa essere eseguito da m acchine a 16 b it (com e l’8088) o a 32 bit (com e il Pentium 4 ). Inserendo all’in tern o di i f e e n d i f tu tte le porzioni del codice dipendenti dalla m acchina, e cam biando successivam ente una singola definizione, WORDSIZE , il program m a p u ò essere au tom aticam ente assem blato p er en tram b e le dim ensioni di parola. G razie a questo approccio è possibile m antenere un solo program m a sorgente per più m acchine destinazione (di tipo diverso), rendendo di conseguenza p iù facile lo sviluppo e il m an ten im en to del software. In m olti casi tu tte le definizioni d ipendenti dalla m acchina, com e WORDSIZE, sono raggrup pate in un singolo file, di cui vengono create versioni diverse per ogni tipo di m acchina. In questo m odo, includendo sem plicem ente il corretto file delle definizioni, è possibile utiliz zare facilm ente il program m a p er m acchine diverse. La pseudoistruzione comment perm ette all’utente di m odificare il delim itatore dei com m enti, che inizialm ente è im postato al carattere “p u n to e virgola”. PAGE è utilizzato per controllare il listato che l’assem blatore p uò generare su richiesta. Infine end segna la fine del program m a. O ltre a quelle appena elencate, in M A SM esistono m olte altre pseudoi struzioni. A ltri assem blatori per il Pentium 4 h an n o invece un insiem e diverso di pseudoi
7.2
Macroistruzioni
501
struzioni; difetti queste non sono d ettate dall’arch itettu ra della m acchina, m a dai gusti di chi ha scritto l’assem blatore.
7.2
Macroistruzioni
Spesso i program m atori di linguaggi assemblativi h an n o bisogno di ripetere più volte al l’interno di un program m a alcune sequenze d istruzioni. Il m odo più ovvio per farlo consi ste nel riscriverle ogni volta che sia necessario. Tuttavia se una sequenza è lunga, o se deve essere utilizzata m olte volte, scriverla rip etu tam en te è un’operazione tediosa. U n approccio alternativo consiste nel trasform are la sequenza in una procedura e nel richiam arla q u ando è richiesta. Q uesta strategia ha lo svantaggio di dover eseguire, ogni volta che occorre utilizzare la sequenza, un’istruzione di chiam ata di procedura e una per resti tu irn e il controllo. Se le sequenze sono corte, per esem pio di due istruzioni, m a sono usate frequentem ente, il lavoro aggiuntivo d eterm in ato dalla chiam ata alla procedura pu ò rallen tare notevolm ente il program m a. Le macro, abbreviazione usuale di m acroistruzioni, forni scono una soluzione facile ed efficiente al problem a di ripetere un’identica, o quasi, sequenza d ’istruzioni.
7.2.1
Definizione, chiamata ed espansione di macro
U na d e fin iz io n e d i m acro è u n m odo per assegnare un nom e a una porzione di testo. D o p o che un a m acro è stata definita, il p ro gram m atore p uò scriverne il nom e al posto della p o r zione di program m a corrispondente. U na m acro in realtà non è altro che un’abbreviazione per una porzione di testo. La Figura 7.4(a) m ostra un program m a in linguaggio assembla tivo per il Pentium 4 che scam bia d u e volte il co n ten uto delle variabili p e q. Q ueste sequenze possono essere definite com e m acro, com e m ostra la Figura 7.4(b). D opo aver definito la m acro, ogni occorrenza di SWAP viene so stituita dalle q u attro linee: MOV MOV MOV MOV
EAX ,p EBX ,Q Q, EAX P,EBX
Il program m atore ha definito Slfó4/>com e un’abbreviazione delle q u attro istruzioni. A nche se assem blatori diversi utilizzano notazioni leggerm ente differenti, in tu tti i casi una definizione di m acro è com posta dalle seguenti parti principali: 1. un’intestazione che indica il nom e della m acro che si sta definendo 2. il testo che costituisce il corpo della m acro 3. una pseudoistruzione che segna la fine della definizione (per esem pio,
e n d m ).
Q u a n d o l’assem blatore incontra u n a definizione di macro, la salva nella tabella delle defi nizioni di m acro per poterla utilizzare successivamente. D a quel m o m en to in poi ogni volta che il nom e della m acro appare com e codice operativo, l’assem blatore la sostituisce con il corpo della m acro. L’uso del nom e di una m acro com e codice operativo viene d etto chia mata di macro, m entre la sua sostituzione con il corpo della m acro è chiam ata espansione
di macro.
500
Capitolo 7
Livello del linguaggio assemblativo
in altri linguaggi di program m azione. A nalogam ente le direttive MACRO e ENDM delim itano l’area in cui com pare la definizione di una m acroistruzione (argom ento trattato più avanti nel corso del capitolo). -• Le due successive pseudoistruzioni, PUBLIC e EXTERN, controllano la visibilità dei sim boli. È, una pratica com u n e scrivere i program m i in più file e spesso capita che una proce d u ra c o n ten u ta in u n file richiam i una procedura o acceda ai dati definiti in un altro file. La pseudoistruzione PUBLIC perm ette di esportare un sim bolo che deve essere reso dispo nibile anche ad altri file, rendendo così possibili i riferim enti tra file diversi. A nalogam ente, per im pedire che l’assem blatore segnali u n errore q u ando incontra un sim bolo che non è ancora stato definito, si può dichiarare u n sim bolo com e ex t er n . Q uesta pseudoistruzione indica all’assem blatore che la definzione del sim bolo com pare in un altro file. I sim boli che non sono dichiarati m ediante alcuna delle due pseudoistruzioni precedenti sono visibili sol tan to localm ente, all’interno dello stesso file. C iò significa che l’utilizzo, per esempio, di FOO in più file non genererà alcun conflitto, dato che ciascuna definizione è locale al file in cui si trova. La direttiva INCLUDE fa sì che l’assem blatore prelevi un altro file e lo includa intera m ente all intern o di quello corrente. Spesso tali file com p ren d o n o definizioni, m acroistru zioni e altri elem enti che sono richiesti in p iù file. M o lti assem blatori, com preso M A S M , su p p o rta n o l’assem blaggio condizionale. Per esem pio, WORDSIZE EQU 16 I F W O R D S I Z E GT 1 6 W SIZE:
DD
32
DD
16
ELSE W SIZE: ENDIF
alloca u n a singola parola a 3 2 b it e chiam a WSIZE il suo indirizzo. La parola è inizializzata a 32 o p p u re a 16, in base al valore di WORDSIZE (in questo caso, 16). In genere si utilizza questo m etodo per allocare una variabile q u an d o occorre scrivere un program m a che possa essere eseguito da m acchine a 16 b it (com e 18088) o a 32 b it (com e il Pentium 4). Inserendo all’in tern o di i f e e n d if tu tte le porzioni del codice dipendenti dalla m acchina, e cam biando successivam ente una singola definizione, WORDSIZE , il program m a può essere au tom aticam en te assem blato p er en tram b e le d im ensioni di parola. Grazie a questo approccio è possibile m antenere un solo program m a sorgente per più m acchine destinazione (di tipo diverso), rendendo di conseguenza p iù facile lo sviluppo e il m an ten im en to del software. In m olti casi tu tte le definizioni d ip en d en ti dalla m acchina, com e WORDSIZE, sono raggrup pate in un singolo file, di cui vengono create versioni diverse per ogni tipo di m acchina. In questo m odo, includendo sem plicem ente il corretto file delle definizioni, è possibile utiliz zare facilm ente il program m a per m acchine diverse. La pseudoistruzione COMMENT p erm ette all’utente di m odificare il delim itatore dei com m enti, che inizialm ente è im postato al carattere “p u n to e virgola”. PAGE è utilizzato per controllare il listato che l’assem blatore p u ò generare su richiesta. Infine END segna la fine del program m a. O ltre a quelle appena elencate, in M A SM esistono m olte altre pseudoi struzioni. A ltri assem blatori per il Pentium 4 h anno invece un insiem e diverso di pseudoi
7.2
Macroistruzioni
501
struzioni; difatti queste n on sono d ettate dall’arch itettura della m acchina, m a dai gusti di chi ha scritto l’assemblatore.
7.2
Macroistruzioni
Spesso i p rogram m atori di linguaggi assem blativi h an n o bisogno di ripetere più volte al l’interno di un program m a alcune sequenze d istruzioni. Il m odo più ovvio per farlo consi ste nel riscriverle ogni volta che sia necessario. Tuttavia se una sequenza è lunga, o se deve essere utilizzata m o lte volte, scriverla rip etu tam en te è un’operazione tediosa. U n approccio alternativo consiste nel trasform are la sequenza in una procedura e nel richiam arla quan d o è richiesta. Q uesta strategia ha lo svantaggio di dover eseguire, ogni volta che occorre utilizzare la sequenza, un’istruzione di chiam ata di procedura e una per resti tu irn e il controllo. Se le sequenze sono corte, p er esem pio di due istruzioni, m a sono usate frequentem ente, il lavoro aggiuntivo d eterm in ato dalla chiam ata alla procedura può rallen tare notevolm ente il p ro g ra m m a Le macro, abbreviazione usuale di m acroistruzioni, forni scono una soluzione facile ed efficiente al problem a di ripetere un’identica, o quasi, sequenza d ’istruzioni.
7.2.1
Definizione, chiamata ed espansione di macro
U na d e fin iz io n e d i m acro è u n m o d o per assegnare un nom e a una porzione di testo. D opo che un a m acro è stata definita, il program m atore p u ò scriverne il nom e al posto della por zione di program m a corrispondente. U na m acro in realtà non è altro che un’abbreviazione per un a porzione di testo. La Figura 7.4(a) m ostra un program m a in linguaggio assembla tivo per il Pentium 4 che scam bia du e volte il co n tenuto delle variabili p e q. Q ueste sequenze possono essere definite com e m acro, com e m ostra la Figura 7.4(b). D opo aver definito la m acro, ogni occorrenza di SWAP viene sostituita dalle q u a ttro linee: MOV E A X . P MOV E B X . Q MOV Q , EAX MOV P , EB X
Il program m atore ha definito S U ^ P c o m e un’abbreviazione delle q u attro istruzioni. A nche se assem blatori diversi utilizzano notazioni leggerm ente differenti, in tu tti i casi una definizione di m acro è com posta dalle seguenti parti principali: 1. u n ’intestazione che indica il nom e della m acro che si sta definendo 2. il testo che costituisce il corpo della m acro 3. una pseudoistruzione che segna la fine della definizione (per esem pio, ENDM). Q u a n d o l’assem blatore in co n tra una definizione di m acro, la salva nella tabella delle defi nizioni di m acro per poterla utilizzare successivam ente. D a quel m o m en to in poi ogni volta che il nom e della m acro appare com e codice operativo, l'assem blatore la sostituisce con il corpo della m acro. L’uso del n o m e di una m acro com e codice operativo viene detto chia mata di macro, m entre la sua sostituzione con il corpo della m acro è chiam ata espansione
di macro.
502
Capitolo 7
Livello del linguaggio assemblativo
MOV
EAX,P
MOV
EBX.Q
SW AP
M O V EAX.P
MACRO
MOV
Q ,EAX
M O V EBX,Q
MOV
P,EBX
M O V Q ,EAX M O V P,EBX
MOV
EAX,P
MOV
EBX,Q
MOV
Q ,EAX
MOV
P.EBX
ENDM SWAP SWAP (b)
(a)
Figura 7.4
Codice in linguaggio assemblativo per scambiare due volte P e Q . Senza (a) e con (b) macro.
L’espansione della m acro viene effettuata d u ran te il processo assem blativo e non du ran te l’e secuzione del program m a. Q u esto è u n p u n to im portante. Il program m a della Figura 7.4(a) e quello della Figura 7.4(b) pro d u rran n o esattam ente lo stesso codice in linguaggio macchina. G uard an d o solam ente il program m a trad o tto in linguaggio m acchina, è im possibile stabi lire se, d u ran te la generazione, siano state utilizzate o m eno delle m acro. Il m otivo è che, u na volta com pletata l’espansione delle m acro, l’assem blatore elim ina le loro definizioni, di cui non rim ane alcuna traccia nel program m a generato. Le chiam ate di m acro non devono essere confuse con le chiam ate di procedure. La dif ferenza principale è che una chiam ata di m acro è un’istruzione diretta all’assem blatore, af finché sostituisca il nom e della m acro con il suo corpo. U na chiam ata di procedura è invece un’istruzione m acchina inserita nel program m a oggetto e che sarà eseguita in u n secondo m o m en to per chiam are la procedura. La Figura 7.5 confronta le chiam ate di m acro con le chiam ate di procedura. Domanda
Macro
Procedura
Quando viene effettuala la chiamata?
Durante l’assemblaggio
Durante l'esecuzione del programma
Il corpo è inserito nel programma oggetto in ogni punto in cui avviene una chiamata?
Sì
No
L'istruzione per la chiamata di procedura è inserita nel programma oggetto ed eseguita successivamente?
No
Sì
Occorre usare un'istruzione di ritorno dopo aver effettuato la chiamata?
No
Sì
Quante copie del corpo appaiono nel programma oggetto?
Una per chiamata di macro
Una
Figura 7.5
Confronto tra le chiam ate di macro e le chiam ate di procedure.
7.2
Macroistruzioni
503
C o n cettu alm en te conviene pensare che il processo assem blativo avvenga in due fasi. Nella prim a vengono salvate tu tte le definizioni delle m acro e vengono espanse le loro chia m ate. Nella seconda il testo risultante viene elaborato com e se fosse il program m a originale. V edendolo in questo m odo, il program m a sorgente viene letto e poi trasform ato in u n altro program m a nel quale sono state rimosse tu tte le definizioni delle m acro e le chiam ate sono state sostituite dai loro corpi. L’o u tp u t risultante è un program m a in linguaggio assembla tivo che n o n contiene alcuna m acro e che può essere passato all’assem blatore. È im p o rtan te tenere a m ente che un program m a è sem plicem ente una stringa di ca ratteri che com prende lettere, cifre, spazi, segni di p unteggiatura e “rito rn i a capo’’ (passag gio a un a nuova linea). L’espansione di u n a m acro consiste nel sostituire una parte di que sta stringa con una nuova stringa di caratteri. L’uso delle m acro è una tecnica per m anipo lare stringhe di caratteri, senza preoccuparsi del loro significato.
7.2.2
Macro con parametri
Le m acro descritte precedentem ente sono utilizzabili in program m i di breve lunghezza in cui si ripete più volte u n a sequenza d istruzioni perfettam ente identica. T uttavia è frequente il caso in cui u n program m a contiene varie sequenze d istruzioni che non sono del tu tto iden tiche. N ell’esem pio della Figura 7.6(a) la p rim a sequenza scam bia P con Q, m entre la se conda R con 5. Gli assem blatori di m acro gestiscono queste situazioni consentendo che le definizioni delle m acro specifichino dei parametri formali e che le chiam ate forniscano dei parametri attuali. Q u a n d o una m acro viene espansa i param etri form ali che appaiono nel suo corpo vengono sostituiti dai corrispondenti param etri attuali. I param etri attuali sono specificati nel cam po operandi della chiam ata di m acro. La Figura 7.6(b) m ostra il program m a della Figura 7.6(a) riscritto utilizzando una m acro con due param etri. PI e P2 sono i param etri form ali. Nel m o m en to in cui la m acro viene espansa, ogni occorrenza di PI nel corpo della m acro viene sostituita dal secondo param etro attuale. Nella chiam ata di m acro crange
P, Q
MOV
EAX.P
MOV
EBX,Q
CHANCE
MOV
Q ,EAX
M O V EBX,P2
MOV
P,EBX
M O V P2,EAX
MOV
EAX,R
MOV
EBX,S
MOV
S,EAX
MOV
R,EBX
u
M A C R O P 1,P 2 M O V EAX,PI
M O V PI,EBX ENDM C H A N C E P, Q C H A N C E R, S
(a)
Figura 7.6
(b)
Sequenze d'istruzioni quasi identiche. Senza (a) e con (b) macro.
Capitolo 7
504
Livello del linguaggio assemblativo
P è il p rim o param etro attuale e Q è il secondo. I program m i prodotti dalle due parti della Figura 7-6 sono q u in d i identici: co ntengono esattam ente le stesse istruzioni con gii stessi operandi. '
7.2.3
Caratteristiche avanzate
La m aggior parte dei processori di m acro m ette a disposizione un gran num ero di caratte ristiche avanzate p er rendere più facile la vita dei program m atori in linguaggio assemblativo. In questo paragrafo darem o u n ’occhiata ad alcune caratteristiche avanzate di M ASM . U n problem a che sorge usando gli assem blatori che su p p ortano le m acro è la duplicazione delle etichette. S upponiam o che u n a m acro contenga un’istruzione di diram azione condizionale e un’etich etta che rappresenta la destinazione del salto. Se la m acro viene chiam ata due o più volte, l’etichetta verrà d u p licata causando u n errore del linguaggio assemblativo. U na so luzione consiste nell’obbligare il pro g ram m ato re a fornire tram ite param etro una diversa eti chetta ogni volta che chiam a la m acro. La soluzione utilizzata da M A SM è invece quella di perm ettere la dichiarazione di etichetta LOCAL, e lasciare che l’assem blatore generi un'etichetra diversa per ogni espansione della macro. Altri assemblatori utilizzano la regola secondo la quale le etichette num eriche sono autom aticam ente definite com e locali. M A SM e la m aggior parte degli assem blatori perm ettono di definire m acro all’in terno di altre macro. Q uesta funzionalità risulta particolarm ente utile se usata insiem e all’assem blaggio condizionale. In genere la stessa m acro viene,definita in entram bi i rami di un co stru tto i f , com e il seguente: MI MACRO IF WORDSIZE GT 16 M2 MACRO ENDK ELSE M2 MACRO ENDM
ENDIF ENDM
In entram bi i casi la m acro M 2 viene definita, m a la sua definizione dipende dal fatto che il program m a venga assem blato su u n a m acchina a 16 bit oppure su una a 32 bit. Se M i n o n viene chiam ata, M 2 n o n viene definita. Infine, le m acro possono chiam are altre m arco, com prese loro stesse. Se u n a m acro è ricorsiva, cioè se richiam a se stessa, deve passare u n param etro m odificato a ogni espansione e che fa term inare la ricorsione q u an d o raggiunge un determ inato valore. Se così non tosse, l’assemblatore potrebbe entrare in u n ciclo infinito, e in tal caso l’utente dovrebbe interrom pere esplicitam ente l’assem blatore.
7.2.4
Implementazione delle funzionalità macro negli assemblatori
Per im plem entare u n a funzionalità m acro u n assem blatore deve essere in grado di eseguire due funzioni: salvare le definizioni delle m acro ed espandere le loro chiam ate. Esam iniam o una alla volta queste due operazioni.
7.3
Processo di assemblaggio
505
L’assem blatore deve m antenere u n a tabella con tu tti i nom i delle m acro e, associato a ogni nom e, un p u n tato re alla definizione precedentem ente m em orizzata, in m odo che sia possibile recuperarla q u a n d o è necessario. A lcuni assem blatori h an n o una tabella separata per i nom i delle m acro, m entre altri sono dotati di un’unica tabella in cui sono m antenute, oltre alle m acro, anche tu tte le istruzioni m acchina e le pseudoistruzioni. Q u a n d o s’incontra una definizione di m acro si aggiunge nella tabella un elem ento che indica il nom e della m acro, il num ero d i param etri form ali e un p u n tato re a un’altra tabella, la tabella delle definizioni delle m acro, che con terrà il suo corpo. In questa fase si costruisce anche u n a lista dei param etri form ali d a utilizzare nell’elaborazione della definizione. Viene quindi letto il corpo della m acro e m em orizzato all’interno della tabella delle definizioni. I param etri form ali che s’inco n tran o all’intern o del corpo sono indicati m ediante simboli spe ciali. C o m e esem pio m ostriam o la rappresentazione interna della definizione della m acro CHANGE, utilizzando il p u n to e virgola com e “ritorno a capo” e la “e com m erciale” (&) com e sim bolo dei param etri form ali: MOV E A X ,SPI ; MOV EBX,SP2; MOV & P 2 ,EAX; MOV &P1,EBX;
N ella tabella delle definizioni delle m acro il corpo di ciascuna m acro è sem plicem ente una stringa di caratteri. D u ran te il prim o passo del processo di assemblaggio, vengono cercati i codici opera tivi e le m acro vengono espanse. O gni volta che s’incontra una definizione di m acro la si m em orizza nella tabella delle m acro. Q u a n d o viene chiam ata una m acro l’assem blatore in terrom pe tem poraneam ente la lettura dal dispositivo di in p u t e inizia a leggere il corpo della m acro precedentem ente m em orizzato. I param etri form ali presenti al suo interno vengono poi sostituiti dai param etri attuali specificati dalla chiam ata. La presenza del sim bolo & p rim a dei param etri form ali p erm ette all’assem blatore di riconoscerli più facilm ente.
7.3
Processo di assemblaggio
Nei paragrafi successivi descriverem o brevem ente com e funziona un assem blatore. A nche se ogni m acchina ha il pro p rio linguaggio assem blativo, i diversi processi di assemblaggio sono tra loro sufficientem ente simili da poterci perm ettere una descrizione generale.
7.3.1
Assemblatori a due passate
D ato che ogni p ro g ram m a in linguaggio assem blativo consiste in u n a serie d istruzioni scritte su u n ’unica riga, di p rim o acchito p o treb b e sem brare naturale avere un assem bla tore che legge u n ’istruzione, la traduce in linguaggio m acchina e scrive su file il codice ge nerato, oltre a produrre, se richiesto, un altro file co ntenente il listato. Q uesto procedim ento andrebbe rip etu to fino alla traduzione dell’in tero program m a. P u rtro p p o però questa stra tegia n on funziona. C onsideriam o il caso in cui la prim a istruzione sia una diram azione verso L L’assem blatore n o n può assem blare questa istruzione finché no n venga a conoscenza dell’indirizzo dell’istruzione L. D a to che questa istruzione potrebbe trovarsi verso la fine del program m a l’assem blatore è obbligato a leggere praticam ente tu tto il program m a per trovare il suo in dirizzo. Il fatto di utilizzare un sim bolo, L, p rim a ancora che sia stato definito, costituisce il
Capitolo 7
506
Livello del linguaggio assemblativo
p ro b le m a d ei rife rim e n ti in av an ti; in altre parole s! effettua u n riferim ento a un sim bolo la cui definizione ha luogo in un p u n to successivo del program m a. È possibile gestire i riferim enti in avanti iir d u e m odi. Prim o, l’assem blatore può leg gere il program m a sorgente d u e volte. C iascuna lettura del program m a sorgente è chiam ata p a ssa ta e i trad u tto ri che leggono d u e volte il program m a di in p u t sono detti a d u e pas sate. D u ra n te la p rim a lettura questi assem blatori raccolgono in una tabella tu tte le defini zioni dei sim boli, com prese le etichette delle istruzioni. Prima di iniziare la seconda passata si conoscono q u in d i Ì valori di tu tti i sim boli. In tal m odo non rim ane alcun riferim ento in avanti ed è possibile leggere ogni istruzione, assem blarla e generare il codice corrispondente. Q uesto approccio richiede una passata aggiuntiva per elaborare il program m a di input, m a è concettualm ente semplice. U n secondo approccio consiste nel leggere ii file in ingresso una sola volta, convertirlo in un form ato interm edio e m em orizzare in u n a tabella della m em oria questa form a in ter m edia. In seguito viene effettuata una seconda passata sulla tabella, invece che sul codice sorgente com e avveniva nel prim o approccio. Se è disponibile una sufficiente q u an tità di m e m oria (fisica o virtuale) questo approccio risparm ia il tem po dovuto alle operazioni di I/O . Se non viene richiesta la generazione del listato, è possibile ridurre al m inim o indispensa bile q u esta form a interm edia. In entram bi gli approcci, la prim a passata ha anche il com pito di salvare tu tte le defi nizioni di m acro e di espanderle q u an d o si in contrano le loro chiam ate. G eneralm ente quin d i la definizione dei sim boli e l'espansione delle m acro avvengono in u n ’unica passata.
7.3.2
Prima passata
La principale funzione della p rim a passata è quella di costruire la cosiddetta ta b e lla d e i sim b o li, co n ten en te i valori di tu tti i sim boli. U n sim bolo è un’etichetta, oppure u n valore, al quale è stato assegnato un nom e sim bolico attraverso una pseudoistruzione, com e BUFSIZE EQU 8192
Per assegnare nel cam po etichetta di un’istruzione un valore a un sim bolo, l’assem blatore deve conoscere quale indirizzo avrà tale istruzione d u ran te l'esecuzione del program m a. D uran te il processo di assemblaggio l’assem blatore m antiene una variabile, chiam ata IL C (Instruction Location Countcr, “contatore di locazioni delle istruzioni ”), per tener traccia delEtichetta
Codice operativo
Operandi
Commenti
MARIA:
MOV MOV MOV IMUL IMUL IMUL ADD ADD JMP
EAX, 1 EBX, ) ECX, K EAX. EAX EBX, EBX ECX. ECX EAX, EBX EAX, ECX DONE
EAX = 1 EBX = J ECX = K EAX = 1 x 1 EBX = J x J ECX = K x K EAX = 1 x 1+ J x J EAX = l x i + ) x J + K x K sa Ilo a DONE
ROBERTA:
MARIANNA: STEFANIA;
Figura 7.7
Lunghezza
ILC
S 6 6 2 3 3 2 2 5
100 105 111 117 119 122 125 127 129
II contatore di locazioni delle istruzioni (ILC) tiene traccia degli indirizzi delle locazioni di memoria in cui le istruzioni saranno caricate, in questo esempio le istruzioni prima di MARIA occupano 100 byte.
7.3
Identificatore
Figura 7.8
Valore
MARIA
100
ROBERTA
111
MARIANNA
125
STEFANIA
129
Processo di assemblaggio
507
Altre informazioni
Tabella dei simboli per il programma della Figura 7.7.
l’indirizzo che l’istruzione che sta assem blando avrà a tem po di esecuzione. A ll’inizio della prim a passata la variabile h a valore 0 e, com e m ostra la Figura 7.7, ogni volta che viene ela b o rata un’istm zione la variabile viene increm entata della sua lunghezza. L’esem pio m ostrato nella figura è relativo al Pentium 4 ed è più che sufficiente. Infatti nel caso di SPARC e di M otoro la il p rocedim ento è del tu tto analogo. Inoltre, se venisse ind etto un concorso per prem iare il linguaggio assem blativo m eno leggibile, quello di SPARC sarebbe il favorito. Nella m aggior parte degli assem blatori la prim a passata utilizza tre tabelle interne per i sim boli, le pseudoistruzioni e i codici operativi. Se necessario viene m a n ten u ta anche la ta bella dei letterali (si veda in seguito la definizione). C o m e m ostra la Figura 7.8, la tabella dei sim boli ha una linea per ciascun identifica tore (sim bolo). I sim boli vengono definiti q u an d o sono utilizzati com e etichette oppure m e dian te una definizione esplicita (per esem pio, EQU). O gni elem ento della tabella dei sim boli contiene il sim bolo stesso (o un p u n tato re a esso), il suo valore num erico e, in alcuni casi, altre inform azioni. Q ueste inform azioni aggiuntive possono com prendere: 1. la lunghezza del cam po d ati associato al sim bolo 2. i bit di rilocazione (il sim bolo cam bia valore se il program m a è caricato in un indirizzo diverso rispetto a quello che h a assunto l’assemblatore?) 3. se il sim bolo sia o m eno accessibile daH’csterno della procedura. La tabella dei codici operativi (la Figura 7.9 ne m ostra u n a parte) contiene u n elem ento per ciascun codice sim bolico (m nem onico) del linguaggio. C iascun elem ento contiene il codice sim bolico, due operandi, il valore num erico del codice operativo, la lunghezza dell’istruzione
Primo operando
Secondo operando
Codice esadecimale 37
1
6
ADD
EAX
immed32
05
5
4
ADD
reg
reg
01
2
19
AN D
EAX
immed32
25
5
4
AN D
reg
reg
21
1
19
Codice operativo AAA
Figura 7.9
Lunghezza deH'istruzione
Classe deH'istruzione
fórti della tabella dei codici operativi per un assem blatore del Pentium 4.
508
Capitolo 7
Livello del linguaggio assemblativo
e u n n u m ero di tipo (che p erm ette d i raggruppare i codici operativi a seconda del num ero e tipo di operandi). Se per esem pio un’istruzione a d d contien e com e prim o operando e a x e com e secondo u n a costante a 3 2 b it (im m ed 3 2 ), si utilizza il codice operativo 0x05 e la lunghezza dell’i struzione è d i 5 byte. In realtà le costanti che possono essere espresse con 8 o 16 b it utiliz zano codici operativi diversi, m a n o n sono m ostrali nella figura. Se A D D viene utilizzata con due registri com e operandi, allora la sua lunghezza risulta di 2 byte e il suo codice operativo è 0x01. La classe dell’istruzione 19 (il valore è arbitrario) dovrebbe essere assegnata a tu tte le com binazioni codice operativo-operando che seguono le stesse regole. Le istruzioni facenti parte di questa classe dovrebbero q u in d i essere elaborate allo stesso m o d o dell’istruzione A D D che usa due registri com e operandi. La classe dell’istruzione designa in realtà una procedura deH’assem blatore, richiam ata per elaborare tu tte le istruzioni di un certo tipo. A lcuni assem blatori p erm etto n o ai p rogram m atori di scrivere istruzioni che usano l’indirizzam ento im m ediato anche se nel linguaggio destinazione non esiste alcuna istruzione corrispondente. Per gestire queste istruzioni, chiam iam ole pseudoimmediate, l’assem blatore alloca alla fine del program m a la m em oria p er l’operando im m ediato e genera u n ’istruzione che fa riferim ento a esso. Per esem pio il m ainfram e IBM 3090 n o n ha istruzioni im m ediate, m a i program m atori possono co m u n q u e scrivere L 14,»F'5'
p er caricare il registro 14 con u n a parola costante ìl cui valore è 5. In questo m o d o il pro gram m atore n on è obbligato a scrivere esplicitam ente u n a pseudoistruzione per allocare una parola inizializzata a 5, indicando la sua etichetta e poi utilizzandola nell’istruzione L. Le co stanti p er le quali l’assem blatore riserva autom aticam ente la m em oria sono chiam ate le tte rali. I letterali, oltre a risparm iare u n po’ di scrittura di codice al program m atore, m iglio rano anche la leggibilità del program m a rendendo visibile il valore delle costanti all’interno delle istruzioni. La prim a passata dell‘assem blatore dovrebbe costruire una tabella di tu tti i letterali utilizzati nel program m a. Le nostre tre m acchine di esem pio sono dotate d 'istru zioni im m ediate e q u in d i i loro assem blatori non utilizzano i letterali. O ggigiorno è abba stanza com u n e che un assem blatore sia d o tato d ’istruzioni letterali, m a una volta n o n era così. E probabile che l’uso m olto diffuso dei letterali abbia reso evidente agli occhi dei p ro gettisti delle m acchine che l’indirizzam ento d iretto sia u n a buona idea. Se però è necessario utilizzare i letterali, allora d u ran te l’assemblaggio occorre m antenere u n a tabella in cui viene aggiunto u n elem ento ogni volta che si in co n tra u n letterale. D o p o la p rim a passata questa tabella viene ordinata e gli elem enti duplicati vengono rimossi. La Figura 7 .1 0 m ostra u n a p rocedura che po treb b e servire com e base per la prim a passata di u n assem blatore. Lo stile d i program m azione è autoesplicativo: i nom i delle p ro cedure so n o stati scelti per fornire una b u o n a indicazione delia loro funzione. L’aspetto p iù im p o rta n te è che la Figura 7 .1 0 rappresenta abbastanza bene la stru ttu ra della prim a passata. La p rocedura è sintetica, p u ò essere com presa facilm ente, e rende evidente quale deve essere il passo successivo, ovvero la scrittu ra del corpo delle procedure richiam ate al suo in te rn o . A lcune di queste procedure saranno relativam ente corte, com e check_Jòr_symbol che restituisce u n a stringa di caratteri rappresentante un sim bolo, se è presente, oppure n u l i in caso contrario. Altre procedure, com e get_Ungth_of_type 1 e get_Ungth_of_type2 potrebbero invece essere più lunghe e richiam are altre procedure. In generale il num ero di tipi non sarà
7.3
Processo di assemblaggio
509
public static void pass_one< ) { // Questa procedura è uno schema della prima passata di un semplice assemblatore. // indicatore che interrompe la prima passata boolean m o rejnput = true; // campi dell’istruzione String line, symból, literal, opcode; //variabili generiche int location_counter, length, value, type; // la fine dell'input final int EN D.STATEM ENT = -2; location.counter = 0; initialize_tables( );
// assembla la prima istruzione in 0 // inizializzazione generale
while(more.input) | line = read_next_line( ); length = 0; type = 0;
// m orejnput viene impostato a falso da END // preleva una linea di input // * byte nell'istruzione //di quale tipo (formato) è l'istruzione
if (line_is_not_comment(line)) I // alla linea è associata un'etichetta? Symbol = checkjor.sym bold ine); // se sì, si registra il simbolo e il valore if (symból != nuli) enter.new.symboNsymboI, location.counter); literal = check.for.literal(line); // la linea contiene un letterale? if (literal 1= nuli) // se si, lo si inserisce nella tabella enter_new_literal(literal); // Si determina ora il tipo del codice operativo. .1 indica un codice operativo inesistente opcode = extract_opcode(line); // localizza il nome mnemonico del codice operativo type = search_opcode_table(opcode); // trova i I formato, p.es. O P REC I , REG2 if (type < 0) //se non è un codice operativo, è una pseudoìstruzione? type = 5earch_pseudo_table(opcode); switch(type) ( //determina la lunghezza di questa istruzione case 1: length = get_length_of_type1(line); break; case 2: length = get_length_of_type2(line); break; // altri casi
) write_temp_file(type. opcode, length, line); location_counter = location counter + length; if (type == EN D.STATEM ENT) { m o rejnput = false; rewind_tem pjor_pass_two( ); s o r t j itera l_table( ); remove_redundant literals< );
// informazioni utili per la seconda passata // aggiorna loc_ctr // l'input è terminato? //se sì, si eseguono delle operazioni finali // come riportare al punto di inizio il file temporaneo //e ordinare la tabella dei letterali // e rimuovere da questa i duplicati
f
Figura 7.10
Prima passata di un semplice assemblatore.
ovviam ente lim itato a due, m a d ipenderà dal linguaggio che si sta assem blando e da quanti tipi d ’istruzioni è com posto. O ltre a facilitarne la stesura, stru ttu rare i program m i in questo m odo presenta altri van taggi. Se più persone lavorano alla scrittura dell’assem blatore le varie procedure possono es sere distrib u ite fra tu tti i program m atori. Inoltre tu tti i dettagli (più difficoltosi) riguardanti la lettu ra dell’in p u t rim angono nascosti nella procedura read next line. Se dovessero cam biare, per esem pio a causa di u n a m odifica del sistema operativo, sarebbe necessario m odi ficare solam ente u n a delle procedure ausiliarie, m entre non occorrerebbe effettuare alcuna m odifica alla procedura pass one. D u ra n te la prim a passata viene analizzata ogni linea per trovare il codice operativo, de term inare il suo tip o e calcolare la lunghezza dell’istruzione. Q ueste inform azioni sono ne cessarie anche per la seconda passata e q u in d i p u ò essere utile trascriverle esplicitam ente in
510
Capitolo 7
Livello del linguaggio assemblativo
m od o da evitare, nella passata successiva, d i analizzare nuovam ente la linea d a zero. Tuttavia, riscrivere il file di in p u t genera un m aggior num ero di operazioni di I/O . La scelta tra ef fettuare più operazioni d i I /O per elim inare urta seconda analisi delle istruzioni oppure ef fettuare m eno operazioni di I/O , ma più analisi delle linee di codice, è condizionata da vari fattori, tra cui la velocità della C P U rispetto a quella del disco e l’efficienza del file system. In questo esem pio scriverem o un file tem poraneo contenente il tipo, il codice operativo, la lunghezza e l’effettiva linea di input. La seconda passata legge questa linea al posto di quella presente nel file di in p u t. La prim a passata term ina q u an d o viene letta la pseudoistruzione END. Se necessario, a questo p u n to possono essere ord in ate le tabelle dei sim boli e dei letterali. Q uest’ultim i, dopo essere stati ordinati, possono essere controllati al fine di individuare, ed eventualm ente ri m uovere, gli elem enti doppi.
7.3.3
Seconda passata
La fun zio n e della seconda passata è la generazione del pro g ram m a oggetto e l’eventuale stam pa del listato. O ltre a ciò la seconda passata deve generare delle inform azioni richie ste dal lin k er p er collegare in u n unico file eseguibile le procedure assem blate in m o m en ti d istin ti. La Figura 7.11 m ostra u n a bozza della pro ced u ra che im p lem en ta la seconda passata. Le operazioni c o m p iu te dalla seconda p assata sono più o m eno sim ili a quelle della prim a: le linee vengono lette ed elaborate u n a alla volta. D ato che all’inizio di ogni linea abbiam o scritto (sul file tem poraneo) il tip o , il codice operativo e la lunghezza, queste infor m azioni vengono lette in m odo da risparm iare parte della fase di analisi dell’in p u t. Il la v o ro p rin c ip a le della g en erazio n e del co d ice è realizzato dalle p ro c e d u re eval_typel, eval_type2, e così via. C iascuna di queste funzioni gesrisce un particolare schem a, per esem pio u n codice operativo e d u e registri com e o perandi, genera il codice b in ario corri sp o n d en te all'istruzio n e e in fin e lo restituisce all’in te rn o della variabile code. Q u e sto co dice viene poi scritto su file. C o n ogni p ro b ab ilità la funzione u>rite_output accum ula in m em oria il codice bin ario g enerato e lo scrive su file in grosse porzioni per ridurre il traf fico dati verso il disco. L’istruzione sorgente originale e il codice oggetto generato da questa (in form ato esadecim ale) possono q u in d i essere stam pati o p p u re m em orizzati in u n buffer per rim andarne la stam pa. D o p o aver m odificato ILC la seconda passata preleva l’istruzione successiva. Finora si è assunto che il pro g ram m a sorgente non contenga alcun errore. C hiu n q u e abbia mai scritto un program m a, in qualsiasi linguaggio, sa bene q u an to sia realistica una sim ile afferm azione. A lcuni fra gli errori p iù co m u n i sono: 1. u n sim bolo è stato utilizzato senza essere stato definito 2. un sim bolo è stato definito p iù d i u n a volta 3. il nom e nel cam po del codice operativo non è un codice operativo lecito 4. un codice operativo non è seguito da un n u m ero sufficiente di operandi 5. u n codice operativo è seguito da u n num ero eccessivo di operandi 6. u n num ero ottale contiene le cifre 8 o 9
7.3
Processo di assemblaggio
511
public static void pass_two( 11 // Questa procedura è uno schema della seconda passata di un semplice assemblatore. // indicatore che interrompe la seconda passata booleanmore_input = tuie; //campi dell'istruzione String line, opcode; t t variabili varie int location counter, length, type final ini END.STATEMENT = -2; // segnala la fine dell'Input // numero massimo di byte di codice per istruzione final int M AX_CO DE = 16; // contiene il codice generato da un'istruzione bvte code 11 = new byte[MAX_CODE |; location.counter = 0;
//assembla la prima istruzione in 0
while (more_mput) { type = read_type( ); opcode = reacLopcodei ); length = readjengthi ); line = read jin el ):
// m orejnput viene impostato a falso da END Il preleva il campo tipo della linea successiva Il preleva il campo codice operativo delia linea successiva H preleva il campo della lunghezza della linea successiva // preleva la linea attuale dell'input
Il il tipo 0 è per le linee di commento if (type! = 0) ( // genera il codice di output switchitype) ( case 1: evaljypeliop cod e. length. line, code»; break; case 2: eval_type2(opcode, length, line, code); break; // altri casi
i wrÌte_output(code); vvrite_listing(code, line); location_cóunter = location counter + length; if ilype - FND_STAT£MENT) { iriore_ input = false; finish_upl );
//scrive il codice binario //stampa una linea del listato // aggiorna !oc_ctr Il l'input è terminato? Il se sì, si eseguono alcune operazioni finali Il varie e conclusione
)
Figura 7.11
Seconda passata di un semplice assemblatore.
7. un registro è stato utilizzato in m odo scorretto (per esem pio, una diram azione verso un registro)
8. manca la pseudoistruzione END. I pro g ram m ato ri so n o m o lto ingegnosi nel trovare sem pre nuovi tipi di errori da co m m ettere. Q uelli d o v uti ai sim boli n o n d efin iti spesso sono o riginati da errori di b a ttitu ra e q u in d i un assem blatore a stu to p o treb b e provare a sostituire il sim bolo non definito con quello che, fra quelli che so n o stati c o rrettam en te definiti, più gli assom iglia. Per la m ag gior p arte degli altri errori però c’è b en poco da fare. Q u a n d o u n assem blatore in contra u n ’istru zio n e errata si lim ita a stam p are u n m essaggio di errore e cerca di c o n tin u are l’assem blaggio.
7.3.4
Tabella dei simboli
D u ra n te la p rim a passata l’assem blatore accum ula inform azioni sui sim boli e i loro valori. Tali inform azioni devono essere m em orizzate nella tabella dei sim boli per essere utilizzate d u ran te la seconda passata. O ra p ren d erem o brevem ente in esame alcuni tra i vari m odi di organizzare la tabella dei sim boli. In tu tù i casi si cerca di sim ulare u n a m e m o ria asso cia
512
Capitolo 7
Livello dei linguaggio assemblativo
tiva. che co n cettu alm en te n o n è altro che u n insiem e di coppie (sim bolo, valore). D ato un sim bolo, la m em oria associativa deve fornire il valore corrispondente. La tecnica p iù semplice consiste nell’im plem entare la tabella dei simboli com e un vettore di coppie, in cui il prim o elem ento è il sim bolo (oppure un puntatore a esso) e il secondo è il valore (oppure un puntatore a esso). Q u a n d o si vuole recuperare un sim bolo, la routine della tabella dei simboli effettua sem plicem ente una ricerca lineare all’interno deU’array finché non trova l’elem ento desiderato. Q uesto m etodo è facile da program m are, m a allo stesso tem po è lento, d ato che per ciascuna ricerca occorre esaminare, in m edia, m età della tabella. U n altro m odo per organizzare la tabella dei sim boli è quello di ordinarla rispetto ai sim boli e di utilizzare u n algoritm o di ric e rc a d ic o to m ic a per cercare il sim bolo desiderato. Q uesto algoritm o funziona co n fro n tan d o il sim bolo con l’elem ento centrale della tabella. Se il sim bolo precede alfabeticam ente l'elem ento centrale della tabella, occorrerà continuare la ricerca nella p rim a m età della tabella. Se invece il sim bolo segue l’elem ento centrale, oc correrà cercarlo nella seconda m età della tabella. La procedura term ina q u an d o l’elem ento centrale della tabella è uguale al sim bolo cercato. Andy Anton Cathy Dick Erik Frane es Frank Cerrit Hans Henri Jan Jaco Maanen Reind Roel Willem Wiebren
14025 31253 65254 54185 47357 56445 14332 32334 44546 75544 17097 64533 23267 63453 76764 34544 34344
0 4 5 0 6 3 3 4 4 2 5 6 0 1 7 6 1
la)
Tabella Hash
Figura 7.12
Tabella concalenata
Codifica hash. (a) Simboli, valori e codici hash derivati dai simboli, (b) Tabella hash a otto elementi con liste concatenate di simboli e valori.
7.4
Collegamento e caricamento
513
A ssum endo che l’elem ento centrale n on sia uguale al sim bolo cercato, possiamo co m unqu e sapere in quale m età della tabella individuarlo. Si può quindi applicare nuovam ente la ricerca dicotom ica nella m età corretta della tabella; ciò perm etterà di trovare il sim bolo oppure di conoscere in quale q u arto della tabella si trovi. A pplicando ricorsivam ente l’algo ritm o è possibile com pletare una ricerca aH’in tern o di una tabella di n elem enti in log2 n ten tativi. Q uesta tecnica è ovviam ente m olto p iù veloce rispetto alla ricerca lineare, m a richiede che sia conservato l’o rdine degli elem enti della tabella. U n m odo com pletam ente differente per sim ulare una m em oria associativa è la tecnica conosciuta con il nom e di codifica hash o hashing. In questo approccio occorre definire una funzione “hash” che m appa i sim boli nelTintervallo di interi compreso tra 0 e k — I . U na pos sibile funzione consiste nel moltiplicare tra loro i codici ASCII dei caratteri del simbolo, igno rando u n eventuale overflow, e considerando com e risultato il resto della divisione per ^ d i que sto valore oppure il risultato della divisione rispetto a un num ero prim o. In realtà p u ò andar bene qualsiasi funzione dell’in p u t che fornisca una distribuzione uniform e dei valori hash. I sim boli possono essere m em orizzati in u n a tabella com posta da k secchielli ( bucket) num erati da 0 a k - 1. O gni posizione / della tabella hash p u n ta a una lista concatenata in cui sono me morizzate le coppie (simbolo, valore) il cui valore hash del sim bolo vale i. C o n n simboli e una tabella hash co n k posizioni, una lista avrà u n a lunghezza m edia pari a n /k . Se si sceglie k ap prossim ativam ente uguale a n, allora in m edia è possibile localizzare i simboli con u n unico passo di ricerca. M odificando k è possibile ridurre la dim ensione della tabella a spese però della velocità dell’operazione di ricerca. L a codifica hash è illustrata nella Figura 7.12.
7.4
Collegamento e caricamento
La m aggior parte dei program m i è com posta da più di u n a procedura. G eneralm ente Ì com pilatori e gli assem blatori trad u co n o u n a p rocedura alla volta e m em orizzano su disco il ri sultato della traduzione. Prim a che il p rogram m a possa essere eseguito è necessario recupe rare tu tte le procedure e collegarle fra loro in m odo appropriato. Inoltre, in assenza di m e m oria virtuale, occorre caricare in m em oria centrale il program m a o tten u to dal collega m ento delle procedure. I program m i che eseguono questi passi sono chiam ati in vari m odi, tra cui linker, linking Ioader e linkage editor. La traduzione com pleta di un program m a sorgente richiede d u e passi d istin ti, com ’è m ostrato nella Figura 7.13: 1. com pilazione o assemblaggio delle procedure sorgenti 2. collegam ento dei m oduli oggetto. Il prim o passo viene eseguito dal com pilatore o dall’assem blatore, e il secondo dal linker. La traduzione che trasform a una procedura sorgente in un m odulo oggetto costituisce un cam biam ento di livello, d ato che il linguaggio sorgente e quello destinazione han n o un diverso insiem e d ’istruzioni e usano una notazione differente. Il processo di collegam ento invece non rappresenta un cam biam ento di livello, dato che sia l’in put del linker sia il suo o u tp u t sono due program m i p er la stessa m acchina virtuale. La funzione del linker è quella di unire le procedure trad o tte separatam ente e di collegarle tra loro in m odo da poterle ese guire com e un’unica unità chiam ata programma eseguibile binario. In M S-DOS, Windows
514
Capitolo 7
Figura 7.13
Livello del linguaggio assemblativo
Generazione tramite un linker di un programma eseguibile binario a partire da un gruppo di procedure sorgente tradotte indipendentemente.
9 5 /9 8 e N T i m oduli oggetto sono caratterizzati dall’estensione .obj e i program m i esegui bili binari dall’estensione .exe. Tn U N IX i m oduli oggetto h an n o invece l’estensione .o, m en tre i program m i eseguibili binari n on h an n o alcuna estensione. Esiste u n b u o n m otivo per cui i com pilatori e gli assem blatori traducono ciascuna p ro cedura sorgente com e un’en tità separata. Se un com pilatore, o un assem blatore, dovesse leg gere u n a serie di procedure sorgente c produrre d irettam ente un program m a in linguaggio m acchina p ro n to per essere eseguito, allora la m odifica anche solo di un’istruzione in una delle procedure sorgente richiederebbe una nuova traduzione di tu tte le altre procedure. Se si usa la tecnica dei m oduli oggetto separati (m ostrata nella Figura 7.13) è necessa rio ritradurre soltanto la procedura m odificata e non quelle rim aste invariate, anche se oc corre ricollegare nuovam ente tra loro i m oduli oggetto. Di solito la fase di collegam ento è m olto più veloce della traduzione e perm ette q u in d i di risparm iare una grande q u an tità di tem po d u ran te lo sviluppo di un program m a. Q u esto guadagno risulta particolarm ente im p o rtan te q u an d o si h an n o centinaia o migliaia di m oduli.
7.4.1
Compiti del linker
N el processo assemblativo il co ntatore di locazioni delle istruzioni viene im postato a 0 all’i nizio della p rim a passata. Q u esto passo corrisponde ad assum ere che il m odulo oggetto sarà collocato, d u ra n te l’esecuzione, all’indirizzo (virtuale) 0. La Figura 7 .14 m ostra q u attro m o duli oggetto per una m acchina generica. In questo esem pio ciascun m odulo inizia con u n 'i struzione BRANCH che porta, all’interno del m odulo, all’istruzione MOVE. Per poter eseguire il program m a il linker p o rta in m em oria centrale i m oduli oggetto al fine di form are l’im m agine del program m a eseguibile binario, com e m ostra la Figura 7.15(a). L’idea è di creare all’interno del linker un’im m agine esatta dello spazio d ’indirizzam ento vir tuale del program m a eseguibile e d i posizionare tu tti i m oduli oggetto nelle locazioni cor rette. Se non c’è sufficiente m em oria per form are l’im m agine è possibile utilizzare un file del disco. In genere una piccola sezione della m em oria a partire dall’indirizzo zero viene utiliz zata per i vettori di interrupt, la com unicazione con il sistema operativo, la cattura dei p u n tatori n on inizializzati e altri scopi. Per questo m otivo i program m i di solito iniziano a par tire da una locazione maggiore di 0. Nella figura abbiam o (arbitrariam ente) fatto iniziare i program m i all’indirizzo 100.
7.4
400
Modulo oggetto A
Collegamento e caricamento
600
300
CALLB
500
200
MOVE P TO X
400 300
100
500
BRANCH TO 200
200
Modulo oggetto C
100
515
Modulo oggetto B
CALLC
MOVE Q TO X
BRANCH TO 300 400
CALLO Modulo oggetto D 300
300 200
MOVE R TO X
MOVE S TO X
100
100
BRANCH TO 200
Figura 7.14
200
BRANCH TO 200
Ogni modulo ha il proprio spazio d'indirizzi, che inizia da 0.
Il p rog ram m a della Figura 7.15(a) n o n è ancora p ro n to per essere eseguito, anche se è ca ricato all’in tern o d ell'im m agine del file eseguibile binario. C o nsideriam o che cosa succe derebbe se l’esecuzione com inciasse con l’istruzione che si trova all’inizio del m odulo A. Il p rogram m a n o n effettuerebbe c o rrettam en te il salto all’istruzione MOVE, dato che quella istruzione si trova ora all’indirizzo 300. In realtà tu tte le istruzioni che fanno riferim ento alla m em oria fallirebbero p e r la stessa ragione. O ccorre chiaram ente trovare una soluzione al problem a. Il problema della rilocazione si verifica perché i m oduli della Figura 7 .14 hanno spazi degli indirizzi separati. Su una m acchina con u n o spazio degli indirizzi segm entato, com e il Pentium 4, ogni m odulo potreb b e teoricam ente avere il proprio spazio degli indirizzi al l’interno del proprio segm ento. In ogni caso l’unico sistema operativo per Pentium 4 che supporta questa possibilità è O S /2 ; tu tte le versioni di W indow s e di U nix supportano so lam ente u n o spazio degli indirizzi lineare e q u in d i tu tti i m oduli oggetto devono essere uniti fra loro al suo interno. Inoltre neanche le istruzioni per la chiam ata di procedure della Figura 7.15(a) funzio nan o correttam ente. N ella figura si vede che all’indirizzo 400 il program m atore prova a chiam are il m odulo oggetto B\ l’assem blatore però non ha m odo di sapere quale indirizzo inserire nsll istruzione CALL b , d ato che ciascuna procedura è stata tradotta indipendente m ente. L’indirizzo del m odulo oggetto B n o n è infatti conosciuto fino al m o m en to del col-
7
Livello del linguaggio assemblativo
1900 1800
1900 MOVE S TO X
1700 1600 1500
Modulo oggetto D
MOVE S TO X
1700
BRANCH TO 200
1600
CALL D
1500
1400
1300
"1800
BRANCH TO 1800
CALL 1600
1400 MOVE R T O X
Modulo oggetto C
1200
1300
MOVE R TO X
1200
1100
BRANCH TO 200
1100
BRANCH TO 1300
1000
CALL C
1000
CALL 1100
900
800
900 MOVE Q TO X
Modulo oggetto B
800
700
700
600
600
500
BRANCH T O 300 500
400
CALL B
300
MOVE P TO X
200
100
0 7.15
Modulo oggetto A
MOVE Q TO X
BRANCH TO 800
400
CALL 500
300
MOVE P TO X
200 BRANCH TO 200
100
BRANCH TO 300
0
(a) I moduli oggetto della Figura 7.14 dopo essere stati posiziona binaria, ma prima di essere rilocati e collegati, (b) Gli stessi modi aver effettuato il collegamento e la rilocazione.
:nto. Questo è il problema dei riferimenti esterni. I due problen 3 sem plice dal linker.
7.4
Collegamento e caricamento
517
Il linker unisce gli spazi degli indirizzi separati dei diversi m oduli oggetto all’interno di un unico spazio lineare degli indirizzi seguendo questi q u attro passi: 1. costruisce una tabella di rutti i m oduli oggetto e delle loro lunghezze 2. in base a questa tabella assegna u n indirizzo di partenza per ciascun m odulo 3. cerca tu tte le istruzioni che fanno riferim ento alla m em oria e aggiunge a ciascuna di loro una c o sta n te d i rilo c a z io n e uguale all’indirizzo di partenza del suo m odulo 4. cerca tu tte le istruzioni che fanno riferim ento ad altre procedure e inserisce in quei punti gli indirizzi delle procedure corrispondenti. La tabella seguente fornisce nom e, lunghezza e indirizzo iniziale di tu tti i m oduli della Figu ra 7.15. Modulo A B C D
Lunghezza
Indirizzo iniziale
400 600 500 300
100 500 1100 1600
7.4.2 Struttura di un modulo oggetto Spesso i m oduli oggetto sono com posti da sei parti, com e m ostra la Figura 7.16. La prim a parte contiene il nom e del m odulo, inform azioni necessarie al linker (com e le lunghezze delle singole parti del m odulo), e in alcuni casi la data di assemblaggio. La seconda parte è u n a lista di sim boli definiti all’in tern o del m odulo al quale possono fare riferim ento altri m oduli; i sim boli sono associati ai valori corrispondenti. Se per esem pio il m od u lo consiste di u n a procedura chiam ata bigbug, il prim o elem ento della tabella conterrà la stringa di caratteri “bigbug” seguita dall’indirizzo nel quale si trova la procedura. Il program m atore in linguaggio assemblativo utilizza la pseudoistruzione PUBLIC della Figu ra 7.3 per indicare quali sim boli devono essere dichiarati com e p u n ti d ’ingresso.
Fine del modulo Dizionario di ri locazione
Istruzioni macchina e costanti
Tabella dei riferimenti esterni Tabella dei punti di ingresso Identificativo
Figura 7.16
Struttura interna di un m odulo oggetto prodotto da un traduttore.
518
Capitolo 7
Livello del linguaggio assemblativo
La terza parte del m o d u lo oggetto com prende una lista di sim boli utilizzati nel m o dulo, m a definiti in un altro, e anche u n a lista che indica quali sim boli sono utilizzati dalle varie istruzioni m acchina. Q u esta lista perm ette al linker di inserire gli indirizzi corretti nelle istruzioni che usano sim boli esterni. U n a procedura può chiam are altre procedure, tradotte indip en d en tem en te, dichiarando com e esterni i loro nom i. II program m atore in linguaggio assem blativo indica quali sim boli devono essere dichiarati com e sim b o li e stern i utilizzando u n a pseudoistruzione (per esem pio la EXTERN della Figura 7.3). In alcuni calcolatori i p u n ti d ’ingresso e i riferim enti esterni sono com binati in un’unica tabella. La quarta parre del m odulo oggetto è costituita dal codice assem blato e dalle costanti. Q u esta è l’unica parte del m o d u lo oggetto che verrà caricata in m em oria per essere eseguita. Le altre parti saranno invece utilizzate dal linker ed elim inate prim a che inizi l’esecuzione. La q u in ta parte è il dizionario di rilocazione. C om ’è possibile vedere nella Figura 7.15 occorre aggiungere una costante di rilocazione alle istruzioni co n ten en ti dei riferim enti a in dirizzi di m em oria. Il linker, ispezionando la q uarta parte del m odulo, non ha m odo di sa pere quali parole di dati contengano istruzioni m acchina e quali contengano costanti; que sta tabella gli fornisce le inform azioni sugli indirizzi che devono essere rilocati. Q ueste infor m azioni porrebbero form are una tabella di b it, con un bit per ogni indirizzo potenzialm ente da rilocare, o p p u re una lista esplicita degli indirizzi da rilocare. La sesta parte è com posta d a u n identificatore della fine del m odulo, dall’indirizzo a partire dal quale bisogna iniziare l’esecuzione e, in alcuni casi, da una checksum per rilevare gli errori che possono essere avvenuti d u ran te la lettura del m odulo. La m aggior parte dei linker richiede d u e passate. D u ran te la prim a il linker legge tu tti i m oduli oggetto e costruisce una tabella con i nom i e le lunghezze dei m oduli, oltre a una tabella globale di sim boli conten en ti tu tti i p u n ti d ’ingresso e i riferim enti esterni. D urante la seconda passata i m oduli oggetto vengono letti, rilocati e collegati un o alla volta.
7.4.3
Rilocazione a tempo del binding e dinamica
In u n sistem a m ulriprogram m ato u n program m a può essere letto e p o rtato nella m em oria centrale, eseguito p er un breve periodo di tem po, riportato su disco e poi riletto per essere eseguito u n ’altra volta. In u n sistem a di grandi d im ensioni, quan d o è attivo un n um ero ele vato di program m i, è difficile avere la certezza che il program m a venga letto e caricato ogni volta nelle stesse locazioni. La Figura 7 .1 7 m ostra che cosa succederebbe se il program m a già rilocato della Figu ra 7 .15(b) venisse caricato all’indirizzo 4 0 0 invece che all’indirizzo 100 in cui il linker l’a veva inserito originariam ente. T utti gli indirizzi di m em oria risulterebbero errati e, per di più , n o n si potrebbero riutilizzare le inform azioni di rilocazione, cancellate m olto tem po prim a. A nche se queste fossero ancora disponibili, il costo per rilocare tu tti gli indirizzi ogni volta che u n program m a viene riportato in m em oria centrale sarebbe troppo alto. Il problem a di spostare program m i che sono già stati collegati e rilocati è p rofonda m ente connesso al m o m en to in cui viene com pletato il collegam ento finale tra i nom i sim bolici e gli indirizzi assoulti della m em oria fisica. U n program m a appena scritto contiene dei nom i sim bolici per gli indirizzi di m em oria, per esem pio BR L. Il m o m en to nel quale si determ ina l’effettivo indirizzo della m em oria centrale corrispondente a L è chiam ato te m p o del b in d in g (“tem po del collegam ento”).
7.4
Collegamento e caricamento
2200 2100
MOVE S TO X
2000
1900
1800
Modulo >■ oggetto D
BRANCH TO 1800
CALL 1600
1700 > 1600
MOVE R TO X
Modulo oggetto
C
1500 1400
B R A N C H T O 1 300
1300
CALL 1100
1200
1100
MOVE Q TO X
>
Modulo oggetto B
1000
900 800
BRANCH TO 800
700
CALL 500
600
MOVE P TO X
Modulo ^ oggetto A
500 400
BRANCH TO 300
0 Figura 7.17
Programma binario rilocato della Figura 7.15(b) spostato all'indirizzo 300. Molte istruzioni si riferiscono ora a indirizzi di memoria errati.
519
520
Capitolo 7
Livello del linguaggio assemblativo
Esistono alm eno sei possibilità: 1. q u an d o il program m a viene scritto 2. q u an d o il program m a viene trad o tto 3. q u an d o il program m a viene collegato, m a prim a che sia caricato 4 . q u an d o il program m a viene caricato 5. q u an d o viene caricato u n registro base utilizzato per l’indirizzam enro 6. q u an d o viene eseguita l’istruzione co n ten en te l’indirizzo. Se u n ’istruzione co n tenente u n indirizzo di m em oria viene spostata d o p o il collegam ento, il suo riferim ento alla m em oria risulta errato (assum endo che anche l’oggetto al quale fa ri ferim ento sia stato spostato). Se il trad u tto re p ro duce com e o u tp u t un eseguibile binario, il m om ento del collegamento coincide con quello della traduzione e in questo caso il program m a deve essere eseguito all’indirizzo assunto dal traduttore. Il m etodo descritto nel paragrafo pre cedente lega i no m i sim bolici agli indirizzi assoluti d u ran te la fase di collegam ento; questa è la ragione per cui gli spostam enti dei p rogram m i effettuati dopo il collegam ento falliscono (com e m ostra l’esem pio della Figura 7.17). La questione solleva due tipi di problem i. Il prim o riguarda il m om ento in cui i nom i sim bolici vengono legati agli indirizzi virtuali, m entre il secondo riguarda il m o m en to in cui gli indirizzi virtuali vengono legati agli indirizzi fisici. Il collegam ento si può dire com pletato solo dopo che queste due operazioni sono state term inate. Q u an d o il linker riunisce i diversi spazi degli indirizzi crea in realtà u no spazio virtuale di indirizzi. La rilocazione e il collega m ento h an n o l’effetto di collcgare i nom i simbolici con specifici indirizzi virtuali. Q uesta os servazione è vera a prescindere dal fatto che venga o m eno utilizzata la m em oria virtuale. A ssum iam o p er il m o m en to che lo spazio degli indirizzi della Figura 7.15(b) sia pagi nato. È chiaro che gli indirizzi virtuali corrispondenti ai nom i sim bolici A, B, C e D sono già stati determ inati, anche se i loro indirizzi fìsici dipenderanno, in ogni m om ento in cui verranno utilizzati, dal co n ten u to della tabella delle pagine. U n program m a eseguibile bi nario è in realtà un collegam ento tra nom i sim bolici e indirizzi virtuali. Q ualsiasi m eccanism o che p erm etta di m odificare facilm ente la corrispondenza degli indirizzi virtuali negli indirizzi fìsici della m em oria faciliterà lo spostam ento dei program m i all’interno della m em oria principale, anche d o p o che essi sono stati legati a u n o spazio de gli indirizzi virtuali. U no di questi m eccanism i è la paginazione. D opo che un program m a è stato spostato all’in tern o della m em oria centrale occorre m odificare solam ente la sua ta bella delle pagine e non il program m a stesso. U na seconda tecnica consiste nell’uso di un registro di rilocazione d u ran te l’esecuzione (com e avveniva per il C D C 6 6 0 0 e i suoi successori). Sulle m acchine che utilizzano questa tecnica il registro p u n ta sem pre all’indirizzo fisico della m em oria in cui inizia il program m a corrente. Il registro di rilocazione viene som m ato via hardw are a tu tti gli indirizzi, prim a che essi siano inviati alla m em oria. L’intero processo di rilocazione risulta cosi trasparente ai program m i urente. Q u a n d o viene spostato un program m a il sistem a operativo deve aggior nare il registro di rilocazione. Q u esto m eccanism o è però m eno generale rispetto alla pagi nazione, d ato che l’intero program m a deve essere spostato com e una singola u n ità (oppure com e due, nel caso in cui vi siano registri di rilocazione separati per il codice e per i dati, com e nel processore Intel 8088).
7.4
Collegamento e caricamento
521
Sulle m acchine in grado di effettuare riferim end alla m em oria relativi al contatore d ’i struzioni è possibile ricorrere a u n terzo meccanism o. Grazie a questa funzionalità è possibile sfruttare il fatto che m olte istruzioni di salto sono relative al valore di PC . O g n i volta che si sposta u n program m a nella m em oria centrale occorre modificare solam ente il P C . U n pro gram m a in cui rutti i riferim enti alla m em oria sono relativi al PC oppure sono assoluti (per esempio, gli indirizzi assoluti dei registri dei dispositivi di I/O ) è detto indipendente dalla posizione. U na procedura indipendente dalla posizione può essere collocata in qualsiasi punto dello spazio degli indirizzi virtuali senza bisogno di effettuare la rilocazione.
7.4.4
Collegamento dinamico
Nella strategia di collegam ento descritta nel Paragrafo 7.4.1 tu tte le procedure che un pro gram m a potrebbe richiam are sono collegate p rim a che abbia inizio l’esecuzione. Se si com pletano ru tti i collegam enti p rim a dell’esecuzione, non si trae pieno vantaggio dalla m em o ria virtuale, di cui un calcolatore p uò essere dotato. M olti program m i contengono proce dure, chiam ate soltanto in particolari, e infrequenti, circostanze. I com pilatori, per esempio, hanno alcune procedure per tradurre istruzioni utilizzate raram ente, e altre il cui co m pito è quello di gestire condizioni di errore che si verificano di rado. U n m o d o p iù flessibile per collegare procedure com pilate separatam ente è quello di col legarle nel m o m en to in cui ciascuna procedura viene caricata. Q uesto processo è conosciuto con il nom e di collegam ento dinamico. Il prim o calcolatore che ha im piegato questa tec nica è stato M U L T IC S , la cui pionieristica im plem entazione è, sotto alcuni aspetti, ancora ineguagliata. N ei paragrafi successivi analizzerem o com e avviene il collegam ento dinam ico in alcuni sistemi.
Collegamento dinamico in MULTICS L’im plem entazione di M U L T IC S del collegam ento dinam ico associa a ciascun program m a un segm ento di collegam ento co n ten en te u n blocco d ’inform azioni per ciascuna proce d ura del program m a. Q u e sto blocco d ’inform azioni inizia con una parola riservata per l’in dirizzo v irtuale della p ro ced u ra, seguita dal nom e della p ro cedura, m em orizzato com e stringa di caratteri. Q u a n d o si utilizza il collegam ento d inam ico le chiam ate di procedura nel linguaggio sorgente vengono trad o tte in istruzioni che indirizzano, in m odo indiretto, la prim a parola del blocco di collegam ento (la Figura 7.18(a) ne m ostra u n esem pio). Il com pilatore riem pie questa parola o con un indirizzo non valido o ppure con una speciale stringa di b it che determ ina un’eccezione. Q u a n d o si richiam a u n a procedura che fa parte di un altro segm ento, il tentativo di in dirizzare la parola non valida solleva nel linker dinam ico un’eccezione. Il linker legge quindi la stringa di caraneri che si trova nella parola che segue l’indirizzo non valido e cerca una pro cedura con questo nom e all’interno della directory dell’utente. V iene qu in d i assegnato u n in dirizzo virtuale a questa procedura, di solito aH’intcrno del proprio segm ento privato; inol tre, com e m ostra la Figura 7.1 8 (b ), questo indirizzo virtuale viene scritto nel segm ento di collegam ento, al posto dell’indirizzo non valido. Successivamente viene rieseguita l’istruzione che ha provocato l’errore di collegam ento e ciò perm ette al program m a di continuare la propria esecuzione dal p u n to in cui si trovava prim a che venisse sollevata l’eccezione.
522
Capitolo 7
Figura 7.18
Livello del linguaggio assemblativo
Collegamento dinamico, (a) Prima che EARTHsia chiamata, (b) Dopo che EARTH è stata chiamata e collegata.
Tutti i successivi riferimenti alla procedura avverranno senza provocare errori di collegamento, d ato che la p rim a parola del segm ento di collegam ento contiene ora un indirizzo virtuale valido. D a ciò ne consegue che il linker d inam ico viene invocato solam ente la prim a volta in cui viene richiam ata una procedura e n on d u ran te le chiam ate successive.
7.4
Collegamento e caricamento
523
Collegamento dinamico in Windows T utte le versioni del sistem a operativo W indow s, com preso N T, su p p o rtan o e sfruttano pie nam en te il collegam ento dinam ico. Allo scopo viene utilizzato un form ato di file chiam ato D L L (Dynamic Link Library, “libreria a collegam ento dinam ico”). Le D LL possono conte nere procedure, dati o p p u re en tram b i, e sono com unem ente utilizzate per perm ettere a due o più processi di condividere librerie di dati e procedure. M olte D LL h an n o l’estensione .dii, m a vengono utilizzate anche estensioni diverse, com e .drv (per le librerie di driver) e .fon (per le librerie di caratteri). N ella sua form a p iù com une una D L L è u n a libreria com posta da un gruppo di p ro cedure che possono essere caricate in m em oria e alle quali possono accedere più processi nello stesso istante. La Figura 7 .1 9 rappresenta due program m i che condividono un file D LL con tenente q u attro procedure, A, tì, C e D. N ell’illustrazione il program m a 1 usa la procedura A e il program m a 2 usa la C, anche se i due program m i avrebbero co m unque p o tu to uti lizzare la stessa procedura. Il linker costruisce u n a D LL a partire d a un insieme di file di input. La costruzione di una D L L è in pratica m o lto sim ile alla creazione di un program m a eseguibile binario, tranne che per u no speciale indicatore che viene specificato al linker in m odo che crei una DLL. D i solito le D L L vengono costruire a partire da gruppi di librerie di procedure che ci si aspetta verranno utilizzate da più processi. Le procedure d ’interfaccia alla libreria delle chiam ate di sistema di W indow s e le librerie grafiche di grandi dim ensioni sono due esempi di DLL m olto com u n i. L’uso delle D LL ha il vantaggio di risparm iare spazio in m em oria e sul disco. Se una libreria usata m olto frequentem ente venisse collegata staticam ente a ciascun program m a che ne fa uso, essa com parirebbe all’interno di m olti program m i binari eseguibili sia in m e m oria sia sul disco, sprecando u n a gran q u an tità di spazio. Facendo ricorso alle D L L cia scuna libreria è presente una sola volta in m em oria e una sola sul disco. O ltre a risparm iare spazio questo approccio agevola l’aggiornam ento delle procedure, anche d o p o che i program m i che le utilizzano sono stati com pilati e collegati. Per pacchetti Processo utente 1
Figura 7.19
Un file DLL usato da due processi.
Processo utente 2
524
Capitolo 7
Livello del linguaggio assemblativo
softw are com m erciali, di cui raram ente gli u ten ti hanno a disposizione il codice, 1 uso delle D LL p erm ette al venditore di correggere i bug presenti nelle librerie sem plicem ente ridi stribuendo via In tern et nuovi file DLL, senza dover cam biare in alcun m o d o il program m a binario principale. La differenza principale tra una D L L e un eseguibile binario è che la D LL non può es sere eseguita da sola (non ha al suo in tern o u n p rogram m a principale). Inoltre essa contiene nella sua intestazione inform azioni di tipo diverso e possiede delle procedure aggiuntive che non sono legate alle procedure della libreria. È presente per esem pio una procedura che viene auto m aticam en te chiam ata ogni volta che un nuovo processo è collegato alla D L L e un’al tra che viene autom aticam ente chiam ata q u an d o un processo viene invece scollegato. Q ueste procedure possono allocare o deallocare aree di m em oria o gestire altri tipi di risorse richie ste dalla DLL. C i sono d u e m odi p er collegare u n program m a a una DLL. N el prim o, chiam ato collegamento implicito, il program m a dell’u tente viene collegato a un file speciale chiam ato libreria importata, generato da un program m a di utilità che estrae alcune inform azioni dalla DLL. La libreria im portata costituisce il collante che perm ette al program m a uten te di ac cedere alla DLL. U n program m a u tente può essere collegato a più librerie im portate. Q u an d o viene caricato un program m a che utilizza il collegam ento im plicito, W indow s io esam ina per vedere quali D L L utilizza e controlla che tu tte siano presenti in m em oria. Q uelle che non lo sono vengono caricate im m ediatam ente (m a non necessariam ente nella loro interezza, dato che sono paginate). V engono apportati alcuni cam biam enti alle stru ttu re dati delle li brerie im portate in m o d o da poter localizzare le procedure richiam ate (queste m odifiche sono analoghe a quelle viste nella Figura 7 .1 8 ). In o ltre esse devono essere m appate nello spazio degli indirizzi virtuali del program m a. A questo p u n to il program m a uten te è p ro n to per es sere eseguito e p u ò chiam are le procedure presenti nella D L L com e se fossero staticam ente legate al program m a stesso. L’alternativa a questo tipo di collegam ento è, ovviam ente, il collegam ento esplicito. Q uesto approccio n o n richiede l’uso di librerie im portate e non obbliga a caricare le D LL nello stesso m om ento in cui viene caricato il program m a dell’utente. Al contrario il program m a dell’utente effettua a tem po di esecuzione una chiam ata esplicita per legare a sé una D LL e successivam ente effettua altre chiam ate per o ttenere gli indirizzi delle procedure di cui ha bisogno. D o p o aver recuperato questi indirizzi il program m a p u ò chiam are le procedure. Q u an d o ha finito di utilizzarle effettua una chiam ata finale per scollegarsi dalla DLL. Q uando anche l’ultim o processo si è scollegato da u n a D L L questa può essere rim ossa dalla m em oria. È im porrante com prendere che, a differenza dei thread e dei processi, in una D LL le procedure non h an n o una propria identità. Q ueste procedure vengono eseguite nel thread del chiam ante e utilizzano lo stack del chiam ante p er le proprie variabili locali. Possono avere alcuni dati statici specifici di un processo (così com e dati condivisi), m a si co m p o rtan o esat tam ente com e le procedure collcgate staticam ente. L’unica vera differenza riguarda il m odo in cui viene effettuato il collegam ento.
Collegamento dinamico in UNIX Il sistem a U N IX ha un m eccanism o che è essenzialm ente simile alle DLL di W indow s e che si basa su quella che viene chiam ata libreria condivisa. A nalogam ente ai file D LL una li breria condivisa è un file archivio co n ten en te procedure o m oduli di dati presenti in m e
7.5
Riepilogo
525
m oria a tem po di esecuzione e p uò essere collegata contem poraneam ente a più processi. La libreria standard di C e gran parte del codice relativo alla com unicazione via rete sono esempi di librerie condivise. U N IX supporta esclusivam ente il collegam ento im plicito e q u in d i u n a libreria condi visa consiste in due parti: statica (collegata staticam ente al file eseguibile) e destinazione (richiam ata a tem p o d i esecuzione). A nche se alcuni dettagli presentano delle differenze, i concetti sono essenzialm ente uguali a quelli delle DLL.
7.5
Riepilogo
A nche se la m aggior parte dei program m i può, e dovrebbe, essere scritta in un linguaggio ad alto livello, in alcune situazioni è necessario utilizzare, alm eno in parte, il linguaggio as sem blativo. C andidati alla scrittura in linguaggio assem blativo sono i program m i per cal colatori p ortatili dotati di p o che risorse, com e le sm art card, i processori integrati e i P D A wireless. U n program m a in linguaggio assem blativo è una rappresentazione sim bolica di un program m a scritto nel linguaggio m acchina di un livello inferiore. Esso viene trad o tto nel linguaggio m acchina m ediante un program m a chiam ato assem blatore. Per le applicazioni che rich ied o n o u n ’alta velocità di esecuzione si sceglie di scrivere inizialm ente l’in tero p ro g ram m a in un linguaggio ad alto livello, e poi si d ete rm in a n o i p u n ti in cui viene spesa la m aggior p arte del tem po; q u in d i si riscrivono in linguaggio as sem blativo solo le porzioni di codice usate in m o d o più intenso. Q u esto approccio ha dei vantaggi rispetto a scrivere l’intero p ro g ram m a in codice assem blativo, dato che in genere solo u n a piccola frazione del codice è in realtà responsabile della m aggior parte del tem p o di esecuzione. M olti assem blatori p erm etto n o l’uso delle m acro, le quali consentono al program m a tore di attribuire nom i sim bolici a sequenze di codice usate frequentem ente. In un secondo m om en to questi nom i vengono auto m aticam en te sostituiti con il codice corrispondente. D i solito le m acro possono anche essere param etrizzate in m odo semplice. Le m acro sono im plem entate m ediante algoritm i di elaborazione di stringhe di caratteri. La m aggior p a n e degli assemblatori prevede due passate. La prim a si occupa di costruire un a tabella per le etichette, i letterali e gli identificatori dichiarati esplicitam ente. 1 simboli possono essere m em orizzati in m o d o disordinato e reperiti m ediante ricerche lineari, oppure possono essere tenuti in o rdine e poi individuati con una ricerca dicotom ica. Un’altra pos sibilità per m em orizzare e cercare i sim boli consiste nell’uso di una tabella hash. Se i sim boli n o n devono essere cancellati d u ran te la p rim a passata, questo m etodo solitam ente ri sulta il m igliore. La seconda passata genera il codice. A lcune pseudoistruzioni vengono ese guite d u ran te la prim a passata, altre d u ran te la seconda. 1 program m i assem blati in d ip en d en tem en te possono essere collegati fra loro per for m are un codice binario che p uò essere eseguito. Q u esto lavoro è realizzato dal linker. I suoi com piti principali sono la rilocazione e il collegam ento dei nom i. Il collegam ento dinam ico è una tecnica grazie alla quale alcune procedure non sono collegate fino al m o m en to in cui n o n vengono effettivam ente richiam ate. Le D L L di W indow s e le librerie condivise di U N IX usano il collegam ento dinam ico.
526
Capitolo 7
Livello del linguaggio assemblativo
Problemi 1.
In un dato programma il 2% del codice è responsabile del 50% del tempo di esecuzione. Si confrontino le seguenti strategie relative ai tempi di programmazione e di esecuzione. Si assuma che il programma richieda 100 mesi/uomo di lavoro per essere programmato in C; la scrittura del codice assemblativo è invece 10 volte più lenta, ma il programma ottenuto risulta quattro volte più efficiente. a. intero programma in C b. intero programma in linguaggio assemblativo c. prima tutto in C, poi il 2% più critico riscritto in linguaggio assemblativo.
2.
Le considerazioni che valgono per gli assemblatori a due passate, valgono anche per i compilatori? a. si assuma che i compilatori producano moduli oggetto, non codice assemblativo b. si assuma che i compilatori producano linguaggio assemblativo simbolico.
3.
La maggior parte degli assemblatori per le CPU Intel ha l’indirizzo destinazione come primo operando e l’indirizzo sorgente come secondo operando. Quali problemi si sarebbero dovuti ri solvere per utilizzare gli operandi in posizione invertita?
4. È possibile assemblare in due passate il seguente programma? EQU è una pseudoistruzione che mette in relazione l’etichetta con l’espressione che si trova nel campo dell’operando. _ . .
p EQU q 0 EQU R R EQU S S EQU 4
5.
La Società di Calcolatori DaDueSoldi sta pianificando di produrre un assemblatore per un cal colatore con parole a 48 bit. Per contenere i costi il responsabile del progetto, il D on. Paperone, ha deciso di limitare la lunghezza degli identificatori in modo che possano essere memorizzati in una sola parola. Paperone ha dichiarato che gli identificatori possono consistere solamente in lettere, tranne la Q c h e è vietata (per superstizione: infarti è la 17“ lettera dell alfabeto in glese). Qual è la massima lunghezza dei simboli? Si descriva un proprio schema di codifica.
6.
Qual è la differenza tra istruzioni e pseudoistruzioni?
7.
Qual è la differenza (se c’è) tra il contatore di locazioni delle istruzioni (ILC) e il contatore d’istruzioni (PC)? Dopo tutto entrambi tengono traccia della successiva istruzione in un programma.
8.
Si mostri la tabella dei simboli dopo che si sono incontrate le seguenti istruzioni del Pen tium 4. La prima istruzione è assegnata all’indirizzo 1000. EVEREST 1 K2 : WHXTNEY: NCKINLEY ì FUJI: KIBO:
9.
POP BX PUSH BP MOV B P ,SP PUSHX PUSH SI SUB SI,300
( 1 BYTE ) ( 1 BYTE ) (2 BYTES) (3 BYTES) (1 BYTE) (3 BYTES)
È possibile immaginare delle circostanze nelle quali il linguaggio assemblativo permetta che un’etichetta sia identica a un codice operativo (per esempio, M O V com e etichetta)? Si morivi la risposta.
Problemi
527
10. Si mostrino i passi necessari per cercare, utilizzando la ricerca dicotomica, la parola Berkley al l'interno della seguente lista: Ann Arbor, Berkeley, Cambridge, Eugene, Madison, New Haven, Palo Alto, Pasadena, Santa Cruz, Stony Brook, Wcstwood e Ycllow Springs. Quando si calcola l’elemento centrale di una lista con un numero pari di elementi si utilizzi l’elemento che si trova subito dopo il punto medio. 11. E possibile utilizzare la ricerca dicotomica su una tabella la cui dimensione è un numero primo? 12. Si calcoli il codice hash dei seguenti simboli sommando le lettere (A = 1, B = 2, ecc.) e calco lando il modulo tra il risultato e la dimensione della tabella hash. La tabella hash ha 19 posi zioni, numerate da 0 a 18. els, jan, jelle, maaike Ciascuno di questi simboli genera un unico valore hash? In caso negativo, com’è possibile ge stire il problema della collisione? 13. Il metodo della codifica hash descritto nel testo inserisce in una lista concatenata tutti gli ele menti che hanno lo stesso codice hash. Un metodo alternativo è quello di avere un’unica ta bella a n posizioni, in cui ciascuna ha lo spazio per memorizzare una chiave e il suo valore (o un puntatore a quest’ultimo). Se l’algoritmo di hash indica una posizione già occupata, si ri provi con un secondo algoritmo di hash. Se anche questa posizione è già occupata, se ne uti lizzi un altro, continuando allo stesso modo finché non se ne trovi una vuota. Se la frazione di posizioni che sono occupate è R, quanti tentativi saranno necessari, in media, per poter inse rire un nuovo simbolo? 14. Grazie ai progressi tecnologici un giorno potrebbe essere possibile collocare su un chip migliaia di CPU identiche, ciascuna delle quali con poche parole di memoria locale. Se tutte le CPU posso no leggere e scrivere tre registri condivisi com’è possibile implementare una memoria associativa? 15. Il Pentium 4 ha un'architettura segmentata, composta da segmenti indipendenti. Un assemblatore per questa macchina potrebbe avere una pseudositruzione S E G N, per indicare all’assemblatore di collocare il codice successivo nel segmento N . Questo schema avrebbe qualche influenza su ILC? 16.
I programmi spesso si collegano a più DLL. Non sarebbe più efficiente inserire tutte le proce dure in un’unica grande DLL e collegarla al programma?
17.
È possibile mappare una DLL negli spazi degli indirizzi virtuali di due processi in due indirizzi virtuali diversi? Se sì, quali problemi sorgono? Possono essere risolti? Altrimenti, che cosa si può fare per eliminarli?
18.
Un modo per effettuare il collegamento (statico) ì il seguente. Prima di scandire la libreria il linker costruisce una lista delle procedure richieste, cioè una lista composta dai nomi definiti come e x t e r n nei moduli che sta collegando. In seguito il linker analizza linearmente tutta la libreria, estraendo ogni procedura che si trova nella lista di quelle necessarie. Questo schema può funzionare? Altrimenti, perché no, e che rimedi si possono apportare?
19.
È possibile utilizzare un registro come parametro attuale in una chiamata di macro? E una co stante? Perché sì o perché no?
20.
Si sta implementando un assemblatore con macro. Per ragioni estetiche il capo progetto ha de ciso che le definizioni di macro non devono precedere le loro chiamate. Quali conseguenze ha questa decisione sull'implementazione?
21.
Si pensi a un modo per far entrare un assemblatore con macro in un ciclo infinito.
528
Capitolo 7
Livello del linguaggio assemblativo
22.
Un linker legge cinque moduli, le cui lunghezze sono rispettivamente 2 0 0 , 8 0 0 , 6 0 0 , 5 0 0 e 700. Se i moduli vengono caricati in quest’ordine quanto valgono le costanti di rilocazionc?
23.
Si scrivano due routine per gestire una tabella di simboli: enter(symbol, vaine) e lookup(symboL, value). La prima inserisce i nuovi simboli nella tabella, mentre la seconda permette di cercare un simbolo al suo interno. Si utilizzi una codifica hash.
24.
Si scriva un semplice assemblatore per il calcolatore Mic-1 del Capitolo 4. Si fornisca la possi bilità di assegnare durante la fase di assemblaggio valori costanti ai simboli e un modo per as semblare una costante in una parola della macchina.
25.
Si aggiunga la funzionalità delle macro all’assemblatore dell’esercizio precedente.
Capitolo 8
Architetture per il calcolo parallelo
Benché i calcolatori diventino sem pre più veloci, le aspettative dei loro u ten ti crescono al m eno altrettan to rapidam ente. L’am bizione degli astronom i è la sim ulazione d e lfin iera sto ria dell’universo, dal big bang alla fine dei tem pi. L’industria farm aceutica gradirebbe pro gettare sui propri co m p u ter m edicine per la cura m irata di determ inate m alattie, invece di sacrificare intere legioni di ratd. 1 progettisti aeronautici sarebbero in grado di scoprire pro do tti dotati di maggiore efficienza energetica se solo i calcolatori potessero farsi carico di tu tto il lavoro, senza bisogno di costruire prototipi reali da valutare nella galleria del vento. È chiaro che, anche se è orm ai disponibile m olta p otenza di calcolo, per un gran num ero di utenti, e in special m odo per gli scienziati e p er l’industria, questa potenza n o n è m ai abbastanza. N o n o stan te il costante increm ento delle frequenze di clock, la velocità dei circuiti non pu ò aum entare indefinitam ente. La velocità della luce costituisce già oggi un lim ite pratico per i progettisti dei calcolatori d i fascia alta e le prospettive di riuscire a far m uovere gli elet troni e i fotoni ancora più velocem ente sono scarse. 1 problem i di dissipazione del calore fanno sì che i supercalcolatori diventino sem pre p iù sofisticati condizionatori d ’aria. Infine, le dim ensioni dei transistor co n tin u eran n o a d im in u ire e raggiungeranno presto il p u n to in cui co n terran n o così pochi atom i che gli effetti della m eccanica quantistica (per esem pio il principio di indeterm inazione di H eisenberg) p o rran n o seri problem i. In conseguenza di tu tto ciò, gli architetti degli elaboratori si rivolgono sem pre più spesso al calcolo parallelo per trattare problem i di dim ensioni sem pre crescenti. A nche se non è possibile realizzare u n calcolatore cton una sola C P U e un ciclo di 0,001 ns, sarebbe sicuram ente possibile costruirne uno con 1000 C P U , ciascuna con ciclo di clock di 1 ns. Sebbene il secondo progetto si avvalga di C P U più lente, in teoria la sua capacità totale di calcolo è la stessa del prim o. Q uesta è l’idea cui sono affidate le speranze per il futuro. II parallelism o p u ò essere in tro d o tto a vari livelli. A quello p iù basso, pu ò essere in corporato nel chip della C P U attraverso un progetto superscalarc a pipeline con m olteplici unità funzionali; o p p u re p u ò essere in tro d o tto con l’adozione d istruzioni basate su parole m o lto lunghe e d otate di parallelism o im plicito. La C P U pu ò essere equipaggiata con caratterisrichc speciali che le consentano di gestire il controllo di più thread alla volta, ed e an che possibile integrare più C P U sullo stesso chip. T utti questi stratagem m i, se usati con giuntam ente, possono p ro d u rre u n increm ento delle prestazioni per u n m assim o del 10% rispetto a u n progetto p u ram en te sequenziale.
530
Capitolo 8
Architetture per il calcolo parallelo
A livello successivo, è possibile aggiungere ai sistema delle schede dotate di C P U che arricchiscano le sue capacità di calcolo. In genere queste C P U plug in (cioè a innesto) svol gono funzioni specializzate, com e l'elaborazione di pacchetti di rete, l’elaborazione m u lti m ediale o la crittografia. C o n sen to n o u n fattore d ’increm ento delle prestazioni com preso tra 5 e 10, m a solo nel caso di applicazioni specializzate. D ’altra parte, l’unico m odo per ottenere un increm ento dell'ordine delle centinaia, delle migliaia o dei m ilioni, è di replicare il num ero delle C P U , facendole cooperare in m odo ef ficiente. Q uesta è l'idea alla base dei m ultiprocessori e dei m ulticom puter (cluster di computer). È evidente che il m ontaggio di migliaia di processori in un unico grande sistem a costituisce di p er sé un problem a che va risolto. Va d etto infine che oggi è possibile stru ttu rare su In tern et intere organizzazioni di co m p u ter com e reti di calcolo (griglie) con connessioni lasche. Sono sistemi alle prim e arm i, m a m anifestano u n grosso potenziale per il futuro. D ue C P U o elem enti di calcolo contigui che svolgono calcoli in m odo m olto interat tivo e la cui connessione ha un’elevata larghezza di banda e un ritardo trascurabile, si dicono legati strettam ente (tightly coupled). Viceversa si dicono legati d ebolm ente (loosely coupled) se si trovano m olto distanti, h an n o u n a ban d a ridotta, un ritardo elevato e svolgono i loro calcoli in m o d o poco interattivo. In questo capitolo ci interessiam o ai principi progettuali delle varie form e d i parallelism o e ne analizziam o una varietà di esempi. C om inciam o dai sistemi a legam e p iù stretto, cioè quelli che usano il parallelism o nel chip, spostandoci gra dualm en te verso sistem i con legame p iù debole, per finire con lo spendere qualche parola sul grid computing (“calcolo su griglie di co m p u ter”). La Figura 8.1 m ostra lo spettro delle possibilità (da legame più stretto a più debole). La questione del parallelism o è oggetto di intensa ricerca a tutti i livelli dello spettro. Perciò nel corso del capitolo segnalerem o un gran num ero di riferim enti bibliografici, ri volgendo particolare attenzione agli articoli più recenti. I riferimenti di natura più introduttiva sono elencati nel Paragrafo 9.1.8. M e m o r ia
L e g a m e stre tto
(a )
Figura 8.1
L e g a m e d e b o le
(b )
(c )
(d )
(e)
(a) Parallelismo nel chip, (b) Coprocessore. (c) Multiprocessore. (d) Multicomputer. (e) Griglia.
8.1
8.1
Parallelismo nel chip
531
Parallelismo nel chip
U n m odo per increm entare la p ro d u ttiv ità d i u n chip è di fargli svolgere p iù com piti alla volta. In questo paragrafo ci interessiam o ai m odi in cui si può ottenere un increm ento delle prestazioni tram ite il parallelism o a livello del chip, com preso il parallelism o del livello delle istruzioni, il m u ltith read in g e la coabitazione di più C P U sullo stesso chip. Sono tecniche abbastanza diverse e ciascuna dà un proprio co n tributo. Il loro co m une obiettivo è quello di svolgere più attività nello stesso tem po.
8.1.1
Parallelismo a livello delle istruzioni
A livello delle istruzioni, un m odo per ottenere il parallelism o è di em ettere più istruzioni per ciclo d i clock. C i sono d u e tipi di C P U a em issione m ultipla: processori superscalari e processori VLIW . Vi abbiam o già accennato precedentem ente, m a può essere utile ritornare sull’argom ento. A bbiam o già visto le C P U superscalari (Figura 2.5). N el caso p iù generale, c’è u n m o m ento lungo la pipeline in cui u n ’istruzione è p ro n ta per essere eseguita. Le C P U supersca lari sono in grado di em ettere, verso le u n ità di esecuzione, più istruzioni in un solo ciclo. Il num ero d istruzioni emesse dipen d e dal progetto del processore e dalle circostanze con tingenti. L’hardw are d eterm ina il num ero m assim o d ’istruzioni che può essere emesso, in genere da d u e a sei. In ogni caso u n ’istruzione non verrà emessa se attende un calcolo che no n è stato ancora com pletato o se necessita di u n ’u n ità funzionale no n disponibile. L’altra forma di parallelism o a livello delle istruzioni è quello dei processori V L IW ( Very Long Instruction Word, “con parola d istruzione m olto lu n g a”). Nella loro form a originaria, le m acchine V L IW avevano davvero parole m o lto lunghe per contenere istruzioni che usa vano diverse u n ità funzionali. Si consideri per esem pio la Figura 8.2(a), in cui la m acchina dispone di cinque unità funzionali e p u ò eseguire sim ultaneam ente due operazioni intere, una in virgola m obile, u n caricam ento e u n a m em orizzazione. U n’istruzione V L IW per que sta m acchina conterrebbe cin q u e codici operativi e cinque coppie di operandi: un codice e una coppia di operandi per ogni u n ità funzionale. Se ci sono 6 bit per codice operativo, 5 bit per registro e 3 2 bit per gli indirizzi di m em oria, le istruzioni possono raggiungere facilm ente i 134 b it, il che fa di loro istruzioni abbastanza lunghe. Q u esto progetto si rivelò tro p p o jig id o perché non tu tte le istruzioni riuscivano a sfruttare tu tte le u n ità funzionali, il che conduceva all’uso di m olte in utili n o - o p , com e il lustrato nella Figura 8.2(b). Perciò le m acchine V L IW m oderne dispongono di u n a m oda lità di costruzione di pacchetti (bundle) d istruzioni, conclusi per esem pio dal bit di “fine pacchetto”, com e m ostrato nella Figura 8.2(c). Il processore è in grado di effettuare il fetch e l’em issione d i u n intero pacchetto per volta. Spetta al com pilatore preparare pacchetti d ’i struzioni com patibili. A tu tti gli effetti, questa tecnica sposta dall’esecuzione alla com pilazione il difficile com pito d i stabilire quali istruzioni possono essere avviate alla esecuzione contem poranea. Q uesta scelta consente di avere un hardw are più semplice e veloce e, poiché un com pilatore p u ò far d u rare l’ottim izzazione per tu tto il tem po necessario, perm ette di assemblare pac chetti d istruzioni m igliori d i q u a n to p otrebbe fare l’hardw arc d u ran te l’esecuzione. Per con tro, questo progetto co m p o rta u n cam bio radicale nelle architetture delle C P U che sarà dif ficile d a far accettare, com e dim o strato dalla scarsa accoglienza suscitata d a Itanium .
532
Capitolo 8
Architetture per il calcolo parallelo
A r it m e t ic a
intera
Aritmetica
intera
(a)
F e tc h
A r it m e t ic a in v ir g o l a m o b ile
E m is s io n e
D e c o d ific a
-► j
R it ir o
Load
Store
No-op
..-L-
..-L-
I- - L-
I I F- S
l - FLS
l - FL-
I I F- S
...L-
Marcatore di fine pacchetto
Istruzione VI IW
/ (c)
L L IL
I I FS
I FLS
IFL
NFS
L
LFS
lu c c h e t t o
Figura 8.2
(a) Pipeline della C P U . (b) Sequenza d'istruzioni VLIW . (c) Flusso d'istruzioni con marcatori di pacchetto.
Val la pena notare qui che il parallelism o a livello delle istruzioni n o n è la sola form a di pa rallelismo di basso livello. C ’è infatti il parallelism o a livello della m em oria, secondo cui di verse operazioni di m em oria vengono svolte contem poraneam ente (C h o u et al., 2004).
CPU VLIW TriMedia N el C ap ito lo 5 abbiam o studiato l’Itan iu m -2 , u n esem pio di C P U VLIW . Analizziam o ora T riM ed ia. un processore V L IW m o lto diverso e progettato da Philips, la com pagnia olan dese che ha anche inventato i C D audio e i C D -R O M . TriM edia è stato pensato com e pro cessore integrato per applicazioni intensive di tipo audio, video o su im m agini, nei lettori C D , D V D o M p3, nei registratori C D o D V D , nelle console T V interattive, nelle m acchine fotografiche e videocam ere digitali, e così via. Proprio perché destinato a questo tipo di ap plicazioni, non sorprende che T riM edia differisca m olto da Itanium -2, che è invece una C P U p er uso generale concepita p er i server di fascia alta. T riM edia è u n vero processore V L IW in cui ogni istruzione può contenere cinque o p e raz io n i. In condizioni ideali, a ogni ciclo di clock viene avviata l'esecuzione di un’istruzione e l’em issione delle cinque operazioni. Il clock ha u n a frequenza di 2 6 6 o 300 M H z, che però equivale a u n a frequenza cinque volte m aggiore, visto che può eseguire cinque operazioni per ciclo. In seguito ci concentrerem o sull’im plcm entazione T M 3 2 6 0 di TriM edia (esistono anche altre versioni, le cui differenze sono però trascurabili).
8.1
Somma
Scorrimento
Multimediale
Load
Parallelismo nel chip
533
Store
Istruzione
Figura 8.3
Tipica istruzione TriMedia, con cinque operazioni possibili.
La Figura 8.3 illustra u n ’istruzione tipica. Si va dalle istruzioni intere standard di 8, 16 e 32 bit, alle istruzioni in virgola m obile IE E E 754, fino alle istruzioni m ultim ediali paralle le. Grazie all’em issione di cinque istruzioni m ultim ediali per ciclo, T riM edia è sufficiente m ente veloce da decodificare un flusso di dati proveniente da una videocam era senza ridurre la dim ensione delle im m agini, né la frequenza di acquisizione. TriM edia ha una m em oria orientata al byte, con i registri di I/O m appati nello spazio di m em oria. Le mezze parole (16 bit) e le parole intere (32 bit) devono essere allineate lungo le loro estrem ità (ovvero devono iniziare in byte di indirizzo pari o —per le parole intere —m ul tiplo di 4). L’ordinam ento dei byte può essere big-endian o litde-endian, a seconda di un bit di PSW che può essere im postato dal sistema operativo. Q uesto bit ha effetto solo sul m odo in cui operano i trasferimenti di caricam ento e memorizzazione tra i registri e la memoria. La C P U contiene una cache specializzata associativa a 8 vie, con linee di 64 byte sia per la cache delle istruzioni, sia per quella dei dati. La cache delle istruzioni è di 64 KB. quella dei dati è di 16 KB. C i sono 128 registri di 32 bit per uso generale. Il registro RO è cablato al valore 0, R I a 1. I tentativi di m odificare uno di questi registri h an n o sulla C P U l’effetto di u n infarto. I restanti 126 registri sono tu tti equivalenti dal p u n to di vista funzionale e possono essere usati per qualsiasi scopo. Inoltre esistono q u attro registri di 32 bit specializzati: il program counter, PSW e due registri legati agli in terru p t. Infine, viene utilizzato un registro di 64 bit per contare i cicli dall’ultim o reset della C P U . A 300 M H z, ci vogliono circa 2000 anni per ché il co n tato re vada in overflow. Il TriM edia T M 3 2 6 0 ha 11 diverse u n ità funzionali per svolgere le operazioni aritm e tiche, logiche e di controllo del flusso, oltre a una per il controllo di cache che non prende rem o in considerazione. Le prim e d u e colonne della Figura 8.4 indicano il nom e dell’unità e ne d an n o u n a breve descrizione, la terza specifica il num ero di copie hardw are dell’un ità e la quarta dà la latenza dell’unità, cioè il nu m ero di cicli di clock che impiega per com ple tare l’operazione. N otiam o qui che tu tte ie u n ità funzionali sono a pipeline, eccetto la unità V M (in virgola m obile) per la divisione/radice quadrata. La latenza indicata in tabella sta bilisce il tem po necessario alla disponibilità del risultato di un’operazione, m a a ogni ciclo è possibile iniziare u n a nuova operazione. Per esem pio, tre istruzioni consecutive possono con tenere ciascuna due caricam enti, così in un certo istante saranno in esecuzione sei opera zioni di caricam ento, m a a stadi differenti. Infine, le ultim e cinque colonne m ostrano le possibili corrispondenze tra posizione delle operazioni nell’istruzione e le u n ità funzionali. Per esem pio, l’operazione di confronto in vir gola m obile deve occupare necessariam ente il terzo posto di un’istruzione. L’u n ità costante si usa per le operazioni im m ediate, com e il caricam ento in un registro di un n um ero co n ten u to nell’operazione stessa. L’ALU intera svolge la som m a, la sottrazione e le usuali operazioni booleane, e inoltre im pacchetta/spacchetta le operazioni. L’unità di scor rim ento p u ò traslare il co n ten u to di un registro di un certo num ero di bit in entram be le direzioni.
534
Capitolo 8
Architetture per il calcolo parallelo
Unità
Descrizione
s
Latenza
1
2
3
4
5
Cosiante
Operazioni immediate
5
1
X
X
X
X
X
ALU intera
Aritmetica a 32 bit,operazioni booleane
s
1
X
X
X
X
X
Scorrimento
Scorrimento dì più bit
2
1
X
X
X
X
X
Load/Store
Operazioni di memoria
2
3
X
X
MUL IntA'M
Moltiplicazione interaeVM a 32 bit
2
3
X
X
ALU VM
AritmeticaVM
2
3
ConfrontoVM
ConfrontiVM
1
1
sqrt/divVM
Divisione e radice quadrataVM
1
17
X
Salti
Controllo del flusso
3
3
X
ALU DSP
Aritmetica multimediale a due o quattro operandi (16 o 8 bit)
2
3
X
X
MUL DSP
Moltiplicazioni multimediali a due o quattro operandi (16 o 8 bit)
2
3
X
X
Figura 8.4
X
X X
X
X
X
Unità funzionali di TM3260; numero, latenza e posizioni che possono avere nelle istruzioni.
L’un ità load/store effettua il fetch delle parole di m em oria verso i registri o viceversa. TriM edia è essenzialm ente u n a C P U R ISC potenziata, e le operazioni norm ali lavorano sui registri, m entre soltanto l’u n ità load/store è usata per gli accessi alla m em oria, con trasferim enti di 8, 16 o 32 bit. L’u n ità per la m oltiplicazione gestisce sia i p ro d o tti tra interi, sia tra num eri in virgola mobile. Le tre u n ità successive gestiscono la som m a/sottrazione in virgola m obile, i confronti, la radice quadrata e la divisione. Le operazioni di salto sono eseguite dall’u n ità di salto. D opo un salto c’è u n ritardo di 3 cicli, perciò le tre istruzioni successive a un salto (fino a 15 operazioni) vengono eseguite sem pre, anche nel caso di salti incondizionati. Veniam o infine alle u n ità m ultim ediali p er la gestione delle speciali operazioni m ulti mediali. Il term ine D S P sta per Digital Signal Processor (“processore dei segnali digitali”), le cui funzioni sono svolte in questo caso pro p rio dalle operazioni m ultim ediali. Prim a di en trare nei dettagli di queste operazioni, segnaliam o che usano tu tte l'aritmetica satura {saturateciarithmetic) invece dell’aritm etica in com plem ento a due usata dalle operazioni in tere. Q u a n d o un’operazione produce un risultato che non può essere espresso a causa di un overflow, n on viene sollevata un’eccezione, né viene restituito un risultato inservibile, bensì si o ttien e il num ero valido più vicino a quello corretto. Per esem pio, se si usano i n um eri di 8 b it senza segno, la som m a di 130 + 130 dà 255. A causa del fatto che n o n tu tte le operazioni possono occupare tu tti i posti, accade fre q u en tem en te che u n ’istruzione n on contenga tu tte e cinque le operazioni che può ospitare. Se un posto non è utilizzato, la sua dim ensione viene ridotta per m inim izzare lo spreco di spazio. Le operazioni presenti occupano 26, 3 4 o 42 bit. A seconda delle operazioni pre senti, u n ’istruzione T riM edia può essere lunga dai 2 ai 28 byte, com presa l’intestazione di dim ensione costante.
8.1
Parallelismo nel chip
535
TriM edia n o n effettua controlli in fase d ’esecuzione per verificare che le operazioni in un’istruzione siano com patibili. Se non lo sono, vengono eseguite co m unque e producono un risultato errato. L’assenza del co ntrollo è stata una scelta progettuale deliberata e intesa a risparm iare tem po e transistor. Il P entium , d u ran te l’esecuzione, svolge i controlli necessari per sincerarsi della co m patibilità di tu tte le operazioni superscalari, m a paga questa certezza in complessità, tem po e transistor. TriM edia si risparm ia questa spesa affidando lo scheduling al com pilatore, che dispone di tu tto il tem p o che vuole per ottim izzare con cura il posizio nam ento delle operazioni nelle istruzioni. Il rovescio della m edaglia è che, se un'operazione necessita di un’u n ità funzionale non disponibile, l'intera istruzione va in stallo finché l’unità n o n to rn a disponibile. C o m e n e llìta n iu m -2 , le operazioni TriM edia sono predicative. O gni operazione (a parte due eccezioni trascurabili) specificano un registro da esam inare prim a dell’esecuzione dell’operazione; se il b it m eno significativo del registro è asserito, l’istruzione viene eseguita, viceversa viene saltata. A o g n u n a delle (al m assim o) cinque operazioni viene a ttrib u ito un predicato individuale. U n esem pio di operazione predicativa è I F R2 I ADD R4 , R5 - > R8
che effettua il test su R2 e, se il suo b it m eno significativo vale 1, som m a R4 a R5 e salva il risultato in R8. U n’operazione diventa incondizionata se usa RI (che vale sem pre 1) com e registro predicativo. Se usa RO (che vale sem pre 0) diventa u n a no-op. Le operazioni m ultim ediali di TriM edia possono essere ripartite nei 15 gruppi della Figura 8.5. M olte operazioni coinvolgono tagli (clipping) m ediante la specifica di un ope rando e di un intervallo; il taglio forza l’o perando all’interno dell'intervallo, ovvero se il suo valore cade fuori dall intervallo gli attribuisce il valore di uno degli estrem i. Possono essere tagliati operandi di 6, 16 o 32 bit. Per fare un esem pio, i tagli di 40 e di 340 in u n in ter vallo da 0 a 255 restituiscono rispettivam ente 4 0 e 255. Il gruppo dei tagli effettua ap p u n to operazioni di taglio. 1 q u a ttro gru p p i successivi della Figura 8.5 eseguono le operazioni in d icate su ope randi di varie dim en sio n i, tag lian d o il risu ltato in un certo intervallo. Il g ru p p o m in , max esam ina d u e registri e, per ogni byte, trova il valore m in im o o m assim o. Allo stesso m odo, il g ru p p o dei c o n fro n ti co nsidera d u e registri com e q u a ttro coppie di byte ed effettua i co n fro n ti su ogni coppia. Le operazioni m ultim ed iali non styio eseguite quasi m ai su interi di 32 bit perché le im m agini sono fatte di pixel RG B , d efin iti da 8 pixel per ciascuno dei colori rosso, verde e blu. D u ra n te l’elaborazione di u n ’im m agine (per esem pio la sua com pressione) questa viene rap presentata in genere da tre c o m p o n e n ti, un o per ogni colore (spazio RGB) o in u n a fo rm a lo g ic a m e n te eq u iv a le n te (spazio YUV, d escritto nel seguito del cap ito lo ). C o m u n q u e sia, gran p arte dell’elaborazione si svolge su array rettangolari c o n ten en ti in teri di 8 b it senza segno. T riM edia è d o ta to di m o lte operazioni ideate specificatam ente per l’elaborazione ef ficiente d i interi senza segno di 8 b it. C o n sid eriam o il sem plice esem pio del vertice su pcriore sinistro di un array di valori di 8 b it, collocati in m em oria ( big-endian) della Figu ra 8.6(a). 1 4 x 4 blocchi del vertice co n ten g o n o 16 valori di 8 b it, etich ettati da A a P. Se si vuole trasporre l’im m agine, p er p ro d u rre il risultato della Figura 8.6(b), com e si può fare?
536
Capitolo 8
Architetture per il calcolo parallelo
Gruppo
Descrizione
Tagli
Tagli di 4 byteo di 2 mezze parole
Valore assoluto DSP
Valore assoluto saturatocon segno
Somma DSP
Somma saturata con segno
Sottrazione DSP
Sottrazione saturata con segno
Moltiplicazione DSP
Moltiplicazione saturata con segno
Min, max
Minimo o massimo di quattro coppie di byte
Confronti
Conlronti byte per byte di due registri
Scorrimento
Scorrimento di una coppia di operandi di 16 bit
Somma dei prodotti
Somma con segno di prodotti di 8 o 16 bit
Fusione, impacchettamento, scambio
Manipolazione di byteo mezze parole
Media di quattro byte
Media senza segno di quattro operandi, byte per byte
Media di byte
Media senza segno di quattro elementi, byte per byte
Moltiplicazione di byte
Moltiplicazionesenza segno a 8 bit
Stima del movimento
Somma senza segno di valori assoluti di differenze di 8 bitcon segno
Miscellanea
Altreoperazioni aritmetiche
Figura 8.5
Principali gruppi di operazioni di TriMedia.
U na possibilità prevede l’utilizzo di 12 operazioni per caricare i byte nei registri, seguite da 12 operazioni p er m em orizzare i byte nella loro posizione corretta (i q u a ttro byte lungo la diagonale non si spostano d u ran te la trasposizione). Il problem a è che questo approccio ri chiede 24 operazioni (lunghe e lente) che accedono alla m em oria. In alternativa si può com inciare con q u attro operazioni di caricam ento di una parola per volta nei q u attro registri da R2 a R 5 , com e m ostrato nella Figura 8.6(c). Poi si o tte n gono le q u attro parole di o u tp u t della Figura 8.6(d) tram ite operazioni di m ascheratura e scorrim ento. Infine, le parole sono p ro n te per essere salvate in m em oria. Sebbene questo m e todo riduca il num ero di accessi in m em oria da 24 a 8, le m ascherature e degli scorrim enti sono costosi a causa del gran num ero di operazioni richieste per estrarre e inserire ogni byte nella sua posizione corretta. / Registro di 32 bit A
B
C
D
A
E
1 M
E
F
G
H
B
F
)
N
1
J
K
L
C
C
K O
M
N
O
P
D
H
L
(a) Figura 8.6
(b)
P
R3
A
B
C
D
R2
A
E
1 M
E
F
G
H
R3
B
F
N
R4
1
J
K
L
R4
C
G
K O
R5
M
N
O
P
R5
D
H
L
(c)
P
(d)
(a) Un array di elementi di 8 bit. (b) L'array trasposto, (c) L'array originale memorizzato in quattro registri, (d) L'array trasposto nei quattro registri.
8.1
Parallelismo nel chip
537
TriM edia consente di raggiungere una soluzione migliore delle precedenti. Si com in cia con il fetch delle q u a ttro parole nei registri, però, per costruire l'o u tp u t, invece delle mascherature e degli scorrim enti, si usano operazioni speciali per l’estrazione e l’inserzione di byte nei registri. In definitiva, la trasposizione può essere o tte n u ta con 8 accessi alla m em o ria e 8 operazioni m ultim ediali speciali. Il codice com incia con un’istruzione contenente due l o a d in posizione 4 e 5, per il caricam ento nei registri R 2 e R 3 , seguita da un’altra istru zione p er caricare R 4 e R 5 . Q ueste d u e istruzioni possono usare le altre posizioni per altri scopi. AI term ine di tu tti i caricam enti è possibile im pacchettare le o tto operazioni speciali per la costruzione dell’o u tp u t in due istruzioni, seguite da altre due istruzioni per la m e m orizzazione. In totale servono solo sei istruzioni, in cui 14 delle 30 posizioni complessive sono ancora disponibili per ospitare altre operazioni. In effetti, il com pito può essere svolto com plessivam ente con l’equivalente di circa tre istruzioni. Le altre operazioni m ultim ediali sono altrettan to efficienti. G razie alle sue p o te n ti operazioni e alla capienza delle sue istru zioni, T riM edia è m olto efficiente per la tipologia di calcolo richiesta dall’elaborazione m ultim ediale.
8.1.2
Multithreading nel chip
T utte le m oderne C P U a pipeline presentano u n problem a: q u an d o un riferim ento in m e m oria fallisce nelle cache di prim o e di secondo livello, bisogna aspettare m olto tem po prim a che la parola richiesta (e la co rrispondente linea di cache) sia caricata nella cache, e così nel frattem po la pipeline è in stallo. Il multithreading nel chip costituisce un m odo per trat tare questa situazione perché, in una certa m isura, si riescono a m ascherare questi stalli con sentendo alla C P U di gestire co n tem p o ran eam ente più thread di controllo. Infatti, se il thread 1 è bloccato, la C P U ha ancora la possibilità di eseguire il thread 2 e di m antenere l’hardw are im pegnato. Per q u an to si tratti di u n ’idea m olto sem plice, ne esistono diverse varianti che ci ac cingiam o a esaminare. Il prim o approccio si chiam a multithreading a grana fine (fine grained multithreading) ed è illustrato nella Figura 8.7, che m ostra una C P U capace di em ettere un’i struzione per ciclo di clock. Nelle Figure 8.7(a)-(c) osserviam o l’attività dei thread A, B e C, lungo 12 cicli di m acchina. D u ran te il prim o ciclo, A esegue l’istruzione A I, che viene com pletata in un ciclo, q uindi nel secondo com incia l’esecuzione di A2. Sfortunatam ente que sta istruzione provoca un fallim ento nella cache di prim o livello e così si perdono due cicli per recuperare l’istruzione dalla cache d i'feco n d o livello. 11 thread riprende dal ciclo 5. A nche
A3 A4 A5
(a)
A l A2
(b)
B1
(c)
C1 C2 C3 C 4
B2
Ciclo — ►-
Figura 8.7
A(> A7 AB
(d)
A l B1 C l A2 B2 C2 A3 B3 C3 A4 B4 C4
(e)
A l A2
B3 B4 B5 B6 B7 B8 C5 C 6
C 7 C8
B1
C l C2 C3 C4 A3 A4 A5
Ciclo — ►
(a)-(c) Tre thread: le caselle vuote indicano che il thread è in stallo perché in attesa di dati dalla memoria, (d) Multithreading a grana fine, (e) Multithreading a grana grossa.
538
Capitolo 8
Architetture per il calcolo parallelo
i thread B e C d i tan to in tan to v an n o in stallo, com e illustrato nella figura. Secondo questo m odello, q u an d o un'istruzione va in stallo, le istruzioni successive non possono essere emes se. N atu ralm en te, alle volte è tuttavia possibile em ettere altre istruzioni se si dispone dì uno scoreboard più sofisticato, m a q u i ignoriam o questa evenienza. Il m ultithreading a grana fine nasconde gli stalli grazie all’esecuzione a tu rn o dei thread, con im a com m utazione a ogni ciclo, com e m ostra la Figura 8.7(d). Q u an d o arriva il quarto ciclo l’operazione di m em oria avviata da A l è orm ai stata com pletata e l’istruzione A 2 può essere eseguita, anche se richiede il risultato di A l. N ell’esem pio ogni stallo d u ra al m assim o due cicli, perciò le operazioni vengono sem pre com pletate in tem po visto che ci sono tre thread. Se ci fossero scalli di tre cicli, avrem m o bisogno di quattro thread per assicurare la co n tin u ità deil’attivicà, e così via. D al m o m en to che n o n vi è alcuna relazione tra i thread, ciascuno ha bisogno del p ro prio insieme di registri. All’em issione di un’istruzione è necessario accludere all’istruzione stessa u n p u n ta to re al suo insiem e di registri così che, se viene referenziato un registro, l’hardw are possa sapere quale registro usare. Per questa ragione, ìl num ero massim o di thread che p uò essere eseguito in parallelo è stabilito a p riori in fase di progettazione del chip. Le operazioni di m em oria n on so n o l’unica causa di stallo. A volte u n ’istruzione aspetta il risu ltato di u n ’istruzione p recedente n o n ancora co m pletata, altre volte u n ’i stru zio n e n o n p u ò essere avviata p erché segue u n salto con d izio n ato la cui destinazione no n è ancora nota. C o m e regola generale, se la pipeline ha k stadi e ci sono alm eno k thread in esecuzione a tu rn o , nella p ipeline non ci sarà m ai p iù di un’istruzione p er thread in ese cuzione e perciò n o n si possono verificare conflitti. In queste condizioni la C P U p u ò gi rare a pieno ritm o senza stalli. O vviam ente potrebbero n o n esserci tan ti thread qu an ti sono gli stadi della pipeline, perciò alcuni progettisti preteriscono u n approccio differente, detto multithreading a grana grossa ( coarse-grained multithreading), illustrato nella Figura 8.7(e). In questo caso A si av via e c o n tin u a a em ettere istruzioni finché non va in stallo, causando lo spreco d i un ciclo. A quel p u n to l’esecuzione viene co m m u tata su B l ma, poiché la prim a istruzione di B va subito in stallo, si verifica un’altra com m utazione di thread e al ciclo 6 va in esecuzione CI. V isto che si perde u n ciclo a ogni stallo, il m ultithreading a grana grossa è pocenzialm ente m eno efficiente di quello a grana fine, m a presenta il vantaggio di richiedere m eno thread per m antenere la C P U occupata. Il m ultith read in g a grana grossa è preferibile in tu tte quelle situazioni in cui c e un num ero insufficiente di thread attivi, perché garantisce di trovarne alm eno u no da m andare in esecuzione. A nche se abbiam o descritto il m u ltith read in g a grana grossa com e una com m utazione sugli stalli, non è questa l’unica alternativa. Un’altra possibilità è di effettuare la co m m uta zione im m ediatam ente tu tte le volte in cui un’istruzione potrebbe causare u n o stallo: si pensi ai caricam enti, alle m em orizzazioni e ai salti, ancor prim a di scoprire se lo stallo si verifi cherà davvero. Secondo questa strategia la com m utazione occorre in anticipo (non appena l’istruzione viene decodificata) e potrebbe così far evitare i cicli m orti. E un po’ com e dire: “andiam o avanti finché p otrem m o avere un problem a, al che com m utiam o giusto in tem po". Così facendo, ìl m ultith read in g a grana grossa, con le sue frequenti com m utazioni, somiglia un po' d i p iù a quello a grana fine. Indipendentem ente dal tipo di m ultithreading usato, è necessario m antenere traccia del l’appartenenza delle operazioni ai thread. Nel caso del m ultithreading a grana fine l’unica
8.1
A l B1 C l A3 B2 C3 A5 B3 C5 A 6 B5 C7 A2
C2 A 4
C4
Parallelismo nel chip
539
A l B1 C l C3 A3 A5 B2 C5 A6 A8 B3 R5
B4 C6 A7 B6 C8
A2
C2 C4 A4
C i c l o -----►
C 6 A7
B4 B6
C i c l o ------ ►
(a)
(b) A l B1 C2 C4 A4 B2 C6 A7 B3 B5 B7 C7 A2 C l C3 A3 A3 C5 A6 A8 B4 B6 B8 C8 C iclo (C)
Figura 8.8
Multithreading in una CPU superscalare a doppia emissione, (a) Multithreading a grana fine, (b) Multithreading a grana grossa, (c) Multithreading simultaneo.
possibilità ragionevole è l’inserim ento di u n identificatore di thread in ogni operazione, così da poter rintracciare la sua identità m entre attraversa i diversi stadi della pipeline. Nel caso del m ultithreading a grana grossa si può far di meglio: svuotare la pipeline a ogni co m m u tazione di thread. In tal m odo c’è sem pre u n solo thread nella pipeline e così la sua identità non è mai messa in dubbio. E evidente che questa soluzione ha senso solo se il tem po che intercorre tra due com m utazioni è m olto più lungo del tem po di svuotam ento della pipeline. Fin qui abbiam o presupposto che la C P U possa em ettere u n a sola istruzione per ciclo, m a abbiam o già visto che le C P U m oderne ne possono em ettere di più. N ella Figura 8.8 suppo n iam o che la C P U possa em ettere d u e istruzioni per ciclo, pur conservando la regola che, se un’istruzione va in stallo, le successive n o n possono essere emesse. La Figura 8.8(a) m ostra il funzionam ento di u n a C P U superscalare a doppia em issione e con m ultithreading a grana fine. I.e prim e due istruzioni del thread A possono essere emesse nel prim o ciclo, ma nel caso di B incontriam o su b ito un problem a nel ciclo successivo, e così può essere emessa u na sola istruzione, e così via. La Figura 8.8(b) m ostra il funzionam ento di una C P U a doppia em issione con m ultithreading a grana fine, m a questa volta con u no schedulatore statico che non introduce un ciclo m o rto dopo lo stallo di u n ’istruzione. Praticam ente, i thread si succedono a tu rn o e la C P U em ette due istruzioni per ogni thread finché non incontra uno stallo, nel qual caso co m m u ta al thread successivo all’inizio del ciclo seguente. C ’è u n a terza possibilità di m u ltith read in g con le C P U superscalari, il multithreading simultaneo, illustrato nella Figura 8.8(c). Lo si può considerare un raffinam ento del m ultidireading a grana grossa, in cui ciascun thread em ette due istruzioni per ciclo fìn tan to che p u ò , altrim enti, n o n appena raggiunge u no stallo, viene emessa im m ediatam ente un’istru zione del thread che segue affinché la C P U resti pienam ente im pegnata. Il m ultithreading sim ultaneo aiuta anche a m antenere occupate le u n ità funzionali. Q u a n d o un’istruzione non p u ò essere avviata perché necessita di un’u n ità funzionale occupata, si può scegliere al suo posto un’istruzione di un altro thread. N ella figura supponiam o che B8 vada in stallo al ciclo 11, così C7 viene avviata al ciclo 12. Per m aggiori inform azioni sul m ultith read in g si faccia riferim ento a (D ean, 2004; Kalla et al., 2004; Kapil et al., 2004). (Sohi e R oth, 2001) hanno studiato la com binazione di m ulti threading ed esecuzione speculativa.
540
Capitolo 8
Architetture per il calcolo parallelo
Hyperthreading nel Pentium 4 Lo studio astratto del m u ltith read in g ci consente ora di affrontare a un esem pio pratico: quello del Pentium 4. Q u a n d o questo chip era1già in produzione, gli architetti di Intel co m in ciaro n o a riflettere sui m o d o di velocizzare il processore senza m odificare l’interfaccia con il p rogram m atore, la qual cosa sarebbe stata inaccettabile. F urono individuate subito cinque ipotesi. 1. Increm entare la velocità di clock. 2. Posizionare d u e C P U nel chip. 3. Aggiungere u nità funzionali. 4. A llungare la pipeline. 5. Usare il m ultithreading. U n m odo ovvio per migliorare le prestazioni consiste nell’au m en to della velocità del clock senza cam biare n ien t’altro. E una soluzione relativamente semplice e ben fondata, perciò ogni nuovo chip in genere supera di poco la velocità del suo predecessore. S fortunatam ente, l’in crem ento delle velocità d i clock p o rta con sé d u e svantaggi che ne lim itano la tollerabilità. U n clock più veloce assorbe più energia, un problem a m olto grande per i co m p u ter porta tili e in genere per tu tti quelli alim entati a batteria. In secondo luogo, più energia in ingresso vuol dire p iù calore da dissipare. La sistem azione di due C P U in u n chip è abbastanza semplice, m a equivale circa a rad doppiare l’area del chip se ciascun processore è d o tato di cache propria; la riduzione del nu m ero di chip p er u n ità d i superficie d i u n fattore due no n fa che raddoppiare i costi unitari di produzione. Se i d u e chip condividono u n a cache com une grande q u an to quella origi nale, la superficie del chip n on viene raddoppiata, m a la qu an tità di cache per C P U è di m ezzata e ciò riduce le prestazioni. Inoltre, se le applicazioni dei server di fascia alta sono spesso in grado d i trarre il m assim o giovam ento dalla presenza di p iù C P U , le applicazioni dei desktop non h anno abbastanza parallelism o da giustificarne due. A nche l’aggiunta di u n ità funzionali è relativam ente sem plice, m a bisogna raggiungere il giusto equilibrio. E inutile disporre di 10 A LU se il chip non è in grado di passare loro le istruzioni abbastanza velocem ente da tenerle occupate. L’allungam ento della pipelinc tram ite aggiunta di nuovi stadi, ciascuno destinato allo svolgim ento di u n com p ito più piccolo in un tem po più breve, può increm entare le presta zioni, m a aum en ta anche gli effetti negativi delle predizioni errate sui salti, dei fallim enti di cache, degli in terru p t e in genere di tu tti quei fattori che interrom pono il norm ale flusso norm ale esecutivo. Inoltre, per p o ter sfruttare pienam ente la m aggiore lunghezza della pi peline, è necessario un clock più veloce, il che im plica un più elevato consum o di energia e un increm ento di p roduzione di calore. Resta infine l’introduzione del m ultithreading, il cui valore aggiunto sta nel perm et tere che un secondo thread utilizzi l’hardw are che sarebbe rim asto altrim enti inattivo. A se guito di alcuni esperim enti, si è stabilito che il su pporto del m ultithreading, a fronte di un increm ento del 5% della superficie del chip, produce u n m iglioram ento delle prestazioni del 2 5% per m olte applicazioni ed è perciò una b u o n a scelta. La prim a C P U Intel a usare il m u ltith re a d in g è stata X eon nel 2 0 0 2 ; il m u ltith re ad in g è stato aggiunto in seguito al
8.1
Parallelismo nel chip
541
Pentium 4 sin dalla versione a 3 ,0 6 G H z. Intel ha dato il nom e di hyperthreading all’im plem entazione del m ultithreading nel P entium 4. Alla sua base c’è l’idea di consentire a d u e thread (o anche a due processi, dal m o m en to che la C P U n o n può distinguere tra thread e processi) di essere eseguiti contem poraneam ente. Dal p u n to di vista del sistem a operativo, u n Pentium 4 con hyperthreading som iglia a un biprocessore in cui le C P U condividono cache e m em oria principale. II sistem a operativo seleziona i thread per l’esecuzione in m odo indipendente; se ci sono due applicazioni in ese cuzione nello stesso istante, il sistem a operativo può farle eseguire in parallelo. Per esem pio, se un dem o n e di posta riceve o spedisce em ail in background1 m entre un utente interagisce con u n altro program m a, i due program m i possono essere eseguiti contem poraneam ente pro prio com e se ci fossero d u e C P U disponibili. Il software applicativo progettato per l’esecuzione con thread m ultipli p u ò avvalersi di entram b e le C P U virtuali. Per esem pio, i program m i di m ontaggio video in genere perm et tono all’u ten te di specificare alcuni filtri da applicare ai fotogram m i di un certo intervallo. Q uesti filtri possono agire su lum inosità, contrasto, bilanciam ento del bianco e altre pro prietà di ciascun fotogram m a. Il p rogram m a p u ò decidere di affidare i fotogram m i pari a una C P U e quelli dispari all’altra, e i due processori virtuali possono proseguire in m odo del tu tto indipendente. Poiché i thread condividono tu tte le risorse hardware, si rende necessaria una strategia per la gestione della condivisione. Intel ha identificato q u attro strategie utili per la condivi sione di risorse associata all’hypethreading: duplicazione e ripartizione di risorse, condivi sione a soglia oppure totale. V ediam ole u n a per volta. C om in ciam o dalle risorse che vengono duplicate per i thread. Per esem pio, poiché ogni thread ha il proprio controllo del flusso, si è resa necessaria l’aggiunta di un secondo program counter. È stata duplicata anche la tabella che m appa i registri architetturali ( e a x , E B X , ecc.) nei registri fisici, n onché il controllore di in terru p t, visto che i thread possono es sere in terro tti in m odo indipendente. Poi c’è la condivisione ripartita delle risorse (partitioned resource sharing), secondo cui le risorse hardware sono divise rigidam ente tra i thread. Per esempio, se la C P U ha una coda tra due stadi funzionali della pipeline, m età delle posizioni della coda potrebbero essere dedi cate al thread 1, l’altra m età al thread 2. La ripartizione delle risorse è facile da ottenere, non richiede informazioni addizionali e fa sì che i thread non vadano in conflirto. Se tu tte le risorse sono ripartite è com e avere due C P U segarate. La ripartizione ha anche un aspetto negativo: può succedere fàcilmente che u n thread n o n usi alcune delle sue risorse che farebbero invece com odo a un altro thread, che però n o n ha diritto di usarle. D i conseguenza, alcune risorse che sarebbero potute servire a una qualche attività restano invece inoperose. La condivisione totale delle risorse (fu ll resource sharing) è il contrario della condi visione ripartita. Secondo questo schem a, ogni thread pu ò acquisire tu tte le risorse di cui h a bisogno: il prim o che arriva si serve da sé. Im m aginiam o però due thread, un o veloce che fa solo som m e e sottrazioni, uno p iù lento che svolge m oltiplicazioni e divisioni. Se le istru zioni sono caricate dalla m em oria con u n ritm o m aggiore rispetto alla velocità di esecuzione delle m oltiplicazioni e delle divisioni, il num ero d istruzioni arretrate del thread lento (che
1 Per elaborazione in background (“sullo sfondo") si intende l'elaborazione a bassa priorità di programmi che non hanno bisogno di interazioni con l'utente, e che quindi sono spesso a lui invisibili (N .d 77).
542
Capitolo 8
Cache delle tracce
Figura 8.9
Coda di fetch
Architetture per il calcolo parallelo
Alloca zione/ rinomina
Coda delle microop.
Scheduler
Registri
Esecuzione
D-cache
Condivisione delle risorse tra i thread della microarchitettura Netburst del Pentium 4.
si trova nella coda d ’attesa per l’inserim ento nella pipeline) crescerà di continuo. A un certo p u n to le istruzioni arretrate riem p iran n o com pletam ente la coda d ’attesa, costringendo il thread veloce ad arrestarsi p er m ancanza di spazio nella coda delle istruzioni. La condivi sione totale delle risorse risolve il problem a delle risorse inattive richieste da un thread, ma crea un problem a nuovo in cui u n thread p uò impossessarsi di così tante risorse d a rallen tare l’altro o add irittu ra da farlo fermare. U n o schem a in term ed io è la c o n d iv is io n e a so g lia (threshold sharing), secondo cui un thread p u ò acquisire le risorse d in am icam en te (n o n c’è ripartizione fìssa), m a solo fino a u n certo valore m assim o. Q u e sto app ro ccio p erm ette u n a certa flessibilità ed esclude il pericolo che un thread vada in starvation2 a causa della sua incapacità di procurarsi le ri sorse. Per esem pio, se nessun thread p u ò acquisire p iù dei 3 /4 della coda delle istruzioni, il th re a d più veloce p o trà sem pre proseguire la p ro p ria esecuzione, qualsiasi cosa faccia il thread più lento. L’h y p erthreading del Pentium 4 usa strategie di condivisione differenti a seconda delle risorse, nel tentativo di far fronte ai problem i cui si è accennato. La duplicazione è utilizzata per le risorse di cui i thread h a n n o sem pre bisogno, com e il program counter, la m appa dei registri e il controllore di in terru p t. La duplicazione di queste risorse richiede un increm ento della superficie del chip del 5% , un prezzo accettabile per il m ultithreading. Le risorse che sono così ab b o n d an ti per cui n on si corre il rischio di acquisizione da parte di un solo thread, com e le lince di cache, sono to talm en te condivise in m aniera dinam ica. Invece le risorse che controllano il funzionam ento della pipeline, com e le varie code presenti al suo interno, sono ripartite esattam ente tra i due thread. La Figura 8.9 illustra la pipeline principale della m i croarchitettura N etb u rst usata nel Pentium 4, laddove le caselle grigie e quelle bianche in dicano l’allocazione delle risorse tra il thread grigio e quello bianco. N ella figura n otiam o che tu tte le code sono ripartite a m età tra i thread, perciò nes suno dei d u e thread può soffocare l’altro. A nche i registri di allocazione e di rinom ina sono ripartiti. Lo scheduler è condiviso dinam icam ente con una soglia, per evitare che un thread reclami per sé l’intera coda. G li altri stadi della pipelinc sono totalm en te condivisi.
2 To starve vuol dire "morire di fame”; in questo contesto indica l'inattività involontaria di un thread dovuta all’esaurimento delle risorse (N.tLT.).
8.1
Parallelismo nel chip
543
C ’è da dire che il m u ltith read in g non è la panacea, m a che esiste anche u n suo aspetto negativo. Se la ripartizione delle risorse è facile da im plem entare, la loro condivisione dina m ica, specie se basata su soglia, richiede lavoro di am m inistrazione per m o n itorarnc l’uso in fase d ’esecuzione. O ltre a ciò, esistono delle situazioni in cui i program m i funzionano m olto peggio con il m ultith read in g che non senza. Per esem pio, si im m aginino due thread che, per funzionare bene, h a n n o bisogno en tram b i di 3 /4 della cache. Se eseguiti separatam ente, gi rano senza problem i co n pochi (costosi) fallim enti di cache. Se eseguiti insiem e, ciascuno di loro provoca m olti fallim enti di cache e il risultato complessivo potrebbe essere di gran lunga peggiore. Si possono trovare altre inform azioni sul m u ltithreading del P entium 4 in (G erber e Binstock, 2004; Koufaty e M arr, 2003; Tuck e Tullsen, 2003).
8.1.3
Multiprocessori in un solo chip
A nche se il m ultith read in g consente un increm ento significativo delle prestazioni a un co sto co n te n u to , p er certi tipi di applicazioni si richiedono prestazioni m olto superiori di quelle che può assicurare il m uld th read in g . A tal fine è diretto lo sviluppo dei m ultiproces sori (chip con due o più C P U ), che suscita particolare interesse nel m ercato dei server di fa scia alta e dell’elettronica di consum o. D iam o una rapida scorsa a entram bi i settori.
Multiprocessori omogenei in un solo chip G razie ai progressi della tecnologia VLSI è oggi possibile inserire in u n chip due o p iù C P U potenti. Q ueste C P U si definiscono m ultiprocessori perché condividono le stesse cache, di p rim o e secondo livello, e la m em oria principale (com e illustrato nel C apitolo 2). C o m u nem ente trovano applicazione nelle server farm che raggruppano m olti server web. La ca pacità di far coabitare due C P U in un unico sistema, condividendo non solo la m em oria, ma anche il disco e le interfacce di rete, p erm ette spesso di raddoppiare le prestazioni del server senza raddoppiarne i costi (anche se il costo della C P U raddoppia, il suo prezzo è solo una frazione di quello dell’intero sistema). Esistono due tipologie p red o m in an ti per il progetto di m ultiprocessori in un solo chip di piccole dim ensioni. La p rim a è m ostrata nella Figura 8.10(a): c’è davvero un solo chip, m a è d o tato di una duplice pipeline che gli p erm ette di raddoppiare potenzialm ente il th ro u g h p u t. La Figura 8 .10(b) m ostra il secondo tipo di progetto: nel chip ci sono due core
(a)
Figura 8.10
(b)
Multiprocessori a singolo chip, (a) Un chip con pipeline duplice, (bl Un chip con due core.
544
Capitolo 8
Architetture per il calcolo parallelo
separati, ciascuno contenente un’intera C P U . U n core (“nucleo, cuore”) è un grosso circuito, quale una C P U , u n controllore di I/O o una cache, che può essere inserito su di un chip in m aniera m odulare, spesso uno di fianco all’altro. Il p rim o progetto p erm ette la condivisione di alcune risorse, com e le u n ità funzionali, così che u n a C P U possa sfruttare le risorse inutilizzate da parte dell’altra C P U . Q uesto ap proccio però richiede la riprogettazione del chip e non si applica altrettanto bene al crescere del num ero di C P U . Per contro, l’inserzione di due o p iù core C P U sullo stesso chip è re lativam ente facile. L’argom ento m ultiprocessori sarà trattato ancora in questo capitolo. A nche se l’analisi sarà focalizzata sui m ultiprocessori costruiti a partire da chip con C P U singola, si può esten dere in larga m isura anche ai chip con p iù C P U .
Multiprocessori eterogenei in un solo chip U n a gam m a com pletam ente diversa di m ultiprocessori in un solo chip è costituita dai si stem i integrati e in special m odo dall’elettronica di consum o per contenuti audiovisivi, come apparecchiature TV, lettori D V D , videocam ere, console per i videogiochi, telefoni cellulari e così via. Si tra tta di sistem i che devono garantire prestazioni im pegnative nel rispetto di forti vincoli. A nche se questi dispositivi sem brano a prim a vista diversi, in realtà m olti di loro n on sono altro che piccoli calcolatori d o tati di una o p iù C P U , di m em orie, d i con trollori di I /O e d i dispositivi di I /O specifici. U n cellulare, per esem pio, contiene una C PU , u na m em oria, u n a piccola tastiera, u n m icrofono, un altoparlante e u n a connessione senza fili alla rete, il tu tto in u n piccolo involucro. Si consideri un lettore D V D portatile. Il co m p u ter al suo interno deve gestire le fun zioni seguenti. 1. C o n tro llo di un servom eccanism o econom ico e poco affidabile per il p u n tam en to del la testina. 2. C onversione da analogico a digitale. 3. C orrezione degli errori. 4. D ecodifica crittografica e gestione dei diritti digitali. 5. D ecom pressione video M P E G -2. 6. D ecom pressione audio. 7. C odifica dell’o u tp u t per i sistem i televisivi N T S C , PAL o SECA M . T u tte queste azioni vanno svolte rigorosam ente in tem po reale, con vincoli circa la qualità del servizio, l’assorbim ento di energia, la dissipazione del calore, le dim ensioni, il peso e il prezzo del dispositivo. I D V D co n ten g o n o una lu n g a spirale d ’inform azioni (analogam ente alla Figura 2.24 relativa ai C D ). La testina di lettu ra deve p u n tare alla spirale con cura m entre il disco ruota. Si riesce a contenere il prezzo del dispositivo grazie alla progettazione d i un m eccanism o re lativam ente sem plice e al controllo software della posizione della testina. Il segnale analo gico proveniente dalla testina deve essere digitalizzato p rim a della sua elaborazione. D opo la conversione è necessaria una pesante correzione degli errori perché i D V D ne contengo
8.1
Parallelismo nel chip
545
no m olti che devono essere corretti via software. La com pressione video usa lo standard M P E G -2 che richiede u n calcolo abbastanza com plesso (simile alla trasform ata di Fourier) per la decom pressione. La com pressione audio si avvale di un m odello psicologico dell’u dito e anch’esso richiede calcoli sofisticati in fase di decom pressione. Infine, audio e video devono essere trasformati in u n form ato adatto al televisore e che varia da paese a paese: N T S C , PAL o SEC A M . N on sorprende q u in d i com e sia sem plicem ente im possibile svolgere tu tte queste attività in tem po reale, via software e su C P U per uso generale. C iò di cui c’è biso gno è un m ultiprocessore eterogeneo conten en te p iù core, ciascuno specializzato per un certo com pito. La Figura 8.11 presenta un esem pio di lettore D V D . Le funzioni svolte dai core della Figura 8.11 sono tu tte diverse; ciascun core è stato progettato con cura p er svolgere il p roprio com pito al meglio e costare il m eno possibile. Per esem pio, il video dei D V D è com presso con M P E G -2 (da Motion Picture Experts Group, il gruppo di esperti che lo ha inventato). Si procede scom ponendo ogni fotogram m a (frame) in blocchi di pixel e applicando una com plicata trasform azione m atem atica a ogni blocco. U n fotogram m a può essere fatto in teram en te di blocchi trasform ati, oppure si p u ò specifi care che un determ in ato blocco sia uguale a un blocco del fotogram m a precedente, localiz zato a u n offset (Ax, Ay) rispetto alla sua posizione attuale, fatta eccezione per una m anciata di pixel cam biati. U n calcolo di questo tipo sarebbe m olto lento via software, m a è possibile costruire dei circuiti di decodifica M P E G -2 che possono svolgerlo in m odo abbastanza ra pido. A nalogam ente, anche la decodifica audio e la ricodifica com posita audio-video del se gnale (per rispettare gli standard televisivi m ondiali) possono essere svolte con m aggior suc cesso d a processori dedicati. Q ueste considerazioni giustificano largam ente la progettazione di chip m ultiprocessori co ntenenti core specializzati per applicazioni audiovisive. Il proces sore di controllo è u n a C P U program m abile di uso generale, perciò il chip m ultiprocessore può essere usato anche per altre applicazioni simili. Il telefono cellulare è u n altro dispositivo che necessita di un m ultiprocessore eteroge neo per il suo funzionam ento. I m odelli attuali possono includere m acchine fotografiche, videocam ere, giochi, navigatori web, lettori d i posta, ricevitori radio di segnali satellitari d i gitali; essi si basano sulla tecnologia cellulare (C D M A o G SM ) o su Intern et senza-fili (IEEE 8 02.11, detta anche tecnologia W iFi). I m odelli futuri saranno d otati di tu tti questi dispoCodificatore video -4 NTSC/PAL/ Decodificatore SECAM
Figura 8.11
Struttura logica dei lettori D V D contenente un m ultiprocessore eterogeneo co n vari co re d edicati.
546
Capitolo 8
Architetture per il calcolo parallelo
sitivi. G li apparecchi acquistano sem pre p iù funzionalità, gli orologi diventano m appe ba sate su G PS, gli occhiali diventano radio e la richiesta di m ultiprocessori eterogenei conti nuerà a crescere. .* Verrà presto il giorno in cui i chip avranno 500 m ilioni di transistor. Si tratterebbe di una dim ensione croppo grande perché si possa progettare a partire dai circuiti elem entari. Lo sforzo um ano richiesto sarebbe tale d a rendere un chip obsoleto ancor prim a di essere ulti m ato. L’unico m odo di procedere è usare i core (di fatto delle librerie), ciascuno contenente un sottoassem blato abbastanza grande, e collegarli tram ite il m ontaggio su un chip. Ai pro gettisti resta solo da decidere quale core C P U usare per il processore di controllo e quali pro cessori spedalizzati associargli per assisterlo. Spostare il carico di lavoro sul software che gira sul processore di controllo rallenta il sistema, m a consente chip più piccoli (e più econom ici). La presenza di processori diversi per l'elaborazione audio e video au m e n ta la superfìcie del chip e fa lievitare i costi, m a produce prestazioni migliori a parità di frequenza di clock, il che implica un m in o r consum o energetico e una m inore dissipazione del calore. Di conseguenza, i progettisti si trovano sem pre più spesso di fronte a questo tipo di com prom essi macrosco pici, p iuttosto che alle prese con i dettagli realizzativi dei com ponenti hardware. Le applicazioni audiovisive lavorano su grosse quantità di dati che devono essere ela borate velocem ente, perciò la m em oria (sotto varie form e) occupa dal 50% al 75 % della su perficie dei chip e questa percentuale è destinata a salire. Si pongono m olti interrogativi di progetto: quan ti livelli di cache prevedere? U sare una cache specializzata o una unificata? Q u a n to dovrebbe essere grande ciascuna cache? Q u a n to veloce? Vale la p en a inserire parte della m em oria nel chip? M eglio m em o ria SRAM o SDRAM ? Le risposte a queste dom ande han n o forti im plicazioni sulle prestazioni, sul consum o energetico e sulla dissipazione del calore del chip. Al di là del progetto dei processori e dei sistem i di m em oria, un altro tassello im por tante per le sue conseguenze è il sistem a di com unicazione: com e far com unicare tutti i core tra di loro? Nel caso di piccoli sistemi basterà un solo bus, ma nei sistem i grandi diverrebbe subito un collo d i bottiglia. In genere il p ro b lem a p u ò essere risolto o p tan d o p e r p iù bus o per un anello che attraversa tu tti i core. N ell'u ltim o caso, l'arbitraggio avviene tram ite il pas saggio di un piccolo p acchetto chiam ato to k e n (gettone) lungo l’anello. Per poter trasm et tere, u n core deve per prim a cosa catturare il token; q u an d o ha finito di com unicare lo può reintrodurre sull’anello perché riprenda a circolare. Q uesto protocollo previene le collisioni sull’anello. La Figura 8.12 presenta C o re C o n n e c t di IB M , un esempio di interconnessione nel chip. E u n ’arch itettu ra per la connessione di core su m ultiprocessori eterogenei su un chip, usata s o p ra ttu tto p er la p ro g ettazio n e d i ch ip c o n te n e n ti interi sistem i. In un certo senso, C oreC o n n ect sta ai m ultiprocessori nel sìngolo chip com e il bus PC I sta al Pentium , ovvero è la colla che tiene uniti i vari pezzi. Però, a differenza del bus P C I, C o reC o n n ect è stato progettato senza vincoli di retrocom patibilìtà dovuti a co m ponenti o protocolli precedenti, e senza i vincoli p ropri dei bus che risiedono sulle schede, com e il lim ite sul num ero di pie dini presenti sul connettore. C oreC o n n ect è com posto da tre bus. Q uello del p ro cesso re è un bus veloce, sincrono e a pipeline con linee dati di 32, 64 o 128 bit, tem porizzate a 66, 133, o 183 M H z. La ve locità m assim a di trasferim ento è 2 3 ,4 G bps (contro 4,2 G bps per ìl bus P C I). Il funziona m en to a pipeline perm ette ai core di richiedere il bus m entre è già im pegnato in un trasfe-
8.1
Figura 8.12
Parallelismo nel chip
547
Esempio di architettura CoreConnect di IBM.
rim ento e consente a core diversi d i usare co ntem poraneam ente linee dati distinte, com e per il bus P C I. Il bus del processore è ottim izzato p er il trasferim ento di blocchi corti ed è con cepito per connettere core veloci, com e la C P U , il decodificatore M P E G -2, le reti ad alta velocità o com p o n en ti sim ilari. Se il bus del processore fosse esteso a tu tto il chip le sue prestazioni degraderebbero, perciò esiste u n secondo bus per i dispositivi di I/O più lenti, com e gli UART, i timer, i con trollori USB e le porte seriali. Q u esto bus delle periferiche è stato progettato per avere un’in terfaccia sem plice con le periferiche a 8, 16 o 32 bit e per contenere non più di qualche cen tinaio di p o rte logiche. Anch’esso è sincrono, m a la velocità massima di trasferim ento è di 300 M bps. I due bus sono collegati attraverso un bridge sim ile a quello usato qualche anno fa per collegare i bus PC I e ISA nei P C , prim a che gli ISA divenissero obsoleti. Il terzo bus dei registri di p eriferica è m olto lento, asincrono e usa un handshakingper perm ettere a ogni processore di accedere ai registri di tu tte le periferiche per il controllo dei rispettivi dispositivi. È concepito per trasferim enti poco frequenti e di pochi byte alla volta. IBM C oreC onnect ha definito u no standard per i bus nel chip, per la loro interfaccia e per l'intelaiatura generale del chip con l’am bizione di creare una versione in m iniatura del m ondo P C I, in cui ogni produttore possa costruire processori e controllori che si interconnettano con facilità. Esiste però una differenza: nel m o n d o PCI i produttori costruiscono e vendono schede acquistabili dai distributori e dagli u te n ti finali. Nel m ondo C oreC onnect i core sono proget tati d a terze parti che però n o n realizzano i prodotti, m a li brevettano com e proprietà intel lettuale e vendono le licenze alle aziende di elettronica di consum o, che progettano i chip multiproccssori eterogenei basandosi sui core propri e su quelli sottoposti a licenza di terzi. Poiché la produzione di chip cosi grandi e complessi richiede investim enti massicci in im pianti pro duttivi, nella maggior parte dei casi le aziende di elettronica di consum o si lim itano alla pro gettazione e affidano la realizzazione del chip a p roduttori di sem iconduttori. Esistono num e rosi core di C P U (ARM , M IPS , PowerPC, e così via), di decodificatori M P E G , di processori di segnali digitali e per tutti i controllori di I/O standard. O ltre a C o reC o n n ect IB M , anche A M B A ( Advanced Microcontroller Bus Architecture) è usato largam ente (Flynn, 1997). A ltri bus di questo tipo, però m eno diffusi, sono V C I ( Virtual Component Interconnect) e O C P - I P ( Open Core Protocol-International Partnership), in com petizione tra loro p er u n a q u o ta di m ercato (Kogel e M eyr, 2004; O u ad jao u t e
548
Capitolo 8
Architetture per il calcolo parallelo
H o u zet, 2 0 0 4 ). E questo è so ltan to l’inizio: c’è già chi pensa alle reti nel chip (B enini e D e M icheli, 2 0 0 2 ). A causa delle difficoltà legate ai p ro b le m rd i dissipazione del calore (dovuti a loro volta a velocità di clock sem pre m aggiori) i m ultiprocessori nel chip sono oggi un tem a attuale; rim andiam o a (Claasen, 2003; Jerraya e W olf, 2005; K um ar et al., 2004; Lavagno, 2002; Lines, 2 0 0 4 ; Ravikum ar, 2004) per ulteriori inform azioni.
8.2
Coprocessori
D opo aver esam inato i m odi del parallelism o nel chip, facciamo un passo in avanti e ci in teressiam o al m odo di velocizzare un calcolatore m ediante l’aggiunta di un secondo proces sore specializzato. Esistono m olte varianti di c o p ro ce sso ri, dì dim ensioni m olto diverse. Sui m ainfram e IB M 360, e sui loro successori, esistono canali di I/O indipendenti per l’input e l’o u tp u t. Allo stesso m odo, il C D C 6600 disponeva di 10 processori indipendenti per le operazioni di I/O . A nche la grafica e l’aritm etica in virgola m obile si prestano all’uso di coprocessori, e lo stesso D M A può essere visto com e un coprocessore. In alcuni casi la C P U assegna al coprocessore un’istruzione o u n insiem e d ’istruzioni e gli ordina di eseguirle; in altri casi il coprocessore è più in d ip en d en te e lavora per conto proprio. Dal p u n to di vista fisico, i coprocessori possono-costituire apparati separati (i canali di I/O del 360), trovarsi su schede a innesto (i processori di rete) o occupare parte del chip principale (coprocessore in virgola m obile). In tu tti i casi, ciò che li caratterizza è il fatto di assistere nell’esecuzione un altro processore, che resta il processore principale. Esam iniam o ora tre settori in cui è possibile velocizzare le prestazioni: elaborazione di rete, m ultim edia e crittografia.
8.2.1
Processori di rete
O ggigiorno m olti calcolatori sono connessi a u na rete o a Internet. A seguito del progresso tecnologico deil'hardw are di rete, le reti sono oggi così veloci che è sem pre più difficile ela borare via softw are i dati in ingresso e in uscita. A questo riguardo sono stati sviluppati spe ciali processori di rete per gestire il traffico; m oiri calcolatori di fascia alta sono d o tati di pro cessori d i questo tipo. In questo paragrafo com inciam o con l’in tro d u rre le reti, per poi illu strare il funzionam ento dei processori di rete.
Introduzione alle reti Le reti di calcolatori sono d i due tipi: LA N (Locai-Area Network, “rete locale”), che connet to n o più co m p u ter aH’intern o di un edificio o di un cam pus universitario, e W AN ( WideArea Network, “rete geografica”), per la connessione di calcolatori che si trovano a grande di stanza. E th e rn e t è la LAN p iù diffusa: inizialm ente era costituita da cavi spessi contenenti un filo per ogni com puter, collegato tram ite una spina che veniva chiam ata eufem isticam ente sp in a a v a m p iro (vampire taf)). L’o d iern a E thernet prevede che i calcolatori siano collegati a un c o m m u ta to re (switetì) centrale, com e schem atizzato nella Figura 8.13. In origine, E thernet si trascinava a 3 M bps, ma la prim a versione commerciale raggiungeva già i 10 M bps. E stata poi sostituita da E thernet veloce (fast Ethernet) a 100 M b p s e successivamente da
8.2
Coprocessori
549
Impianto del provider di applicazioni
Figura 8.13
Connessione degli utenti ai server di Internet.
gigabit Ethernet a 1 G bps. Esiste già sul m ercato una versione di E thernet a 10 G bps e la prossim a sarà a 4 0 G bps. Le W A N sono organizzate in m odo diverso. Sono costituite da com puter per l’instradam en to , d etti router, collegati tram ite cavi o fibre ottiche, com e illustrato al centro della Figura 8.13. 1 dati sono suddivisi in fram m enti chiam ati pacchetti (packet) che vanno in genere dai 64 ai 1500 byte e che vengono trasferiti dalla m acchina m itten te alla d estin ata' ria passando attraverso u no o più router. A ogni passaggio (hop, “salto”), il pacchetto è m e m orizzato in un rou ter e q u in d i in oltrato al successivo lungo il cam m ino non appena la li nea di trasm issione lo consenta. Q uesta tecnica si chiam a com m utazione di pacchetto
store-and-forward Anche se m olte persone pensano a In te rn e t nei term ini di un’unica W A N , dal p u n to di vista tecnico è invece un insiem e di m olte W A N interconnesse. In ogni caso,- questa d i stinzione non è rilevante ai nostri scopi. La Figura 8.13 fornisce una visione panoram ica di Internet dal p u n to di vista dell’u tente dom estico. Il suo calcolatore e collegato a un server web tram ite una linea telefonica, per mezzo di m odem a 56 Kbps o ADSL, com e illustrato nel C apitolo 2 (in alternativa è possibile una connessione che usa la linea della T V via cavo, nel qual caso la parte sinistra della figura cam bia leggerm ente e il provider diventa la co m pagnia che fornisce la T V via cavo). Il calcolatore dell’utente spezzetta i dati da inviare al server in pacchetti e li spedisce all IS P (Internet Service Provider, “fornitore di servizi Internet”) dell’utente, una società che garantisce ai propri utenti l’accesso a Internet. L’ISP ha in ge nere una connessione ad alta velocità (di solito una fibra ottica) verso una delle reti regio nali o una backbone (dorsale) d i Internet. I pacchetti dell’uten te sono inoltrati nella rete un salto alla volta finché n on raggiungono il server web. M olte società che forniscono servizi web dispongono di un firew all (“m uro di fuoco”), u n co m p u ter specializzato che filtra tu tto il traffico in ingresso e cerca di rim uovere i pac chetti indesiderali (per esem pio quelli che provengono da hacker che cercano di introdursi nel server). 11 firewall è collegato alla LAN, in genere a un co m m utatore E thernet, che in strada i pacchetti al server desiderato. N atu ralm en te, le cose nella realtà sono m olto più com plesse di com e le abbiam o presentate, m a l’idea sostanziale della Figura 8.13 resta valida.
550
Capitolo 8
Architetture per il calcolo parallelo
Il software di rete è organizzato per p ro to c o lli, ciascuno dei quali com prende un in sieme di form ati, di sequenze di scam bio e di regole sul significato dei pacchetti. Per esem pio, q u an d o un u ten te vuole scaricare una pagina web da un server, il suo applicativo di na vigazione ( browser) spedisce al server u n pacchetto contenente la richiesta G ET PAGE e che usa H T T P (HyperText Transfer Protocol, “protocollo di trasferim ento di ipertesti”); il server recepisce la richiesta e la elabora. Esistono m olti protocolli e spesso vengono usati in com binazione. N ella m aggior parte delle situazioni i protocolli sono stru ttu ra ti com e u n a serie di livelli ( layer), in cui i pacchetti vengono passati dai livelli superiori a quelli inferiori per ché li elaborino e, una volta raggiunto il livello p iù basso, perché siano trasmessi. D al lato destinatario, i pacchetti si fanno strada tra i livelli in ordine inverso, dal basso verso l’alto. D al m o m en to che l’elaborazione dei protocolli è l’attività principale dei processori di rete, dobbiam o dilungarci ancora un po’ sull’argom ento prim a di passare ai processori veri e propri. T orniam o per u n m o m en to alla richiesta GET PAGE. C om e avviene la sua spedi zione al server web? In pratica il software di navigazione per prim a cosa stabilisce una con nessione con il server web basata sul protocollo T C P ( Transmission Control Protocol, “pro tocollo di controllo della trasm issione”). Il software che im plem enta questo protocollo veri fica che i pacchetti siano stati ricevuti tu tti co rrettam ente e nell’ordine giusto. Se un pac chetto viene perso, T C P garantisce che verrà ritrasm esso finché n o n raggiunga il destinatario. Il navigatore w eb com pila la richiesta GET PAGE com e un messaggio H T T P e lo passa al software T C P per la trasm issione in rete. 11 software T C P aggiunge all’inizio del messag gio un’intestazione contenente una serie di num eri e altre informazioni, che ovviamente prende il nom e di in te sta z io n e T C P ( TCP header). Q u a n d o h a finito la sua attività, il softw are T C P passa l’intestazione e la parte di mes saggio vero e p ro p rio (il payload, che in questo caso co n tien e la richiesta G E T PAGE) a un altro co m p o n en te softw are che im p lem en ta il p ro to c o llo I P (Internet Protocol). Q uesto softw are an tep o n e al messaggio u n 'in te s ta z io n e IP c o n te n en te l’indirizzo del m itte n te (la m acch in a d a cui proviene il pacch etto ) e quello del destinatario (la m acch in a cui il pac ch etto è d ire tto ), il m assim o n u m ero di passaggi cui p u ò sopravvivere (per evitare che i p acchetti sopravvivano in d efin itam en te), u n a checksum (per rilevare errori di trasm is sione o di m em o ria), e altri cam pi. Il pacchetto risultante (dall’intestazione IP, intestazione T C P e richiesta G ET PAGE) viene passato in basso a livello di trasm issione dei dati (data link layer), in cui gli viene alle gata un’ulteriore intestazione che serve alla trasm issione vera e propria. 11 livello di trasm is sione dei dati allega in fondo al messaggio anche una checksum che si chiam a C R C (Cyclic Redundancy Check, “controllo a ridondanza ciclica”) e che serve per rilevare errori di tra smissione. Potrebbe sem brare rid o n d an te la presenza di due checksum a livello di trasm is sione dei d ati e a livello IP, m a serve a m igliorare l’affidabilità. A ogni salto lungo la rete viene controllato il valore di C R C , q u in d i viene rimosso e rigenerato (insiem e all’intesta zione) secondo un form ato ad atto al collegam ento in uscita. La Figura 8.14 m ostra le sem bianze del pacchetto quan d o si trova in una E thernet; il pacchetto in una linea telefonica è simile, eccetto per il fatto che viene preceduto da una “intestazione di linea telefonica” in vece che da un’intestazione E thernet. La gestione delle intestazioni è im p o rtan te ed è una delle m ansioni dei processori di rete. È evidente che abbiam o appena sfiorato la superficie di una m ateria sconfinata quali sono le reti di com puter. Per una trattazione più dettagliata si faccia riferim ento a (T anenbaum , 2003).
8.2
1ntestazione Ethernet
Figura 8.14
Intestazione IP
Intestazione TCP
Messaggio
Coprocessori
551
C k c
Schema dei pacchetti Ethernet.
Introduzione ai processori di rete Le reti collegano m olò tipi di dispositivi. G li utenti dom estici si collegano tram ite PC (desk to p o portatili), m a anche (e sem pre più) tram ite console di videogiochi, P D A (com puter palm ari) e telefoni cellulari; le aziende sono collegate tram ite P C o server. D ’altra parte, esi stono anche m olti dispositivi che svolgono nella rete una funzione d ’interm ediazione, tra cui router, com m utatori, firewall, proxy web e bilanciatori di carico. E interessante notare che questi sistemi interm ediari richiedono una q u an tità di risorse preponderante nella rete, dal m o m en to che trasferiscono il m aggior nu m ero di pacchetti al secondo. A nche i server sono abbastanza esigenti, a differenza dei calcolatori degli u ten ti dom estici. U n pacchetto ricevuto p u ò richiedere vari tipi di elaborazione, a seconda della rete o del pacchetto stesso, prim a di essere ino ltrato lungo la linea in uscita o prim a di essere con segnato a un program m a applicativo. A lcune elaborazioni possibili sono; decidere dove spe dire il pacchetto, scom porlo o riassem blarne i pezzi, gestire la sua qualità di servizio (spe cialm ente per i flussi audio o video) o la sua sicurezza (per esem pio cifrandolo o decifran dolo), com prim erlo o espanderlo, e così via. In u n a LAN a 4 0 G bps e con pacchetti di 1 KB, u n co m p u te r di rete potrebbe do ver elaborare quasi 5 m ilioni di pacchetti al secondo. C o n pacchetti di 64 byte si arriva a circa 80 m ilioni d i pacchetti al secondo. Lo svolgim ento delle attiv ità di cui sopra nel giro di 12-200 ns è sem plicem ente im possibile per il softw are (per n o n parlare del fatto che di ogni p acchetto servono più copie): è fondam entale l’assistenza dell’hardware. U n a possibile soluzione per elaborare velocem ente i pacchetti prevede l’utilizzo di un A S IC (Application-Specific Integrateci Circuit, “circuito integrato per applicazione specifica”) progettato su m isura. U n chip siffatto è una specie di program m a cablato in grado di cal colare l'insiem e d i funzioni per cui è stato progettato. A ttualm ente m olti router usano cir cuiti A SIC. T uttavia i chip A SIC h a n n o num erosi problem i: in n an zitu tto richiedono m olto tem po sia in fase di progettazione, sia in fase di produzione. Inoltre sono rigidi, perciò se gli si vuole aggiungere u n a funzionalità bisogna progettare e costruire u n chip ex novo. La ge stione dei bachi poi è u n in cu b o , visto che l’unico m odo per riparare u n A SIC è progettare, costruire, spedire e installare un chip nuovo. Infine, si tratta di chip m olto costosi, a m eno che se ne produca u n quantitativo così grande da am m ortizzare i costi di sviluppo. U n ’altra possibile soluzione usa i circuiti FP G A ( Field Programmable Gate Array, “cir cuito a m atrice program m abile”), costituiti da u n certo num ero di porte che possono essere organizzate in un circuito m ediante la m odifica dei collegam enti tra di loro. Lo sviluppo di questi chip im piega m olto m eno tem p o rispetto agli A SIC e in più gli F P G A possono es sere ricablati sul cam po: basta rim uoverli dal sistema e inserirli in un dispositivo speciale per la loro riprogram m azione. D ’altra p arte sono circuiti com plessi, lenti e costosi, il che fa di loro circuiti poco richiesti, se n o n per certe applicazioni di nicchia. Infine veniam o ai p ro ce sso ri d i rete, dispositivi program m abili che possono gestire i pacchetti in ingresso e in uscita alla stessa velocità con cui viaggiano sui collegam enti (cioè
552
Capitolo 8
Architetture per il calcolo parallelo
in tem p o reale). U n progetto tipico vede il processore di rete posto su una scheda a innesto, insiem e a una m em oria e ai circuiti logici di supporto. La scheda è collegata a una o più li nee di rete che sono dirette al processore di rote, che estrae i pacchetti, li elabora e li spedi sce su di u n a linea diversa (se è u n router) o lungo il bus principale di sistem a (per esempio lungo il bus PC I) nel caso si tratti di un dispositivo che si trova sul PC di un utente finale. La Figura 8.15 illustra la scheda e il chip di u n co m une processore di rete. La scheda è provvista di m em orie SRA M e SD R A M , usate in genere in m odi diversi. La SRAM è più veloce e più costosa della S D R A M , perciò la sua disponibilità è m olto li m itata. La SRAM si usa p er contenere le tabelle d ’instradam ento (routing table) e altre stru t ture d ati im p o rta n ti, m en tre la S D R A M m em orizza i pacchetti in elaborazione. Grazie alla separazione tra il chip e le m em orie, i progettisti possono decidere liberam ente le quantità di SRAM e di SD RA M da includere nella scheda. C osì facendo, è possibile dotare di poca m em oria le schede d i fascia bassa co n u n a sola linea in ingresso (destinate per esem pio a un P C o a un server), m entre le schede d i fascia alta, progettate per i grandi router, possono es sere provviste d i m olta più m em oria. I chip dei processori di rete sono ottim izzati per elaborare velocem ente un gran n u m ero di pacchetti in ingresso e in uscita; in particolare, un router con una mezza dozzina di linee potrebbe trovarsi a elaborare m ilioni di pacchetti al secondo su ogni linea. L’unico m odo per raggiungere queste velocità è di costruire processori di rete con m olto parallelismo; in farti, ogni processore di rete c o n tie n e svariati P P E (acronim o di n om i diversi: Protocol/Programmable/Packet Processing Engine, "m otóre di elaborazione del protocollo/pro gram m abile/ di pacchetto"). O g n i PPE è u n core R ISC (eventualm ente m odificato) con un piccolo q u antitativo di m em oria per il program m a c le variabili. I m otori PPE possono essere organizzati in due m odi diversi. 11 caso più sem plice con siste nell im piego di P PE identici: q u an d o il processore di rete riceve un pacchetto (dalla rete o dal bus) lo sm ista a u n PPE inattivo perché lo elabori. Se rutti i PPE sono im pegnati, il pacchetto entra in una coda co n ten u ta nella SD RA M della scheda, in attesa che si liberi un
Figura 8.15
Scheda e chip di un com une processore di rete.
8.2
Coprocessori
553
PPE . In u n ’organizzazione di questo tipo n on ci sono i collegam enti orizzontali mostrati nella Figura 8.15 tra u n PPE e l’altro, perché questi n on hanno alcun bisogno di com unicare. L’altro tipo di organizzazione dei PPE è a pipeline, e ogni m otore esegue u n passo di elaborazione e inserisce nel pacchetto in uscita u n pu n tato re al PPE successivo nella pipeline. In questo m odo, la pipeline dei PPE som iglia m olto alle pipeline delle C P U che ab biam o studiato nel C ap ito lo 2. In entram be le organizzazioni, i m otori PPE sono intera m ente program m abili. I progetti più avanzati prevedono PPE con m ultithreading, dotati perciò di diversi in siemi di registri e di u n particolare registro che determ ina l’insieme correntem ente in uso. G razie a questa caratteristica è possibile eseguire p iù program m i alla volta e la co m m u ta zione da un program m a (cioè da u n thread) all’altro avviene sem plicem ente m odificando la variabile “insiem e dei registri corrente”. C o m u n em ente, un PPE co m m u ta im m ediatam ente a favore d i u n thread eseguibile n o n appena quello in esecuzione va in stallo, per esem pio a seguito di un accesso alla SD R A M (che richiede diversi cicli di clock). G razie a questo ac corgim ento è possibile utilizzare appieno i PPE anche q u an d o si bloccano per frequenti ac cessi alla SD R A M o q u an d o eseguono un’altra operazione esterna p iu ttosto lenta. O ltre ai PPE, i processori di rete co ntengono sem pre un processore di controllo (in ge nere u n a C P U R ISC ) im piegato p er svolgere tu tto quel lavoro che n o n h a a che fere con l’e laborazione dei pacchetti, com e l’aggiornam ento delle tabelle d ’instradam ento. Il suo pro gram m a e i suoi dati si trovano in m em oria locale del chip. Inoltre, m olti chip di rete con tengono uno o più processori specializzati p er l’esecuzione di operazioni di corrispondenza tra form e (pattern matching) o di altre operazioni critiche. Si tratta per lo più di piccoli ASIC in grado di effettuare una sola, sem plice operazione, com e la ricerca di un indirizzo di d e stinazione all'in tern o della tabella d ’instradam ento. T utti i c o m p o n en ti del processore di rete com unicano per mezzo di u n o o più bus paralleli del chip, con velocità di svariati G igabit al secondo.
Elaborazione dei pacchetti Alla sua ricezione, un pacchetto passa attraverso un certo num ero di fasi di elaborazione, in d ip en d en tem en te dal fatto che il processore di rete sia o m eno organizzato a pipeline. A lcuni processori di rete dividono queste fasi in d u e tipi di operazioni, quelle da effettuare sui pac chetti in ingresso (dalla linea di rete o dal bus di sistema), d ette perciò elaborazione in en trata dei pacchetti di rete, e quelle d a effettuare sui pacchetti in uscita, che costituiscono l'elaborazione in uscita dei pacchetti di rete. Q u a n d o si utilizza questa distinzione, un pac chetto subisce prim a l’elaborazione in entrata, poi quella in uscita. La dem arcazione tra ope razioni in entrata e in uscita è flessibile, perché alcune fasi possono essere svolte indifferen tem en te in u n o dei d u e m om enti (per esem pio la raccolta delle statistiche sul traffico). In seguito analizziam o u n possibile o rd in am ento delle diverse fasi, m a si tenga presente che non tu tti i pacchetti necessitano di tu tte le fasi e che sono possibili altri ordinam enti ugualm ente validi.
1. Verifica della checksum. Se il pacchetto in en trata proviene da E thernet, viene rical colato il valore C R C e co n fro n tato con quello nel pacchetto per verificare che n o n ci siano stati errori di trasm issione. Se il C R C di E thernet è corretto o assente, viene ri calcolata la checksum IP e co n fro n tata co n quella del pacchetto IP per assicurarsi che
554
Capitolo 8
Architetture per il calcolo parallelo
n o n sia stato danneggiato d a u n b it difettoso della m em oria del m itten te e che avrebbe lasciato traccia nella checksum ivi calcolata. Se le checksum sono corrette, il pacchetto viene accettato per essere u lteriorm ente elaborato; in caso contrario, viene semplicem ente scartato.
2. Estrazione di campi. V iene analizzata la p arte significativa d ellintestazione e vengono estratti i cam pi più im po rtan ti. All’intern o di un com m utatore E thernet viene esami nata solo l’intestazione E thernet, m entre in un router IP viene ispezionata l’intestazione IP. I cam pi chiave sono m em orizzati nei registri (organizzazione con PPE paralleli) o nella SR A M (organizzazione a pipeline}.
3. Classificazione dei pacchetti. Il pacchetto è classificato in base a una serie di regole program m abili. La classificazione p iù semplice distingue tra pacchetti di dati c di con trollo, m a di solito si effettuano distinzioni m o lto p iù accurate.
4. Selezione del percorso. M olti processori di rete predispongono un percorso veloce e ottim izzato per la gestione dei pacchetti più com uni, m entre gli altri pacchetti sono trattati diversam ente, spesso a opera del processore di controllo. Si effettua quindi una selezione tra il percorso veloce e quello lento. 5- Determinazione del destinatario di rete. I pacchetti IP contengono l’indirizzo del de stinatario di 32 bit. N o n è possibile, né ta n to m eno auspicabile, effettuare la ricerca della destinazione di ogni pacchetto IP all interno di una tabella di 2 32 elem enti, per ciò la parte più significativa dell’indirizzo IP viene usata per identificare il num ero di rete, il resto per specificare u n a m acchina in quella rete. I num eri di rete possono avere una lunghezza arbitraria, perciò la determ inazione del num ero della rete destinataria no n è banale ed è com plicata dal fatto che ci sono più corrispondenze possibili e che quella giusta è la più lunga. In genere questa fase è affidata a un circuito A SIC ad hoc. 6 . In stra d a m e n to . U na volta determ inala la rete del destinatario, si sceglie la linea d ’u scita lungo cui instradare il pacchetto cercandola in una tabella della SRAM . Anche per questa fase si può usare un circuito ASIC. 7 . S c o m p o siz io n e e riassem b lag g io . I program m i cercano di passare a livello T C P in genti q u antitativi di dati per ridurre il num ero di chiam ate di sistema, m a T C P IP e E thernet definiscono tu tti u n a dim ensione massima per i pacchetti che possono gestire. In conseguenza di queste lim itazioni, Ì dati utili e i pacchetti vengono scom posti dal m itten te e i pezzi risultanti vengono riassemblari dal destinatario. F. uno dei com piti che possono essere svolti dal processore di rete.
8. Elaborazione. Alle volte sono necessari calcoli m olto pesanti sui dati che costituiscono il messaggio (com e com pressione/decom pressione o cifratura/decifratura). È un altro co m p ito affidabile al processore di rete.
9. Gestione dell’intestazione. Può essere necessario aggiungere, rim uovere o m odificare alcuni cam pi dcH’intestazione. Per esem pio, l’intestazione IP ha un cam po che conta il nu m ero di salti che il pacchetto p u ò effettuare prim a di venire scartato. Q uesto cam po va decrem entato d o p o ogni ritrasm issione: un altro co m pito adatto al proces sore di rete.
8.2
Coprocessori
555
10. Gestione della coda. I pacchetti in entrata o in uscita vengono spesso messi in coda m entre atten d o n o il loro tu rn o di elaborazione. Le applicazioni m ultim ediali potreb bero aver bisogno di u n certo intervallo tra u n pacchetto e l’altro per evitare il feno m eno del bitter. U n firewall o un ro u ter potrebbero distribuire il carico di pacchetti in entrata su diverse linee in uscita in base ad alcune regole. T utte queste attività possono essere svolte dal processore di rete.
11. Generazione della checksum. I pacchetti in uscita devono essere provvisti di check sum . La checksum IP p u ò essere generata dal processore di rete, m a il valore di C R C E th ern et di solito viene calcolato daU’hardware.
12. Contabilità. In alcuni casi si richiede un po’ di contabilità sul traffico di pacchetti, so p ra ttu tto quan d o u n a rete instrad a traffico per conto di altre reti com e servizio com merciale. Il processore di rete può occuparsi della contabilità.
13. Raccolta di statistiche. Infine, m olte organizzazioni in ten d o n o accum ulare statistiche circa il proprio traffico e il processore di rete si presta bene alla loro raccolta.
Incremento delle prestazioni Le prestazioni sono fondam entali per i processori di rete: che cosa si può fare per migliorarle? Prim a di rispondere, d o bbiam o definire che cosa voglia dire m iglioram ento. U na m etrica possibile è il nu m ero di pacchetti inoltrati ogni secondo, u n ’altra è il num ero di byte inol trati al secondo. Sono due m isure differenti e n o n è detto che uno schem a che funziona bene con pacchetti piccoli funzioni altrettan to bene con pacchetti più grandi. In particolare, nel p rim o caso potrebbe giovare u n a riduzione del num ero di destinazioni ricercate in ogni se condo, m entre ciò potrebbe non essere vero nel caso di pacchetti grandi. Il m odo più diretto per m igliorare le prestazioni è aum entare la velocità di clock del processore di rete. O vviam ente il m iglioram ento n o n è lineare, perché p u ò essere influen zato dal tem p o di ciclo della m em oria e da altri fattori. E poi, un clock più veloce vuol dire più calore da dissipare. U na soluzione che m olto spesso ripaga è rag g iu n ta di più PPE e l’increm ento del pa rallelismo, soprattutto quando si usa l’organizzazione parallela dei PPE. Anche l’allungam ento della pipeline p uò aiutare, ma solo se l'intera elaborazione di un pacchetto sia suddivisibile in fasi p iù corte. U n’altra tecnica possibile prevede l’adozione di un processore specializzato o di un A SIC per gestire specificatam ente le operazioni che richiedono m olto tem po, che vengono eseguite rip etu tam en te e la cui l’esecuzione via hardw are risulta m olto più veloce di quella via software. Tra i candidati ci sono sicuram ente le ricerche nelle tabelle, il calcolo della check sum e la cifratura. L’aggiunta di un m aggior num ero di bus interni e l’am pliam ento dei bus esistenti p u ò aiutare ad aum entare la velocità co n trib u en d o ad accelerare lo spostam ento dei pacchetti nel sistema. Infine, tra i m iglioram enti si può considerare anche la sostituzione della SD R A M con m em oria SRAM , m a che co m p o rta costi aggiuntivi. N atu ralm en te resta m olto da dire sui processori di rete. Alcuni riferim enti in tal senso sono (Corner, 2005; Crow ley et al., 2002; Lekkas, 2003; Papaefstathiou et al., 2004).
556
8.2.2
Capitolo 8
Architetture per il calcolo parallelo
Processori multimediali
U n altro settore in cui si rendono utili i coprocessori è quello della gestione di im m agini fo tografiche e di flussi audio o video ad alta risoluzione. Le norm ali C P U non sono m olto do tate p er elaborare volum i di dati così ingenti com e quelli richiesti da queste applicazioni. Perciò alcuni PC odierni dispongono d i coprocessori m ultim ediali cui affidare una larga parte del lavoro, e ciò diverrà la n o rm a nei PC futuri.
Il processore multimediale Nexperia C i o ccu p iam o di questo settore, la cui im p o rtan za è in c o n tin u a ascesa, attraverso un esem pio concreto: i Philips N experia, u n a fam iglia di chip disponibili a diverse frequenze di clock. Nexperia è un m ulti processore eterogeneo in un chip a u to c o n te n u to nel senso della Figura 8.11. C o n tie n e diversi core, tra cui u n a C P U V L IW TriM edia per il controllo, ma anche num erosi core per l’elaborazione au d io, video, di im m agini o di rete. Può es sere usato com e processore a u to n o m o principale all’in te rn o di lettori o registratori C D , D V D o M P 3 , negli apparecchi TV, nelle m acchine fotografiche o nelle videocam ere, o p pure com e coprocessore all’in te rn o di un P C , d estin ato all’elaborazione di im m agini e di flussi m u h i m edi ali. In entram b e le co nfigurazioni, il chip esegue un piccolo sistem a ope rativo in tem p o reale. N experia svolge tre funzioni: cattu ra i flussi in entrata e li converte in stru ttu re dati re sidenti in m em oria, le elabora e, infine, le em ette in uscita nei form ati appropriati ai vari d i spositivi collegati. Per esem pio, q u an d o u n P C è usato com e lettore D V D , N experia può es sere program m ato per leggere il flusso video cifrato e compresso proveniente dal disco D V D , decifrarlo, decom prim erlo e q u in d i inviarlo alla finestra di visualizzazione con la risoluzione appropriata. U na volta caricato il program m a di lettura del D V D in N experia, tu tto ciò può essere svolto in background senza coinvolgere la C P U principale del com puter. T utti Ì dati in arrivo vengono in n an zitu tto caricati in m em oria per la loro elaborazione: n o n c’è nessun collegam ento d iretto tra i dispositivi in in p u t e quelli in o u tp u t. La cattura dell’in p u t com prende la decodifica di u n a gran varietà di risoluzioni e form ati video (tra cui M P E G -1 , M P E G -2 e M P E G -4 ), d i form ati audio (tra cui AAC, D olby e M P 3), cui fa seguilo la loro conversione in stru ttu re d ati adeguate per la m em orizzazione e la successiva elaborazione. L’in p u t p uò provenire dal bus P C I, d a E thernet o d a linee dedicate (per esem pio un m icrofono o u n sistem a stereo collegato d irettam ente al chip). Il chip N experia ha 45 6 pin, alcuni dei quali sono disponibili p er la connessione diretta di flussi in e n trata o in uscita. L’elaborazione dei dati è affidata al softw are della C P U TriM edia, che può essere pro gram m ata per qualsiasi com pito. I r a le elaborazioni più com uni ci sono il deinterfaoriatnento video p er au m en tarn e la nitidezza, la correzione della lum inosità, del contrasto o del colore delle im m agini, il loro ridim ensionam ento, la conversione tra form ati video e la riduzione del rum ore. Spesso la C P U agisce com e il con traente principale di un appalto, subappal tan d o gran p arte del lavoro ai core specializzati del chip. Le funzionalità o u tp u t co m p ren d o n o la codifica delle stru ttu re dati in un form ato ade guato al dispositivo di o u tp u t, la fusione di più sorgenti di dati (video, audio, im m agini e grafica 2 D ) e ìl controllo dei dispositivi di o u tp u t. C o m e per l’in p u t, l’o u tp u t p u ò essere in viato sul bus PC I, su E thernet o su linee d ’uscita dedicate (per esem pio un altoparlante o un am plificatore).
8.2
Coprocessori
557
La Figura 8.16 riporta un diagram m a a blocchi del chip N experia P N X 1500. Esistono altre versioni di Nexperia leggerm ente diverse, perciò q u ando ci riferiam o in questo para grafo a “N experia” intendiam o precisam ente l’im plem entazione P N X 1500. N experia è com posto d a q u attro sezioni principali: il controllo, l’in put, l’elaborazione e l’o u tp u t. La C P U è il processore V L IW TriM edia a 32 bit e a 300 M H z già trattato nel Paragrafo 8.1.1. Il suo program m a, solitam ente scritto in C o in C++, ne determ ina le funzionalità. N experia n o n ha m em oria nel chip, a parte la cache inclusa nella C P U TriM edia, ma la sua interfaccia con la m em oria esterna perm ette di collegare dagli 8 ai 256 M B di SD RA M D D R , quan to basta per gran parte delle applicazioni multim ediali. C on un clock di 200 M H z, la larghezza di banda della m em oria è di 1,6 G B/s. Il chip contiene anche un’interfaccia P C I per trasferim enti di 8, 16 o 32 bit a 33 M H z. Q u a n d o la C P U è usata com e processore a u to n o m o in un dispositivo elettronico di con sum o (per esem pio in un lettore D V D ), l’interfaccia P C I pu ò anche fungere da arbitro del bus. Per esem pio, l’interfaccia può essere usata per com unicare con un’unità D V D . La connessio n e d ire tta a E th e rn e t è fo rn ita d a u n core ded icato che p u ò gestire connessioni d a 10 o 100 M bps. U n a videocam era basata su N experia pu ò così inviare a d istanza u n segnale video digitale tram ite l’uscita E th ern et verso un dispositivo di cattu ra o di visualizzazione. Controllo ■ Input TriMedia
□ — Input video
Verso la SDRAM Interfaccia di memoria Input generico
Verso il bus PCI ^
Interfaccia del bus PCI
8 canali audio
Input audio Verso Ethernet Cristallo x ~ a 27 M Hz
Ethernet Input digitale A w io , reset, clock
Altro: I/O, timer Elaborazione ■
Decifratore D V D
1
Output
: 1
►
Output generico
►
»
T * --
Output audio
Debugging Output digitale
£ Figura 8.16
7Z
32
2
;
Mnlnre grafico
____________________
Video composito ;
Ridimens. video
M ultiprocessore eterogeneo nel chip Nexperia.
8 canali audio
558
Capitolo 8
Architetture per il calcolo parallelo
Il core successivo gestisce l’avvio del chip (boot), il ripristino del suo stato iniziale (re set), i clock o altre caratteristiche m eno im p o rtanti. Se viene inviato un segnale lungo un certo pin di Nexperia, si causa un reset. Il core p uò essere program m ato anche per com portarsi com e u n in te rru tto re inanim ato: se la C P U n o n riesce ad azionarlo per u n certo intervallo di tem po, conclude che il sistem a è bloccato e si riaw ia di propria iniziativa. N ei dispositivi au to n o m i il riavvio p u ò essere co m an d ato da u na m em oria flash. Il core è tem porizzato da u n cristallo esterno oscillante a 27 M H z , il cui segnale viene m o ltip licato in te rn a m e n te 64 volte per raggiungere gli 1,728 G H z usati nel chip. Di n o rm a la C P U gira a p iena velocità e gli altri co m p o n en ti girano alla velocità necessaria al c o m p letam en to del p ro p rio lavoro. T uttavia, la C P U può rallentare il clock per rispar m iare energia. È prevista anche una m o dalità di sospensione per spegnere quasi tu tte le fu n zio n i q u a n d o n o n c’è lavoro d a svolgere, in m odo d a risparm iare la carica delle b a tte rie nei dispositivi p o rtatili. L’u n ità contiene anche 16 “sem afori” utilizzabili per la sincronizzazione tra i dispositivi. Q u an d o un core cerna di scrivere u n valore non nullo in un semaforo, la scrittura va a buon fine solo se il semaforo vale 0, altrim enti fallisce e il semaforo resta intatto. La scrittura di 0 ha sem pre successo. Poiché un solo core per volta può acquisire il controllo del bus, queste ope razioni sono atom iche e forniscono gli strum enti necessari per realizzare la m utua esclusione. Q u an d o vuole acquisire u n a risorsa, u n core cerca di scrivere un valore n o n nullo in un ceno semaforo. Se la scrittura ha successo vuol dire che ha accesso esclusivo alla risorsa finché non la libera scrivendo u no zero nel sem aforo corrispondente. Se la scrittura non riesce, il core deve ritentare periodicam ente finché la scrittura non va a b u o n fine, perciò questi semafori no n sono proprio Ì semafori classici definiti nel C apitolo 6. Volgiamo la nostra attenzione alla sezione di input. Il core di in p u t video riceve un flusso digitale video deH’am piezza d i 10 b it, lo converte in un flusso a 8 bit per mezzo di un al goritm o di smoothìng (“lisciatura” di un segnale, che risulta in una sfocatura nel caso di im m agini) e lo m em orizza nella SD R A M esterna. In m olti casi, l’in p u t digitale è l’o u tp u t di u n convertitore analogico-digitale esterno, che riceve un segnale televisivo analogico, pro veniente d a un’an ten n a o da un cavo. Il core per in p u t generico è in grado di catturare a 100 M H z un segnale n o n stru ttu rato e am pio 32 bit, proveniente d a u n a qualsiasi sorgente di dati, e di m em orizzarlo nella SD R A M . Può catturare anche dati stru ttu rati per mezzo di m arcatori che delineano l’inizio e la fine di record di dati. Il rou ter che si trova davanti ai due in p u t video digitali li dem ul tip la e p uò anche effettuare alcune trasform azioni video al volo. 11 demultiplexing è necessa rio perché vengono usati gli stessi pin per ricevere sia l’in p u t video, sia l’input generico. Il core dell’inp u t audio p uò catturare fino a 8 canali di m usica o di segnali vocali, con una precisione di 8, 16 o 32 bit e a u n a frequenza massima di 96 K H z; i segnali sono poi m em orizzati nella SD R A M . Può anche decodificare i form ati com pressi, mischiare i canali, cam biare la frequenza di cam pionam ento e applicare filtri, il tu tto eseguito al volo prim a di m em orizzare i dati audio. Il core deH’in p u t digitale può ricevere i segnali digitali audio conform i allo standard digitale audio di Sony-Philips (IE C 1937). G razie a questa caratteristica è possibile trasfe rire audio digitale d a u n dispositivo a u n altro senza perdita di qualità. D opo la cattu ra dei dati audio, video o di altro tipo, arriva il m om ento della loro ela borazione, affidata alla sezione successiva del chip. I film venduri o noleggiati su D V D sono
8.2
Coprocessori
559
cifrati (scrambled) per im pedirne la copia. Il decifratore D V D restituisce il film ato originale, com presso con M P E G -2. L’operazione di decifratura opera interam ente in m em oria: pre leva i dati d a u n buffer e scrive il risultato in u n altro buffer. Il decodificatore di lunghezze prosegue l’elaborazione e rim uove la codifica a lunghezza variabile dai dati com pressi con M P E G -2 {o con M PE G -1) p ro ducendo dati sem i-decom pressi a favore del core di elaborazione M P E G , che in questo caso viene sostituito dal software eseguito dal processore TriM edia. L a ragione p er questa suddivisione dei co m piti è che la ri soluzione della codifica a lunghezza variabile (decodifica di H uffm an e decodifica run-length) n o n riesce a sfruttare appieno le potenzialità di TriM edia. Si è q u in d i pensato di dedicarle un paio di m illim etri quad rati di silicio p er svolgerla via hardw are. T u tte queste operazioni operano in m em oria e pro d u co n o una sem plice m appa di pixel. La m appa di pixel p uò essere d i tre form ati, ciascuno dei quali si diversifica in tre o q u attro varianti con dim ensioni o param etri diversi. Nel prim o form ato, d etto a colore in dicizzato, ogni valore della m appa è un indice di una CLUT ( Color Look Up Table, “tabella di ricerca dei colori"), co n ten en te valori di colore a 24 bit, più una maschera del canale alpha di 8 bit, usata p e r determ inare il grado d i trasparenza q u an d o vengono sovrapposti più livelli. Il secondo fo rm ato è RGB (alla base del fu n z io n am en to degli scherm i dei co m puter), e separa i valori d ’intensità dei colori rosso, verde e blu di ogni pixel. Il YUV venne ideato p er la codifica dei segnali televisivi. Invece di codificare i c o m p o n en ti rosso, verde e biu separatam ente, il dispositivo di acquisizione effettua una trasform azione che scom pone il segnale in un canale di lum inanza (lum inosità) e in due canali di crom inanza (colore). Q u esto sistem a m e tte a disposizione u n a larghezza di banda m aggiore per la lum i nanza rispetto alla crom inanza, il che p erm ette di raggiungere u n a m aggiore im m u n ità dal rum ore di trasm issione. Il form ato YUV è sicuram ente appropriato per le applicazioni che ricevono u n segnale T V ed em etto n o ancora u n segnale TV. Se si restringe il n u m ero di for m ati m em orizzati a u n ventaglio lim itato di alternative, è possibile far sì che ogni core sia in grado di leggere l’o u tp u t di tu tti gli altri core. Il core d i ridim ensionam ento video accerta u n a lista di com piti di ridim ensionam ento e li esegue, a u n ritm o che può raggiungere i 120 m ilioni di pixel al secondo. Tra questi com piti ci sono: 1. deinterlacciam ento 2. ridim ensionam ento orizzontale e verticale 3. m odifica lineare e n o n lineare del rap p o rto larghezza/altezza 4. conversione tra diversi form ati di pixel 5. calcolo dell’istogram m a di lum inanza 6. riduzione dello sfarfallio (flicker). I segnali delie trasm issioni televisive sono interiacciati ( interlaced), ovvero per ogni foto gram m a, che consiste in 525 righe di scansione (625 nei sistemi PAL e SEC A M ), vengono trasmesse prim a le righe pari, poi quelle dispari. Il deinterlacciam ento perm ette la scansione progressiva che consente u n a qualità migliore; tu tte le righe vengono scandite, elaborate e trasmesse secondo il loro vero o rd in e e sono q u in d i aggiornate con frequenza do ppia rispetto a quella dei fotogram m i interiacciati (29,97 fotogram m i al secondo per N T S C , 25 per PAL
5bU
Capitolo B
Architetture per il calcolo parallelo
e SEC A M ). Il ridim ensionam ento orizzontale e verticale consente di ingrandire o ridurre le dim ensioni delle im m agini, per esem pio d o p o un’operazione di ricaglio. Lo standard televi sivo definisce u n rapporco larghezza:altezza (aspect ratio) di 4 :3, m a esìstono televisori pa noram ici da 16:9 che si prestano m eglio alla visione di pellicole cinem acografìche di rap porto 3:2. Il core dì ridim ensionam ento p uò convertire questi rapporti, usando algoritm i li neari o n o n lineari. Può anche convertire tra i form ati a colore indicizzato, RG B e YUV e costruire l’istogram m a dei valori d i lu m inanza, u tile per m igliorare la qualità dell’im m agine in o u tp u t. Infine, è possibile effettuare determ in ate trasform azioni per ridurre il fenom eno di sfarfallio delle im m agini. Il m otore grafico effettua il rendering (“resa”) bidim ensionale di un oggetto a partire dalla sua descrizione. P uò anche riem pire le superfici racchiuse tra i p u n ti descritti ed effet tuare le operazioni grafiche di b itb lt, che consistono nel prendere due m appe rettangolari di pixel e com binarle usando varie funzioni booleane. N o n c’è alcun core per l’elaborazione audio, svolta interam ente dal software della C P U TriM edia. I segnali audio richiedono così pochi dati che la loro elaborazione softw are non costituisce un problem a. Inoltre sono poche le applicazioni che richiedono l’elaborazione au dio, che si riduce quasi esclusivam ente alla conversione tra form ati. Il core per il debugging aiuta progettisti e prog ram m ato ri a effettuare il debugging dell’hardw are e del software, e fornisce un’interfaccia agii stru m en ti JT A G (Joint Test Action Group), definiti dallo standard IE E E 1149.1. La sezione di o u tp u t preleva dalla m em oria i dati elaborati e li spedisce in uscita. Il core del video com posito riceve u n a o più strutture d ati che rappresentano pixel, le norm alizza e le com bina, quindi le invia in uscita. I dati in form ato indicizzato vengono de-indicizzati al volo per ottenere Ì pixel reali, e i form ati incom patibili vengono op p o rtu n am en te convertiti. Q uesto core p uò anche eseguire la correzione del contrasto, della lum inosità o del colore, lad dove richiesto, o svolgere l’operazione di chroma keying, con cui è possibile isolare dallo sfondo un attore che si staglia davanti a uno scherm o blu e collocarlo visivamente su di un o sfondo prelevato da un’altra sorgente. È u n a tecnica utile per produrre filmati in cui u n o o più per sonaggi in prim o piano si m uovono davanti a u no sfondo, im m obile o che scorre alle loro spalle, diverso da quello di acquisizione. Infine, il risultato viene convertito nel form ato ap propriato al sistema video o televisivo in questione (per esem pio N T S C , PAL o SECAM ), com presa la generazione di im pulsi per la sincronia orizzontale e verticale. O gni sistem a basato su N experia è in grado di gestire autom aticam ente, senza costi ag giuntivi, i tre form ati televisivi ed è perciò com m ercializzabile in qualunque p a n e del m ondo. A nalogam ente, la funzionalità H D T V (High Definition TeleVision) in un form ato qualsiasi può essere o tten u ta con una m odesta q u an tità di software aggiuntivo per gestire le conver sioni tra le stru ttu re dati in m em oria. Il core di o u tp u t generico si lim ita a trasferire a 100 M H z 8, 16 o 32 bit per ogni ci clo, con una larghezza di banda massima di 3,2 G bps. Se si collega l’o u tp u t generico di un chip N experia all’in p u t generico di u n altro chip Nexperia, è possibile trasferire file a un tasso superiore a quello d i E thernet gigabit. Q uesta interfaccia perm ette alla C P U di produrre via software o u tp u t personalizzati di qualsiasi tipo. Il router di o u tp u t effettua il multiplexing di due sorgenti e m ette a disposizione altre funzionalità, com e l’aggiornam ento a 60 H z di uno scherm o piatto (T F T ) di dim ensioni
8.2
Coprocessori
561
m assim e di 1280 x 7 6 8 pixel, o l’aggiornam ento interlacciato o progressivo di apparecchi televisivi. Il m ultiplexing è reso necessario dal fatto che il video com posito e l’o u tp u t gene rico condividono gli stessi pin. Il core di o u tp u t audio p u ò gestire fino a 8 canali con precisione di 32 b it e a u n a fre quenza di cam pionam ento di 9 6 K H z. In genere il segnale in uscita è diretto a un conver titore digitale-analogico. L’o u tp u t digitale p u ò essere connesso all’ingresso digitale di un d i spositivo che usa lo standard digitale audio di Sony-Philips. L’ultim o core gestisce l’I /O d ’uso generale, per cui sono disponibili sedici pin, colle gabili a b o tto n i, a in terru tto ri o a L E D che p erm ettano la loro attivazione, o la percezione del loro stato, via software. Sono utilizzabili anche per protocolli di rete di m edia velocità (fino a 20 M bps) controllati dal software. All’interno di questo core si trovano anche timer, contatori e gestori d ’eventi. C o m e si è visto, N experia presenta u n enorm e potere di calcolo per applicazioni au diovisive e, com e tu tti i processori di rete, perm ette alla C P U di sm istare parti ingenti del carico di lavoro. La capacità di calcolo è m aggiore di q u an to possa sem brare in u n prim o m om en to , perché tu tti i core girano in parallelo agli altri e alla C P U . Sorprendentem ente il processore costa m eno di 20 euro se acquistato in grossi quantitativi. D ovrebbe essere ora chiaro q u an to siano p o te n ti i coprocessori e specialm ente quelli basati su m ultiprocessori eterogenei nel singolo chip. Per la presentazione di un chip analogo, m a destinato alla te lefonia e n on alle applicazioni m ultim ediali, si veda (Nickolls et al., 2003).
8.2.3
Crittoprocessori
La sicurezza è il terzo settore in cui sono m olto diffusi i coprocessori, so p rattu tto per qu an to riguarda le reti. Q u a n d o si stabilisce u n a connessione tra un client e un server, spesso la prim a cosa che viene richiesta a entram bi è l’autenticazione reciproca. A tal fine stabiliscono una connessione cifrata così da poter trasferire i dati in m odo sicuro, vanificando ogni tentativo di introm issione nella linea. Il p ro b lem a legato alla sicurezza è che, per garantirla, bisogna ricorrere alla c ritto grafia, che richiede però m o lte risorse di calcolo. E sistono d u e tipologie di m etodi c ritto grafici: a chiave simmetrica e a chiave pubblica. La prim a si basa sull’idea di co n fo n dere tu tti i b it del messaggio, p ro d u cen d o p iù o m eno ciò che si o tte rreb b e inserendolo in un frullatore elettro n ico . La seconda si basa sulla m oltiplicazione e sull’elevam ento a poten za d i n u m eri m o lto g ran d i (per esem pio di 1024 bit) e im pegna m olte risorse di tem po . M olte aziende h a n n o p ro d o tto critto-coprocessori, spesso so tto form a di schede a in nesto nel bus P C I, per gestire i calcoli richiesti dalla cifratura sicura dei d ati (per la loro trasm issione o m em orizzazione) e dalla loro successiva decifratura. Q uesti coprocessori sono provvisti di hardw are speciale che consente loro di svolgere tu tte le necessarie opera zioni crittografiche m olto più velocem ente d i q u an to possa fare una C P U . Sfortunatam ente, la descrizione dettagliata del fu n zio n am en to dei crittoprocessori richiederebbe in n an zitu tto una spiegazione abbastanza accurata della stessa crittografìa, il che va oltre gli scopi di q u e sto libro. Si possono trovare m aggiori inform azioni sui critto-coprocessori in (D aneshbeh e H asan, 200 4 ; Lutz e H asan, 2004).
562
8.3
Capitolo 8
Architetture per il calcolo parallelo
Multiprocessori con memoria condivisa
A bbiam o visto com e introdurre il parallelism oJnel chip o all’in tern o di singoli sistemi tra m ite l’aggiunta di u n coprocessore. Il passo successivo è la com binazione di più C P U per form are sistemi più grandi. Q u esti sistemi si dividono in due categorie: m ultiprocessori e m ulticom puter. C om inciam o con il definire il significato di questi term ini, poi ci inoltre rem o nell’analisi dei m ultiprocessori e dei m ulticom puter.
8.3.1
Multiprocessori e multicomputer a confronto
In u n sistem a di calcolo parallelo, le varie C P U che operano su parti diverse di uno stesso co m p ito devono poter com unicare tra loro p er scambiarsi inform azioni. Le m odalità della com unicazione sono oggetto di grande d ib attito nella com unità degli architetti degli elabo ratori. Sono stati proposti e im plem entati d u e progetti diversi, i m ultiprocessori e i m u lti com puter, che si distinguono per la presenza o per l’assenza di m em oria condivisa- Q uesta differenza influisce sul loro progetto, sulla loro costruzione e program m azione, nonché sui loro costi e dim ensioni.
Multiprocessori U n multiprocessore è un calcolatore in cui tu tte le C P U condividono una m em oria com une, com e schem atizzato nella Figura 8.17. T utti i processi che cooperano in un m ultiprocessore possono condividere un solo spazio degli indirizzi virtuali m appato nella m em oria com une. O gn i processo p uò leggere o scrivere una parola di m em oria per mezzo di semplici istru zioni LOAD e STORE; n o n serve altro perché del resto si occupa l’hardware. D ue processi possono com unicare in m odo m olto sem plice: u n o scrive dati in m em oria, l’altro è in grado di leggerli. La facilità con cui d u e (o più) processi riescono a com unicare tram ite operazioni sulla m em oria è la ragione della diffusione dei m ultiprocessori. È un m odello sem plice da capire per i program m atori ed è applicabile con successo a un gran num ero di problem i. Si consi deri, p er esem pio, u n program m a che ispeziona un’im m agine e che elenca tu tti gli oggetti in essa co n ten u ti. U n a copia deH’im m agine è co n ten u ta in m em oria, com e m ostrato dalla Figura 8.17(b). C iascuna delle 16 C P U elabora un processo singolo cui è stata assegnata una delle 16 porzioni dell’im m agine da analizzare. C iononostante, ogni processo ha accesso al l’intera im m agine, il che è essenziale poiché alcuni oggetti possono occupare più sezioni co n tigue. Se un processo scopre che un oggetto si estende aH’interno di un’altra porzione, può seguire l’oggetto sem plicem ente leggendo le parole di quella porzione. In questo esem pio al cuni oggetti verranno scoperti da p iù processi, perciò sarà necessario attribuire delle coor d inate che p erm ettano di contare a posteriori q u an te case, alberi e aeroplani ci sono nel l’im m agine. D al m o m en to che tu tte le C P U di u n m ultiprocessore vedono la stessa im m agine della m em oria, c’è una sola copia del sistem a operativo e, di conseguenza, c’è una sola m appa delle pagine e una sola tabella dei processi. Q u a n d o un processo si biocca, la sua C P U salva il suo stato nelle tabelle del sistem a operativo e cerca al loro interno un altro processo da eseguire. È proprio questa visione di u n ’unica m em oria che distingue un m ultiprocessore da un m u lti com puter, in cui invece ogni calcolatore ha la p ropria copia del sistem a operativo.
8.3
Multiprocessori con memoria condivisa
563
CPU
Memoria
condivisa
1 p
1 p
1 p (a)
Figura 8.17
h
P
-
P
-
P
-
P
Y :
1 p (b)
(a) Multiprocessore con 16 CPU che condividono una memoria comune. (b) Immagine ripartita in 16 porzioni, ciascuna analizzata da una CPU diversa.
U n m ultiprocessore, com e tu tti i calcolatori, deve avere dispositivi di I/O , com e i dischi o gli adattatori di rete, e altre periferiche. In alcuni sistemi m ultiprocessore solo u n a certa C P U h a accesso ai dispositivi di I /O ed è perciò d o tata di funzioni speciali per 1*1/0. Invece si parla di SMP (Symmetric MultiProcessor, “m ultiprocessore sim m etrico”) quando tu tte le C P U h an n o uguale accesso a tu tti i m o d u li di m em oria e a tu tti i dispositivi di I/O , e sono usate in m odo intercam biabile dal sistem a operativo.
Multicomputer Il secondo progetto di architettu ra parallela prevede per ogni C P U una m em oria privata, cioè accessibile solo da essa e o non dalle altre. Un progetto di questo tipo prende il nom e di multicomputer o di sistema a memoria distribuita ed è illustrato nella Figura 8.18(a). L’aspetto fondam entale di un m ulticom puter, che lo distingue d a u n m ultiprocessore, è il fatto che ogni C P U è d o tata di una m em oria privata e locale, cui pu ò accedere tram ite sem plici istruzioni LOAD e STORE, m a cui nessun altra C P U pu ò accedere. D u n q u e i m ultiprocessori h an n o u n solo spazio degli indirizzi fìsici com une a tu tte le C P U , m entre i m ulti co m p u ter hanno u no spazio degli indirizzi fisici per ogni C P U . V isto che le C P U dei m u ltico m p u ter n o n possono com unicare attraverso scritture e letture della m em oria com une, c’è bisogno di u n altro m eccanism o di com unicazione: la so luzione ad o ttata è lo scam bio di messaggi lungo la rete di interconnessione. Tra i m u lti co m p u ter annoveriam o B lueG ene/L di IB M , Red Storm e i cluster di Google. L’assenza di una m em oria condivisa via hardw are ha im plicazioni im portanti sulla stru t tura del software di un m ulticom puter. N o n è più possibile avere un solo spazio virtuale de gli indirizzi in cui tu tti i processi sono in grado di leggere e scrivere per mezzo dell’esecu zione di semplici istruzioni LOAD e STO R E . Per esempio, se la C P U 0 della Figura 8 .1 7 (quella nell’angolo in alto a sinistra) scopre che parte del proprio oggetto si estende all’in tem o della porzione assegnata alla C P U 1, p u ò c o m u n q u e accedere alla coda dell’aeroplano co n ti n u an d o a leggere dati dalla m em oria. Viceversa, q u ando la C P U 0 della Figura 8 .1 8 fa la stessa scoperta, non può leggere in alcun m odo la m em oria della C P U 1. Per accedere a quei dati deve avvalersi di u n m eccanism o sostanzialm ente diverso.
564
Capitolo 8
Architetture per il calcolo parallelo
M
M
M
M
■Memoria privata CPU
M -
P -
M
P -
M -
P -
M -
P -
CPU
M Rete di interconnessione per lo scambio di messaggi
Rete di interconnessione per lo scambio di messaggi
M
-
P
-
P
-
P P
□ 0 Q -
iz z i P
P
P
P
T M
M
M
(a) Figura 8.18
M
(b)
(a) Multicomputer con 16 CPU, ciascuna con la propria memoria privata, (b) Immagine bitmap della Figura 8.17 suddivisa tra le 16 memorie.
Infatti deve in n an zitu tto scoprire (in qualche m odo) quale C P U possiede i dati che le inte ressano e spedirle q uindi una richiesta di copia dei dati. D i norm a questa operazione blocca la C P U finché la richiesta non viene soddisfatta. All’arrivo del messaggio alla C P U 1, il suo softw are deve analizzarlo e restituire i dati richiesti. Q u an d o la C P U 0 riceve il messaggio di risposta, il suo software si sblocca e c o n tin u a l’esecuzione. La co m u nicazione tra i processi di u n m u ltic o m p u te r avviene q u in d i tram ite le pri m itive softw are s e n d e r e c e i v e . C iò rende la stru ttu ra del softw are m olto diversa e di gran lunga p iù com plessa risp etto a u n m ultiprocessore. In o ltre è chiaro com e diventi particolarm ente problem atico in u n m u ltico m p u ter riuscire a suddividere i dati correttam en te e assegnarli alle locazioni in m o d o o ttim ale; la q u estione non costituiva u n a grosso problem a nei m ultiprocessori perché in quel caso la collocazione dei dati n o n influiva sul la correttezza o sulla p ro g ram m ab ilità del codice, tu tt’al p iù sulle sue prestazioni. In po che parole, prog ram m are u n m u ltic o m p u te r è m o lto p iù difficile che program m are un m ultiprocessore. Se le cose stanno così, perché m ai qualcuno dovrebbe voler costruire m ulticom puter, q uan d o i m ultiprocessori sono più facili da program m are? La risposta è semplice: i m ulti co m p u ter grandi sono m o lto p iù sem plici ed econom ici da costruire rispetto a m ultipro cessori con lo stesso nu m ero di C P U . Riuscire a im plem entare una m em oria condivisa an che solo da qualche centinaia di C P U è praticam ente un’impresa, m entre è semplice costruire u n m u ltico m p u ter con 10.000 C P U o più. Nel seguito del capitolo studierem o un m u lti c o m p u ter con p iù di 50.000 C P U . C i troviam o davanti a un dilem m a: i m ultiprocessori sono difficili da costruire, ma fà cili da program m are, i m u ltico m p u ter sono facili da costruire, m a difficili da program m are. Per queste ragioni sono stari co m p iu ti sforzi ingenti per riuscire a costruire sistem i ibridi che fossero relativam ente facili da costruire e program m are. C om e risultato di questi sforzi si è giunti alla conclusione che la m em oria condivisa può essere im plem entata in m odi diversi,
8.3
Multiprocessori con memoria condivisa
565
ciascuno co n i propri vantaggi e svantaggi. C osì u n a fetta considerevole della ricerca arm ale nelle architetture parallele si concentra sulla convergenza dì architetture m ultiprocessore e m ultico m p u ter che conservi i p u n ù di forza d i ciascuna. Il S anto G raal di questa disciplina è riuscire a ideare progetti scalab ili, ovvero che c o n tin u in o a com portarsi bene anche al cre scere delle dim ensioni per l’aggiunta di altre C P U . U n approccio p er la costruzione di sistemi ibridi si basa sul fatto che i sistemi di cal colo m oderni n o n sono m onolitici, bensì co struiti com e una serie di livelli (il tem a di que sto libro). Q uesta intuizione apre la strada aH’im plem entazione della m em oria condivisa a livelli diversi, com e m ostra la Figura 8.19. Nella Figura 8.19(a) la m em oria condivisa è im plem entata dall'hardw are com e in un vero m ultiprocessore. Secondo questo progetto, c’è una sola copia del sistema operativo con un solo insieme di tabelle e, in particolare, con una sola tabella di allocazione della m em oria. Q u a n d o u n processo ha bisogno di più m em oria, in via una trap al sistem a operativo e questo cerca u n a pagina lìbera nella propria tabella e la m appa nello spazio degli indirizzi del chiam ante. Dal p u n to di vista del sistema operativo c’è una sola m em oria ed esso si lim ita a m antenere traccia via software dell’attribuzione delle pagine ai processi. C om e vedrem o, sono possibili m olte im plem entazioni hardw are di una m em oria condivisa.
Macchina 1
Macchina 2
Macchina 1
Macchina 2
Macchina 1
Macchina 2
Memoria condivisa
Memoria condivisa
Memoria condivisa
(a)
(b>
elem enti per tener traccia di tu tti i blocchi. In realtà la directory è m olto più piccola, perciò può capitare che n o n ci sia abbastanza spazio per alcuni elem enti (la ri cerca all’in tern o della directory è svolta in m aniera associativa). In tale evenienza, la directory di appartenenza è costretta a em ettere una richiesta broadcast a tu tte le altre 17 schede per localizzare il blocco. Il co m m u tato re crossbar delle risposte è coinvolto nel protocollo di coe renza e aggiornam ento delle directory, perché gestisce gran parte del traffico di risposta al richiedente. La divisione del traffico di protocollo su due bus (indirizzi e risposte), e del traf fico dati su d i u n terzo bus, increm enta il volum e di dati trasferiti nel sistema. G razie alla distribuzione del carico di lavoro tra num erosi dispositivi che risiedono su schede diverse, il Sun Fire E 25K raggiunge delle prestazioni m olto elevate. O ltre ai 2,7 m i liardi di snooping/s già m enzionati, il piano centrale p u ò gestire fino a nove trasferim enti sim ultanei, tra nove schede m itten ti e nove destinatarie. Il crossbar dei dati è largo 32 byte, perciò a ogni ciclo di clock è possibile trasferire 288 byte attraverso il piano centrale. C o n una frequenza di clock di 150 M H z, ciò equivale a un picco di larghezza di banda cum ula tiva d i 40 G B /s q u an d o tu tti gli accessi avvengono a distanza. Se poi il software è in grado di collocare le pagine in m odo tale da garantire una predom inanza di accessi locali, la lar ghezza di banda del sistem a p u ò superare notevolm ente i 40 G B /s. R im andiam o a (C harlesw orth, 2002; C harlesw orth, 2001) per maggiori inform azioni tecniche su Sun Fire.
8.3.5
Multiprocessori COM A
Le m acchine N U M A e C C -N U M A presentano lo svantaggio per cui i riferim enti alla m e m oria distante sono m olto più lenti degli accessi alla m em oria locale. Le m acchine C C -N U M A nascondono in una certa m isura questa differenza di prestazioni grazie al caching. M algrado ciò, se la q u an tità di dati d istanti richiesti eccede di m olto la capacità della cache, si verifi cheranno co n tin u i fallim enti di cache e le prestazioni degraderanno sensibilm ente. D u n q u e ci troviam o da u n a p a n e con le m acchine U M A che hanno prestazioni ec cellenti, m a che sono lim itate per d im ensioni e abbastanza costose; dall’altra ci sono le m ac chine N C -N U M A che raggiungono dim ensioni m aggiori, m a richiedono u n a collocazione delle pagine m anuale o sem iautom atica, spesso con risultati altalenanti. Il problem a è che è difficile predire quali pagine saranno richieste e dove; inoltre, le pagine costituiscono spesso u n’unità tro p p o grande perché le si possa trasferire da una parte all'altra del sistema. Le m ac chine C C -N U M A , com e il Sun Fire E 25K , possono m anifestare scarse prestazioni quando m olte C P U richiedono dati distanti. T u tto considerato, ciascuno di questi progeni presenta delle gravi lim itazioni. Esiste u n altro tipo di m ultiprocessori che cerca di aggirare questi problem i usando ogni m em oria principale di C P U com e u n a cache. Q u esto progetto si chiam a COMA ( Cache Only Memory Access, “accesso alla m em oria di tip o cache”) e no n richiede che ogni pagina abbia u n a m acchina prefissata di appartenenza, com e succede nelle m acchine N U M A e C C -N U M A . Infatti il con cetto di pagina perde di significato: lo spazio degli indirizzi fi sici è invece diviso in linee di cache che vengono trasferite all incerno del sistem a su richiesta.
590
Capitolo 8
Architetture per il calcolo parallelo
Le linee n o n h an n o u n a m acchina che le ospita di preferenza, sono un po’ com e i nom adi di alcuni paesi del Terzo M ondo: la loro casa è il luogo in cui si trovano in quel m om ento. U na m em oria che si lim ita ad attrarre le linee q u an d o sono richieste si dice memoria d ’at trazione, in inglese attraction memory, in contrapposizione a home meniory. L’utilizzo della RAM principale com e ima grande cache au m en ta notevolm ente il tasso di hit e d u n q u e le prestazioni. S fortunatam ente, com e al solito, niente si ottiene per niente. I sistem i C O M A in tro d u co n o due nuovi problem i: 1. com e localizzare le linee d i cache 2. che cosa succede q u an d o viene estromessa dalla m em oria l’ultim a copia di una linea. Il prim o problem a riguarda il latto che, q u an d o la M M U ha trad o tto l’indirizzo virtuale in un indirizzo fisico, se la linea non si trova nell’hardw are della vera cache è difficile stabilire se sia veram ente in m em oria. L’hardw are di paginazione non dà alcun aiuto, perché ogni pa gina è fatta di m olte linee di cache che vagabondano liberam ente. Inoltre, se anche si sapesse che la linea n o n si trova in m em oria, ...d o v e si trova allora? N on c’è m odo di chiederlo alla sua m acchina di appartenenza, perché non c’è alcuna m acchina di appartenenza. Esistono delle proposte p er risolvere il problem a della localizzazione. Al fine di stabi lire se u n a linea di cache si trova in m em oria, è possibile aggiungere nuovo hardw are che tenga traccia di un’etichetta per ogni linea presente nella cache. La M M U potrebbe poi con frontare l’etich etta della linea richiesta co n le etichette delle linee di cache in m em oria in cerca di u n a corrispondenza. In alternativa, si possono m appare le pagine intere senza richiedere però la presenza di tu tte le linee di cache. Secondo questa soluzione, l’hardw are dovrebbe tenere u n a b it m ap per ogni pagina; ciascun b it corrisponderebbe a u n a linea di cache e ne indicherebbe la pre senza o l’assenza. Q u esto progetto si chiam a COMA semplice (S-C O M A ) e stabilisce che, se u n a linea è presente, deve trovarsi nella posizione corretta all’in tern o della sua pagina, m a se n on è presente, qualsiasi tentativo di utilizzarla causa una trap che consente al software di cercarla e di caricarla. A questo p u n to si rende necessario saper reperire linee veram ente distanti. U na solu zione è quella di attribuire a ogni pagina una m acchina di appartenenza in term ini della col locazione del suo elem ento d i directory, non dei suoi dati. C osi è possibile spedire un mes saggio alla m acchina di appartenenza q u an to m eno per localizzare la linea di cache. Un al tro schem a richiede d i organizzare la m em oria com e u n albero e percorrerlo verso l’alto fin ché n on viene trovata la linea ricercata. Il secondo problem a elencato precedentem ente equivale a non cancellare l’ultim a copia di una linea. C om e nelle m acchine C C -N U M A , anche qui una linea di cache si può trovare sim ultaneam ente presso più nodi. Al verificarsi di un fallimento di cache si rende necessario il caricam ento di una linea, il che spesso richiede l’estromissione di un’altra linea. C h e cosa suc cede se si sceglie u n a linea che è u n a copia unica? In tal caso bisogna evitare di cancellarla. U n a soluzione è interrogare la directory e verificare se ci sono altre copie. In caso af ferm ativo si può cancellare la linea senza problem i, altrim enti bisogna trasferirla da qualche altra parte. U n’altra soluzione consiste neO 'etichetiare una copia di ogni linea com e copia originale che non può essere mai cancellata. In questo m odo si può evitare il controllo nella directory. T iran d o le som m e, le m acchine C O M A p ro m e tto n o prestazioni m igliori di quelle
8.4
Mullicompuler a scambio di messaggi
591
C C -N U M A , ma ne esistono ancora pochi esem plari e ci vuole m aggiore esperienza per po ter giudicare. Le prim e due m acchine C O M A sono state H KSR-1 (B urkhardt et al., 1992) e la D ata D iffùsion M achine (H agersten et a l , 1992). U na m acchina più recente è SDAARC (E schm ann et al., 2002).
8.4
Multicomputer a scambio di messaggi
C o m e indicato nella Figura 8.21, ci sono d u e tipi di processori paralleli M IM D : i m ulti processori e i m ulticom puter. N el paragrafo precedente abbiam o studiato i prim i e abbiam o visto che il loro sistema operativo li percepisce com e provvisti di una m em oria condivisa cui è possìbile accedere tram ite le ordinarie istruzioni di LOAD e STORE. A bbiam o illustrato le possibili im p lem en tazio n i d i questa m em oria condivisa: sn o o p in g bus, co m m u tazio n e crossbar, reti a com m utazione m ultilivello e altri schemi basati su directory. Al di là di ciò, i program m i scritti per un m ultiprocessore possono accedere a ogni locazione di m em oria senza sapere nulla della topologia interna o dello schem a im plcm entativo. Q uesta illusione è ciò che rende i m ultiprocessori così attraen ti e la ragione per cui costituiscono un m odello di program m azione così gradito agli sviluppatori di software. A ogni m odo, anche i m ultiprocessori presentano alcune lim itazioni ed è per questo che i m u ltico m p u ter sono altrettan to im p o rtan ti. In prim o luogo, le prestazioni dei m u lti processori peggiorano co n il crescere delle loro dim ensioni. A bbiam o già visto 1 enorm e quantità di hardware im piegata da Sun nelI’E 25K per raggiungere i 72 chip con doppia C P U , m entre in seguito studierem o un m u ltico m p u ter che ha ben 6 5 .536 C P U . C i vorranno anni prim a che qualcuno riesca a costruire u n m ultiprocessore com m erciale d a 6 5 .5 3 6 nodi, m entre per quel tem po saranno già in uso m u ltico m p u ter da m ilioni di nodi. O ltre a ciò, un altro fattore che p u ò influenzare le prestazioni di un m ultiprocessore è la contesa di m em oria: se 100 C P U cercano di leggere e scrivere sem pre le stesse variabili, la contesa delle varie m em orie, dei bus e delle directory p u ò com portare un grosso degrado delle prestazioni. La conseguenza d i queste considerazioni è che si pone oggi m olto interesse nei m u lti com puter, cioè nei co m p u ter paralleli in cui ogni C P U ha la propria m em oria privata, non direttam en te accessibile dalle altre. I prdgram m i delle C P U di un m u lticom puter interagi scono p e r mezzo delle prim itive s e n d e r e c e i v e per lo scam bio esplicito di messaggi, visto che non possono accedere alle rispettive m em orie per mezzo d istruzioni di LOAD e STORE. Q u esta differenza cam bia com pletam ente il m odello di program m azione. O g n i nodo di u n m u ltico m p u ter contiene una o più C P U , u n a certa dose di RAM (che si può pensare condivisa solo tra le C P U di quel nodo), un disco e/o altri dispositivi di I /O , più un processore di com unicazione. I processori di com unicazione sono collegati tra m ite una rete ad alta velocità di uno dei tipi esam inati nel Paragrafo 8.1.2. Esistono diverse topologie, vari schem i di com m utazione e algoritm i d ’instradam ento, m a c’è un aspetto che tu tti i m u ltico m p u ter h a n n o in com une: q u an d o u n program m a applicativo esegue una pri m itiva s e n d il processore di com unicazione riceve una notifica e si incarica di trasm ettere il blocco di dati dell’u ten te presso la m acchina di destinazione (eventualm ente dopo aver chiesto, e ricevuto, il perm esso di farlo).
592
Capitolo 8
Architetture per il calcolo parallelo
N odo CPU
M e m o ria
_
2
ù
y ~
D isco
* Interconness. loc ale --------______ I/O
Processore d i co m u n ica zio n e
Rete d'interconnessione a elevate prestazioni
Figura 8.34
8.4.1
Schema di un multicomputer.
Reti d'interconnessione
La F igura 8 .3 4 (che m ostra u n m u ltic o m p u te r idealizzato) evidenzia il fatto che i m u lti c o m p u te r sono ten u ti insiem e dalla rete d ’interconnessione. D a questo p u n to di vista i m ultiprocessori e i m u ltic o m p u te r sono so rp ren d en tem en te sim ili, poiché i m ultiproces sori sono spesso d o tati di m o d u li di m em o ria ch e devono essere interconnessi tra loro e con le C P U . D i conseguenza, q u a n to tra tta to in questo paragrafo si applica spesso a en tram b i i tipi di sistem i. La ragione fondam entale della som iglianza tra le reti d ’interconnessione dei m ultipro cessori e quelle dei m u ltico m p u ter è che in fondo si tratta in entram bi i casi di reti a scam bio di messaggi. A nche nei sistemi m onoprocessore, quan d o la C P U vuole leggere o scrivere una pa rola, in genere attiva certe linee sul bus e aspetta una risposta. Q uesta azione è sostanzial m ente u no scam bio di messaggi: il p rim o agente invia una richiesta e aspetta una risposta. N ei grandi m ultiprocessori, la com unicazione tra le C P U e la m em oria distante avviene quasi sem pre tram ite l’invio esplicito di un messaggio di richiesta dati, il cosiddetto pacchetto, da parte di una C P U verso la m em oria, che replica con un pacchetto di risposta.
Topologia La topologia di una rete d ’interconnessione descrive il m odo in cui sono disposti i collegam en ti e i co m m u tato ri, per esem pio lungo u n anello o su una griglia. 1 progetti topologici possono essere m odellati con grafi i cui lati sono i collegam enti e i cui nodi sono i co m m u tatori, com e nella Figura 8.35. O g n i nodo di una rete d ’interconnessione (o del suo grafo) dispone di u n certo n u m ero d i collegam enti in uscita da esso. 1 m atem atici chiam ano que sto num ero il grado (uscente) del nodo, m entre gli ingegneri lo chiam ano il fanout (da fan out, “ventaglio di uscite”). In generale, m aggiore è il fanout, più num erose sono le scelte d ’in stradam ento e q u in d i p iù alta è la tolleranza agli errori: anche se u n collegam ento è difet toso, la rete può co ntinuare a funzionare se riesce ad aggirarlo. Se ogni nodo ha k lati e se i collegam enti sono effettuati correttam ente, è possibile progettare una rete che resti piena m ente connessa anche se si in terro m p o n o k — 1 collegam enti.
8.4
Multicomputer a scambio di messaggi
(e)
593
i Ch)
Alcune topologie. I pallini rappresentano i commutatori, mentre non sono mostrate le CPU e le memorie, (a) Stella, (b) Interconnessione completa, (c) Albero, (d) Anello, (e) Griglia. (f)Toro. (g) Cubo, (h) Ipercubo a quattro dimensioni.
U n’altra proprietà della rete d ’interconnessione (o del suo grafo) è il suo diametro. Se m i suriam o la distanza tra due nodi con il num ero m inim o di lati che devono essere attraver sati per giungere d a u n o all’altro, allora il diam etro del grafo è la distanza tra due nodi che si trovano alla massima distanza. Il diam etro di una rete d ’interconnessione è legato al ri tardo che si p u ò verificare nel caso peggiore q u an d o si spedisce un pacchetto da una C P U a un’altra o d a u n a C P U a u n a m em oria, dal m o m en to che ogni passaggio attraverso u n collegam ento im piega u n a q u an tità finita d i tem po. Più piccolo è il diam etro, migliori sono le prestazioni nel caso peggiore. È im p o rtan te anche la distanza media tra i nodi, poiché in fluenza il tem po m edio di consegna di un pacchetto.
594
Capitolo 8
Architetture per il calcolo parallelo
U n’altra proprietà significativa di u n a rete d ’interconnessione è la sua capacità di tra sm issione, ovvero la q u an tità di dati che p uò trasferire al secondo. U n m odo conveniente per m isurare questa capacità è usare la larghezza-di b a n d a d i bisezione. Per calcolarla, prim a bisogna ripartire (concettualm ente) la rete in due parti uguali (per num ero di nodi) e scol legarle rim uovendo i Iati che collegano nodi di parti diverse. Q u in d i si calcola la larghezza di ban d a totale dei lati che sono stati rimossi. C i possono essere m olti m o d i diversi di bi partire la rete in d u e parti uguali e la larghezza di ban d a di bisezione è il valore m inim o che si o ttien e per tu tte le possibili partizioni. 11 significato di questo num ero è che, se per esem pio la larghezza di banda di bisezione è di 800 bit/s, allora, se c’è m o lta com unicazione in corso tra le due m età, nel caso peggiore la q u a n tità di dati in trasferim ento no n può supe rare gli 800 b it/s. M olti progettisti credono che la larghezza di banda di bisezione sia la pro prietà più im po rtante per m isurare le prestazioni di una rete d ’interconnessione, perciò m olte reti vengono progettate appositam ente per massimizzarla. Le reti d ’interconnessione possono essere caratterizzate dalla loro d im e n sio n a lità . Per i nostri scopi, la dim ensionalità è il n u m ero di m odi diversi in cui è possibile raggiungere la destinazione a partire dalla sorgente. Se n o n c’è m ai possibilità di scelta (cioè se c’è solo un cam m ino possibile da ogni sorgente a ogni destinazione) allora la rete è zero-dim ensionale. Se c’è u n a dim ensione in cui è possibile effettuare u n a scelta, per esem pio andare a est o a ovest, allora la rete è uno-dim ensionale. Se sono due assi lungo cui si può scegliere (per esem pio se un pacchetto può scegliere di proseguire tra est e ovest, op p u re tra nord e sud) allora la rete è due-dim ensionale, e così via. La Figura 8.35 m ostra alcune topologie e prende in considerazione solo i collegamenti (i segmenti) e i com m utatori (i pallini). Le m em orie e le C P U non sono m ostrate, ma si pos sono pensare collegate ai com m utatori tram ite interfacce. Nella Figura 8.35(a) troviamo la con figurazione zero-dimensionale a stella, in cui le C P U e le m em orie sono collegate ai nodi esterni, m entre il nodo centrale è di pura com m utazione. Sebbene sia un progetto semplice, la pre senza di un nodo centrale com m utatore p uò rivelarsi un collo di bottiglia per sistemi di grandi dim ensioni. Inoltre il progetto è scadente anche dal p u n to di vista della tolleranza agli errori, visto che basta un difetto del com m utatore centrale per distruggere l’intero sistema. La Figura 8.35(b) m ostra u n altro p ro g etto zero-dim ensionale che però si trova all’al tro estrem o dello spettro: u n interconnessione completa (e com pleto è d etto il grafo a lei associato). In questo caso ogni nodo è collegato d irettam ente a ogni altro. Q uesto progetto massimizza la larghezza di banda di bisezione, m inim izza il diam etro ed è straordinariam ente tollerante agli errori (potrebbero interrom persi sei collegam enti qualsiasi e la rete sarebbe an cora connessa). S fortunatam ente richiede k (k - l) /2 lati per collegare k nodi, un num ero che diventa presto intrattabile al crescere di k. U n ’altra topologia è l’albero, illustrato nella Figura 8.35(c). Il problem a di questa to pologia è che la larghezza di ban d a di bisezione è uguale alla capacità dei collegam enti. Dal m o m en to che ci sarà m olto traffico in corrispondenza dei nodi vicini alla cim a dell’albero, questi pochi nodi diventeranno facilm ente u n collo di bottiglia per l’intera rete. U na possi bile soluzione è aum entare la larghezza di banda di bisezione attribuendo maggiore larghezza di banda ai collegam enti che si trovano più in alto. Per esem pio il livello più in basso p o trebbe avere capacità b, quello successivo capacità 2 b e il livello più alto capacità Ab. Q uesto tipo di progetto si chiam a fat tree (“albero grasso”) ed è stato utilizzato in alcuni m ulti co m p u ter com m erciali, com e l’orm ai scom parso C M -5 di T h in k in g M achines.
8.4
Multicomputer a scambio di messaggi
595
L’anello della Figura 8.35(d) è, secondo la nostra definizione, u n a topologia m onodi m ensionale, perché ogni pacchetto può scegliere soltanto se andare a destra o a sinistra. La griglia o mesh (maglia, reticolato) della Figura 8.35(e) è un progetto bidim ensionale, uti lizzato in m o lti sistemi com m erciali. È altam ente regolare, facile da im plem entare al crescere delle dim ensioni del sistem a e il suo diam etro cresce com e la radice quadrata del num ero di nodi. U n a variante della griglia è il toro della Figura 8.3 5 (f), cioè u n a griglia con le estre m ità connesse. N o n solo h a u n a m iglior tolleranza agli errori rispetto alla griglia, m a pre senta anche u n diam etro inferiore, perché i vertici opposti possono ora com unicare in soli due passaggi. U n’altra topologia diffusa è u n a stru ttu ra 3 D con nodi nei p u n ti le cui coordinate sono gli interi nell’intervallo che va da (1, 1, 1) a (L, m, ri). O gni nodo ha sei vicini, due lungo ciascun asse. I nodi sui bordi h an n o collegam enti che li collegano al bordo opposto, proprio com e in u n toro. 11 cubo della Figura 8.35(g) è una norm ale topologia tridim ensionale. N ella figura il lustriam o un cubo 2 x 2 x 2, m a in generale si potrebbe avere un cubo k x k x k. La Figu ra 8.35(h) m ostra u n ipercubo a q u attro dim ensioni costruito a partire da due cubi m ediante il collegam ento dei nodi corrispondenti. Potrem m o costruire un cubo a cinque dim ensioni clonando la stru ttu ra della Figura 8.35(h) e collegando i nodi corrispondenti in m odo da form are u n blocco di q u attro cubi. Per raggiungere le sei dim ensioni possiam o replicare il blocco di q u attro cubi e interco n n ettere i nodi corrispondenti, e così via. U n cubo «-di m ensionale così form ato si chiam a un ipercubo. M olti co m p u ter paralleli usano questa to pologia perché il suo diam etro cresce linearm ente con ». D e tto altrim enti, il diam etro è il logaritm o in base 2 del num ero di nodi, perciò u n ipercubo a dieci dim ensioni di 1024 no di ha un diam etro di 10, il che garantisce proprietà di ritardo eccellenti. Si noti, com e ter m ine d i paragone, il caso di 10 24 nodi sistem ati in una griglia 32 x 32: il loro diam etro è 62, p iù di sei volte quello dell’ipercubo. Il prezzo pagato dall’ipercubo per avere un diam e tro inferiore è un m aggiore fanout e q u in d i un maggiore num ero di collegam enti (che ac crescono il costo della rete). M algrado ciò, l’ipercubo è una scelta co m une a m olti sistemi dalle prestazioni elevate. Esistono m u ltico m p u ter di tu tte le form e e dim ensioni, perciò è difficile darne una tas sonom ia chiara. Si possono identificare co m u n q u e due “stili” generali: gli M P P e i cluster. Studiam oli u n o per volta. u
8.4.2
MPP: processori massicciamente paralleli
La prim a categoria che individuiam o è form ata dagli MPP [Massively ParalUl Processor, “pro cessore m assicciam ente parallelo”): su percom puter enorm i d a svariati m ilioni di euro, usati p er svolgere ingenti q u an tità di calcoli scientifici, ingegneristici o industriali, per la gestione di grandi num eri di transazioni al secondo o per l’im m agazzinam ento di dati (m em orizza zione e gestione di database im m ensi). Inizialm ente gli M P P venivano usati com e supercom puter scientifici, m a adesso gran p an e di loro è impiegata in am bienti commerciali. Q ueste m acchine sono in un certo senso i successori dei poderosi m ainfram e degli anni '6 0 (ma la parentela è m olto lontana, com e se un paleontologo sostenesse che uno storm o di passeri discende dal Tyrannosaurus Rex). Si p uò dire che gli M P P h an n o soppiantato al vertice della catena alim entare digitale le m acchine S IM D , i su percom puter vettoriali e le unità di cal colo vettoriale.
596
Capiioio 8
Architetture per il calcolo parallelo
M olte m acchine M P P usano com e processori C P U standard. È frequente l’uso di Pentium (Intel), di U ltraSPA RC (Sun) e d i Pow erPC (IBM ). C iò che distingue gli M P P è l’uso di una rete d ’interconnessione brevettata,"ad altissim e prestazioni, progettata per tra sferire i messaggi con poca latenza ed elevata larghezza di banda. Sono due proprietà im portan ti, perché nella stragrande m aggioranza dei casi i messaggi sono piccoli (ben sotto i 256 byte), m a gran parte del traffico totale è dovuto ai messaggi grandi (più di 8 KB). Gli M P P vengono forniti con grandi q u an tità di software e librerie brevettati. Un’altra caratteristica degli M P P è la loro enorm e capacità di I/O . I problem i abba stanza grandi da m eritare l'im piego di un M P P coinvolgono sem pre enorm i q u an tità di dati, spesso dell’ordine dei terabyte. I dati devono essere distribuiti tra m olti dischi e devono es sere trasferiti all’in te rn o della m acchina a grande velocità. Infine, un’altra questione d ’interesse circa gli M P P è la loro tolleranza agli errori. La presenza di migliaia di C P U rende inevitabili un c e n o num ero di anom alie nel corso del tem po. Interrom pere una com putazione di 18 ore per l’insuccesso di una C P U è inaccetta bile, specialm ente se è prevedibile osservare u n a tale anom alia nel corso di una settim ana. Perciò gli M P P più grandi sono sem pre dotati di hardw are e software speciali per il m o n i toraggio del sistema, per il rilevam ento delle anom alie e il loro trattam ento. Sebbene sarebbe interessante studiare i principi generali alla base dei progetti MPP, in realtà va d etto che n o n ci sono m olti principi di base. In fondo gli M P P sono una raccolta di nodi di calcolo p iù o m eno standard, collegati tram ite u n ’interconnessione m olto veloce scelta tra u no dei rìpi già illustrati. In ragione di ciò, passiam o piuttosto allo studio di due esempi d i M P P: BlueG ene/L e Red Storni.
BlueGene C o m e p rim o esem pio di processore m assicciam ente parallelo prendiam o in esame il sistem a BlueG ene di IB M , un progetto concepito nel 1999 per la risoluzione di problem i che esi gono m olte risorse di calcolo, com e quelli che sorgono nelle scienze biologiche. Per esem pio, i biologi credono che la stru ttu ra tridim ensionale di una proteina d eterm ini la sua fun zionalità, eppure il calcolo della stru ttu ra spaziale di una piccola p ro teina a partire dalle leggi fìsiche im piegava anni sui su percom puter del tem po. O gni essere um ano contiene più di mezzo m ilione di proteine, m olte delle quali sono estrem am ente grandi, ed è noto che certi loro ripiegam enti errati ( misfòldìng) sono responsabili di alcune m alattie (com e la fibrosi ci stica). È chiaro che la determ inazione della stereostruttura di turre le proteine um ane ri chiederebbe un increm ento della capacità di calcolo m ondiale di svariati o rd in i di grandezza, e la m odellazione delle pro tein e è solo u n o dei problem i per cui BlueG ene è stato proget tato. Esistono sfide ugualm ente com plesse nella dinam ica m olecolare, dei m odelli clim atici, in astronom ia o anche nella m odellazione finanziaria, che richiederebbero tu tte un p o ten ziam ento dei su percom puter di diversi ord in i d i grandezza. IBM crede così tan to nel m ercato del supercalcolo massiccio che ha investito 100 m i lioni di dollari nel progetto e nella costruzione di BlueGene. N el novem bre 2001, il Livermore N ational Laboratory, gestito dal d ip artim en to statunitense per l’energia, h a firm ato un con tratto com e prim o cliente di u n esem plare della famiglia BlueGene, chiam ato BlueGene/L. L’obiettivo del progetto non era solo quello di produrre il supercom puter M PP più ve loce del m o n d o , m a anche di produrre l’esem plare più efficiente in term ini di teraflop/dol laro, teraflop/w att e teraflop/m 3, cioè d i costi, consum o energetico e dim ensione. Per que-
8.4
Multicomputer a scambio di messaggi
597
sta ragione IBM rifiutò la filosofìa che ispirava gli M P P precedenti, cioè di usare i com po nenti p iù veloci che si potessero com prare. Al co ntrario, si decise di produrre un com po nente su m isura con u n intero sistema nel chip, che girasse a velocità m odesta e che consu masse poca energia, in m odo da produrre una m acchina davvero grande e con un’alta d en sità di assemblaggio. Il prim o chip venne alla luce nel giugno 2003. Il prim o quarto del si stem a B lueG ene/L , costituito d a 16.384 no d i, divenne pienam ente operativo a partire dal novem bre 2004 e, grazie ai suoi 71 teraflop/s, fu insignito del prem io di supercom puter più veloce al m ondo. Il consum o di soli 0,4 M W att gli garantì anche il prem io d i supercom pu ter più efficiente della sua categoria, con 177,5 m egaflop/w att. La consegna della parte re stante del sistema, che lo porterebbe a una dim ensione di 6 5 .5 3 6 nodi di calcolo, era pre vista per l’estate del 2005. Il p u n to forte del sistem a B lueG ene/L è rappresentato dai suoi nodi, ciascuno costi tu ito dal chip su m isura illustrato nella Figura 8.36, form ato d a due core Pow erPC 440 a 700 M H z. 11 Pow erPC 440 è un processore superscalare a pipeline e a doppia emissione, m olto diffuso nei sistem i integrati. O g n i core h a un paio di u n ità in virgola m obile a d o p pia em issione, che possono em ettere co n giuntam ente q u attro istruzioni in virgola m obile per ogni ciclo. Le u n ità in virgola m obile sono state potenziate con l’aggiunta d istruzioni dì ripo S IM D che si rivelano spesso utili al calcolo scientifico vettoriale. B enché non sia pro prio inefficiente, sicuram ente non è un m ultiprocessore al vertice della gam m a, I d u e core di C P U sono identici per stru ttu ra, m a sono program m ati diversamente: un o viene usato per il calcolo, l’altro p er gestire la com unicazione tra i 6 5 .5 3 6 nodi. Nel chip sono presenti tre livelli di cache. Le cache LI (prim o livello) han n o 32 KB per le istruzioni e 32 per i dati. N o n c’è alcuna coerenza tra le cache LI delle due C P U per ché i core Pow erPC 4 4 0 non la supportavano e si è deciso di non m odificarli. Le cache L2 (secondo livello) sono unificate e grandi 2 KB; non vengono usate com e vere cache, ma com e buffer per il prefetch. O g n u n a fa snooping sull’altra cache e sono reciprocam ente consistenti. La cache L3 (di terzo livello) ha 4 M B , è condivisa, unificata e consistente, e rifornisce le Alto
Nord CPU di calco lo , Unità in vìrgola mobile
FPU FPU
Core PowerPC 440
I-
Cache L2
D
11 cg
FPU
Cote PowerPC 440
I
Cache L2
D
4 MB
di cache
Snooping T
Ovest ■+FPU
Interfaccia / col toro
-CTiip ad hot
Cache L1
-> Est
U
^ v™
J
la DDR SDRAM su scheda
2 " CPU di comunicazione '
▼ Sud
Figura 8.36
II chip costruito per BlueGene/L
Ethernet
Basso
598
Capitolo 8
Architetture per il calcolo parallelo
cache L2. U n riferim ento alla m em oria che fallisce nella cache L I, m a che ha successo nella L2, im piega circa 11 cicli di clock. U n fallim ento a livello 2 che ha successo a livello 3 im piega 28 cicli. Infine, u n riferim ento che n o n ha-successo neanche nella cache L3 deve rag giungere la SD R A M principale e im piega 75 cicli. Le cache L2 sono collegate a una piccola SRA M , a sua volta connessa all’interfaccia JTA G per il riavvio, il debugging e la com unicazione con l’host principale che gestisce Io stack di sistem a e fornisce i semafori, le barriere e altre operazioni di sincronizzazione. Al livello gerarchico successivo, IBM ha progettato su m isura una scheda con due chip (Figura 8.36) e u n a RA M da 1 G B (le versioni future p o tran n o contenerne 4 GB). 11 chip e la scheda sono m ostrati nelle Figure 8.37(a)-(b). Le schede sono m ontate a innesto su una piastra che può ospitarne 16 per un totale di 32 chip (e quindi di 32 C P U di calcolo). Poiché ogni scheda contiene 1 GB di SD RA M , ogni piastra conteruene 16 GB di m em oria. La Figura 8.37(c) illustra una piastra. A livello successivo, le piastre vengono inserite in un arm adio di base 60 x 90 cm . La m età superiore ospita 16 piastre e altre 16 trovano spazio nella m età inferiore, per un totale di 1024 C P U , u n a densità m olto elevata. I d u e gru ppi di 16 piastre sono separati da un com m u tato re che p uò estrom ettere u n g ru p p o dal sistem a per ragioni di m anutenzione. La Figura 8.37(d) m ostra un arm adio. Il sistem a com pleto consiste in 6 4 arm adi con 6 5.536 C P U di calcolo e altre 6 5 .5 3 6 per la com unicazione, com e rappresentato nella Figura 8.37(e). Grazie alle 131.072 C P U intere a doppia em issione e alle 2 6 2 .1 4 4 C P U in virgola m obile a do p p ia em issione, il si-
512 MB
Piastra Armadio 16 schede 32 piastre 32 chip 512 schede 16 GB 1024 chip 512 GB
(a)
Figura 8.37
(b>
(c)
(d )
Sistema 64 armadi 2048 piastre 32,768 schede 65,536 chip 32 TB (e)
Componenti gerarchiche di BlueGene/L: (a) Chip (b) Scheda (c) Piastra (d) Armadio (e) Sistema.
8.4
Multicomputer a scambio di messaggi
599
stem a p otrebbe em ettere fino a 7 8 6 .4 3 2 istruzioni in un ciclo di clock. Tuttavia, una delle unità intere serve a rifornire le u n ità in virgola m obile e ciò riduce il num ero d istruzioni a 6 5 5 .3 6 0 in ogni ciclo d i clock, cioè a 4,6 x IO14 istruzioni/s, il che lo rende co m u n q u e e di gran lunga il p iù p o ten te sistem a di calcolo m ai costruito. Il sistem a è u n m u ltico m p u ter nel senso che nessuna C P U ha accesso diretto alla m e m oria, fatta eccezione per i 5 12 M B residenti sulla sua scheda. N essuna coppia di C P U con divide m em oria com une. Inoltre, n o n si effettua paginazione a richiesta perché n o n ci sono dischi locali da cui paginare. Il sistem a dispone invece di 1024 nodi di I/O collegati a di schi e ad altri dispositivi periferici. T utto considerato, a dispetto delle sue dim ensioni esagerate, il sistema è abbastanza sem plice e introduce poca tecnologia, a eccezione della capacità di assemblaggio ad alta densità. La scelta della sem plicità n o n è stata accidentale, m a è fru tto dell’aver perseguito com e obiet tivi prim ari l’elevata affidabilità e reperibilità dei com ponenti. D i conseguenza, è stata de dicata m olta cura ingegneristica all’alim entazione elettrica, alle ventole, al raffreddam ento e alla cablatura, allo scopo di raggiungere u n tem po m edio di 10 giorni tra l’occorrenza di due anom alie successive. La connessione di tu tti i chip richiede una rete d ’interconnessione scalabile e dalle ele vate prestazioni. Il progetto im piegato è un toro 64 x 32 x 32. Perciò ogni C P U ha bisogno di sei collegamenti: due verso le C P U che si trovano logicamente in alto o in basso rispetto a essa, du e verso est e ovest, due verso nord e sud. I sci collegamenti sono etichenati quindi com e alto, basso, est, ovest, nord e sud, com e evidenziato nella Figura 8.36. O gni arm adio è un toro 8 x 8 x 16. Q u attro paia di arm adi della stessa riga form ano u n toro 8 x 32 x 32. Infine, le o tto righe di arm adi form ano il toro 64 x 32 x 32. D u n q u e tu tti i collegam enti sono diretti da n odo a nodo e operano a 1,4 G bps. Visto che ciascuno dei 6 5 .5 3 6 nodi ha tre collegam enti verso nodi di n u m ero “m aggiore”, uno lungo ciascuna dim ensione, la larghezza di b anda totale del sistema è di 275 tcrabit/s. Il con te n u to inform ativo di questo libro è pari a circa 300 m ilioni di bit, inclusa la grafica in for m ato incapsulato PostScript, perciò B lueG ene sarebbe in grado di trasferire 900.000 copie di questo libro in un secondo. Dove sarebbero distribuite e chi le potrebbe richiedere è una d o m an d a che lasciam o al lettore com e esercizio. La com unicazione nel toro si svolge sotto form a d ’instradam ento c u t th ro u g h virtu ale. Si tratta di una tecnica abbastanza sim ile alla com m utazione di pacchetto store-and-forw ard, con la differenza che i pacchetti non vertgono m em orizzati prim a di essere inoltrati. N on appen a u n byte raggiunge un nodo, p uò essere in oltrato im m ediatam ente al nodo succes sivo lungo il cam m ino, ad d irittu ra prim a che giunga l’intero pacchetto cui appartiene. Sono possibili sia l’instradam ento dinam ico (adattivo), sia determ inistico (fisso). U na piccola parte dell’hardw are del chip è d estinato all’im plem entazione del c u t th ro u g h virtuale. O ltre al toro principale usato per il trasferim ento dati, sono presenti altre q u attro reti di com unicazione. La seconda è una rete ad albero, combining network, che riunisce tu tti i nodi. In fatti m olte delle operazioni eseguite nei sistemi altam ente paralleli com e BlueG ene/L h an n o bisogno della partecipazione di tu tti i nodi. Si consideri, per esem pio, la ricerca del m inim o in un insieme di 6 5 .5 3 6 valori, ciascuno co n ten u to in un nodo. La rete in questione riunisce tu tti i nodi in un albero e p u ò essere usata per il calcolo del m inim o: q u ando u n nodo riceve i valori provenienti dai nodi a lui inferiori, sceglie il più piccolo tra questi e il proprio valore e lo inoltra lungo l’albero verso l’alto. Così facendo, il nodo radice dell’albero
600
Capitolo 8
Architetture per il calcolo parallelo
viene raggiunto da un num ero di pacchetti m olto inferiore a q u an ti ne riceverebbe se tu tti i 6 5 .5 3 6 nodi gli spedissero u n messaggio d irettam ente. La terza rete è usata per le barriere globali e gli interrupt. A lcuni algoritm i lavorano in p iù passi e richiedono che ogni n o d o attenda finché tu tti gli altri h an n o com pletato la fase in esecuzione prim a di entrare nella successiva. La rete di barriere consente la definizione di queste fasi via software e fornisce uno strum ento per la sospensione di tutte le C P U che hanno term in ato u n a fase, fino al com p letam en to della fase da parte di tu tte le altre C P U ; solo a questo p u n to vengono liberate dall’attesa. A nche gli in terru p t viaggiano lungo questa rete. La q u arta e la q u in ta rete usano entram b e una G igabit Ethernet. La prim a collega i n o d i di I/O ai server di file, che sono esterni a B lueG ene/L, e attraverso questi a Internet. L’altra serve al debugging del sistema. O g n i n o d o di calcolo e com unicazione esegue un piccolo kernel progettato su m isura, che su p p o rta u n solo u tente e un solo processo. Q uesto processo contiene due thread, uno per ogni C P U del nodo. La sem plicità della stru ttu ra è intesa a garantire prestazioni e affi dabilità elevate. Per increm entare l’affidabilità, il softw are applicativo può richiam are u n a procedura di libreria per inserire un p u n to di co ntrollo (checkpoint). U na volta spediti in rete tu tti i mes saggi in uscita, si p u ò stabilire e m em orizzare u n p u n to di controllo globale di m o d o che, a seguito di u n ’anom alia del sistema, sia possibile far ripartire l’esecuzione dal p u n to di con trollo invece che dall’inizio. I nodi di I/O utilizzano il tradizionale sistem a operativo Linux e sup p o rtan o processi m ultipli. Si possono trovare maggiori inform azioni su BlueG ene/L in (Adiga et al., 2002; Almasi et al., 2003a, 2 003b; Blum rich et al., 2005).
Red Storm C o m e secondo esem pio di M P P prendiam o in considerazione la m acchina R ed Storm (detta anche il “M artello di T h o r”) che si trova presso Sandia N ational Laboratory. Q uesto istituto è gestito dalla Lockheed M artin e svolge attività per conto del d ip artim ento statunitense del l’energia, sia di natu ra riservata (segreta) sia pubblica. Parte del lavoro riservato concerne il progetto e la sim ulazione di arm i nucleari, che richiedono m olta potenza di calcolo. Sandia è un soggetto attivo d a m olti anni e nel passato ha avuto a disposizione n u m e rosi su percom puter di prim a caratura. Per alcuni decenni ha prediletto i supercom puter vet toriali, m a alla lunga gli M P P sono risultati più convenienti sia dal p u n to di vista tecnolo gico, sia econom ico. N el 2 0 0 2 A SC I Red, l’allora supercom puter M P P di Sandia, com in ciava a scricchiolare. Era costitu ito da 9 4 6 0 nodi, m a in totale disponeva di soltanto 1,2 TB di RA M e 12,5 T B di spazio su disco, e il sistem a poteva m acinare appena 3 teraflop/s. Perciò nell’estate del 2002 Sandia ha scelto C ray Research, un costruttore di supercom puter di vec chia data, per far costruire il so stituto dell’A SC I Red. Il rim piazzo venne consegnato nell’agosto 2004, dopo un lasso di tem po eccezional m ente co n ten u to per il progetto e l’im plem entazione di una m acchina così grande. La ra gione della celerità della sua progettazione e consegna è che Red Storm è com posto quasi interam ente da parti già p ro n te all’uso, fatta eccezione per un chip per l’instradam ento pro gettato su m isura. La C P U scelta per Red Storm è O p tero n di A M D . O pteron presenta num erose caratte ristiche chiave che ne fanno la scelta migliore. La prim a è che può funzionare in tre m odalità operative. In m odalità legacy O p tero n esegue program m i standard per il Pentium senza biso-
8.4
Multicomputer a scambio di messaggi
601
gno di m odifiche; in m odalità d i compatibilità, il sistema operativo funziona a 64 bit e può in dirizzare 2M parole di m em oria (ma i program m i applicativi girano a 32 bit); in m odalità a 64 bit, infine, l’intera m acchina funziona a 64 bit e tutti i program m i possono utilizzare lo spazio degli indirizzi di 64 bit. In quest’ultim o caso si possono affiancare neU’esecuzione pro gram m i a 32 e a 64 bit, il che predispone il sistema ad aggiornam enti futuri. La seconda caratteristica chiave di O p te ro n è la sua attenzione al problem a della lar ghezza di b anda della m em oria. N egli ultim i an n i la velocità delle C P U è cresciuta m olto più rapidam ente rispetto alla larghezza di banda della m em oria, rendendo i fallimenti di cache di secondo livello u n grosso fattore d i penalizzazione delle prestazioni. A M D h a integrato il controllore della m em oria all’in tern o di O p te ro n di m odo che possa girare alla stessa velo cità del clock del processore e non più alla velocità del bus della m em oria, m igliorando le prestazioni di m em oria. Il controllore può gestire o tto D IM M di 4 G B ciascuna, per u n to tale di 32 G B di m em oria per ogni O p tero n . N ei sistemi R ed Storm ogni O p te ro n h a solo 2-4 G B di m em oria, però si p u ò star sicuri che in futuro ne verrà aggiunta altra, visto che la m em oria diventa sem pre più econom ica. U n altro possibile m iglioram ento è l’adozione dei chip O p te ro n con d u e core, che raddoppierebbe la potenza grezza di calcolo. O g n i O p te ro n ha un proprio processore di rete dedicato, Seastar, progettato su m i sura e p ro d o tto da IB M . Si tra tta di un co m p o n en te critico perché quasi tu tto il traffico di dati tra processori passa lungo la rete Seastar. Se n on ci fossero questi chip progettati appo sitam ente per garantire un’interconnessione ad altissima velocità, il sistema si troverebbe spesso im p an tan ato nella grande q u an tità di dati. I processori O p te ro n sono p ro d o tti com m erciali facilm ente reperibili e p ro n ti all’uso, m a le parti di assem blaggio d i Red Storm sono costruite su m isura. O gni piastra di Red Storm (Figura 8.38) contien e q u a ttro O p te ro n , 4 GB di RAM , q u a ttro Seastar, un pro-
Figura 8.38
Assemblaggio dei com ponenti di un Red Storm.
602
Capitolo 8
Architetture per il calcolo parallelo
cessore RAS ( Relìability-Ava'ilability-Servìce, “affidabilità-reperibiikà-servizio”) e una scheda E thern et a 100 M bps. Le piastre sono raggruppate a o tto a o tto e cellegatc a una scheda m adre inserita in uno schedario. O g n i arm adio contiene tre sportelli d i schede p er u n totale di 96 O p tero n , oltre ai necessari dispositivi di alim entazione e ventilazione. L’intero sistem a è form ato da 108 ar m adi per i nodi di calcolo, per un totale di 10.368 O p tero n con 10 T B di SD R A M . O gni C P U ha accesso esclusivam ente alla p ropria SD R A M : non c’è alcuna m em oria condivisa. La potenza di calcolo teorica del sistem a è 41 teraflop/s. L'interconnessione tra le C P U O p te ro n è realizzata tram ite i ro u ter Seastar (uno per ogni C P U ), collegati per mezzo di un toro di dim ensioni 27 x 16 x 24 (a ogni intersezione della rete c’è u n chip Seastar). O g n i Seastar ha sette collegam enti bidirezionali d a 24 G bps che sono diretti verso nord, est, sud, ovest, alto, basso e verso il processore O p tero n , Il tem po eh transito tra due p u n ti adiacenti nella rete è 2 us, e bastano 5 us per attraversare tu tto l’in sieme dei nodi di calcolo. C ’è anche una seconda rete E thernet a 100 M bps per servizio e m anutenzione. O ltre ai 108 arm adi d i calcolo, il sistem a com prende 16 arm adi per i processori d i I /O e di servizio. C iascuno di loro contiene 32 O p te ro n le cui C P U sono così suddivise: 256 per l’[ / 0 , 2 56 di servizio. Lo spazio rim anente è occupato dai dischi, im postati com e RA ID 3 e RA ID 5, e a ciascuno di loro è associato u n disco di parità e un o di ricam bio. Lo spazio totale su disco è di 240 TB, m entre la larghezza di banda complessiva dei dischi è di 50 G B / s. Il sistema è suddiviso in due sezioni, una riservata è una no, collegate tram ite com m u tatori e che possono quindi essere agganciate o sganciate m eccanicam ente. E ntram be le parti contengono sem pre alm eno 2688 C P U di calcolo. Le rim anenti 4992 C P U di calcolo pos sono essere com m utate su una qualsiasi delle du e sezioni, com e illustrato nella Figura 8.39. Le 2688 C P U riservate sono O ptero n con 4 GB di RAM , m entre le rim anenti h an n o 2 GB. I processori di I/O e di servizio sono ripartiti nelle due sezioni. Il tu tto è o spitato all’interno di un edificio di 2000 nrr costruito per l’occasione. L’edi ficio è stato concepito in m odo da p o ter ospitare un sistema Red Storm che possa essere po tenziato in futuro fino a 3 0 .0 0 0 C P U . I nodi di calcolo assorbono 1,6 M W di potenza, e un altro M W è assorbito dai dischi. Se si conteggiano anche i consum i dei sistemi di aera zione e raffreddam ento, le apparecchiature assorbono com plessivam ente 3,5 M W .
N o d i d i I / O e d i s e r v i z io
□/□ □□
□n
□□ □ Memoria di m assa
□□□□□□□ □□□□□□□ □□□□□□□ □□□□□□□
Commutatore
/
□□□□□□□□□□□□□ □□□□□□□□□□□□□ □ □ □ □ □ □ □ □ □ O D D O
□□□□□□□□□□□□a ^
28 armadi riservati (2688 Opteron)
di 1 2 0 TB
Figura 8.39
Nodo di calcolo
Visione dall'alto di Red Storm.
V 52 armadi commutabili
J
\
□□□□□□□ □□□□□□□ x □□□□□□□ x □ □ □ □ □ □ □ >” e “”. L’indirizzo di rito rn o delle su b ro u tin e è indicato m ediante u n a cifia anteposta al valore esadecimale. La finestra in alto a destra m o stra u n a parte del file sorgente che contiene l’istruzione dell’esecuzione succes siva. La freccia “=>” in questa finestra indica la posizione del program counter. La finestra sotto quella del processore m ostra le posizioni del codice c o n te n e n d le chia m ate d i su b ro u tin e effettuate p iù di recente. A ppena sotto c’è la finestra dei com andi del tracer in cui viene visualizzata la storia dei com andi im partiti precedentem ente, seguita dal cursore. Si noti che ogni co m an d o deve essere seguito dalla pressione del tasto Invio.
P ro c e s s o re e re g is tri
S ta c k p e r le c h ia m a t e d i s u b r o u tin e
T e s to d e l p r o g r a m m a S ta c k j
F ile s o r g e n te
A r e a d e i m e s s a g g i d 'e r r o r e A r e a d i in p u t
In te r p r e te A re a d i o u tp u t
dei com andi
V a lo r e d e l l e v a r i a b i li g lo b a li S e g m e n to d a ti
Figura C.10
Finestre del tracer.
706
Appendice C
Programmazione in linguaggio assemblativo
La finestra in basso p uò contenere sei elem enti della m em oria dei dati globali. O gni elem ento com incia specificando una posizione relativa a un’etichetta, seguita dalla posizione assoluta nel segm ento dati, d a due p u n ti e q u in d i da o tto byte in esadecimale. Le 1 1 posi zioni successive sono riservate a caratteri, seguiti dalla rappresentazione decim ale di q u attro parole. I byte, i caratteri e le parole rappresentano tu tti lo stesso co n ten u to di m em oria, an che se i caratteri contengono tre byte in p iù perché all’inizio n o n è noto se i dati saranno usati com e interi con o senza segno, o com e stringa. La prim a riga della finestra per l’in p u t/o u tp u t è riservata all’o u tp u t per i messaggi d ’er rore del tracer, la seconda all’in p u t e le righe successive all’o u tp u t. L’o u tp u t per gli errori è indicato con la lettera “E ”, l’in p u t con la lettera “I ” e lo standard o u tp u t con il sim bolo La riga di in p u t contiene u n a freccia a indicare il p u n tato re alla posizione di prossima lettura. Se il program m a chiam a read o getchar, l’in p u t va immesso nell’area di in p u t e bi sogna farlo seguire dalla pressione del tasto Invio. La freccia >” indica la parte della riga che non è stata ancora elaborata. In genere il tracer usa lo standard in p u t per ricevere com andi e dati, m a è possibile anche preparare un file con i com andi per il tracer e u n o con le righe di in p u t che si vogliono far leg gere prim a che il controllo torni allo standard input. I file per i com andi al tracer hanno esten sione .t, e quelli per l’in p u t di dati hanno estensione 11 linguaggio assembladvo am m ette l’u so indistinto di caratteri minuscoli o maiuscoli per la scrittura delle parole chiave, delle subroutine di sistema e delle pseudoistruzioni. D urante il processo di assemblaggio viene creato il file d ’esten sione .$ e, al proprio interno, le parole chiave sono convertire in maiuscolo e vengono elimi nati i caratteri di invio a capo. D unque, per un dato progetto />r possono esistere sei file diversi: 1. pr.s per il codice del sorgente assem blativo 2. pr.$ per il file dei sorgenti com b in ati 3. pr.88 per il file di caricam ento
4. pr.i per lo standard in p u t preparato anticipatam ente 5. pr.t per i com andi all’interprete preparati an ticipatam ente 6. pr.# per collegare il codice assem blativo al file di caricam ento. L’u ltim o file viene usato dal tracer per riem pire la finestra in alto a destra e visualizzare il program counter. Infine, il tracer controlla che il file di caricam ento sia stato creato succes sivam ente all’ultim a m odifica ap p o rtata al sorgente di program m a, altrim enti em ette un av viso al riguardo.
C.6.1
Comandi del tracer
La Figura C . 11 elenca i com andi del tracer. Il più im p o rtan te è indicato nella prim a riga ed è il com ando che si im m ette con la sem plice pressione del tasto Invio per richiedere l’ese cuzione di una sola istruzione da parte del processore. A ltrettanto im p o rtan te è il com ando ^ d i uscita (quit), indicato all’ultim a riga della tabella. Se si im m ette com e com ando un n u mero, questo provoca l’esecuzione di u n nu m ero co rrispondente d istruzioni: il num ero k equivale a prem ere il tasto Invio Evolte. Si ottien e lo stesso effetto se il num ero è seguito da un p u n to esclam ativo, !, o da una X.
C.6
In d ir iz z o
Com ando
Esem pio
«
,! ,X
24
Esegue - is tru z io n i
Tracer
707
D e s c r iz io n e Esegue u n a is tru z io n e
A +*
8.1.
/s ta rt+ 5 g
C o n tin u a fin o a lla rig a * d o p o e tic h e tta T
n *s
b
/s la r t+ 5 b
Inserisce b re a k p o in t a lla rig a
/T + *
c
/s ta rt+ 5 c
R im u o v e b re a k p o in t a lla rig a * d o p o e tic h e tta T
g
tOBg
Esegue il p ro g ra m m a fin o a lla rig a *
e
g
Esegue il p ro g ra m m a fin c h é n o n to m a a lla riga c o rre n te
b
b
Inserisce b re a k p o in t a lla riga c o rre n te
c
c
R im u o v e b re a k p o in t d a lla rig a c o rre n te
n
n
Esegue p ro g ra m m a fin o a lla rig a successiva
r
r
Esegue p ro g ra m m a fin o a u n b re a k p o in t o a lla fin e
=
=
Esegue p ro g ra m m a fin o a llo stesso liv e llo d i s u b ro u tin e
-
-
Esegue p ro g ra m m a fin o a l liv e llo d i s u b ro u tin e c o rre n te m e n o 1
+
+
Esegue p ro g ra m m a Tino a l liv e llo d i s u b ro u tin e c o rre n te p iù 1
/D+3
/b u f + 6
M o stra il s eg m e n to dati a lla p o s iz io n e e tic h e tta + J
/D + «
d , t
/b u f + 6 d
M o s tra il s eg m e n to dati a lla p o s iz io n e e tic h e tta * J
R . CTRL L
R
A g g io rn a le finestre
q
q
In te rro m p e il tra c in g , restituisce il c o n tr o llo a ll’in te rp re te d i c o m a n d i
t
Figura C .1 1
-
d o p o e tic h e tta T
Com andi del tracer. O gni com ando deve essere seguito da un in vio a capo (tasto E n te ro Invio). U na casella vuota indica la necessità di digitare il solo carattere di a capo. I com andi che non devono specificare alcun in d irizzo hanno la casella della colonna In d irizzi vuota. Il sim bolo « indica un offset intero.
Il co m ando g può essere usato per spostarsi a una certa riga del file sorgente. In particolare, se preceduto da u n num ero di riga, il tracer esegue tu tte le istruzioni che la precedono; se si usa l’etich etta /T, con o senza +#, il num ero di riga dove ferm arsi, si calcola a partire dal l’etichetta d istruzione T; l’im m issione di g senza alcun’altra indicazione fa sì che il tracer esegua altri com andi finché n o n raggiunga di nuovo il num ero di riga corrente. Il com ando /lab el cam bia significato a seconda che lo si usi per etichette di dati o d ’i struzioni. Nel prim o caso viene aggiunta o sostituita una riga della finestra più in basso con l’insiem e d i dati che si trova presso quell’etichetta. N el secondo caso, il com ando si com po rta com e il com ando g. L’etichetta p u ò essere seguita d a u n segno + o d a u n n um ero (in dicato dal sim bolo # nella Figura C . 11) per specificare u n offset relativo all’etichetta. È possibile im postare un breakpoint (“p u n to d ’interruzione") in corrispondenza di un’i struzione tram ite il com ando b, che può essere preceduto da un’etichetta d’istruzione ed even tualm en te da un offset. Se d u ran te l’esecuzione si raggiunge un’istruzione con breakpoint, il tracer si ferma; per farlo ripartire basta prem ere il tasto Invio o un com ando d ’esecuzione. Se n o n vengono specificati alcun num ero e alcuna etichetta, il break p o in t è associato alla riga corrente. Per rim uovere u n b reakpoint si usa il com ando c, preceduto eventualm ente dagli stessi param etri opzionali di b (etichetta e num ero). Esiste il com ando d ’esecuzione r
708
Appendice C
Programmazione in linguaggio assemblativo
che ordin a ai tracer di co ntinuare l’esecuzione finché n o n incontri un breakpoint, una chia m ata di uscita o la fine del program m a. Il tracer tiene an ch e traccia del livello di su b ro u tin e in cui sta girando il program m a. Si p u ò d esum ere dalla finestra so tto la finestra del processore o anche dai num eri indicati nella finestra dello stack. C i sono tre co m an d i che riguardano il livello di su b ro u tin e in esecuzione. Il com an d o — richiedo al tracer d i proseguire nell’esecuzione finché n o n rag giunga u n livello d i su b ro u tin e inferiore rispetto a quello attuale. L’effetto di questo co m an d o è l’esecuzione delle istruzioni che m ancano al co m p letam en to della su b ro u tin e co r ren tem en te in esecuzione. Al co n trario il c o m an d o + provoca il proseguim ento dell’esecuzione fino al livello d i su brourine appena superiore. Il co m an d o = fa proseguire l’ese cuzione finché n on si inco n tra lo stesso livello di quello corrente e p u ò essere usato per eseguire u n a sola su b ro u tin e q u a n d o ci si trova all’istruzione C A L L . Q u a n d o si usa = la fi nestra del tracer n o n m o stra i dettagli della su b ro u rin e. Si tra tta di un com an d o p a rtic o larm ente utile in presenza d istruzioni L O O P ; infatti l’esecuzione si ferm a esattam ente alla fine di o g n i ciclo.
C.7
Installazione
In questo paragrafo spieghiam o com e usare gli stru m e n ti softw are disponibili. Per prim a cosa è necessario in d iv id u are il softw are c o rrisp o n d e n te alla p ro p ria p iattafo rm a hardw are (qui m ettiam o a disposizione versioni già co m pilate p er Solaris, U N IX , L inux e W indow s). Il softw are è reperibile nel C D -R O M allegato. Le d irectory principali del C D -R O M sono Bigendnx, LtUndNx e MSWindos , e ciascuna co n tien e una directory assembler con il m a teriale. Le tre cartelle radice so n o d estinate risp ettivam ente ai sistem i U N IX big endian (per esem pio le w orkstation dì S un), ai sistem i U N IX little endian (per esem pio Linux per PC ) e ai sistem i W indow s. D o p o averla decom pressa o co p iata, la d ire c to ry assembler dovrebbe c o n te n ere i seguenti file e sotto d irecto ry : READ_ME , bin, as_src, trce_src, examples e exercìse. I sor genti precom pU ati si trovano nella d irectory bin, m a sono presenti anche nella directory examples p er co m o d ità. Per farsi uriidea del funzionam ento del sistema, basta portarsi nella directory examples ed eseguire t8 B Bllowrld
Q u esto co m an d o corrisponde al p rim o esem pio del Paragrafo C .8. La directory as_src contiene il codice sorgente dell’assemblatore. I file sorgenti sono scritti in C e per ricom pilarli si usa il co m an d o make. N ella directory dei sorgenti è presente an che il file Makefìle che serve per la com pilazione sulle piattaform e P O S IX com patibili. Sulle piattaform e W indow s la com pilazione è svolta dal file batch make.bat. D o p o la com pilazione potrebbe essere necessario copiare i file eseguibili in u rialtra directory, o m odificare la va riabile d ’am biente PA TH , affinché l’assem blatore as88 e il tracer t88 siano visibili dalie directory conten en ti i sorgenti in linguaggio assem blativo. In alternativa, invece di digitare solo t88c possibile specificare l’in tero percorso del l’eseguibile.
C8
Esempi
709
Sui sistemi W indow s 2000 e X P è necessario installare il driver di term inale ansi.sys in serendo la riga d e v i c e = % s y s t e m R o o t % \ Sy s teni32 \ a ns i .sys
nel file di configurazione config.nt, che si trova al percorso \ w i n n t \ s y s t e m 3 2 \ c o n f i g .nt \ w i n d o » s \ s y s t e m 3 2 \ c o n f i g .ut
( W i n d o w s 2000) ( W i n d o w s XP)
Sui sistemi W indow s 9 5 /9 8 /M E il driver va inserito nel file config.sys. Nei sistemi U N IX e L inux il driver è in genere già installato.
C.8
Esempi
N ei paragrafi da C .2 a C .4 abbiam o presentato il processore 8088, la sua m em oria e le sue istruzioni. H Paragrafo C .5 ha in tro d o tto il linguaggio assemblativo di as88 che usiam o in questo testo. Nei Paragrafi C .6 e C .7 abbiam o studiato il tracer e descritto l'installazione de gli stru m en ti software. In teoria queste inform azioni dovrebbero già essere sufficienti per la scrittu ra e il d ebug di p rogram m i assem blativi con gli stru m en ti forniti. C iononostante, a m olti lettori potrebbe giovare la presentazione dettagliata di alcuni esempi di program m i as sem blativi e il loco debug attraverso il tracer. Perciò qui presentiam o ì program m i d'esem pio che abbiam o inserito nella director)' examples del m ateriale di supporto. Suggeriam o al lettore di assemblarli tu tti e di visualizzare la loro esecuzione con il tracer.
C.8.1
Esempio Hello World
C o m in ciam o con l'esem pio HlloWrld.s della Figura C .12. Il program m a è m ostrato nella finestra di sinistra e i n u m e ri d i riga sono indicati dopo il p u n to esclam ativo (!), il sim bo lo usato dall’assem blatore per i com m enti. Le prim e tre righe con ten g o n o le definizioni di costanti per associare la rappresentazione in tern a di due chiam ate di sistem a e di un file di o u tp u t ai loro n o m i convenzionali. La pseudoistruzione . SECT della riga 4 specifica che le righe successive fanno parte della sezione di T E S T O , ovvero che si tra tta d ’istruzioni del processore. A nalogam ente, la riga 17 indica che le righe so ttostanti costituiscono dati. La riga 19 inizializza una stringa di dati di 12 byte, com presi lo spazio e il carattere d i fine riga (\n). Le righe 5, 18 e 2 0 co n ten g o n o etichette, individuabili dalla presenza dei d u e p u n ti. Q u este etich ette rapp resen tan o valori n u m erici e in questo sono sim ili a costanti; tu tta via, il valore n um erico n o n è d ato , m a deve essere calcolato dall’assem blatore. L’e tic h e tta start si trova all'inizio della sezione di T E S T O e quindi vale 0, ma il valore di un’even tuale e tic h e tta successiva nella sezione di T E S T O (nell’esem pio non ce ne sono) dipen derebbe dal n u m ero d i byte che la precedono. Si consideri ora la riga 6 che term in a con la differenza di d u e etich ette, cioè con un valore costante. In effetti la riga è equivalente aH’istruzione MOV ex, 12
Appendice C
710
Programmazione in linguaggio assemblativo
_ E X IT = 1
I 1
CS:
MOV
C X ,d e -h w
! 6
_ W R IT E = 4
I 2
A H :0 0
A L :0 c
AX:
12
PUSH
CX
I 7
_STDO UT = 1
! 3
B H :0 0
B L :0 0
BX:
0
PUSH
HW
1 8
!4
C H :0 0
C L :0 c
CX:
i f
PUSH _ S T D O U T
! 9
D L :0 0
.SECT
.TEXT
00
DS=SS=ES:
I 5
D H :0 0
MOV
C X ,d e -h w
!6
SP:
7 fd 8
SF
PUSH
CX
! 7
BP:
0000
CC
PUSH
hw
! 8
SI:
0000
P IP:OOOc:PC
!9
D I:
0000
start +
start:
PUSH PUSH
STDOUT _ W R IT E
SYS
>
7
in
1
!1
SUB
C X ,A X
113
hw
PUSH
CX
! 14
■
PUSH
_ E X IT
! 15
hw
=
0000:
48
65
6c
!1 1 ! 12
0000
SU B
C X ,A X
! 13
OOOc
PUSH
CX
! 14
6c
=>
!1 0
S P ,8
> + 0
_ W R IT E
SYS ADD
0001
-
E
SP, 8
.SECT
-
PUSH
0 S Z C =>0004
O D
no
ADD
SYS
DX:
002
W o r ld \n
H e llo 6f
20
57
6f
H e llo
W o r ld
25928
! 16 ! 17
.D A T A
hw : .A S C II " H e llo W o r l d W
!1 8 ! 19
de:
!2 0
.B Y T E 0
(a)
Figura C .1 2
(b)
(a) Program m a HlloWrld.s. (b) Finestre del tracer durante la sua e se cu zio n e .
con la differenza che, nel prim o caso, il calcolo della lunghezza della stringa è lasciato al l’assem blatore e n on al program m atore. Il valore indicato dalla differenza corrisponde alla quan tità di spazio riservato alla stringa della riga 19 nella sezione dati. L’istruzione MOV della riga 6 richiede la copia di de -h w in e x . Le righe da 7 a 11 m ostrano il funzionam ento dell’invocazione di una chiam ata di siste ma. Le cinque righe sono la traduzione in codice assemblativo della chiam ata di funzione C w r i t e ( 1 , hw , 12);
il cui prim o p aram etro è il d escrittore di fde per lo standard o u tp u t (1), il secondo è l’in dirizzo della stringa d a stam pare (hw) e il terzo è la lunghezza della stringa (12). Le righe dalla 7 alla 9 im pilano questi param etri sullo stack in ord in e inverso, secondo la conven zione del C e quella a d o tta ta dal tracer. La riga 10 im pila sullo stack il n u m ero della chia m ata d i sistem a w r i t e (4) e la 11 effettua la chiam ata vera e propria. Q u esta sequenza di chiam ata ricalca il fu nzionam ento dei program m i in linguaggio assem blativo scritti p er i sistem i U N IX (o L inux), m a per eseguirla d ire tta m e n te su altri sistem i operativi dovrebbe essere leggerm ente m odificata per aderire alle convenzioni di quei sistem i. T uttavia, l’as sem blatore as88 e il tracer t88 usano le convenzioni di chiam ata di U N IX anche se sono eseguiti su sistem i W indow s. La chiam ata di sistem a della riga 11 esegue la scrittura vera e propria. La riga 12 ri pristina lo stack alla posizione precedente alla chiam ata, spostando il pu n tato re allo stack indietro di q u attro parole di 2 byte ciascuna. Se l’operazione di scrittura h a successo, il n u m ero di byte scritti viene restituito nel registro AX. La riga 13 sottrae il risultato della chia m ata di sistem a della riga 11 al valore del registro CX, contenente la lunghezza della stringa originale, per stabilire se la chiam ata ha avuto successo, ossia per stabilire se sono stati scritti tu tti i byte. D i conseguenza, lo stato di uscita del program m a sarà 0 soltanto in caso di sue-
C.8
Esempi
711
cesso. Le righe 14 e 15 preparano l’esecuzione della chiam ata di sistem a e x i t (riga 16) im pilando sullo stack lo stato d ’uscita e il codice della funzione EXIT. Le istruzioni MOV e SUB usano il prim o operando com e destinazione e il secondo com e sorgente. Q uesta è la convenzione ad o ttata dal nostro assem blatore, altri potrebbero usare l’ordine inverso; non c ’è alcuna ragione particolare per preferire un ordinam ento a un altro. Proviam o ad assemblare e a eseguire HlloWrld.s. Forniam o le indicazioni sui procedi m enti d a seguire sulle piattaform e U N IX e W indow s; le indicazioni per U N IX dovrebbero valere anche p er Linux, Solaris, M acO S X e p e r altre varianti di U N IX . Si com incia con l’a prire u n a finestra dell’interprete di com andi (la shell). Su W indow s bisogna cliccare in se quenza su Start > Programmi > Accessori > Prompt dei comandi
Q u in d i ci si p o rta nella directory examplescon il com ando cd(ChangeDirectory). L’argom ento di questo com ando dipende dalla locazione del sistema in cui è stato copiato il m ateriale di supporto. U n a volta entrati nella directory si può verificare la presenza dei file binari del l’assem blatore e del tracer con il com ando U N IX Is o con il com ando W indow s dir. I file binari si chiam ano rispettivam ente as88 e t88; sui sistemi W indow s han n o estensione .exe, m a n o n c’è bisogno di specificare l’estensione per lanciare la loro esecuzione. Se i file su d detti n o n si trovano nella directory, bisogna trovarli e copiarli al suo interno. È ora possibile passare all’assemblaggio digitando il com ando as88 HlloWrld.s
Se il com ando produce un errore non o stan te l’assem blatore sia presente nella cartella, si può provare a digitare ./as88 HlloWrld.s
nei sistem i U N IX o •\as88 HlloWrld.s
nei sistem i W indow s. Se l’assemblaggio term in a correttam ente, verranno visualizzati i messaggi: Project HlloWrld listfile HlloWrld.$ .4 Project HlloWrld num file HlloWrld.# Project HlloWrld loadfile HlloWrld.88.
che indicano la creazione dei file corrispondenti. Se non ci sono messaggi d ’errore, si p ro cede con l’invocazione del tracer: t8 8 HlloWrld
che ne apre le finestre. La freccia nel riquadro in alto a destra pu n ta ora sull’istruzione MOV
C X ,de-hw
della riga 6. A questo p u n to si può digitare u n “a capo” (il tasto E n ter o Invio sulle tastiere dei P C ) che provoca l’esecuzione di u n ’istruzione, per cui l’istruzione ora p u n ta ta è push
ex
Appendice C
712
Programmazione in linguaggio assemblativo
e CX contiene adesso il valore 12 (nella finestra d i sinistra). D o p o un altro “a capo” la fine stra centrale contiene il valore OOOc, cioè 12 in esadecimale. Q uesta finestra m ostra lo stack, che adesso contiene u n a parola di valore 12. Se si prem e Invio ancora tre volte si eseguono le tre PUSH delle righe 8, 9 e 10, d opodiché lo stack conterrà q u attro elem enti e il program co u n ter varrà OOOb (indicato nella finestra di sinistra). D opo u n altro “a capo” viene eseguita la chiam ata di sistema chc produce la stam pa della stringa “H ello W orld\n” nella finestra in basso a destra. Adesso SP vale 0x7fR), m a dopo un altro “a capo” viene increm entato di 8 e diventa 0x7ff8. D opo altri q u attro invii a capo, la chiam ata di sistem a viene com pletata e l’esecuzione del tracer si interrom pe. Per com prendere a fondo il funzionam ento dell’assemblaggio p u ò essere utile aprire il file hlloWrld.s con un editor. A tal fine conviene evitare di usare program m i com e Word per ché potrebbero form attare il sorgente in m o d o scorretto. Sulle m acchine U N IX si possono usare per esem pio ex, vi, o emacr, sui sistemi W indow s si può aprire Notepad, un editor m olto sem plice reperibile cliccando in sequenza su Start > Programmi > Accessori > Notepad
C onsigliam o di m odificare la stringa alla riga 19 per visualizzare un messaggio diverso. D opo aver salvato il file, si p uò procedere al suo assem blaggio ed eseguirlo con il tracer. Q uesta sem plice m odifica è un prim o approccio alla program m azione in linguaggio assemblativo.
C.8.2
Esempio con i registri d'uso generale
L’esem pio che presentiam o ora m ostra p iù in dettaglio l’uso dei registri ed evidenzia u n a delle insidie della m oltiplicazione nell’8088. La parte sinistra della Figura C .1 3 m ostra una p o r zione del program m a genReg.s, m entre la parte destra raffigura la finestra dei registri del tra cer in d u e m o m en ti diversi dell’esecuzione del program m a. La Figura C . 13(b) m ostra lo stato dei registri d o p o l’esecuzione della riga 7. L’istruzione alla riga 4 MOV A X ,258
carica il valore 258 in a x , che equivale a caricare 1 in AH e 2 in A L. Alla riga 5 si effettua la som m a di AL e AH, d opodiché AH vale 3. Alla riga 6 viene copiato il co n ten u to della varia bile times (10) in e x , alla riga 7 viene caricato l’indirizzo della variabile muldat( 2) in BX; l’indirizzo di multiate 2, perché questa si trova in corrispondenza del secondo byte della se zione D A TI. Q uesta è la situazione fotografata nella Figura C .13(b): AH vale 3, AL vale 2 e AX vale 770, in q u a n to 3 x 2 56 + 2 = 770. L’istruzione successiva (riga 8) copia il c o n te n u to di muldat in AX. D unque, dopo un ulteriore invio a capo, a x conterrà 625. Siam o ora p ro n ti per entrare in u n ciclo che m oltiplica il co n ten u to di AX alla parola chc si trova all’indirizzo 2 ( b x ) , cioè all’indirizzo muldttt + 2, chc vale 2. La destinazione im plicita dell’istruzione di m oltiplicazione è la coppia di registri DX:AX. D opo la prim a itera zione del ciclo il risultato può essere c o n te n u to in u n a sola parola, perciò a x contiene il ri sultato (1250) e DX resta a 0. La Figura C .13(c) m ostra il co n ten u to dei registri dopo 7 m ol tiplicazioni successive. All’inizio del ciclo AX valeva 6 2 5 , perciò il risultato delle sette m oltiplicazioni per 2 è 80.000. Q u esto nu m ero non p u ò più essere c o n te n u to in AX, bensì occupa ora i 3 2 bit dei registri d x :a x accoppiati, d x vale 1 e a x vale 1 4 .4 6 4 . L’istruzione LOOP decrem enta il re-
C.8
start: MOV AX,258 ADDB AH,AL MOV CX,(times) MOV BX,muldat MOV AX,(BX) llp: MUL 2 p - SI: 0000 IP:0009:PC DI: 0000 start + 4
(a) Figura C.13
Esempi
713
CS: 00 DS= 5S-ES: 002 AH 38 AL: 80 AX 14464 BH 00 BL:02 BX: 2 CH 00 CL:04 CX 4 DH :00 DL:01 DX 1 SP: 7fe0 SF O D S Z C BP: 0000 CC v > P - c SI: 0000 IP 0011 :PC DI: 0000 start + 7
(b)
(c)
(a) Porzione del programma genReg.s. (b) Finestra dei registri del tracer dopo l'esecuzione della riga 7, (c) dopo l'esecuzione di sette moltiplicazioni (sei iterazioni dei ciclo).
gistro CX di un’u nità a ogni iterazione. Poiché all'inizio dell’esecuzione ex valeva 10, dopo sette operazioni MUL (e d o p o sole sei iterazioni dell’istruzione l o o p ) vale 4. Il problem a si verifica al m o m en to della m oltiplicazione successiva. La m oltiplicazione coinvolge AX m a non d x , perciò m u l m oltiplica AX (14.464) per 2 producendo 2 8 .9 2 8 . II risultato è inserito in a x e DX viene azzerato, il che è algebricam ente errato.
C .8.3
Istruzioni di chiamata e puntatori ai registri
L’esem pio successivo, vecbrod.s, è u n breve program m a p er il calcolo del p ro d o tto scalare di due vettori, veci e vec2. E m ostrato nella Figura C. 14. La prim a parte del program m a prepara la chiam ata di vecmulsalvando s p in b p e im pilando gli indirizzi di vec2 c veci sullo stack, di m odo che vecmul possa accedervi. La riga 8 carica in CX la lunghezza in byte del vettore. La riga 9 fa scorrere questo valore di un bit a destra, così e x contiene o ra la lunghezza del v etto re in parole. Q uesto valore viene im pi lato sullo stack alla riga 10. La riga 11 effettua la chiam ata a vecmul A ncora u n a volta vale la pena sottolineare com e gli argom enti delle subroutine ven gano im pilati in o rdine inverso per rispettare la convenzione vigente p er le chiam ate del lin guaggio C . Così facendo, vecmul può essere invocata anche all’in tern o di un program m a C con la chiam ata v e e m u 1(count, veci, vec2)
D u ran te l’esecuzione dell’istruzione CALL, l’indirizzo di ritorno viene im pilato sullo stack e, usando il tracer, si evince che questo indirizzo è 0x0011. La prim a istruzione della subrourine è PUSH del pu n tato re base, BP, alla riga 22. BP viene salvato perché servirà a indirizzare gli argom enti e le variabili locali della subroutine. Successivam ente viene copiato il p u n ta to re allo stack (riga 23) di m odo che il nuovo valore del p u n tato re base p u n ti al suo vecchio valore. A questo p u n to sì è pronti per il caricam ento nei registri degli argom enti e per l’allo cazione dello spazio p er le variabili locali. Le tre righe successive prelevano gli argom enti dallo stack e li salvano nei registri. Si ricordi che lo stack è orientato alla parola, perciò i suoi in dirizzi dovrebbero essere sem pre pari. L’indirizzo di ritorno si trova appena dopo il vecchio p u n tato re base, perciò viene indirizzato con 2( b p ). Segue l’argom ento count, indirizzato con
J
714
Appendice C
Programmazione in linguaggio assemblativo
definizione del valore di _EXIT definizione del valore di _PRINTF inizio del"segmento di TESTO definizione dell'etichetta inpstart salvataggio di SP in BP push dell'indirizzo di vec2 push dell'indirizzo di veci CX = numero di byte nel vettore CX = numero di parole nel vettore push del numero di parole (count) chiamata di vecmul copia di AX push del risultato per la stampa push dell'indirizzo della stringa di formattazione push del codice di funzione di PRINTF chiamata della funzione PRINTF ripristino dello stack push del codice di stato push del codice di funzione di EXIT chiamata della funzione EXIT
EXIT =1 PRINTF = 127 .SECT .TEXT inpstart MOV BP.SP PUSH vec2 PUSH veci MOV CX,vec2-vec1 SHR CX,1 PUSH CX CALL vecmul MOV (inprod),AX PUSH AX PUSH pfmt PUSH PRINTF SYS ADD SP.12 PUSH 0 PUSH EXIT SYS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
vecmul: PUSH MOV MOV MOV MOV PUSH
21 inizio di vecmul(count, ve ci, vec2) 22 salvataggio di BP nello stack 23 copia di SP in BP per l'accesso agli argomenti 24 trasf. di count in CX per il controllo del ciclo 25 SI = veci 26 DI = vec2 27 push di 0 sullo stack
1:
BP BP.SP CX,4(BP) SI,6(BP) DU(BP) 0
LODS MUL (DI) ADD -2(BP),AX ADD DI,2 LOOP lb POP AX POP BP RET
.SECT .DATA pfmt:. ASCIZ ‘ Inner product is: %d\n” .ALIGN 2 vec1:.WORD 3,4,7,11,3 vec2:.WORD 2,6,3,1,0 .SECT .BSS inprod: .SPACE 2
Figura C .14
28 copia di (SI) in AX 29 moltiplicazione di AX per (DI) 30 somma di AX con valore accumulato in memoria 31 incremento di DI per puntare a elemento successivo 32 se CX > 0, vai all'etichetta lb 33 pop della cima dello stack in AX 34 ripristino di BP 35 ritorno da subroutine 36 ! 37 ! 38 ! 39 ! 40 ! 41 ! 42
inizio del segmento DATI definizione ai stringa forza allineamento a indirizzo pari vettore 1 vettore 2 inizio del segmento BSS allocazione dello spazio per inprod
Programma vecprod.s.
che viene caricato in CX alla riga 2 4 . Le righe 2 5 e 2 6 caricano veci e vec2 in SI e D I. Q uesta su b ro u tin e utilizza u n a variabile locale (inizializzata a 0) per salvare il risultato. A tal fine, la riga 2 7 esegue il push del valore 0. La Figura C .1 5 m ostra lo stato del processore appena prim a del prim o ingresso nel ci clo della riga 2 8 . La finestra stretta che si trova in alto e al centro della figura (alla destra dei registri) m ostra lo stack. Alla base dello stack c’è l’indirizzo di vec2 (0 x 0 0 2 2 ), seguito da quello di veci (0 x 0 0 1 8 ) e dal terzo argom ento, cioè il num ero d ’elementi di ciascun vettore (0 x 0 0 0 5 ). 4 (b p ),
C.8
M OV BP.SP PUSH vec2 PUSH veci M OV CX,vec2-vec1 SH R CX,1 PUSH CX C A LL vecmul
! ! ! ! ! ! !
5 6 7 8 9 10 II
...
vecmul : PUSH BP M O V BP.SP M O V CX,4 PUSH 0 1: LODS M U L (DI) A D D -2(BP),AX A D D D I,2 LO O P lb
Figura C.1S
! 21 ! 22 ! 23 ! 24 ! 25 ! 26 ! 27 ! 28 ! 29 ! 30 ! 31 1 32
C S: 00 DS=SS=ES: 004 A H :00 AL:00 AX: BH :00 BL:00 BX: C H :00 CL:05 CX: D H :0 0 DL:00 DX: SP: 7lb4 SF O D S Z 8P ; 7ft)6 C C - > p z SI: 0018 IP:0Q31:PC D I: 0022 vecmul+7 1 0000 0 7fc0 C 1 0011 0005 0018 0022
>1:
PUSH M OV MOV MOV M OV PUSH LO D S M UL ADD
Esempi
BP BP.SP CX.4(BP) 51,61 BP) DI,8(BP) 0 (OD -2(BP),AX
715
! 22 ! 23 1 24 ! 25 ! 26 ! 27 ! 28 ! 29 ! 30
1
> 0 7 0 =0018: 3 0 4 b 0 ..................................... =0022: 2 0 6 1 0 ..................................... 0 3 0 = 0000: 54 68 65 20 69 6e 20 70 The in proci = 0012: 25 64 21 3 0 0 3 0 % d ! .....................
3 2 26708 25637
Esecuzione di vecprod.s al primo ingresso nel ciclo della riga 28.
Poi c’è l'indirizzo di rito rn o (0 x 0 0 1 1); il n u m ero 1 alla sua sinisrra indica che si tra tta di un indirizzo di rito rn o di un livello inferiore rispetto al livello del program m a principale. La stessa indicazio n e è p resente anche nella finestra sotto i registri, m a questa volta l’in dirizzo è in d icato in m aniera sim bolica. R isalendo lo stack, sopra l’indirizzo di rito rn o si trova il vecchio valore di BP (0x7fc0) e poi lo zero im pilato alla riga 27. La freccia che p u n ta a questo valore in d ica il valore p u n ta to da S P . La finestra alla d estra dello stack m o stra un fram m en to del testo del p ro g ram m a, dove la freccia indica l'istru zio n e successiva da eseguire. E sam iniam o ora il ciclo che com incia alla riga 28. L’istruzione l o d s carica in AX una parola d i m em oria dal segm ento dati in m odalità registro indiretto (tram ite il registro S i ) . Poiché il flag della m odalità d increm ento è asserito, LODS si autoincrem enta, perciò dopo l’esecuzione della 28, s i p u n ta al successivo elem ento di veci. Per visualizzare graficam ente questo m eccanism o, basta avviare Ìl tracer con il com ando t68 veeprod
**
e attendere il caricam ento del program m a, q u in d i digitare /vecmul+7b
(seguito da u n invio a capo) per inserire u n b re a k p o in t aila riga dell’istruzione LODS. Ricordiam o che ogni com ando deve essere seguito da un invio a capo e d ’ora in avanti evi terem o di ripeterlo. D igitare q u in d i il com ando
9 affinché il tracer continui a eseguire le istruzioni finché non incontri il breakpoint; si fer m erà alla riga co n ten en te LOADS. La riga 29 m oltiplica a x per l’operan d o sorgente. La parola di m em oria richiesta dal l’istruzione m u l è prelevata dal segm ento dati attraverso il registro D I usato in m odalità re
Appendice C
716
Programmazione in linguaggio assemblativo
gistro in diretto. La destinazione di MUL è la com binazione di registri DX:AX, che è im plicita (cioè non m enzionata dall’istruzione). La riga 30 som m a il risultato della m oltiplicazione alla variabile locale che si trova al l’indirizzo dello stack - 2 ( BP ). D ato che MUL n o n increm enta autom aticam ente il proprio operando, bisogna effettuare l’increm ento esplicitam ente (riga 31), dopodiché DI punterà all’elem ento successivo del vettore vec2. L’istruzione l o o p conclude questa fase di calcolo: e x viene decrem entato e, se è an cora positivo, il program m a to rn a aU’etichetta locale 1 della riga 28. L’espressione lb sta a indicare proprio la precedente etichetta locale 1 p iù vicina rispetto alla posizione corrente. Alla term inazione del ciclo, la su b ro u tin e esegue la p o p del valore da restituire in AX (riga 33), ripristina b p (riga 34) e passa il controllo al program m a chiam ante (riga 35). Il p rogram m a riprende dalla posizione successiva alla chiam ata con l’esecuzione dell’i struzione MOV alla riga 12. Q u esta è la p rim a d i cin q ue istruzioni finalizzate alla stam pa del risultato. La chiam ata di sistema p r i n t f ricalca il co m portam ento della funzione prin tf del la libreria C standard. I tre argom enti sono im pilati sullo stack alle righe 13-15; si tratta del valore in tero da stam pare, dell’indirizzo della stringa d i form attazione ( pfmt) e del codice di funzione di p r i n t f (127). La stringa di form attazione pfmt contiene la stringa % d a in dicare che la chiam ata p r i n t f ha un argom ento di tipo intero che deve essere inserito nel la stam pa. La riga 17 ripristina lo stack. Poiché l’esecuzione del program m a è com inciata alla riga 5 con il salvataggio del p u n tato re allo stack nella locazioné del p u n tato re base, sarebbe stato possibile ripristinare lo stack anche con l’istruzione MOV SP ,BP
Il vantaggio d i questa soluzione è che il program m atore n o n deve tenere il conto delle di m ensioni raggiunte dal record d ’attivazione. La questione è di poca im portanza per quel che riguarda il program m a principale, ma nelle su b ro u tin e può aiutare a liberare lo stack dai dati inutili, per esem pio le variabili locali obsolete. La subroutine vecmul p uò essere inclusa in altri program m i. Se il file sorgente vecprod.s è inserito nella riga dei com andi d o p o u n altro file sorgente in ingresso all’assem blatore, la subroutine è utilizzabile per m oltiplicare due vettori di lunghezza fissa. Si consiglia in tal caso di rim uovere le definizioni delle costanti E X I T e _ P R I N T F p er evitare di definirle due volte. Basta includere in un p u n to qualsiasi il file syscalnr.b per non doversi più preoccupare di definire le costanti delle chiam ate di sistema.
C.8.4
Debugging di un programma per la stampa di array
I program m i degli esem pi precedenti sono m o lto sem plici e svolgono la propria funzione correttam ente. V eniam o ora all’uso del tracer com e stru m en to di supporto per il debugging di program m i con errori. Il program m a seguente dovrebbe stam pare l’array d ’interi che co m incia all’etichetta veci, tuttavia la sua versione iniziale contiene ben tre errori. Vedremo com e usare l’assem blatore e il tracer per correggere questi errori; com inciam o con il descri vere il codice. Per ragioni di com o d ità abbiam o creato il file d ’intestazione syscalnr.h dove abbiam o inserito tu tte le definizioni di costanti che identificano le chiam ate di sistema, per non do verle ridefinire all’in tern o di ogni p rogram m a che ne ha bisogno. La riga 1 del program m a
C8
Esempi
717
serve prop rio a includere il file d ’intestazione. ../syscalnr.h contiene anche le costanti dei de scrittori di file STDIN= 0
STDOtJT = 1 STDERR “ 2
aperti autom aticam ente all’avvio del processo, così com e le etichette d ’intestazione per i seg m enti del testo e dei dati. T utte queste definizioni sono m olto utilizzate, perciò vale la pena includere ../syscalnr.h all’inizio di tu tti i file sorgente scritti in linguaggio assemblativo. Se il codice sorgente è distribuito tra più file, l’assem blatore provvede a includere il file d ’intestazionc u n a sola volta per evitare di ridefinire più volte le stesse costanti. La Figura C . 16 co n tien e il codice il p ro g ram m a arrayprt. A bbiam o om esso il co m m e n to delle singole istru zio n i, p erché d ovrebbero risultare orm ai fam iliari, perciò ab biam o utilizzato il form ato a d u e colonne. La riga 4 inserisce l’indirizzo dello stack (an cora vuoto) nel registro p u n ta to re base per consen tire il successivo rip ristin o dello stack alla riga 10; basterà poi copiare il p u n ta to re base nel p u n ta to re allo stack com e già de scritto nell’esem pio precedente. Le righe dalla 5 alla 9 im pilano gli argom enti nello stack analogam en te a q u a n to già visto negli esem pi precedenti. Le righe dalla 22 alla 25 cari cano i registri nella su b ro u tin e. Le righe dalla 2 7 alla 3 0 m ostrano la stam pa di una stringa, quelle dalla 31 alla 34 co n tengono la chiam ata di sistem a p r i n t f per un valore intero. Si noti che l'indirizzo della stringa viene im pilato alla riga 2 7 , m en tre il valore intero viene copiato nello stack alla riga 33. In entram bi i casi l’indirizzo della stringa di form attazione è il prim o argom ento della PRINTF. Le righe dalla 37 alla 3 9 m ostrano com e stam pare un carattere usando la chiam ata di sistem a p u t c h a r . «include ".-/syscalnr.h"
! 1
.SECT .TEXT vecpstrt: MOV BP.SP PUSH veci MOV CX,frmatstr-vec1 SHR CX PUSH CX CALL vecprint MOV SP,BP PUSH 0 PUSH EXIT SYS
! 2 ! 3 ! 4 ! 5 ! 6 17 ! 8 ! 9 ! 10 ! 11 ! 12 ! 13
.SECT .DATA veci: .WORD 3,4,7,11,3 frmatstr: .ASCIZ "%s“
1 14 ! 15 ! 16
frmatkop: .ASCIZ "L'array contiene " frmatint: .ASCIZ " %d"
! 17 ! 18 ! 19
Figura C.16
.
•*
Programma arrayprt prima del debugging.
.SECT .TEXT vecprint: PUSH BP MOV BP.SP MOV CX,4(BP) MOV BX,6(BP) MOV Sl,0 PUSH frmatkop PUSH frmatstr PUSH PRINTF SYS MOV -4 22-24 dei computer, 12-25 Intel, 36-41 Sun Mirosystems, 41-42 Store-to-load, 309 Strategia di aggiornamento, 575 Strati, 3 Stream, 457 Streaming SIMD Extensions (SSE), 38 Striping, 87 Strobe, 156 Subroutine, 370, 721 Sun Fire E25K, 585-589 Sun Microsystems, 41-42 Sun UltraSPARC (si veda UltraSPARC) Supercomputer, 20, 35 Superuser, 471 Symmetric MultiProcessor (SMP), 563
743
T Tabella degli indici, 442 Tabella dei salti, 310 Tabella dei simboli, 506, 511-513 Tabella delle pagine, 418 Tabella di traduzione, 438 Tabella di verità, 134 Task bag, 617 Tassonomia dei calcolatori paralleli, 566-567 Tassonomia di Flynn, 566-567 Tastiere, 102 TAT-12/13, 27 Tavolozza, 106 TCP (si m&Transmission Control Protocol) Telco, 116 Template, 616 Tempo del binding, 518-521 Temporizzazione del bus, 174-179 Thin film transistor, 105 Thrashing, 425 Thread, 479 Tipi di dati, 339-342 non numerici, 340 numerici, 339-340’ Tipi d’istruzioni, 365-384 TLB (si veda Translation Lookaside Buffer) TN (si veda Twisted Nematic) Token, 546 Topologia virtuale, 612 Toro, 595 Torri di Hanoi, 396-400 Pentium, 397 UltraSPARC, 397-400 TOS (si veda Top O f Stack pointer) Tracer, 678, 705 Traduttori, 491 Traduzione, 2-4 Transistor, invenzione dei, 18
744
Indice analitico
Transistor-Transistor Logic (TTL), 133 Transizioni, 270 Translation Lookaside Buffer (TLB), 312, 437 fallimento, 437 Translation Storage Buffer (TSB), 437 Transmission Control Protocol (TCP), 550 intestazione, 550 Trap, 392, 716 Trasferimento di un blocco, bus, 182 Trasferimento, copia e aritmetica, 689-692 Trasmettitore-ricevitore del bus, 172 Trasparente (paginazione), 418 Trasparenza, 394 TSB (si veda Translation Storage Buffer) TTL (si veda TransistorTransistor Logic) Tuple, 616 Twisted Nematic (TN), 104 TX-0, 18 TX-2, 18
u UART (si veda Universal Asynchronous Receiver Transmitter) Ubiquitous computing (computazione onnipresente), 25 UDB (si veda UltraSPARC, data buffer) UHC1 (si veda Universal Host Controller Interface) Ultra Port Architecture (UPA), 192 UltraSPARC I, 42
UltraSPARC III, 190-195 formati d'istruzione, 349-350 indirizzamento, 3(>3-à istruzioni, 378-381 memoria virtuale, 436-439 microarchitettura, 310-315 panoramica del livello ISA, 333-336 storia, 41-42 tipi di dati, 341 torri di Hanoi, 397-400. 409 UDB II, 192 UltraSPARC Data Buffer II, 192 UMA (si veda Uniform Memory Access) UNICODE. 125-127 Uniform Memory Access (UMA), 567 Unità di accodamcnto, 281 Unità di allocazione/rinomina, Pentium 4, 307 Unità di controllo microprogrammata, 233-237 Unità di decodifica, 281 Unità di prelievo dell'istruzione, 268-272 Unità di ritiro, 309 Unità funzionali, 61 Unità metriche, 45 Universal Asynchronous Receiver Transmitter (UART), 214 Universa] Serial Bus (USB), 210-214 Universal Synchronous Asynchronous Receiver Transmitter (USART), 214 UNIX collegamento, 524-525 gestione dei processi, 477-480 introduzione, 455-463 memoria virtuale, 463-465 servizidi I/O, 467-477
UPA (si veda Ultra Port Architecture) USART (si veda Universal Synchronous Asynchronous Receiver Transmitter) USB (si veda Universa] Serial Bus) USB 2.0,213
V Valore di sinistra dell’assegnamento, 686 Variabili di condizione, 480 VAX, 54 VCI (si veda Vi miai Component Interconnect) Very Long Instruction Word (VLIW), 531 Vettore di interrupt, 183, 393 Vettoriale, registro, 64 Virtual Component Interconnect (VCI), 547 VIS (si veda Visual Instruction Set) Visual Instruction Set (VIS), 42 VLIW (si veda Very Long Instruction Word) VLSI (si veda Very Large Scale Integration) Volume Table O f Contents (VTOC), 94 Von Neumann, John, 17 macchina di, 17 VTOC (si veda Volume Table O f Contents)
w WAN (si veda Widc-Arca Network) Wattel, Evert, 677 WEIZAC, 16 Whirlwind I, 18
Indice analitico
Wide-Area Network (WAN), 548 Wilkes, Maurice, 8, 54 Windows 95, 458 Windows 98, 459 Windows XP file, 473-477 gestione dei processi, 481-483 introduzione, 458-463 memoria virtuale, 465-467
Windows New Technology (NT), 459 Windows N T (si veda Windows New Technology) Windows, (sì veda anche Windows XP) 24, 458 collegamento in, 523-524 storia, 24 Working set, 422-423 Wozniak, Steve, 23
X X Windows, 458 Xeon, 40
2 Zilog Z8000, 55 Zuse, Konrad, 15, 16
745
Prentice Hall License Agreement and Limited Warranty READ THE FOLLOW1NG TERMS AND CO ND ITIO N S CAREFULLY BEI ORE OPENING THIS SOFTWARE PACKAGE. THIS LEGAI DOC UMENT IS AN AGREEMENT BETWEEN YOU AND PRENTIC E HALL. INC (THE •'COMPANY"). BY OPENING THIS SEALED SOFTWARE PACKAGE, YOU ARE AGREEING TO BE BO U N D BY THESE TERMS AND CONDITIONS. IF YOU D O NOT AGREE WITH THESE TERMS AND CONDITIONS. D O NOT OPEN THE SOFTWARE PACKAGE. PROMPTLY RETURN THE UNOPENED SOFTWARE PACKAGE AND ALL ACCOMPANYING ITEMSTOTHE PLACE YOU OBTAINED THEM FOR A F U ll RFFUND O F ANY SUM SYOU HAVE PAID. 1. GRANT OF LICENSE: In consideration of yoor p urchase of ihis book, an d your agreem ent lo ab id e by th e le m » an d conditions of this A greem ent, th e C om pany grants to you a n o n ex d u siv e right to use an d display thè co p y of die en clo sed softw are program (hereinafter th e "SOFTWARE") o n a single com puter (i.e., w ith a single CPU) at a single location so long as >00 com ply w ith th è terms of this Agreem ent The Comparry reserves all righft not pxpressly granted to you u n d er this A greem ent. 2 . OW NERSHIP OF SOFTWARE: You ow n only th e m agnetic or physical m edia (the en clo sed m edia) o n w hich th e SOFTWARE is reco rd ed or fixed, buf th e C om pany a n d th e softw are developers retain all th e rights. title. an d ow nership to the SOFTWARE recorded o n th e originai m edia copy(iesi a n d all subsequent copies of thè SOFTWARE, regardless o f th e forni o r m edia o n w hich th e originai o r o th er copies m ay exist. This license t s not a sa le of th e originai SOFTWARE o r any copy to you.
3. COPY RESTRICTIONS This SOFTWARE an d the accom panying p n n te d m aterials an d user m anual ithe "D ocum entation"! are th e subject of copyright. The individuai program * on the m edia a re COpyrighted by th e authors of e a c h program Some of the program» on the m edia include separate licensing agreem ents. If you m tend to use o n e of th ese program s, you m ust read an d follow its acco m panying license agreem ent. You m ay not copy th e D ocum entation or th e SOFTWARE, ex cep t th at you may m ak e a single copy o f th e SOFTWARE for backup or arrhival purposes only You may h e hpld legai ly responsihW» for any r o p y n g o r copyright infringem ent w hich is c a u sed or encouraged by your failure to ab id e by th e term s of this restriction. 4 USE RESTRICTIONS- You may not netw ork the SOFTWARE or othenvise u se it o n m ore than o n e co m p u ter o r co m p u ter te r m inal at th e sa m e tim e. You m ay physically transfer th e SOFTWARE from o n e co m p u ter to an o th er provided th at th e SOFTWARE is used o n only o n e com puter at a tim e. You m ay noi distribute copies of th e SOFTWARE o r D o cum entation to others. You may noe reverse en gineer. disassem ble. decom pile, modlfy, adapt. translate, o r create derivative works b ased o n th e SOFTWARE o r the D o cum entation without the p n o r w ritten consent of th e Company. 5. IRANSFER RESTRICTIONS: The enclosed SOFTWARE is licensed only to you an d may not b e transferred to any o n e else witho u t the prior w ritten consent of th e Com pany. Any u n au th o o zed transfer of th e SOFTWARE shall result in th e im m ediate term ination of this A greement. 6 . TERMINATOVI: This license is effective until term inated. This license will term inate autom atically w ithout nofice from th e C om pany and b ec o m e nuli an d void if you fail to com ply w ith any provisions o r lim itations of this license U pon torm ination, you shall destrov th e D ocum entation an d all copies of th e SOFTWARE. All provisions o f this A greement as to w arranties, lim itation o f liabtlrty. rem edies or dam ages. and our ow nership rights shall survive term ination. 7. MISCELLANEOUS: This Agreem ent shall b e construed in ac co rd an ce w ith th e laws of th e U nited States o f Am erica an d th e State of N ew York a n d shall benefit thè Company, its affiliate* a n d assignees. 8. LIMITED WARRANTY AND DISCLAIMER OF WARRANTY: The Com pany w arrants th at th e SOFTWARE, w hen properly used in ac co rd an ce w ith th e D ocum entation, will o p erate in substantial conform ity w ith th e d escription o f the SOFTWARE set iorth in the D ocum entation. The C om pany d o es not vsarrant that thè SOFTWARE will m eet your requirem m t* o r that tho operation o f the SOFT WARE will be u ninlem ipted or error-free. The C om pany w arrants that th e m edia o n w hich th e SOFTWARE is delivered shall b e free from d efetls in m aterials and w orkm anship u n d er norm al use for a peti o d of thirty (30) davs from th è d ate of your purchase. Your only remedy an d th e C om pany’s only obligation u n d er these lim ited yvarranties is, at th e C om pany's option, return of th e w arranted item for a refund o f an y am ounts paid by vou o r replacem ent of th e item . Any replacem ent of SOFTWARE o r m edia un d er th e w arranties shall not ex ten d th e originai w arranty period. The lim ited w arranty set forth above shall not apply to any SOFTWARE w h ich the C om pany deter m ines in good faith has b ee n subject to m isuse. negleci, im proper installation, repair, alteration, or d am ag e by you. EXCEPT FOR THE EXPRESSED WARRANTIES SET FORTH ABOVE. THE COMPANY DISCLAIMS ALL W ARRANTIES. EXPRESS O R IMPLIED, INCLUDING W ITH O U T LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND RTNESS FOR A PARTICULAR PURPOSE. EXCEPT FOR THE EXPRESS W ARRANTY SET FORTH ABOVE. THE COMPANY DOES NOT W ARRANT. G L ARANTEE. OR MAKE ANY REPRESENTATION REGARDING THE USE OR THE RESULTS OF THE USE OF THE SOFTWARE IN TERMS OF ITS CORRECTNESS. ACCURACY. RELIABILITY, CURRENTNESS. O R OTHERWISE IN N O EVENT. SHALL THE COMPANY O R ITS EMPLOYEES, AGENTS, SUPPLIERS, OR CONTRACTORS BE LIABLE FOR ANY INCIDENTAL, INDIRECT, SPECIAL. OR CONSEQUENTIAL DAMAGES ARISING O U T O F OR IN CONNECTION WITH THE LICENSE GRANTED UNDER THIS AGREEMENT. O R FOR LOSS O F USE, LOSS O F DATA. LOSS O F INCOME OR PROFIT. OR OTHER LOSSES SUSTAINED AS A RESULT OF INJURY TO ANY PERSON. OR LOSS OF OR DAMAGE TO PROPERTY. O R CLAIMS OF THIRD PARTIES. EVEN IF THE COMPANY O R AN AUTHORIZED REPRESENTYaTIVE OF THE COMPANY HAS BEEN ADVI5ED OF THE POSSIBIUTY OF SUCH DAMAGES. IN N O EVENT SHALL LIABILITY O FT H E COMPANY FOR DAMAGES WITH RESPECTTOTHE SOFTWARE EXCEED THE AMOUNTS ACTUALLY PAID BY YOU. IF ANY. FOR THE SOFTWARE. SOME IURISDICTIONS D O NOT A llO W THE LIMITATION OF IMPIIED WARRANTIES O R tlABIUTY FOR INCIDENTAL. INDIRECT. SPECIAL. O R CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATIONS MAY NOT ALWAYS APPLY. THE WARRANTIES IN THIS AGREEMENT GIVE YOU SPECIFIC LEGAL RIGHTS A ND YOU MAY ALSO HAVE OTHER RIGHTS WH ICH VARY IN ACCORDANCE WITH LOCAL LAW. ACKNOWLEDGMENT YOU ACKNOWLEDGE THAT YOU HAVE READ THIS AGREEMENT. UNDERSTAND IT, AND AGREETO BE BO U N D BY ITS TERMS AND CO ND ITIO N S. YOU ALSO AGREE THAT THIS AGREEMENT IS THE COMPLETE A N D EXCLUSIVE STATEMENT OF THE AGREE MENT BETWEEN YOU AND THE COMPANY AND SUPERSEDES ALL PROPOSALS OR PRIOR AGREEMENTS, ORAL. O R WRITTEN. AND ANY OTHFR COMMUNICATIONS BETWEEN YOU ANDTHE COMPANY OR ANY REPRESENTATIVE OF THE COMPANY RELATING TO THE SUBJECT MATTER OF THIS ACREEMENT. Should you have any questtons co ncerning this Agreem ent or if ytxi w ish lo co n tact th e C om pany for any reason, please contact in w h tin g at th e address below Robin Short P rentice H all PTR O n e Lake Street U pper Saddle River, New Jersey 0 7 4 5 8
Andrew S. Tanenbaum
A r c h i t e t t u r a d i ■i C a l c o l a t o r i UN APPROCCIO STI GUTTURALE Quinta edizione
P tir conservando l’ormai noia e inconfondibile metafora che vede un calcolatore i «uni- una gei in Ina ili livelli. i|iiesta nuova edizione del best-seller di Andrew Tanenbaum presenta numerose e
|
i i i i h»i i . i i i i
i novità,
in linea con lo sc.»i«* dell’arte dei più recenti sviluppi dell’industria dei compilici (ili esempi piesenl.ili riguardano l'Intel Pentium 4, il Sun U ltra -S P A R C III e il processore Intel 8051. un »hip oggi molto utili//.il** in seguito alla crescente popolarità dei sistemi integrati. L’8051 rappresenta una \» eli.» ampia mente dillusa grazie .il costo estremamente basso, alla grande disponibilità ili soltw.ue « pei ile-in lie e aH'csisteuza ili un gran numero di programmatori specializzati. Inoltre, "a granile richiesta” è stata aggiunta un’interessante sezione, chiara e ileti.igli.it.i. dedi« .1 1 . 1 ill.i programma/ione in linguaggio assemblativo, facendo riferimento a i|ucllo dellSOSS, un i u nione ridotta del Pentium: anche in questo caso si tratta di una scelta dettata dalle esigenze d n lniii he. visto i he la maggior parte degli studenti possiede, a casa, un computer con processore Pentium (sul i|u.ilc. tia l’altro, è possibile eseguire programmi 8088).
L'A u to re A n d rew S. Ta n en b a u m si è laureato al M IT , ha conseguito il Ph.D a Berkeley e ila più ili tieni nini è professore allaVrije Universiteit di Amsterdam, dove ha insegnato sistemi operativi, reti e .in Iniettine lei calcolatori a migliaia di studenti. C o n Prentice Hall ha pubblicato 15 best-seller, premiati im i ...... icma riconoscimenti da parte di A C M e altre associazioni professionali. E Fellow di A C M e II I I
Supplementi Il CD-ROM allegato mette a disposizione un insieme di strumenti per facilitare l'apprendimento •!- Ili programmazione assemblativa. tra cui un assemblatore 8088, un simulatore e un tracer. Sul sito web h ttp ://h p e .p e a rso n e d .it i docenti che adottano il testo potranno accedere ill< slid« m PowerPoint; contattando un rappresentante Pearson Education, è inoltre possibile richiedere I lu mi, mi M anual (in inglese) con le soluzioni dei problemi.
ISBN 88
PEARSON
Education
h ttp : / /h p c .p c irs o n e d .lt
€ 49,00
t/l-9
!