Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1er Parcial Primera Parte
1er Parcial Primera Parte
Computador
Analógico Digital
Electrónico No electrónico
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.
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)
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:
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.
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
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