P. 1
Organización y Arquitectura de computadoras-Resumen-Stalling

Organización y Arquitectura de computadoras-Resumen-Stalling

5.0

|Views: 2.173|Likes:
Publicado porJorge Linares

More info:

Published by: Jorge Linares on Apr 19, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOC, PDF, TXT or read online from Scribd
See more
See less

04/19/2014

pdf

text

original

Organización y Arquitectura de computadoras

El nivel de los temas tratados es superficial, para mas detalles aconsejo empezar por leer el libro. Todo esto esta colgado también acá Introducción: Es a veces difícil identificar donde esta la diferencia entre la arquitectura y la organización de computadores. La arquitectura se refiere a las características del sistema que son visibles al programador, o sea que el programador va a tener que tener en cuenta al momento de programar (ejemplo de esto serian modos de direccionamiento, conjunto de instrucciones, cantidad de bits usados para representas los distintos tipos de datos. La organización en cambio es transparente a el programador, este no se preocupa por estos temas, señales del bus de control, interfaces entre periféricos y computador, tecnología usada en memoria, cantidad de caches, etc. En general lo fabricantes de máquinas producen familias de pc con una misma arquitectura y a medida que pasa el tiempo salen nuevos modelos con la misma arquitectura, pero con una organización diferente, con lo cual logran una compatibilidad de software. Ejemplo de esto serian las PC comunes y una Macintoch, por poseer distinta arquitectura no son compatibles sus software. Estructura y funcionamiento: La descripción del sistema se va a ser la la siguiente forma: Se comenzara con una visión muy superficial, para de a poco introducirnos en las capas mas bajas en cuestión de estructura y funcionamiento. Funciones básicas de un computador: 1. Procesamiento de datos. 2. Almacenamiento de datos. 3. Trasferencia de datos. 4. Control. Gráficamente seria así:

Gráficamente las funciones serian algo así:

1

* * * *

A) Transferencia de datos. B) Almacenamiento. C) Procesamiento de datos almacenados. D) Entrada o salida de datos con un procesamiento previo.

Estructura del Computador La representación mas sencilla y superficial de un computador podría ser la siguiente:

2

El computador es el que vamos a analizar mas en detalle. Las formas que esta se comunica con el entorno exterior se pueden clasificar en 2 grandes grupos: Periféricos y lineas de comunicación. Computador: Entrando un poco mas en el detalle del computador, podemos distinguir 4 componentes principales:

* CPU (Central Prosesing Unit): Controla el funcionamiento de la computadora y se encarga del procesamiento de datos, comúnmente se lo llama procesador. * Input/Output (I/O o entrada y salida): se encarga de la transferencia de datos entre en computador y el entorno externo. * Main Memory(Memoria principal): Almacena datos. * System Interconnection (sistema de interconexión): Proporciona comunicación entre las tres partes. El componente que vamos a analizar ahora mas en detalle es la CPU:

3

