Está en la página 1de 13

Apuntes para estudiar revisión de arquitectura de computadoras

Computador

Analógico Digital

Función Fija -Programa almacenado

Electrónico No electrónico

-Propósito general -Propósito especial

Cálculo (triturador de datos) Manipulador de datos

Un computador puede ser construido con lógica:


 Analógica: muy difícil y complejo de construir. Además muy caro.
 Digital: se refiere a binario. De construcción más factible, porque los datos pueden ser representados y
modificados más fácilmente.
Las operaciones a realizar pueden ser:
 Función fija: siempre realiza lo mismo, pero muy rápidamente, ya que cada función está cableada.
 Programa almacenado: las operaciones a realizar, se han especificado a través de instrucciones que deben ser
decodificadas y ejecutadas (software)
La construcción del computador puede ser con dispositivos no electrónicos, o electrónicos. Sólo veremos los
electrónicos.
Los computadores electrónicos pueden ser de:
 Propósito General: es que acostumbramos a usar en escritorio, portátiles (Notebook o Netbook), etc. Podemos
elegir ejecutar diferentes programas.
 Propósito especial: son aquéllos que normalmente vienen insertos (embebidos) en sistemas mayores:
automóviles, teléfonos, lavarropas, etc. Está previsto sólo ejecutar los programas que fueron implementados
en memoria de solo lectura (rom).
Antes, los computadores se construían para especializarse en cálculos o en gestión de datos. Hoy ya no se hace esa
diferencia.
Veremos los computadores electrónicos, digital, de programa almacenado y propósito general. Capaz de realizar
operaciones con datos:

Un programa consiste en una secuencia de instrucciones que muestra cómo se puede realizar cierta tarea.
1
Los circuitos electrónicos de una computadora pueden reconocer y ejecutar un conjunto limitado de instrucciones
sencillas (las que llamamos el set instrucciones). Así que todos los programas deben ser convertidos a una serie de
instrucciones que la computadora los entienda.
El conjunto de las instrucciones primitivas o sencillas de una computadora se denomina lenguaje de máquina. Para
las personas resulta difícil ese lenguaje, por lo que es necesario encontrar una forma de convertir el lenguaje humano
al lenguaje de máquina.
Los científicos de la computación pensaron en un modelo que podría representar esta conversión. Lo llamaron el
modelo máquina multinivel o niveles de máquina virtual.
Para pasar de un nivel a otro se puede tomar dos caminos:
Traducción (compilación): este método propone sustituir cada instrucción de alto nivel en todas aquellas que les
corresponda en el nivel de abajo. Es decir, se genera un archivo con las nuevas instrucciones que hagan exactamente
lo mismo que aquéllas que se proponía en el alto nivel. Luego si estas instrucciones son entendibles por el procesador
real, serán directamente ejecutables.
Interpretación: cada instrucción del programa de alto nivel es tomada como argumento para la ejecución. Esto quiere
decir que el programa de alto nivel no tiene control sobre el procesador, sino que es el intérprete, también llamado
máquina virtual, quien se encargará de interpretar o decodificar las instrucciones de alto nivel que le ingresan. Este
intérprete está programado en el lenguaje de bajo nivel y es el que se ejecuta. No se genera ningún archivo adicional.

En un modelo de máquina multinivel los niveles más conocidos son:


 Lenguaje de alto nivel: son los usados por los diseñadores y programadores de aplicaciones. Existe una
variedad muy grande de lenguajes específicos para cada tipo de problema.
 Ensamblador: se trata de un nivel intermedio entre el lenguaje de máquina y el de alto nivel. Consiste en un
conjunto de mnemónicos normalmente en inglés que representan una a una las instrucciones de máquina. Este
nivel es necesario porque tiene la potencia de acceder a registros que con lenguaje de alto nivel no puede
hacerse.
 Sistema operativo: en este nivel el computador ofrece instrucciones que realizan tareas que suelen ser
solicitadas por los programadores o los usuarios y que normalmente en los procesadores no las ofrecen porque
no son capaces de ejecutar tanta complejidad. En este nivel se encargan de administrar (asignar, controlar y
liberar) recursos que son compartidos por todos los programas. Para solicitar el uso de algún recurso que
administra el sistema operativo los programas deben invocar a rutinas dentro del sistema operativo conocidas
como llamadas al sistema.
 Arquitectura del conjunto de instrucciones (ISA): es el conjunto de instrucciones que el procesador puede
ejecutar. Este es el nivel que se ofrece a los programas que se cargan en memoria principal. Ellos eligen una
por una las instrucciones del nivel ISA.
 Microarquitectura: se dice que es la implementación del nivel ISA, es el que lleva a cabo la ejecución de
cada instrucción del nivel ISA. Esto se hace con microoperaciones, de dos formas posibles:
o Ejecutando un microprograma (las microinstrucciones) que controla la trayectoria de datos o
o Cableando directamente.
 Lógica digital: Es el nivel más bajo y está compuesto por compuertas (memorias, calculadoras)
El hardware está constituido por todo lo físico de un computador (normalmente nos referimos a los circuitos
electrónicos).
El software es el mundo de los programas (el conjunto de las instrucciones que se les ha pasado).
El hardware y el software son lógicamente equivalentes, porque todo lo que se puede hacer por hardware también se
puede hacer por software y viceversa.
Los primeros sistemas eran conocidos como sistemas por lote: cada programa con sus datos eran grabados en tarjetas
perforadas y se ordenaban o alineaban uno tras otro, de manera que la lectora de tarjetas terminaba de leer un
programa y pasaba a otro sin pérdida de tiempo (de ahí el nombre lotes (de tarjetas)). No había interacción humana en
la ejecución de los programas.
Luego aparecieron los llamados sistema multiusuario o de tiempo compartido, capaces de atender alternativamente
a uno por uno (pero a alta velocidad) a muchos usuarios y a muchos programas, repartiendo el tiempo del procesador.
Organización de los computadores
El modelo de computadora que estudiamos está orientado a la conexión por bus. Tiene como función ejecutar
programas almacenados en la memoria principal buscando sus instrucciones, examinándolas y luego ejecutándolas.
Los componentes principales son la cpu, memoria principal y los módulos de entrada/salida.
A. La cpu está compuesta por:
 La unidad de control (que entre otras cosas se ocupa de buscar las instrucciones de la memoria principal y
determinar su tipo).
 Por la unidad lógica y aritmética, que se encarga de realizar operaciones como suma y OR lógico entre otras
