Respuestas Test Ec Explicadas

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 21

APUNTES-PREPARACION-TESTS-EC.

pdf

jsgomez

Estructura de Computadores

2º Grado en Ingeniería Informática

Escuela Técnica Superior de Ingenierías Informática y de


Telecomunicación
Universidad de Granada

Reservados todos los derechos.


No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
APUNTES EC
Este documento es una mezcla de apuntes sacados de las preguntas del tipo test, de ejercicios
típicos con sus procedimientos para sacarlos y de patrones que se repiten en diferentes
preguntas del mismo tema para memorizar las preguntas más fácilmente.

TEMA 0: INTRODUCCIÓN
Son solo 5 preguntas que son fáciles de memorizar

TEMA 1: INTRODUCCIÓN
Arquitectura von Neumann:

- El programa se encuentra residente en memoria.


- Sigue un modelo de programa Almacenado.

Bus:

Está compuesto por:

- Bus de control/estado: transporta señales de estado


- Bus de dirección: es unidireccional y determina el espacio direccionable de
memoria del computador.
- Bus de datos: es bidireccional

Puede ser de varios tipos: paralelo, E/S y de

- Sistema: conecta CPU-M, ya sea un sistema con bus único o con múltiples buses

Sistema con un único bus:

- Sólo un dispositivo puede escribir en un instante dado en el bus.


- Se utilizan las mismas líneas de control para conectar todos los dispositivos.
- El procesador y los periféricos pueden funcionar a diferentes velocidades si el
funcionamiento del bus es asíncrono
- Sólo una unidad funcional puede tener el control del bus en cada momento

MAR y MBR

MAR: indicamos la dirección donde está la instrucción

MBR: recogemos la instrucción

ISA (Instruction Set Architecture)

- Arquitectura del Repertorio


- Registros, Instrucciones, Modos de direccionamiento

Funciones:

- Descripción del espacio de direccionamiento de la memoria y de la E/S


- Descripción de los registros de datos, registros de estado y control
- Descripción de los tipos de datos sobre los que opera el lenguaje máquina

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
RISC

- Su arquitectura típica es del tipo registro-registro


- Simplifican la decodificación
- Suele usarse segmentación
- Para acelerar el computador RISC se emplean técnicas de pipelining.
- La decodificación de las instrucciones debe ser simple: un computador RISC

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
debería emplear un único formato de instrucción
- Un computador RISC no debe emplear microprogramación.
- Se usa un porcentaje elevado de las instrucciones del repertorio

CISC

- Hay más instrucciones que en las RISC


- El objetivo de un diseño CISC es disminuir el número de instrucciones
- “Más próximos a lenguajes de alto nivel”

Modos de direccionamiento:

- Inmediato: el dato está codificado dentro de la propia instrucción, en uno de los


campos en los que se divide el formato de instrucción (ej: $0, $variable)
- Registro: el dato se encuentra en un registro de propósito general (ej: %eax, %ebx)
- Indirecto: el dato está contenido en una posición de memoria que es apuntada por
un registro de propósito general.
- Instrucción: es un registro transparente al usuario, ya que éste no puede utilizarlo
en las instrucciones máquina.
- Memoria: la instrucción lleva índices de registros y/o desplazamiento (ej:
disp(%base, %index, scale))
- Implícito: no se indica la ubicación del operando
- Directo a memoria:
o Utiliza un desplazamiento.
o La instrucción contiene la dirección de memoria en la que se encuentra el
objeto
o El rango de posiciones direccionables queda limitado por el tamaño del
campo de direccionamiento
o El objeto está en una posición de la memoria

Perspectiva histórica

- Primera generación(45-55): tubos de vacío


o von Neumann: concepto de programa almacenado
o M: líneas retardo mercurio, núcleos magn.
o E/S: lect/perf. Tarjetas, cintas magnéticas
- Segunda generación(55-65): transistores
o E/S: procesadores E/S (cintas) en paralelo con CPU
o Software: compilador FORTRAN
- Tercera generación(65-75): circuito integrado
o Velocidad CPU/M subió
o Arquitectura: segmentación de cauce, M cache
o Software: SO multiusuario, memoria virtual
o Se alcanzan tiempos de conmutación del orden de nanosegundos

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

¿Y la de estudiar te la sabes? No se trata de estudiar más, se trata de estudiar mejor ¡Clic aquí!
Estructura de Computadores

Banco de apuntes de la
o Aparece la microprogramación
- Cuarta generación (75-…): VLSI
o Procesador completo en 1 chip
o Arquitectura: mejoras segmentación cauce, cache, M virtual
o Hardware: portátiles, PCs, WS, redes