XOR.OR. 4 . * ALU (Unidad Aritmético-Lógica): En ella se realizan las operaciones de procesamiento. Principios de la programación En los primeros computadoras se puede observar aproximadamente el siguiente funcionamiento: Al computador entraban datos. * Interconexiones: Proporcionan comunicación entre los 3 componentes anteriores. dicho procesamiento se configuraba antes de empezar por medio de cableado. Como se puede apreciar el procesador era para un uso especifico. aritméticas (suma resta. con lo cual controla el funcionamiento del computador.Los principales componentes son los siguientes: * Registros: Proporcionan un almacenamiento interno a la CPU. etc) * Unidad de Control: Controla el funcionamiento de la CPU. etc) y logicas (AND. y del computador salían los resultados. a esos datos se les daba un procesamiento.

php?video=sJnMBnZElqw ENIAC De Wikipedia.com/watch.Un ejemplo de esto es la famosa ENIAC. Realizaba 5000 sumas por segundo. Pesaba 30 toneladas Poseía 18000 válvulas. utilizada por el Laboratorio de Investigación Balística del Ejército de los Estados Unidos. Contenido * * * * 1 2 3 4 Modalidad Prestaciones Las programadoras de ENIAC Enlaces externos 5 .videos-star. Vídeo de YouTube link: http://www. la enciclopedia libre ENIAC ENIAC es un acrónimo inglés de Electronic Numerical Integrator And Computer (Computador e Integrador Numérico Electrónico). para distraerme un poco vamos a poner algo de ella: Unos datos interesantes: Trabajaba con numeración decimal. Consumía 140 Kilowatios.

hubo seis mujeres que se ocuparon de programar la ENIAC. Jean Jennings Bartik. mas dedicaron largas jornadas a trabajar con la máquina utilizada principalmente para cálculos de trayectoria balística y ecuaciones diferenciales y contribuyeron al desarrollo de la programación de computadoras. cuya historia ha sido silenciada a lo largo de los años y recuperada en las últimas décadas. medía 2. a diferencia de otras máquinas computadoras contemporáneas de procesos analógicos.000 resistencias. Las programadoras de ENIAC Si bien fueron los ingenieros de ENIAC. En 1. la ENIAC tenía 17. Era totalmente digital. los que pasaron a la historia de la computación. en las centrales telefónicas. Marlyn Wescoff Meltzer. tardaba semanas de instalación manual. conectar y reconectar los cables como se hacía.4 m x 0. Prestaciones La computadora podía calcular trayectorias de proyectiles. Cuando la ENIAC se convirtió luego en una máquina legendaria. este equipo de programadoras destacaba por ser hábiles matemáticas y lógicas y trabajaron inventando la programación a medida que la realizaban. Para efectuar las diferentes operaciones era preciso cambiar. La ENIAC fue construida en la Universidad de Pennsylvania por John Presper Eckert y John William Mauchly. siendo recientemente restaurada para un museo británico. que ejecutaba sus procesos y operaciones mediante instrucciones en lenguaje máquina. utilizaba 1. requería la operación manual de unos 6.5 segundos era posible calcular la potencia 5000 de un número de hasta 5 cifras. Pesaba 27 Tm. Betty Snyder Holberton.000 condensadores y 5 millones de soldaduras.468 válvulas electrónicas o tubos de vacío.000 interruptores. que fue usado para descifrar código alemán durante la Segunda Guerra Mundial y destruido tras su uso para evitar dejar pruebas. 70. Ruth Lichterman Teitelbaum y Frances Bilas Spence prácticamente no aparecen en los libros de historia de la computación. Físicamente. La ENIAC elevaba la temperatura del local a 50ºC. ocupaba una superficie de 167 m² y operaba con un total de 17. la ENIAC fue desactivada para siempre.000 sumas y 360 multiplicaciones en 1 segundo. 10. La ENIAC podía resolver 5. Muchos registros fotográficos de la época muestran la ENIAC con mujeres de pie frente a ella.9 m x 30 m. 1. Kathleen McNulty Mauchly Antonelli. Clasificadas entonces como "sub-profesionales". 7. Pero entre las anécdotas estaba la poco promisoria cifra de un tiempo de rotura de 1 hora.Modalidad No fue la primera computadora electrónica de propósito general. sufría de apagones cuando la ENIAC entraba en funcionamiento. pues su consumo era de 160 kW. posiblemente por una cuestión de género o para reducir los costos laborales. cuando requería modificaciones. en esa época. Uno de los mitos que rodea a este aparato es que la ciudad de Filadelfia. A las 23. Además está relacionada con el Colossus. 6 . Ese honor se le debe al Z3 construido en el 1941. lo cual fue el objetivo primario al construirla.45 del 2 de octubre de 1955. es decir. sus ingenieros se hicieron famosos. donde se encontraba instalada.500 conmutadores electromagnéticos y relés.468 tubos de vacío. Este trabajo podía demorar varios días dependiendo del cálculo a realizar. Presentada en público el 15 de febrero de 1946. y su programa o software.200 diodos de cristal. Mauchly y Eckert.500 relés. de allí el concepto. mientras que nunca se le otorgó crédito alguno a estas seis mujeres que se ocuparon de la programación.

Hasta la década del 80, se dijo incluso que ellas eran sólo modelos que posaban junto a la máquina ("Refrigerator ladies". Sin embargo, estas mujeres sentaron las bases para que la programación fuera sencilla y accesible para todos, crearon el primer set de rutinas, las primeras aplicaciones de software y las primeras clases en programación. Su trabajo modificó drásticamente la evolución de la programación entre las décadas del 40 y el 50. -----------------------------------------------------------------------------------------------------------------------Bueno, programar este computador para que realice una tarea determinada, consistía en cambiar las conexiones de todos esos cables que se aprecian en las imágenes. En esta época surgió la idea de programa almacenado, que se le atribuye principalmente al matemático asesor del proyecto Eniac John Von Neumann.

Las ideas del programa almacenado fue desarrollada al mismo tiempo por Turing (Recomiendo leer la historia de este genio).

7

Pero la primera publicación fue hecha por Neumann en 1945, proponiendo la EDVAC (Electronic Discrete Variable Computer). Esta se empezó a diseñar en la universidad de Princeton en 1946 y fue completado en 1952. La idea era la siguiente, en ves de tener un procesador que realiza una sola tarea, y la programación sea cableada, encontrar la forma de cambiar esas conexiones por medio de ordenes almacenadas en memoria junto a los datos. A la idea de la llamo "La máquina de Von Neumann", y es la base general de los computadores de hoy en día. Con esto para cambiar la tarea que realizara la computadora, bastara solo con leer otro conjunto de ordenes almacenadas en memoria, de esta manera nace el SOFTWARE.

En este diagrama se ejemplifica el computador realizaba una tarea fija con los datos

En este diagrama vemos ejemplificado que por medio de instrucciones al procesador, se podía hacer que el computador sea de uso general y realizar distintas tareas Como se puede apreciar en la ultima figura, la memoria y los datos provienen de la misma memoria. La idea es la siguiente, se leía una instrucción, esta pasaba a la unidad de control, dicha unidad realizaba las conexiones correspondientes para que la ALU realizara una tarea determinada, entraban los datos a la ALU, esta realizaba las operaciones, y el resultado salia por algún dispositivo de E/S.

8

Hoy en día, a grandes rasgos es similar, se lee una instrucción, se decodifica, la unidad de control manda las señales necesarias por los buses, los datos se mandan a la ALU, y se realiza la operación. Con este avance se logro tener el primer computador de propósito general, era mas fácil usarlo para diversas tareas. Buses Los buses son el mecanismo mas común para la comunicación entre los dispositivos del computador. Físicamente son conductores por donde viajan señales eléctricas.

Bueno, los buses son casi todos esos caminos que se ven en las motherboard de las imágenes anteriores. El bus es un dispositivo en común entre dos o mas dispositivos, si dos dispositivos transmiten al mismo tiempo señales las señales pueden distorcionarce y consecuentemente perder información. Por dicho motivo existe un arbitraje para decidir quien hace uso del bus. Por cada linea se pueden trasmitir señales que representan unos y ceros, en secuencia, de a una señal por unidad de tiempo. Si se desea por ejemplo transmitir 1 byte, se deberán mandar 8 señales, una detrás de otra, en consecuencia se tardaría 8 unidades de tiempo. Para poder transmitir 1 byte en 1 sola unidad de tiempo tendríamos que usar 8 lineas al mismo tiempo. Existen varios tipos de buses que realizan la tarea de interconexión entre las distintas partes del computador, al bus que comunica al procesador, memoria y E/S se lo denomina BUS DEL SISTEMA

9

* Petición del bus. La cantidad de lineas del bus a medida que pasa el tiempo se va incrementando como uno de los métodos para incrementar la velocidad de transferencia de señales en el computador. Dentro de la direcciones posibles. * Lectura de memoria. Por ejemplo si el bus es de 8 lineas y las instrucciones son de 16 bits. * Escritura de E/S. pueden ser de 8. Cada linea tiene un uso especifico. Bus de datos: Por estas lineas se transfieren los datos. pero en general podemos distinguir 3 grandes grupos de buses. Se transmiten ordenes y señales de temporización. y es muy influyente en el rendimiento del sistema. en consecuencia el ancho del bus de datos nos indica la cantidad de direcciones de memoria a la que podemos hacer referencia. * Transferencia reconocida. son 256 combinaciones posibles. Bus de direcciones:Por estas lineas se envía la dirección a la cual se requiere hacer referencia para una lectura o escritura. Bus de control:Estas líneas son utilizadas para controlar el uso del bus de control y del bus de datos. el sistema va a tener que acceder 2 veces a memoria para poder leer la instrucción. las ordenes son muy diversas las mas comunes son: * Escritura en memoria. el doble de tiempo en leer instrucciones comparado con un bus de datos de 16 lineas. 10 . y hay una gran diversidad de implementaciones. * Señal de reloj. * Cesión del bus. en general el sistema no usa todas para hacer referencia a la memoria principal. * Interrupción reconocida. 32 o mas lineas( no se realmente en cuanto andan hoy en día). y así incrementar el desempeño. las combinaciones posibles para identificar una dirección irían del 00000000 al 11111111.. lo cual nos indica cuantos datos podemos transferir al mismo tiempo. si el bus es de 8 lineas por ejemplo. * Lectura de E/S. Las señales de temporización indican la validez de los datos que están en el bus en un momento dado.y es que que vamos a detallar ahora. una parte las usa para hacer referencia a los puertos de E/S. * Petición de interrupción. * Inicio. 16.

que están en la cache. debajo de 11 . las jerarquías de buses fueron implementadas cada vez mas. las causantes de esto son varias. entre el bus del sistema y el bus de expansion se encuentra una interfase. y puede emitir algún tipo de señal por el bus de control (señal de interrupción. la mayor parte de los datos a los que va a acceder el procesador. Una de las formas de tratar este problema es implementando jerarquía de buses. solo hay un adaptador que los une. que entre las principales tareas esta la de adaptar las velocidades de transmision. pero las mas importantes son el tiempo de sincronización que se necesita para coordinar el uso del bus entre todos los dispositivos. Jerarquía de buses: Para mejorar el rendimiento del bus. al cual esta conectada la memoria y por debajo el bus de expansión. el cual esta muy estrechamente ligado al bus local. señal de reconocimiento de alguna petición. En general. Luego tenemos el bus del sistema. y que el bus tiene una capacidad máxima. otro punto a destacar de esta parte es que los accesos a memoria por parte de la cache no van a interrumpir el flujo de datos entre procesador y cache. serán entregados a una alta velocidad. al cual se pueden conectar una amplia diversidad de dispositivos. hizo que los fabricantes implementaran los buses de alta velocidad. la cual puede llegar a convertirse en un cuello de botella del sistema. con esta implementación. También se ve la posibilidad de conectar un dispositivo de entrada salida al bus local. El hecho de que cada vez mas salgan al mercado dispositivos que requieren mas velocidad de transmision en los buses. una primera aproximación a una jerarquía de bus básica seria la siguiente: Primero tenemos un bus local. etc).Todo elemento que este conectado al bus tiene que saber reconocer si la dirección que esta en el bus de datos le corresponde. disminuye el rendimiento del sistema. cuanto mas dispositivos conectamos al bus. tiene que reconocer algunas ordenes transmitidas por el bus de control. el controlador de la cache también puede acceder al bus del sistema. de alta velocidad que conecta el procesador a la cache. por ejemplo para un dispositivo muy lento conectado al bus de expansión la interfase podría acumular una cierta cantidad de datos y luego transmitirla a través del bus del sistema.

los podríamos dividir en dedicados o multiplexados.. Esto funcionaria a grandes rasgos de la siguiente forma: Al comienzo de la transferencia se sitúa en el bus la dirección de donde se quiere leer o a donde se desea escribir. la ventaja esta en que al ser dedicado solo a E/S. pero podría llegar a implementarse con un solo bus multiplexado el el tiempo. mas lento conectado mediante otro adaptador. en paralelo (datos y dirección). Un ejemplo común de dedicados serian el bus de datos y el bus de direcciones. Esta situación de bus de datos y de direcciones dedicados es lo mas común. lo cual ahorra espacio y costos. Otro tipo de clarificación podría ser según su dedicación física: Podríamos poner como ejemplo el bus de E/S. A partir de ese momento se dispone de una unidad de tiempo para que los dispositivos identifiquen si es su dirección. Tipos de buses: Una clarificación que podemos hacer es según la funcionalidad de este. luego de esto se pone en el mismo bus los datos y se realiza la transferencia en el sentido que lo indique una orden emitida por el bus de control. ya que solo van a operar con el los módulos de E/S. este bus se conecta al bus principal mediante algún adaptador. el cual se encarga de conectar solo los dispositivos de E/S. la desventaja son que para poder implementar es forma de operar la circuitería en cada modulo tiene que ser mas compleja. cada uno se utiliza solo para una función especifica. Ventaja de este método es la reducción de la cantidad de lineas. y que el rendimiento del sistema sera menor por no poder transmitir los datos simultáneamente. luego se emite por el bus de datos una señal indicando que en el bus se encuentra una dirección valida. el rendimiento de este va a ser mejor. Existen varios parámetros y elementos en los buses con los cuales podemos clasificarlos.este bus tenemos el bus de expansión. y no va a 12 .

todo los eventos ocurridos dentro del bus comienzan el principio del ciclo y pueden durar uno mas . Bien. este ejemplo lo voy a explicar mas detalladamente cuando llegue al la parte de E/S. la cual puede ser leída por todos los dispositivos conectados al bus. Arbitraje distribuido: En este esquema no existe un controlador centralizado. Según la temporización usada podemos clasificar los buses en 2 grupos. debe existir un método para decidir quien hace uso de el. Al intervalo transcurrido en la emisión de un uno y un cero se lo llama ciclo de reloj.haber tanta competencia por el bus. por ejemplo la linea del reloj. 13 . Temporización: La temporización clasifica al método utilizado para coordinar los eventos dentro del bus. modulo de E/S o memoria. procesador. En cualquiera de los dos casos lo que se busca es que se decida quien va a tener la posesión del bus en un momento dado. cada dispositivo que hace uso del bus tiene que tener incorporada la logica necesaria para poder interactuar con los demás dispositivos y decidir quien hace uso del bus. en su lugar. Método de arbitraje: Por la razón de que en un momento dado solo puede usar el bus un solo dispositivo. Temporización síncrona: Todos los eventos del bus se rigen a travez del reloj del computador. En este método de temporización todos van al ritmo del reloj. Tener en cuenta que hay muchísimas mas lineas que no se figuran en el gráfico. en el diagrama anterior podemos apreciar como seria en forma simplificada una lectura de datos a travez del bus. este dispositivo puede ser un modulo separado o puede estar incorporado al procesador. simplemente una secuencia de unos y ceros. al cual se lo denomina maestro del bus. el maestro del bus establecerá una comunicación con otro dispositivo (lectura o escritura) al cual se lo denominara esclavo. Todos los métodos que existen en general pueden ser clasificados en 2 grandes grupos: Arbitraje centralizado: Una parte del hardware del sistema denominada controlador del bus se encarga de decidir el uso del bus en cada momento. Una de las lineas del bus transmite continuamente una señal de reloj. que seria algo mas constante como el siguiente gráfico.

Temporización asíncronica: Acá los eventos no se rigen por la linea del reloj. el dispositivo correspondiente a esa dirección reconoce la dirección. en general todo evento es disparado por otro evento anterior. uno o cero. manda otra señal por una linea del bus de control indicando que se le a reconocido su petición (que los datos situados en el bus de datos son validos. al aumentar la velocidad del ciclo vamos a aumentar la velocidad del sistema. y como todas las operaciones se van a realizar al ritmo del reloj. tras lo cual.Las lineas solo pueden tener uno de dos estados. y pone en el bus de datos la información solicitada. en general la mayoría de los eventos tiene un duración de un ciclo. El procesador pone en el bus de direcciones la dirección a ser leída y en el bus de control por la linea correspondiente señal de lectura. el maestro (el que tiene permiso para el uso del bus) pone en el bus de direcciones la dirección de la cual desea leer su contenido. Con referencia al gráfico de un ciclo de lectura de datos. luego de un breve tiempo para que las señales eléctricas se estabilicen. son los datos solicitados) Todo con este método de temporización empieza o finaliza rigiendose de las señales del reloj. envía por una linea del bus de control una señal indicando que desea hacer una lectura. La velocidad en el ritmo que se alterna de un uno a un cero en la linea del reloj nos da la velocidad del bus. luego de haber puesto la dirección en las lineas correspondientes. se manda señal por la linea MSYN (sincronización del maestro) indicando que hay 14 .

este tiene que bajar su velocidad: En cambio con el asíncrono. cada uno funcionaria a su velocidad. es simplemente la cantidad de lineas que posee. Tipo de transferencia de datos: Todos los buses permiten la transferencia de datos. en este caso el bus esta multiplexado en el tiempo. por ejemplo "lectura-modificación-escritura". cada transferencia se haría con la velocidad óptima de sus dos partes (maestro-esclavo). si hay uno mas rápido. primero se utiliza para transmitir la dirección y luego los datos. Para optimizar el rendimiento existen algunas operaciones combinadas en las cuales se pasa la dirección una sola vez. cuanto mas ancho el bus de direcciones. pero es menos flexible que la síncrona. y cuanto mas ancho el bus de datos. el modulo correspondiente reconocerá su dirección. Otra instrucción es "lectura después de escritura" que serviría para comprobar el resultado. y esta directamente relacionado con el rendimiento del sistema. memoria principal. de distintas velocidades. En el segundo diagrama se puede apreciar un periodo nombrado con "Access time". Otra operación muy común es la transferencia por bloque. Por ejemplo. mayor ya a ser la cantidad de bis que se va a poder transmitir en paralelo. Anchura del bus: La anchura del bus ya lo he explicado. Todo esto es una sola operación. se pasa al principio de la operación la 15 . en el caso de que hubiesen varios dispositivos conectados al bus. mayor va a ser la cantidad de direcciones posibles utilizadas para direccionar memoria y dispositivos de E/S. ese tiempo es el necesario para acceder al medio en donde se encuentra el dato (disco rígido. se le aplica alguna modificación y luego se escribe nuevamente. etc) y ponerlo en el bus. ya sea para escritura como para lectura. todos tienen que funcionar a la velocidad del reloj. se utiliza para proteger los recursos de memoria compartida en sistemas con multiprogramación para mantener la integridad de los datos. en el mismo bus se trabajaría a distintas velocidades.señales validas en el bus de dirección y de control. En el gráfico tenemos ejemplificado una escritura y una lectura. pone el dato solicitado en el bus de datos y emite una señal (SSYN sincronización del esclavo) por la en bus de control indicando el las señales del bus de datos son validas(son los datos solicitados) La temporización síncrona es mas fácil de implementar y comprobar. nadie puede acceder al bus en el medio de la operación. seria la lectura del dato.

pero como tienen muchos datos técnico que pueden ser medios pesados. 16 . ahora tendría que enumerar algunos buses en especial.dirección inicial y luego se realiza lectura o escritura a las siguientes direcciones. Nobleza obliga. voy a poner algunas imágenes donde se pueden ver distintas implementaciones y velocidades. la cantidad de direcciones siguientes también es un parámetro que hay que pasar. Bien. estas diapositivas las tome de las teorías de la catedra de Arquitectura de computadoras de la carrera de Licenciatura en Informática de la Universidad Nacional de La Plata.

17 .

18 .

19 .

20 .

No existe un tipo de memoria óptima para un computador. * Costo. * Capacidad.Memoria Interna La memoria interna de un computador tiene tan amplia diversidad que provoca un poco extenso estudiarla. 21 . por lo cual hay que utilizar varias clases en una misma máquina en busca de la combinación lo mas aceptable posible teniendo en cuenta principalmente 3 parámetros: * Velocidad de acceso.

tenemos que armar una jerarquía dentro de la máquina con varios de estos tipos de memoria. las memorias externas son mayores y se suelen medir en términos de bytes(Kbyte. en general coincide a la longitud de palabra del modulo de memoria. pendrivers. lectoras de CD/DVD. etc). Cuanto mas arriba. Esto se logra utilizando una jerarquía de memorias. Unidad de transferencia: En general la unidad de transferencia es igual al numero de lineas de entrada/salida de datos que posee el modulo de memoria. cuanto mas arriba menor la capacidad y cuanto mas arriba menor el tiempo de acceso. 16 y 32 bits. cintas. nos vamos a estar refiriendo a dispositivos periféricos a los cuales se accede a través de algún controlador de E/S (discos rígidos. Antes de abordar las técnicas de comunicación entre los distintos tipos de memorias. mayor el costo. Cundo decimos memoria externa. el tiempo de acceso se asemeje a los tiempos de las memorias de los niveles superiores y las capacidades se asemejen a las de los niveles inferiores. pero no debemos olvidar que existen otras.En esta pirámide podemos observar lo siguiente: cuanto mas arriba de la pirámide. siendo las longitudes mas comunes para las palabras las de 8. 22 . el procesador necesita su memoria propia (registros del procesador) y la unidad de control puede llegar a necesitar memoria propia. etc). Capacidad: Las memorias internas son las mas pequeñas y se miden en bytes o palabras. mas cerca (físicamente) del procesador nos encontramos. Mbytes. tratando de lograr que el costo se asemeje a los costos de las memorias de los niveles inferiores. Tbytes. Entonces. Memorias internas y externas. debemos saber un poco mas de sus características y clasificarlas según ellas. Cuando hablamos de memoria interna nos referimos generalmente a la memoria principal.

anteriores al que deseamos acceder. Un ejemplo de este tipo de acceso son las cintas magnéticas. Palabra: Es la unidad natural en que esta organizada la memoria.por lo general. El acceso es directo. luego dentro de la vecindad se hace un acceso secuencial contando o esperando alcanzar la posición final. La forma de acceder como su nombre lo indica es secuencial. Acceso directo: Cada unidad de información en que esta dividida la unidad tiene una dirección única basada en su ubicación física. Un ejemplo de esto son los discos magnéticos. teniendo que pasar por todos los registros intermedios. y no nos olvidemos que las unidades direccionables están directamente relacionadas con la anchura del bus de direcciones. pero como siempre hay excepciones. pero en algunos casos se puede direccionar de a nivel de byte. 23 . suele coincidir con con el numero de bits utilizados para representar los números y con la longitud de las instrucciones. Entonces finalizando este punto. pero no al dato especifico. Además de los datos se agrega información que permite distinguir donde comienza un registro y comienza otro y permite la escritura/lectura de los datos. Unidades direccionables: En muchos sistemas la unidad direccionable es la palabra. Para l memoria externa la unidades son mas grandes y se las llaman bloques. Métodos de acceso: Esta otra clarificación que podemos hacer varía según al la forma de acceder al dato. el acceso se logra mediante un acceso lineal especifico. El tiempo de acceso es variable. Vamos a aclarar 2 términos usados comúnmente para que se aclare un poco el tema. sino a toda la vecindad. hasta llegar al registro deseado. Acceso secuencial: Los datos se organizan en unidades llamadas registros. la unidad de transferencia es la cantidad de bits que se pueden lee o escribirá la vez y comúnmente coincide con la unidad de palabra o con la unidad direccionable. El tiempo de acceso es variable dependiendo de la ubicación del registro deseado.

Un ejemplo de este tipo de acceso es la memoria principal y algunos sistemas de cache. 24 . El tiempo de acceso a cada posición es constante y no depende de accesos anteriores.Acceso aleatorio: Cada posición de memoria direccionable tiene una acceso directo para acceder. cableado físicamente.

En memorias de acceso de acceso aleatorio es el tiempo entre que se pone la dirección en el bus y el momento en que el dato ha sido guardado (escritura) o el dato se encuentra disponible (lectura). Cada palabra de memoria tiene una acceso directo para acceder. dichas palabras además de los datos contienen información para identificar a que posición corresponden. Tiempo de ciclo de memoria: Es el tiempo necesario que se requiere para realizar la segunda lectura luego de haber realizado la primera. y es requerido para que finalizen las transacciones en las lineas de controlo para regenerar los datos si se trata de lecturas destructivas. el tiempo de acceso es el tiempo que se tarda en ubicar el mecanismo de lectura/escritura en la posición deseada.net. Muy buena imagen tomada de http://karman. muchas gracias.Un ejemplo de este tipo de acceso son algunos sistemas de cache. Generalmente este termino se usa con las memorias de tipo aleatorio. Para este cometido implementaron junto al Pentium MMX otro chip que era la memoria caché (256Kb). cableado físicamente. de ahí que tenga dos chips en un solo procesador. La comparación se hace en paralelo con todas las palabras almacenadas en la memoria.Acceso asociativo: Se compara una parte de la dirección a buscar contra una parte de las palabras almacenadas en este tipo de memoria. El chip de la izquierda es el procesador mientras que el de la derecha es una memoria caché (se denota por lo regular de la superficie). El tiempo de acceso es constante y no depende de accesos anteriores. Este es un Pentium Pro a 200 Mhz.homelinux. Para memorias de otro tipo de acceso. El Pentium Pro fué el primer procesador de intel diseñado específicamente para entornos de servidor. Tiempo de acceso: es el tiempo en que se tarda en la operación de lectura o escritura. 25 .

podemos podemos dar una aproximación de como se utilizan las cache: Cuando la CPU solicita un el contenido de una dirección. Teniendo el claro este principio. una mas lejos que la otra. se debe tratar de que no se detenga para esperar que lleguen las instrucciones y datos desde la memoria. El bloque extraído se guarda en la cache. en este punto para solucionar el tema entra la memoria cache. Para que quede mas claro el gran beneficio de la cache Supongamos que tenemos 2 niveles de cache L1 (nivel 1) y L2(nivel 2) 26 . cuando se accede a memoria.Velocidad de transferencia: Es la velocidad a la cual se pueden transmitir datos desde o hacia memoria. La motivación principal a este tema es la siguiente: La prioridad de todo el sistema es que la CPU ejecute la mayor cantidad de instrucciones. se va a buscar el dato a memoria. mas cara. si no se encuentra ahí. mas rápido es el acceso. primero se busca en la primera cache (rápidamente). la tasa de acierto es aproximadamente del 95%. también lo serán en un futuro próximo. Jerarquía de memoria: El tema clave de toda la organización de los distintos tipos de memoria esta en obtener una disminución de los accesos a las clases mas lentas de memoria. Las que están ubicadas en el mismo procesador se las llama de nivel uno (on chip). a conjunto extraído se lo llama bloque. sino que todo el conjunto de direcciones lo rodea. para memorias de tiempo aleatorio esto equivale a la inversa del tiempo de ciclo. y de ese bloque el dato solicitado se manda a la CPU. para los otros tipos de memoria se utiliza la siguiente relación: Estas 3 ultimas características de la memoria son las mas importantes desde el punto de vista del usuario junto a la capacidad. mas pequeña pero mas rápida. cuanto mas cerca del CPU. • Localidad espacial: los elementos cuyas direcciones están cercanas tienden a ser referenciados. por lo cual cuando estos datos se requieran. el acceso va a ser muy rápido. Esta memoria puede estar ubicada en distintas partes del computador. El procesador es mucho mas rápido que la memoria principal. Debido al principio de localidad. también están las de nivel 2 y nivel 3. Antes de proseguir debemos conocer a lo que se le llama "Principio de localidad" Principio de localidad de programas y datos • Localidad temporal: los elementos (datos o instrucciones) accedidos recientemente. no se extrae solo el contenido solicitado. Debido a los muy buenos algoritmos que manejan las cache. hay muy altas posibilidades que se requieran otros datos que contiene el bloque guardado en cache.

Memoria semiconductora: Antes de empezar con este tema aconsejo leer la muy interesante pagina que habla de la forma mas común de almacenar información en los computadores antiguos.05% de las veces.0025 % de las veces y a la memoria principal solo el 0. por lo cual va a estar menos tiempo esperando.000125.1µs + 1µs)= 0. 27 . los núcleos de ferrita. a L3 solo tendríamos acceder el 0.15µs a cada dirección de memoria.Estos cálculos son solo para tener una aproximación. A L2 accedemos solo el 0. ya que no se tienen en cuenta muchos factores.15µs Estamos teniendo un tiempo de acceso aproximadamente de 0. agregando un nivel mas L3.05*(0.95 + 0. Mas adelante voy a detallar mas su funcionamiento e implementaciones.1µs) + (0. L1 tiene un tiempo de acceso de 0.1µs y L2 de 1µs ( 0. La mayor parte del tiempo el procesador recibe datos e instrucciones rápidamente de la cache.

[align=center]Diálogo sobre las memorias de anillos de ferrita. RAM: La mas común. con lo cual se identifica un uno o un cero. que pueden mantener uno de dos estados mientras esten alimentadas. estaticas y dinamicas. como los Flip-Flops. a cada palabra que las componen se la puede acceder directamente. Las RAM estaticas estas conformadas por puertas bioestables. como un condensador. obviamente todas las memorias que vamos a ver en esta parte son pero a esta se la llama asi. (Random Access Memory) .[/align] Hoy en las memorias principales utilizan memoria principas. Todas los tipos de memoria que veremos aca son de acceso aleatorio. es volatil. vamos a enumerarlas y dar una breve descripción. Se puede escribir como leer rapidamente en ella. los datos bienen grabados ficicamente. Estas cargas disminuyen gradualmente por lo cual tienen implementadas un sistema de refresco. lo acual hace que sean mas pequeñas y economicas. como un circuito y 28 . el hecho de que tenga carga o no diferencia un uno de un cero. ROM: Read Only Memory. o sea que se pierden los datos cuando se apaga el computador. Las RAM dinamicas son mas simples y compactas. Las dinamicas estan compuestas por celdas que conservan la carga. solo se pueden leer. el cual cargara periodicamente las celdas con carga. Se las puede dividir en 2 grupos.

Son mas costosas que las ROM y PROM. No es volátil. No es volátil. En la imagen se puede apreciar la ventana. el tema importante es que antes de grabarla hay que borrarla completamente. lo cual se realiza exponiendo la ventanita del chip a rayos ultravioleta. EPROM: Memoria de solo lectura programable y borrable ópticamente. pero nos da mas ventajas. suele tardar unos cuantos minutos en borrarse. Podría grabarla el fabricante o el posterior comprador con un equipo especial. estas memorias se pueden leer y grabar eléctricamente. que viene tapada con una etiqueta para evitar borrados no intencionados. 29 .no es volatil PROM: Son iguales que las ROM pero estas se pueden grabar eléctricamente una vez.

EEPROM: Memoria de sobre todo lectura programable y borrable eléctricamente. La ultima es de 64GB de Samnsung. Flash: Iguales que las EEPROM pero mas mas rapidas. pero nos dan gran flexibilidad al poder actualizables mediante las lineas de datos. Estas 3 imagenes son de memorias flash. las podemos ver comunmente en los pen drivers. otra diferencia es que no permiten borrar a nivel de byte. 30 . Son mas costosas y menos densas. Se puede leer tanto como escribir de forma eléctricamente y solo el o los byte direccionados. solo se puede borrar a nivel de bloque. La escritura demora mucho mas tiempo que la lectura. direcciones y control.

Organización de la memoria semiconductora: 31 .

los cuales se utilizan para representar un uno o un cero. Por ejemplo una memoria de 16 Mbits podría estar organizado en 1Mpalabras de 16 bits cada una. Una de las características mas importantes de los chips de memoria. Lo mas común es que posean tres terminales. * Pueden leerse para saber su estado. * Puede escribirse en ellas al menos una vez. otra para indicar el tipo de operación (lectura/escritura). Organización típica de una DRAM de 16Mbits en la que se leen/escriben de a 4 bits simultáneamente: 32 . y otro para los datos. todas compartes algunas propiedades.El elemento básico de la memoria semiconductora es la celda de memoria. y desarrollare a continuación. es la cantidad de bits que se pueden leer/escribir simultáneamente. aunque existen muchas tecnologías utilizadas para su implementación. Lógica del chip de memoria: Las memorias semiconductoras vienen encapsuladas. en un extremo tenemos una memoria en la cual la organización física es igual a la lógica (igual a como la percibe el procesador). y cada chip contiene una matriz de celdas de memoria. uno para seleccionar la celda para lectura o escritura. como salida (lectura) o entrada (escritura). * Presentan 2 estados. Tenemos muchas formas de organizar la memoria. esto seria que el chip de memoria esta organizado en W palabras de B bits cada una. En el otro extremo tenemos la estructura llamada "un bit por chip" en la cual los datos se lee/escriben por bits.

Como comentario. Si el bus de datos del sistema fuera de 16 bits. para poder expresar 2048 combinaciones. el cuadruple de capacidad de direccionamiento con el solo hecho de agregar una linea mas. el doble de filas y el doble de columnas. 33 . necesitamos 11 lineas. tendría que tener 4 DRAM conectadas al controlador de memoria para poder leer/escribir una palabra en el bus de datos. los 4 de la misma posición relativa dentro de cada uno de los chips. el doble. esto se debe a que estas lineas dedicadas a especificar la dirección están multiplexadas en el tiempo.Lógicamente la matriz esta compuesta por 4 matrices cuadradas de 2048 X 2048 elementos. o sea. por lo cual a cada chip entran 11 lineas para especificar la fila de la matriz y 11 lineas para especificar la columna de la matriz. por ejemplo con el caso anterior con 11 lineas se obtienen 2048 posibles combinaciones. el uso de matrices cuadradas y de lineas de direcciones multiplexadas provoca que con cada linea que se agrega a las lineas de direcciones la capacidad se podria cuadriplicar. Para poder seleccionar un elemento particular de cada chip de 2048 X 2048 se necesitan. De cada chip obtengo un elemento. primero se pasa la dirección que especifica la fila y luego se pasa la dirección que especifica la columna. a la DRAM solo entran 11 lineas de datos ( de A0 a A10). con 12 lineas 4096. Como se puede ver en este gráfico.

donde N es igual a la cantidad de bits por palabra. Ahora. en cambio si cada chip tiene 1 bit de entrada/salida. claramente necesito N chips. en el ejemplo anterior el chip tenia una entrada/salida de 4 bits.En el diagrama anterior se muestra el encapsulado típico de una DRAM de 16Mbits. 34 . Para ejemplificar veamos una forma de organizar un modulo de memoria de 256K palabras de 8 bits.

en el chip inferior del gráfico debería decir "Chip #8" En el diagrama podemos apreciar que las lineas de datos no se multiplexan. Como ya hemos visto cuando el procesador necesita acceder a una dirección de memoria. cada bit seleccionado de cada chip conformara la palabra. al momento de leer una de las 256k palabras de 8 bits. se envía la dirección y se selecciona un bit de cada chip (la misma ubicación en cada chip). Memoria Cache: El objetivo de la memoria cache es obtener un tamaño grande de memoria. entonces se accede a la memoria principal y se extrae el conjunto próximo a la dirección buscada y se pone en la cache. se llama fallo o "MISS". si esta. con una velocidad tendiendo a la de las memorias mas rápidas y un costo tendiendo a las mas baratas. se llama acierto o "HIT".Aclaración: El diagrama anterior tiene un error. entonces la dirección es accedido directamente de la cache. si no esta en la cache. 35 . Cada chip posee 512 X 512 (256K) elementos de 1 bit. primero se fija si esta en la cache.

para aprovechar el principio de proximidad. 36 . la otra primero se pasa el bloque de palabras a la cache y luego esta. pasa la dirección solicitada a el procesador. una es que se pasa el bloque de memoria a cache y se pasa la dirección solicitada al procesador en paralelo. En esta parte tenemos dos organizaciones mas comunes. al mismo tiempo. primero se pasa el bloque a la cache y luego se pasa la palabra a el procesador. Este seria el diagrama del del segundo caso.

este seria el primer caso que hacia referencia el párrafo anterior y es la organización que se usa en general en las cache actuales. si esta se capta la palabra para luego pasarla al procesador. El flujo seria algo así: el procesador pone la dirección requerida en RA.Es este diagrama podemos ver la operación de lectura. se chequea si la dirección esta en cache. un registro donde el procesador pone la dirección a la que quiere hacer referencia. me imagino que es Registry address. realmente no se bien a que se refiere con RA. se decide en que lugar de la cache se va a alojar el bloque y EN PARALELO se pasa el bloque a la cache y se pasa la palabra al procesador. 37 . si no esta se accede a memoria.

o sea que la proxima instruccion a captar es la inmediatamente siguiente a la ultima captada. si hay un acierto. La cache se interpone físicamente entre la memoria y el procesador. se inhabilitan los dos buffer y el trafico es solo de cache a procesador. Algunas afirmaciones para ver que la localidad tiene sentido: * Exepto cuando hay instrucciones de salto. en general el programa queda confinado a una ventana bastante estrecha de profundidad o nivel de anidamiento de procedimientos. por lo cual. si hay un fallo. y por medio del bus del sistema se accede a la memoria principal. * La mayoria de las instruccioes iterativas contienen pocas instrucciones. estas agrupaciones cambian. quiere decir que las referencias en un lapso de tiempo hacen referencia a un conjunto de palabras que están próxima físicamente. durante el periodo que dure la iteracion. por lo cual. * En muchos programas se hecen referencias a estruccturas de datos como secuencia de registros o matrices. Este principio establece que las referencias a memoria tienden a formar agrupaciones. pero durante periodos cortos de tiempo el procesador hace referencia a algun conjunto en particular. en muchos casos estas unidades de datos se encuentran en posiciones contiguas de 38 . se va a hacer referencia a instrucciones contiguas. para tener un tiempo de acceso rapido. y la ventana de profundidad durante la iteracion va a ser pequeña. en general la ejecucion de un programa es secuencial. luego se transfiere el bloque de datos a la cache para después esta entregar la palabra al procesador. se coloca la dirección en el buffer de direcciones. Antes de seguir con las características de la cache vamos a ver un poco mas sobre el principio de localidad. en el caso de entregar los datos primero a la cache y luego al procesador. el tema es que ese grupo o bloque este en ese periodo de tiempo en cache.En este diagrama se ve como estaría dispuesta la cache con sus lineas de conexión. en un periodo corto de tiempo las referencias tienden a localizarce en unos pocos procedimientos. * Es raro tener una seguencia larga initerrumpida de llamadas a procedimientos con sus retornos correspondientes.

Diversos estudios han llegado a que el tamaño óptimo estaría entre 1K y 512K palabras. Función de correspondencia: 39 . Como se vera que no hay duda de los beneficios de tener en cuenta este principio. por lo cual se va a estar haciendo referencia a un mismo bloque de datos. es imposible predecir un tamaño óptimo. uno es que cuanto mas grandes las caches. lo cual implica que un mayor el tamaño tiende a cache mas lentas. y la cache depende de eso. Este tema es muy estudiado por su gran importancia en el rendimiento del computador. ahora para aprovecharlo tendríamos que saber el tamaño óptimo del bloque para pasar de memoria a cache y la cantidad de bloques que tendría que alojar la cache. Como las tareas a realizar por el procesador son muy variables. Mas adelante vos a ampliar esta parte. se aprecia como durante un periodo apreciable de tiempo se hace referencia a llamadas que contiene una misma ventana. para eso seguiré con las características de las cache. y que sea lo suficientemente grande para que la velocidad de acceso promedio se aproxime a la velocidad de la memoria cache. Tamaño de la cache: Lo ideal seria tener una cache lo suficientemente pequeña para que el costo promedio por bit se aproxime al costo de la memoria principal. Este gráfico se basa en las llamadas a procedimiento de un programa con su retorno correspondiente. ya que hay muchos datos interesantes. mayor puertas implicadas en el direccionamiento de estas. Estructura de la cache: Vamos a ver algunos criterios básicos de diseño que nos van a servir para clasificarlas y poder diferenciar las distintas arquitecturas de cache.memoria. Igualmente hay otros motivos que nos restringen a tamaños de cache grandes. en el se puede observar ventanas de profundidad igual a 5.

La memoria principal consta de hasta 2 elevado a la N palabras direccionables de n bits cada una. debe haber una función de correspondencia que nos indique a que bloque de memoria principal corresponde cada línea de la cache. * Asociativa. * Una memoria principal de 16Mbytes. estas palabras están agrupadas en M bloques de k palabras cada uno. * Asociativa por conjuntos. además que necesitamos elegir que bloque se van a almacenar en la cache. En todo momento hay un subconjunto de bloques alojado en la cache. Para poder realizar la correspondencia vamos a considerar que la memoria consta de 4M bloques de 4 bytes cada uno. por lo cual la cache esta organizada en 16K líneas de 4 bytes cada una. para lo cual se necesita una dirección de 24 bits para poder hacer referencia a los 16M de direcciones. Correspondencia directa: 40 . * Los datos se transfieren entre memoria y cache en bloques de 4 bytes. direccionable de a byte. y como hay menos líneas en la cache que bloques en la memoria principal. Pueden utilizarse 3 técnicas de correspondencia: * Directa. Para explicar las tres técnicas vamos a usar los siguientes elementos: * Cache de 64 Kbyte. La cache consta de C líneas de K palabras cada una.

cada bloque de la memoria principal se puede alojar solo en una línea específica de la cache. cada etiqueta identifica un conjunto de bloques. 41 . La función de correspondencia se implementa tomando la dirección de memoria y dividiéndola en tres. el sistema toma de la dirección la parte que identifica la línea. entonces recién ahí se usan los bits menos significativos de la dirección para identificar la palabra dentro de la línea de la cache. si en esa línea encuentra la etiqueta igual a la etiqueta de la dirección de memoria se ha producido un acierto. la parte menos significativa identifica la palabra dentro del bloque. este numero de línea se corresponde con la línea de cache. Debido a este tratamiento cuando se necesita buscar una dirección en cache.Es la más simple. y va a la cache y busca en ese mismo numero de línea la etiqueta. lo que resta se divide en dos. y el resto identifica la línea dentro de este conjunto de bloques. la parte mas significativa identifica la etiqueta.

a los que les corresponde la misma línea dentro de la cache. para que la búsqueda tarde lo mismo que en la correspondencia directa. simultáneamente. En la correspondencia directa la lógica de la cache se dirigía directamente a una linea en particular de la cache. para lo cual la lógica de la cache interpreta la dirección de memoria de la siguiente forma: los bits menos significativos sirven para identificar la palabra dentro de la linea. asiendo que baje la tasa de asierto. tendría que comparar cada etiqueta de cada linea de la cache hasta encontrar coincidencia o el final de la cache. por lo cual menos costosa pero tiene un problema importante. mediante circuitería extra se hace la comparación de todas las etiquetas de las lineas de la cache en paralelo. porque cada bloque se podía ubicar solo en una linea determinada de la cache.Como se puede ver. Correspondencia asociativa: Esta correspondencia supera la desventaja de la anterior. Es la función más fácil de implementar. Este problema se resuelve con la siguiente función de correspondencia. Obviamente al ser mas compleja la circuitería. La principal desventaja de esta correspondencia es la complejidad de la circuitería requerida. los bloques de la memoria principal se pueden ubicar en cualquier linea de la cache. como un bloque de memoria puede alojarse en cualquier linea de la cache. una sola comparación. cada posición de la memoria principal se puede alojar solo en una posición de la cache. en ese caso el sistema estaría cambiando continuamente el bloque dentro de la cache. y al resto de los bits se lo llama etiqueta y sirve para identificar si la linea le corresponde al bloque requerido. En el caso de la asociativa. el costo es mayor. 42 . Imaginemos que el procesador hace referencia repetidas veces a dos palabras de bloques de memoria principal diferentes.

Lo mas común son las cache organizadas en 2 conjuntos. la lógica de la cache solo tiene que chequear una posición de cada conjunto. Las de 4 vías producen una leve mejora y mas vías producen muy poca mejora. una comparación por vía. Como un bloque de memoria principal solo se puede ubicar en un solo conjunto. 43 . la cache se divide en conjuntos y un bloque de memoria principal puede ubicarse solo en una posición. y además hay que compararla contra menos posiciones de la cache.Correspondencia asociativa por conjuntos: Esta correspondencia toma lo bueno de las dos anteriores. mejora considerablemente el rendimiento de la asociativa. pero de cualquier conjunto. la etiqueta a comparar posee menos bits. y se la llama correspondencias asociativa por conjuntos de 2 vías.

un bloque de memoria principal puede ubicarse en una sola ubicación de cualquiera de los dos conjuntos de la cache.Este gráfico ejemplifica una correspondencia asociativa por conjuntos de 2 vías. ahora tenemos que ver como decidir que bloques nos conviene que estén en la cache. Por ejemplo imaginemos que tenemos una correspondencia directa. en determinada linea X de la cache tenemos un bloque de memoria al que el procesador uso recientemente. Algoritmos de sustitución: Ya vimos los métodos para saber que bloques están en cache. a la lógica de la cache no le queda otra que sacar el bloque 44 . ahora el procesador requiere otro bloque de memoria que le corresponde la linea X de la cache.

Probablemente el mas efectivo el LRU (Last Resently Used) "utilizado menos recientemente". el de la cache o el del modulo de E/S?. cual es el dato valido?. Ahora imaginemos que el modulo de E/S va a realizar una escritura. Otra posibilidad es el FIFO (FIrst In First Out) "primero en entrar. Existen 2 grandes problemas a resolver. esto es implementado fácilmente mediante una técnica cíclica "buffer circular". vamos a explicar algunas técnicas de escrituras que difieren en su prestación y costo de implementación. Otra técnica no basada en el grado de utilización seria en elegir la linea aleatoriamente (al azar). Primero. solo necesitamos 1 bit extra por linea. primero en salir" En este algoritmo se reemplaza el bloque que ha estado mas tiempo en la cache. y la dirección en cuestión esta en cache y fue modificada.actual y poner el nuevo. La lógica de la cache debe actualizar el bloque de memoria principal correspondiente a la linea modificada antes de alojar el nuevo bloque. por ejemplo imaginemos un modulo de E/S que accede para lectura a la memoria principal. Esto es fácil de implementar en la correspondencia asociativa por conjuntos de dos vías. y el de la otra vía en 0. Pero con las otras 2 correspondencias la lógica de la cache tiene varios lugares para poner ese bloque que el procesador requiere. Otra podría ser LFU (Last Frequently Used) "menos frecuentemente usado". el dato que se lleva el modulo de E/S va a ser erróneo. mas de un dispositivo puede tener acceso a la memoria principal. Una vez que una dirección se ha modificado en la cache. la dirección correspondiente de memoria deja de tener validez. Otro problema mas complejo se da en sistemas con varios procesadores en que cada uno posee su 45 . es tan simple como elegir la linea que posea el bit extra en 0. Imaginemos una linea de cache la cual a sido modificada por el procesador. si la dirección accedida esta en cache y fue modificada. En este algoritmo se reemplaza el bloque que se ha mantenido mas tiempo en la cache sin haberse referenciado. En esta parte vamos a ver los algoritmos usados para decidir que linea sacar de la cache para alojar el nuevo bloque requerido. para esto se tendría que implementar un contador. en este caso se sustituye la linea que posee menos referencias hechas. Bien con el problema ya descripto. cuando una linea es referenciada se pone ese bit extra de esa linea en 1. ahora el procesador requiere un bloque de memoria el cual va a ser alojado en esa linea modificada de la cache. Estudios realizados indican que las prestaciones de esta técnica son levemente inferiores a las descriptas anteriormente basadas en el grado de utilización. Cuando necesitamos guardar un nuevo bloque. Política de escritura: Un problema que todavía no se ha mencionado es el tema de la validez de los datos un bloque de memoria principal respecto a la linea correspondiente en cache.

esta memoria no es transferible a la cache. Para los sistemas con varias unidades procesador-cache. todas las escrituras se hacen tanto en cache como en memoria principal. en el momento de modificar un bloque. y existe la posibilidad de que se genere un cuello de botella. por lo cual cada vez que se accede a la memoria compartida por parte de un procesador. no solo alcanza con mantener la coherencia entre la cache modificada y la memoria principal. El hecho de modificar una dirección de la cache. porque es imposible que que la memoria compartida se encuentre en cache Tamaño de linea: 46 .Entre las técnicas usadas pala lograr esto se encuentran: Vigilancia del bus con escritura inmediata: Todas las caches monitorean las lineas de direcciones del bus. los accesos de los módulos de E/S deben hacerse a través de la cache para chequear primero si están ahí. hacia la memoria principal. Como una parte de los datos de memoria no son validos porque todavía no se han actualizado. sino que también podría invalidad datos de las otras caches. estos pueden monitorizar el trafico hacia memoria y detectar modificaciones en direcciones que dichas caches contienen. Recién en el momento de sustituir el bloque de la cache. Otra técnica es la llamada "post-escritura". La principal desventaja de esta técnica es que aumenta considerablemente el trafico a través del bus. a un sistema que tiene en cuenta este punto se le dice que mantiene la coherencia de cache. sino que además hay que mantener la coherencia entre la información de las cache. antes de reemplazar el bloque se actualiza la memoria principal. quiere decir que antes se ha producido un fallo en la cache. además de modificar el bloque. La técnica mas sencilla es la llamada "escritura inmediata". se chequea este bit extra para saber si se ha modificado el contenido. no solo invalida la dirección correspondiente en la memoria principal. cada ves que una cache es modificada. Transparencia hardware: Se utiliza hardware adicional.propia cache. Memoria excluida de cache: Con esta técnica solo una porción de la memoria principal es compartida por los procesadores. procede a invalidar su linea de cache. Esto hace que la circuitería tenga que ser mas compleja. para así mantener la coherencia de datos. En sistemas con mas de una unidad procesador-cache. se utiliza ese bit extra para marcar que el bloque ha sido modificado. y entonces usar información valida. En esta técnica la cache dispone de un bit extra por linea de cache. el la cual se minimizan las escrituras en memoria. cuando una cache detecta que se ha modificado un bloque de memoria que ella posee. este hardware se encarga de mantener la coherencia con la memoria principal y otras caches. esta modificación solo se hace en la cache. lo cual podría producir un cuello de botella en el sistema. si se ha modificado.

la proximidad se va haciendo mas lejana. mas lejana va ha ser la proximidad de las palabras extra con respecto a la requerida en consecuencia menos probable va a ser que sea requerida en corto plazo. Segundo. se ha logrado reducir considerablemente los tamaños de las caches. lo que permitió incorporarlas dentro del mismo procesador. y así empieza a reducirse la tasa de aciertos. Dos factores entran en juego en este tema: Primero es que cuanto mas grande sean los bloque menor sera el numero de estos que entren en la cache. mejorando aun mas los tiempos promedio de acceso a datos e instrucciones alojados en memoria principal. la primera es el tema del balanceo según las necesidades. pero parecería que un tamaño entre 4 y 8 unidades direccionables seria próximo a lo óptimo. reduciendo los tiempos de acceso hasta hacerlos casi nulos. pero al pasar un cierto numero de palabras. el sistema lleva a la cache no solo esa palabra sino también las palabras de su vecindad. y se pueden llegar a requerir en un mismo momento datos e instrucciones. esto se debe principalmente para explotar mas la técnica de ejecución de tareas en paralelo. En procesadores que se implementa segmentación de cause "Pipelining" . para aprovechar el principio de localidad. se ha hecho normal particionar la cache y dedicar una a almacenar datos y otra a almacenar instrucciones. por ejemplo el 47 . por el hecho de tener mas palabras próximas a la referenciada. por ejemplo supongamos el caso ficticio que el procesador requiera de memoria principal solo instrucciones. La otra ventaja mas obvia es que solo habría que diseñar e implementar una sola cache. Numero de caches: Debido al aumento logrado en la integración de los circuitos. si no estuviera particionada. cual sera la cantidad óptima de palabras que deba contener ese bloque?. ahora. Las caches unificadas presentas 2 grandes ventajas. Pese a esto la tendencia se fue incrementando para el lado de las caches partidas. dentro del procesador se realizan en paralelo distintas tareas. Al ir aumentando la capacidad de palabras de la linea de cache va a ir aumentando la tasa de aciertos. lo que se llama bloque. Y el hecho de que halla menos bloques. con posibilidad de ser usadas. Bien. en el caso de cache partida. el solo uso de la cache balancea según las necesidades la cantidad de instrucciones o datos cargados en la cache. en ese punto seria mas conveniente reemplazar la linea. una dedicada a datos y otra a instrucciones. en cambio. Luego se incorporo un segundo nivel de cache. no pudiéndose aprovechar completamente el principio de localidad. Con la cache partida se elimina la competencia por el acceso a ella. por haber muchas variables en juego.Cuando el procesador requiere acceder a una palabra de la memoria principal. tendríamos la cache de datos casi sin uso. Además de incorporar 2 niveles de cache. Es difícil establecer un numero de palabras óptimo. nada de datos. por sera reemplazado por otro mas rápidamente. produce que este permanezca menos tiempo en cache. es que cuando mas palabras tenga el bloque.

Estos registros están el lo mas alto de la jerarquía de memoria. y son también usados por programas privilegiados del sistema operativo. para eso necesita de una pequeña memoria interna. Para realizar estas tareas. * Procesar datos: La ejecución de una instrucción puede requerir que se realice alguna operación aritmética o lógica. * Escribir datos: La instrucción puede requiere que se escriban datos en memoria o en algún modulo de E/S. la cual ya hemos nombrado. las mas pequeñas.pre-captador de instrucciones podría tratar de acceder a la cache en busca de futuras instrucciones. hacer uso de ellas. la CPU requiere de la capacidad de poder almacenar algunos datos temporales. y no podría hacerlo. por lo cual son a los que se accede mas rápidamente. porque la ALU en ese momento esta haciendo uso ella para obtener operandos. para controlar la ejecución de 48 . para saber que acciones se deben realizar. Registros de control y estado: Son usados por la unidad de control para controlar la CPU. que son los registros. Se las dividen en 2 grupos: Registros visibles al usuario: Permiten a los programadores de bajo nivel. * Interpretar una instrucción: La instrucción debe ser decodificada. y las mas caras. Registros: Primero recordemos las cosas que debe poder hacer la CPU: * Captar instrucciones: La CPU lee una instrucción de memoria.

etc. Por ejemplo hay instrucciones que permiten direccionar una posición de memoria usando cualquier registro. También debemos tener en cuenta el tamaño del registro. ya que mas registros requieren mas bits para poder identificarlos. los de datos deben poder contener los valores de los distintos tipos de datos. negativo. mientras hay otras instrucciones que trabajan con registros específicos.programas. Registros visibles al usuario: Estos registros pueden ser referenciados por medio de lenguaje de maquina. si fue positivo. Estos flags son bits. en la ALU realizaríamos una resta de los 2 operandos y solo habría que chequear el flag que nos indica si el resultado fue cero. O por ejemplo si la comparación que hiciéramos fuera un "A<B" . luego durante la ejecución de la subrutina la CPU hace uso de estos registros. en la ALU haríamos A-B y solo habría que chequear el flag que nos indica si el resultado fue negativa. Un tema importante a tener en cuenta es la cantidad de registros de uso general. overflow. es la flexibilidad en el trabajo que le da al programador. En algunos sistemas se permite el uso de dos registros como si fuera uno solo para aumentar su capacidad. lo que hace a la instrucción mas corta. Direcciones. nulo. por ejemplo en operaciones de salto o bucles. También existen instrucciones de direccionamiento que hacen uso de un registro determinado. pero no se pueden modificar. 49 . si realizo una operación aritmética. por lo cual en las instrucciones necesitaran mas bits en el campo del operando. Un registro de uso general se puede usar para cualquier cosa. los flags nos van a indicar. Son de mucho uso para corroborar resultados. La ventaja de un registro de uso general. esta cantidad afectara a la longitud de las instrucciones. la desventaja de un registro general y a su ves ventaja de un uso especifico (datos o direcciones) esta en que las instrucciones no debe especificar en que registro se encuentra el dato o dirección. se vuelven a poner los mismos valores en estos registros para asi poder continuar con la ejecución tal cual como lo venia haciendo antes de la llamada a subrutina. Muchas veces también se realizan operaciones y solo se miran los flas. y podemos clasificarlos de la siguiente forma: * * * * De uso general. Estos registros son visibles al programador o parcialmente visibles. hay que usar determinado registro. y cuando se retorna al programa que llamo a la subrutina. el registro ya esta implícito con la instrucción. por ejemplo. si hubo carry. Datos. que utiliza el hardware de la CPU para indicar algún tipo de información adicional al resultado de la operación que acaba de realizar. Código de condición. ya se sabe que para determinada instrucción. que hacen una copia de estos registros. se toma la decisión de saltar o volver a ejecutar el bucle luego de hacer una comparación "=". la paridad. en si el resultado no nos interesa. Los de direcciones deben poder contener la dirección mas alta. pero ese registro además se le puede dar otro uso. Hay ciertas instrucciones como las de llamada a subrutina. este uso esta estrechamente ligado al repertorio de instrucciones. seria de uso mas o menos general. La ultima clasificación de los registros visibles al usuario son los que almacenan los códigos de condición o "Flags".

en esos casos es responsabilidad del programador.Contador del programa (Program counter): Contiene la dirección de la próxima instrucción a captar. * IR . Los mas importantes son: * PC . el resguardo de los flags no se hace automáticamente por la CPU.Registro de dirección de memoria (Memory address register) Contiene la dirección de una posición de memoria. * MAR . Registros de control y estado: Estos registros se usan para controlar el funcionamiento de la CPU. algunas de ellas pueden ser visibles por instrucciones de máquina ejecutadas en modo de control o de sistema operativo. cuando se llama a la subrutina. y . En este gráfico podemos apreciar un poco mas en detalle la estructura interna de la CPU. o la que se a leído ultima. * MBR . se 50 .En otras máquinas.Registro intermedio de memoria (Memory buffer register) Contiene la palabra de datos a escribir. en general no son visibles al usuario.Registro de instrucción (Instruction register) Contiene la ultima instrucción captada.

Bueno. * Procesador-E/S: Transferencia de datos desde o hacia el exterior a través de un modulo de E/S. vamos a agregar algunas etapas 51 . un bus interno. Básicamente se capta la instrucción de memoria principal. Dicha ejecución la voy a empezar a describir empezando por la forma mas simple. Procesador: Ciclos de una instrucción: Como ya hemos visto la función de un computador es la ejecución de un programa. * Procesamiento de datos: Alguna operación aritmética o lógica con los datos. * Control: Por ejemplo una instrucción de salto. en 2 etapas. la CPU interpreta la instrucción almacenada en IR y realiza las acciones necesarias para que se ejecute la acción requerida. y las conexiones de la unidad de control para indicarle al los registros.pueden ver las conexiones internas. que operación queremos realizar (lectura o escritura) también se pueden ver los flags. se guarda el código de la instrucción en el registro IR. y es el procesador el que se tiene que encargar de ejecutarlas. que lo único que requiere es que se cambie el valor del registro PC. captación de la instrucción y ejecución de la instrucción. las conexiones de datos de los registros. en general las acciones que puede realizar la CPU se pueden agrupar en: * Procesador-memoria:Transferencia de datos desde o hacia memoria. Una instrucciones requieren una combinación de algunas. Como ya hemos visto anteriormente. entonces la ejecución de un programa consta en la repetición del proceso de captación y ejecución de instrucciones. el cual esta compuesto por un conjunto de instrucciones.se incrementa el registro PC.

DO . cada instrucción ocuparía 2 posiciones de memoria. IOD . OF . OS . al terminar de almacenar el resultado no captan la siguiente instrucción.IAC . las etapas están dispuestas tal que en la parte de arriba están las etapas que requieren salir del procesador. por eso. pero no siempre. en ese caso tendríamos que sumar 2 al PC.Operand store: Se almacena el operando en memoria o a través de E/S.Operand address calculation: Si el o los operandos se encuentran en memoria o se accede a ellos a través de E/S. con el cual un modulo de E/S puede interrumpir el procesamiento normal de la CPU.Instruction fetch: La CPU lee la instrucción desde su posición en la memoria. esto se debe porque hay instrucciones que requieren varios operandos y hay otras que generan mas de un resultado. En el gráfico podes observar varias cosas. en vez de eso.Instruccion operation decoding: Decodifica la instrucción para saber el tipo de operación a realizar y los operandos a utilizar. 52 . Interrupciones: Para seguir con el ciclo de la instrucción voy a dar una idea de lo que es una interrupción. pero si la memoria estuviera direccionada de byte. Supongamos que las instrucciones tienen un largo de 16 bits y la memoria esta direccionada de a 16 bits. Una interrupción es un mecanismo. OAC . IF . en ese caso sumariamos 1 al PC. Por ultimo hay instrucciones que realizan una misma operación con distintos valores de un vector. captan el próximo valor del vector realiza lo mismo con otros valores. mas adelante la veremos con mas profundidad. Otra cosa para destacar son las flechas dobles en el momento de ir a buscar un operando o al almacenarlo.Instruction address calculation: En general consiste en sumar 1 al registro PC. se determina la dirección. y la la parte inferior están las etapas que se solucionan internamente.Operand fetch: Se capta el operando de memoria o a través de E/S.Data operation: Se realiza la operación que requiere la instrucción.

ya sabemos que la mayoría de los dispositivos externos son las lentos que la CPU. • La CPU está ocupada con la operación de E/S durante 0. rti) • Para transferir 10 Kbytes tenemos que ejecutar 10. comprobar estado. (en ese tiempo la CPU podría haber ejecutado 1000 millones de instrucciones) Con el uso de interrupciones la CPU no tiene que esperar. imaginemos la CPU imprimiendo un documento Procesador a 200 MHz (tiempo ciclo reloj = 5 ns. Esta diferencia es tan marcada porque el periférico es realmente muy lento. • Si la gestión de interrupción (ATI) tiene 10 instrucciones (salvar contexto. 53 . restaurar contexto. Con interrupciones: La impresora genera una interrupción cada vez que está preparada para recibir un nuevo byte.000 veces el tiempo que la CPU está ocupada gestionando la impresora.000 caracteres por minuto = 1 Kbyte/s Hasta hora lo único que podíamos hacer era que la CPU envíe los datos que pudiera recibir la impresora y esperar que termine de imprimir o que solicite mas datos. mandaría los datos a la impresora y seguiría haciendo alguna tarea productiva.000 veces la ATI ⇒ ejecutar 100.Esto sirve para mejorar el rendimiento del sistema. solo con las interrupciones no alcanza para solucionar el problema. con periféricos rápidos. transferir byte. • La E/S por interrupciones reduce en 10.001 seg.001 seg. Sin interrupciones: • La CPU entra en un bucle y envía un nuevo byte cada vez que la impresora está preparada para recibirlo. • La impresora tarda 10 seg en imprimir 10 Kbytes • La CPU está ocupada con la operación de E/S durante 10 seg. en promedio) • Una instrucción tarda en promedio 2 x 5 ns = 10 ns =>lla computadora puede ejecutar ~100 Mips Queremos imprimir un archivo de 10 Kbytes en una impresora láser de 20 páginas por minuto • 1 página ≅ 3. Ciclos por instrucción CPI = 2 .000 instrucciones para atender al periférico ⇒ la CPU tarda 0. Ejemplo. Este mecanismo puede llegar deshabilitarse si es necesario.000 caracteres (1 carácter = 1 byte) • La impresora imprime 60.

las 2 cruces identifican las interrupciones. cuando termina el periférico su tarea. Se puede ver. prepara lo necesario para que se pueda realizar la operación requerida con el periférico. y así las va ejecutando secuencialmente. para luego proseguir con la ejecución del programa original. seguido a esto se ejecuta la instrucción solicitada. en algunos casos el programa cargado puede realizar alguna otra tarea relacionada. por ejemplo mandar información de algún error que se halla detectado en el periférico. un periférico el procesador ejecuta un programa que atiende al modulo de entrada salida. que mientras esta funcionando el periférico (entre los círculos 4 y 5) el CPU no hace nada. Bien. Cuando se atiende. 54 . la primera es que mientras se esta atendiendo una interrupción se desactivan las demás. en cambio se puede apreciar en la segunda seccione del gráfico. que sucedería si ocurre una interrupción mientras se esta ejecutando una interrupción? Hay 2 alternativas. solo espera que termine. este programa se carga. antes de proseguir con la ejecución del programa principal. en la primera sección.En este gráfico se muestra el tiempo que utiliza la CPU en el periférico. que luego de que el programa que atiende la E/S pone en funcionamiento el periférico. la linea punteada nos marca en que se estaría utilizando el CPU. para el lado del periférico o para el lado de los buses. el procesador dedica su tiempo en procesar el programa original hasta que reciba una nueva interrupción. luego que se termina de atender la interrupción el procesador. chequea si hay alguna interrupción pendiente.

se carga el PC con la nueva dirección y se empieza a ejecutar las instrucciones del programa que atiende la nueva interrupción. al terminar se continua atendiendo la interrupción anterior.La desventaja es que no se tiene en cuenta ninguna prioridad. y es necesario porque hay peticiones que en la que es importante atenderlas rápidamente y hay otras que no. La otra alternativa es que las interrupciones tengan prioridad. se vuelve a la ejecución del programa principal. se almacena el contexto de ejecución de la interrupción en curso. si una interrupción es interrumpida por otra que posee mayor prioridad. 55 . y cuando se termina de atender esta. entonces.

56 . el gráfico hubiese sido similar al de la primera parte. Sabiendo un poco de las interrupciones ahora podemos agregar una nueva etapa al ciclo de la instrucción básico. en caso contrario.En la primera parte del gráfico se muestra como seria una atención secuencial de interrupciones. una dentro de otra. y en la segunda parte muestra el procesamiento de interrupciones anidadas. obviamente la interrupción "Y" es de mayor prioridad que la "X".

Las instrucciones pueden contener uno. etc) cargara en el registro PC la dirección donde esta el programa que atiende la interrupción. y empezara a captar y ejecutar las instrucciones del programa de atención a la interrupción. el ciclo es igual. registro PC. varios o ningún operando. los mas comunes son: 57 . este operando puede pasado de distintas modos de direccionamiento. si lo hay.En este gráfico podemos ver que si las interrupciones están deshabilitadas. pero si están habilitadas antes de captar la próxima instrucción. También vamos a agregar la etapa de detección de interrupciones el gráfico mas detallado: A esto faltaría agregarle una etapa. chequea si hay alguna interrupción pendiente. en la etapa "Check for Interrupt" el procesador guardara el contexto (registro que contiene los flags.

* Direccionamiento indirecto a través de memoria: En la instrucción se encuentra la dirección en donde se encuentra el operando. usando la pila. estos direccionamientos varían según el procesador. Sabiendo esto podemos ver que faltaría una etapa para acceder al valor del operando en los direccionamientos indirectos. con desplazamiento. y otros modos y subdivisiones de cada uno. que no vienen al caso explicar ahora como.* Direccionamiento inmediato: El valor del operando se encuentra incluido en la instrucción. * Direccionamiento indirecto a través de registro: En la instrucción se hace referencia implícitamente o explícitamente al registro en donde se encuentra la dirección efectiva del operando. * Direccionamiento directo: En la instrucción se encuentra la dirección efectiva en donde se encuentra el operando o el registro donde se encuentra el operando. este operando contiene la dirección de donde se encuentra el valor a procesar. Flujo de datos: Veamos un poco como se usan los buses en el ciclo de una instrucción: 58 .

A continuación el MBR copia la información que se encuentra en el bus de datos al cual esta conectado. luego la unidad de control manda señal de lectura por el bus de control.Ciclo de captación: En el momento de captar la próxima instrucción. 59 . y entonces la memoria coloca en el bus de datos la información requerida. s toma la dirección contenida en el PC y se coloca en el MAR. y como paso final el dato contenido en MBR pasa a IR.

Ciclo indirecto: Si el operando utiliza direccionamiento indirecto. En cambio. son muchas las posibilidades de flujos posibles. la unidad de control manda señal de lectura. 60 . estos bits se pasan al MAR. entonces se toma los N bits mas a la derecha del registro MBR. todo depende de la instrucción que el ciclo de captación halla dejado en IR. la memoria pone los datos solicitados en el bus de datos. el ciclo de interrupción es predecible como los 2 primeros. los cuales corresponden a la dirección de referencia del operando. la MBR capta la información del bus de datos El ciclo de ejecución no tan fácil y predecible como los dos anteriores.

La técnica de segmentación de cause intenta que trabajen las distintas partes del procesador en paralelo. Por ejemplo cuando la etapa de ejecución recibe la instrucción. dependiendo del tamaño del dato a guardar puede que este proceso ser repita mas de una vez. por ejemplo. Que es la segmentación de instrucciones?. abarca varias etapas. luego de esto se coloca el dato a guardar en MBR. gracias a lo que se realizo. para eso la unidad de control coloca en MAR la dirección en donde hace el resguardo de esos datos. Para explicarlo recordemos primero el ciclo de la instrucción. Segmentación de cauce: Las técnicas de organización se fueron implementando a medida que la tecnología fue avanzando y permitieron ponerlas en practica. en las cuales se realizan distintas tareas. Otro ejemplo podría ser un lavadero de ropa. en la cual el producto va pasando por distintas etapas y en cada una se le hace algo al producto. como son distintas. el contexto del CPU debe guardarse (flags y PC). la etapa de captación se libera y podría empezar a captar la próxima instrucción. mientras una parte del procesador esta trabajando. este es el punto. la parte de ejecución la va a realizar la ALU. bien. se coloca en el PC la dirección donde comienza la subrutina de atención a la interrupción. las realizan generalmente distintas partes del procesador. podría ser la pila. Luego de eso. la memoria detecta la señal y copia en la dirección que se encuentra en el bus de direcciones el dato que se encuentra en el bus de datos.Ciclo de interrupción: Antes de atender a la subrutina que atenderá la interrupción. Es muy gráfico y simple verlo haciendo una analogía con una linea de montaje de un producto en una fabrica. en el próximo ciclo se empezara a captar instrucciones de la rutina de atención a la interrupción. hay otras que no. la unidad de control envía señal de escritura. La de segmentación de instrucciones es una técnica muy usada hoy en día. no es necesario que el producto termine de pasar por todas las etapas para poder ingresar un nuevo producto a la linea de montaje. 61 . pero en la etapa de captación la ALU no interviene.

62 . Cuanto mas se pueda sementar el ciclo de instrucción mas beneficioso seria. lavado. secado y planchado.Lavado Secuencial Lavado Segmentado Gracias a la cátedra de arquitectura por las diapositivas que les tomo prestadas!!! Los dibujitos vendrían a ser las tres etapas. El tema es hacer tareas en simultaneo en las cuales no se superpongan unidades funcionales.

Fetch instruction: Captar la siguiente instrucción. 63 . CO . DI . WO . y los campos de operando. Teóricamente el incremento de la productividad es proporcional al numero de etapas. la diferencia esta en que el procesador va a ser mas productivo.Decode instruction: Determinar la operación a realizar. que si se ejecutaran en forma secuencial consumirían 54 unidades de tiempo. todas las instrucciones pasan por todas las etapas y todas las etapas duran lo que tarda la etapa mas lenta.Write operand: Almacenar el resultado en memoria. Otra cosa a tener en cuenta es que la instrucción va a tardar lo mismo en ejecutarse.No todas las instrucciones utilizan todas las etapas. Bien.Calculate operands: Se calcula la dirección efectiva de los operandos. pero para simplificar la implementación.Execute instruction: Realizar la operación indicada en la instrucción. Esta seria una situación óptima sin ninguna complicación. 9 instrucciones de 6 etapas. los que están en registros no son necesarios captarlos EI . ni tampoco las etapas consumen la misma cantidad de tiempo. FO . pero gracias a esta segmentación se requieren solo 14 unidades de tiempo. por ejemplo un movimiento de datos no utilizaría la etapa de ejecución. digo teóricamente porque el uso de segmentación trae aparejado muchos contratiempos que le van a bajar un poco ese rendimiento teórico.Fetch operands: Se captan los operandos de memoria. ahora vamos a determinar las etapas de nuestro cause: FI .

La segunda instrucción no va a poder captar el operando C hasta que la primera instrucción almacene el resultado C en memoria. y se deben descartar las instrucciones 4. 6 y 7. el gráfico seria igual al anterior. es lo mismo. En el próximo gráfico para mostrar la dependencia de datos el cauce que se toma es de 5 etapas pero mostrar la dependencia sirve. uno de los dos mas importantes serian los saltos. Imaginemos que la primer instrucción es una suma. las llamadas a subrutina son un gran problema para la segmentacion de cause. Si el salto no se hubiese realizado. Imaginemos que en el cauce del gráfico anterior la instrucción 1 es una instrucción de salto condicional. los saltos incondicionales. veamos problemas. Se desperdiciaron 4 ciclos. ya se cargaron 4 instrucciones al cauce las cuales deben descartarse. el procesador seguirá cargando las instrucciones de forma secuencial.Bien. para cuando la instrucción 1 sabe a donde debe saltar para seguir captando instrucciones. No siempre la ejecución del programa es secuencial. A + B=C. 5. los saltos condicionales. la dirección de salto no se va a saber hasta que la instrucción pase por la etapa EI. 64 . El segundo problema es la dependencia de datos. y la segunda es otra suma C + D=E. En este caso la instrucción de salto seria la instrucción 3.

se puede ver que hay buffers intermedios entre las etapas llamados registros de segmentacion. las SD al reves.El gráfico esta tomado de un simulador MIPS64 (RISC). además de esto hay circuitería dedicada a minimizar las dos dificultades antes mencionadas. abajo pongo que se hace en cada etapa. Según lo visto hasta ahora parecería que cuanto mas etapas mejor va a ser el rendimiento. pero 65 . En este gráfico podemos apreciar un poquito mas de detalle. toman el dato del registro y lo almacenan en memoria. quiere decir que se esta intentando leer un dato que todavía no se escribió. Donde dice RAW es que hay dependencia de datos (read after write) lectura antes de escritura. las instrucciones LD leen un dato de memoria y lo guardan en un registro (lee el dato en la posición A de memoria y lo guarda en el registro R1).

2. el buffer se adelanta y almacena las próximas instrucciones secuencialmente delante de la ultima captada. ya están precaptadas las instrucciones de las 2 opciones posibles. Por esta razón se busca un rendimiento óptimo con una complejidad moderada. en uno se capta como si el salto no se fuera a realizar. el hardware comprueba si la dirección de salto se encuentra en el buffer. Segundo. esta dirección va a encontrarse en el buffer. Se necesitaría otro cause adicional. en ella se almacenan las N ultimas instrucciones captadas. Con esta alternativa tenemos 2 problemas. 66 . Salto retardado. pudiendo llegar al punto que esta circuitería sea mas compleja que la etapas mismas. a partir de ahí se empieza a captar por los dos causes simultáneamente. ahora que pasa si ingresa en ese momento otra instrucción de salto antes de que se resuelva la primera.los diseñadores se dieron cuenta de que no era así. Este buffer tiene tres utilidades: 1. si se encuentra. se precapta y se guarda la la instrucción del destino del salto. Entonces en el momento que se detecta que se va a producir el salto. cuando se detecta una instrucción de salto. Con el uso de precaptación. Tratamiento de las instrucciones de salto condicional: Los tratamientos mas utilizados son: * * * * * Flujos múltiples. Primero. Pase lo que pase. y en el otro cauce se capta como si el salto se fuera a producir. reduciendo conciderablemente los tiempos de acceso. Buffer de bucles. al agregar mas etapas estamos agregando mas buffer intermedios. El segundo problemas es el siguiente: supongamos que ingresa una instrucción de salto. el destino ya habra sido precaptado. Con esto se logra que la etapa de captación tome las instrucciones del buffer en vez de hacerlo de memoria. se comienza a captar por los dos cauces. porque?. en vez de ir a memoria a buscarla. hasta que se decida si se salta o no. Buffer de bucles: El buffer de bucles es una memoria de pequeña y muy rápida. Predicción de saltos. además que entre cada etapa ya hay una demora debido a funciones de preparación y distribución. la capta del buffer rápidamente. Precaptar el destino de salto. Si se produce un salto con una dirección de destino próxima a la dirección actual. la cual es controlada por la etapa de captación. Precaptar destino de salto: En esta implementación además de captar la instrucción siguiente a la del salto. Si se produce el salto. Flujos múltiples: Esta implementación duplica la parte inicial del cauce. el primer problema es que los 2 causes compiten por el acceso a memoria y registros. y en la etapa de captación. los cuales adicionan tiempo. con cada etapa que se agrega la circuitería para controlar las dependencias y otras para optimizar el uso del cause y aumenta enormemente la complejidad.

dependiendo de la instrucción de salto. La ventaja es que la instrucción que se va a captar es útil. 67 . algunas son: * * * * * Predecir que nunca salta. Por ejemplo si para almacenar el historial se dispone de un solo bit. Estas primeras tres técnicas son estáticas. y si al final se salta se descarta lo precaptado.3. las dos ultimas son dinámicas. Las dos primeras son las mas fáciles. Esta especialmente pensado para el tratamiento de bucles. el procesador decide si salta o no. si el buffer es lo suficientemente grande. Estas 2 técnicas en general tienen una tasa de acierto aproximadamente del 50%. Conmutado saltar / no saltar. con esta técnica se logra una tasa de acierto mayor al 75%. registran algun tipo de información histórica de cuales fueron las decisiones tomadas con anterioridad. en la primera se decide no saltar nunca y precaptar lo que sigue a continuación de la instrucción de salto. porque después de la instrucción de salto va a ir una instrucción que normalmente estaría antes de la instrucción de salto. Predicción de saltos: Existen diversas técnicas para predecir los saltos. no se va a descartar nunca. la instrucción que le sigue secuencialmente a la instrucción de salto se ejecuta siempre. todo el bucle entrara en el buffer. Predecir que siempre salta. La segunda es al revés de la primera se decide saltar siempre. Predecir según el código de operación. solo podremos almacenar la ultima decisión tomada en el salto (se salto / no se salto) Salto retardado: Usando esta técnica. para las siguientes iteraciones tomara los datos del buffer. se salte o no se salte. por lo cual el procesador va a tener que ir a memoria a buscar las instrucciones solo la primera vez. Tabla de historia de saltos. dependiendo del procesador puede ser mas de una instrucción. se salte o no se salte. En la técnica de predecir según el tipo de instrucción. Queda poco legible el código utilizando esta técnica.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->