Soluciones Examen Diciembre 02

Anuncio
ARQUITECTURA DE COMPUTADORES
SEGUNDO INGENIERIA INFORMATICA. DICIEMBRE 2003.
P1. (2,5 puntos)
P2. (3,0 puntos) Se dispone del siguiente código en lenguaje ensamblador perteneciente a un
determinado microcontrolador (procesador) que se está ejecutando en memoria principal:
TIPO (LECTURA/ESCRITURA) –
DIRECCIÓN (hexadecimal) –
TIPO (INSTRUCCIONES/DATOS) –
Nº BYTES ACCEDIDOS
ENSAMBLADOR
COD-INST OP-destino, OPfuente1, (OP-fuente2)
L 0x0000 CD00 I 02
L 0x0000 DA00 D 02
Bucle: LW R3, 0(R5)
lee de memoria en R3 el
contenido apuntado por
R5
(que
contiene
la
dirección 0xDA00)
L 0x0000 CD02 I 02
L 0x0000 DA04 D 02
LW R4, 4(R5)
L 0x0000 CD04 I 02
ADD R7, R7, R3
L 0x0000 CD06 I 02
ADD R8, R8, R4
L 0x0000 CD08 I 02
ADD R10, R7, R8
L 0x0000 CD0A I 02
E 0x0000 DA00 D 02
L 0x0000 CD0C I 02
SW
lee de memoria en R4 el
contenido apuntado por
R5+4 (dirección 0xDA04)
suma en R7 el contenido
de R7 más el de R3
suma en R8 el contenido
de R8 más el de R4
suma
en
R10
el
contenido de R7 más el
de R8
escribe en memoria el
contenido de R6
Compara si R10 es igual
a R11 salta a bucle
0(R5), R6
BEQ Bucle, R10, R11
SIGNIFICADO
Los registros generales (R1, R2, ... R16) almacenan palabras (datos) de 16 bits. Las instrucciones (LW,
ADD, BEQ y SW) también tienen todas una longitud de 2 bytes. Además el microcontrolador donde se
ejecuta este código tiene una memoria caché unificada de correspondencia directa. La política de
escritura es copy-back y write-allocate. Tiene una capacidad de 32 bytes y líneas de una sola palabra. Se
pide:
A) Indique qué ocurre al ejecutar el bucle. Calcule el porcentaje de fallos (MR). Explique o justifique su
respuesta.
B) El bucle itera 100 veces (N =100). Suponiendo que un acierto de caché supone 2 ms y en caso de fallo
se necesitan 20 ms para traer el bloque necesario de memoria principal, calcule el tiempo total de
ejecución de su programa.
C) Rediseñe la memoria caché de forma que el tiempo de cómputo sea el mínimo posible teniendo en
cuenta que el tamaño/capacidad de la memoria caché no se puede alterar. Justifique su elección.
D) Ahora se dispone de un sistema paginado con 1M byte de memoria principal y marcos físicos de
página de 1K byte. Calcule cuántos y cuáles marcos de páginas de memoria principal son usados por el
proceso/programa que implementa el bucle.
1
P3. (2,0 puntos) Se dispone de un teclado y una pantalla con las siguientes características:
El teclado y la pantalla tienen un bus de datos capaces de enviar o recibir un carácter. La señales “Data
Ready” sirven para comunicar desde o hacia el dispositivo que el dato (carácter) está listo para ser
transmitido. Las señales ACK sirven para comunicar que el dato ha sido correctamente transmitido o
recibido. En el caso de la pantalla, la señal Backspace sirve para retroceder y borrar el último carácter de
la pantalla y la señal space para introducir un espacio en blanco.
Se pide: Diseñar un subsistema de E/S con estos dos dispositivos externos basado en un microprocesador
i8086 de forma que se pueda hacer un programa de usuario que escribe en pantalla el carácter que se
recibe por teclado. Para ello:
- Diseñar el circuito que forman los dispositivos externos con el procesador.
- Programar las rutinas necesarias para realizar el proceso.
IMPORTANTE: utilizar notación hexadecimal (0x ...) a la hora de programar las rutinas. El carácter
backspace tiene el código ASCII 0x08 y carácter space el código 0x20. El resto de datos numéricos
relativos por ejemplo a direcciones de E/S o vectores de interrupciones los puede tomar según su
conveniencia.
2
RESPUESTAS EXAMEN AC CURSO 2002-2003. DICIEMBRE
P2. A) Se trabaja con bloques de 1 palabra = 21 bytes por lo que se necesita 1 bit en el
campo desplazamiento dentro de una dirección física interpretada por una memoria
caché. Se dice que la memoria caché ocupa 32 bytes = 25 bytes. La caché es de
correspondencia directa con 25 /21 líneas = 24 líneas por lo que tendrá un campo índice
que ocupe 4 bits.
Una dirección física de memoria principal ocupa 16 bits, ya que esa es el tamaño de la
palabra del procesador (palabras/datos de 16 bits), y los registros de la CPU no pueden
contener direcciones de más de 16 bits (ver ej. primera instrucción de lectura LW con
dirección DA00). Por lo tanto y si no se especifica ningún dato más del procesador, el
espacio de memoria principal direccionable por el procesador tiene un tamaño de 216
bytes = 64K bytes. Si a 16 bits le restamos los 4 bits del campo índice y el bit del
desplazamiento entonces los 11 bits restantes serán los bits de etiqueta.
Así pues el esquema de direcciones físicas de caché quedará de la siguiente forma:
Dirección física caché
11
4
1
Etiqueta
Índice
offset
A continuación se analizan las referencias de datos e instrucciones que se producen así
como los bloques de la memoria caché a los que se accede y sus fallos (F) o aciertos (A)
de caché:
Instrucciones
LW R3, 0(R5)
LW R4, 4(R5)
ADD R7, R7, R3
ADD R8, R8, R4
ADD R10, R7, R8
SW 0(R5), R6
BEQ R10, R11,
bucle
Ref. Instr.
Ref. Datos
1ª
Iteración
2ª
Iteración
CD00 à 11001101000
0000 0 à línea 0
CD02 à 11001101000
0001 0 à línea 1
CD04 à 11001101000
0010 0 à línea 2
CD06 à 11001101000
0011 0 à línea 3
CD08 à 11001101000
0100 0 à línea 4
CD0A à 11001101000
0101 0 à línea 5
CD0C à 11001101000
0110 0 à línea 6
DA00 à 11011010000
0000 0à línea 0
DA04 à 11011010000
0010 0à línea 2
-
F–F
F–F
F–F
A–F
F
F
-
F
A
-
F
A
DA00 à 11011010000
0000 0à línea 0
-
F–A
A–A
F
A
Hay que tener en cuenta que primero se ha de leer la instrucción y a continuación si es
preciso acceder a el dato de memoria referenciado por la instrucción y no al revés. Es
decir, en las instrucciones LW y SW se producen dos referencias a memoria: una
primera por instrucción y otra a continuación por datos. El resto de instrucciones
simplemente producen una referencia.
Así, como se puede ver en la tabla a partir de la 2ª iteración se producen dos fallos de
conflicto entre la 1ª instrucción y la 6ª y otros dos entre la 2ª y la 3ª debido a las
referencias a datos que obligan a expulsar intercambiar bloques en las líneas 0 y 2 de la
caché. En la primera iteración se producen además de estos fallos de conflicto toda una
serie de fallos forzosos. MR => 10 accesos a memoria de los cuales 4 son fallos y el
resto aciertos a partir de la 2ª iteración => 0,4 aproximadamente.
3
B) Con estos resultados ya se puede calcular el tiempo de ejecución. Simplemente hay
que contar el número de fallos de caché que se producen en 100 iteraciones:
Fcache = Fprim.iter. + 99*Fsegun.iter. = 9 + 99*3 = 306 fallos de caché
MR = 306 fallos / 10*100 referencias a memoria = 0,306 (aproximadamente 0,3)
Tejecución = N accesos * (Thit + MR * Tfallo_cache) = 1000 * ( 2ms + 0,405*20ms) = 10100 ms
C) Como ya se apuntó en la cuestión A el principal problema del bucle a partir de la 2ª
iteración son los fa llos de conflictos. De echo, en la línea 0 de la caché se han de ubicar
dos bloques de memoria principal y en la línea 2 otros dos bloques. Como en la caché
de correspondencia directa sólo se puede ubicar un único bloque, entonces surgen los
conflictos.
Por lo tanto para solucionar este problema basta con convertir la memoria caché de
correspondencia directa en otra asociativa por conjuntos de al menos dos vías. El
esquema de direcciones en ese caso sería el siguiente:
Dirección física caché
12
3
1
Etiqueta
Índice
offset
Ahora en vez de tener 16 conjuntos de un bloque se pasa a tener 8 conjuntos de dos
bloques cada uno. Con este nueva caché ya no se producen fallos de conflictos:
Instrucciones
Ref. Instr.
Ref. Datos
CD00 à 110011010000
DA00 à 110110100000
000 0 à conjunto 0(vía 0) 000 0à conjunto 0 (vía 1)
LW R4, 4(R5)
CD02 à 110011010000
DA04 à 110110100000
001 0 à conjunto 1(vía 0) 010 0à conjunto 2 (vía 0)
ADD R7, R7, R3
CD04 à 110011010000
010 0 à conjunto 2(vía 1)
ADD R8, R8, R4
CD06 à 110011010000
011 0 à conjunto 3(vía 0)
ADD R10, R7, R8 CD08 à 110011010000
100 0 à conjunto 4(vía 0)
SW 0(R5), R6
CD0A à 110011010000
DA00 à 110110100000
101 0 à conjunto 5(vía 0) 000 0à conjunto 0 (vía 1)
BEQ R10, R11,
CD0C à 110011010000
bucle
110 0 à conjunto 6(vía 0)
LW R3, 0(R5)
1ª
2ª
Iteración Iteración
F–F
A–A
F–F
A–A
F
A
F
A
F
A
F–A
A–A
F
A
El MR ahora es aproximadamente 0 ya que sólo se producen 9 fallos forzosos en la
primera iteración.
D) Primero se va a dimensionar el espacio de direcciones de la memoria virtual. Se
disponen de marcos de páginas de 1K bytes = 210 bytes à 10 bits para el campo
desplazamiento dentro de una dirección virtual. ¿cuántas páginas puede tener un
proceso? Si el procesador direccionara toda la memoria física de 1 MB = 220 bytes de
capacidad, entonces, 220 / 210 = 210 = 1024 marcos de página en memoria principal. Por
lo tanto una dirección virtual del proceso después de haber sido traducida seguirá el
siguiente esquema:
4
10
10
Dirección de marco/página física Desplazamiento en página
En el anterior caso se utiliza toda la memoria RAM (memoria principal o física)
disponible. Realmente el procesador de 16 bits en principio sólo puede direccionar 216
bytes = 64K-s o lo que es lo mismo 64 marcos de página. El resto de memoria no se
utiliza. Por lo tanto el esquema de direcciones sería el siguiente:
6
10
Dirección de marco/página física Desplazamiento en página
Ahora la cuestión radica en saber cuántas páginas ocupa el programa/proceso. Se tienen
por un lado referencias a instrucciones que van desde la dirección física CD00 hasta la
CD0C (7 instrucciones de 2 bytes). De este modo la traducción de las direcciones
virtuales a físicas después de acceder a la tabla de páginas hubiera quedado tal como
sigue:
6
10
1100 11 01 0000 0000
CD00 à
......
CD0C à
6
10
1100 11 01 0000 1100
Como se puede ver el código del programa (instrucciones) está contenido en una única
pagina. En concreto el número de marco o página física es la 1100 11(2 = 33(16 = 51(10
Para los datos se sigue un mismo razonamiento:
DA00 à
6
10
1101 10 10 0000 0000
DA04 à
6
10
1101 10 10 0000 0100
Como se puede ver en este caso se necesita cargar en memoria principal otra página
distinta a la anterior. En concreto el número marco o de página física es la 1101 10(2 =
36(16 =54(10
5
P3. Existen varias posibilidades de diseño del sistema. La primera decisión importante
es saber si se va a usar E/S programada o E/S por interrupciones ya que amb as
aproximaciones son posibles en este problema. En la solución propuesta se decide
utilizar E/S por interrupciones. Para ello se utiliza un PIC i8259 para gestionar las
interrupciones y un PPI i8255 para conectar tanto los dispositivos externos (teclado y
pantalla) al sistema. Así se forma un periférico compuesto por un controlador/módulo
de E-S (el 8255) y dos dispositivos externos que dependen de él. El esquema de
conexión y el software sería el siguiente:
/* Direcciones puestas a partir de unos espacios de direccionamiento de E/S elegidos al
azar */
#define PORTA 0x60
#define PORTB 0x61
#define PORTC 0x62
#define CONTROL 0x63
#define PORT_ 8259_0 0x20
#define PORT_ 8259_1 0x21ç
/* Las interrupciones se han conectado a IR1 e IR2. Se podrían haber conectado a otras
IR-s. Si se toma por ejemplo la base del vector de interrupciones como 0x08 entonces al
producirse la IR1 (teclado) el i8259 pondrá en el bus de datos el vector 0x08 + 0x01 =
0x09 y al producirse la IR2 (pantalla) pondrá en el bus de datos el vector de
interrupciones 0x08 + 0x02 = 0x0A */
#define BASE_INT
0x08
#define VECTOR_INT_TECLADO 0x09
#define VECTOR_INT_PANTALLA 0x0A
#define BACKSPACE 0x08
#define SPACE
0x20
6
/****************************************/
/*** RUTINA DE INICIALIZACION *********/
/****************************************/
void INICIALIZAR (void) {
disable ();
/* Configuración del 8259: inicialización + base vector interrupciones */
/* ICW1: activación por flancos, modo simple, no ICW4 */
outportb (PORT_ 8259_0, 0x10); // 0b 0001 0000
/* ICW2 : base interrupciones. */
outportb (PORT_ 8259_1, BASE _INT);
/* Configuración del 8255 : puerto A modo 1 + entrada, puerto B modo 1 +
salida */
outportb (CONTROL, 0xB4); // 0b 1011 0100
/* Activar interrupciones en puerto A */
outportb (CONTROL, 0x09); // 0b 0000 1001
/* Activar interrupciones en puerto B */
outportb (CONTROL, 0x05); // 0b 0000 0101
/* Modificación del vector de interrupciones */
setvect (VECTOR_INT_TECLADO, RUTINA_ATENCION_TECLADO);
setvect (VECTOR_INT_PANTALLA, RUTINA_ATENCION_PANTALLA);
enable ();
}
/*****************************************************/
/*** RUTINAS DE ATENCIÓN A LAS INTERRUPCIONES ***/
/****************************************************/
void interrupt RUTINA_ATENCION_TECLADO (void) {
/* Se ha recibido un carácter por teclado y hay que enviarlo a la pantalla */
char c = inportb (PORTA);
/* Se comprueba que se puede escribir en la pantalla para lo cual la señal ACK
tiene que estar en alta ya que en el modo 1 del puerto B el bit C2 corresponde a
la señal ACK# (ACK negada) */
if ((inportb (PORTC) & 0x04) != 0) {
if (c == BACKSPACE) {
/* Si el carácter es de retroceso entonces hay que activar la señal
backspace del dispositivo PANTALLA a través del bit C6*/
outportb (PORTC, inportb(PORTC) | 0x40); // 0b 0100 0000
/* A continuación se desactiva otra vez la señal. Es posible que
fuese necesario que la señal durase un cierto periodo de tiempo.
Como no se especifica nada en el enunciado, se supone que una
duración de al menos un ciclo de reloj es suficiente. */
outportb (PORTC, inportb(PORTC) & 0xBF); // 0b 1011 1111
else if (c == SPACE) {
/* Si el carácter es de espacio (blanco) entonces hay que activar
la señal space del dispositivo PANTALLA a través del bit C7 */
outportb (PORTC, inportb(PORTC) | 0x80); // 0b 1000 0000
/* A continuación se desactiva otra vez la señal */
outportb (PORTC, inportb(PORTC) & 0x7F); // 0b 0111 1111
} else
/* Otro carácter. Se manda directamente a la PANTALLA */
7
outportb (PORTB, c);
}
}
void interrupt RUTINA_ATENCION_PANTALLA (void) {
/* En principio no necesita hacer nada*/
}
NOTA: sobre esta solución y en el caso de la rutina de atención a la interrupción
llamada RUTINA_ATENCION_TECLADO, se podía haber supuesto que los caracteres
ASCII de espacio en blanco y retroceso son directamente procesables por la pantalla. En
ese caso por lo tanto no habría que activar explícitamente las señales Space y
Backspace. Esto suele ser así en muchos displays comerciales.
Como en principio este display proporciona estas dos señales, se supone que es porque
no reconoce estos caracteres como caracteres de control a través de su bus de datos S0S7.
8
Descargar