necesarias para ejecutar las instrucciones.
2
 Un conjunto de registros para guardar temporalmente resultados y cierta información de control. Entre los
más importantes está el contador del programa (PC) que apunta a la siguiente instrucción que debe ejecutarse,
el registro de instrucciones (IR) que contiene la instrucción que se está ejecutando, etc.
Se denomina camino de datos al circuito por donde transitan los datos desde los registros, la ALU y los buses que
conectan los componentes.
Una cpu ejecuta siempre lo que se denomina el ciclo de la instrucción, que consiste en los siguientes pasos:
1. Capturar la siguiente instrucción de la memoria y colocarla en el registro de instrucciones.
2. Cambiar el contador de programa para que apunte a la siguiente instrucción.
3. Decodificar o determina el tipo de la instrucción que se trajo.
4. Calcular donde están los argumentos u operandos de la instrucción.
5. Si hubiera operandos en memoria principal, capturarlos y dejarlos en los registros de la cpu.
6. Ejecutar la instrucción.
A este conjunto de pasos también se lo conoce como el ciclo hardware, que quiere decir que una computadora
ejecutará permanentemente estos pasos hasta que se le corte la energía eléctrica al procesador. Este ciclo en realidad
puede realizarse por hardware o por software. Si se realizara por software, decimos que estamos en presencia de un
intérprete (un programa que ejecuta los seis pasos iterativamente).
Wilkes (1951) fue el primero en darse cuenta que el Ciclo hardware podría ser ejecutado por un intérprete que operara
a un nivel más bajo (microprogramación). Esta observación fue implementada por los diseñadores y explotada a su
máxima expresión (inventando instrucciones capaces de ejecutar complejas operaciones con modos de
direccionamientos convenientes para cada caso) hasta los años 80. Esta modalidad de instrucciones complejas se
denominó CISC y tenía ventajas sobre todo:
 económicas,
 junto con la rapidez de las memorias de control (de solo lectura) donde se alojaban las llamadas
microinstrucciones que ejecutaban los intérpretes de estos procesadores CISC.
 Además se buscaba construir instrucciones que estén más cerca de los lenguajes de programación de alto
nivel.
Pero en 1980 un grupo de investigadores de California (Berkeley y Stanford) desarrollaron procesadores que no
usaban interpretación (que le pusieron el nombre de RISC, que significa computador de conjunto reducido de
instrucciones). Algunos de estos procesadores lo denominaron SPARC y MIPS.
Fueron varios los motivos por los cuales se eligió este diseño:
 La ejecución directa por hardware era más rápida. Además eran instrucciones simples.
 Ya que el acceso a memoria era lento, había que ganar tiempo emitiendo (iniciando) lo más rápido posible la
siguiente instrucción (era más importante el número de instrucciones que se inician que el tiempo que cada
instrucción pueda ejecutarse).
 Las instrucciones deben ser analizadas (decodificadas) lo más rápido posible. Además es bueno que todas las
instrucciones tengan la misma longitud (la menor posible) junto con muy pocos modos de
direccionamientos.
 Es muy lento el acceso a memoria para traer los operandos que elija la instrucción, por lo que conviene
separar la operación de carga y guardado en la memoria (LOAD y STORE) del resto de las instrucciones, de
manera que podrían realizarse en forma simultánea.
 También es bueno que se disponga de la mayor cantidad de registros de procesador posible, así se guarden
anticipadamente O no se borren los temporales por falta de espacio. Esto también es consecuencia de que el
acceso a memoria es lento frente al ciclo del camino de datos de la cpu.
Para que las computadoras tengan un rendimiento mayor (más cantidad de programas ejecutados por unidad de
tiempo o un programa ejecutado en un menor tiempo), los diseñadores han buscado levantar la frecuencia de los
chips para conseguir mayor rapidez. Históricamente esto siempre tiene un techo (el que da la tecnología del momento
actual) que no puede superarse. Entonces casi siempre se busca la solución en el paralelismo, esto es lograr ejecutar
más de una instrucción al mismo tiempo o casi al mismo tiempo.
Obtener mejoras de rendimiento en la ejecución de un programa a través del paralelismo no siempre da resultado, ya
que las instrucciones deberían permitir ejecución simultánea (sin dependencia de datos) sin provocar resultados
erróneos por la alteración de la secuencia.
Se denomina paralelismo a nivel de las instrucciones, cuando el sistema ejecutando sobre un procesador no espera a
que termine una instrucción para lanzar otra, sino que las superpone para disminuir el tiempo de ejecución y levantar
el rendimiento. Tiene dos aspectos:
 Filas de procesamiento (pipeline): se busca por adelantado las instrucciones de la memoria, ubicándolas en
un buffer de prebúsqueda (prefetch) y se aprovechan las unidades funcionales (etapas) que una instrucción va
dejando desocupadas en su ejecución, para continuar con la siguiente y con el mismo criterio. Esta “cinta
transportadora” de instrucciones a “medio hacer” puede tener éxito completamente, cuando no hay
dependencia entre instrucciones. Un buen criterio para entender puede pensarse que una instrucción se divide

3
en tantos pasos como los que realiza en el ciclo de la instrucción, pero puede llegar a 20 o más en algunos
casos.
 Arquitecturas superescalares: cuando el sistema logra tener más de una unidad funcional de ejecución (por
ej una de enteros y otra de punto flotante, etc). Se dice que la arquitectura es superescalar cuando la cpu es
capaz de ejecutar más de una instrucción en un ciclo de reloj.
El paralelismo a nivel de procesador o verdadero paralelismo es el que se conoce como:
 SIMD (única instrucción para múltiples datos). En la práctica tiene mucha aplicación en problemas de
