arquitectura sparc

29
Arquitectura de Computadores II SPArc – Parte I Facultad de Ingeniería Universidad de la República Instituto de Computación Curso 2008

Upload: pelado27

Post on 06-Dec-2015

66 views

Category:

Documents


3 download

DESCRIPTION

Presentación completa de la arquitectura SPARC

TRANSCRIPT

Arquitectura de Computadores IISPArc – Parte I

Facultad de IngenieríaUniversidad de la República

Instituto de ComputaciónCurso 2008

SPARC: Introducción

SPARC: Scalable Processor ARChitecture Arquitectura RISC

MIPS: Stanford SPARC: Berkeley

NO es una implementación Desarrollado por el consorcio SPARC International Inc. Algunos implementadores: Sun Microsystems, Texas

Instruments, Toshiba, Fujitsu, Cypress, Tatung, entre otros ‘Scalable’: el diseño permite compatibilidad de software

“hacia adelante” Historia

1a implementación de Sun en 1987• SPARC version 7 architecture

SPARC v8 en 1990. Veremos esta versión SPARC v9 en 1994: 64-bit

SPARC: Características básicas (i)

Diseñado pensando en la optimización de los compiladores, mediante implementaciones sencillas basadas en pipeline

Espacio de direcciones lineal de 32 bits Formatos de instrucciones sencillos y escasos

Todas las instrucciones son de 32 bits Formatos básicos de instrucciones:

• Load/store• Arithmetic/logical/shift• Control transfer• Read/write control register• Floating-point operate• Coprocessor operate

Solo se accede a memoria mediante load/store E/S mapeada a memoria

SPARC: Características básicas (ii)

Modos de direccionamiento “registro + registro” “registro + inmediato”

La mayoría de las instrucciones operan sobre dos registros (o un registro y una constante) y ponen el resultado en un tercer registro

Ventanas de registros Basada en el diseño de Berkeley Permite reducir cantidad de load/stores Compiladores de alta perfromance Manejada por software supervisor (SO) Permite bajar latencia al salvar el contexto Gestión de las ventanas se hace con instrucciones especiales

(SAVE y RESTORE), no atada a llamadas a procedimiento (CALL y JMPL)

SPARC: Características básicas (iii)

En cada instante un programa accede a 8 registros globales más 24 registros de ventana

Estos registros se comportan como un cache de los argumentos del procedimiento, variables locales y direcciones de retorno

Salto retardado El procesador siempre hace el fetch y ejecuta la próxima

instrucción posterior a una bifurcación. Obs: se puede anular el efecto de la instrucción retardada

usando un bit especial de “annul”. En una instrucción de “conditional delayed transfer”, la instrucción retardada siempre se ejecuta (caso normal) cuando el annul bit es 0. En cambio cuando el annul bit es 1 la instrucción retardada no se ejecuta, excepto cuando se considera una bifurcación condicional que evalúa verdadero (o sea, el salto se hace).

SPARC: Características básicas (iv)

Traps vectorizadas El SO transfiere el control usando la tabla de traps, que

contiene las primeras 4 instruccions de cada manejador. La dirección base en la tabla (TBA) está en el trap base

register, TBR. Desplazamiento en la tabla codificado en el “type number” de cada trap.

Tabla de traps • Mitad para hardware traps• Mitad para traps de software (instrucciones Ticc).

Un trap abre una nueva ventana de registros, y los contadores de programa (PC, nPC) se salvan (por hardware) en dos registros de la nueva ventana.

• El manejador puede usar los restantes 6 registros

SPARC: Otras características (i)

Unidad de Punto Flotante (FPU) 32 registros de punto flotante de 32 bits (f registers). Load/store de PF mueven datos entre la FPU y memoria

(direcciones calculadas por la IU, Unidad de Enteros) Instrucciones Floating-Point operate (FPop): aritmética de

punto flotante Si la FPU no está presente (o deshabilitada, bit EF=0 en el

registro PSR), las instrucciones de punto flotante provocan una trap fp_disabled.

• La instrucción debe ser emulada Coprocesador (CP)

SPARC define un set de instrucciones adicional a la FPU, dependiente de la implementación y opcional.

Si CP no está presente (o deshabilitado, bit EC=0 en el registro PSR), las instrucciones correspondientes provocan una trap cp_disabled.

SPARC: Otras características (ii)

“Tagged instructions” Se usan los dos bits menos significativos de los