Ejercicio Típico 1:

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
En qué generación, dentro de la historia de los computadores digitales, aparece…
- Segunda generación:
o Transistores
- Tercera generación:
o La memoria virtual
o La memoria cache
o La microprogramación
o La segmentación de cauce
o Se alcanzan tiempo de conmutación de nanosegundos

La mayoría de respuestas a estas preguntas son de la tercera generación, si se duda en el


examen lo mejor es poner la tercera.

Ejercicio Típico 2:

Si queremos almacenar la palabra de 16 bits 0x9660 en una memoria de bytes según


"little-endian", quedará almacenada a partir de la posición 0x1000 como:
Al ser little-endian, se coloca primero la segunda mitad(0x60) de la palabra pasada, y
en la siguiente posición, la primera mitad(0x96). Sol:

- M[0x1000] = 0x60 y M[0x1001] = 0x96


Ejercicio Típico 3:

Un computador que utilice el sistema big-endian, almacena el número 0x2143 a partir


de la dirección 0 como:
Es el caso contrario al ejercicio anterior, primero se coloca la primera mitad, luego la
segunda:
- M[0] = 0x21 y M[1] = 0x43
Ejercicio Típico 4:

¿Cuál es el contenido de la pila al terminar de ejecutarse la siguiente secuencia de


instrucciones de una arquitectura de pila?
Pueden aparecer varías instrucciones:
- push#4 (introduce el valor 4 en la cima de la pila)
- add (suma los dos valores superiores en la pila),
- sub (resta los dos valores superiores)
- pop a (borra el valor de la cima)
- mul (multiplica los dos valores superiores en la pila)
El resto es más fácil memorizarlas

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

¿Y la de estudiar te la sabes? No se trata de estudiar más, se trata de estudiar mejor ¡Clic aquí!
PRÁCTICA 1: ENTORNO DE DESARROLLO GNU
Programa ensamblador

- La calidad de un programa ensamblador afectará menos al tiempo de ejecución de


los programas generados por él que la calidad de un compilador.
- Las etiquetas permiten que el programador especifique el destino de un salto de

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
forma que éste no tenga que modificarse manualmente cuando el programa varíe
de tamaño.
- El lenguaje ensamblador elimina la posibilidad de errores en la generación de la
representación en lenguaje máquina de cada instrucción.

Sufijos

- q (movq): indica que se trabaja con operandos de 64 bits (quad word)


- l (movl): indica que se trabaja con operandos de 32 bits (long word)

Lenguaje máquina

- Es un conjunto de instrucciones en formato binario que entiende un determinado


procesador
- Las instrucciones se almacenan y tratan como cadenas de unos y ceros
- Es difícil de codificar manualmente

Ejercicio Típico 1:

¿Cuál de los siguientes fragmentos es correcto para comenzar un programa en


ensamblador que conste de un solo archivo .s?
Siempre es la opción que en la segunda línea tiene .global_start

El resto es más fácil memorizarlas

TEMA 2: NIVEL DE LENGUAJE MÁQUINA


Este tema es el más complicado, si vais justos de tiempo pasar al siguiente

Complemento a dos: en una suma en complementos a dos se produce desbordamiento


cuando sumamos dos positivos y el resultado es negativo o bien sumamos dos negativos y el
resultado es positivo.

Lenguaje C

- En una matriz declarada como “int a[n][n];” los n elementos de una fila se
almacenan en memoria de manera contigua.

x86-64

Modo de direccionamiento:

- Registro

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

¿Y la de estudiar te la sabes? No se trata de estudiar más, se trata de estudiar mejor ¡Clic aquí!
- Inmediato
- Memoria

Características:

- Tiene 16 registros RPG de 64 bits


- Proporciona un espacio de memoria virtual mayor que x86
- Las disciplinas de pila para x86 y x86-64 son diferentes

Procesadores ordenados temporalmente:

- Intel 8086:
o Incluía instrucciones de multiplicación
- 486
- Pentium MMX
- Pentium III
o No es de 64 bits
- Pentium 4
o El Pentium 4F fue el primer proceso de Intel de 64 bits
- Core 2

SystemV AMD64

En la convención de llamada SystemV AMD64 seguida por gcc Linux/x86-64…

- R12 es un registro salva-invocado, por eso en cualquier función hay que salvarlo
antes de modificarlo
- R10 es un registro salva-invocante, por eso si es necesario hay que salvarlo antes
de llamar a la función.

Instrucciones “salto …”

- Una instrucción “salto si menor”, para números sin signo, tiene que comprobar el
valor del bit de acarreo
- Una instrucción de “salto si igual” tiene que comprobar el valor del bit de cero
- El rasgo distintivo de la traducción “salta-en-medio” que gcc hace de un bucle
while de lenguaje C a lenguaje ensamblador es el salto condicional hacia adelante