matrices de datos al que hay que hacerle suma, producto etc. Tiene dos variantes:
o Matriz de procesadores: es un conjunto de procesador/memoria gobernados por una única unidad de
control. Requiere un hardware y una programación más complicados.
o Procesador vectorial: se trata de un procesador con un conjunto de registros que pueden cargarse en
serie de la única memoria. Entonces por ejemplo una instrucción de suma vectorial se realiza por
pares de los elementos de dos vectores, almacenando el resultado en otro vector. La resolución de
matrices debería hacerse vector por vector. Son más sencillos de implementar y pueden agregar se a
los procesadores convencionales.
 MIMD (múltiples instrucciones para múltiples datos). Esta organización permite ejecutar diferentes
instrucciones con diferentes datos simultáneamente. Tiene dos variantes:
o Los llamados multiprocesador, consisten en un computador con varias cpu que comparten una
memoria común. Como cada cpu puede leer o escribir en cualquier parte de la memoria, la conexión
con la memoria puede hacerse a través de un bus o un switch, pero debe coordinarse para que no se
estorben mutuamente. Además los problemas de interconexión se multiplican cuando crece el número
de procesadores. Pero son más fáciles de programar. Por compartir memoria la comunicación se dice
que es a través de memoria compartida y la demora es del orden de los nanosegundos.
o Los llamados multicomputador son un conjunto de computadores con memoria propia y conectados
entre ellos. Como cada procesador tiene su propia memoria no tiene los conflictos que los
multiprocesadores de memoria compartida. Los procesadores de cada computador se comunican entre
ellos a través de paso de mensajes (cuya demora es del orden de los microsegundos). Los
multicomputadores son más fáciles de construir y tienen una coordinación más limpia.

B. La memoria principal almacena instrucciones y datos. Las N localidades o celdas son accesibles a
través de su dirección (un único número de 0 a N-1). El contenido de cada celda consiste en k bits
(normalmente ocho bits). En la mayoría de los sistemas la cantidad de bits que se accede para lectura o
escritura se denomina palabra y puede tener: 8,16, 32 o 64 bits para minimizar los accesos a memoria. Los
registros de procesador también tienen longitudes similares.
En casi todos los casos, se agregan bits a los que guardan los datos o instrucciones. Esto es necesario para que
la memoria sea confiable porque los picos de tensión pueden arruinar la información. Si hay forma de
reconstruir la información, sólo se agrega un bit (cuando sólo es necesario detectar), el llamado bit de
paridad. Sí solo dependemos de ese medio de almacenamiento se usan más bits denominados códigos de
corrección de errores (por ejemplo el llamado código de Hamming) que permiten detectar y corregir los
errores.
Ya que la diferencia de tiempo de acceso entre los registros de la cpu y los de la memoria principal son muy
diferentes (la memoria puede ser diez veces más lenta), los diseñadores pensaron en acercar al procesador una
memoria pequeña y rápida denominada caché. El criterio que se sigue es, tener una memoria pequeña (lo más
cerca de la CPU) para acceder más rápido, que una memoria más grande y más lenta (a igualdad de
tecnología, el sistema demora más en buscar en memorias grandes que en las pequeñas). Pero, además de que
es bueno llevar la información a una memoria más cercana y rápida a la CPU (claro que tiene su costo, porque
hay que disponer de nuevos circuitos), para no perder el tiempo en el acceso a la Mp, cobra vigencia un
estudio que realizaron los investigadores:
Los programas, en su gran mayoría, tienen un comportamiento predecible, es decir: lo más probable es que:
 La ejecución de las instrucciones va recorriendo posiciones contiguas crecientes de memoria:
Principio de localidad Espacial de la referencia. Ej. Si el registro PC tiene la dirección 100, luego
seguirá la 101, y así sucesivamente. Lo mismo ocurre con los datos (posiciones de variables simples o
arreglos).
 La ejecución de las instrucciones puede entrar en un lazo repetitivo (del tipo while, for, repeat, etc):
Principio de localidad Temporal de la referencia. Ej. Si el registro PC tiene la dirección 100, es
probable regrese en poco tiempo a dicha dirección (tanto en dirección de instrucciones (PC), como en
datos).

4
Estos comportamientos encontrados en los programas, llevan a que en la memoria caché, se retenga las
instrucciones y datos usados últimamente, porque hay una buena probabilidad de que se los vuelva a acceder.
Hay que decir también que los principales enemigos de estos principios son:
1) las rutinas de interrupción que piden ser ejecutadas para atender algún evento (exterior o interior al
programa que se ejecuta), en general cualquier intervención del sistema operativo;
2) los llamados a procedimientos, subrutinas, funciones y también
3) las instrucciones de salto
Normalmente la estadística es positiva, el éxito de la caché es alto (>90%), cuando se busca instrucción o
dato, pero puede mejorarse, colocando memorias más grandes en otro nivel (llamadas caché de nivel 2 o 3),
que conservan la información cuidando la localidad. Así que las búsquedas son en las cachés de nivel 1, luego
2 y por último el 3. Cuando se fracasa (miss), recién se busca en la Mp y se cargan las líneas de cachés con
bloques de la RAM.
Normalmente las cachés de nivel 1, se dividen en 2: la que tiene instrucciones y la que tiene datos (modelo
Harvard).
Un modelo de pirámide de memoria: es el que los diseñadores adoptan para la arquitectura de un
computador. La información hace falta en el procesador. Pero no puede llevársela toda allí, porque los
registros son pocos. La idea es buscar en otra memoria más grande pero más lenta, si lo que busco no se
encuentra. Dicha memoria abarcará las zonas de memoria que el programa está accediendo (mantendrá el
principio de localidad de la referencia). Esto se repetirá hasta llegar a un dispositivo de información no-volátil
(permanente), cada vez a porciones de memoria más grandes. La comunicación entre dichas memorias o
niveles, se hará en porciones manejables por el nivel de arriba: línea de caché, página o segmento.
Cuando se habla de los niveles más bajos, allí se encuentran las memorias no-volátiles:
 Memoria Terciaria: compuesta por dispositivos portables (es decir extraíbles) que sólo sirven de
backup o respaldo, no para trabajos ON-LINE. Ej: CD, DVD, cintas, etc
 Memoria Secundaria: normalmente los discos magnéticos, que en un buen porcentaje se los usa
