Organización del Computador I · Organización del Computador I Federico Yulita Segundo...

45
Organización del Computador I Federico Yulita Segundo Cuatrimestre, 2020 Esta materia la estoy cursando con Carlos López Pombo como docente de las clases teóricas, con María Elena Buemi como JTP, con Daniel Foguelman y Gustavo Hurovich como Ayudantes de Primera y con Leticia Rodríguez, Hernán Gagliardi y Augusto González Omahen como Ayudantes de Segunda. Si querés ver el resto de mis apuntes los podés encontrar en mi blog. Índice 1. Evolución Histórica de la Computadora 3 2. El Modelo de von Neumann-Turing 4 2.1. Jerarquía de Máquina ............................................ 6 3. Sistemas de Numeración 7 4. Lógica Digital 9 4.1. Álgebra de Boole ............................................... 9 4.2. Puertas Lógicas ................................................ 9 4.3. Circuitos Secuenciales ............................................ 11 5. Instruction Set Architecture 12 5.1. Subrutinas ................................................... 17 5.2. Modos de Direccionamiento ......................................... 17 6. Unidad de Control y Microprogramación 18 7. Entrada y Salida 28 7.1. Control de Dispositivos e Interrupciones .................................. 28 7.2. Conversión de Señales ............................................ 31 8. Memoria 35 8.1. Tipos de Memoria .............................................. 35 8.2. Memoria Cache ................................................ 37 9. Buses 39 9.1. Diseños y Protocolos ............................................. 39 9.2. Ejemplos ................................................... 42 1

