Está en la página 1de 29

Arquitectura de Computadores II

SPArc Parte I
Facultad de Ingeniera
Universidad de la Repblica

Instituto de Computacin
Curso 2008

SPARC:
Introduccin

SPARC: Scalable Processor ARChitecture


Arquitectura RISC

NO es una implementacin

MIPS: Stanford
SPARC: Berkeley
Desarrollado por el consorcio SPARC International Inc.
Algunos implementadores: Sun Microsystems, Texas
Instruments, Toshiba, Fujitsu, Cypress, Tatung, entre otros
Scalable: el diseo permite compatibilidad de software
hacia adelante

Historia

1a implementacin de Sun en 1987


SPARC version 7 architecture

SPARC v8 en 1990. Veremos esta versin


SPARC v9 en 1994: 64-bit

SPARC:
Caractersticas bsicas (i)

Diseado pensando en la optimizacin 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 bsicos 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:
Caractersticas bsicas (ii)

Modos de direccionamiento

registro + registro
registro + inmediato

La mayora 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 diseo de Berkeley


Permite reducir cantidad de load/stores
Compiladores de alta perfromance
Manejada por software supervisor (SO)
Permite bajar latencia al salvar el contexto
Gestin de las ventanas se hace con instrucciones especiales
(SAVE y RESTORE), no atada a llamadas a procedimiento
(CALL y JMPL)

SPARC:
Caractersticas bsicas (iii)

En cada instante un programa accede a 8 registros


globales ms 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 prxima


instruccin posterior a una bifurcacin.
Obs: se puede anular el efecto de la instruccin retardada
usando un bit especial de annul. En una instruccin de
conditional delayed transfer, la instruccin retardada
siempre se ejecuta (caso normal) cuando el annul bit es 0.
En cambio cuando el annul bit es 1 la instruccin retardada
no se ejecuta, excepto cuando se considera una bifurcacin
condicional que evala verdadero (o sea, el salto se hace).

SPARC:
Caractersticas bsicas (iv)

Traps vectorizadas

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


contiene las primeras 4 instruccions de cada manejador.
La direccin 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 caractersticas (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): aritmtica 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 instruccin debe ser emulada

Coprocesador (CP)

SPARC define un set de instrucciones adicional a la FPU,


dependiente de la implementacin 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 caractersticas (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 generacin de traps
til para manejar el overflow, por ejemplo

Instrucciones de sincronizacin para


multiprocesadores

Manejo de memoria
read-then-set-memory atmico (LDSTUB, LDSTUBA)
exchange-register-with-memory atmico (SWAP, SWAPA)

Modos de operacin

SPARC provee dos modos de operacin excluyentes

Supervisor Mode
Sistema, instrucciones privilegiadas

User mode
Aplicaciones

Proteccin 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
interrupcin

Modelo de Memoria

El modelo de memoria SPARC se aplica a sistemas


uniprocesador y tambin a sistemas multiprocesadores de
memoria compartida
Modelo estndar: Total Store Ordering (TSO)
Garantiza que stores,
FLUSHes, y loadstores atmicos 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


Organizacin y contenidos de las tablas de memoria principal
que dan soporte a la arquitectura

Caractersticas ofrecidas por la MMU

32-bit

virtual address
36-bit physical address
Fixed 4K-byte page size
3-level map
Soporte para grandes espacios
de mapeo lineal (4K, 256K, 16M,
4G bytes)
Soporte de mltiple contextos
Protecciones de nivel de pgina
Procesamiento de hardware miss

Memory Management Unit (ii)

Las funcionalidades vistas por el software:


Traslacin de direcciones virtuales a fsicas para cada proceso en
ejecucin. Mapeo en pginas de 4K-byte, lo cual evita la necesidad de
disponer de espacios de memoria contiguos para cada proceso
Proteccin de memoria. Un proceso no puede acceder el espacio de
memoria de otro proceso
Implementa la memoria virtual. Seguimiento de las pginas cargadas
en memoria mediante la tabla de pginas. La MMU sealiza los fallos
de pgina

MMU(iii)

Dir. virtual se compara con


tags almacenadas en el PDC
(TLB). Si hay un hit se
genera la direccin fsica
directamente
Si hay miss, la MMU carga
los Page Table Descriptors
hasta encontrar la Page
Table Entry buscada, o
produce un error (fallo de
pgina, se genera trap). Esta
entrada de la tabla se carga
en la MMU, se hace la
traduccin de direcciones y
contina la carga desde
memoria. Adems se
chequean los permisos, y si
hay violacin, se produce un
trap.

Cache

SPARC utiliza caches normalmente, aunque


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

Ventanas de Registros (i)


CWP+1
CWP+1

%31
%24

ENTRADA

%23
%16

CWP

%15
%8

SAVE y
TRAP

LOCALES
%31
SALIDA

%24

ENTRADA

%23
%16

LOCALES

%15
%8

CWP-1

%31
SALIDA

%24

ENTRADA

%23
RESTORE y
RETT

%16

LOCALES

%15
%8
%7
%0

GLOBALES

SALIDA

Ventanas de
Registros (ii)

SPARC
Register Set:
Vista de un
Procedimiento en
User-Mode

Subrutinas (i)

PC

nPC

Direccin de la prxima instruccin a ser ejecutada (si no


ocurre un trap)

En un salto retardado el PC apunta a la instruccin


retardada, mientras que el nPC apunta al destino del salto
PC es ledo por el CALL o JMPL.

Direccin de la instruccin en ejecucin

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)
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

SAVE decrementa el CWP, y almacena una suma en el registro


destino. La constante "C" indica el espacio a reservar en el stack;
el mnimo son 16 palabras para registros LOCAL e IN

Obs: parmetros fuente del SAVE son ledos 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)

Subrutinas (iii)

RET es una instruccin sinttica que corresponde a un JMPL. Esta


instruccin hace un salto a la direccin resultante de sumar 8 al
registro %i7
La direccin fuente (la del propio RET) se escribe a %g0 (o sea se
descarta)
La instruccin restore es tambin sinttica, y es la forma ms
simple del restore, sin hacer ninguna suma.
El llamante tiene el formato:
call <function>

; jmpl <address>, %o7

mov 0, %o0

CALL tambin es una instruccin sinttica (JMPL). En este caso se


salva la direccin de retorno en el registro %o7. El delay slot se
usa en este caso para setear el primer parmetro en 0. El valor
de retorno tambin se pasa normalmente en %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 ms de 8 registros, incluyendo %o7 (la direccin de
retorno)

En este caso la rutina se puede optimizar, ahorrando


tiempo y memoria

Solo puede usar registros voltiles: %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 sintticas

El stack (i)

Los registros in y out son usados fundamentalmente para


pasaje de parmetros
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
automticamente en el frame pointer %fp (%i6) del
procedimiento corriente cuando se ejecuta un SAVE
El llamado encuentra sus primeros 6 parmetros 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 compilacin se reservan al menos 16
palabras, arrancando en %sp, para salvar registros in y
local
Otras reservas que siempre se hacen:

Una palabra para parmetros ocultos


Seis palabras para que el llamado almacene parmetros
direccionables

El compilador puede reservar ms espacio bajo demanda,


por ejemplo si se tienen ms de seis parmetros 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 terico del curso.

Prxima clase

Seguimos con SPARC

También podría gustarte