como memoria auxiliar de la técnica de Memoria Virtual. Es decir son dispositivos de
almacenamiento permanente (no-volátil) que ayudan a la RAM en mantener la información que ésta
necesita para la ejecución de los programas (los tiempos de acceso a disco, son los más cercanos a los
de la Mp). El sistema intercambia información en forma de páginas entre la RAM y el disco,
trabajando de una manera similar a la relación (RAM-Caché). Decimos por lo tanto que la RAM es
como la caché del disco (porque mantiene en páginas cargadas en RAM, la información que
probablemente seguirá empleándose).
Disco: es una tecnología que permite guardar información binaria en soportes magnéticos. Se trata de un
conjunto de platos solidarios (todos unidos por un eje) que giran a velocidad angular constante por zonas
(depende de la zona o grupo de cilindros, que se encuentren los cabezales). La información se guarda en pistas
(circunferencias concéntricas) que son susceptibles de magnetizar (con 1 o 0) por parte de una cabeza o
cabezal que acciona sobre cada pista (uno por cada superficie útil de cada plato y uno por vez). En total hay
tantos cabezales como superficies (caras) de plato contiene el sistema disco. Cuando se accede al disco, se
debe especificar 3 parámetros de dirección: C (nº cilindro), H (nº cabezal) y S (nº sector).
Tiempo de acceso: el tiempo que el sistema se demora en llevar la información desde que es solicitada, hasta
que aparece en memoria de la placa controladora, es la suma de 3 tiempos:
Tiempo de búsqueda (seek time): es el tiempo que demoran los cabezales (moviéndose todos unidos) desde
que recibe la solicitud de acceso a disco hasta que se ubican en el cilindro pedido (se acaba de llegar a C (nº de
cilindro)). Para ubicarse en la 2da parte de la dirección (H), sólo hay que activar electrónicamente ese
cabezal, para que lea o escriba la pista de esa superficie. Los tiempos de búsquedas están entre 5 y 15 mseg
(valor promedio del desplazamiento entre el cilindro de mayor y menor diámetro).
Tiempo de latencia (de rotación): es el tiempo que se demora el sistema en hacer girar los platos para que el
sector seleccionado sea leído o escrito por el cabezal activado. Normalmente se establece como tiempo medio
a la demora de media vuelta del disco. Así que se tienen demoras de rotación de entre 4 y 8 mseg.
Tiempo de transferencia: es el tiempo que el sistema se demora entre que el cabezal detecta el sector y los
bits son transferidos desde/hacia disco/memoria semiconductora de la caché de disco (RAM de la placa). El
orden de demora es de unos 25 a 100 microsegundos para transferir 512Bytes.
Cada unidad de disco tiene asociada una placa controladora de disco, donde tienen una CPU dedicada,
búferes – caché, mapa de sectores defectuosos, etc. Se denominan discos IDE (electrónica integrada a la
unidad) a aquellos discos que tienen la placa y la unidad de disco en una sola pieza. Para uniformar o
estandarizar los discos, se delegó a la BIOS (sistema básico de entrada/salida) situada en la ROM, la función
de driver de bajo nivel, es decir el sistema operativo colocaba los datos en los registros de la CPU y llamaba al
programa de la BIOS para que le emita comandos a la placa de disco. Pero la previsión de la cantidad de bits
necesaria para C,H,S de los BIOS creados para los 8088, pronto se quedaron cortos y no evolucionaron al
ritmo de los discos. Así que apareció EIDE (una extensión de IDE) que reconoce un nuevo esquema de
5
direccionamiento: LBA (direccionamiento por bloque lógico), que maneja direcciones de sectores lógicos
que van desde 0 a N. Ahora es la placa la que convierte este número a los 3 parámetros (C,H,S) que se
requiere para acceder al disco, superando los limites de las viejas BIOS.
Existen otras unidades y controladoras de disco, de una calidad superior, llamados SCSI (interfaz de sistema
de cómputo pequeño), que tienen tasas de transferencia más alta y permite mayor cantidad de discos
conectados a una única controladora (7).
Ya que los discos son los dispositivos más lentos en la pirámide, se inventó un esquema de agrupación de
discos llamado RAID (conjunto redundante de discos independientes), que permite: mejorar el rendimiento
con la (I) independencia de los discos (mayor tasa de transferencia) y mejorar la fiabilidad con la (R)
redundancia (tolerancia a las fallas).
RAID: Son las siglas de una tecnología (implementada en software o en hardware) que mencionan 4 palabras:
Arreglo Redundante de Discos Independientes (antes baratos). Término acuñado por Patterson (1988), en la
Universidad de California con sede en Berkeley. El y su grupo de investigación inventaron esta tecnología
para resolver 2 cuestiones de los discos: lentitud en el acceso a los datos y fragilidad del soporte mecánico
(fallaba con facilidad). Lo primero se resolvió conectando y accediendo simultáneamente a varios discos para
sacar la información (ya que la información estaría dispersa por esos discos) en lugar de esperar que sea leída
secuencialmente de un único cabezal (único disco). Lo segundo se logró, disponiendo de información
redundante (adicional y no necesaria para operar) como los llamados bits de paridad (ya sea en otros discos o
en los mismos donde están los datos)

Los llamados niveles de RAID:

Nivel 0: mal llamado RAID, porque no ofrece ninguna tolerancia a las fallas (o sea no hay redundancia de
discos). Consiste en hacer que cada disco del RAID 0 se vea como dividido en “tiras o strip”, que es una
porción más grande que los sectores: incluyen un número entero de sectores. Entonces, por ejemplo un
archivo tendrá dispersas sus tiras consecutivas en distintos discos (la figura muestra 12 tiras distribuidas en 4
discos), eso hace que se “multiplique” la velocidad de acceso a la información por 4 (al ser independientes y
acceder simultáneamente), si la solicitud de información al menos abarca un tamaño de 4 tiras. Como en
todos los niveles u organizaciones de RAID, el sistema operativo cree que está accediendo a un solo disco, por
lo que entonces, la placa (RAID por hardware) o un driver (RAID por software) se encargará de distribuir los
comandos a cada disco para cumplir con la solicitud que le llega del sistema operativo. En caso de fallos en
algún disco, no tiene solución, no hay cómo sobreponerse.
Nivel 1: consiste en hacer un RAID 0 y “espejar” o duplicar los discos. Resultado se obtiene una total
redundancia, por lo que ofrece tolerancia a los fallos (se “cae” un disco, puedo leer de su espejado). Ofrece
como el RAID 0, paralelismo o simultaneidad en el acceso en solicitudes de mucha información (varias tiras).