operandos con “tag” (etiqueta). Permite dar soporte a lenguajes que usan datos tipados como Lisp o Smalltalk.

Existen versiones con y sin generación de traps• Útil para manejar el overflow, por ejemplo

Instrucciones de sincronización para multiprocesadores Manejo de memoria

• read-then-set-memory atómico (LDSTUB, LDSTUBA)• exchange-register-with-memory atómico (SWAP, SWAPA)

Modos de operación SPARC provee dos modos de operación excluyentes

Supervisor Mode• Sistema, instrucciones privilegiadas

User mode• Aplicaciones

Protección en entornos multitarea Reset en modo supervisor: bit S=1 en el PSR Normalmente el sistema pone PSR(S)=0 (User mode)

Retorno a modo supervisor en traps y reset. RETT (return from trap) restaura el bit S al valor previo a la

interrupción

Modelo de Memoria El modelo de memoria SPARC se aplica a sistemas

uniprocesador y también a sistemas multiprocesadores de memoria compartida

Modelo estándar: Total Store Ordering (TSO)

Garantiza que stores, FLUSHes, y load-stores atómicos de todos los procesadores se ejecutan de manera serial y en un orden que cumple con el orden en que las instrucciones fueron lanzadas por los procesadores

Memory Management Unit (i) La arquitectura de referencia de la MMU especifica

Comportamiento del hardware Organización y contenidos de las tablas de memoria principal

que dan soporte a la arquitectura Características ofrecidas por la MMU32-bit virtual address36-bit physical addressFixed 4K-byte page size3-level mapSoporte para grandes espacios de mapeo lineal (4K, 256K, 16M, 4G bytes)Soporte de múltiple contextosProtecciones de nivel de páginaProcesamiento de hardware miss

Memory Management Unit (ii) Las funcionalidades vistas por el software: Traslación de direcciones virtuales a físicas para cada proceso en

ejecución. Mapeo en páginas de 4K-byte, lo cual evita la necesidad de disponer de espacios de memoria contiguos para cada proceso

Protección de memoria. Un proceso no puede acceder el espacio de memoria de otro proceso

Implementa la memoria virtual. Seguimiento de las páginas cargadas en memoria mediante la tabla de páginas. La MMU señaliza los fallos de página

MMU(iii) Dir. virtual se compara con

tags almacenadas en el PDC (TLB). Si hay un hit se genera la dirección física directamente

Si hay miss, la MMU carga los “Page Table Descriptors” hasta encontrar la “Page Table Entry” buscada, o produce un error (fallo de página, se genera trap). Esta entrada de la tabla se carga en la MMU, se hace la traducción de direcciones y continúa la carga desde memoria. Además se chequean los permisos, y si hay violación, se produce un trap.

Cache SPARC utiliza caches “normalmente”, aunque

algunas implementaciones pueden particionar instrucciones y datos en memorias (caches) separadas. Esta organización se conoce como arquitecture “Harvard” o “split I&D caches”.

Ventanas de Registros (i)

%31

%24ENTRADA

%23

%16LOCALES

%15

%8SALIDA

%31

%24ENTRADA

%23

%16LOCALES

%15

%8SALIDA

%31

%24ENTRADA

%23

%16LOCALES

%15

%8SALIDA

%7

%0GLOBALES

CWP+1

CWP

CWP-1

CWP+1

SAVE yTRAP

RESTORE yRETT

Ventanas de Registros (ii)

SPARC Register Set:

Vista de un Procedimiento en User-Mode

Subrutinas (i) PC

Dirección de la instrucción en ejecución nPC

Dirección de la próxima instrucción a ser ejecutada (si no ocurre un trap)

En un salto retardado el PC apunta a la instrucción retardada, mientras que el nPC apunta al destino del salto

PC es leído por el CALL o JMPL. En un trap PC y nPC se copian en los registros r[17] y r[18]

(locales 1 y 2) en la ventana CALL y RET (JMPL) no abren una nueva ventana Subrutinas normalmente usan SAVE para usar una nueva

ventana de registros Obs: riesgo de trap de overflow/underflow de la ventana de

registros

Subrutinas (ii)

SAVE decrementa el CWP, y almacena una suma en el registro destino. La constante "C" indica el espacio a reservar en el stack; el mínimo son 16 palabras para registros LOCAL e IN

Obs: parámetros fuente del SAVE son leídos de la ventana actual,