Instrucciones

Que provocan un salto:

- JB Y JNAE si CF == 1
- JBE/JNA si CF == 1 || ZF == 1
- JNGE/JL si SF != OF

not: realiza el complemento a uno (cambiar unos por ceros y ceros por unos)

test:

- Realiza una operación and lógico


- Modifica sólo los flags lógicos (ZF, SF)

cmp:

- Realiza una resta

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
- Modifica los flags aritmético-lógicos (ZF,SF,CF,OF)

Ejercicio Típico 1:

Cuando en el enunciado nos preguntan por el valor de popcount() de un número, se


refiere a la cantidad de 1 que tiene dicho número al pasarlo a binario, por ejemplo 29
serían 4, pues 29 en binario 1 1 1 0 1, luego tiene 4 unos.

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Otra pregunta que aparece es popcount(2) == popcount(64), pues ambos números solo tienen
un 1 al pasarlos a binario.

PRÁCTICA 2: PROGRAMACIÓN ENSAMBLADOR X86-64 LINUX


gcc

Compila un programa escrito en C en el entorno GNU/LINUX

Variantes:

- -O: compila con optimización suave


- -O0: compila sin optimización
- -O1: compila con optimización
- -c: compila de código fuente C (.c) a código objeto (.o) sin llamar al enlazador
- -S: compila de código fuente C (.c) a código ensamblador (.s)

Instrucciones erróneas

- movzlq %edx, %rax


- movb $0xFF, (%dl)
- pushb $0xFF
- lea (%rbp, %rsp, 4), %r8

Ejercicio Típico 1:

En la práctica “media” se pide como ejercicio previo sumar una lista de N enteros sin
signo en doble precisión […]. Para aplicar esta técnica se sugiere utilizar la(s)
instrucción(es):
Si en los corchetes aparece:

- Extendiendo con ceros: ADC $0


- Acumulando acarreos: JNC y INC
- Extendiendo el signo: CLTD, ADD y ADC

Ejercicio Típico 2:

En la práctica “media” se pide como ejercicio previo sumar una lista de N enteros […]
signo produciendo un resultado. quad(doble precisión). El programa esqueleto ofrecido

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

¿Y la de estudiar te la sabes? No se trata de estudiar más, se trata de estudiar mejor ¡Clic aquí!
(suma.s) no es válido. Se podría comprobar imprimiendo el resultado […] signo, y
usando como contraejemplo las siguientes listas:
- CON y CON: 0x4000 0000 y 0x4000 0000
- CON y SIN: ninguna de las dos
- SIN y SIN: 0x8000 0000 y 0xC000 0000

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Ejercicio Típico 3

En la práctica “media” se pide sumar una lista de 16 enteros SIN signo de 32 bits
evitando acarreo. ¿Cuál es el […] valor que repetido en toda la lista […] en 32 bits?

- Mayor valor que no causaría acarreo: 0x0FFF FFF


- Menor valor que sí causaría acarreo: 0x1000 0000

Ejercicio Típico 4:
Los switches […] para trabajar en 32bit/64bit corresponden a la herramienta...
- --32 y –64: as
- -m elf_i386 y -m elf-x86_64: ld

TEMA 3: UNIDAD DE CONTROL


Microprogramación:

Horizontal: ninguna o escasa codificación

Control microprogramado: se usa en CISC para facilitar el diseño de la UC tan compleja.

Registro de indicadores de estado

Indicador Z: se pone a 1 cuando el resultado de una operación es 0

Indicador de signo/N: se pone a 1 cuando el resultado es negativo

Unidad de control

Se encarga de:

- Secuenciamiento de las instrucciones máquina


- Decodificación de las instrucciones del programa
- Generalización de las señales de control que provocan la ejecución de cada
instrucción
- Codificarlas con 4 bits, y sobraría un código que quedaría sin uso

Ejercicio Típico 1:

Un procesador con una unidad de control microprogramada tiene una memoria de


control de 300 palabras de 100 bits, de las que 200 son diferentes. Si se rediseñara

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

¿Y la de estudiar te la sabes? No se trata de estudiar más, se trata de estudiar mejor ¡Clic aquí!
como unidad de control nanoprogramada, ¿qué tamaño ocuparía la nanomemoria que
contiene las microinstrucciones completas sin repeticiones?
Se multiplica el número de bits de las palabras (100) * el número de palabras diferentes (200)

Ejercicio Típico 2:

En una unidad de control microprogramada se tiene un campo de 14 señales de

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
control de las cuales […] en un ciclo de reloj, nunca tres o más en el mismo ciclo de
reloj, y cuando se activan dos una es del grupo 1-7 y otra es del grupo 8-14, nunca las
dos del mismo grupo. Sería entonces posible...