6
En la escritura, hay que escribir en el original y en su copia (doble trabajo), pero en las lecturas se puede leer
de los originales y de las copias simultáneamente. Costo: mucho más alto, hace falta el doble de discos.
Nivel 2: en lugar de que los discos se vean como divididos en tiras (conjunto de bloques), lo que se hace es
dividirlos en “palabras”, que pueden tener 1 Byte de longitud (pueden ser varios Bytes o menos de 1 Byte, por
ejemplo un nibble: 4bits, como se indica en la figura). Llevar al extremo y distribuir bit por bit en cada disco,
no es descabellado (o pelado), como muestra Tanenbaum que ocurría en una máquina determinada. En la
figura del nivel 2 muestra que 4 bits, protegidos por Hamming, se agregan 3 bits más, por lo que hay que
guardar 7 bits en 7 discos independientes. Imagínense la velocidad de acceso para pequeños datos en sistemas
de este tipo, pero también imagínense la complejidad de los circuitos y de los algoritmos.
Nivel 3: usar una técnica similar al 2, pero se dieron cuenta que en vez de aplicar Hamming (que usa muchos
bits de verificación), se podría usar bit de paridad, que tiene un “overhead” (una sobrecarga) de sólo 1 bit.
Cómo muestra la figura: 4 bits de datos y 1 de paridad (5 discos). Para economizar bits (de Hamming a
paridad) se apoyaron en el hecho de que la placa controladora del disco que falla, se da cuenta por el propio
bit de paridad de esa palabra (1 bit) que acompaña al bit de dato. Esta observación, hace que el nivel 2 tenga
sentido teórico (nunca se llevó a cabo). Tanto los esquemas 2 y 3 ofrecen muy buena tasa de transferencia en
un solo pedido de poca información. Pero ninguna mejora si llegan muchos pedidos (los otros tendrán que
esperar su turno).
Nivel 4: este esquema vuelve a considerar al disco como un conjunto de tiras (varios sectores) y no requiere la
electrónica especializada de los 2 anteriores ni tampoco tiene la redundancia (espejar) de un RAID 1, sino que
a partir de un RAID 0, se agregará otro disco (de paridad) en donde se alojarán todos los bits de paridad (la
función paridad sobre cada posición de bit entre los 4 discos (según esta figura)). Así que cuando falle un
disco, su controladora avisa y aplicando bit de paridad se reconstruye el disco erróneo. Ej:

Tira del Disco 1 1 0 1 0 0


Tira del Disco 2 0 0 1 0 0 Control vertical
Tira del Disco 3 1 1 1 0 0
Tira del Disco 4 1 1 1 1 0
Tira de Disco de 1 0 0 1 0
Paridad

Nivel 5: Idem al 4 pero ahora, el control de la paridad sobre los datos se va rotando (de manera de distribuirla
a los largo de todos los discos). Ahora todos los discos tienen tiras de datos y tiras de bits de paridad. Es un
mejor esquema para que el disco de control no sea un “cuello de botella” (muy accedido, tanto para lectura
como para escritura)
Los dispositivos más bajos de los niveles de la pirámide son los llamados de almacenamiento terciario
(portables):
Ópticos: CD-ROM: los hace un fabricante en forma masiva y el usuario sólo puede leerlos, CD-R (CD-R:
recordable, grabable): el usuario puede escribir en ellos con una unidad grabadora, así que puede sólo hacer
operación de lectura, pero no puede volver a escribirse, CD–RW (Re-Writable, reescribibles): permite que
además de leerse, también se puede escribir, DVD (Digital Video Disc) (disco digital versátil): también con
las variantes de tamaño, y de las que tienen los CD. Los ópticos guardan información en un espiral, donde
aparecen puntos hoyos y puntos sin profundidad, que son leídos por láser.
Magnéticos secuenciales: cintas magnéticas: carreteles de cinta con pistas magnéticas, son soportes más
baratos (precio del Byte) pero sólo de acceso secuencial.

C. Entrada/salida:
Cuando se habla de entrada/salida, se quiere decir que hay que hacer operaciones como la salida que trasladan
información fuera del computador u operaciones de entrada que traen información hasta el computador. Estas
son operaciones básicas para comunicar el computador con los periféricos: teclado, monitor, mouse,
impresora, etc.
La forma más económica de comunicación sigue siendo el bus. Esta forma se usa entre los registros de la
CPU, entre CPU y Mp y también para que la CPU lo haga con los módulos de E/S, quienes a su vez,
comandan los dispositivos. Desde hace tiempo, ya se usa un esquema de buses múltiples, que permite separar
los dispositivos por su velocidad o ancho de banda y ubicarlos en los transportes (buses) que mejor se ajuste
(ISA, PCI, etc)
La comunicación entre CPU y módulos de E/S (las llamadas placas controladoras) se puede realizar de 3
formas posibles:
E/S programada, E/S con interrupciones y con DMA.
Entre los dispositivos se encuentran:
7
Los terminales: conjunto de teclado/monitor que permite que el usuario se comunique interactivamente con el
computador. Para el momento en que fueron inventados se trataba de sólo modo texto. Los cables y las
normas de comunicación no permitían velocidades que pueda llenar un monitor con imágenes. La aplicación
era la interfaz de comunicación con los sistemas multiusuarios (sistemas de tiempo compartido), ya que como
se dice, son terminales bobas. Normalmente en estos sistemas, el centro de cómputo está separado varios
metros de las terminales, por lo que se hace necesario colocar una interfaz estándar de baja velocidad
denominada RS-232-C (que consiste en una placa o chip UART, responsable de la transmisión y conversión
serie/paralela), que si las distancias superaban los 15 metros, había que conectar UART a un módem para que
se transmita por una línea telefónica.