Transcript of Organización del Computador I · Organización del Computador I Federico Yulita Segundo...

  • Organización del Computador IFederico Yulita

    Segundo Cuatrimestre, 2020

    Esta materia la estoy cursando con Carlos López Pombo como docente de las clases teóricas, con María ElenaBuemi como JTP, con Daniel Foguelman y Gustavo Hurovich como Ayudantes de Primera y con Leticia Rodríguez,Hernán Gagliardi y Augusto González Omahen como Ayudantes de Segunda. Si querés ver el resto de mis apunteslos podés encontrar en mi blog.

    Índice1. Evolución Histórica de la Computadora 3

    2. El Modelo de von Neumann-Turing 42.1. Jerarquía de Máquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    3. Sistemas de Numeración 7

    4. Lógica Digital 94.1. Álgebra de Boole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94.2. Puertas Lógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94.3. Circuitos Secuenciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    5. Instruction Set Architecture 125.1. Subrutinas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175.2. Modos de Direccionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    6. Unidad de Control y Microprogramación 18

    7. Entrada y Salida 287.1. Control de Dispositivos e Interrupciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287.2. Conversión de Señales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    8. Memoria 358.1. Tipos de Memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358.2. Memoria Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    9. Buses 399.1. Diseños y Protocolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399.2. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    1

    http://materias.df.uba.ar/rga2020c2/https://elrepositoriodefede.wordpress.com/

  • John von Neumann (1903 - 1957)

    2

  • 1. Evolución Histórica de la ComputadoraDefinimos una Computadora como una máquina digital electrónica programable para el tratamiento auto-

    mático de la información, capaz de recibirla, operar sobre ella mediante procesos determinados y suministrar losresultados de tales operaciones. Se dice que algo es Digital si su operación se basa en la utilización de valores discre-tos en contraposición al uso del espectro continuo de valores (Analógico). Un dispositivo se lo llama Electrónicosi resulta de la organización de componentes en circuitos con el objetivo de controlar y usar señales eléctricas.Ejemplos modernos de computadoras son nuestras laptops, PCs, celulares, tablets y también calculadoras y otrosdispositivos smart. En esta materia vamos a estudiar la arquitectura y la organización de computadoras. La Arqui-tectura consiste de todos los elementos que son visibles al programador: el conjunto de registro, de instrucciones,la representación de datos, los mecanismos de direccionamiento de memoria, el acceso a dispositivos de entrada yde salida, etc.. La arquitectura se encarga de describir el diseño de una computadora. La Organización se refierea cómo se implementa la arquitectura en un sistema físico: las señales de control, la tecnología de la memoria, lasinstrucciones ejecutadas por el hardware o las interpretadas por microprogramas, la implementación de operacionescomo suma y multiplicación, etc.. La organización se encarga de describir cómo funciona una computadora. Porejemplo, toda la familia de procesadores x86 de Intel comparten la misma arquitectura, ya que aseguran backwards-compatibility - es decir - se pueden ejecutar cualquier programa diseñado para esta arquitectura sin importar quetan viejo sea (DOS con un Intel Core i7). Sin embargo, para cada procesador la organización es distinta, ya queesto es lo que permite que haya mejora e innovación en cada nuevo procesador. Esta distinción entre arquitecturay organización no siempre es clara, ya que a veces ambas se condicionan entre sí.

    Es imposible determinar con exactitud dónde terminan los problemas de hardware y empiezan los problemas desoftware ya que todo en la computación está armado a través de estándares y algoritmos. Cualquier programa queusemos está descrito a través de algoritmos mediante algún lenguaje de programación que, a su vez, está descritomediante otros algoritmos. Las computadoras son implementaciones de algoritmos que corren otros algoritmos. Deaquí se forma el Principio de Equivalencia entre Hardware y Software, que establece que cualquier cómputoque puede ser realizado por intervención de una pieza de software puede ser realizado por un artefacto de hardwarey viceversa.

    Al nivel más básico existen tres componentes principales de toda computadora:

    1. Un procesador que interprete y ejecute programas.

    2. Una memoria para guardar datos y programas.

    3. Un mecanismo de transferencia de los datos desde y hacia el mundo exterior.

    Esta forma de ver una computadora es lo que se llama la Visión Funcional de una computadora. Sin embargo,existe la Visión Estructural que se fija en la forma en que las componentes se relacionan entre sí para llevar acabo alguna tarea. En la Figura 1 puede verse una imagen de la visión estructural de una computadora.

    La evolución histórica de la computadora se divide de forma general en cinco generaciones. Para esta parterecomiendo ver las dispositivas de la primera clase teórica ya que tiene muchos ejemplos con fotos y demás que novale la pena que transcriba a este documento.

    Generación 0 (hasta el 1945) Esta generación consiste de computadoras mecánicas o electromecánicas. Algunosejemplos de computadoras de esta generación son el ábaco, las máquinas de Babbage (1920), y sistemas basados enrelays como la Harvard Mark I. Algunas figuras importantes de esta generación son Charles Babbage (padre de lacomputación) y Ada Lovelace (madre de la computación, la primera programadora).

    Generación 1 (1945 - 1954) Esta generación consiste de computadoras que utilizan válvulas de vacío o tableroscon conectores. Una Válvula de Vacío es un dispositivo que consiste de un ćatodo y un ánodo que usa el fenómenode emisión termoiónica de electrones desde un ćatodo caliente para controlar la corriente. En 1904 John AmbroseFleming usó una válvula de vacío para crear un diodo. Luego en 1906 Lee de Forest la usó para crear un triodo, quelogró reemplazar los relays como una opción mas duradera. Algunos ejemplos de computadoras de esta generaciónson la Atanossof Berry (1942), la Colossus (1945), la Enigma (1945), la ENIAC (1946). Algunas figuras importantesde esta generación son John von Neumann y Alan Turing. Además, von Neumann formó lo que se conoce como laarquitectura de von Neumann a partir de la cual se construyeron algunas máquinas como la ENIAC. Alan Turing

    3

  • Figura 1: Visión estructural de una computadora.

    creó el concepto de Máquinas de Turing, que fue implementada (junto con la arquitectura de von Neumann) en laManchester Mark I, la IAS y la UNIVAC.

    Generación 2 (1955 - 1965) Esta generación consiste de computadoras que utilizan transistores y hace cómputopor lotes. El Transistor es un dispositivo eléctrico que usa semiconductores para realizar el mismo trabajo que unaválvula de vacío pero de forma más eficiente. Los transistores permitieron la Microprogramación, que consisteen generar una abstracción de combinaciones de señales que llevan a cabo tareas como lectura de instruccionesdesde la memoria, decodificación de instrucciones usando la ALU (Arithmetic Logic Unit), lectura de datos desdela memoria, escritura en la memoria, etc.. Estos microprogramas son una abstracción del sistema físico que son lasseñales, pero no se considera software porque se trata de la manipulación de señales mientras que los programasson más abstractos aún. Los microprogramas son propios a la organización del computador. En 1957 nace el primercompilador de Fortran para la IBM 704. El Compilador es un programa que traduce del lenguaje de programaciónque nosotros podemos entender a lenguaje de máquina. Luego en 1959 surgen los Mainframes que son ...

    Generación 3 (1966 - 1980) Esta generación consiste de computadoras que tienen circuitos integrados (o chips)y programas almacenados. Estas computadoras permiten la Multiprogramación que consisten en administrarmúltiples programas para que se ejecuten uno detrás del otro de manera automática. En 1968 se funda Intel y en1972 papi Dennis Ritchie crea C.

    Generación 4 (desde el 1980) Esta generación consiste del surgimiento de las computadoras personales (PCs) ylas primeras empresas para este mercado cono Microsoft y Apple. En 1982 surge la querida Commodore 64. La Leyde Moore establece que la cantidad de transistores por chip se duplican por año y la Ley de Rock que el costode equipamiento de necesario para construir semiconductores se duplica cada cuatro años.

    2. El Modelo de von Neumann-TuringEn 1928, David Hilbert presentó un programa con los objetivos de la matemática para los próximos años en el

    Congreso Internacional de Matemáticos. Su programa consistía de cinco puntos principales:

    1. Formalizar la matemática: Toda proposición debe ser escrita en un lenguaje formal y manipulada porreglas bien definidas.

    2. Completitud: Este formalismo debe permitir demostrar toda proposición verdadera.

    4

  • 3. Consistencia: Este formalismo no puede permitir demostrar una proposición falsa.

    4. Conservación: Cualquier resultado sobre “objetos reales” obtenido a partir de razonar sobre “objetos ideales”puede ser demostrado sin recurrir a “objetos reales”.

    5. Decidibilidad: Debe exisitir un algoritmo que determine la verdad o falsedad de toda proposición del lenguaje.

    Sin embargo, en 1931 Gödel publicó un paper llamado “Über formal unentscheidbare Sätze der Principia Mathema-tica und verwandster Systeme” donde demuestra su Teorema de Incompletitud que establece que para todo sistemaaxiomático formal existen proposiciones verdaderas que no pueden ser demostradas bajo dicho sistema. Es decir, lamatemática no está completa. Luego en 1936 Alonzo Church crea el cálculo de lambda y muestra que no existe unasolución general para el problema de la decisión. Independientemente ese mismo año Alan Turing publica un paperllamado “On computable numbers, with an application to the Entscheidungsproblem” donde conceptualiza lo que sellama una “Máquina de Turing” y demuestra que efectivamente existen algoritmos que no pueden ser determina-dos verdaderos o falsos (Halting Problem). Una Máquina de Turing modela matemáticamente un mecanismo demanipulación de símbolos. Esta cuenta con:

    Cinta: Una secuencia infinita de celdas capaces de contener (o no) un símbolo.

    Cabeza: Un dispositivo que puede leer el contenido de una celda o escribir uno nuevo. Esta cabeza puedemoverse hacia la izquierda o hacia la derecha hacia la celda contigua.

    Registro de Estado: Un registro que guarda el estado actual de la máquina, puediendo tener un conjuntofinito de distintos posibles estados.

    Tabla de Instrucciones: Una tabla que dado el estado actual y el contenido de la celda donde esté la cabezapueda cambiar (o no) el contenido de la celda, moverse hacia la izquierda o derecha y cambiar de estado.

    Cualquier sistema que pueda simular una máquina de Turing se la llama Turing Completo.La idea de von Neumann sobre las computadoras es que debían ser capaces de tener una memoria donde

    almacenaran programas que puedan ser ejecutados. El modelo de von Neumann-Turing consiste en los siguientespuntos:

    Los programas y los datos se almacenan en la misma memoria sobre la que se puede leer y escribir.

    La operación de la máquina depende del estado de la memoria.

    El contenido de la memoria es accedido a través de su posición.

    La ejecución es secuencial a menos que se indique lo contrario.

    La arquitectura de von Neumann consiste de tres componentes principales:

    CPU: (Central Processing Unit) Unidad de procesado de datos.

    Memoria: Unidad capaz de almacenar información en sistema binario.

    Sistema de Entrada y Salida: Unidad capaz de lidiar con las instrucciones que el usuario le dé a la máquinay con los resultados que esta devuelva.

    Dentro del CPU existen otras tres componentes principales:

    Unidad de Control: Se conecta a la memoria mediante un único camino. Coordina la labor de los compo-nentes de forma que las instrucciones y los datos puedan ser transgferidos entre la memoria y los registros.Además, decodifica instrucciones de los programas y las transforma en órdenes a los componentes. Esta unidadpuede ser implementada en hardware o puede ser microprogramada. La unicidad del camino con la memoriafuerza a la alternación entre ciclos de lectura y de escritura, lo que se conoce como Cuello de Botella devon Neumann.

    ALU: (Arithmetic-Logic Unit) Se encarga de realizar las operaciones matemáticas y lógicas entre los datos.También, en caso de direccionamientos complejos, se encarga de calcular los desplazamientos de memoria.

    5

  • Figura 2: Esquema de la arquitectura de von Neumann.

    Registros: Pequeñas unidades de memoria de acceso rápido.

    En la Figura 2 puede verse un esquema de la arquitectura de von Neumann. Entonces, para funcionar la arquitecturade von Neumann requiere de Ciclos de Instrucción. Estos ciclos constan también de tres partes:

    Fetch: Se obtiene una instrucción de la memoria. La ubicación de esta instrucción en la memoria está deter-minada por un contador. Entonces, la ALU luego se encarga de incrementar este contador para reiniciar elciclo con la siguiente instrucción.

    Decode: La instrucción obtenida se decodifica en señales que luego se almacenan en registros.

    Execute: Luego de haber decodificado la instrucción se ejecutan las operaciones en los registros y se guardael resultado de vuelta en la memoria.

    2.1. Jerarquía de MáquinaUna computadora se puede dividir en siete niveles de abstracción. Cada nivel funciona como una máquina

    abstracta que oculta la capa anterior y es capaz de resolver distintos tipos de problemas. La capa anterior se utilizacomo servicio.

    Nivel 0 Este es el nivel más bajo de la jerarquía. Consiste de circuitos, compuertas lógicas y manipulación explícitade bits. Es el nivel más bajo ya que lidia explícitamente con el sistema físico que es la computadora.

    Nivel 1 Este nivel consiste de la unidad de control y del microcódigo, ya que utiliza el hardware a través de ciclosde instrucciones para ejecutar programas.

    Nivel 2 Este nivel consiste de lo que se llama “Lenguaje de Máquina” e ISA (Instruction Set Architecture). ElLenguaje de Máquina consiste en la interpretación y manipulación de cadenas de bits como instrucciones quepueden ser comprendidas por la unidad de control. Estas instrucciones son específicas a la arquitectura de la máquinaya que asume la existencia de registros, señales, etc.. Además, este lenguaje no necesita ser compilado ni ensambladoy puede ser almacenado en la memoria y ejecutado diractamente.

    Nivel 3 Este nivel consiste del software del sistema, de las bibliotecas y el sistema operativo. Este nivel proporcionala estructura sobre la cual procesos pueden ser ejecutados y brinda servicios de acceso a dispositivos de entrada yde salida.

    6

  • Nivel 4 Este nivel consiste del Lenguaje de Ensamblado. Este es un lenguaje de programación muy cercano ala arquitectura de la computadora que es producido por compiladores con el objetivo de traducir otros lenguajesde programación al lenguaje de máquina.

    Nivel 5 Este nivel consiste de los lenguajes de programación de alto nivel, como C++, Python, Javascript, etc..Estos lenguajes permiten la programación de software de propósito general.

    Nivel 6 Este es el nivel más alto de la jerarquía y consiste de los programas ejecutables. El usuario ejecutaprogramas con cierta finalidad y la máquina le provee una interfaz con la que el usuario puede usarla.

    3. Sistemas de NumeraciónLlamamos un Bit a la mínima unidad de información que es un dígito binario (binary digit). Llamamos un

    Byte a 8 bits. Entonces, para poder representar números que una máquina puede interpretar debemos definir unsistema de numeración capaz de esto. Ya que la mínima unidad de información es un dígito binario entonces vamosa usar el sistema binario para representar magnitudes. Consideramos:

    (an . . . a1a0.a−1 . . . a−m)b = anbn + · · ·+ a1b + a0 + a−1b−1 + · · ·+ a−mb−m

    Estos sistemas se llaman Sistemas Posicionales. Llamamos b la Base del sistema y llamamos al punto que apareceentre a0 y a−1 el Punto Fraccionario. Entonces, el Sistema Decimal es el sistema de base b = 10 (con dígitos 0,1, 2, 3, 4, 5, 6, 7, 8 y 9) y el Sistema Binario es el de base b = 2 (con dígitos 0 y 1). También, existen el SistemaOctal de base b = 8 (con dígitos 0, 1, 2, 3, 4, 5, 6, y 7) y el Sistema Hexadecimal de base b = 16 (con dígitos 0,1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F). Obviamente hay infinitas bases posibles, pero estas cuatro son las máscomunes que se usan en distintos contextos. Matemáticamente n y m pueden ser arbitrariamente grandes pero pararepresentar números en una computadora va a ser necesario fijar estos valores a conveniencia. Algunos ejemplos denúmeros en estos sistemas son:

    (1)10 = (1)2 = (1)8 = (1)16(20)10 = (10100)2 = (24)8 = (14)16(307)10 = (100110011)2 = (463)8 = (133)16(44.5)10 = (101100.1)2 = (54.4)8 = (2C.8)16

    Ahora, para representar números con signo lo que podemos hacer es usar el dígito más a la izquierda: si es 0 elnúmero es positivo y si es 1 es negativo. Sin embargo, notemos que con este sistema existen dos representacionesdel número 0: +0 y −0.

    Consideremos la operación suma. Consideremos la suma de dos números de tres dígitos: 358 y 823:

    13 5 8

    + 8 2 31 1 8 1

    Notemos que esta suma devuelve un número que es de cuatro dígitos, un dígito más que los tres que teníamos. Estenuevo dígito necesario para el resultado de la suma se lo llama Overflow. Esto puede ser un problema, ya querecordemos que el n es una cantidad acotada que representa la cantidad de dígitos que la computadora usa pararepresentar un número. En este caso si n = 3 entonces este nuevo número, resultado de la suma de otros dos queestaban correctamente representados, no puede ser representado por esta computadora. Otra situación en la que seencuentra esta limitación en la representación de números es en los números fraccionarios con infinitos dígitos. Paraestos números simplemente se redondean hasta donde dé la capacidad de representación de la computadora. Parael overflow se tiene un dígito especial en el procesador que vale 0 cuando no hay overflow y 1 cuando hay. De estamanera se puede registrar cuando hay un overflow.

    Para representar números negativos lo que se hace es restar el complemento del número más grande posible.Esto se llama el Sistema de Complemento, ya que dado un número n y el número más grande posible bk − 1

    7

  • entonces el complemento de n es −n = bk − 1− n. Este máximo número va a ser propio del diseño del procesador.Veamos algunos ejemplos considerando solo tres dígitos:

    (−1)10 = (998)10(−52)10 = (947)10(−499)10 = (500)10(−0)10 = (999)10

    En este sistema también existen dos maneras de representar el número 0: 0 y bk − 1.Notemos que entonces para hacer cualquier operación matemática necesitamos solo dos circuitos: uno que permita

    sumar y otro que permita complementar. Notemos que para hacer una resta basta con hacer una suma con el segundonúmero complementado:

    (167)10 − (52)10 = (167)10 + (947)10= (1114)10

    Notemos que en este caso hay overflow. Sin embargo, para obtener el resultado correcto de la resta debemosAcarrear este dígito - es decir - lo sacamos de enfrente y lo sumamos al número que queda:

    (167)10 − (52)10 = (114)10 + (1)10= (115)10

    Este es el algoritmo de resta: se suma un número con su complemento y se acarrea. Sin embargo, notemos que elcomplemento como le venimos representando hasta ahora en base 10 implica una resta. Esto no nos sirve, ya quejustamente queremos evitar tener que diseñar un circuito que reste. Sin embargo, el complemento en base binariaes mucho más simple ya que simplemente hay que invertir los dígitos. Veamos un ejemplo:

    (−101)2 = (1111)2 − (0101)2= (1010)2

    Notemos que 1010 es igual al 0101 pero con los dígitos invertidos (0s por 1s y 1s por 0s). Esto se puede hacer conun circuito muy fácilmente.

    Sin embargo, lo que vamos a hacer es usar el menor número no representable en vez del mayor número represen-table. Esto nos va a dejar un rango de números de

    [−2n−1, 2n−1 − 1

    ]. De esta forma se rompe la simetría del rango

    pero nos deja una sola posible representación para el número 0, ya que el −0 ya no existe porque nos da un númerono representable. El problema es que ahora el complemento se nos complica levemente. Lo que hay que hacer ahoraes invertir cada dígito y sumar 1. Entonces ahora (−0101)2 = (1011)2.

    Para multiplicar números es bastante simple, ya que hay que hacerlo como lo hacíamos en la primaria:

    1 0 0 1× 1 1 0 1

    1 0 0 1+ 0 0 0 0 −

    + 1 0 0 1 − −+ 1 0 0 1 − − −

    1 1 1 0 1 0 1

    Básicamente se va multiplicando por cada dígito del segundo número y se va agregando un 0 (o una raya como lorepresenté yo) cada vez que avanzamos un dígito. Al final hay que sumar todo. Ya que los números son siempre 0sy 1s las multiplicaciones y las sumas son bastantes fáciles.

    8

  • 4. Lógica Digital4.1. Álgebra de Boole

    Necesitamos representar la información de alguna forma en circuitos. Ya mencionamos que vamos a trabajar ensistema binario con bits, que son la mínima unidad de información. Entonces vamos a usar el esquema CMOS, queinterpreta un voltaje entre 0VDD y 13VDD, donde VDD es el voltaje de alimentación, como un 0 y voltajes entre23VDD y 1VDD como un 1. Ya que este sistema tiene dos posibles valores entonces podemos interpretar un 1 comoun verdadero y un 0 como un falso, lo cual nos posibilita el uso de operaciones lógicas al sistema. En particular,podemos usar el Álgebra de Boole que modela matemáticamente el razonamiento proposicional. Si X e Y sonelementos binarios del álgebra de Boole entonces representamos X + Y como el operador análogo al operador lógico∨, X · Y como el operador análogo al operador lógico ∧ y X̄ como el operador análogo al operador lógico ¬. Lasoperaciones básicas del álgebra de Boole son:

    X Y X̄ X + Y X · Y0 0 1 0 00 1 1 1 01 0 0 1 01 1 0 1 1

    Veamos algunas propiedades de este álgebra:

    Identidad: 1 ·X = X ∧ 0 + X = X.

    Neutro: 0 ·X = 0 ∧ 1 + X = 1.

    Idempotencia: X ·X = X ∧X + X = X.

    Inversa: X · X̄ = 0 ∧X + X̄ = 1.

    Conmutatividad: X · Y = Y ·X ∧X + Y = Y + X.

    Distributividad: X + (Y · Z) = (X + Y ) · (X + Z) ∧ (X + Y ) · Z = X · Z + Y · Z.

    Asociatividad: (X · Y ) · Z = X · (Y · Z) ∧ (X + Y ) + Z = X + (Y + Z).

    Absorción: X · (X + Y ) = X.

    De-Morgan: ¯X · Y = X̄ + Ȳ .

    Llamamos la Forma Conjuntiva Normal como la forma de expresar una función del álgebra de Boole a travésde la conjunción de disyunciones, es decir, productos de sumas. Por ejemplo:

    f (X, Y, Z) = (X + Y ) · (X + Z) · (X + Y + Z)

    Llamamos la Forma Disyuntiva Normal como la forma de expresar una función del álgebra de Boole a travésde la disyunción de conjunciones, es decir, suma de productos. Por ejemplo:

    f (X, Y, Z) = X · Z + Y · Z

    4.2. Puertas LógicasPara representar estas operaciones del álgebra de Boole físicamente se usan Puertas Lógicas. Estas puertas

    lógicas son dispositivos electrónicos que se arman usando transistores. Un Transistor es, a su vez, un dispositivoelectrónico que funciona usando semiconductores para controlar el flujo de corriente a través del circuito. En laFigura 3 puede verse un dibujo de un transistor real y el diagrama circuital de un transistor. Como se puede ver enla figura hay tres partes principales en un transistor: el colector, la base y el emisor. Si se tiene un voltaje mayor alcrítico en la base entonces el transistor permite el flujo de corriente del colector al emisor. De esta forma, se puedenarmar las compuertas lógicas que representen las operaciones booleanas. Para evitar cortocircuitos se puede usar un

    9

  • Figura 3: Un transistor.

    Figura 4: Buffer de tres estados.

    Figura 5: Semi-sumador.

    10

  • Figura 6: Sumador.

    Buffer de Tres Estados (Three-State Buffer) que actúa como switch en el circuito. En la Figura 4 puede verseel diagrama circuital de este componente y el análogo que forma al switch. Usando estas componentes eléctricasuno pude armar circuitos que hagan las operaciones matemáticas y lógicas que queramos.

    En la Figura 5 podemos ver el diagrama circuital de un Semi-Sumador. Dadas dos entradas A y B, Srepresenta la suma de ambas entradas y C representa el acarreo de la suma. En la Figura 6 puede verse el diagramacircuital de un Sumador. Este sumador toma tres entradas: A, B y un acarreo Cin. Entonces, este sumador devuelvela suma A + B junto con un acarreo Cout pero a diferencia del semi-sumador tiene otra entrada que es Cin queconsidera si hubo un acarreo previamente. Otro circuito importante es el Decodificador. Este circuito tiene nentradas y 2n salidas. Cada salida representa una única combinación de valores en las entradas. De esta forma,sabiendo los valores de salida podemos decodificar cuáles son los valores de entrada. En la Figura 7 puede verseel diagrama circuital de un decodificado 2-a-4. Un Codificador hace el trabajo inverso. Luego un Multiplexor esun circuito que selecciona una de n entradas a partir de log2 (n) líneas de control. El Demultiplexor es un circuitoque hace lo opuesto. El multiplexor es útil para implementar funciones booleanas. En la Figura 8 puede verse unaALU que toma entradas de 1bit y puede sumar las entradas o hacer operaciones lógicas entre ellas.

    4.3. Circuitos SecuencialesEl objetivo de losCircuitos Secuenciales va a ser lograr almacenar información en lo que llamaremos memoria.

    Los Flip-Flops son circuitos secuenciales que permiten guardar el estado de un bit, es decir, guardar un valor.Estos flip-flops van a servir para construir memorias. El nombre proviene del hecho que guardan un valor hasta quese lo cambia por otro. En la Figura 9 puede verse un Flip-Flop RS (Reset-Set) que es el más simple ejemplo deun flip-flop. La tabla de verdad de este circuito es:

    S R Q (t) Q (t + dt)0 0 0 00 0 1 10 1 0 00 1 1 01 0 0 11 0 1 11 1 0 Indefinido1 1 1 Indefinido

    Notemos que cuando R = S = 0 el circuito almacena el estado de Q y cuando R = S = 1 el circuito está en unestado indefinido, ya que Q = Q̄ = 0. El nombre Reset-Set viene de que si R = 1 y S = 0 entonces el circuito seresetea a 0 y si R = 0 y S = 1 entonces el circuito se setea a 1.

    11

  • A 2-to-4 line single bit decoder Truth Table

    Minterm Equations

    Figura 7: Decodificador.

    En estos circuitos secuenciales se suele usar una compuerta AND como Habilitación de Datos. Esto nospermite controlar cuándo queremos leer y grabar la información almacenada, ya que una de las entradas de lacompuerta es la de control (notada como enable). Entonces, lo que podemos hacer es cambiar los NORs del circuitoa ANDs con las entradas negadas y usar dos ANDs para habilitación de datos como se ve en la Figura 9. Entonces,podemos mandar una señal oscilante de ceros y unos a cierta frecuencia por el enable para establecer periodos deescritura y de lectura. Cuando el enable (de ahora en más clock) está en 1 entonces podemos escribir en la memoriay cuando está en 0 solo podemos leer la memoria.

    Otro flip-flop es el Flip-Flop D. Este circuito toma una sola entrada (sin contar el clock) y almacena el valorde entrada. Con este flip-flop podemos armar un Registro de Memoria encadenando estos flip-flops. Es necesarionegar el clock al pasar de un flip-flop a otro para alternar los estados de lectura y escritura y asegurarse de que elvalor de uno se transfiera al otro sin sobreescribirse durante el mismo ciclo de escritura. Es decir, nos asegura quela velocidad de propagación de la señal sea menor que la del ciclo.

    Con todo esto podemos armar una Celda de Memoria como se ve en la Figura 11. in es el circuito de entrada,out el de salida, Clk es el clock, select es una señal que habilita los datos de entrada y salida (habilita la celda) yR/W es una señal que determina si el siguiente ciclo de reloj es de escritura o de lectura. En la Figura 12 puedeverse el circuito de una memoria de 4 palabras de 3 bits. Cada BC es una celda de memoria. El decodificador nosasigna una palabra en base a las dos entradas, que son la dirección de memoria a la que queremos acceder.

    5. Instruction Set ArchitectureLa ISA (Instruction Set Architecture) es el conjunto de instrucciones que definen la arquitectura del computador.

    Haciendo referencia a los niveles de jerarquía, la ISA vive en el nivel 2 de jerarquía. Estas instrucciones que definenla ISA son utilizadas por un programador de bajo nivel para utilizar las componentes que construímos en el capítuloanterior. La ISA es el límite entre el hardware y el software y utiliza la organización para definir la arquitectura delsistema.

    Existen elecciones que se deben tomar al definir la ISA. Una de las elecciones a tomar es la complejidad delconjunto de instrucciones. A mayor cantidad de instrucciones el rendimiento es peor, ya que hay más instrucciones

    12

  • Figura 8: ALU de 1-bit.

    13

  • Figura 9: Flip-Flop RS (Reset-Set).

    Figura 10: Flip-Flop RS con habilitación de datos.

    Figura 11: Celda de Memoria.

    14

  • Figura 12: Memoria de 4 palabras de 3 bits.

    que decodificar, pero la programación es más simple, ya que hay más instrucciones disponibles. Esto se llamaComplex Instruction Set Computer, o CISC. Es lo opueto a Reduced Instruction Set Computer, o RISC.Otras elecciones a tomar es si la longitud de las instrucciones es fija o variable, la cantidad de memoria utilizadapor un programa, los tipos de datos disponibles y sus representaciones, Big Endian vs. Little Endian, etc. En estamateria vamos a ver tres arquitecturas distintas:

    1. Stack Architecture: Se cuenta con una pila y las operaciones se realizan sobre los elementos almacenadosen ella accesibles desde el tope.

    2. Accumulator: Se cuenta con un registro distinguido y las operaciones tienen como operando implícito dichoregistro. De ser necesario otro operando se proporciona su dirección en la memoria y el resultado se coloca enel acumulador.

    3. General Purpose Registers: Se cuenta con un banco de registros y las operaciones se realizan entre ellosasí que todos los operandos, y el destino del resultado, son explícitos.

    Accumulator (MARIE) MARIE (Machine Architecture that is Really Intuitive and Easy) es un ejemplo dearquitectura accumulator. Puede verse un esquema de esta arquitectura en la Figura 13. Usa representaciónbinaria de complemento a 2, memoria de 4K accedida por palabras de 16 bits, instrucciones de tamaño fijo de 16bits (4 para el código y 12 para las direcciones), una ALU de 16 bits y 7 registros para control y movimiento dedatos.

    General Purpose Architecture Esta arquitectura usa representación binaria en complemento a 2, memoria de 64Kaccedida por palabras de 16 bits, instrucciones de tamaño variable de 16, 32 o 48 bits dependiendo de si es de 0, 1o 2 operandos (4 para el código de operación y 12 para el operando 1, 16 para el operando 2 y 16 para el operando3), una ALU de 16 bits y 11 registros, 8 para uso general (R0 - R7) y 3 para control (PC, SP y Flags).

    15

  • Figura 13: MARIE.

    Figura 14: Stack Architecture.

    16

  • Stack Architecture Esta arquitectura fue creada por Jan Łukasiewicz, un matemático y filósofo polaco. Él inventóla notación polaca inversa, que usa otro orden para las operaciones. Por ejemplo, la suma se escribe como XY +, oX · (Y + Z) se escribe como XY Z + ·. Está bueno porque no requiere paréntesis para eliminar ambigüedad. Las dosoperaciones principales de esta arquitectura es Push y Pop. Push permite colocar un dato en la primera posiciónlibre y Pop permite retirar el último dato que se encuentra en la pila. En la Figura 14 puede verse un esquema deesta arquitectura.

    5.1. SubrutinasUna Subrutina es una construcción que permite reutilizar código a partir de la modularización de fragmentos

    que son invocados y ejecutados para luego retornar a la ejecución del programa que lo invocó. Los sistemas operativosorganizan la memoria como una pila que posibilita la invocación de subrutinas, preservado la información delprograma que la invocó para que la ejecución pueda retornar a la instrucción siguiente a dicha invocación.

    5.2. Modos de DireccionamientoVamos a definir 6 básicos modos de direccionamiento con los cuales vamos a acceder a distintas direcciones de

    memoria. El acceso a memoria se hace mediante un código del formato:

    |OpCode|Op1|Op2|Op3|

    Cada una de las partes entre barras consiste de instrucciones de 16 bits. La primera nos va a indicar el modo dedireccionamiento y luego cada operando que vamos a utilizar. La naturaleza de cada operando va a ser interpretadapor el modo de direccionamiento. Estos modos son los siguientes:

    Inmediato: La codificiación de este modo es 000000. Representa acceder al valor de la variable guardada encierta posición. Esto es lo que las constantes representan. Notamos c16.

    Directo: La codificación de este modo es 001000. Representa acceder directamente a la dirección de memoria.Esto es lo que las variables representan. Notamos [c16].

    Indirecto: La codificación de este modo es 011000. Representa acceder a una dirección de memoria que“apunta” a otra dirección de está guardado el dato de interés. Esto es lo que los punteros representan.Notamos [[c16]].

    Registro: La codificación de este modo es 100rrr. Representa utilizar el valor almacenado en el registro rrr.Notamos Rrrr.

    Indirecto con Registro: La codificación de este modo es 110rrr. Representa acceder a la posición dememoria del registro. Notamos [Rrrr].

    Desplazamiento (o Indexado): La codificación de este modo es 111rrr. Representa acceder a una posiciónde memoria del registro con cierto corrimiento. Notamos [Rrrr + c16].

    Los primeros tres y los últimos tres son análogos entre sí donde en los primeros uno tiene un operando en lainstrucción y en los últimos uno utiliza un registro. Veamos algunos ejemplos:

    Inmediato:

    MOV R1, 230: |0001|100001|000000|(230)2|

    Directo:

    MOV R1, Var: |0001|100001|001000|@Var|

    Indirecto:

    MOV R1, [Var]: |0001|100001|011000|@Var|

    17

  • La diferencia entre el acceso directo e indirecto es que el indirecto va a acceder a una posición de memoria que leva a devolver otra posición de memoria donde se va a guardar una variable.

    Registro:

    MOV R1, R5: |0001|100001|100101|

    Indirecto con Registro:

    MOV R1, [R5]: |0001|100001|110101|

    Desplazamiento:

    MOV R1, [R5+1F3D]: |0001|100001|111101|1F3D|

    La Ortogonalidad de la ISA establece que es posible utilizar cualquier modo de direccionamiento con cualquieroperación. Esto me permite tener un montón de posibles instrucciones. Si n es el número de instrucciones, m elnúmero de modos de direccionamiento y k el número de operandos entonces hay n · mk distintas instruccionesposibles. Esto hace que sea mucho más cómoda la programación pero hace que la implementación para la ALU seacostosa. Ya que no todas las operaciones requieren de la misma cantidad de operandos entonces resulta útil usarcódigos de operación variables para extender la cantidad de posibles operaciones. Para esto consideremos operandosy un código de 4 bits. Si usamos tres operandos entonces podemos usar:

    0000|R1|R2|R3 - 1110|R1|R2|R3

    Esto me da 15 posibles instrucciones de 3 operandos. Nos reservamos el código que empieza con 1111 para querepresente que el siguiente operando es parte del código. Entonces, para 2 operandos tenemos:

    1111|0000|R1|R2 - 1111|1101|R1|R2

    De esta forma tenemos 14 posibles instrucciones de 2 operandos. Luego para 1 operando usamos:

    1111|1110|0000|R1 - 1111|1111|1110|R1

    Esto nos habilita 31 instrucciones de 1 operando. Finalmente, para operaciones sin operandos tenemos:

    1111|1111|1111|0000 - 1111|1111|1111|1111

    Esto nos habilita 16 operaciones son operandos.

    6. Unidad de Control y MicroprogramaciónLa labor de la unidad de control va a ser administrar las instrucciones que el CPU debe ejecutar. La arquitectura

    que vamos a considerar es MIPS (Microprocessor without Interlocked Pipeline Stages). Consta de un procesadorRISC con 32 registros de propósito general y 3 tipos de instrucciones de 32 bits. El program counter es de 32 bits, los4 bits más significativos dividen la memoria en Reserved, Text, Data y Stack, los siguientes 26 bits son la direcciónrelativa en dicho espacio y los 2 bits menos significativos son 00, ya que nos permiten alinear a palabras. Esto sehace porque siempre queremos acceder a palabras de 32 bits, así que las alineamos con el 00 para nunca acceder auna dirección del medio de la palabra.

    Las instrucciones se dividen en las siguientes categorías:

    1. CPU Instructions: Loads, Stores, ALU, Shifts, Multiplicación, División, Jump, Branch y Exception.

    2. Floating-Point Unit Instructions: Arithmetic, Data Transfer y Branch.

    18

  • Figura 15: Formato de los tres tipos de instrucciones de la arquitectura MIPS.

    Figura 16: Instrucciones MIPS que vamos a considerar.

    19

  • El ciclo de ejecución de una instrucción MIPS consta de 5 etapas: Fecth (IF), Decode (ID), Execution (EX), lecturade memoria (MEM) y escritura de memoria (WB). Cada instrucción implementada en MIPS es un microprograma.En la Figura 15 puede verse el formato de las tres instrucciones.

    Un microprograma ejecuta microoperaciones que permiten mover datos entre registros y memoria. La ejecuciónde estas microoperaciones presenta una precedencia temporal derivada de la utilización múltiple de recursos. Ellenguaje para los microprogramas lo llamamos RTL (Register Transfer Language). Por ejemplo, si queremos hacerfetch de un instrucción en la arquitectura de MARIE entonces en RTL lo escibimos como:

    IR←Mem[PC]PC←PC+4

    Vamos a considerar solo 6 instrucciones del conjunto de instrucciones MIPS para determinar el camino de datos. Enla Figura 16 se pueden ver las instrucciones que vamos a implementar en RTL y su codificación para la arquitecturaMIPS.

    Entonces, veamos cómo implementamos la suma y resta:

    Add y SubT1: IR←Mem[PC]

    PC←PC+4T2: A←R[rs]

    B←R[rt]T3: ALUOut←A±BT4:T5: R[rd]←ALUOut

    Cada etapa del ciclo de instrucción se representa con el label con T en su respectivo orden. Entonces, para sumaro restar la operación está codificada con el código de operación, seguido por 5 bits que llamamos rs, luego otros 5bits que llamamos rt , luego otros 5 bits que llamamos rd y finalmente 11 bits que en este caso no nos importan. rty rs van a ser las direcciones de memoria donde los valores A y B que queremos sumar o restar están almacenadosy rd va a ser la dirección de memoria donde vamos a almacenar el resultado de la suma. Entonces, en la etapa defetch queremos cargar la instrucción en el registro de instrucciones IR e incrementar el program counter PC. Enla etapa de decode vamos a setear las variables A y B (que representan registros de entrada de la ALU) que vamosa sumar o restar. En la etapa de execution vamos a hacer la suma o resta y obtener su resultado por la salida dela ALU (ALUOut es el registro de salida de la ALU). En la etapa de lectura de memoria no vamos a hacer nada.Finalmente, en la etapa de escritura de memoria vamos a tomar la salida de la ALU y vamos a almacenar su valor.Esto es lo que el código que escribimos en RTL significa.

    Ahora veamos el almacenamiento:

    LoadT1: IR←Mem[PC]

    PC←PC+4T2: A←R[rs]

    B←R[rt]T3: ALUOut←A+sing_ext(IR[15..0])T4: MDR←Mem[ALUOut]T5: R[rt]←MDR

    StoreT1: IR←Mem[PC]

    PC←PC+4T2: A←R[rs]

    B←R[rt]T3: ALUOut←A+sing_ext(IR[15..0])T4: Mem[ALUOut]←BT5:

    20

  • Notemos que para esta operación cargamos al registro B de la ALU el contenido del registro rt cuando no hacíafalta. Esto lo hicimos para que las dos primeras etapas sean idénticas a las de la suma y resta, ya que esto va a hacerque el diseño de la lógica de control sea mucho más simple. Para Load, en la etapa de execution en vez de usar elregistro B vamos a sumar la extensión con signo de los últimos 16 bits de lo que esté en el código de instrucción.Luego en la etapa de lectura de memoria vamos a almacenar en el Memory Data Register (MDR) lo que haya enla memoria en la dirección que obtuvimos de la suma de la ALU. Finalmente, en la etapa de escritura de memoriavamos a escribir lo que escribimos en MDR en la etapa anterior en el registro indicado en la instrucción. Store esbastante similar a Load con la diferencia de que no tenemos que actualizar los registros.

    Veamos ahora Branch on Equal:

    BranchT1: IR←Mem[PC]

    PC←PC+4T2: A←R[rs]

    B←R[rt]ALUOut←PC+sign_ext(IR[15.00])

  • Figura 17: Implementación RTL de las instrucciones separadas en las cinco etapas.

    Usamos multiplexores para poder diferencial las entradas que provienen del PC de otras. Esto va a ser útil másadelante. Ahora, para el decode debemos considerar ambas implementaciones: la del Branch y la del resto menosJump. El diseño queda así:

    22

  • Veamos cómo va avanzando el diseño a medida que vamos agregando las etapas:

    23

  • Luego, debemos agregar la unidad de control que sea capaz de determinas las señales de control necesarias parala ejecución de cada etapa de cada instrucción. Es decir, la unidad de control va a seleccionar el flujo de datoscorrespondiente a cada etapa. Finalmente, el diseño nos queda así:

    24

  • Al hacer este diseño se tomaron varias decisiones de todo tipo, en particular qué códigos vamos a usar paraindicar distintas cosas. Por ejemplo, la señal conectada a la unidad de control llamada RegDst indica si el registroa utilizar es el rt o rd y para eso usamos un multiplexor donde el número 1 está asociado a rd y el 0 a rt. Esta esuna decisión que se tomó durante el diseño. En la Figura 18 pueden verse dos tablas que resumen las decisionestomadas durante el diseño.

    Sin embargo, notemos que falta algo más. A medida que se van ejecutando las etapas la unidad de control debereaccionar a los resultados y elegir el camino que deben tomar los datos. Para lograr esto podemos armar el siguientediagrama de flujo:

    25

  • Figura 18: Tablas de las decisiones tomadas en el diseño del computador.

    26

  • Este diagrama de flujo va a ayudarno a diseñar la unidad de control, ya que debe ajustarse a estas decisiones. Silas decisiones que tomamos fueran distintas entonces la unidad de control debería cambiar para reflejar este cambio.Entonces, ya que numeramos cada estado de la unidad de control con números entre el 0 y el 9 podemos armar unatabla que indique qué valor debe tomar cada señal de control para cada estado:

    Entonces, el diagrama de flujo con los valores de cada señal de control para cada estado posible nos queda así:

    27

  • Entonces, una vez que tenemos esto podemos armar la unidad de control. Para eso existen dos maneras distintasde hacerlo. Una manera es usando Memoria ROM (Read-Only Memory) que consiste en usar un decodificador de(en este caso) las 1024 posibles combinaciones conectando todos los cables mediante fusibles y quemando aquellos queno queremos que estén conectados. Este método es muy rápido y relativamente simple ya que consiste principalmentede conexiones entre cables pero hay mucho desperdicio, ya que la mayoría de las combinaciones de entrada no seutilizan. La otra manera consiste en usar PLA (Programmable Logic Arrays) que consiste en usar conjunciónde disyunciones de las señales para determinar la salida. Este método es relativamente lento en comparación aROM porque consiste de dos etapas (una de conjunciones y otra de disyunciones) pero es programable y no haydesperdicio. Otra posibilidad es usar microprogramación y armar un microdiseño que ejecute microinstruccionescomo sean necesarias.

    7. Entrada y Salida7.1. Control de Dispositivos e Interrupciones

    A nuestro computador le vamos a conectar dispositivos externos, llamados periféricos, que van a modificar sucomportamiento. Algunos ejemplos de estos dispositivos son el mouse, teclado, pantalla, discos de almacenamiento,impresora, etc. Estos dispositivos van a permitirle al usuario manipular la computadora en tiempo real y por lotanto necesitamos desarrollar métodos por los cuáles la computadora se va a encargar de atender estos dispositivos.Veamos entonces dos tipos distintos de acceso a entrada/salida (I/O) - es decir - dos maneras distintas de enviar yrecibir información de dispositivos periféricos.

    Una forma es establecer direcciones en la memoria principal que se van a usar solamente como lectura o escriturade dispositivos I/O. El controlador del dispositivo va a acceder a una determinada dirección cada vez que quieraleer sobre la memoria y a otra dirección cada vez que quiera escribir sobre la memoria. De esta forma se usa lamemoria principal como puente de comunicación entre el computador y el dispositivo. La otra forma es establecer

    28

  • Figura 19: Esquema de la comunicación entre el CPU y los dispositivos I/O a través de uncontrolador de interrupciones.

    instrucciones especiales que se encarguen del I/O. Podemos hacer una instrucción de In y otra de Out para ciertosdispositivos a través de un identificador específico y guardar la información en variables de la memoria principal.

    Otra cuestión importante es cómo la computadora establece una noción de importancia sobre los dispositivosI/O. Es decir, cómo el CPU se entera de un evento (un click, una tecla presionada, etc.) en algún dispositivo. Unaforma de establecer esto se llama Polling y se trata de consultar periódicamente a cada dispositivo si hubo algúnevento. El problema de este métodos es que desperdicia mucho tiempo si es que no hubo un evento. Otra opciónes usar interrupciones del CPU, donde los dispositivos mandan una señal que interrumpen al CPU para notificarlede un evento. Para esto los dispositivos se conectan a un controlador de interrupciones que se encarga de mandary recibir señales al CPU notificando eventos. En la Figura 19 puede verse un esquema de la comunicación entreel CPU y los dispositivos I/O a través de un controlador de interrupciones. Por lo general para cada dispositivoI/O se desarrollan programas llamados Drivers que la computadora ejecuta cada vez que ese dispoisitivo hace unainterrupción. Estos drivers son programas hechos para cada arquitectura y le enseñan al CPU cómo comunicarsecon cierto dispositivo, muchos drivers son genéricos para cierto tipo de dispositivos y otros que son para dispositivosmuy específicos (un lector de barras por ejemplo) necesitan instalarse manualmente, sea mediante un disco, un USBo descargando el instalador de internet.

    Consideremos el procesador Intel 8086 de la Figura 20. Notemos que tenemos un controlador de interrupcionescon un registro de interrupciones. Cada vez que un dispositivo conectado al controlador manda una señal colocaun 1 en el registro asociado a ese dispositivo. En la imagen se puede ver que el dispositivo 4 está encendido.Luego tenemos un registro máscara que indica (con un 1) cuáles son las interrupciones permitidas - es decir - quédispositivos pueden interrumpir actualmente al procesador. Esta máscara está determinada por el software quese está ejecutando en el momento. Entonces, si se hace una interrupción permitida el controlador manda la señalINTR al procesador. El procesador entonces termina la instrucción en curso, chequea la señal INTR y mira unapalabra que se llama palabra de estado (PSW). En esa palabra hay un bit denominado IF que determina si elprocesador está dispuesto a ser interrumpido. Si el procesador está dispuesto a ser interrumpido entonces le va amandar la señal INTA (Interruption Acknowledged) al controlador. Una vez que el controlador recibe esta señalmanda por el bus de datos el número del dispositivo que pide la interrupción (en este caso el 4). Este númerosirve para hallar en qué dirección está el programa que hay que ejecutar. Esto lo logra hacer ya que al prenderla máquina el sistema operativo se encarga de establecer direcciones de memoria (en este caso a partir de 0000)donde va a guardar un puntero que apunta al comienzo del programa que cada dispositivo requiere para comenzarla interrupción (driver). En este caso en la dirección 0006 tenemos guardada la dirección del comienzo del programapara manejar las interrupciones del dispositivo 4. Este lugar donde se guardan estos punteros se llama vector deinterrupción. Para calcular dónde está el puntero usa que la dirección a la que debe ir es V0 + w ∗ (n− 1), donde V0

    29

  • Figura 20: Interrupciones en el procesador Intel 8086.

    es el comienzo del vector de interrupciones, w es el número de bytes por palabra y n es la cantidad de dispositivos.En este caso V0 = 0000, w = 2 y n = 4.

    Entonces, los pasos de una interrupción para el procesador Intel 8086 son los siguientes:

    Hardware

    1. El dispositivo requiere una interrupción así que coloca un 1 en su posición del registro de interrupciones.

    2. Si el dispositivo está habilitado el controlador activa la señal de interrupción a la que se encuentra conectado.

    3. La CPU termina de ejecutar la instrucción en curso y verifica si el flag IF está encendido y si la señal INTRestá encendida. Si es así, enciende la señal INTA.

    4. El controlador envía por el bus de datos el identificador del dispositivo que produjo la interrupción.

    5. La CPU guarda el contexto del programa en la pila (PSW y PC).

    6. La CPU deshabilita las interrupciones globalmente apagando el flag IF.

    7. Se pasa el procesador a modo kernel para que la rutina ejecute con privilegios de sistema operativo.

    8. Cambia el PC a la dirección de memoria donde comienza el programa que se encarga de ejecutar la interrupcióndel dispositivo que produjo la interrupción.

    Software

    1. Se guarda la máscara de interrupciones.

    2. Se modifica la máscara a fin de habilitar selectivamente las interrupciones que permitiremos durante la eje-cución de la rutina.

    3. Se habilitan globalmente las interrupciones prendiendo el flag IF.

    30

  • Figura 21: Esquema de bloques del DMA conectado a la CPU, el bus, la memoria y el controladorde interrupciones.

    4. Se ejecuta la rutina de atención de la interrupción solicitada.

    5. Se deshabilitan globalmente las interrupciones apagando el flag IF.

    6. Se reemplaza la máscara de interrupciones con la original.

    7. Retorna de la interrupción con una instrucción que restaura el estado del programa antes del llamado (IRET).Esta instrucción restaura el PC y el PSW de la pila.

    Consideremos ahora un disco donde almacenamos información (disco rígido, CD, DVD, USB, etc.). Este dispositivoes distinto al resto ya que se va a usar para cargar la memoria con volúmenes información que son son muchomayores a los del resto de dispositivos y por lo tanto definen un tratado paradigmático. Un método que se utilizapara comunicarse con el CPU se llama PIO (Programmed Input/Output). Este método de interrupción consiste enejecutar un programa que lee el disco y coloca cada palabra en el memoria principal. Ya que el bus permite solo unapalabra entonces esto debe hacerse palabra por palabra hasta tener en la memoria todo el bloque de informaciónnecesario para la ejecución de la tarea solicitada. El programa que realiza esta tarea es interno al disco. El problemade este método de interrupción es que dejaba a la CPU ocupada por mucho tiempo, copiando información del discoa la memoria. Otro método que remediaba este problema se llama DMA (Direct Memory Access) que se utilizapara construir un subsitema que independiza a la CPU de los dispositivos que se usan para leer o escribir grandesvolúmenes de información (se usa también para impresoras). Este método consiste en un controlador (DMAC)que se va a encargar de la transferencia de información mientras el CPU continúa ejecutando instrucciones queno requieran de esta información. El CPU configura el DMAC para que transfiera la información (sea indicandola cantidad de palabras del dispositivo o desde qué dirección empezar a transferir) y luego continúa ejecutandoinstrucciones (siempre y cuando sea posible) mientras el DMAC se encarga de la trasnferencia. Una vez terminadala transferencia el DMAC solicita una interrupción y el CPU la atiende. En la Figura 21 se puede ver un diagramade las conecciones entre dispositivos para este método.

    7.2. Conversión de SeñalesLas señales que recibe un dispositivo I/O son señales analógicas. Estas señales deben digitalizarse para que

    la computadora pueda manejarlas y luego deben pasarse de vuelta a señales analógicas para el usuario. Vamosa pensar a las señales analógicas como señales físicas continuas dependientes del tiempo. Estas señales puedendescomponerse en funciones armónicas con cierta amplitud y frecuencia. Entonces, el tratamiento de una señal

    31

  • Figura 22: Conversión Analógica-Digital de una señal analógica f (t) (en gris) a otra digital (enrojo) con una frecuencia de muestreo de 6 Hz.

    Figura 23: Amplificador operacional.

    analógica utilizando una computadora digital implica necesariamente la Conversión Analógica-Digital (ADC)y la Conversión Digital-Analógica (DAC). En la Figura 22 puede verse la conversión analógica-digital de unaseñal f (t). Notemos que la digitalización de una señal limita la cantidad de valores que se toman en ambos ejes xe y.

    Para evitar o minimizar la pérdida de información en ADC el Criterio de Nyquist establece que la frecuenciade muestreo - es decir - la frecuencia a la cual se toman muestras de la señal debe ser mayor que el doble de lamáxima frecuencia de la señal:

    fs > 2fmaxAdemás, debe definirse un rango de valores a obtener de la señal con ciertos umbrales - es decir - con ciertos posiblesvalores dentro del rango donde la señal va a ser efectivamente redondeada para tomar valores discretos. Mientrasmayor sea la frecuencia de muestreo y mientras menor sea la distancia entre umbrales menor va a ser la cantidadde información perdida en la ADC.

    Un dispositivo útil en la conversión de señales es el Amplificador Operacional, conocido como Op-Amp.Este dispositivo permite amplificar la diferencia de tensión entre la entrada no-inversora V+ y la entrada inversoraV− de forma que Vout = AOL (V+ − V−), donde AOL es la ganancia del dispositivo cuando no es retroalimentado.En la Figura 23 puede verse la representación circuital de un op-amp. Por lo general, la magnitud de gananciade los op-amp es del orden de 105 o más. Entonces, cuando el op-amp está en configuración de lazo abierto (no-retroalimentado) la más pequeña diferencia de tensión entre V+ y V− se traduce en que la salida es muy cercana a latensión de alimentación, efectivamente actuando como un comparador entre señales. Sin embargo, cuando está enconfiguración lazo cerrado (retroalimentado negativamente) la ganancia es significativamente menor ya que quedadeterminada por la configuración de la red resistiva del circuito. En la Figura 24 pueden verse diagramas circuitalespara ambas configuraciones del op-amp. La red resistiva de la configuración de lazo cerrado es la relación entre la

    32

  • Figura 24: Configuración lazo abierto (open loop) y lazo cerrado (closed loop) para un amplificadoroperacional.

    Figura 25: Conversión Digital-Analógica de una señal de 4 bits mediante un amplificador opera-cional y resistencias en paralelo.

    resistencia Rf del lazo y Rg de la entrada inversora. Si Rf < Rg entonces la ganancia no se ve seriamente afectadaya que ACL = 1 + RfRg . Este dispositivo nos va a servir para ADC y DAC.

    Veamos cómo usar un op-amp para DAC. En la Figura 25 puede verse una configuración donde se usa unop-amp en lazo cerrado para DAC. Cada señal A, B, C y D es una señal digital con un resistencia que sirve parapesarla que es digitalizada mediante un op-amp. Resulta que:

    Vout = −(

    RfRD

    VD +RfRC

    VC +RfRB

    VB +RfRA

    VA

    )= −

    (VD +

    12VC +

    14VB +

    18VA

    )Cada resistencia en la entrada le asigna un peso a esa señal y ya que tenemos cuatro señales con distintos pesos esonos permite 24 distintos valores en la salida entre 0V y −9.375V. Mientras más señales se usen mejor puede ser laconversión a analógico. En la Figura 26 puede verse otra configuración que independiza la tensión digital de la desalida ya que solo se usa para cambiar la red resistiva y se usa una tensión de referencia en el op-amp.

    Ahora veamos cómo usar un op-amp para ADC. En la Figura 27 puede verse una configuración donde seusan varios op-amps en lazo abierto junto con un codificador para digitalizar una señal de 10V. Ya que la entrada

    33

  • Figura 26: Conversión Digital-Analógica de una señal de 4 bits mediante un amplificador opera-cional y resistencias en serie.

    Figura 27: Conversión Analógica-Digital de una señal mediante un amplificador operacional.

    34

  • Figura 28: Diagrama circuital de la placa de sonido.

    analógica está en la entra inversora del op-amp entonces si VA > Vi, donde Vi es la tensión de entrada de algúnop-amp, entonces la salida es 0V y si no la salida es 5V. Notemos que los op-amps están negados en la salida asíque este resultado se va a invertir. Una desventaja de este dispositivo es que requiere muchos op-amps ya que laresolución está determinada por la cantidad de op-amps. Para remediar esto se usa una placa de sonido que tieneuna microcomputadora. Lo que esta microcomputadora hace es usar un contador que suma hasta que llega al valorque es igual a la señal. De esta forma podemos saber cuánto vale la señal en forma digital para una gran cantidadde puntos. En la Figura 28 se puede ver el diagrama circuital que muestra el funcionamiento de la placa de sonido.Notemos que usa una señal de comienzo (start) junto con el clock y la salida del op-amp. Esto está conectado alcounter, lo que hace que mientras que la señal analógica sea mayor que la del contador y mientras no haya una nuevaseñal de comienzo el contador cuente un número en cada ciclo de clock. Cuando el contador supera o iguala la señalanalógica entonces el AND queda negado y esa señal digital queda fija en el valor que estaba, lo que nos permiteguardarla o manipularla de alguna forma. Cuando llegue una nueva señal de comienzo el contador se resetea y elciclo comienza de vuelta. Esto puede hacerse muy rápido así que sirve como para digitalizar una señal de sonido(fNyquist = 44.1 kHz). Este conversor es mucho más eficiente que el anterior ya que uso un solo op-amp a diferenciade los miles que usa el otro.

    8. Memoria8.1. Tipos de Memoria

    Ya vimos en otras secciones cómo armar circuitos que almacenen datos y por lo tanto puedan usarse comomemoria de la máquina. Sin embargo, no detallamos en cómo construir la memoria principal de la máquina. Vimosque para la unidad de control podíamos usar memoria ROM que es muy rápida en la lectura pero no es reprogramable- es decir - no puede reescribirse. También mencionamos los PLAs que también son rápidos en lectura y que sonreprogramables, pero incluso estos dispositivos no nos van a servir para la memoria principal porque no son losuficientemente rápidos en escritura. Lo que usamos hoy en día es la memoria RAM (Random Access Memory) queson memorias que pueden ser leídas y escritas prácticamente a la misma velocidad que es independiente del lugarfísico donde se está escribiendo/leyendo. Principalmente existen dos tipos de memoria RAM, la estática (SRAM)y la dinámica (DRAM).

    En la Figura 29 puede verse un diagrama circuital de la memoria SRAM. Consiste de seis transistores (haydos en cada NOT) que forman dos bits Q y Q̄ que son opuestos entre sí. A esto se lo llama biestable y es lo que

    35

  • Figura 29: Diagrama circuital de la memoria SRAM.

    Figura 30: Diagrama circuital de la memoria DRAM.

    vimos en circuitos secuenciales. Notemos que en esta memoria tres transistores consumen máxima energía mientrasque los otros tres consumen la energía residual. Esto hace que esta memoria seade alto consumo. Lo bueno es quela lectura es directa y no destructiva - es decir - uno puede medir el bit cuantas veces quiera y no va a cambiar.Esto hace que la memoria SRAM sea sumamente rápida.

    En la Figura 30 puede verse un diagrama circuital de la memoria DRAM. Consiste de un transistor y uncapacitor que va a almacenar carga si el valor del bit es 1 y va a estar descargado si el valor del bit es 0. Para leeresta memoria vamos a tener una línea de sensado (sense line) y una de control, donde la de control va a habilitarque la corriente vaya a la línea de sensado y en esta se va medir una corriente (o no) para interpretar si el valor delbit es 1 o 0. Notemos que a diferencia de la memoria SRAM la lectura en este caso es destructiva ya que descarga elcapacitor. Por lo tanto, luego de una lectura es necesario cargar de vuelta el capacitor si es que estaba cargado. Estohace que esta memoria sea más lenta que la anterior. Lo bueno es que es mucho más eficiente ya que no tiene tantostransistores como en la memoria SRAM. Otra desventaja de esta memoria es que a medida que pasa el tiempo elcapacitor se va descargando, así que cada tanto es necesario refrescar todos los capacitores para que no pierdan losbits almacenados.

    Debido a que ninguna de las dos memorias es mejor que la otra entonces no va a bastar con elegir una de las dospara usar en la memoria principal. Vamos a tener que analizar la estructura de la memoria principal y elegir algunade las dos para cada parte. Debido a que la velocidad de los procesadores es mucho mayor que la de las memorias(ya que el crecimiento en velocidad de los procesadores es exponencial mientras que el de las memorias es lineal)entonces vamos a formar una jerarquía de memorias donde las más rápidas son las que se conecten al procesadorpara así disminuir su tiempo de espera. En la Figura 31 puede verse un diagrama de esta jerarquía mediante unapirámide, donde las memorias más rápidas y costosas están por encima de las más lentas y baratas. Las memoriasmás altas en la pirámide van a ser las más cercanas al procesador para minimizar el tiempo perdido del mismo. Lamemoria más cercana al procesador son los registros, con los cuales ya estuvimos trabajando. Estas memorias estánarmadas con celdas biestables y son tan rápidas que prácticamente no alentizan al procesador.

    Luego de los registros viene la memoria Cache y hay dos tipos. La de nivel 1 está construida como SRAM y seencuentra dentro del procesador como subsistema aparte y entonces el CPU tiene electrónica asociada a administraresta memoria. El objetivo de esta memoria es amortiguar el costo de acceder a la memoria principal. La de nivel 2por lo general se encuentra en la motherboard y opera como puente entre el procesador y la memoria principal. Estamemoria también está construida como SRAM pero su administración es más compleja que la de nivel 1 y además

    36

  • Figura 31: Pirámide de jerarquía de memorias. Las más rápidas están encima de las más lentaspero a su vez las más rápidas son las más costosas.

    está más alejada del procesador, lo que lleva a que tenga tiempos de acceso más lentos. Ambas memorias cache vana almacenar copias de algunos datos e instrucciones que están en la memoria principal y van a estar disponiblesjusto cuando el procesador las necesita, evitando así que este tenga que esperar.

    Luego de ambas memorias cache está la memoria principal que está construida como DRAM y que por lo tantoes más lenta que las otras. Junto con las otras forman las memorias del sistema, el resto (fixed rigid disk, opticaldisk y magnetic tape) van a formar memorias externas (discos rígidos, USBs, CDs, DVDs, Blu-Rays, etc.) que vana servir de almacenamiento más masivo o de backup.

    8.2. Memoria CacheVeamos en detalle cómo funciona y cómo se diseña la memoria cache. Esta memoria debe ser los suficientemente

    grande como para que el procesador sea capaz de resolver la mayor cantidad posible de accesos a esta memoriasin recurrir a la memoria principal y lo suficientemente pequeña como para no afectar el consumo ni el costo delsistema. Para medir este balance en tamaño usamos el hit rate - es decir - la razón de hits, o accesos a ítems que seencuentran en el cache, sobre la cantidad total de accesos que incluyen aquellos que no se encuentran en el cache.Es claro entonces que queremos que el hit rate sea lo más alto posible ya que significa que la mayoría de las vecesel procesador accede al cache y no a la memoria principal. Definimos el miss rate como m = 1 − h, donde h es elhit rate. Es claro entonces que un miss es cuando la memoria accede a un ítem que no está en el cache.

    En la Figura 32 podemos ver un diagrama de bloques de la estructura del computador con memoria cache.Tenemos un controlador que se va a encargar de controlar la información almacenada en el cache. Cada vez queel CPU pida información el controlador se va a encargar de darle esa información. Si la información que el CPUrequiere está en el cache entonces el controlador simplemente se le alcanza. Si la información que el CPU requiere noestá en el cache entonces el controlador se encarga de acceder a la memoria principal para alcanzarle la informaciónal CPU y actualiza el cache bajo algún criterio. Con esto nos referimos a que debe existir algún criterio para elegirde qué información almacenar en el cache de forma que maximice el hit rate. Existen dos principios para esto, unoes el de Vecindad Espacial y otro es el de Vecindad Temporal. El primero establece que si un ítem es utilizadoentonces es probable que ítems cercanos sean utilizados pronto, mientras que el segundo establece que si un ítemes utilizado entonces es probable que pronto sea utilizado de vuelta. Consideremos el siguiente código (en C):

    int v[9];int i = 0;for (int j = 0; j < 3; j++) {

    37

  • Figura 32: Estructura del computador con memoria cache.

    for (int k = 0; k < 3; k++) {v[i] = j + k;i++;

    }

    }

    En este ejemplo la utilización de las variables i, j y k responden al principio de vecindad temporal mientras que lautilización del arreglo v responde al principio de vecindad espacial.

    Entonces, para respetar estos principios y maximizar el hit rate lo que se hace es separar la memoria cache enbloques. Cada vez que el controlador tenga que acceder a la memoria principal además de traerse el ítem que elCPU pide se trae información cercana al ítem para llenar un bloque de memoria cache. Esto cumple con el principiode vecindad temporal ya que almacena en el cache la información utilizada y también cumple con el principio devecindad espacial ya que almacena también información cercana a la utilizada. El tamaño de los bloques debeelegirse con cuidado, ya que mientras mayor sea más lento va a ser el acceso a la memoria principal y menor va aser la cantidad de bloques disponibles; mientras que menor sea el tamaño del bloque menor va a ser la cantidad deinformación cercana espacialmente almacenada. Además, se debe almacenar un directorio con las entradas a cadabloque de la cache, ya que debe existir alguna manera de saber qué información está en el cache y qué informaciónno.

    Veamos entonces algunos métodos para reemplazar los contenidos del cache. Un método se llama Least RecentlyUsed y consiste en priorizar los contenidos utilizados recientemente. Otro se llama Least Frequently Used y consisteen priorizar los contenidos más utilizados. Finalmente, hay otro que se llama First In - First Out y consiste enpriorizar los últimos contenidos guardados.

    El cache también va a impactar en la escritura en memoria y, por lo tanto, existen distintas maneras de manejaresto. Una manera se llama Write Through y consiste en que el procesador escriba en la memoria principal y luegoel controlador actualice el cache. Otra manera se llama Write Through Buffered y consiste en que el procesadorescriba en el cache y luego el controlador actualiza la memoria principal. Finalmente, otra manera se llama CopyBack y consiste en que el procesador escriba en el cache y luego antes de borrar una linea del cache que no está enla memoria principal el controlador hace una copia a la misma.

    Entonces, consideremos la estructura interna del cache. En la Figura 33 puede verse un diagrama interno de lamisma. El cache interno (nivel 1) se separa en dos partes: I-Cache que se encarga del almacenamiento de instrucciones

    38

  • Figura 33: Estructura interna del cache.

    y D-Cache que se encarga del almacenamiento de datos. El cache de nivel 2 no distingue entre instrucciones y datos.Por lo tanto, esta memoria se encarga de guardar información que es utilizada recientemente para pasar a la cachede nivel 1. Por eso la cache de nivel 2 es mucho mayor en tamaño que la de nivel 1. Luego tenemos la memoriaprincipal con un acceso mucho más lento y la memoria virtual que se va a ver recién en Orga 2. A este sistema decache se lo llama Cache Multinivel.

    9. Buses9.1. Diseños y Protocolos

    Las componentes que estuvimos viendo del computador se comunican entre sí mediante buses. Ya que estoscaminos de conexión son únicos entonces debe necesariamente existir una alternación entre ciclos de lectura/escrituray ejecución de instrucciones, lo cual forma un cuello de botella ya mencionado como el cuello de botella de vonNeumann.

    Los buses están formados por un conjunto de señales con un propósito específico y sirven para conectar dos omás componentes. En general se cuentan con señales de direcciones, señales de datos y señales de control y entoncesse tiene un bus para cada tipo de señales. Por lo general, los buses se construyen de forma jerárquica ya que existenconexiones preferenciales, como la del procesador al cache por ejemplo. En la Figura 34 podemos ver la estructurade un ejemplo de jerarquía de buses. Notemos que hay un bus local de alta velocidad que conecta al procesadorcon el cache y con el controlador I/O, luego un bus de sistema que conecta el cache con la memoria principal yluego un bus de expansión que conecta otros dispositivos a una interface que está conectada al bus de sistema. Deesta forma uno logra jerarquizar los procesos del computador y los buses adquieren propósitos más específicos. Ala conexión entre buses de distintos niveles se la llama Bridge.

    Además, a un bus se lo divide en Líneas. Estas líneas pueden ser Dedicadas o Multiplexadas. Las líneasdedicadas tienen un rol único en el sistema y entonces el bus está divido en base a los roles que debe cumplir. Cadalínea tiene un dedicación física, que se refiere a la conexión entre las componentes, y una dedicación funcional, que serefiere a la función que cumplen. La dedicación de las líneas implica menor cantidad de disputas por su uso al mismotiempo, lo que incrementa el tamaño y costo del sistema pero incrementa la velocidad. Las líneas multiplexadascumplen más de un rol en el sistema. Por ejemplo, si el bus de datos y el bus de direcciones comparten las mismaslíneas físicas entonces estas son multiplexadas. La multiplexización de líneas reduce el tamaño y costo del sistemapero complejiza la lógica de administración. Llamamos el Ancho de un bus a la cantidad de líneas físicas que utiliza.Esta característica del bus es la que determina su desempeño. El ancho del bus de direcciones determina el espacio

    39

  • Figura 34: Ejemplo de jerarquía de buses.

    de memoria direccionable y el ancho del bus de datos determina la cantidad de accesos a memoria necesarios paratransferir la misma cantidad de información.

    A la hora de diseñar un bus uno debe considerar la coordincación entre eventos. Esto impone la temporiza-ción de los eventos. Existen dos tipos de temporización: la Temporización Sincrónica y la TemporizaciónAsincrónica. En la Figura 35 puede verse un diagrama de la temporización sincrónica entre eventos en un bus.Esta temporización utiliza un clock (distinto al del CPU) y usa el ciclo de reloj para desarrollar ciertos eventos.Notemos que cada evento tiene una pendiente ascendiente al comienzo y una descendiente al final. Esta prendienterepresenta un tiempo de estabilización del bus que es necesaria para la correcta lectura o escritura. En la Figura36 puede verse un diagrama de la temporización asincrónica entre eventos en un bus. Notemos que a diferencia dela temporización sincrónica esta no usa un clock central, sino que recibe información de una componente hasta queesta termina y entonces pasa a la siguiente. Esto requiere que hayan ciertas señales que permitan determinar queacciones se están tomando en cada momento. Esto complejiza la administración del bus pero también lo flexibiliza.Notemos que la señal MSYN prendida dispara la colocación de los datos en DATA y la señal SSYN prendida disparala colocación de los datos en MREQ, RD y MSYN.

    Consideremos ahora cómo son los protocolos de lectura y de escritura para líneas dedicadas y multiplexadas delbus. Para líneas dedicadas en la escritura la componente que escribe coloca la dirección en el bus de direcciones ylos datos en el bus de datos en un mismo ciclo de reloj y luego notifica este hecho a la componente a escribir. En lalectura, la componente que lee coloca la dirección en el bus de direcciones y notifica este hecho a la componente ala componente a leer en un ciclo de reloj. Luego en el siguiente ciclo de reloj la componente leída coloca los datosen el bus de datos y notifica a la componente que lee.

    Para líneas multiplexadas en la escritura la componente que escribe coloca la dirección en el único bus y lonotifica a la componente a escribir en un ciclo de reloj. Luego, la componente a escribir confirma que la direcciónfue leída y en otro ciclo de reloj la componente que escribe coloca los datos en el bus y notifica a la componentea escribir. En la lectura, la componente que lee coloca la dirección en el bus y notifica a la componente a leer enun ciclo de reloj. Luego, la componente a leer coloca los datos en el bus y notifica a la componente que lee en otrociclo de reloj.

    Ya que los buses son recursos compartidos y requeridos por muchas componentes al mismo tiempo entoncesdebe existir un método de arbitraje que determine qué componente tiene acceso a cierto bus en un determinadomomento. Un sistema deArbitraje Centralizado requiere de un controlador que implementa la lógica de arbitraje.En este sistema el controlador va a estar al tanto de qué componentes requieren el bus y va a ceder acceso a lasdistintas componentes que lo requieran. Un sistema de Arbitraje Distribuido deja que las componentes tenganun subsistema de control de acceso y que todos estos subsistemas juntos administren el uso del bus. En la Figura37 puede verse un esquema para ambos sistemas de arbitraje de bus. En el arbitraje centralizado notemos que cadacomponente debe hacer un pedido (request) de uso al controlador (bus arbiter) y este se encarga de ceder permisoa solo un dispositivo para que acceda al bus. En el arbitraje distribuido en este caso tenemos a los dispositivos

    40

  • Figura 35: Diagrama de la temporización sincrónica entre eventos en un bus.

    Figura 36: Diagrama de la temporización asincrónica entre eventos en un bus.

    41

  • Figura 37: Esquema de ambos sistemas de arbitraje de bus: centralizado y distribuido.

    ordenados de mayor a menor prioridad de uso y entonces los pedidos se conectan entre sí mediante un OR. Luego,el controlador le cede el uso al dispositivo con mayor prioridad y este utiliza el bus si lo requiere y si no le cede elpermiso al siguiente dispositivo de la cadena. De esta forma el controlador no tiene que ocuparse de las prioridades,si no que cada dispositivo tiene una lógica interna que se encarga de ceder el bus si no lo necesita.

    9.2. EjemplosVeamos algunos ejemplos de buses que se usan o se usaron en algunas PCs.

    PC Bus Este es el primer bus que se diseñó para una PC y fue por IBM para la IBM PC que usaba un procesadorIntel 8088. Este bus consistía de 62 líneas: 20 líneas de direcciones que permitían usar 1 Mb de memoria direccionable,8 líneas de datos con palabras de 1 B y 34 líneas de control entre las que se encuentran líneas de lectura/escritura enmemoria, lectura/escritura en I/O, interrupciones, DMA, etc. Luego de este bus Intel lanza el siguiente procesadorque fue el Intel 80286 con un bus de direcciones de 24 bits y bus de datos de 16 bits. IBM estandariza este bus conel nombre PC-AT.

    Bus ISA Este bus (Industrial Standard Architecture) es un rediseño del PC-AT al PC Bus para que sean compa-tibles. Al igual que el PC Bus cuenta con 62 líneas: 24 líneas de direcciones que permitían usar 16 Mb de memoriadireccionable, 16 líneas de datos que permiten palabras de 2 B y 22 líneas de control entre las que se implementaacceso a dos controladores de interrupciones y dos de DMA.

    Bus EISA Luego del procesador Intel 80286 vino el procesador Intel 80386 con un bus de datos de 32 bits ydirecciones de 32 bits. Entonces, este nuevo bus que era la evolución del bus ISA termina siendo electrónicamentecomplejo, poco escalable y con una velocidad máxima de 33 MHz, que por más de que fuera muy rápido para laépoca terminaría siendo limitante considerando el aumento de velocidad de procesadores.

    VESA Local Bus Este bus se desarrolló por un consorcio de fabricantes de controladores de video frente a laevolución de las pantallas de rayos catódicos a pantallas a color de 16 bits. Este bus es específico para las placas devideo y es una extensión del bus ISA con velocidad entre 25 MHz y 50 MHz.

    42

  • Figura 38: Estructura del bus PCI.

    Bus PCI Este bus (Peripheral Component Interconnect) se desarrolló para dar soporte de alta velocidad, generaly escalable frente a las opciones EISA y VESA Local Bus. Este bus surgió en 1992 y convivió durante un tiempocon los otros dos. Había componentes que se conectaban a un bus VESA o EISA y que entonces debían conectarsea un conector de su tipo pero que luego pasan a través de un puente que transformaba el protocolo al PCI paraque internamente la computadora solo use bus PCI. Las placas de video rápidamente adoptaron el bus PCI ya queera más rápido que el VESA. Este bus consistía de 32 líneas de datos y velocidades de 33 MHz en su versión 1.0.Luego en la versión 2.0 llegó a velocidades de 66 MHz y en la versión 2.1 se extendió a 64 líneas de datos. En laFigura 38 puede verse un diagrama de la estructura del bus PCI.

    43

  • Índice alfabéticoÁlgebra de Boole, 9

    Acarreo, 8Accumulator, 15Amplificador Operacional, 32Analógico, 3Ancho de Bus, 39Arbitaje Centralizado de Bus, 40Arbitraje Distribuido de Bus, 40Arquitectura, 3

    Base, 7Bit, 7Buffer de Tres Estados, 11Bus Bridge, 39Byte, 7

    Cache, 36Cache Multinivel, 39Celda de Memoria, 12Ciclos de Instrucción, 6Circuito Secuencial, 11Codificador, 11Compilador, 4Complex Instruction Set Computer, 15Computadora, 3Conversión Analógica-Digital, 32Conversión Digital-Analógica, 32Criterio de Nyquist, 32Cuello de Botella de Neumann, 5

    Decodificador, 11Demultiplexor, 11Digital, 3Direct Memory Access, 31Driver, 29Dynamic Random Access Memory, 35

    Electrónico, 3

    Flip-Flop, 11Flip-Flop D, 12Flip-Flop RS, 11Forma Conjuntiva Normal, 9Forma Disyuntiva Normal, 9

    General Purpose Register, 15

    Habilitación de Datos, 12

    Instruction Set Architecture, 12

    Línea de Bus, 39

    Línea Dedicada, 39Línea Multiplexada, 39Lenguaje de Ensamblado, 7Lenguaje de Máquina, 6Ley de Moore, 4Ley de Rock, 4

    Máquina de Turing, 5Machine Architecture that is Really Intuitive and

    Easy, 15Mainframe, 4Microprocessor without Interlocked Pipeline Sta-

    ges, 18Microprogramación, 4Multiplexor, 11Multiprogramación, 4

    Organización, 3Ortogonalidad de la ISA, 18Overflow, 7

    Principio de Equivalencia entre Hardware y Soft-ware, 3

    Principio de Vecindad Espacial, 37Principio de Vecindad Temporal, 37Programmable Logic Array, 28Programmed Input/Output, 31Puerta Lógica, 9Punto Fraccionario, 7

    Random Access Memory, 35Read-Only Memory, 28Reduced Instruction Set Computer, 15Register Transfer Language, 20Registro de Memoria, 12

    Semi-Sumador, 11Sistema Binario, 7Sistema de Complemento, 7Sistema Decimal, 7Sistema Hexadecimal, 7Sistema Octal, 7Sistema Posicional, 7Stack Architecture, 15Static Random Access Memory, 35Subrutina, 17Sumador, 11

    Temporización Asincrónica, 40Temporización Sincrónica, 40Transistor, 9Transistor, 4

    44

  • Turing Completo, 5

    Válvula de Vacío, 3Visión Estructural, 3Visión Funcional, 3

    45

    Evolución Histórica de la ComputadoraEl Modelo de von Neumann-TuringJerarquía de Máquina

    Sistemas de NumeraciónLógica DigitalÁlgebra de BoolePuertas LógicasCircuitos Secuenciales

    Instruction Set ArchitectureSubrutinasModos de Direccionamiento

    Unidad de Control y MicroprogramaciónEntrada y SalidaControl de Dispositivos e InterrupcionesConversión de Señales

    MemoriaTipos de MemoriaMemoria Cache

    BusesDiseños y ProtocolosEjemplos