- se activarían dos o menos: codificarlas con 6 bits (2 códigos de 3 bits)


- sólo se activaría una o ninguna: Sería entonces posible codificarlas con 4 bits, y
sobraría un código que quedaría sin uso

Ejercicio Típico 3:

Sea un formato de microinstrucción que incluye dos campos independientes de 10 bits


cada uno. Si se rediseña de modo que se solapen los dos campos, ¿cuántos bits se
ahorran en cada microinstrucción?
El resultado = número de campos independientes – 1, en este caso 9

PRÁCTICA 3: PROGRAMACIÓN MIXTA C-ASM


Funciones

- Gettimeofday(): se usa para comparar las duraciones de las distintas soluciones del
programa

80x86

Los parámetros a las subrutinas se pueden pasar:

- A través de variables globales


- A través de los registros
- A través de la pila

Si no se entendió en el día de la práctica, hay pocas preguntas que se puedan sacar, ya que casi
todas son de que pasaría si se modificase el código de la práctica. Las que se pueden sacar son:

En popcount8, la variable: int SSE_LUTb[] = {0x02010100, 0x03020201, 0x03020201,


0x04030302}; se usa: como tabla de consulta para reemplazar secuencias de 4 bits por sus
correspondientes popcount de 4 bits

¿Cuál es el popcount (peso Hamming, nº de bits activados) de una lista de N números


inicializada con los valores 0..N-1? si N es potencia de 2, (log_2(N)*N)/2

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

¿Y la de estudiar te la sabes? No se trata de estudiar más, se trata de estudiar mejor ¡Clic aquí!
Si val es una variable de tipo unsigned long, entonces la sentencia: val += (val >> 32):
su traducción incluye una instrucción shr seguida de una suma

Suponga la siguiente sentencia asm en un programa:


asm(“ add (%[a],%[i],4),%r”
:[r] “+r” (result)
:[i] “r” (i),
[a] “r” (array) );
¿Cuál de las siguientes afirmaciones es correcta?
i es un registro de entrada

¿Cuál de las siguientes afirmaciones es cierta respecto al lenguaje C?


En lenguaje C, al llamar a una subrutina o función se introducen los parámetros en la pila y
después se realiza una llamada a la subrutina
¿Cuál de las siguientes líneas declara un puntero a función en C?
int (*func)();

En la práctica “popcount”, para cronometrar sistemáticamente las diversas versiones


necesitamos una función crono() a la que se le pueda pasar como argumento cuál
versión queremos cronometrar. En lenguaje C esto se puede hacer con punteros a
funciones. Sabiendo que todas las versiones devuelven un valor entero, el prototipo de
la función crono() debería ser:
void crono( int (* func)(), char* msg);

¿En qué registro se pasa el primer argumento a una función en Linux gcc x86-64? rdi

Ejercicio Típico 1:

¿Cuál es el popcount (peso Hamming, nº de bits activados) del número 19?


Hay que comprobar la cantidad de 1 que tiene el numero al pasarlo a binario -> 19 = 1 0 1 1 ->
3 numeros = 3

TEMA 4: SEGMENTACIÓN
Procesamiento segmentado y superescalar

- Implícitamente, se presupone que un procesador superescalar emitirá más de una


instrucción por ciclo
- Idealmente, con el segmentado se intenta ejecutar una instrucción por ciclo, y con
el superescalar más de una por ciclo (al combinarlo con segmentado)
- Por definición, un procesador superescalar debe tener más de una unidad
funcional.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Segmentación de cauce

- Permite ejecutar varias instrucciones concurrentemente


- Acelera la ejecución de un programa
- Provoca riesgos debido a datos
- Cuanto mayor sea la relación entre el tiempo de ejecución de una instrucción sin
segmentar y el tiempo de una etapa en el procesador segmentado, mayor será la

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
ganancia máxima que se puede obtener.
- Existen limitaciones al rendimiento provocadas por las instrucciones de salto y por
las dependencias de datos.

Tipos de saltos

- “Delayed Branch/salto retardado”: ejecuta las instrucciones siguientes siempre, de


manera que instrucciones anteriores al salto podrían colocarse tras la propia
instrucción de salto.
o Además, el compilador puede reorganizar el código para rellenar los
huecos de retardo con instrucciones útiles.
- “Annulling Branch/salto anulante”: ejecuta las instrucciones siguientes sólo si el
salto se produce (las ignora si NO se produce), de manera que instrucciones en el
destino del salto podrían adelantarse tras la propia instrucción de salto
- Retardados y anulantes: no sería apropiado intentar reordenar instrucciones
anteriores al condicional anulante para ponerlas después (en memoria)

Tipos de riesgo