Relojes:
Un reloj es un circuito que emite una serie de pulsaciones con un periodo y una frecuencia conveniente para
que todas las operaciones en cualquier parte del circuito estén incluidas con su duración en lo que se conoce
como período del reloj. El ciclo de reloj básico es el que se establece midiendo los eventos más lentos, de
manera que el ciclo abarque el peor caso. Si se quiere aumentar la eficiencia, es decir realizar varios sucesos
en un solo ciclo de reloj, podría generarse divisiones del ciclo en subciclos. Esto hace que se puedan efectuar
más actividades, ya que se activan en los flancos ascendente o descendente de la onda del reloj.
Memoria
La memoria sirve para almacenar las instrucciones y los datos.
Memorias RAM y ROM
Cuando se refiere a memorias RAM, se quiere significar que se puede leer o escribir aleatoriamente (es decir
demora lo mismo en una operación de lectura, en acceder a cualquier posición de memoria). Hay 2 tipos de
RAM:
 estáticas: (SRAM) se construyen con flip-flop y pueden almacenar información por mucho tiempo, si
se sigue alimentando eléctricamente. Tienen un mayor costo por bit, porque necesita 6 transistores.
Son más rápidas y se las usa en las cachés de nivel 2.
 Dinámicas: (DRAM) no usan flip-flop sino que consisten en un transistor y un condensador
(capacitor), por lo que necesita “refresco” (recargarse) cada tanto (10 milisegundos), ya que el
condensador se descarga y pierde la información. Estas memorias pueden ser
o Asincrónicas (las líneas de datos y dirección no están controladas por el mismo reloj):
 chips FPM (modo de página rápida)
 chips EDO, que permite iniciar una segunda lectura, antes que la primera haya
finalizado
o Sincrónicas (SDRAM): son controladas por el mismo reloj y son una mezcla de RAM estática
y dinámica
En aquellas aplicaciones donde sea necesario guardar la información aún cuando no haya corriente, se
diseñaron memorias llamadas
 ROM (porque sólo se las puede leer): los datos los ingresa el fabricante y no pueden modificarse
 PROM: idem a ROM, pero se le permite al cliente que la programe (de ahí la P) una sola vez
 EPROM: PROM borrable (ERASE) por luz ultravioleta y reutilizable.
 EEPROM: se puede borrar y cambiar la información sin que se las extraiga, porque se la trabaja
eléctricamente (E). desventaja: es más lenta. Se puede borrar por Byte
 Flash: idem a la EEPROM, pero borrable por bloque. Desventaja: se desgastan después de unos
10000borrados.
Chips de CPU:
Pueden tanto enviar señales como recibir del exterior. La CPU interactúa con la memoria principal y los
módulos de E/S a través de 3 tipos de buses: dirección, datos y control. La performance (rendimiento o
eficiencia) de una CPU está un poco relacionada con la cantidad de bits del bus de dirección y de datos,
porque le da la capacidad de direccionamiento y la capacidad de transporte simultáneo con la Mp. El bus de
control, en realidad es un conjunto de muchas líneas, que regulan el flujo y temporización de los datos que
ingresan y salen de la CPU, entre otros usos.

Buses de la computadora:
Un bus es un medio de transmisión común entre varios dispositivos, que tienen reglas de comunicación llamadas
protocolo de bus.
Pueden ser internos a la cpu porque conectan los registros con la ALU. Pueden ser externos ya que conectan la cpu
con los otros dispositivos. Los primeros sistemas usaban un único bus externo llamado bus del sistema que recorría
toda la placa Madre. Hoy en día los buses externos son específicos para la conexión de dispositivos rápidos o lentos.
Los dispositivos que son capaces de iniciar transferencias se llaman activos o maestros mientras que los que reciben
solicitudes se llaman pasivos o esclavos. Hay algunos que pueden funcionar como maestros o esclavos, por ejemplo el
8
controlador de disco. Casi todos los maestros deben conectarse al bus a través de un controlador de bus (es un
amplificador digital). Los esclavos se conectan a un receptor de bus. Los maestros y esclavos se conectan a un
transceptor de bus.
Ancho del bus: en el caso del de direcciones, da la capacidad de direccionamiento que la cpu puede elegir de la
memoria (n líneas son capaces de seleccionar entre 2 n posibilidades). Lo mismo ocurre con el bus de datos, nada más
que este cuando se incrementa aumenta el ancho de banda de datos de un bus (más bits por transferencia):
Ancho de Banda= ancho del Bus x frecuencia del bus
Temporización del bus:
Puede ser sincrónico cuando todos los dispositivos conectados a él se rigen por una línea del reloj que fije a la
frecuencia de la onda cuadrada que ha de usarse para transferir o recibir información (esto puede hacerse cuando las
distancias son relativamente cortas). Siempre un bus debe ser más rápido que los dispositivos esclavos conectados a
él. Los maestros como la cpu insertará estados de espera hasta que la memoria termine con lo solicitado (ya que es un
dispositivo más lento que la cpu).
Pueden ser asincrónicos cuando no hay forma de mantener un reloj común. En este caso el maestro de la
comunicación habilita la dirección del esclavo y la señal de la operación que necesita. El esclavo cuando percibe esto,
realiza su trabajo y contesta para que el maestro tome los datos (en caso de lectura) y luego libere el bus. El conjunto
de señales que interactúa de esta manera se denomina hand-shaking o saludo completo.
Arbitraje del bus
Ya que la cpu no es el único dispositivo que necesite tomar el bus para transferir información o solicitar atención, es
necesario dotar al bus de algún arbitraje (alguien tiene que decidir quién toma el bus). Los mecanismos pueden ser
centralizados (uno sólo determina quién toma el bus) o descentralizado cuando entre todos controlan el acceso al bus.
Operaciones de bus
Operaciones básicas son de lectura o escritura. Pero a veces pueden solicitarse más de una palabra a la vez, como es el
caso de la caché que necesita traer todo una línea completa desde la memoria principal. Otras veces se solicitan
transferencias de a bloques (entre memoria y el disco). Cuando el sistema tiene varias cpu (multiprocesador) es
necesario que haya disponible instrucciones que hagan lectura-modificación-escritura, para evitar incoherencias con
los datos cuando trabajen simultáneamente más de un procesador sobre la memoria. Cuando los dispositivos necesitan
informar eventos acuden a una línea llamada IRQ (solicitud interrupción) para avisar a la cpu que debe ejecutar una
rutina que atienda el evento. Normalmente las solicitudes de interrupción vienen acompañada de los denominados
índices de vectores de interrupción.
Ejemplos de buses:
Bus ISA: es el resultado de que la industria de computadoras personales no use el bus microcanal que inventó IBM,
para no tener que pagar regalías. Es básicamente el bus de la PC/AT a 8,33 MHz también de IBM, pero sin
restricciones de licencias. Tiene 24 líneas para dirección de memoria, 16 para datos. Ancho de banda = 8.33Mhz x 2
Bytes = 16.7MB/seg
Bus PCI: en 1990 intel dio solución a los anchos de banda que exigían las interfases gráfica: 67,5 MB/seg (imágenes
en movimiento en pantallas de 1024 x 768 pixeles, a 3Bytes/pixel y 30 cuadros por segundo), ya que diseñó un bus
llamado pci capaz de transferir 32 bits por ciclo a 33MHz (ancho de banda=33x4 = 132 MB/seg). El esquema fue
mejorado llegando a 528 MB/seg, con 66 MHz y 64 bits. Hoy en día, PCI ha pasado por nuevas versiones (PCI-x,
PCI-express) ofreciendo capacidades mucho mayores (PCIe x 16 = 32GB/seg).
Es sincrónico (tiene una señal de reloj común que circula por todos los dispositivos), todas las transacciones tienen un
amo y un esclavo, con arbitraje centralizado en los denominados puentes (norte y sur). Las líneas de dirección y de
datos están multiplexadas.
Bus USB: como su nombre lo indica es un Bus tipo serie y sirve para conectar dispositivos de entrada/salida de baja
velocidad a una computadora. Fue diseñado para estandarizar la conexión de periféricos como: Mouse, teclados,
scanners, cámaras digitales, teléfonos móviles, reproductores multimedia, impresoras, módems, tarjetas de red, tarjeta
de sonido, discos duros externos, etc.
Algunos de los objetivos eran:
 Los dispositivos de entrada/salida deberán obtener su energía del cable.
 Se debería poder conectar hasta 127 dispositivos a una sola computadora
 Los dispositivos deberán poder instalarse mientras la computadora esté funcionando