mientras que el destino pertenece a la nueva ventana. O sea que si bien el nombre "%sp" es el origen y destino, el resultado

se escribe en el “%sp” de la nueva ventana (el stack pointer original se renombra como “%fp” o frame pointer)

• %sp = %o6 (r14)• %fp = %i6 (r30)

function:

save %sp, -C, %sp

; perform function, leave return value,

; if any, in register %i0 upon exit

ret ; jmpl %i7+8, %g0

restore ; restore %g0,%g0,%g0

Subrutinas (iii) RET es una instrucción sintética que corresponde a un JMPL. Esta

instrucción hace un salto a la dirección resultante de sumar 8 al registro %i7

La dirección fuente (la del propio RET) se escribe a %g0 (o sea se descarta)

La instrucción restore es también sintética, y es la forma más simple del restore, sin hacer ninguna suma.

El llamante tiene el formato:

CALL también es una instrucción sintética (JMPL). En este caso se salva la dirección de retorno en el registro %o7. El “delay slot” se usa en este caso para setear el primer parámetro en 0. El valor de retorno también se pasa normalmente en %o0

call <function> ; jmpl <address>, %o7

mov 0, %o0

Subrutinas:Ejemplo (i)

Ejemplo: suma de tres enteros llamando a subrutina

! CALLER:

! int i; /* compiler assigns "i" to register %l7 */

! i = sum3( 1, 2, 3 );

...

mov 1, %o0 ! first arg to sum3 is 1

mov 2, %o1 ! second arg to sum3 is 2

call sum3 ! the call to sum3

mov 3, %o2 ! last parameter to sum3 in delay slot

mov %o0, %l7 ! copy return value to %l7 (variable "i")

...

Subrutinas:Ejemplo (ii)

#define SA(x) (((x)+7)&(˜0x07)) /* rounds "x" up to doubleword boundary */

#define MINFRAME ((16+1+6)*4) /* minimum size frame */

! CALLEE:

! int sum3( a, b, c )

! int a, b, c; /* args received in %i0, %i1, and %i2 */

! {

! return a+b+c;

! }

sum3:

save %sp,-SA(MINFRAME),%sp ! set up new %sp; alloc min. stack frame

add %i0, %i1, %l7 ! compute sum in local %l7

add %l7, %i2, %l7 ! (or %i0 could have been used directly)

ret ! return from sum3, and...

restore %l7, 0, %o0 ! move result into output reg & restore

Subrutinas:Ejemplo (ii)

Algunas rutinas “leaf” pueden operar sin una nueva ventana o stack frame, usando la del llamante: No referencian %sp, excepto en el SAVE No referencian %fp Usan no más de 8 registros, incluyendo %o7 (la “dirección de

retorno”) En este caso la rutina se puede optimizar, ahorrando

tiempo y memoria Solo puede usar registros “volátiles”: %o0 ... %o5, %o7, and

%g1

En el caso del ejemplo:

sum3:

add %o0, %o1, %o0 !

retl ! (must use RETL, not RET,

add %o0, %o2, %o0 ! to return from leaf procedure)

Algunas instrucciones sintéticas

El stack (i) Los registros in y out son usados fundamentalmente para

pasaje de parámetros El registro out %o6 se usa como stack pointer, %sp.

Apunta a un área de memoria donde el sistema puede almacenar %r16 ... %r31 (%l0 ... %l7 and %i0 ... %i7) si ocurre un window_overflow trap

El stack pointer del llamante %sp (%o6) se convierte automáticamente en el frame pointer %fp (%i6) del procedimiento corriente cuando se ejecuta un SAVE

El llamado encuentra sus primeros 6 parámetros en %i0 ... %i5, y el resto (si existen) en el stack

El stack (ii) A cada procedimiento se le asigna un “stack frame” en

memoria En tiempo de compilación se reservan al menos 16

palabras, arrancando en %sp, para salvar registros in y local

Otras reservas que siempre se hacen: Una palabra para parámetros “ocultos” Seis palabras para que el llamado almacene parámetros

direccionables

El compilador puede reservar más espacio bajo demanda, por ejemplo si se tienen más de seis parámetros de salida

El stack (iii)

Referencias SPARC International Inc., The SPARC Architecture

Manual, Version 8, 1992. R. P. Paul, SPARC Architecture, Assembly

Language Programming, and C, Second Edition, Prentice Hall, 2000.

Notas de teórico del curso.

Próxima clase Seguimos con SPARC