- Riesgo de datos: consiste en que una instrucción necesita un dato calculado por
otra anterior.
o Técnica “Register forwarding”: se usa para limitar el impacto de los riesgos
de datos
- Riesgo estructural: ocurre cuando dos o más instrucciones necesitan un recurso
hardware en el mismo ciclo.

Ejercicio Típico 1

Un sistema no segmentado tarda 200 ns en procesar una instrucción. Las


instrucciones pueden ser procesadas en un cauce segmentado de 20 etapas con un
ciclo de reloj de 12 ns. Cuando se procesan muchas instrucciones, la máxima
ganancia de velocidad que podría obtenerse se acerca a:
Se divide los ns en procesar una instrucción (200) entre el ciclo de reloj (12) = 16.67

Ejercicio Típico 2:

Si un procesador no segmentado necesita 5 ns para leer una instrucción de memoria,


2 ns para decodificar la instrucción, 3 ns para leer del banco de registros, 3 ns para
realizar el cálculo requerido por la instrucción, y 2 ns para escribir el resultado en el
banco de registros, ¿cuál es la frecuencia de reloj máxima del procesador?
Se suman todos los ns y se divide 1/ns_totales = 66.67

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

¿Y la de estudiar te la sabes? No se trata de estudiar más, se trata de estudiar mejor ¡Clic aquí!
Ejercicio Típico 3

En la secuencia de instrucciones siguiente, siendo el primer registro el destino,


¿cuántos riesgos se dan?

sub r4,r1,r3
or r8,r6,r4

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Sub guarda en r4 la resta de los valores r1 y r3, teniendo en cuenta que r4 se usa en la
siguiente línea, se da un caso en el que una instrucción necesita un dato calculado por otra
(riesgo de datos) -> Sol = un riesgo por dependencia de datos

PRÁCTICA 4: DEPURADORES, DESENSAMBLADORES Y EDITORES


HEXADECIMAL
En las práctica “bomba digital” se usa:

- scanf(): para leer el PIN (clave numérica)


- gettimeofday(): para cronometrar lo que tarda el usuario en introducir la
contraseña/PIN, y si tarda mucho, lanzar un error
- eclipse/gdb/ddd: para saltarse las explosiones

Ejercicio Típico 1:

Respecto a las bombas estudiadas en la práctica "bomba digital", ¿en cuál de los
siguientes tipos de bomba sería más difícil descubrir la contraseña? Se distingue entre
[enteros/string] definidos en el código fuente de la bomba, y [enteros/string] solicitados
al usuario mediante scanf()/por teclado.
Esta pregunta aparece mucho y se responde en función de lo que aparezca en los corchetes, si
aparece:

- String
o Si en el enunciado aparece la palabra clave “Invertir” : 1 string del usuario
se cifra, y se compara con el string del fuente.
o Si el enunciado acaba con “Por “cifrar” podemos entender la cifra del
César, por ejemplo.”: el string del usuario se cifra y se compara con 1 string
del fuente.
o Si el enunciado acaba como el anterior más (sumar o restar una constante
fija…): 1 string del fuente se cifra y se compara con el string del usuario
- Enteros
o Si el enunciado dice “descubrir la(s) contraseña(s)”: 2 enteros del usuario
se procesan, se suman los resultados, y se compara con el entero del
fuente
o Si el enunciado dice “descubrir la contraseña”: 1 entero del usuario se
procesa, y se compara con el entero del fuente

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

¿Y la de estudiar te la sabes? No se trata de estudiar más, se trata de estudiar mejor ¡Clic aquí!
En esta práctica si no se fue a clase y se entendió es muy complicada, pero se pueden
memorizar muchos ejercicios del tipo “en el ejercicio 1/2/3 de la práctica se usa una función x
para”, también hay algunos ejercicios de bombas complejos que sin entenderlos se pueden
memorizar las soluciones, pues son números fáciles (uno de los ejercicios tiene como solución
42, otro 0x400600, otro tiene 4 opciones en las que aparece la palabra “abracadabra” mal
escrita en 3 de ellos, la solución buena es en la que aparece bien escrita), por lo que se pueden

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
memorizar fácilmente.

TEMA 5: ENTRADA/SALIDA Y BUSES


Controlador de E/S: circuito electrónico que puede guardar temporalmente datos enviados
desde el procesador al periférico o viceversa.

Interrupción

- Es una bifurcación normalmente externa al programa en ejecución.


- Su objetivo es reclamar la atención del procesador.
- Solicita que se ejecute un programa específico para tratarla.

Técnicas de transferencia en operaciones de E/S

Pueden ser controladas por programa o por hardware

E/S Programada:

- Está controlada por programa