En su esquema originario el cable para USB consta de 4 hilos: 2 para datos, uno para alimentación y uno para tierra.
Actualmente existen cuatro tipos según su velocidad de transferencia de datos:
 Baja velocidad (1.0): hasta 1,5 Mbps. Usado para los teclados, Mouse, cámaras web, etc.
 Velocidad completa (1.1): hasta 12 Mbps.
 Alta velocidad (2.0): hasta 480 Mbps. El cable dispone de cuatro líneas, un par para datos, una de corriente y
un cuarto que es el negativo o retorno.
 Super alta velocidad (3.0): hasta 4Gbps. Se han incluido cinco conectores adicionales.
Cuando se conecta a un nuevo dispositivo de entrada/salida, el eje raíz (el principal) detecta este suceso e interrumpe
el sistema operativo para que éste consulte al dispositivo para averiguar qué es y que ancho de banda necesita. Si el
9
sistema operativo club aceptar le asigna una dirección única (1-127) y colocar esta dirección y otra información en los
registros de configuración dentro del dispositivo. En los de baja velocidad el eje raíz transmite una nueva trama cada 1
milisegundo, para mantener a todos los dispositivos sincronizados en el tiempo. Una trama se asocia un conducto de
bits y consiste en paquetes, el primero de los cuales va del eje raíz al dispositivo. Los paquetes subsecuentes de la
trama también podrían enviarse en esa dirección, pero también podría regresar del dispositivo al eje raíz. Si no hay
trabajo para realizar se envían tramas ociosas (SOF: inicio de trama). Este paquete siempre se difunde a todos los
dispositivos. Otra trama es un escrutinio, por ejemplo, una solicitud a un escáner para que devuelva los bits que ha
encontrado en la imagen que está digitalizando. Otra trama consiste en un dato que se envía a algún dispositivo, por ej.
una impresora.
Una trama consiste en uno o más paquetes, posiblemente algunos para cada dirección. Existen cuatro tipos de
paquetes:
 Testigo: van desde la raíz a un dispositivo y sirven para control del sistema.
 Datos: sirven para transmitir hasta 64 bytes de información en cualquier dirección. Por ejemplo: 8 bits para
sincronización, 8 bits de PID, la carga útil y un CRC (código de redundancia cíclica) para detectar errores
 Saludos (ACK, NAK: se detectó un error de CRC , STALL: esperé por favor, estoy ocupado )y Especiales:

10
El nivel de microarquitectura
Se le denomina a la forma de llevar a cabo la ejecución de las instrucciones definidas en ISA (Set de instrucciones).
Porque necesitamos el nivel de detalle del hardware (compuertas)
Lo que sabemos es que para cumplir con la ejecución de cada una de las instrucciones del ISA, debemos realizar unos
pasos, que requieren ciclos de reloj de la CPU
Depende si la filosofía de diseño es risc o cisc, es decir depende de la complejidad y también del costo y el
rendimiento que se quiera darle.

Microprogramación: es una forma de implementar la microarquitectura. Esto necesita de un microprograma (En


ROM) que realiza los siguientes pasos:
 Busca
 Decodifica
 Ejecuta
El diseño es un problema de programación.
La ejecución de un programa es:
 La alimentación constante de funciones (las instrucciones ISA) a un ciclo infinito (de máquina) que ejecuta un
microprograma la rom de control.
Se denomina trayectoria de datos, al circuito que involucra la ALU y los registros.
Necesita una en temporización exacta para la trayectoria de datos.
La implementación se logra con microinstrucciones grabadas en la ROM de control. Donde la ejecución no es
secuencial sino que cada microinstrucción especifica cuál es la siguiente. Otra diferencia con la memoria principal es
que la memoria de control es de sólo lectura.
Pilas: qué son, para qué se las usa?

11
 Los procedimientos tienen variables locales
 No sirve guardar las variables locales en posiciones fijas de memoria principal, porque los programas pueden
llamarse a sí mismos (recursivos).
 Las variables se guardan en la pila a partir de una dirección denominada LV que se guarda en un registro y los
procesadores además tienen un registro el SP donde se mantiene la dirección de la última variable.
 Se llama marco de variables locales a la estructura entre LV y SP.
 Para acceder a una variable local se indica la distancia respecto de LV.
 La ejecución de cada procedimiento hace cargar LV y SP.
 Las pilas tienen también otro uso y es el de guardar resultados parciales (pila de operandos).
Diseño del nivel de microarquitectura
Características deseables de los computadores:
 Rapidez
 Bajo costo
 Confiabilidad
 Facilidad de uso
 Bajo consumo de energía
 Tamaño físico
Cuál es el máximo rendimiento que puede alcanzarse y cuál es su precio en términos de hardware y complejidad.
Rapidez versus costo
Dada una tecnología de circuitos y una ISA, hay tres estrategias básicas para aumentar la velocidad de ejecución:
1. Reducir el número de ciclos de reloj necesarios para ejecutar una instrucción.
2. Simplificar la organización para que el ciclo de reloj puede hacer más corto.
3. Superponer la ejecución de instrucciones.
El número de ciclos de reloj necesarios para ejecutar un conjunto de operaciones se denomina longitud de trayectoria.
La rapidez con que puede operar el reloj está determinada por la cantidad de trabajo en serie que debe efectuar en
cada ciclo de reloj. Cuanto más trabajo haya que realizar, más largo será el ciclo de reloj.
El reto del diseñador es identificar los componentes del sistema que se pueden mejorar para hacerlos más rápidos. Hay
básicamente dos etapas del ciclo de la instrucción que son candidatas a mejorarse:
1. Reducir el número de ciclos de reloj para traer instrucciones de la memoria
2. Reducir la cantidad de decodificación que hay que realizar
La primera puede mejorarse, si se la separa o divide de la parte de la instrucción que se dedica a la trayectoria de
datos. Al hacer esto, se puede superponer la búsqueda y la ejecución de las instrucciones. Y por qué no, ir más allá,
solapando la ejecución de muchos instrucciones (segmentación de cauce o pipe-line).
La segunda podría mejorarse si no se usa un decodificador, es decir si no se pierde tiempo eligiendo binarios en un
registro de CPU.
Sencillo versus rápido:
 Las máquinas sencillas no son rápidas
 Las máquinas rápidas no son sencillas

Mejoramiento de desempeño (rendimiento) o cantidad de instrucciones ejecutadas por unidad de tiempo


Mejoras en la implementación: nuevas formas de construir CPU o memoria, sin modificar la arquitectura. Los
programas viejos podrán seguir ejecutándose. Ej: un reloj más rápido, etc. Es la práctica de Intel hasta el Pentium.
Algunas de las mejoras son:
1) Memoria caché.
Al pasar los años, las velocidades de los procesadores sean han apartado de las velocidades de las memorias (la brecha
es cada vez más grande).
Una forma de atacar el problema, aumentando el ancho de banda, es crear filas de procesamiento (segmentación de
cauce o pipe-line), pero esto resulta en un aumento de la latencia para operaciones individuales de memoria. Además
funcionan mejor con código lineal, ya que la unidad de obtención puede leer palabras consecutivas de la memoria.
Otra forma es incluir caché: contiene las palabras de memoria que se usaron más recientemente en una memoria
pequeña y rápida. Esto se puede mejorar empleando varios niveles de caché. Otra forma es dividir la caché, ubicando
las instrucciones por un lado y los datos por otro lado (modelo Harvard). Las caché tienen éxito gracias al principio de
localidad de la referencia.
Las caché se organizan en líneas, que contienen un bloque traído de memoria principal.
Existen tres técnicas para acceder al contenido de una línea de caché desde el procesador:
 Mapeo directo
 Asociativa
 Asociativa por conjuntos
Una técnica muy usada para los reemplazos es el algoritmo LRU (menos recientemente utilizada).

12
La actualización de las modificaciones en caché se pueden realizar en memoria principal en dos momentos:
 Escritura inmediata: cada vez que se produce una modificación en la línea de caché se actualiza la memoria
principal.
 Escritura diferida: la actualización se espera hasta el momento del reemplazo de la línea.
2) Predicción de ramas:
Como no se puede predecir si en el cauce habrá o no instrucciones de salto o ramificaciones, se toman decisiones en
las instrucciones de salto condicional y se supone que saltan para atrás. Luego de la decodificación, se sabe
exactamente a qué dirección saltará. Otra forma es llevar en una tabla la historia de los saltos anteriores. Con un bit se
puede indicar cuál fue la última decisión (por sí o por no). Se han ideado muchas técnicas para mejorar la predicción
(puede ser dinámica, como el caso visto; o puede ser estática para el caso de los lazos For, donde puede ayudar el
compilador.
3) Ejecución fuera de orden con cambio de nombre de registros: en muchos casos, no pueden ejecutarse las
instrucciones consecutivamente, porque puede haber dependencia entre ellas. Una solución es ir adelantando
aquéllas instrucciones en el orden que se puedan ejecutar. Para lograr esto, tendremos que esperar que las
instrucciones sean decodificadas. Hay que llevar control de cuáles son los registros del procesador que se
están usando como fuente y cuáles como destino. También se lleva control de cuáles son las unidades
funcionales que están disponibles (para los superescalares). Si las instrucciones necesitan algún registro que
está siendo usado, es posible revisarse hay algún registro desocupado. Uno de los enemigos mayores del
ejecución fuera de orden, son las interrupciones, llamadas imprecisas, que hace que no se tenga el control de
cuáles instrucciones terminaron y cuáles no. Esto sirve para cuando se retorne de la atención de las
interrupciones.
Mejoras en la arquitectura: significa diseñar sin estar atado a los problemas de compatibilidad. Fue lo que ocurrió con
los procesadores RISC.
Ejecución especulativa: la ejecución de código antes de saber si va a necesitarse se denomina ejecución
especulativa. Esto ocurre cuando se adelanta a ejecutar instrucciones de un siguiente bloque básico. Esta
técnica exige apoyo en el hardware, por lo que hay un cambio en la arquitectura.

13

También podría gustarte