- Es una técnica que se usa para llevar a cabo la transferencia de datos entre el
computador y los dispositivos de E/S externos.
- Puede hacerse con consulta de estado o sin consulta de estado

E/S mediante interrupciones

- Está controlada por programa

E/S mediante DMA

- Está controlada por hardware


- Hace falta emplear un controlador de DMA
- Su canal está formado por:
o Registro de dirección
o Registro contador
o Registro de órdenes
- Robo de ciclo: es posible que la ejecución de una instrucción máquina sea
temporalmente detenida
- Suele ser programado con:
o Tipo de operación
o Tamaño de bloque a transferir
o Dirección inicial a memoria

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

¿Y la de estudiar te la sabes? No se trata de estudiar más, se trata de estudiar mejor ¡Clic aquí!
E/S mapeada en memoria:

- Determinadas zonas del espacio de direccionamiento del procesador se asignan


por convenio a controladores de E/S.
- Usa direcciones de memoria para acceder a puertos de E/S
- El diseño de la CPU es más sencillo que en la E/S aislada.

E/S independiente:

- Las instrucciones de acceso a memoria suelen ser más largas que las de E/S
- Ventaja frente a E/S mapeada: los programas pueden ser más rápidos, y las
instrucciones de E/S son fácilmente reconocibles.

Tareas de un circuito de interfaz o controlador de periféricos sencillos

- Recibir señales de control desde el procesador


- Adaptar el formato de las señales
- Ajustar la temporización entre el procesador y los dispositivos de E/S

Controlador de acceso directo a memoria

- 8237
o Dispone de 4 canales de E/S independientes
- 8255
o Puede manejar 3 puertos de 8 bits
o El modo de funcionamiento 2 permite utilizar un bus bidireccional
- 8259
o 3 controladores pueden manejar 6(master) + 16(2 slaves) = 22 niveles de
interrupción

La técnica de sondeo, escrutinio o “polling”:

Permite establecer un mecanismo de asignación de prioridades a los distintos dispositivos.


Además, puede usarse para:

- Identificar el origen de una interrupción.


- Consultar si el dispositivo está dispuesto para entregar o recibir datos.
- Establecer un mecanismo de software de asignación de prioridades a los
dispositivos.

Ejercicio Típico 1:
¿Cuántos controladores de interrupciones 8259 hacen falta como mínimo para
manejar 25 líneas de interrupción?
El primero maneja 6(master) y los siguientes 8 cada uno. 6 + 8 +8 = 22 que se queda corto, por
lo que 6 + 8 + 8 + 8 = 30, por lo que 4 controladores

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
PRÁCTICA 5: E/S CON ARDUINO
Son 14 preguntas a memorizar.

Funciones/Instrucciones:

- setup(): es llamada cuando se conecta la alimentación a la placa, se pulsa el botón

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
de reset, o se sube desde el entorno de desarrollo
- SBI: realiza una operación de bits
- CBI: realiza una operación de bits
- SBIW: realiza una resta de un valor inmediato
- Arduino map(sensorValue, sensorLow, sensorHigh, 50, 4000): si sensorValue vale
la mitad entre sensorLow y sensorHigh, devuelve 2025.
- digitalWrite(LED_BUILTIN, HIGH): enciende el led integrado en la placa Elegoo
Mega2560

El resto es más fácil memorizarlas

TEMA 6: MEMORIA
Jerarquía de Memoria

- Un computador puede tener una pequeña cantidad de memoria rápida además de


una gran cantidad de memoria más lenta.
- Una memoria principal constituida por la tecnología más rápida es órdenes de
magnitud más cara que la DRAM
- Acceder a los discos es órdenes de magnitud más lento que acceder a la RAM.

Memorias DRAM

- Las memorias DRAM son en general más lentas que las SRAM
- La operación de lectura de una celda DRAM es destructiva
- Las memorias DRAM presentan generalmente una capacidad de almacenamiento
mayor que las SRAM.
- Es más densa que la memoria SRAM
- Cada celda está compuesta por un transistor y un condensador y almacena un bit
de información.
- Los bits de memoria se organizan dentro del circuito integrado en forma de matriz
de celdas de bit, en la que se pueden diferenciar filas y columnas.
- Un transistor en cada celda permite o no circular la corriente eléctrica a través de
él. Cuando el transistor no deja pasar la corriente, la información queda
almacenada durante un tiempo en el condensador. Cuando el transistor deja pasar
corriente, el condensador se carga o se descarga.

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

¿Y la de estudiar te la sabes? No se trata de estudiar más, se trata de estudiar mejor ¡Clic aquí!
Memorias RAM

Estáticas:

- Los datos almacenados se mantienen por un tiempo indefinido


- Son más veloces que las memorias RAM dinámicas
- Las operaciones de lectura no son destructivas

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Dinámicas:

- Las operaciones de escritura sirven como operaciones de refresco

Memorias SRAM

- Coincide el tiempo de acceso y el tiempo de ciclo

Ejercicio típico 1:

En un computador con una jerarquía de memoria de dos niveles se observa


experimentalmente que el tiempo medio de acceso a la memoria es de 300 ns cuando
en realidad el tiempo medio de acceso al primer nivel es de 6 ns. Sabiendo que el
tiempo de acceso al segundo nivel es de 3 microsegundos, ¿cuál sería
aproximadamente el porcentaje de fallos en los accesos al primer nivel?
Para calcular esto creamos una variable F, esta variable es igual al tiempo de acceso al segundo
nivel (3) / tiempo medio de acceso a la memoria (300) – el tiempo de acceso al primer nivel (6):

Los cálculos no salen exactos, pero como las soluciones que nos dan son valores en décimas
(10%, 20%, 30%...) nos quedamos con el valor en porcentaje:

F = 3 / (300-6) = más o menos a 3/300 = 1/100 = 0.01, vamos multiplicando por 10 y acaba
saliendo 10% = solución

Otro ejemplo:

F = 3 (900-9) = más o menos 3/900 = 1/300 = 0.003, vamos multiplicando por 10 y acaba
saliendo 30% = solución

Ejercicio típico 2:

¿Cuál es el tamaño de la marca de cache en un microprocesador con 32 KB de


memoria cache asociativa por conjuntos con 16 palabras de 32 bits por bloque y 8
bloques por conjunto, si el microprocesador es capaz de direccionar 1 MB de memoria
principal (memoria de bytes)?
Para calcularlo se multiplica el número de palabras (16) por los bits de cada palabra (32) y el
número de bloques por conjunto (8) y después se divide entre el tamaño de la memoria
principal:

1 MB = 2^20 / (16 * 32 * 8) = 2^20 / (2^4 * 2^5 * 2^3) = 2^20 / 2^12 = 2^8 = 8 bits

Ejercicio típico 3:

¿Cuántas líneas de dirección (patillas) son necesarias para direccionar un chip de


memoria DRAM de 16M x 16?
16M = 2^24 -> 24/2 = 12 patillas

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

¿Y la de estudiar te la sabes? No se trata de estudiar más, se trata de estudiar mejor ¡Clic aquí!
Ejercicio típico 4:

Una memoria estática tiene un bus de datos de 64 bits y su bus de direcciones es de


30 bits, ¿cuál es su capacidad?
Pasamos los bits del bus de datos a bytes = 64/8 = 8. La memoria tiene una capacidad de
2^30(bus de direcciones) * 8 = 8GB o 2^33

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Ejercicio típico 5:

Una SRAM de 256Kx4bit (1Mbit) puede venir organizada en 1024 filas, dedicando por
tanto al decodificador de columnas...
Se divide 256K/1024 (filas) = 256 = 2^8 = 8 bits

Una SRAM de 32Kx8bit (256Kbit) puede venir organizada en 512 filas, dedicando por
tanto al decodificador de columnas...
32K/512 = 32 * 1024 / 512 = 2^5 * 2^10 / 2^9 = 2^6 = 6 bits

Ejercicio típico 6:

Si el tiempo de acceso a la memoria cache es de 2 ns y el tiempo necesario para tratar


un fallo de cache es de 80 ns, ¿cuál es la tasa de aciertos necesaria para que el
tiempo medio de acceso al sistema de memoria sea de 10 ns?
Aplicamos la fórmula:

Tiempo medio de acceso = Tiempo medio de acceso a la caché + (1 - Probabilidad de acierto) *


Tiempo medio de acceso a la memoria principal

Desarrollamos tal que:


10 ns = 2 ns +(1 - Probabilidad de acierto) * 80ns
8 ns = (1 - Probabilidad de acierto)* 80ns
1 – Probabilidad de acierto = 8ns / 80ns
Probabilidad de acierto = 1 – (8 ns / 80ns)
Probabilidad de acierto = 0,9 -> 90%
Ejercicio típico 7:

Un sistema de memoria tiene un tiempo medio de acceso de 10 ns por operación de


lectura o escritura y un ancho de datos de 32 bits. ¿Cuál es el ancho de banda del
sistema de memoria?
Pasamos 32 bits a bytes = 32/8 = 4bytes

4 / 10ns = 4 / (10 * 10^-9) = 4 / 10^-8 = 4 * 10^8 = 400 millones

Ejercicio típico 8:

En un sistema con direcciones de 32 bits, memoria de bytes, cache de 1MB asociativa


por conjuntos de 4 vías y líneas de 64B, el campo etiqueta en el formato de dirección
cache es de:
Dividimos el valor de la cache asociativa (1MB) entre el valor de las líneas : 1MB / 64B = 2^20 /
2^6 = 2^14 = 14 bits

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

Las descargas sin publicidad se realizan con las coins


Ejercicio típico 9:

En un sistema con memoria de bytes, ¿cuál sería el tamaño de una línea de cache, si
la cache del procesador fuera de 4MB, asociativa por conjuntos de 16-vías, y
contuviera 4096 conjuntos?
Se multiplica el entero de la cache del procesador (4) por el valor de los conjuntos de vías (16)
= 64B

Ejercicio típico 10:

¿Cuál es el ancho del bus de direcciones de un chip DRAM de 1G palabra, siendo la


longitud de palabra de 16 bits?
15 bits (2^(30/2))

El resto son más fáciles memorizarlas

PRÁCTICA 6: ANÁLISIS DE UNA JERARQUÍA DE MEMORIA


Cache

- La cache de nivel 3 no contiene toda la memoria que maneja el programa


- Las direcciones a las que accede un programa no son completamente aleatorias,
sino que se rigen por ciertos patrones de localidad
- Un procesador actual tiene varias caches de nivel 1

Ejercicio típico 1:

Sea un computador de 32 bits con una memoria cache L1 para datos de 32 KB y


líneas de 64 bytes asociativa por conjuntos de 2 vías. Dado el siguiente fragmento de
código:
int v[262144];
for (i = 0; i < 262144; i += 2)
v[i] = 9;
Si en el bucle for se avanza de:
- Dos en dos: 1/8 (un fallo por cada 8 accesos)
- Ocho en ocho: ½ (mitad aciertos, mitad fallos)

Ejercicio típico 2:

Suponer una memoria cache con las siguientes propiedades: Tamaño: 512 bytes.
Política de reemplazo: LRU. Estado inicial: vacía (todas las líneas inválidas). Suponer
que para la siguiente secuencia de direcciones enviadas a la cache: 0, 2, 4, 8, 16, 32,
la tasa de acierto es 0.33. ¿Cuál es el tamaño de bloque de la cache?
- Si la secuencia es 0, 10, 16, 20, 30 y tasa acierto = 0.50: 16 bytes
- Si la secuencia es 0, 2, 4, 8, 16 y tasa acierto = 0.33: 8 bytes
- Si la secuencia es 1, 2, 4, 8, 16 y tasa acierto = 0.333: 8 bytes

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Ejercicio típico 3

En el programa "size" de la práctica de la cache, si el primer escalón pasa de tiempo =


1 para todos los tamaños de vector menores o iguales que 32 KB a tiempo = 3 para
los tamaños 64 KB y 128 KB, podemos asegurar que:
- La respuesta siempre es: la cache L1 es al menos x veces más rápida que la cache

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
L2, ese x se saca del enunciado : pasa de tiempo = 1 a tiempo = 3 (lo pone en el
enunciado) en este caso x = 3

Si en el examen cambiase el ejercicio poniendo el primer valor más alto que el segundo, la
solución sería la inversa: la cache L1 es al menos x veces más lenta que la cache L2

Ejercicio típico 4:

Abajo se ofrece el listado de una función para multiplicar matrices C = A x B.

void mult_matr(float A[N][N], float B[N][N], float C[N][N]){


/* Se asume valor inicial C = {0,0...} */
int i,j,k;
for (i=0; i<N; i++)
for (j=0; j<N; j++)
for (k=0; k<N; k++)
C[i][j] += A[i][k] * B[k][j];
}

Suponer que:
• El computador tiene una cache de datos de 8 MB, 16-vías, líneas de 64 bytes.
• N es grande, una fila o columna no cabe completa en cache.
• El tamaño de los tipos de datos es como en IA32.
• El compilador optimiza el acceso a C[i][j] en un registro.

Aproximadamente, ¿qué tasa de fallos se podría esperar de esta función para valores
grandes de N?
Si el enunciado acaba aquí, la solución es ½, si no, si después aparece otro párrafo diciendo:
imaginar que se modifica la última sentencia… el resultado es 1/16.

Ejercicio típico 5:

En la práctica de la cache, en size.cc se realiza un número fijo y grande de accesos,


pero podríamos haber recorrido una única vez el vector (saltando también de 64 en
64). Al dibujar la gráfica del tiempo de bucle en función del tamaño del vector…
- Si la última palabra es vector, sol = de ambas formas sale gráfica creciente
- Si la última palabra es línea, sol = con número fijo accesos sale gráfica creciente

El resto son más fáciles memorizarlas

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-9710285

¿Y la de estudiar te la sabes? No se trata de estudiar más, se trata de estudiar mejor ¡Clic aquí!

También podría gustarte