You are on page 1of 74
Arquitectura de Computadoras Algebra de Boole: permiten estudiar sistematicamente técnicas digitales y algebras de conjunto. Esto nos facil 1) Formalizacién algebraica de requerimientos. 2) Andlisis y sintesis de los circuitos combinacionales. 3) Minimizacién de nimeros de componentes y dispositivos(eliminar redundancias). 4) Auxiliar en andllisis y sintesis de circuitos secuenciales. Circuitos Integrados de Media(MSI) y Gran Escala(LSI) Ciertas combinaciones logicas se encuentran disponibles como productos estandar que conviene adquirir en lugar de las compuertas discretas( AND,OR,NOT.NAND,NOR). Por esta 1az6n las técnicas de disefio de funciones égicas, con dichas compuertas, debe ser tomado como tiltimo recurso a tener en cuenta, cuando altos niveles de integraciGn no pueden ser usados. Si definimos funciones lgicas sin considerar los circuitos MSI disponibles, podriamos terminar escribiendo ecuaciones que deberdn ser mecanizadas por compuertas discretas, puesto que no hay disponibles los circuitos MSI adecuados. Multiplexor(Selector). Es un dispositivo que permite seleccionar una entre varias entradas de acuerdo al valor que asume un conjunto de Incas de direccién llamadas selector. La cantidad de entradas del multiplexor depende del nimero de selectores. Si se tienen n selectores se van a tener 2*n entradas. Basicamente la funcién Kégica que resuelve un multiplexor(de 4 entradas) es: Y= DO*A’B't D1*A'B+D2"AB'+D3*AB Si esta ecuacién se quiere mecanizar con compuertas, se necesitarian como minimo 10 compuertas(4 AND, 1 OR, 5 NOT, Mirando la ecusci6n uno podria reconocer si el circuito resultante se adectia a la funcién del multiplexor, Otra utilidad del multiplexor es generar y simplificar fimciones Idgicas. Remueve tantas variables como lineas de seleccién tenga, dejando para implementar mediante compuertas las funciones “resicuo” de las restantes variables. Por ejemplo en un MUX de 4 entradas se pueden remover 2 variables, en un MUX de 8 entradas se pueden remover 3 variables, y en un MUX de 16 entradas se pueden eliminar 4 variables. Si tenemos una funcién de 4 variables y eliminamos 3 de ellas con un MUX de 8 entradas, nos quedan 8 funciones de una variable para conectar en la entrada del MUX. Por ejemplo si dicha variable es C, entonces las funciones posibles son: C, C°.0, 1. Como estas son todas las disponibles sin compuertas adicionales, pademos generar cualquier funcidn de 4 variables con solo un MUX de 8 entradas. Nota: Strobe es una entrada adicional y opcional que habilita 0 né al selector, esto es, permite independizar entradas y salidas. Para funciones simples puede ser conveniente usar compuertas bisicas. El MUX es indicado solo para las funciones mas dificultosas. Adems, términos producto comunes no pueden ser compartidos entre dos funciones usando MUX(en este caso podria ser titil usar compuertas bsicas). En general la eleccién del método puede ser hecha teniendo en cuenta el approach con compuertas y recordando que funciones pueden ser bechas mediante un nico MUX de acuerdo a la siguiente tabla: Funcién Tipo de Multiplexor CCualquiera de las 4 funciones de las 2 mismas variables ‘cuadruple de 2 entradas CCualquiera de las 2 funciones de las 3 mismas variables doble de 4 entradas Cualquier funcin de 4 variables 8 entradas Cualquier funcién de 5 variables 16 entradas Podemos minimizar la generacién de las funciones residuo eligiendo las variables que van a la entradas de direccién del multiplexor de manera tal que las funciones residuo serdn las triviales o las que aparecen repetidamente. Ya que las funciones residuo pueden ser usadas en la generaciGn de muchas funciones diferentes, trataremos de usar las variables que semejan parecer en muchas combinaciones diferentes como direcciones del ‘multiplexor.(usando diagramas de Veitch) Como simplificar funciones de muchas variables: como para mas de cuatro variables el diagrama de Veitch se hace inmanejable, el uso de multiplexores reduce en mucho el tamaiio del problema. Por ejemplo usando un MUX de 16 entradas para “remover"cuatro variables de una funcidn de ocho variables es més facil de manejar. Ademas de hacer la solucidin del problema mucho mas facil, se reduce el nimero de IC requeridos para mecanizar la funcién, Por supuesto, los multiplexores tambien pueden ser usados para generar funciones residuos. El maximo nimero de funciones residuos que se pueden generar con dos variables son 16: A, A’, B, B*, 1 0. Ademis AB, A’B, AB’, A°B’, (A°B)+(AB’) (XOR}, mas sus complementos. Arboles de multiplexores: debido a que en Ia implementaciGn de multiplexores estamos limitados en ef mimero de pins 0 entradas al integrado, si queremos construir multiplexores de mds de ocho entradas, podemos hacer cualquier tamaiio de multiplexor simplemente interconectando varios multiplexores en una estructura de arbol. Esta caracteristica de contruir grandes multiplexores extiende nuestra capacidad de generar funciones légicas con ‘multiplexores. Por ejemplo con un multiplexor de 64 entradas(usando 9 MUX de 8 entradas) puedo generar funciones ldgicas de 7 variables. Decoders/Demultiplexores. El opuesto a un multiplexor es un demultiplexor, o decoder. En un decoder una direccién de entrada binaria determina cal de varias salidas sera baja. Si tienen 4 salidas deben tener 2 bits de entrada, si tienen 8 salidas, entonces tendran 3 bits de entrada. Un ejemplo tipico es el decoder BCD(de 4 a 16), que decodifica un ndmero de binario a decimal. Las salidas del decoder 10-16 son opcionales. El decoder tambien puede usarse para implementar funciones légicas. En realidad las salidas son miniterms. El decoder es un generador de miniterms. Usar multiplexores o un decoder para manejar los bits de un determinado modo depende en gran medida de cuantas funciones hay. Se requiere un multiplexor para cada luncin. De manera que se prefiere un multiplexor cuando no hay muchas funciones. Las salidas de un tinico decoder, sin embargo, pueden ser usadas para la generacién de un gran mimero de funciones, de manera que es mis es eficiente donde hay un gran mimero de funciones. Hay algunos casos donde los dos tipos de circuitos se pueden usar juntos: los multiplexores son usados para eliminar Variables y los decoders son usados para generar funciones residuales més complejas(el decoder puede generar miniterms para funciones residuos de un multiplexor). Se puede usar el mismo principio con demultiplexores para construir arboles y poder generar muchas funciones con solo ir agregando niveles al drbol de demultiplexores. Encoders. Solo se activa una de las variables a codificar por vez. Priority encoder: se puede activar mas de una entrada pero coditica la que tiene mayor prioridad. ° codifica el 6 ROM(Read Only Memory). Las memorias ROM representan una estandarizaci6n de la implementacién de Funciones logicas. Acta como la ‘memoria RAM pero con la caracteristica de ser de lectura solamente. Es més simple que la RAM pero es no volitil(si uno corta la energfa de la miquina no se pierde la informacién). La ROM se debe fabricar en cantidades suficientes que justifiquen su existencia, El uso de ROM permite implementar, mediante un procedimiento estandar que provee el fabricante, circuitos légicos que producen una dada funcién. Tambien puede utilizarse como conversor de cédigo. Implementacién de funciones Kégicas con ROM: Las Iineas de direccién de la ROM corresponden a las variables de la funciGn, En cada celda se debe poner el valor que toma la funcién con cada combinacién(0) 0 1), Cada celda de la ROM seria un miniterm. Puesto que la ROM puede mecanizar cualquier funcién, representan una potenciahilidad excesiva; pot lo tanto se desperdician recursos. ‘Cuando usamos una ROM para implementar una funcién, esta debe ser necesariamente expandida. Cuando expandimos un termino que carece de n variables generamos 2°n terminos para la funcién. Para hacer un uso completo de las capacidades de una ROM las variables de entrada y salida tiene que ser eficientemente codificadas de manera tal que cada variable tenga un contenido de informacién alto. Cuando mas compactamente sean codificadas las entradas y salidas de una ROM mis complicadas seran las ecuaciones légicas. Sin embargo, ya que el tamafio de la ROM est determinado solamente por el ntimero de entradas y salidas el resultado es un ahorro en HW. Podemos mirar a las entradas como grupos que pueden ser externamente codificados y a las salidas como grupos que pueden ser externamente decodificados. Cualquier tipo de variables que es mutuamente excluyente(esto es, solamente uno es verdadero por ver) puede ser codlificado. El tamaio de la ROM depende de: > Cantidad de locaciones(2*numero de variables) > Tamaiio de cada locacién. > Numero de funciones. Por cada entrada que bajamos la ROM va a la mitad. El amano de la ROM es directamemte proporcional al nimero de salidas. Los multiplexores son a veces titiles para reducir e! nuimero de entradas de una ROM. ‘Un encoder puede ser ttil para minimizar la cantidad de entradas de una ROM. Resumiendo: > Desventajas: para més de 3 variables se toma un HW excesivo. Es imposible hacer cambios. > Ventajas: permite fabricar circuitos en un proceso estandar, o sea no hago diseiios en particular para cada cliente. Ademas Hevado a un circuito integrado favorece el proceso de integracién, PROM(Programmable Read-Only Memory). Tiene la misma funcionalidad que la ROM pero no tiene el problema de la escala. El fabricante entrega un circuito que, mediante un PROM-Programmer, permite programar la ROM; pero una vez hecho no lo puedo modificar. En cambio la EPROM permite mayor flexibilidad ya que es posible borrar y volver a programar. Utilidad: sistemas experimentales de grandes volumenes pueden probarse mediante PROMS hasta el momento en que el sistema esté listo para ser estandarizado mediante ROMs. PLA(Programmable Logic Arrays). El arreglo Idgico programable(PLA) es una solucién al problema de las entradas mencionado para la ROM. Con un PLA especificamos no solamente un patrén de bits de salida para cada palabra sino que tambien se especifica la direccién de la palabra. Esto hace posible tener més entradas para el mismo tamaiio de ROM. Por ejemplo, un PLA. de 96 palabras x 8 bits= 768 bits puede tener 14 entradas. Si todas las combinaciones de entrada definen una palabra(como es el caso de la ROM), entonces 214 = 16384 palabras o 16384 x 8 = 131072 bits de ROM. Con un PLA se puede definir 96 palabras en termino de 14 entradas. Puesto que se especitica 1, 0 0 X sobre cada una de las 14 entradas, esencialmente se hace la compresién del cédigo de entrada dentro de la porcién de decodificacién de palabra del chip. Entonces: _ si tengo n variables en una ROM => 2*n locaciones. si tengo n variables en un PLA << 2*n locaciones, ‘Como con la ROM, podemos mirar al PLA como una memoria 0 como un generador de funciones lgicas 0 como tun conversor de c6digo. Si la pensamos como un generador de funciones légicas, tenemos que es una estructura Jogica AND/OR donde las direcciones de las palabras son decodificadas por compuertas AND, y cada salida es un OR l6gico de cualquiera de las compuertas AND. Cada salida puede asf ser definida como una suma de terminos producto, No hay ninguna ventaja en reducir la cantidad de terminos producto debajo del ntimero provisto por el PLA que se usa(reducir el niimero de variables en cada termino es irrelevante). Sin embargo se podria reducir los terminos adicionales tomando encuenta: > Si hay terminos producto identicos, solo dejar uno. La redundancia se resuelve automaticamente, no lo cableo. > Examinar cada funcién, y si hay terminos que difieren solo en la inversién de una variable, combinarlos. Por cjemplo: ACF + ACF'= ACF +F’)= AC. La redundancia se resuelve automaticamente, no lo cableo. EI tamafo de un PLA esta caracterizado por: > El nimero de palabras. > La cantidad de direcciones que puede acceder. > La cantidad de funciones o salidas. Cuando se usa mis de un PLA, se pueden implementar funciones légicas ain més complejas. Conclusi i por ejemplo podemos seleccionar una de ocho entradas, podriamos hacerlo con compuertas discretas, o ROM, o PLA; pero en realidad lo més adecuado seria un multiplexor. Para funciones légicas simples y pequetias funciones no estandar es preferible compuertas discretas. Circuitos Secuenciales En los circuitos combinacionales, los estados de salida son funciones solamente de los estados de entrada presentes: para una combinacién particular de entrada habré siempre una salida 0, en caso contrario nunca habré una salida. En los circuitos secuenciales los estados de salida son funciones no solamente de los estados de entrada presentes, sino tambien del estado presente del circuito. Los estados del circuito, son a su vez funciones de los estados pasados de los circuitos, que a su vez son funciones de estados de entrada pasados. Los circuitos secuenciales deben tener una clase de memoria para poder “recordar” los estados pasados. XsCinputs) Z’s(outputs) Logica Combinacional W's(Memory inputs) Elementos de Memoria ‘Y's(Memory outputs! Secondary inputs) Las entradas de una circuito secuencial se denominan entradas primarias. Hay diferentes tipos de elementos de ‘memoria. Las salidas de los elementos de memoria reflejan el estado de los elementos de memoria y actian como entrada secundaria al circuito. Los elementos de memoria pueden tener una o més entradas y una tinica salida, dos salidas complementarias. El estado de dichas entradas puede tener los valores 00 1 y son Hlamadas excitaciones de memoria y los estados de salida resultante son Hamadas respuestas de memoria. Una propiedad de los elementos de memoria es que hay un tiempo de demora entre un cambio en su excitacién y la respuesta resultante. Este tiempo se lama tiempo de transicién del elemento de memoria. Otra propiedad de los elementos de memoria es que pueden permanecer en un estado luego de que la excitacién que provocs ese estado no est més presente. Operaciones por pulso y por nivel. Hay varios tipos de operaciones de un circuito secuencial que pueden ser resueltas en dos clases: operacién por pulso y operacién por nivel La distinci6n entre operacién por pulso y por nivel involucra la duracién de la excitacién de un elemento de ‘memoria en relaciGn con el tiempo de transicién del elemento de memoria. Mas especificamente en una operacién por pulso, la excitacidn de memoria se va antes de que el elemento de memoria responda. En una operacién por nivel, la excitacién de la memoria esta atin presente cuando el elemento de memoria responde. Nota el tipo de operacién esté determinado por el tiempo de las entradas del elemento de memoria, no por las entradas del circuito. Excitaciones de elementos de memoria = W Respuesta de elementos de memoria wv. | ‘Tiempo de transicién => a Operacién por pulso Operacién por nivel Un pulso puede definirse como una sefial de corta duracién, un nivel como una sefial de larga duracién, Con referencia al modelo de circuito secuencial general, las sefiales x pueden ser pulsos o niveles; las seftales y desde las salidas del elemento de memoria, son siempre niveles. Ya que las W y Z son en general funciones de las x Y las y, las sefiales Z y W pueden ser pulsos o niveles; sin embargo para que una sefial W o Z sea un pulso al menos tuna seftal x debe ser un pulso. Note que las sefiales y son niveles ya sea que las seftales W sean pulsos o niveles. En una operacién por pulsos las senates W son pulsos; asi, al menos una sefial x debe ser un pulso. Las sefiales Z, sin embargo, pueden ser pulsos 0 niveles. En la operacién por niveles todas las seiales deben ser niveles. Restricciones sobre operaciones. En operaciones por pulsos se deben satisfacer los siguientes requerimiento: 1, Pulso minimo: el pulso debers ser lo suficientemente largo para causar que el elemento de memoria cambie de estado. Pulso maximo: el pulso deberd irse antes que el nivel de salida del elemento de memoria pueda aparecer como ‘una entrada del elemento de memoria. Este tiempo estd compuesto por el tiempo de transicién del elemento de memoria més los delays a través de ta logica combinacional 3. Tiempo minimo entre el comienzo de pulsos sucesivos: este tiempo deberii ser mayor que el tiempo de transicién del elemento de memoria(el tiempo que el elemento de memoria necesita para estabilizarse internamente antes de que esté listo para aceptar otro pulso) y los delays a través de la légica combinacional La restriccidn 3 prohibe pulsos de entrada simultaneos. Teoricamente, se podsian permitir pulsos de entrada simultaneos si se puede garantizar que ellos arribaran juntos; practicamente esto no puede lograrse, ¥ una opera confiable debe prohibir pulsos sobre més de una linea dle entrada por vez. Esta restriccién se aplica a pulsos de entrada simultaneos pero no necesariamente a sefiales de entrada simultaneas; si algunas de las seftales de entrada son pulsos y otras son niveles, los pulsos de entrada pueden ocurrir solo uno a la vez, pero los niveles de entrada pueden ocurtir en todas las combinaciones posibles. Cada combinacién de niveles de entrada deberd ser ANDed con un pulso de entrada. Los niveles de entrada no cambiaran mientras los pulsos de entrada esten presentes Nivel de entrada — — Pulso de entrada Los pulsos de entrada que son ANDed con niveles de entrada son comunmente Hamados pulsos de reloj, y 1a correspondientes entradas en si mismas se Haman reloj. Generalmente las entradas por nivel son las entradas ogicas, mientras que los relojes se usan para controlar el tiempo que las entradas por nivel son usadas(sampled?) usualmente un reloj produce una secuencia de pulsos que son periddicos, pero esto no es un requerimiento, En operaciones por niveles se deben satisfacer los siguientes requerimientos: 1. Minimo tiempo entre cambios en un nivel de entrada: un cambio en el nivel de entrada causaréa cambios en los estados de los elementos de memoria, Esto es, no pueden ocurrir cambios en un nivel de entrada hasta que el circuito esté totalmente estable. Al igual que operacién por pulso, no puede garantizarse que cambios simultaneos en la entrada por nivel ocurran al mismo tiempo. Operaciones por pulso con reloj son tambien Hamadas operaciones sincronicas y las operaciones por nivel, asinerénicas, Elementos de Memoria. En camino a tener un circuito que almacene informacisn indefinidamente, ser necesario introducir realimentacién de salida a la entrada del circuito(parte de la salida se toma como entrada). Estos circuitos se conocen como Flip- Flop(FF). As{ como tenemos una compuerta légica como el elemento combinacional bésico y la ROM como un arreglo combinacional grande, tenemos los flip-flop como elemento de memoria basico(basicamente un bit RAM) ¥ una RAM como un arreglo de memoria grande, Esencialmente compuertas y ROM son andlogas a los flip-flop y RAM, pero con flip-flop y RAMs tenemos que agregar la dimensidn del tiempo. Ambos dispositivos tienen una entrada reloj, y sus estados cambian solo después de una transiciGn del reloj ‘Tipos de Flip-Fop. Flip-Flop D(delay): la ccuacién nos dice que la entrada (D) es “guardada” en el flip-flop cuando ocurre un reloj y aparecerd en la salida(Q) durante el tiempo de reloj (n+1). El flip-flop D es mas que un simple bit de RAM. Es muy Util para almacenamiento de datos y otras aplicaciones. La ecuacién caracteristica es: Q™" =D". Flip-Flop Toggle): simplemente queda en su estado previo si la entrada T ¢s falsa antes de la seftal de reloj. Si la entrada T es verdadera, la salida cambia al estado opuesto cuando ocurre la seital de reloj. Este flip-flop es til por ejemplo para contadores binarios donde queremos que cada bit se invierta en caso de que ocurra un carry en los bits de orden més bajo. La ecuacién caracteristica es: Q™" = (T’.Q+T.Q’)" CCualquier tipo de flip-flop puede ser construido a partir de un flip-flop D simplemente sumando algunas compuertas légicas adicionales. Flip-Flop S-R(Set-Reset): setea si \a entrada S es verdadera, resetea si la entrada R es verdadera. Queda indefinido: si Ry S son verdaderos. El estado de reposo esti dado por las dos entradas (Set-Reset) en 0. La ecuacién caracteristica es: Q™'= (S+R’.S'.Q) con RS ¥1 Es el FF mas elemental a nivel l6gico, Una vez que la excitacién desaparece el circuito conserva su estado, Estando el circuito en S, la tinica forma de cambiarlo a R es poniendo un I en R; no interesa los valores dados a 8. La inversa tambien vale, Este FF es asincrénico, responde en todo momento. Si queremos que el Set-Reset trabaje en forma sincrénica lo podemos implementar con un reloj y se denomina LATCH. EI reloj inactivo(en 0) significa que el circuito esta en un estado de no excitacidn y retiene informacién, Con el reloj activo el circuito puede ser excitado(seteado o reseteado). Una vez que se deshabilita el reloj el circuito ignora las entradas. Master-Slave: vimos que el LATCH es un dispositive por niveles, por lo que no podemos utilizarlo para los sistemas secuenciales por pulsos. No permite ser leido y escrito simultaneamente. Esto da lugar a una estructura donde hay dos FF que se excitan en forma disjunta; uno es el director y el otro subordinado, Esta estructura se denomina MASTER-SLAVE(Director-Subordinado). EL que realmente es excitado es el primer FF, Director, cuya funcién es dirigir al subordinado; esto es, hacer la evolucién de la excitacién y el subordinado se encarga de guiar la salida. Esquematicamente: Director Subordinado LATCH LATCH tt Director Subordinado LATCH LATCH >u En el momento que el director toma la decisién el subordinado esta desconectadbo. desconectado(reloj en 0) lleg6 un 1 al subordinado y se conecta, Flip-Flop J-K: setea si J es verdadero y resetea si K es verdadero, Es similar al FF S-R, excepto que si J y K son ambos verdaderas, la salida cambia al estado opuesto. La ecuacién caracteristica es: Qn+1 = (.Q°+K’.Q)n Generalmente se trabaja con FF J-K para pequeiios contadores y control o FF D para almacenamiento de datos. Usualmente los FF tiene dos entradas adicionales asinensnicas, PRESET y CLEAR, que permite el seteo 0 reseteo inmediato sin esperar por el reloj(son asincrSnicos). Se utilizan para ciertos trabajos especiales, como setear condiciones iniciales. Registros y contadores. Los FF son frecuentemente agnupados como registros 0 contadores. Un registro se puede pensar como un almacenamiento de datos, y a menudo el contenido del registro tiene alguna interpretacién fisica, tal como un c6digo de caréeter o un numero, El registro en si mismo no tiene I6gica (no hay procesamiento) y consiste simplemente de un conjunto de FP. Légica combinacional es usada frecuentemente a la entrada de un registro para seleccionar el origen de los datos a ser mantenidos en el registro o para hacer conversicn de cédigo 0 ligica aritmética. El registro en si no realiza ninguna funcién légica. ‘Una forma de implementar los registros es a partir de FF D. Estos FF comparten el reloj y al activarlo obtengo informacién de todos. En general los FF controlados por reloj tienen dos entradas adicionales, que actéian en forma asinerdnica, y que son CLEAR(pone a 0 el FF) y PRESET (pone a 1 el FF). Estas dos entradas fijan las condiciones iniciales antes de comenzar la evolucién del mismo, Registros de Desplazamiento: hay registros que permiten desplazar informacién a derecha e izquierda a wavés de los distintos FF. Cada vez que se produce un pulso de reloj, cada uno de los FF toma la informacién del FF anterior © posterior. Para poder tener un registro de este tipo, los FF deben poder leerse y escribirse simultaneamente, es decir deben ser del tipo MASTER-SLAVE. (tambien pod ir informacién en serie, ventajas??) Para almacenar informacién y adquirir datos bastarfa un FF LATCH, Normalmente estos registros son un conjunto de FF organizados en un circuito integrado, donde se permite carga en paralelo, lectura en paralelo y corrimientos de izquierda a derecha o de derecha a izquierda. Aplicaciones de los registros de desplazamiento: Muchas veces es necesario convertir datos de serie a paralelo, por ejemplo, en ta transmicién de informacién desde la terminal a través del bus. Al nivel de la interfase, el bus recibe la entrada en serie y la entrega a laCPU en paralelo. La inversa de CPU a terminal es una conversi6n de paralelo a serie. tra aplicacién se da en las operaciones aritméticas donde utilizamos los corrimientos para multiplicar y dividir. Los FF tambien pueden ser agrupados como conradores. Los contadores son usados para controlar secuencias de operaciones. Las salidas de los FF que hacen al contadar se dicen que son el estado del contador. Un contador es un circuito secuencial disefiado para ciclar a través de K estados distintos, So,....Si-1 en respuestas a pulsos de entrada(reloj). Las combinaciones de las salidas de los distintos FF constituyen los distintos estados del contador. EI valor K se conoce como el médulo del contador. Si se tiene un contador de n FF, el modulo maximo es?" Normalmente(no exclusivamente) estos K bits van a representar K ntimeros consecutivos. Donde un estado Si; va a estar determinado por S,,, modulo K La secuencia de estados puede ser sencilla, tal como contar cierto ntimero de pulsos de entrada, o repeticiones de alguna operaci6n.o pueden ser més complejas. Secuencias complejas son a menudo controladas por condiciones de entrada variables. En ambos casos un contador puede ser definido mediante el simple desarrollo de légica combinacional para cada entrada del FF. El proximo estado(n+1) de FF estd determinado por sus entradas antes del relojin), Disefio de contadores con FF. Se divide en dos pasos: 1. Definir los contadores requeridos en el sistema y una secuencia deseada de estados 2. Diseitar l6gica combinacional para las entradas de los FF para producir esa secuencia de estados Los contadores se pueden clasificar en: > Sincrdnicos: todos los FF que constituyen el contador se excitan a partir de un mismo reloj. > Asiner6nicos: con el reloj se excita el primer FF y las seflales de reloj de los demas FF estin dadas por los estados internos de los mismos FF ‘A su ver ambos tipos de contadores se pueden clasificar en: UP-COUNTER 0 DOWN-COUNTER. El contador asinerSnico es ms fécil de implementar que el sincrénico, ya que no se requiere de Logica adicional(simplicidad). La desventaja es la velocidad maxima de operacién, Esto se debe a que los FF no son excitados al mismo tiempo, por lo que producen retardas por el tiempo de propagacién. Cuanto mayor sea el nimero de FF que componen el contador mayor serd el niimero de retardos entre la excitaciGn FF y el reloj. Si el reloj fuera comiin a todos los FF, se tendrfa que esperar un solo retardo, El contador sinerénico para su implementacién hace intervenir funciones légicas a las entradas. Este tipo de contador es mucho mis flexible para controlar el médulo que uno & El disefioes igual al de un circuito secuencial, debemos preveer la evolucién del circuito y en funcién de esto, la excitacién, Registros de desplazamiento como contadores: condicionando la informacion que entra al primer FF de la cadena de un registro de desplazamiento en funcién de los estados de los FF, es posible obtener una secuencia de estados a medida que la informacién se va desplazando a través del registro en forma sincrdnica. A esta Gn se la conoce como generadora de secuencia. Contador en anillo(Ring Counter): con n FF obtenemos un contador de médulo n. La desventaja de este esquema es que se requiere de muchos FF, Se necesitan tantos FF como estados se quieran, La ventaja radica en que los distintos estados de los FF estén caracterizados por su salida; no es necesaria ninguna decodificacién, lo que implica una mayor velocidad. Contador Moebius: algunos contadores de secuencia resultan tener una légica muy simple. Por ejemplo, podemos hacer un contador de 8 estados con la misma caracterfstica de cambiar un tinico bit por cada eambio de estado. El estado de cada FF es igual al estado previo del FF de la izquierda, El estado del FF més a la izquierda es igual al complemento del estado del FF mds a la derecha. Usando el mismo principio podemos hacer un contador Moebius de cualquier tamaiio. Para cualquier tamaio n de un contador Moebius se tienen 2*n estados diferentes, por este motivo contadores grandes son impracticos. La secuencia Moebius es a veces ttil para contadores de control de estados. Otra ventaja es que cualquier estado o grupo de estados consecutivos pueden ser decodificados con una tinica compuerta de dos entradas. Para decodificar un grupo de estados simplemente miramos al tiltimo 1 det primer estado del grupo y el primer 0 del tltimo estado del grupo. Definicién de contadores de control de estados: a menudo un contador puede ser ms complicado que contar una secuencia binaria. A menudo la secuencia es complicada y se ve mis como un registro que como un contador ya que responde més a entradas exterias que su propio estado, El primer paso en el disefio de tales circuitos secuenciales es hacer el diagrama de estados. Un diagrama de estados tiene un circulo representando cada estado. Dentro de cada circulo esta escrito la identidad binaria del estado y el significado del estado en la operacién del sistema, Desde un estado salen flechas a todos los posibles proximos estados. Funciones légicas muestran las, Condiciones requeridas para cambiar de estado. Ejemplo: Comenzando por el estado inicial, vemos que presionando el boton READ nos pone en el estado READ TAPE, Si se detecta un EOF significa que no hay més nada sobre la cinta y retornamos al estado inicial IDLE, Cuando la RAM esti llena(FULL) de datos leidos de 1a cinta, pasamos al estado SEND(enviar) y coremos la informacién hasta que END indica que la RAM esté vacia. Esto nos pone en el estado SEND LAST CHARACTER, el cual es necesario porque los datos son enviados, un bit a la vez, desde el registro que esté cargado por la RAM. Cuando el contador de bit indica que el uhimo bit ha sido enviado, el estado de stop bit(SP) del contador de bits nos pone en el estado SEND CHECK CODE. Cuando el tiltimo bit del check code ha sido enviado, SP nos Hleva al estado WAIT FOR ACKNOWLEDGE. Sisse recive un ACKnowledge entramos al estado READ PULSE por un tiempo de reloj para simular que se presiona el boton READ y causar que otro registro sea leido de 1a cinta en el estado READ TAPE. La secuencia se repite hasta que toxlos los registros de la cinta son enviados y el EOF retorna el sistema al estado IDLE. Si en el estado WAIT FOR ACKNOWLEDGE no se recibe un ACK dentro 1/3 seg.. la sefial TIMOUT causa que el registro sea enviado nuevamente, Asignacién de estados: una vez que definims los estados requeridos, asignamos oddigos binarios a esos estados. Como estos cédigos corresponden a los tres FF que hacen al contador, las asignaciones tendrdn un fuerte efecto sobre la ligica requerida para mecanizar el contador de estados y Ia otra légica en el sistema. La légica en el resto del sistema puede ser minimizada haciendo que los FF del contador correspondan a las sefiales de control requeridas. Por ejemplo en la asignaciGn de estados del ejemplo anterior, el FF del medio ests seteado durante los tres estados en los cuales estamos habilitados para enviar datos(110, 111, y 011). Esto significa ‘que podemos usar la salida del FF del medio directamente como “enable send” en lugar de tener que usar compuertas para generar una funcién que sea true durante estos tres estados. La I6gica del contador en sf misma puede ser minimizada recordando que ciertas secuencias del contador son mas faciles de generar que otras. Todos los cambios de estado(excepto el TIMOUT) del ejemplo requiere el cambio de estado de un solo FF. Esto significa que se necesitardn compuertas en la entrada de un solo FF. Para simplificar el contador, Los primeros 6 estados estan dados por Ia secuencia “moebius”, Tambien al hacer el estado inicial 000 es posible inicializar el contador mediante la entrada CLEAR del FF. Como podemos construir un contador asinerdnico de cualquier longitud(poniendo contadores en cascada), la Utilidad de contadores diseretos con FF esta limitada a secuencias especiales o a contadores muy pequeiios( solo ‘modulo 2, 3, 4). Adin contadores de control de estados a menudo pueden ser hechos con un contador MSI. Cualquier contador de control de estados puede pensarse como tna secuencia lineal con “jumps” y “branchs”. Si asignamos los estados en una secuencia binaria, y usamos LOAD y CLEAR para hacer los branches podrfamos usar circuitos integrados ya disponibles para la construecidn del contador. Algoritmos Aritméticos Sistemas numéricos posicionales: la gran mayoria de las computadoras digitales usan sitemas numéricos posicionales para representar informacién numérica. En este modo de representacidn, un niimero es codificado como un vector de digitos donde cada digito tiene un peso de acuerdo a su posicidn. Asociado con el sistema numérico hay una base b, tal que el rango de cada digito va de 0 b-1, Asi un nimero x en base b se representa como sigue: X= Xe Note Xp Xop Kaprenea and Y su valor (considerando por ahora solo ntimeros positivos) denotado IX X= E xb Dentro de las computadoras se adopta la base 2. La desventaja de tener que convertir de decimal a binario es compensada por una ganancia en la representacién de almacenamiento y la fécil implementacién de operaciones baisicas, Para facilitar la comunicacién entre la representacisn binaria interna y alguna notacién més cercana a nuestra forma de pensar, se pueden usar octal(b=8) y hexadecimal(b=16). Como los sistemas nimericos tienen bases que son potencias de 2, las conversiones entre binario, octal y decimal son triviales. Repersentacién de enteros: los tres sistemas numéricos posicionales que se usan son: > Signo Magnitud. > Complemento a 1 > Complemento a 2. Los tres sistemas permiten un facil testeo del signo mediante el chequeo de un solo bit. Signo Magnitud: en esta representacién, un bit designado, en general el de més a la izquierda, indica el signo del entero(( para +, I para -). El rango es [-" — 1), 2"! — 1)]. Uno de los problemas es la representacién dual para el (0(00....0, 10.....0). Ademiis hay problemas cuando se suman ntimeros de signos opuestos, porque debemos comparar sus magnitudes para conocer el signo del resultado. Complemento a 1: los enteros no negatives en el intervalo [0, 2*'-1] son representados como en un sistema posicional binario, Para representar enteros negativos en el intervalo [-(2"' —1), 0] primero representamos sus valores absolutos y luego complementamos bit por bit, es decir reemplazamos los 0°s por 1’sy Los 1’s por 0°s. Mas generalmente, para un sistema posicional en base b, remplazamos cada digito Xi por (b-1)- Xi. ‘Como en signo magnitud, el reconocimiento del signo es trivial puesto que el bit mas a la izquierda es 0 para los positives y I para negativos. Pero tenemos una representacidn dual para el cero(00.....0, HT...) pero la suma y esta son ins faciles de implementar comparando con signo-magnitud. ‘Complemento a 2: los nimeros no negatives en el rango [0, 2"! — 1] se representan como en complemento a 1. Para tun entero negativo cada bit es complementado y un 1 es sumado a la posicién menos significativa. El test del signo se hace facilmente, Hay una tinica representaciGn para el 0. Tienen rango similar, pero ligeramente desequilibrado(existe un negativo més). No es simetrico. Es ligeramente mds simple que operar en complemento a 1. Suma y resta. ‘Suma en sistemas numéricos posicionales: dado un sistema numérico posicional en base b, la suma de dos nimeros positivos de n-digitos, xe X= Kater Xi Kode Y= (Yow i» Yo) Resulta en la suma $ = (Sq, Sq.1.~-.81,Sq) donde S, puede tomar uno de dos valores 0 0 1 independientemente de b. Cuando Sn es 1, se considera a menudo como overflow. EI algoritmo puede ser expresado como: 1, C,<0(Cesel carry inicial); 2. Fori:=Ostep I until n-1 do Begin Si (X\+ Y\+C)) mod b; Cn HX + ¥ +0) /b] End; 3. See Cy Como X, + ¥; $2(b-1) y Cy =0, el valor maximo para cualquier C, serfa |(2¢b—1) + 1)/b] = 1 En este algoritmo cada digito es examinado una vez. Por lo tanto el proceso es de una complejidad del O(n). Esto es, el algoritmo de suma corre en tiempo proporcional a n. Como todos los digitos tienen que ser examinados, (eoricamente no se puede esperar ninguna mejorfa, Pero naturalmente consideraciones de implementacién son importantes para realizar el HW. Facilmente podemos disefiar un algoritmo para la resta, incorporando la generacién de borrows en lugar de carries en cada digito que se resta, Consideraciones de HW y los sistemas numéricos complemento hacen innecesaria la distincién entre suma y resta. Para el caso binario, podemos transladar el paso 2 del algoritmo en terminos de valores booleanos true( 1) y false(0) como sigu SiH KSYSC, Cu OXY 4 HY). C, a Hay muchas implementaciones posibles para el sistema (1), dependiendo de Ia disponibilidad de compuertas(AND, OR, NOT, NAND. NOR, EOR). En general la implementacién de un FULL ADDER de un bit se hace con dos HALF ADDER. Un HALF ADDER con dos entradas A y B realiza las dos salidas siguientes: SCAB COAB Circuito Logico Esquema A A®@B A s ) Ss B > Un HALF ADDER(semisumador) suma los dos operandos si parte del circuito, tener en cuenta el carry; esto es , resvelve solo una El sistema (1) se puede construir entonces con dos HALF ADDER porque podemos escribir C, Cy) XLVi+ (X1@ Yi).Ci G (Oy Sc, As 5 cin S x F8u]s cL Wew.c ia » £ )>— Bo Co Esquema Circuito Logico Un solo FULL ADDER y un bit de almacenamiento, o Flip-Flop, para retener el potencial carry es suficiente para tuna implementacién en HW del algoritmo de suma(en el caso de sumador serial). Si asumimos que las entradas y salidas estén en registros de corrimiento 0 que existen circuitos de seleccisn para obtener los n digitos serialmente, entonces la suma podria hacerse exactamente como en el algoritmo, Sumadores seriales no son usados en el diseiio de procesadores centrales o ALUs porque son demasiadlos lentos(los elementos de memoria implican retardo, por ejemplo) y voluminosos o restrictivos. Sin embargo pueden ser tiles en dispositivos seriales como memoria CCD{memorias de micleo). Un esquema de un sumador serie seria Xe % Aguila suma se resuelve en n pulsos de rele Sumadores en Paraldo. Ripple Adder: en lugar de pasar todos los bits de un operando secuencialmente a un solo Full Adder, podemos presentar los n bits de los 2 operandos en paralelo a n Full Adders. Estos Full Adders estin conectados de tal forma que el carry out del Full Adder i, C,), es el carry in para el Full Adder i+1, para | En vez de tener que esperar todas las etapas, genera el carry como una funcién independiente de la suma, > Hay aproximadamente el mismo niimero de compuertas que en el Ripple Adder, pero el peor caso en tiempo es ahora de 4 niveles de compuertas en vez de 8 en el peor caso del Ripple Adder. Desventajas: > Este proceso en paralelo noes viable para un n(bits) considerable, es decir, no se podrfa llevar a la préctica porque habria limitaciones de Fan In(compuertas de muchas entradas) y Fan Out(muchos terminos para alimentar). No se usa para mais de cuatro bits, (*) las ecuaciones crecen muy rapidamente y aparecen limitaciones de Fan In y Fan Out. De la misma manera que los Full Adders son unidos en cascada en un Ripple Adder, los CLA pueden ser conectados con el carry-out de uno con el carry-in del siguiente, 1 L | — | | Un nivel de CLA Un box CLA es el equivalente a un CLA de 4 bit con el carry-out generado como en (3) Este concepto puede ser extendido a algunos niveles. Podemos agrupar los n bits en A grupos de b bits, y generar un término G y un término P para cada grupo. Por ejemplo, para el grupo “a” (bits(a-1)b + I hasta ab) tenemos: Re Tp Ge zon, PL). 8 + Bo ® El carry-out del grupo a, denotado C, es entonces: GeG+S CH P).G (3) y entonces el carry en la posicién k(k = ab + 1 +m, 0 2, como por ejemplo Ia multiplicacién, podemos acelerar esta operacién permitiendo que la propagacién del carry se accione solamente durante la tiltima suma. Otra vez usamos n full adders, pero en lugar de conectarlos como en el ripple adder, los dejamos desconectados y tomamos como entradas 3 de los m operandos, digamos x, y, z. las dos. salidas generadas: SSX OY OZ CS Xi. Vit Ki YI. Zs om Junto con otra de las entradas originales pueden ser consideradas como entradas a otro(o el mismo) bloque realizando las operaciones del sistema (7). Este proceso se repite hasta que queden dos operandos 0 sumas parciales. La tiltima suma requiere un ripple adder(o cualquier adder que implemente el sistema (1)). Ventajas: {preguntar!!1!1) > Es una implementacién sencilla con el HW minimo para implementar full adders independientes. > Es la condici6n ideal en cuanto a velocidad, porque cuando voy a operar tengo simultaneamente todos los ‘operands. Esquema Xe Zur Xa2 Yar Zaz X Yo % LL | Lt [4 | SQi Sh SCyy SSyy sey S59 Multiplicacién y Divisién. El esquema de la multiplicaciGn: dados dos enteros positivos de n-digitos, el multiplicando x y el multiplicador y, representados en un sistema numérico posicional de raiz b, decimos: X= (Xp igernenenXod Y= (Yate Yi) Su producto p es un nimero positive de 2n digitos: P= (Pap tennnnenPy) El cual puede ser obtenido por el siguiente algoritmo: setearPj< 0, 0 Sixes negativo ey es positivo entonces: Six=2"-Ixl y=lyl X.y= (2"AxD).lyl = 2, lyl- byl pero el resultado deseado, un mimero negativo, seria la representacién en 2 complemento de x.y, ic. 2.lyb lx.yh. La acciéin correctiva serfa hacer una extensién de signo del multiplicando, esto es, representar a x como 2°" Ixi Ahora: xy =(2-bub.lyl= 2™yl - bx yl Una aparente eritica es que parece que se necesitara de un sumador de 2n-bits, puesto que x tiene el doble de su ongitud original; sin embargo son suficientes un sumador de n bits y un registro de desplazamientos de 2n-bits. Sin embargo un sumador de n-bit y un registro de desplazamiento de 2n-bit son suficientes. La técnica que se aplica es la siguien EI multiplicando(x) esté en un registro de n-bit, el multiplicador y el producto comparten un registro de desplazamiento de 2n-bit. El multiplicador esté en los digitos menos significativos, y el producto, inicialmente 0, en el extremo mas significativo. Cuando el bit menos significativo es 0, el registro de desplazamiento se corre a derecha una vez con el signo del multiplicando siendo insertado como el bit menos significative. Cuando es 1, el multiplicando(x) es sumado a los n bits ms significativos, el registro se come a derecha una vez y sus n bits mis significativos son reemplazadas con los (n+1) bits resultantes de la suma(n bits) a la cual se concatena, a la izquierda, el signo del multiplicando, Este procedimiento se repite para los n bits del multiplicador, resultando en la representacién en 2 complemento deseada. > Sixes positivoc y es negativo, entonces: Podriamos extender y de la misma manera. Pero esto serfa hacer el doble de iteraciones. Causa overhead. Una mejor solucién seria generar x.(2" — y) y entonces hacer una resta adicional 2" x. esta resta es en efecto la suma (2"—2*. x) y el resultado 2”* - Ix.yl. > Si xey son negativos, entonces: Expandimos x y restamos. La operacién resultante tiene la forma: (2° =x).2" —y) - 2" =2".x) = 2" -2y + xy -2" con todo lo que sea mayor que 2*" siendo descartado, Por lo tanto tenemos como resultado x.y, un nimero positivo. Recodificacién del multiplicador: cuando el bit actual del multiplicador es 0, no se hacen sumas segtin el esquema de multiplicacién y el producto parcial es simplemente corrido a derecha una posicién(paso 3 del algoritmo). Esto puede generalizarse a corrimientos de longitud variable(saltos) si se detectan cadenas de 0°s. Ademas si el sumador € tambien un substractor eficiente,como por ejemplo en la representacién 2 complemento, podemos hacer lo mismo con cadenas de 1's. Para justificar esta operacién, consideremos una cadena de 1's en el miultiplicador de a forma: ***"O11110%* (its det multipticator) i it) (posicién de bits) el proceso de multiplicacién entre los bits Y; y Yj en el algoritmo original computa: XA (Z+ 2+ ceuseect 2) = x2! = 2!) Entonces las (j —i) sumas pueden reemplazarse por una suma y una resta. Se necesitard un flag para controlar si se sua, se resta 0 se hace un salto, Reescribimos el algoritmo como: 1, setearP,-0, — 1.Sj<2n; flag 0; for is= I step 1 until ndo (¥,= I and flag = 0) or (¥,=0 and flag =1) then a if Y,=0 then begin p< p+x; flag <0 end else begin p < p-x; flag <1 end; Trabajando en complemento a 2 cuando y era negativo debiamos restar 2". x. Cuando hacemos saltos esto queda automaticamente resvelto ya que la extensicn de signo se hace agregando unos por la izquierda y este string de unos nunca termina, por Io tanto nunca alcanza a sumar 2".x, luego no es necesario restarlo. El peor caso es que no haya saltos sobre 0°s cuando se gjecuta el algoritmo. Esto ocurre con multiplicadores de la forma 0101....0101. ‘Otra alternativa para saltar sobre cadenas de 0's y 1's seria recodificar ¢ bits del multiplicador a la vez y tener 2° ~ 1 méltiplos del multiplicando disponibles antes de comenzar la multiplicacién. Por ejemplo con c=2, entonces x, 2x, 3x deberdin estar listos. Si los bits Y; y Yj,; del multiplicador son: > 00 se hace un corrimiento a derecha de longitud dos. > ol se suma x antes del corrimiento, > 10 se suma 2x ??2corre???2? yu se suma 3x en el paso? del algoritmo original, ise incrementa en 2. Este esquema de recodificacién pude ser combinado con los saltos sobre 0°s y 1’s. La tabla posterior indica como se podria hacer esto para dos bits por vez.con la generacién de solamente 2x y 4x, es decir, solamente con corrimientos a la izquierda de! multiplicando. Para entender la tabla se debe prestar atenci6n al hecho de que los bits Yi y Yij: son los que se recodifican, mientras que el bit Yj, Se usa para indicar la posible terminacién de la cadena, Mas atin dos bits extra estén implicitos en el extremo menos significativo y un bit extra 0 se asume en el extremo izquierdo. Por ejemplo, el multiplicador de 6 bit(011001) = 25 es recodificado como: 0 Of 10 01 00 4202 2.2%0.x 2.22% 2.204.x esto es (32-842-1).x Multiplicador Producto sumado Explicacién 2 Yat 0 0 0 sin cadena 0 0 #2 fin de cadena de unos 0 1 +2 un tinico uno 0 1 4 fin de cadena 1 0 4 comienzo de cadena 1 0 2 +2 para el fin y 4 para el comienzo 1 1 2 comienzo de cadena 1 1 0 cadena de unos Empleo de CSA en multiplicadores: si n operandos tienen que ser summados, como en el caso de una multiplicacién, podemos tomar ventaja de la velocidad(porque no hay suma sino pseudo-suma) de los CSA y la simplicidad(todos full adders) usando el siguiente algoritmo: 1. Setear SS, y CS, a0, Isjs2n 2. For i:= I step 1 until n do IFY,# Othen Fork:=0 step I until (n-1) do 3 Begin SSH S$in. @ CSign ® Xi CS iin HSS iu. CS 4. + (SS, @ CS) Xs SSin— SS'n5 CS nia & CS anes End; 3. Sumar SS y CS en un sumador paralelo de 2n bit de acuerdo al sistema (1). Debido a que los CSA son menos complejos que los sumadores paralelos, podemos usar ms que uno sin incrementar el costo del multiplicador. Un reloj maneja las operaciones de cada CSA tal que la operacién entera, ‘menos la suma ripple, tomaria n niveles de CSA. mbit path right shift rm | X.Yypur CSA-1 SS \ cs \ Yip y Pp iteraciones CSA2 0 Si xe-y son del mismo signo(y por lo tanto zo es de diferente signo), entonces deheriamos setear q)a 0-y restaurar r como Zot. Si X e y son positivos este es el esquema que ya hemos visto para enteros positivos. Si x ey son negativos, el cociente es positivo y 0 es el bit generado para una opcién incorrecta, > Si xe y son de diferentes signos y zy es del signo de y, entonces deberfamos otra vez corregir r como 79-y. qo es seteado a I(opei6n incorrecta para un cociente negativo) y q es inerementado en I para pasar de la representaciGn | complemento a 2 complemento, EL algoritmo es entonces como sigue. Sean X=(peemead) — YU X extendido que al mismo tiempo contiene el dividendo parcial sera un vector z de 2n-bit |, Hacer la extensidn de signo dex en 2. Qn & Xu Yas Signo & q, Zap. tyureesltylierne lO) 24 3. For i:= I step I until n-1 do Begin 7 2-(1-2signo).2™ .y; (donde la resta es la suma en complemento a 2) 4 if 2=0 then qui @ 1; q 0 (0S j Un conjunto de registros que definen el estado de un sistema. > Un conjunto de registros los cuales contienen operandos y resultados temporarios de computaciones; > Una unidad aritmética-Iégica( ALU) la cual ejecuta instrucciones de acuerdo a sus opcodes y operandos asociados. Desde el punto de vista del disefiador, hay tres bloques principales: > Una unidad de instruccién(L-unit) cuya funcidn es buscar y decodificar instrucciones, para generar las direcciones efectivas de los operandos y para buscar y/o almacenar esos operandos. Despues de esto se pasan las ordenes a una unidad de ejecucién la cual hara las operaciones. > Una unidad de ejecucién(D-unit) la cual puede ser integrada en un tinico bloque de HW(0 un chip), 0 bien puede estar compuesta de algunas unidades funcionales. Su rol es ejecutar las ordenes enviadas por la [-unit. > Registros de almacenamiento, algunos accesibles para el programador, y algunos internos al PC(estén tanto en Ja -unit como en la D-unit). Por supuesto estos tres bloques estén conectados via control path y dara path en una forma transparente all programador quien solo ve los resultados finales de los computos. Pero el diseftador es responsable de la locacién de los registros, de la cantidad de concurrencia permitida en la D-unit y las transferencias entre registros, es decir, decisiones las cuales influyen en la velocidad de la computacién pero no en la correctitud. 25 > Un Instruction Register(IR) que contiene la instruccién actual, Su parte de opcode puede ser Hevada a un decoder(DC), una parte de la unidad de control, que puede activar las Iineas de control en 1a ALU(O D-unit) 0 activar la transferencia a la primera instruccién de un microprograma para ese opcode, dependiendo de la estructura de control. En el primer caso hablamos de l6gica cableada y en el segundo de légica microprogramada. > Uneffective address register(EAR) que guarda la direccién de los operandos a ser buscados 0 almacenados. Este EAR esté conectado a la salida de un sumador, el cual puede tomar como entrada el campo direccién del instruction register, y el program coumter o un index register seleccionado por el campo index register en el IR. El sumador en si mismo puede ser parte de la D-unit o ser un sumador de “direcciones”(LA) dedicado en ta I- unit como se muestra en la figura. > Un Program Status Register(PSR) el cual contiene el program counter(PC) y a menudo algunos Flip-Flop(bits) indicando los resultados de condiciones tales como el signo de un resultado. un posible overflow, etc. En el aso de tener que implementar saltos condicionales, el EAR y el PC deberfan ser accesibles para la ALU. A continuacién se muestra una Tunit de palabras de 16 bits: Desde bus de memoria Registros de 6 almacenamiento IR | opcode lcampo direccién program counter | FF’s [PSR 16 ALU EAR 16 Hacia (direcciones) bus de memoria AF transfrenciaparaleta de ais Los bloques bisicos de una D-unit. Su nticleo es una ALU(DA) la cual puede hacer operaciones como suma y resta(en paralelo) de enteros, corrimientos, operaciones lgicas y comparaciones. Sus operandos estan contenidos en un acunulador de doble longitud(AQ y MQ) con capacidad de corrimientos y otros registros de longitud simple(R). Algunos Flip-Flop los cuales podrian ser parte de los PSR de la L-unit estdn seteados por condiciones ogicas tales como overflow y deteccién de signo. Un contador(C) mantiene cuentas de corrimiento y es usado en los algoritmos de multiplicacién y divisidn(estas dos operaciones pueden implementarse mediante Iégica cableada © puede usarse microprogramacién) Se requiemre un acceso desde y hacia memoria principal(MP) para el IR(recibir datos), EAR(enviar direcciones), los registros de almacenamiento SR(enviar y recibir datos), y PC(enviar direcciones). Entonces necesitaremos un bus PC-MP, a menudo lamado memory switch. Tambien se necesita comunicacisn entre SR, PC, y EAR(R) y la ALU(o DA) para cargar y almacenar operandos activando el sumador(SR), para valores inmediatos y/o cuentas de corrimientos(PC y EAR), y para retornar direcciones de salto(PC). El D-bus permite esta comunicacién. Cuando la 26 concurrencia en el PC es el mayor objetivo en el disefio su disefio y control se hace muy importante y puede ser subdlividido en varios data y control paths. Registros de t iento Bus t c [ae La ve | AF Se DA Congo! PSR « ov_ |e PSR + sp {+ a Control [Late ‘Metodos para Acelerar el Ciclo de Instruccién. En camino a lograr acelerar la ejecucién de las instrucciones podemos pensar en hacer un solapamiento de las distintas fases que intervienen en la ejecucién de las mismas. Para ello es importante determinar que recursos estan involucrados en cada fase, los cuales deberdn estar libres al comienzo de las mismas y tambien determinar cuales son los recursos que se liberan al final. Esto mostrard que recursos son criticos y eventualmente la posibilidad de du concurrencia. Si hacemos un andlisis de los recursos utili los para conseguir una mayor dos en Las distintas etapas de la ejecucién de una instrucci6n tenemo: Paso Funcién Recursos necesarios Recursos liberados 1 Instruction Fetch IR, MP Switeh, PC PC, MP Switch 2 decodificar e incrementar el PC AR, DC, PC pe 3 cdleulo de la direccién efectiva TA, EAR IR TAIR 4 busqueda de operandos EAR, MP Switch EAR, PM Switch 5 ejecucién D-bus, D-unit, D-bus, D-unit Paso 1: el instruction fetch almacena la préxima instruccidn en IR. La direccién de la instruccidn es encontrada en PC el cual puede ser modificado cuando termina este paso, y el memory switch(MP Switch) es usado para la transferencia. Paso 2: decodificar e incrementar el PC requiere libre uso del decoder DC y del PC. El primero puede ser liberado Tuego de hacer su tarea, mientras que el PC no puede tocarse hasta que el paso 1 se invoque nuevamente. Paso 3: el calculo de la direccién efectiva requiere el uso de IR, algunos de los registros de SR, el sumador IA de la unit y los registros EAR. Al final de esta etapa, IR y IA pueden set liberados puesto que toda la informacion codificada en la es extrafda(IR), y tenemos alo sumo una adicién en TA por instruccidn, Paso 4: bisqueda de operandos requiere el uso de MP Switch y del EAR cuyos contenidos seteados en pasos anteriores no han sido modificados. Al final de este paso, ambos recursos pueden liberarse. 7 Paso 5: toma lugar unicamente en la D-unit y requiere tambien que el D-bus esté libre. Si asumimos que los 5 pasos Hevan la misma cantidad de tiempo o en otras palabras que el solapamiento ideal puede ser realizado, todos los recursos los cuales son utilizados por una duracién de més de una etapa y cuya informacién no debe ser modificada deberin ser duplicados para que dicha informacién no se pierda. En particular esto es cierto para el PC, ya que se hard el fetch de las instrucciones en cada paso. PC tiene que ser incrementado en el paso | y algin buffer sera necesario para almacenar instrucciones entrantes mientras que el IR todavia tiene La instruccién que esté en la etapa de decodificacién y para la cual se hace un calculo de la direccién efectiva(pasos 2 y 3). Siel IR esta cargado al final del paso 1 y liberado solo en el final del paso 3, y si una nueva instrucciGn es encontrada en cada paso, no es dificil preveer el desastre! Tendremos una situacién casi continua de overflow en el buffer puesto que se llena dos veces mis ripido de lo que se vacfa. Podemos dividir los pasos en los tres grupos de acuerdo a los requerimientos: instruction fetch(pasol y parte del 2), tareas de la T-unit(lo que resta del paso 2, 3 y 4), y tareas de la D-unit(paso 5). Si el MP Switch esté restringido a ser accedido secuencialmente y por lo tanto no puede ser tiempo-compartido por el instruction fetch(I-fetch) y la I- unit, entonces o bien Ia I-unit y 1a D-unit pueden sobrelaparse o bien el I-fetch y la D-unit pueden trabajar en paralelo. Esto se ve en el siguiente diagrama de Chart: Deunit Funit Fetch Overlap simple Ahora si la MP est organizada de tal manera que es tan {cil buscar una palabra(instruccién) doble como una simple, entonces con agregar un buffer para mantener las palabras extra podemos realizar el sobrelapamiento de la siguiente figura: D-unit Tunit fetch Tiempo Overlap con captura de dos instrucciones Aqui tenemos el primer indicio de look-ahead, esto es , algtin trabajo es hecho antes de que se necesite. Este prefecthing es inutil si la instruccidn es un salto. ‘Supongamos que t es el(peor caso) tiempo para ejecutar tareas de la F-fetch, unit o D-unit, y asumiendo que estos peores casos son los mismos en cada etapa del ciclo de instruccién, entonces tenemos: {)= tiempo para ejecutar n instrucciones sin overlap = 3nt {1 = tiempo para ejecutar n instrucciones con overlap simple = (1-+2n)t ty = tiempo para ejecutar n instrucciones con prefetching = (1 +[3n/2)t 28 Esto es, de toa t; hay un mejoramiento del 50% y de to ats del 100%. El tiempo en el caso de overlap con captura doble de instruccisn requiere que la MP sea dividida en dos bancos que puedan ser accedidos independientemente, Esto se conoce como memory interleaving. Con esto logramos reducit los tiempos de acceso. Potenciandolo lo suficiente se puede llegar a hacer busqueda de instrucciones y busqueda de operandos en forma concurrente. La situacién ideal se muestra a continuacién y adem: {y= tiempo para ejecutar n instrucciones con overlap ideal = (2 +n) D-unit il) 2 1 jis 115 Funit fetch Overlap ideal con captura doble de instruccién Pero un doble instruction fetch no es necesario bajo estas condiciones ideales. Entonces la situacién éptima seria Deunit il 12 1i3 tis Tunit i) 2) 8 ) i \is ji6 fetch iL) i2iis 1 id Lis tis be Overlap ideal La ventaja del prefetching es que minimiza la posibilidad de contenci6n de médulos de memoria puesto que las biisquedas de instrucciones y operandos se sobreponen la mitad de las veces. Que otras acciones pueden hacerse para acelerar el ciclo de las instrucciones? Tres éreas donde se puede hacer esta ‘mejora som: Acelerar el instruction fetch; > Acelerar el procesamiento en la T-unit > Acelerar el procesamiento en la D-unit. Estos aceleramientos deben ser hechos concurrentemente, ya que seria initil tener dos etapas extremadamente répidas y una tercera lenta que actuarfa como cuello de botella. Hasta hace poco tiempo el punto débil fue la MP. Con el adlvenimiento de memorias interleaving, de caches y de memorias semiconductoras sin lectura destructiva, las busquedas de instrucciones y operandos se pueden hacer mucho ms ripido, Este hecho influy6 en el diseiio de los PC en que puede hacerse prefetching mis cliciente y algunos operandos pueden estar presentes mientras ta D- unit esté ocupada procesando instrucciones previas. Por lo tanto serin necesarios buffers para instrucciones, para operandos y para direcciones de operandos 29 Aceleramiento de la Instruccién Fetch. Para acelerar la buisqueda de instrucciones lo ideal seria evitar los accesos a MP. Esto es posible tanto cuando tenemos un Look-ahead como un Look-behind. Se tendra un buffer de instruccién, implementado con una cola FIFO. El Look-ahead consiste en tener en el procesador un buffer que almacena temporariamente la informacién que se trac por adelantado, de manera tal que cuando esta se necesita, ya se dispone de ella. El Look-behind consiste en que una instruccién permanece en el buffer de instruccidn decodificada, o mds ain ejecutada, hasta que las m instrucciones que le sucedan hayan sido decodificadas. Con esto, si se ci la situaciGn tipica de saltos hacia atris dentro de la ejecucién de un programa, en la medida que el salto esté contenido en el buffer, solo tendrfa que ‘modificar un puntero al buffer y evito el acceso a memoria por medio del MP Switch. Look-Ahead Instruction Register Look-Bebind Cuando se completa ta parte destinada a Look-Behind se pierde la instruccidn que ha estado més tiempo almacenada reemplazandola por la nueva instruccién. Los limites dentro del buffer para el Look-Ahead y Look-Behind varian, Esta forma de trabajo es similar al funcionamiento de memoria caché. Aceleramiento de la unit. El mayor tiempo que se consume en esta etapa es la biisqueda del operando. Como antes la mejor forma de minimizar esta operacién es evitandola, Esto significa que las instrucciones registro a registro deberin ser usadas tanto como sea posible‘ sin embargo los resultados que se obtienen en estas méquinas no son siempre los ideales). Vector processors usan caracterfsticas interleave para méxima eficiencia, Aceleramicnto de la jerarquia de memoria con la introduccién de buffers répidos, 0 caches, benefician los tiempos de ejecucién en Ja T-unit, aunque la aleatoreidad del acceso a datos comparado con la secuencialidad de las instrucciones no favoreve a la eficiencia, Aceleramiento de la D-unit. En esta etapa uno primero podria utilizar algoritmos eficientes. En general esto implicard que estén presentes varias D-units, cada una dedicada a un conjunto de funciones, Cuanto mas dedicadas sean estas unidades, superior va a ser la perfomance. Esta ganancia puede ser mejorada si permitimos que varias D- unit operen en paralelo. Si permitimos superposicién en las ejecuciones de la D-unit, entonces necesitaremos algin mecanismo de control de HW, el cual puede chequear el orden permisible de las operaciones. Estos controles pueden hacerse muy complejos. De la misma manera, sila concurrencia es permitida en la ejecuciGn, entonces los programas deberdn ser modificados de manera tal que tomen ventaja del modo de operacién. Esto implica deteccién de paralelisno y sebeduling Look-Ahead y Paralelismo, Modelos de procesadores Look-Ahead: el objetivo en el disefto de procesadores con Look-Ahead que permiten erminaciones no secuenciales(una instruccién puede terminar luego de que una de sus sucesoras haya terminado) es controlar la ejecucién de las instrucciones, de manera tal que los resultados obtenidos son los mismos que aquellos que hubieran resultado con una ejecucién secuencial estricta. Mas alin nos gustaria obtener un tiempo de terminacién minimo. La complejidad de la implementacién crecerd con el deseo de ser tan optimo como sea posible, Condiciones que impiden que una instruccién sea despachada. Las instrucciones son buscadas, en una manera look-ahead, en un buffer de instruccién, Luego, si la parte de decodificacién de la L-unit puede permitir que 1a instruccidn proceda o bien puede impedir que la instruccién sea despachada, Ademés cuando una instruccién no puede ser despachada, por condiciones que ya veremos, instrucciones subsecuentes no podran ser despachadas tampoco, Estas condiciones son: > La primera condicién, la cual estd orientada a los recursos, es la indisponibilidad de que una unidad funcional hhaga su tarea Ejemplo: si asumimos un simple sumador, con un tiempo de suma de 4 unidades y un multiplicador simple con un tiempo de multiplicacién de 10 unidades, la secuencia: SI: RICRIR3 Esta secuencia produce el siguiente diagrama: Lh) tu ‘Sumar pee, SS ee fj bu ‘Multiplicacién Mf ydey kw Sumar Se necesita una D-unit que est ocupada en este momento, por lo tanto no serd despachada a la fase de decodificacién, > El segundo factor que puede impedir que una instruccién sea despachads es relativa al procedimiento. Esto sucede cuando dos instrucciones son dependientes una de Ia otra, esto es cuando el orden en el cual ellas son completadas tienen un impacto sobre los valores que estan siendo computados. Si S; y S; son dos instrucciones, sean I, I; sus respectivos dominios y O, y O, sus rangos. Si S,y S; tienen un flujo de control secuencial, entonces estas dos instrucciones pueden ser ejecutadas en paraleto sssi 1) No almacenan valores en la misma variable(tegistros). 2) El resultado de una instruccién no es el operando de entrada para la otra. ‘Traduciendo estos requerimientos en terminos de dominios y rangos: 2 2 para todo (i,).i#) Si probamos con el ejemplo anterior vemos que las tres operaciones pueden ser procesadas en paralelo desde el punto de vista procedural. En el disefio de nuestro procesador simple, necesitamos mantener informacién de la disponibilidad de la D-unit y del uso de los registros. La primera tarea es fil: asociamos un bit de “ocupado” con cada unidad. Cuando b,, ei bit asociado con D,., ¢s 0, una instruccién puede ser despachada a Dy . En este punto, by ¢s seteado a 1 y esto impide cualquier despacho hacia Dj, Cuando se completa la operacién en Dy, byes reseteado a0. Si uso la misma estrategia para los registros, esto es, sca nl bit asociado con Ry, este podria ser seteado a 1 cuando Ry. esti en el rango de una instruccién despachada, Esto podrfa deshabilitar futuros despachos de cualquier instruccién que tenga Ry, tanto en su rango como en su dominio. Cuando Rj recibe su valor, al final de la instrucei6n para la cual es una variable de salida, n, puede ser reseteado a 0, Este esquema falla, sin embargo, cuando consideramos el caso donde R, esté en el dominio de la instrucci6n S(Ry € 1) y enel rango de S(R, € O,) la cual sigue a S,. La tercera condicidn (O; 0 I, = @) no es satisfecha y S, no puede ser procesada ya que existe el riesgo de tener su resultado almacenado en Ry, antes de haber usado aR, como tun operando de S,. Seteando un bit R,, cuando R, esta tanto en el dominio como en el rango de S, resolveriamos 31 este conflicto, pero no permitirfa la ejecucién concurrente de dos instrucciones que tienen elementos comunes en sus dominios. Como algunas instrucciones pueden tener dominios no-disjuntos, y ya que todas pueden ser completadas antes que un elemento comin pueda ser parte del rango de una instruccién subsecuente, necesitaremos, contadores para monitorear la utilizaciénde los registros. Sea C; el contador asociado con Ri. Inicialmente C, es seteado a 0, Cuando R, esti en el rango de alguna instruccién S,, su contador es seteado a 1. Si esté en su dominio, C, es decrementado en 1(si esté en el rango y en el dominio, es seteado a 1 ya que ninguna otra instruccién puede usarlo). Cuando se completa la instruccisn, todos los elementos de su rango tienen sus contadores reseteados a 0 y todos los elementos en su dominio tienen sus contadores incrementados en I(con la misma excepcisn de arriba, donde el contador sera reseteado a 0) (ver ejemplos!!"") Unidades D-virtuales: un niimero pequefio de unidades funcionales y las dependencias de procedimiento contribuyen al retardo de las operaciones. La primera accién de retardo puede ser solucionado teniendo varias D- unit que puedan ejecutar las mismas operaciones. Si tales inversiones de HW son demasiados costosas, podemos usar unidades D-virtuales como sigue. En lugar de no despachar una instruccién a una D-unit ocupada, el requerimiento es puesto en una cola FIFO asociada a la unidad. Cuando la D-unit se libera, selecciona la primera instruccién(si la hay) en la cola. La ventaja es que ahora solo las dependencias relativas al procedimiento impiden el despacho de instrucciones. Ejemplo: asumamos que integramos L-fetch e [-unit con un tiempo de I ciclo, el tiempo de suma de 2 ciclos yun tiempo de multiplicacién de 4 ciclos. Las unidades de suma y multiplicacién son tinicas. Consideremos la secuencia: SI: RICR2R3 S2: RICR4*RS S6: RIC R3+R4 Si asumimos que tenemos unidades D-virtuales, el diagrama de Gantt es el siguiente: ku Suma Multiplica - Muttipfica Suma Lu Suma a Look-Ahead con unidades D-virtuales Reproducir D-unit, tanto en el sentido real, 0 con la ayuda de colas FIFO, es necesariamente limitado, Se debe seleccionar un Ifmite en el nimero de instrucciones que pueden ser despachadas. Este niimero puede estar relacionado con la frecuencia de ocurrencia de instrucciones especificas, sus tiempos de ejecucién y la del buffer look-ahead. Cuando la cola de una D-unit esti llena, el despacho de una instruccién a la D-unit deberta estar prohibida hasta que la instruccisn actual se complete. En esencia, reemplazamos el bit de ocupado introducido 32 anteriormente, por un contador inicializado con la longitud maxima de la cola(o el ntimero maximo de unidades). Con cada instruccién despachada a una unidad particular, el contador es decrementado en 1, y es incrementado en 1 cuando la instruccién se completa, El test del bit ocupado es reemplazado por testear si el contador es 0. Las D-unit podrian tener sus propios buffers de operandos, Si asf fuera, la condiciGn Oj > i= @ no es requerida en raz6n de permitir concurrencia entre la instrucci6n Si y su sucesora S,. Al momento del despacho de Sj, los contenidos de los registros en sus dominios son transferidos en los butfers intemos en la D-unit que va a realizar la operacién, Pagamos un precio por esta transferencia pero se aumenta el paralelismo. Ademis el control se simplifica ya que no hay necesidad de un contador/registro y podemos retornar al esquema original del ple bit. De la misma manera los resultados pueden ser almacenados en 1a D-unit esperando la finalizacién de operaciones previas(buffers a la salida). Entonces la condicién 0, O; = @ puede tambien ser eliminada. Un segundo bit por registro se necesita para propositos de control, de manera tal que a lo sumo un almacenamiento de retardo ocurra para un dado registro. Conflictos de la forma I, > Oi = @ permanecersin ya que tienen implicaciones légicas en la correctitud de los resultados. Para el ejemplo anterior, asumiendo look-ahead con buffers de entrada y sin unidades virtuales, el diagram de Gantt seri s2 Lu S3 Lu, Suma Sa Lu Muttipljca Ss u_) Suma; S6 ‘Suma (Obs: la primera multiplicacién no se retrasa nunca mas, Asumiendo unidades virtuales buffers para los registros, podemos ain mejorar nuestro procesador look-ahead? El siguiente ejemplo muestra que mientras algunos conflictos relativos al procedimiento no pueden ser evitados, no implica que se deba parar el despacho de instrucciones subsecuentes, Ejemplo: (a) consideremos la secuencia: Si: RC RARs Sz RRR; Su: RoRARy Como hay un conflicto de procedimiento entre S; y Ss, la titima no podria ser despachada si seguimos las reglas respetadas hasta ahora. Sin embargo, si se usa despacho condicional reservando la unidad de multiplicacién para ella, ¢ indicando cuales registros se necesitan y cuales van a ser modificados por la instruccién, entonces podriamos despachar y ejecutar Ss. 33 (b) consideremos la secuencia: Si: Rx RVR So: Re Ry"Rs Su Ri RRs No es dificil ver que si S2.es condicionalmente despachada como en la secuencia previa, entonces $3 pueda ser procesada y completarse antes del comienzo de $2(asumimos que la divisin toma 6 unidades de tiempo). Por lo tanto, debemos prevenir el almacenamiento del resultado de la suma en RI hasta el tiempo de comienzo de la multiplicacién, Este ejemplo muestra que si queremos implementar “forwarding” necesitamos un dispositive de control el cual indique cuando valores asociados con registros estén disponibles, asi como tambien cuando resultados pueden ser almacenados en los registros, Para esto podemos asociar a cada buffer de entrada de la D-unit un bit indicando si un valor esti en el buffer o si esté esperando que se complete una operaci6n en alguna otra D-unit. En este caso, en vez de que un valor sea almacenado en el buffer, ponemos en el una marca(tag) que identifique la D-unit que enviaré el ‘valor. Cuando los bits de ambos operandos estan seteados a “valores” Ia operacién puede proceder, Cuando una instruccién en la D-unit se completa el control busca todas las marcas en las otras D-units, las cuales estan esperando por una finalizaci6n particular. La transferencia desde un registro salida a los buffers es entonces autorizada y esta podrfa permitir el comienzo de algunas operaciones despachadas condicionalmente. Es evidente que esta busqueda leva tiempo, a menos que pueda ser realizada en una manera asociativa o a menos que haya un nimero limitado de unidades(i.e, la longitud de las colas se restringe) Diseiio de Control del PC. La computadora esta dividida en componentes basicos: el CPU, el procesador, es el centro de la computadora y contiene todo excepto la memoria, entrada, y salida. El procesador, ademis, estd dividido en computacion (Datapath) y control. Datapath: consiste de unidades de ejecucidn, tales como ALUs, los registros, y los caminos de comunicacién entre ellos. Desde el punto de vista del programador, el datapath contiene la mayor parte del estado del procesador- la informacién que deberd ser salvada por un programa que va a ser suspendido y restaurado luego para continuar ejecutandose. Ademiis de los registros de proposito generale visible para el usuario, el estado incluye el PC, el registro de direcciGn de interrupcim (AR), y el registro de estado del programa({lags). ‘Como una implementacién es creada para una tecnologfa de HW especifica, es la implementacién la que establece el tiempo de ciclo de reloj. El tiempo de ciclo de reloj esta determinado por los circuitos mas basicos que operan durante un periodo de ciclo de reloj- dentro del provesador, el datapath frecuentemente tiene este honor. El dataparh tambien dominars el cosro del procesador, tipicamente requiere la mitad de los transistores y la mitad del rea del procesador. Ademés se puede decir que es la parte més simple del disefto del procesador. Tambien condiciona la mejor perfomance ya que modula el CPI(ciclos por instruccisn) y el CLOCK RATE( frecuencia de reloj) La operaciGn fundamental del datapath es leer Los operandos det banco de registros, procesarlos en la ALU, y Tuego guardar los resultados, el diseiio del datapath es simple, entonces alguna parte del disefio del procesador deberd ser dificultosa, y esta parte es el control. El control puede ser simplificado- la forma més facil es simplificar el set de instrucciones, pero el numero de instrucciones depende de la arquitectura de la computadora. La unidad de control dice al datapath que hacer en cada ciclo de reloj durante la ejecucidn de las instrucciones. Esto es tipicamente especificado por un diagrama de estados finitos. Cada estado corresponde a un ciclo de reloj, y las operaciones que se hacen durante el ciclo de reloj se escriben dentro del estado. Cada instruccién toma algunos ciclos de reloj para completarse. Una porcién de un diagrama de estados finitos para los dos primeros pasos de ta ejecucién de una instruccidn podria ser: En el primer estado el registro de direccin de memoria(MAR) es cargado con el PC, el registro de instruccién es cargado desde menoria en el segundo estado y el PC es incrementado en eltercer estado. Este terver estado tambien carga los dos registros de operandos, RsI_y Rs2, en los registros A y B para usar en estados posteriores. ‘Ahora hay que evar este diagrama de estados al HW. Las altemativas para hacer esto dependen de la tecnologia de implementacién, Supongamos que el diagrama finito tiene 50 estados. Entonces se requieren 6 bits para representar el estado. Entonces, las entradas al control deberin incluir estos 6 bits, algiin ntimero de bits(3) para seleccionar condiciones desde el datapath y 1a unidad de interface de memoria, mis los bits de instrucciones( 12). Dadas estas entradas el control puede ser especificado por una gran tabla, Cada fila de la tabla contiene los valores de las lineas de control para hacer las operaciones requeridas por ese estado y reemplazar el préximo numero de estado. Asumimos que existen 40 lineas de control, Control Légica Cableada opm mo path LiL State Instruction Register Reducir costos de HW en control cableado: la implementacidn mis sencilla de una tabla es con una ROM. En este ejemplo, 2" palabras de 40 bits cada una, requeririan una ROM de 10 MB. Como solo parte de esta tabla tiene informacién itil, el tamaito puede ser reducido manteniendo solo las filas con informacién tinica- con el costo de una decodificacién de direcciones mas complicada, Este HW se llama PLA. Esencialmente reduce el HW de 2” 35 palabras a 50 palabras mientras se incrementa la l6gica de decodificacién de direcciones. Otra forma de reducir los requerimientos de HW es minimizando el nimero de miniterms(filas de la tabla), Si el tama del PLA crece ‘mucho, una gran tabla puede ser factoreada en algunos PLA mis chicos, cuyas salidas son multiplexadas para seleccionar el control correcto. Curiosamente, la numeracién de los estados en el digrama de estados finitos puede hacer la diferencia en el tamaito del PLA. La idea es tratar de asignar nimeros de estados similares a estados que hacen operaciones similares. Diferenciando los patrones de bits que representan el ndmero de estados mediante un Gnico bit(problema de asignacién de estados), ‘Como los bits de instruccién son tambien entradas al control del PLA, ellos pueden afectar la complejidad del PLA asf como lo hace la numeracién de estados. Por este motivo se deberd tener cuidado al seleccionar opcodes puesto que pueden afectar el costo del control. (++E1 control cableado ve a la unidad de control como un circuito I6gico, que genera unas dadas secuencias fijas de control, Como tal es disefiado con los objetivos usuales de minimizar el nimero de componentes usados y ‘maximizar la velocidad. Un sistema tal, una vez construido no podri cambiarse a menos de rediseftarlo y recablearlo.++} Perfomance del control cableado: cuando diseiamos el control para una miquina, queremos minimizar el CPL promedio, el ciclo de reloj, la cantidad de HW para especiticar control y el tiempo en desarrollar el control correcto. Minimizar el CPI significa reducir e1 nimero medio de estados que componen la ejecucién de una instruccién, porque cada ciclo de reloj corresponde a un estado. Esto tipicamente se logra haciendo cambios al datapath combinando o eliminando estados. Por ejemplo, si se cambia el HW tal que el PC puede ser usado directamente para direccionar memoria sin pasar por el MAR primero. Entonces el diagrama de estdados sera Jceso a memoria no completo Acceso a memoria completo Este cambio ahorra un ciclo de reloj(un estado menos) por cada instruccién, Control Microprogramado: la solucién de Wilkes fue poner la unidad de control en una computadora en miniatura teniendo una tabla para especificar el control de! datapath y una segunda tabla para determinar el flujo de control al nivel “micro”. Wilkes Ilam6 a su invencién microprosramacién y asocié el prefijo “micro” a los terminos tradicionales usados en el nivel de control: microinstruccién, microcédigo, microprograma y asf siguiendo. Las microinstrucciones especifican todas las seftales de control para el datapath, més la capacidad de decidir condicionalmente cual sera la préxima microinstruccién a ejecutarse. Como el nombre” microprogramacion” sugiere, una vez que se diseiio el datapath y la memoria para las microinstrucciones, el control se convierte esencialmente en una tarea de programacién.; esto es, la tarea de escribir un interprete para el set de instrucciones, La microprogramacién permite que el set de instrucciones sea cambiado alterando los contenidos donde esti almacenado el control(la mayoria de las méquinas usan ROM) sin tener que tocar elHW. Una organizacién para un control microprogramado simple podria ser: 36 Control Microprograma (ROM) Microinsiruction PC [Logica para seleccién Instruction Register Aqui, a diferencia del control cableado, hay un incrementador y una légica especial para seleccionar la proxima microinstruccién. Existen dos approaches para seleccionar la préxima microinstruccidn: usar un program counter para la microinstruccién, como se muestra arriba, o incluir la direcciGn de la préxima microinstruccién en cada microinstruccién, Principios de la Microprogramsci¢n: las lineas de control que hacen funciones relacionadas, generalmente se ponen una despues de otra para fécil comprensién. Grupos de Iineas de control relacionadas son llamadas campos y dan formato a la microinstrucci6n, Cada campo tiene un nombre que refleja su funcién, Un ejemplo de una microinstruccién con 8 campos: Destino | Operacién de ALU | Origent | Origen? | Constante | Mise | Cond Jump addres Se puede usar un PC para suministrar la préxima microinstrucci6n, pero algunas computadoras dedican un campo en cada microinstruccién para la direccién de la proxima microinstruccién. Algunos hasta proporcionan multiples campos para manejar saltos condicionales. Durante los saltos condicionales se podria decodificar una instrucci6n mediante el testeo de su opcode un bit a la ‘vez, pero approuch es demasiado pobre en la prictica. El esquema de decodificacién de instrucciones mis ripido enrmn. Un approach mas refinado es usar el opcode para indexar una tabla que contiene direcciones de microinstruccién que suministra la préxima direcci6n. La memoria donde esti el microprograma, o almacenamiento de control(control store) es el HW mils visible y mas facil de medir en control microprogramado; por lo tanto aqui se focalizan las técnicas para reducir los costos de HW. Las técnicas para reducir el tamaiio del control-store incluye reduccién del mimero de microinstrucciones, reducir el ancho de cada microinstruccién, o ambos, Asi como los costos estan medidos por el tamaito del control- store, la perfomance tradicionalmente se mide por los CPI. El microprogramador conoce la frecuencia de las macroinstrucciones, y por lo tanto conoce donde y como se gasta la mayor parte del tiempo- las instrucciones que demandan la mayor parte del tiempo de ejecucidn son optimizadas en velocidad, y las otras son optimizadas para espacio. Las técnicas de control, cableada 0 microcédigo, son juzgadas por su impacto en el costo del HW, tiempo de ciclo de reloj, CPT y tiempo de desarrollo, 37 ‘Tecnicas para reduccién de costos. Reduccidn de costos de HW mediante la codificaci6n de Iineas de control: el approuch ideal para reducir el contro- store es primero escribir el microprograma en una notacidn simbélica y entonces medir como se ponen las lineas de control en cada microinstruccién, Con estas medidas podremos ser capaces de reconocer los bits de control que pueden ser codificados en un campo mas pequeito. Si no més que una de 8 lineas estan seteadas simultaneamente en [a misma microinstrucci6n, entonces ellas pueden ser cotlificadas en un campo de 3 bits(log, 8 =3). Este cambio ahorra 5 bits en cada microinstruccién y no perjudica a los CPI, sin embargo significa un costo extra de HW de un decoder de 3 a 8 necesario para generar las 8 Iineas de control originales. O sea que sacar 5 bits del control-store usualmente nos trae el costo de un decoder. Esta téenica de reducir el ancho de campo se lama codificacién. Existen_peligros en la codificacién. Por ejemplo, si una linea de control codificada esta sobre el critical timing path, si el HW que lo controla esté sobre el camino critico, entonces padece el tiempo de ciclo de reloj. Otro peligro puede ser que en la tiltima revisién del microcédigo se podrian encontrar situaciones donde las lineas de control podrian ponerse en Ia misma microinstruceién, perjudicando la perfomance o requiriendo cambios en el HIW que podrian aumentar el ciclo de desarrollo, Reduccidin de costos de HW con formatos miltiples de instrucciones: las microinstrucciones pueden achicarse si ellas son divididas en diferentes formatos y proporcionan un opcode 0 campo de formato para distinguirlas entre ellas. El campo de formato proporciona a todas las Iineas de control sin especificar sus valores por defecto. Reducir el costo de HW usando campos de formato tiene su propio costo de perfomance que es ejecutar mas instrucciones. Generalmente, un microprograma que usa formatos de microinstruccidn simple puede especificar cualquier combinacién de operaciones en un datapath y tomara menos ciclos de reloj que un microprograma hecho con microinstruceiones restrictas. Maquinas estrechas son ms baratas porque los chips de memoria son tambien estrechos y altos: se tienen muchos menos chips para palabras de 16K con memorias 24-bit que para palabras de 4K con memorias de 96 bit Este approuch, estrecho pero alto, es a menudo llamado microcédigo vertical, mientras que el approuch amplio pero bajo es llamado microcédigo horizontal. No existe una definicién formal para microcédigo vertical y horizontal. Los terminos relacionados maximamente codificados y minimamente codificados aclararé esta situaci6n, ‘Como una regla, el control-store minimamente codificado usa més bits, y los aspectos estrechos pero altos de los chips de memoria significa que control-stores maximamente codificado naturalmente tienen més entradas. A ‘menudo los disefiadores de méquinas de codificacién minima no tienen la opcién de chips de RAM pequeiios, causando miiquinas con microinstrucciones amplias para terminar con muchas palabras de control-store. Reduccidin de costos de HW agregando control cableado para compartir microesdigo: el otro approuch para reducir control-store, es reducir el nimero de microinstrucciones en lugar de su tamafio. Un approuch posible son las, microsubrutinas, como tambien las rutinas que comparten eédigo mediante saltos. Se puede hacer que se comparta ms cdigo mediante la asistencia de control cableado. Por ejemplo muchas microarguitecturas permiten que bits del Instruction Register especifiquen el registro correcto. Otra ayuda comin es usar porciones del Instruction Register para especificar la operacion de la ALU. Cada una de estas ayudas esta bajo control microprogramado y son invocadas con un valor especial en el campo apropiado. La desventaja de agregar control cableado es que podria ampliarse el ciclo de desarrollo porque no involucra programacién, pero se requiere discilo y prueba de nuevo HW. ‘Técnicas para mejorar la perfomance. Reduccidin del CPI con microcddigo para casos especiales: e programador experimentado conoce cuando ahorrar espacio y cuando gastarlo. Una instancia de esto es dedicar microcédigo extra para instrucciones frecuentes, y a reducir CPI. Por ejemplo la VAX 8800 usa su gran control-store para muchas versiones de instrucciones CALL, optimizadas para ahorrar registros dependiendo del valor de una mascara. Reduccidin del CPI agregando control cableado: agregar control cableadlo puede reducir costos como tambien ‘mejorar la performance. Un ejemplo puede estar en la interface de memoria, donde la solucién es que el 38 microcédigo haga un testeo y branch hasta que la memoria este lista(stalls). Un stall se hace cuando una instruccién deberd esperar uno o més ciclo de reloj esperando que algtin recurso esté disponible, en este caso la memoria Muchos approaches solucionan este problema teniendo en el HW stall una microinstrucci6n que tratard de acceder al memory-data register antes que la operacién de memoria se complete. En el instante que la referencia a memoria esti lista, la microinstruccién que necesita los datos se puede completar, evitando el reloj-extra de delay para acceder a memoria de control Reduccién del CPI mediante paralelismo: a menudo el CPI puede ser reducido con mis operaciones por microinstruccidn, Esta técnica, la cual usualmente requiere microinstrucciones amplias, incrementa el paralelism con més operaciones de datapath. Esta es otra caracteristica de las maquinas Hamadas horizontales. Errores y Riesgos. Riesgo: implementar una funcién compleja mediante microcédigo podria no ser més rapide que con macrocédigo. Por un lado, microcédigo tiene la ventaja de ser encontrado mucho més rapido en memoria que el macrocédigo. El microcédigo tiene la ventaja de usar registros temporarios intemnos en la computacién, fo cual puede ser ttil en ‘miquinas con pocos registros de propésito general. La desventaja del microctdigo es que los algoritmos debersin ser seleccionados antes que la méquina sca anunciada y no podran ser cambiados hasta el préximo modelo de arquitectura; macrocédigo por el otro lado, puede optimizar sus algoritmos en cualquier momento durante el tiempo de vida de la maquina. Error: si existe espacio en el control-store, no hay costo en poner nuevas instrucciones. Como la longitud del control-store es usualmente una potencia de 2, podria existit espacio disponible para expandir el set de instrucciones. Pero agregar instrucciones generalmente trae costos de labor y mantenimiento. La tentacién de agregar instrucciones “libres” (de costo) puede ocurrir solamente cuando el set de instrucciones no esta fijo, como serfa el caso del primer modelo de una computadora. A causa del requerimiento de compatibilidad en el set de instrucciones, todos los modelos futuros de esta inaquina estaran forzados a incluir estas instrucciones “libres”, ain si luego el espacio esté muy solicitado. Esta expansién tambien ignora el costo del tiempo de desarrollo y testeo de las instrucciones que se agregaron, como tambien los costos en reparar los bugs. Error: las usuarios encuentran el control-store writable muy tiil Los errores en el microcédigo persuadieron a los disefiadores de minicomputadoras que serfa més inteligente usar RAM que ROM para control-store, De esta forma se podrian reparar los bugs del microcédigo con floppy disks perzonalizados en lugar de tener un ingeniero tirando placas y reemplazando chips. Ademas los usuarios estarian habilitados para escribir microesdigo mediante control-store writable(WCS). Pero a medida que paso el tiempo las WCS no tuvieron el éxito que originalmente se pens6: > Las herrramientas para escribir microcédigo fueron mucho mas pobres que aquellas para escribir macrocédigo > A lavez que la memoria principal se fue expandiendo, WCS limit6 a instrucciones de 1-4KB. Se utilizé el set de macroinstrucciones para construir e! microcsdigo, de esta manera el microcédigo se hizo menos itil para algunas tareas para las cuales fue pensado. > Con el advenimiento del tiempo compartido, los programas podian correr por solo milisegundos antes de cambiar a otras tareas. WCS tendrfa que ser swapped si ms de un programa lo necesitaba, y recargar el WCS podrfa tomar algunos milisegundos. > El tiempo compartido tambien significs que los programas deberfan protegerse unos de otros. A causa de su bajo nivel, los microprogramas pueden burlar toda barrera de proteccidn. Microprogramas escritos por usuarios eran muy poco confiables. 39 Aplicaciones de la Microprogramacién. Ademas de interpretar un dado conjunto de instrucciones, la microprogramaciGn puede usarse en otras tareas de naturaleza interpretativa, como ser emulacién, ejecucién directa de lenguajes de alto nivel, potenciamiento de aspectos especiales de una dada arquitectura. Emulacién: la microprogramacién es la interpretacién de un conjunto de instrucciones nativo. La emulacién seria la imerpretacién de un set de instrucciones diferente al set nativo. Un emulador microprogramado seri entonces un microprograma en una méquina ejecutando los 6 pasos del ciclo de ejecuci6n de instrucciones de otra maquina. Para ser eficiente, e! PC emulado, ta palabra de estado y toda variable de estado del procesador emulado deberd estar en registros accedidos por ef microcédigo de la miquina original. Naturalmente, la velocidad de emulacién dependerd de la arquitectura de la maquina original y de la emulada, Si el set de instrucciones se parece y los tipos de datos basicos tiene igual longitud, la emulacisn sera répida. Se puede concebir que una versién de una méquina emulada A en una méquina B puede ser més rapida que 1a versin original, si B es mis répida que A(ciclos mis ripidos Mp, CM ms réipida y con horizontalidad mayor que A). Lo visto para emulacién es relativamente simple. Requiere el entendimiento de la instruccién a ser emuilada y de Jas habilidades de la microprogramacién de la maquina en Ia cual se implementari. Cuando se incluyen instrucciones con privilegios y E/S en la emulaciGn, se agrega otro nivel de complejidad(se deberdn manejar buffering, interrupciones y excepciones). Ejecucién directa de lenguajes de alto nivel: la traducci6n y posterior ejecucién de un programa escrito en alto nivel puede adoptar dos téenicas. En un proceso de compilado todo el programa fuente es traducido a lenguaje méquina, Tuego el lenguaje miquina a objeto es ejecutado, En un proceso de intérprete, el fuente es ejecutado sin pasar por lat fase de programa objeto. Esto pyede levar a procesos ineficiente, dado que una sentencia debe ser analizada repetidamente cada vez que se encuentra. Luego el intérprete es dividido en dos partes: una de traducci6n que transforma el lenguaje fuente en un lenguaje intermedio y una fase de ejecucién que implementa directamente el cémputo de string intermedio. ‘Veamos que pasa cuando la méquina es microprogramada en el caso de interprete. La rutina que interpreta puede ser escrita en lenguaje méquina(a su vez ejecutada por el microcddigo) 0 puede ser microprogramada. En este Liltimo caso se tiene lo que se conoce como ejecucién directa de lenguajes de alto nivel. EL Lenguaje intermedio, o lenguaje de ejecucién directa, tiene que ser una buena salida para la fase de traduccién y tuna buene entrada para la interpretacidn del microprograma, esto implica una serie de condicionamientos, Datos Lenguaje Fuente Lenguaje Objeto Datos de Salida >} Compilador — -————*] Fjecucién, | ~_-——> Datos Lenguaje Fuente Lenguaje Imtermedio Datos de Salidas Fase de Rui ——— |_ Traduccisn Interpretativas [> Datos Lenguajes Intermedios Rutinas de *) Rutinas Lo, Penguares Ineeemedioe _t Lenguaje }¢———Mlicroprogramadas Maquina Rutinas Interpretativas Datos Lenguajes Intermedios Ejecucién directa via Rutinas —————] Microprogramadas — Rutinas Interpretes a) Proceso de compilado b) Proceso de interpretacién ©) Yd) Procesos de interpretacin (alternatives). Sintonfa de Arquitectura: la microprogramacién dai la opurtunidad al disefiador de modificar y expandir el conjunto de instrucciones cldsicas. Por ejemplo instrucciones que computen polinomios, ete. En esencia habrfa una ganancia en la velocidad de ejecucién y un aumento de espacio en la CM. La sintonfa del set de instrucciones consiste en monitorear el uso de las mismas, modificando el set nativo, evaluando la ganancia 0 pérdida en eficiencia, e iterativamente repitiendo este proceso hasta que alcance una mejora razonable. Idealmente se podria hacer el proceso dindmico con maquinas de writable CM. El monitoreo podria hacerse en tunas pocas microinstrucciones. El andlisis del trace de las instrucciones podria revelar que secuencia de instrucciones pueden ser agrupadas. Un generador de microprograma podré procesar el microcédigo para tales secuencias ¢ insertar las nuevas microrutinas en el mictoprograma, La dltim accién serfa reemplazar las secuencias originales por las nuevas instrucciones, interpretadas por las nuevas microrutinas. Sin llegar a ese punto, se puede pensar en optimizar subprocesos por vez(por ejemplo: para sintonizar una linea orientada a editor de texto para una miiquina dada, podriamos comenzar por monitorear los comandos mas usados y Tas rutinas que son Hamadas ms frecuentemente). Se debe tomar la precauciGn de que en estas instrucciones de ejecucién, altemativamente extensas, se puedan atender interrupciones en otros puntos del ciclo de las mismas ademés del fetch. Clasificacién de los Procesadores Paralelos A los efectos précticos, el rmino procesamiento paralelo queda reservado a dos situaciones posibles: > Multiprocesador, es decir, tener un sistema con varios procesadores. > Un tinico procesador, pero con capacidad de ejecutar varias instrucciones o efectuar varios eémputos simultaneamente, n camino a hacer una clasificacién sabemos que el procesador tiene que hacer: 1) Buisqueda de instrucciones. 2) Buisqueda de operandos. 3) Ejecucién, 4) Transferencia de resultados. 4 Y sabemos que existen dos flujos entre el procesador central y memoria: 1) flujo de instrucciones. 2) Flujo de datos. Basandose en esto, Flynn realizo una clasificacién de acuerdo a la multiplicidad o né de los flujos 1 y 2: > SISD: simple instruccién, simple dato. > SIMD: simple instruccién, multiple dato, > MISD: multiple instruccién, simple dato. > MIMD: maltiple instruccién, mailtiple dato, Simple instruccién, simple dato(SISD): los sistemas de esta categoria son las computadoras usuales de un tinico procesador. Esta arquitectura involucra un tinico procesador, con una tinica ALU, con capacidad de aritmética scalar unicamente. Mailtiple instruccién, simple dato(MISD): no habria conceptualmente maquinas que entraran en esta categoria o clasificacién(que muchas instrucciones trabajen con un dato). El pipeline o procesador vectorial si lo interpretamos, desde una cierta 6ptica podriamos incluirio dentro de esta clasificacign. Simple instrucciGn, miltiple dato(SIMD): una unidad de control(CU) tinica, busca y decodifica instrucciones, Luego la instruccidn es efectuada tanto en la CU 0 es enviada a algunos Elementos de Procesamiiento(PE). Estos PE operan sincronicamente pero sus memorias locales tienen diferentes contenidos. Dependiendo de Ia CU, el poder de procesamiento, y el método de direccionamiento de los PE y las facilidadles de interconexiGn entre los PE, podemos distinguir entre: > Pipeline o Procesadores Vectoriales, > Armay Processors(generalmente acttia como coprocesador) > Procesadores Asociativos. Los procesadores pipeline son dificiles de clasificar. Pueden ser considerados tanto como arquitecturas SIMD, MISD, MIMD. El concepto es poderoso; puede ser aplicado igualmente a algunas unidades pequefias, tales como sumadores de punto flotante 0 a unidades grandes tales como un procesador que comparte completamente una ‘memoria comtin o redes de microcomputadoras, El poder computacional es segmentado en estaciones consecutivas. Los procesos son descompuestos en subprocesos que tienen que pasar a través de cada estaciGn o estado. Retornemos a nuestro problema de clasificacién, Si consideramos que una tnica instruccién, por ejemplo una suma de punto flotante en dos etapas, trata simultaneamente diferentes items de datos, entonces nuestro procesador es de tipo SIMD; si consideramos instrucciones diferentes en etapas consecutivas trabajando sobre el mismo agregado( vector) de datos, entonces serfa MISD, si combinamos las dos interpretaciones anteriores tenemos una arquitectura MIMD. Mailtiple instruceisn, multiple dato(MIMD): implica varios procesadores que operan asincronicamente comunicados entre sf por una memoria comin, Dos aspectos intervienen para distinguir entre distintos disefios de esta categoria: > Acoplamiento o conexionado de unidades de procesadores y médulos de memoria. > Homogeneidad de las unidades de procesamientos. En multiprocesadores MIMD rigidamente acoplado, el niimero de unidades de procesamiento es fijo y operan bajo la supervisidn de un esquema de control estricto, Generalmente el controlador es una unidad de HW. Muchos de los ‘multiprocesadores fuertemente acoplados controtados por HW son heterogencos en el sentido que consisten de tunidades funcionales especializadas supervisadas por una unidad de instruccién, la cual decodifica, busca ‘operandos y despacha ordenes a las unidades funcionales. En los més recientes sistemas de multiprocesamiento homogeneo, no dedicados unicamemte a los computos répidos de sistemas cientificos, vemos conexiones mais flexibles y modulates. 2 Pipeline El pipeline ofrece una manera econ6mica de realizar paralelismo temporal en una computadora digital. Para lograr el pipelining se deberiin subdividir los procesos de entrada en una secuencia de subprocesos cada una de las cuales puede ser ejecutada por una etapa de HW especializado que opera concurrentemente con otras etapas en el pipeline. Sucesivas tareas se ponen en el pipe y son ejecutadas de forma sobreladapa a nivel de los subprocesos. El procesamiento pipeline mejora de gran forma el throughput del sistema en una computadora digital Principios de pipeline lineal(escalar): idealmente las distintas etapas del pipeline lineal tendrfan igual velocidad de procesamiento, De otra manera, la etapa més lenta actiia como cuello de botella del pipe entero, Este cuello de botella, mas la congestidn causada por buffering impropio resultarfa en muchas etapas ociosas esperando por subprocesos. La subdivisién de los procesos de entrada en una secuencia apropiada de subprocesos se convierte en un factor crucial en la determinacién de la perfomance del pipeline. La relacidn de precedencia de un conjunto de subprocesos (T,T>,....T} para una dada tarea T, implica que alguna {area T, no podra comenzar hasta que alguna tarea anterior T,(i, Esto implica que mientras mayor sea el niimero de tareas fluyendo a través del pipeline, mayor ser la eficiencia. Throughput: es el nimero de resultados(tareas) que se pueden completar mediante un pipeline por unidad de tiempo. Refleja el poder computacional del pipeline. En terminos de la eficiencia n y el periodo de reloj t de un Pipeline lineal, definimos el throughput como sigue: w a =a Kane) t donde n es el nimero total de tareas que estén siendo procesadas durante el perfodo de observacién k.++(n-1) x. En el caso ideal w = I/t =f cuando ->1. Esto significa que el méximo throughput de un pipeline lineal es igual a su frecuencia, la cual corresponde a un resultado de salida por perfodo de reloj. Clasificacién de Procesadores Pipeline. De acuerdo a su uso 0 niveles de procesamiento se tiene el siguiente esquema de clasificacién: > Pipelining Ariumético: las unidades aritméticas l6gicas(ALUs) pueden ser segmentadas por operaciones pipeline en varios formatos de datos(VER EJEMPLOS DE MULTIPLICADORES). > Pipelining a Nivel Instrucci6n: la ejecucién de un stream de instrucciones puede implementarse mediante pipeline sobrelapando la ejecucién de la instruccién corriente, con la busqueda, decodificacién y busqueda de ‘operandos de instrucciones subsecuentes. Esta técnica es tambien llamada lookahead de instrucciones. Casi todas las computadoras actuales estan equipadas con pipelines para ejecucién de instrucciones. > Pipelining processor: se refiere al procesamiento pipeline del mismo stream de datos mediante una cascada de procesadores, cada uno de los cuales tiene una tarea especffica. El stream de datos pasa el primer procesador con los resultados almacenados en un bloque de memoria, el cual es tambien accesible por el segundo procesador. El segundo procesador pasa los resultados refinados al tervero, y asf siguiendo. El pipeline de multiples procesadores no esté todavia muy aceptado como una préctica comin, De acuerdo a su configuracién_y estrategias de control se tiene el siguiente esquema de clasificaci6n: > Pipelines Unifuuncién Vs. Multifuncién: una unidad pipeline con una funcin fija y dedicada, tal como un sumador en punto flotante, se denomina unifuncional, Un pipe multifunciGa harfa diferentes funciones en diferentes tiempos 0 en el mismo tiempo, mediante la interconexiGn de diferentes subconjuntos de ctapas en el pipeline. > Pipelines Estaticos Vs. Dindmicos: un pipeline estitico asumiria solo una configuracién funcional a la vez. Pipelines estiticos pueden ser o bien unifuncionales o multifuncionales. El pipelining es posible de hacer en pipes estiticos solo si instrucciones de! mismo tipo son ejecutadas continuamente. La funciGn hecha por un pipeline estético no cambiarfa muy frecuentemente, De otra manera su perfomance seria muy baja. Un procesador pipeline dinémico permite que algunas configuraciones funcionales existan simultaneamente, En este sentido el pipeline dindmico deberd ser multifuncional. Por otro lado, un pipe unifuncional deberd ser estitico, La configuracién dindmica necesita control y mecanismos de secuenciamiento mucho mis elaborado que los pipelines estiticos. La mayorfa de las computadoras existentes estin equipadas con pipes estaticos, ya sean unifuncionales o multifuncionales. > Pipelines Escalares Vs Vectoriales: dependiendo de las instrucciones o tipos de datos, procesadores pipelines pueden ser tambien clasificados como pipelines escalares 0 vectoriales. Un pipeline escalar procesa una secuencia de operandos escalares bajo el control de un ciclo DO. Las instrucciones en un pequetio ciclo DO son 45 ‘a menudo prebuscadas(prefetch) en un buffer de instruccién. Los operandos escalares requeridos para instrucciones escalares repetidas son movidas a una cache de datos en orden para continuamente suministrar el pipeline con operandos, Pipelines vectoriales son especialmente diseftados para manejar instrucciones vectoriales. sobre operandos vectoriales. Computadoras que tienen instrucciones vectoriales son a menudo llamados procesadores vectoriales. El disefto de un pipeline vectorial es una expansién del pipeline escalar. El manejo de operandos vectoriales en pipelines vectoriales esti bajo controles de firmware o HW(en lugar de control por SW como en el pipeline escalar), Pipelines generales y Tablas de Reservaci6n. En los pipelines lineales, las entradas y las salidas son totalmente independientes. En algunas computaciones, como recurrencias lineales, existen feedback connections(las entradas podrian depender de salidas previas). Los pipelines con feedback tendrian un flujo de dato no-lineal. Un uso inadecuado de entradas feedforward o feedback destruirian las ventajas inherentes del pipeline. Por otro lado el secuenciamiento con flujo de dato nolineal podria ‘mejorar la eficiencia del pipeline. En la practica, muchos de los procesadores pipeline aritmeticos permiten conecciones no-lineales como un mecanismo para implementar recursidn y funciones rmiltiples. Caracterizamos las estructuras de inferconexién y los patrones de flujo de dato en pipelines generales con feedback 0 feedforward connections, adems de la conexidn en cascada de un pipeline lineal. Usamos un grifico de dos dimensiones conocido como tabla de reservacién para mostrar sucesivas etapas del pipeline son utilizadas en la evaluacién de una funcidn en sucesivos ciclos del pipeline. Las filas corresponden a las etapas del pipeline y las columnas a las unidades de tiempo de reloj. El ntimero total de unidades de reloj en la tabla es Hamado tiempo de evaluacién para la funcién dada. Una tabla de reservaciGn representa el flujo de dato a través del pipeline para una evaluacién completa de una dada funcién Un feedforward connection conecta una etapa S, a una etapa S} tal que j 2 H+2 y una feedback connection conecta una etapa S,a una etapa S, tal que j RAW(read after write): j trata de leer un otigen antes de que i lo escriba, entonces j toma incorrectamente el valor viejo. > WAR(write after read): j trata de escribir su destino antes que sea leido por i, entonces i incorrectamente toma tun nuevo valor. > WaAWowrite after write): j trata de escribir un operando antes de que sea escrito por i, La escritura se hace en ‘orden equivocado, dejendo el valor escrito por i en lugar del valor escrito por j. No todas las colisiones de datos pueden ser manejadas sin que se afecte la perfomance. Consideremos la siguiente secuencia de instrucciones: LW RI, 32R6) ADD. R4,RI,R7 SUB RS,RI,R8 AND R6,R1,R7 Este caso es diferente a los anteriores. La instruccién LW no tiene el dato hasta el fin del ciclo MEM, mientras que la instruccién ADD necesita tener el dato al comienzo de dicho ciclo de reloj. Esto es, la colisién de datos producida por usar el resultado de una instruccién de carga no puede ser completamente eliminado mediante simple HW. La instrucci6n de carga tiene un delay o latencia que no puede ser climinada mediante forwarding solamente para hacer esto se requeriria que el tiempo de acceso a datos sea 0. La solucién mas comiin es agregar HW llamado pipeline interlock. En general, pipeline interlock detecta una colision y detiene(stall) el pipeline hasta que se libra la Colisién. En este caso, el interlock detiene el comienzo del pipeline con la instruccién que quiere usar el dato hasta que se produzea el dato que se quiere usar. Este ciclo de retardo, llamado pipeline stall, permite que la carga del dato arribe de memoria; luego si se puede adelantar(forwarded) mediante HW. El CPT para la instruccién detenida se incrementa por la longitud del stall. El proceso donde una instruceiGn se mueve desde la etapa de decodificacién(ID) a la ctapa de ejecucién(EX) de este pipeline se conoce como despacho de instruccién\ instruction issue); y 1a instruccién que hizo este paso se dice despachadatissued). Si la colisi6n de dato existe, la instruccién es retardada(stalled) antes de que sea despachada. En lugar de hacer que el pipeline se detenga otra altermativa serfa que el compilador tratara de planificar el pipeline para evitar estos stalls, reacomodando la secuencia de cddigo para eliminar las colisiones. Por ejemplo, el compilador trataria de evitar generar e6digo con una carga seguida por un uso inmediato del registro destino de carga. Esta técnica se llama planificacién de pipeline o planificacién de instrucciones. Colisiones de Control: pueden causar una mayor perdida de perfomance que Tas colisiones de datos. Cuando un branch es ejecutado, este podria o no cambiar el PC a otra direccién distinta de PC+4(instruccién siguiente al branch). Recordemos que siel branch cambia el PC a su direcciGn destino, se dice que es un branch tomado: si no 4 8 asf se dice que es un branch no tomado. Si la instruccién i es un branch tomado, entonces el PC normalmente no cambia hasta el final de la fase MEM, despues de completar el cilculo de direcciones y comparaciones. Esto significa que debera hacerse stall durante 3 ciclos de reloj, al final de los cuales el nuevo PC es conocido y la instruccién apropiada puede ser buscada, Este efecto es llamado colisién de control. A continuacién se muestra un stall de tres ciclos para coli Instrucci6a Branch IF ID EX MEM WB Instruccién i+ stall stall stall IF ID EX MEM WB Instrucci6n i+2 stall stall stall IF = ID EX MEM WB Instrucci6n i+3 stall stall stall IF ID EX MEM WB Instruccién i+4 stall stall stall IF = ID EX MEM Instrucci6n i+5 stall stall stall IF ID EX Instruccién i+6 stall stall stall IF 1D Pero este pipeline no es posible porque no conocemos que la instruccién es un branch hasta despues del fetch de la prcixima instruccién. La solucién es rehacer el fetch una ver que el destino es conocido. Instruccién Branch IF ID EX MEM WB Instruccién i+ IF stall stall IF ID EX MEM WB Instruccién i+2 stall stall stall IF ID EX MEM WB Instruccién i+3 stall stall stall IF 1D EX = MEM WB InstrucciGn i+4 stall stall stall IF ID EX MEM Instrucci6n i+5 stall stall stall IF ID EX Instruccién i+6 stall stall stall IF ID Tres ciclos de reloj perdidos por cada branch es una perdida significante. Con un 30% de frecuencia de branch y un CPT ideal de 1, la miquina con branch stalls logra solo la mitad de la aceleracién ideal del pipeline. Esto es, reducir el branch penalty es una cuestidn critica. El nimero de ciclos de reloj en un branch stall puede ser reducido en dos pasos’ 1. Buscar siel branch es tomado 0 no lo antes posible en el pipeline. 2. Computar el PC tomado(direccién destino del branch) lo antes posible. ara optimizar el comportamiento del branch, ambos pasos deben ser hechos- ya que no ayuda conocer el destino del branch sin conocer si la proxima instrucci6n a ejecutar es el destino o PC+4, Evaluar al condicién del branch puede realizarse al final del ciclo ID usando légica especial para este test. Para tomar ventaja de una decisién previa sobre si el branch es tomado, ambos PCs(tomado y no tomado) deberdn ser computados previamente. Computar la direecién detsino del branch requiere un sumador separado, el cual puede sumar durante la fase ID. De esta forma habra solamente un stall de un ciclo de reloj, En algunas méquinas las colisiones de control son atin més costosas en ciclos de reloj que en nuestro ejemplo, puesto que el tiempo en evaluar la condicidn del branch y computar el destino puede ser mayor. Por ejemplo, en ‘méquinas con fases de decodificaciGn bisqueda de registros separada probablemente se tendré un branch delay- la longitud de la colisién de control- que es al menos un ciclo de reloj més largo. Reducir Branch Penalties: existen alternativas estéticas(SW) y dindmicas(HW). Entre las estiticas estan: stall, predecir tomado, predeci no tomado y branch retardado. En los esquemas estiticos las predicciones son adivinadas en tiempo de compilacién. Hay esquemas mis ambiciosos que usan HW para predecir branches dinémicamente. El esquema mas simple es congelar el pipeline, guardando cualquier instruccién despues del branch hasta que se conozca el destino del branch. Es la soluci6n més simple y fue la usada en los ejemplos anteriores(stalls) ‘Una mejor solucién, aunque un poco ms complicada es pronosticar el branch como no tomado, simplemente permitiendo al HW que continue como si el branch no fuera ejecutado. Se deberd tener cuidado de no cambiar el estado de la méquina hasta que el branch es definitivamente conocido. La complejidad que surge de esto podria Mevarnos a reconsiderar la solucién mas simple. 35 Un esquema alternativo es pronosticar el branch como tomado. Tan pronto como el branch es decodificado y la direcciGn destino es computada, asumimos el branch como tomado y comenzamos buscando y ejecutando en el destino, Como en el pipeline que hemos estado viendo no conocemos la direccidn destino mucho antes que el branch resultado, no hay ventaja en este approach. Sin embargo, en algunas méquinas- especialmente aquellas con cédigo de condicién 0 condiciones de branch mas poderosas- que el destino del branch sea conocido antes que el branch resultado, puede ser muy ttl, Branch No-Tomado IF 1D EX MEM WB Instruccién i+ IF 1D EX MEM WB Instrucci6n i+2 IF ID EX MEM WB Instrucci6n i+3 IF ID EX MEM WB Instruccién i+4 IF ID EX MEM WB Branch Tomado iF ID EX MEM WB Instruccién i+1 IE IF WD EX MEM WB Instruccién i+2 stall IF ID EX MEM WB Instruccién i+3 stall IF ID EX MEM WB Instruccién i+4 stall IF ID EX MEM WB Algunas maquinas usan otras técnicas Hamadas branchs retardados, los cuales han sido usados en muchas unidades de control microprogramadas. En un branch retardado, el ciclo de ejecucién con un branch delay de Longitud n es: Branch Instruction Secuential Successor, Secuential Successor: Secuential Successor, Branch Target if taken Los sucesores secuenciales estan en los branches delay slots, Las instrucciones sucesoras deben ser vilidas y ttiles. Tres formas en las que el branch delay puede ser planificado son las siguientes: a) From Before ADD RI, R2, R3 IF R2=0 then Delay slot Se hace If R2=0 then ADD RI,R2, R3 «_—__ a) From Target 56 SUB R4,R5,R6. 4} ADD R1, R2, R3 If R1=0 then Delay slot Se hace ADD RI, R2, R3 If R1=0 then ‘SUB R4, RS, R6 b) From fall through ADD RI, R2, R3 If R1=0 then Delay slot SUB R4, RS, R6 «_—_ Se hace ADD RI, R2, R3 IfR1=0 then ‘SUB R4, RS, R6 «——__! La parte de arriba de los cuadros muestra el esdigo antes de planificar, y la parte de abajo muestra el cédigo planificado. En a) el delay slot esta planificado con una instruccién independiente desde antes(from before) del branch, Esta es la mejor eleccién, Las estrategias b) y c) son usadas cuando a) no es posible. En las secuencias de c6digo para b) y c) el uso de RI en la condicidn del branch impide que la instruccién ADD(cuyo destino es R1) sea movida despues del branch. En b) el branch-delay slot esté planificado desde el destino(from target); usual mente La instruccién destino necesitard ser copiada porque esta puede ser alcanzada por otro camino. La estrategia b) se prefiere cuando el branch es tomado con alta probabilidad, tal como un loop-branch. Finalmente el branch podria ser planificado desde el fall through, como en c). 37 Estrategia de Planificacién Requerimientos (Cuando mejora ta perfomance? a) From before branch branch no deberd depender de Siempre strucciones reordenadas. b)From target Estard OK para ejecutar instrucciones Cuando el branch es tomado. reondenadas si el branch es no-tomado. Podria alargar el programa si se Paxiria necesitar duplicar instruciones. duplican instrucciones. ©) From Fall Through Estardi OK para ejecutar instrucciones Cuando el branch es no tomado. siel branch es tomado, Las limitaciones primarias de la planificacién del branch retardado surgen de las restricciones sobre las instrucciones que son planificadas dentro del delay-slot y de muestra capacidad para pronosticar en tiempo de compilaci6n si un branch es tomado 0 no. Existe un costo de HW adicional para los branches retardados. Se necesitan multiples PCs para restaurar correctamente el estado cuando ocurre una interrupcién. Por ejemplo si ocurre una interrupcién cuando se completa tuna instruccién branch tomado, pero antes que se completen todas las instrucciones en el delay slot y el branch, target. En este caso, el PC's de los delay slots y el PC del branch target deberdn salvarse, porgue ellos no son secuenciales. Reduccién de branch penalty con Dynamic Hardware Prediction, Ahora veremos como usar HW para predecir dinamicamente el resultado de un branch- la prediccién cambiard si el branch cambia su comportamiento mientras el programa esté corriendo. El esquema mas simple es el branch-prediction buffer. Un branch-prediction buffer es una pequefia memoria indexada por la parte més baja de la direccién de la instruccidn branch, La memoria contiene un bit que indica si el branch fue recientemente tomado 0 no, Esta es la clase mas simple de buffer; no tiene tags y solo es titi para reducir el branch delay cuando este es mayor que el tiempo que lleva computar los posibles PCs destino. No sabemos, en efecto, si la predicci6n es correcta. Si se asume como correcta, el fetching comienza en la direccién predicha, Si la prediccidn del branch fue equivocada, se invierte el hit de prediccisn. Este esquema de prediccién de un bit tiene un problema: Si un branch es casi siempre tomado, entonces cuando este no sea tomado, se predice incorrectamente dos veces en lugar de una(ejemplo del loop). Para remediar esto se usan esquemas de prediccién de dos bits. EMMIIM Jerarquia de Memoria Principio de Localidad: para todo programa una porcidn de su espacio direccionado en cualquier instante de tiempo, tiene dos dimensiones: > Localidad Temporal(localidad en tiempo): si un item es referenciado, este tiende a ser referenciado nuevamente en el futuro inmediato. Por ejemplo bucles, variables temporales. > Localidad Espacial(localidad en espacio): si un item es referenciado, items cercanos tienden a ser referenciados en un futuro inmediato. Por ejemplo arreglos. 38 Una jerarqufa de memoria es una reaccién natural a localidad y tecnologéa. El principio de localidad y las directivas que un HW pequeito es mas rapido produce el concepto de una jerarquia basada en diferentes velocidades y tamaiios. Como la memoria mas lenta es barata, una jerarquia de memoria esté organizada en algunos niveles- cada tuna més pequefia, mas répida y mis costosa que la del nivel inferior. Se puede utilizar el principio de localidad para mejorar la perfomance. La estrategia seré mapear direcciones de ‘una memoria con mayor capacidad a una memoria pequefia pero més répida. ‘omponentes de la Jerarquia de Memot Objetivo > Tratar de emparejar los tiempos de acceso a memoria con los tiempos del PC. > Obtener una perfomance adecuads a un costo razonable, 0 sea aleanzar la perfomance del nivel més bajo.a un costo dado basicamente por el nivel més alto, El criterio de velocidad es el siguiente: obtener una relacién entre la frecuencia de accesos de las unidades de informacién con su lugar en la jerarqufa. El costo puede ser descompuesto en dos factores: un factor estructural, que limita el tamafo de los componentes més rapidos y por lo tanto ms costosos; y un factor dindmico impuesto por el manejo de transferencia entre niveles, las que consumen tiempo y requieren el uso de recursos apartes de la ‘memoria(por ejemplo canales, sistemas operativos). Desde un punto de vista estructural una jerarquia de memoria consiste de Lniveles. A cada nivel i, la memoria M, tiene componentes caracterizados por tamafio 0 capacidad, tiempo promedio de acceso y costo por bit. Un nivel puede contener varios médulos no necesariamente identicos, pero relacionados en funcién de costo, capacidad, velocidad, Las conexiones entre los médulos de distintos niveles estan caracterizados por la velocidad de transferencia 0 ancho de banda y por la cantidad fisica de informacisn transferida, PC t Ly (cache) ¢ ——3l L, (memoria principal) _|€—— Ls (memoria secundaria) Ly(arehivos On-Liney Je t Ly (archivos Off-Line) Principios Generales de Jerarquia de Memoria: una jerarquia de memoria generalmente consiste de muchos niveles, pero se maneja entre dos niveles adyacentes a la vez.. El upper level -el més cereano al procesador- es més pequefio y ripido que el lower fevel. La unidad mfnima de informacién que puede estar o bien presente o no presente en la jerarquia de dos niveles es llamada bloque. El tamaiio del bloque puede ser fijo 0 variable. Si es fijo, el tamaiio de Ja memoria es un miiltiplo del tamaiio de ese bloque. 59 Procesador Upper Level Joques Lower Level Los exitos 0 fracasos de un acceso al upper level es designado como un hit o un miss: Un hit es un acceso a ‘memoria encontrado en el upper level, mientras que un miss significa que no se ha encontrado en ese nivel. Hit rate es el porcentaje de accesos a memoria que se resuelven con éxito en el upper level. Miss rate es el porcentaje de ‘accesos a memoria no encontrados en el upper level( 0 — hit rate). ‘Como la perfomance es la mayor razén para tener una jerarquia de memoria, la velocidad de los hits y misses son importante, Hit time es el tiempo para acceder al upper level de la jerarquia de memoria, se incluye el tiempo en determinar si el acceso es un hit o un miss. Miss penalty es el tiempo para reemplazar un bloque en el upper level por el correspondiente bloque del lower level, mis el tiempo en entregar este bloque al dispositivo que lo requiere(normalmente CPU). El miss penalty esti dividido en dos componentes: access time- el tiempo en acceder a la primera palabra de un bloque en un miss; y transfer time- el tiempo adicional para transferir las palabras restantes en el bloque. El tiempo de acceso esté relacionado a la latencia de la memoria de lower level, mientras que el transfer time est relacionado al ancho de banda entre las memorias lower level y upper level. La direccién de memoria estd dividida en partes que acceden cada parte de la jerarquia. La block frame address es Ja parte de mayor orden de la direccidn que identifica un bloque en este nivel de la jerarquia. EI block-offset address es la parte de orden més bajo de la direceién e identifica un item dentro del bloque. El tamafio del block- offset address es logs(tamaiio de bloque); el tamaito del block-frame address es el tamaiio de la direcciGn total en este nivel menos el tamaito del block-offset address. Evaluaci6a de Perfomance de una Jerargufa de Memoria ‘Una medida para evaluar la perfomance de una jerarquia de memoria es el tiempo promedio para acceder a ‘memori Tiempo Promedio de Acceso a Memor anosegundos) it time + Miss rate * Miss penalty (es expresado en ciclos 0 en La relaci6n de el tamafio de un bloque para miss penalty y miss rate se muestra a continuacién: Miss Tansfer Miss Penalty time rate Access time ‘Tamafio de bloque Tamaiio de bloque Esta representacién asume que el tamafio de la memoria de upper level no cambia. La porcién de tiempo de acceso del miss penalty no es afectada por el tamaiio de bloque, pero el tiempo de tranferencia se incrementa con el tamaiio del bloque. Si el tiempo de acceso es grande, inicialmente existira un pequeiio miss penalty adicional relativo al tiempo de acceso cuando el tamafo de bloque se increment. Sin embargo, aumentar el tamato de bloque significa que pocos bloques podrn estar en la memoria de upper level. Incrementar el tamaiio de bloque baja el miss rate hasta que, como gran parte del bloque no es usado se desplaza la informacién til en el upper level, y los miss rate comienzan a aumentar, Si hago bloques muy grandes comprometo la localidad temporal. Por ejemplo si la cache es de un blogue, transferir un bloque desde memoria principal obliga a sacar el bloque que actualmente esti en cache. La meta de la jerarqufa de memoria es reducir el tiempo de ejecucién, no los misses, Por lo tanto los diseiiadores de computadoras prefieren un tamaiio de bloque cuyo tiempo de acceso promedio sea bajo en lugar de un miss rate que sea bajo, Tiempo de Acceso promedio “Tamaiio de blogue Procesadotes disefiados sin jerarquia de memoria son simples porque los accesos a memoria siempre toman la ‘misma cantidad de tiempo. Los misses en una jerarquia de memoria significan que el CPU debers ser capaz de ‘manejar tiempos variables de accesso a memoria, Si el miss penalty esté en el orden de los 10 ciclos de reloj, el procesador espera que la transferencia de memoria se complete(por HW). Por otro lado, si el miss penalty necesita cientos de ciclos de reloj del procesador es demasiado costoso dejar al procesador acioso; en este caso el CPU es interrumpido, se produce un cambio de contexto y es usado para otto proceso durante el manejo del miss(por SW, pero la dteccidn es por HW), El procesador deberd tener un mecanismo para determinar si la informacién esté o no en el nivel més alto de la jerarquia de memoria. Este chequeo ocurre en cada acceso a memoria y afecta el hit time; para tener una performance aceptable este chequeo debe ser implementado en HW. Una cuestidn final de la jerarquéa de memoria 5 que la computadora deberd tener un mecanismo para transferir bloques entre el upper level y lower level. Si la transferencia de bloque toma decenas de ciclos de reloj, se controla por HW; si toma cientos de ciclos de reloj, puede ser controtado por SW. ot 4 cuestiones para la clasificacién de jerarquias de memoria: Q2: Como se encuentra un bloque si est en el upper level? (idemificacién de bloque) Q3: Cual bloque se recemplaza cuando ocurre un miss? (reemplazo de bloque) Q4: Que sucede en una escritura? (codifica la escritura) Caches Cache es el nombre elegido para representar el nivel de la jerarquia de memoria entre CPU y memoria principal. Su tamaiio generalmente esta entre 1-256 Kb. QI: Donde puede ser puesto un bloque en ef upper level? Las restricciones sobre donde puede ubicarse un bloque crea tres categorias de organizaciGn de cache: > Mapeo Directo: Si cada bloque de memoria principal aparece en un nico lugar de la cache.E! mapeo es tusualmente (block-frame address) modulo (nuimero de bloques en la cache). > Mapeo Full Asociativo: Si un bloque puede ser puesto en cualquier lugar de la cache. si un bloque puede ser puesto en un conjuto restricto de lugares en la cache. Un conjunto es un grupo de 2 0 mas bloques en fa cache. Un bloque primero es mapeado en un conjunto, y entonces el Bloque puede ser puesto en cualquier lugar dentro del conjunto. El conjunto es usualmente elegido por el bit de seleccién; esto es (block frame address) modulo (nuimero de conjuntos en la cache). Si hay n bbloques en un conjunto, la ubicacién en la cache se denomina n-way set asociativo, Mapeo directo puede ser visto como one-way set asociativo y mapeo full asociativo con m bloques puede ser Hamado m-way asociativo set asociativo, 02: Como se encuentra un bloque si estd en la cache? Las caches incluyen un tag de direccisn sobre cada bloque que da la block-frame address. El tag de cada bloque de cache que podria contener la informacién deseada es chequeuda para ver si hace match con la block-frame address de la CPU. Full asociativo Mapeo Directo Set Asociativo Bloque O 1 2 3 4 ( 34 5 6 7 o1234 Data SetO Set! Set2 Set3 Tag 1 1 1 2 2 TIttitt t tT En Ia ubicacién full asociativa el bloque para ta block-frame address 12 puede aparecer en cualquiera de los 8 bbloques, esto es, se deben examinar & tags. En ubicacién mapeo directo existe solo un blogue de cache donde el bbloque de memoria 12 puede ser encontrado. En ubicacién set asociativa, con 4 conjuntos, el bloque de memoria 12 estard en el set 0(12 mod 4), esto es, se chequean los tags de los bloques de cache 0 y 1. Para obtener nayor velocidad en accesos a cache Ia busqueda deberd hacerse en paralelo para mapeos full asociativo y set asociativo, 2 Deberd haber una forma de saber si un bloque de cache no tiene infornacién valida. El procedimiento mas comin es agregar un bit de vilido al tag para decir si o no esta entrada contiene una direccién vilida. Si el bit no esta seteado, no puede hacerse match sobre la direcciGn. EL tag requerido para cada bloque tiene un costo. Una ventaja de incrementar los tamaiios de bloque es que el overhead producido por el tag en cada entrada de cache se convierte en una pequefia fracci6n del costo total dela cache Una direccién se divide en tres campos para encontrar datos en una cache set asociativo: el campo block offset usado para seleccionar el dato deseado del bloque, el campo fndice usado para seleccionar el set y el campo tag uusado para la comparacién. Mientras que la comparacién podria ser hecha sobre mas de una direccién que el tag, no existe la necesidad de: > Chequear el indice serfa redundante, puesto que fue usado para seleccionar el conjunto a ser chequeado( por ejemplo una direccién almacenada en el set 0, deberd tener (en el campo indice 0 no podria estar almacenado en el conjunto 0). > El offset es innecesario en la comparacién porque todos los offsets de bloque hacen match y el bloque entero esti presente ono. Si el tamafo total se mantiene igual, el incremento de asociatividad incrementa el mimero de bloques por set, decrementando el tamaio del indice e incrementando el tamaiio del tag. 03: Que bloque se reeemplaza cuando ocurre un miss? Si la eleccidn fuera entre un bloque que tiene datos validos y uno que no, es facil seleccionar que bloque reemplazar. Veremos que decisién se toma entre bloques que contienen datos vélidos. Un beneficio de mapeo directo es que las decisiones de HW se simplifican. En efecto, es tan simple porque no hay eleccidn: solo un bloque se chequea por un hit, y solo ese bloque puede ser reemplazado. Con full asociativo 0 set asociativo, hay algunos bloques para elegir cuando ocurre un miss. Hay dos estrategias primarias empleadas para seleccionar que blogue reemplazar: Random- Los bloques candidatos son seleccionados aleatoriamente. > Usado menos recientemente(LRU): para reducir la posibilidad de desechar informacién que se necesitara en un futuro muy préximo, los accesos a bloque son registrados. El bloque que se reemplaza es el que no se ha usado por mis tiempo. Esto hace uso del concepto de localidad temporal Una virtud del random es que es simple de construir en HW. Cuando el mimero de bloques que se deben mantener aumenta, LRU se hace mas costoso y es frecuentemente una aproximacién, La politica de reemplazo juega un ‘mayor papel en caches pequefias que en caches grandes donde hay nis elecciones sobre cudl reemplazar. Otra politica, FIFO, simplemente descarta el bloque que fue usado N accesos antes, independientemente de cuando se referencia. {COMPLETAR} 04: Que sucede en una escritura? Para una escritura, el procesador especifica el tamaio de la escritura, usualmente entre I y 8 bytes: solo esa porcién de un bloque puede ser cambiada. En general esto significa una secuencia de operaciones lectura-modificacién- escritura sobre el bloque: lectura del bloque original, modificar una porcién, y escribir el nuevo valor del bloque. ‘Ademés, la modificacién de un bloque no puede comenzar hasta que el tag es chequeado para verificar si este es un hit. Como el chequeo de tag no pueden hacerse en paralelo, entonces, escribir normalmente toma més que la lectura(en operacién de lectura el bloque puede ser leido al mismo tiempo que el tag es laido y comparado). Hay dos opciones basicas cuando escribimos cache: > Write through (o store through). La informacién se escribe en el bloque en cache y en el bloque en memoria de lower-level > Write back. La informacién solo se escribe en el bloque en cache. El blogue ¢: memoria principal solo cuando este es reemplazado. che modil ido se escribe en Bloques cache write-back son llamados clean o dirty, dependiendo de si la informacién en la cache difiere de la que estd en memoria de lower-level. Para reducir la frecuencia de reemplazos de bloques writings back, se usa una caracteristica Hamada dirty bit. Este bit de estado indica si el bloque fue modificado o no mientras estaba en cache Si no lo fue, el bloque noes escrito, porque el lower-level tiene la misma informacisn que en la cache. 63 Ambos métodos tienen sus ventajas. Con write back, las escrituras ocurren a la velocidad de la memoria cache, y iiltiples escrituras dentro de un bloque requieren solo una escritura en la memoria de lower-level. Como cada escritura no vaa memoria, write back usa menos ancho de banda de memoria, haciendo que el write back sea atractivo para multiprocesadores. Con write through misses de lectura no implica escribir en lower-level; adems es ms facil de implementar que el write back. Write through tambien tiene la ventaja de que en memoria principal se tienen las copias mas actuales de los datos. Esto es importante en multiprocesadores y para /O. ‘Cuando el CPU debe esperar para completar escrituras durante write throughs, se dice que el CPU tiene un write stall. Una optimizacién comin para reducir los write stalls es un butfer de escritura, el cual permite que el procesador continue mientras que la memoria se esti actualizando, Hay dos opciones cuando hay un miss de escritura: > Write allocate. El blogue es cargado, seguido por las acciones de write-hit anteriores. Esto es similar a un miss de lectura, > No write allocate. El bloque es modificado en el lower-level y no se carga en cache. Los tres origenes de los miss de cache son: 1. Compulsivo: el primer acceso a un bloque no esti en cache, por lo tanto el Bloque debera ser Hevado a cache 2. Capacidad: si \a cache no puede contener todos los bloques necesarios durante Ia ejecuciGn de un programs, ocurririn misses de capacidad debido a los bloques que son descartados y luego recuperados. 3. Conflictivos: si la estrategia de ubicacién de bloque es set-asociativo o mapeo directo, ocurrirdn misses de conflicto porque un bloque puede ser descartado y luego recuperado si demasiados bloques mapean a ese conjunto. Tambien son lamados misses de colisién. Habiendo identificado los tres causantes de misses de cache, que puede hacer un disefiador de computadoras acerca de ellos? Conceptualmente, los conflictivos son los mas simples: organizacién full asociativo evita todos los misses de conllictivos. Asociatividad es costosa en HW, sin embargo, podria bajar el tiempo de acceso. Hay poco que hacer respecto a la capacidad excepto comprar mis chips de memoria. Si la memoria de upper-level es més pequefia que Ja que se necesita para un programa, y un porcentaje significativo del tiempo se gasta moviendo datos entre los dos niveles de la jerargufa, la jerarquia de memoria se denomina thrash. Como se requieren muchos reemplazos, thrashing significa que la miiquina corre cerca de Ia velocidad de la memoria de lower-level. o quizas se hace mis lenta debido al overhead producido por el miss. Haciendo los bloques mas grandes se reduce el ntimero de misses compulsivos, pero se incrementan los misses de conflict. Un miss podria moverse de una categorfa a otra si cambian algunos pardmetros. Por ejemplo, incrementar el tamaiio de cache reduce los misses de conflicto y los de capacidad. ElecciGn para el tamafio de bloques en cache: bloques grandes reducen los misses compulsivos, como sugiere el principio de localidad espacial. Al mismo tiempo, bloques grandes tambien reducen el nimero de bloques en la cache, incrementando los misses de contlicto. thes son a veces dividi ‘in y caches de solo-datos. Las caches que pueden contener ambos, datos ¢ instrucciones se Haman caches unificadas. La CPU conoce si se trata de una direccién de instruccién 0 direccién de datos, por lo tanto puede haher ports separados para ambos, de ese modo doblando el ancho de banda entre cache y CPU. ‘Caches separadas tambien oftecen la oportunidad de optimizar cada cache en forma separada: diferentes capacidades, tamatios de bloque, y asociatividades pueden Ievar a una mejor perfomance. Esta divisi6n afecta el costo y perfomance ms alld de lo que es indicado por los cambios en las miss rates. Limitaremos nuestra discusién ‘4 mostrar como los miss rates para instrucciones difieren de los miss rates para datos. Separar instrucciones y datos remueve los misses debido a los contlictos entre bloques de instrucciones y bloques de datos, pero la divisin tambien fija el espacio de cache dedicado a cada tipo. ‘Memoria Principal ‘Memorias de acceso aleatorio(RAM): las RAM pueden ser descriptas como que consisten de un mtimero de I- tunidades idénticas(en general palabras), cada una accesible a través de una diteccién cableada, y cada una con la ‘misma direccidn de acceso independiente de la locacién de las I-unidades y de los accesos previos. Escribiro leer en una RAM requiere: > Un medio de almacenamiento organizado en tal forma que tas T-unit(palabra) pueden ser leidas como entidades. > Un registro de direccidn (MAR-Memory Acces Register) para mantener la direccién de la palabra que est siendo accedida. > Un registro de datos (MDR-Memory Data Register) 0 buffer para mantener Ia informacién que esta siendo leida o escrita > Sensores para la lectura, > Transducer (drivers) para escribir. MDR jo Medio de Almacenamiento Lecura__y umAOugnan w RMACOUZ>Aa Mecanismo de Die MAR R v ‘Representacién esquemiética de una RAM. El medio de almacenamiento es un arreglo de bits, con los bits subsecuentes agrupados en palabras. Ya que la unidad atGmica es el bit, el medio de almacenamiento fisico debe cumplir con las siguientes propiedades: } Sensar uno de dos estados estables que serdn 0 y 1 respectivamente. Este sensado se usari para la lectura, > Cambiar desde un estado a otro siempre que se necesite para propositos de escritura, Este sensado y switching sera realizado a través de la aplicacign de una fuente de energia externa, Sin tener en cuenta el medio de almacenamiento, podemos ver que Ia lectura implica la seleccién de una palabra y el sensado de cada bit de la palabra, y que la escritura implica la seleccidn de la palabra y una discriminacién posterior sobre los bits a ser cambiados de un estado a otro. Asf cualquier celda de almacenamiento sera capaz. de recibir entradas desde un selector de palabras, un selector de bits y un sensor. Sin embargo, estos dos pueden ser compartidos, ya que son usados en las operaciones mutuamente excluyentes de lectura y eseritura, Mecanismo de direccionamiento: la direccién de la palabra a ser leida o escrita se encuentra en el MAR. Asumiendo que la RAM tiene una capacidad de S palabras de b bits(S=2"b), el MAR tiene n bits de ancho. Una 65 decodificacién directa requerira del orden de S compuertas para obtener una salida de las S(envfo m lineas a cada punto), Esta técnica se lama seleccisn lineal, Otra alternativa es decodificar enviando a cada lugar una linea, Dificultades: IJearga excesiva sobre las lineas, La tarea de decodificacién en cada punto podra ser un HW excesivo. 2)problemas de layout(interconexién de compuertas). Visto esto una mejor alternativa seria direccionamiento multidimensional. Direccionamiento Multidimension: ‘Memorias de Nucleo: ta celda de almacenamiento basica es un micleo /?2222222222277 Dependiendo del nimero de cables que enhebren nticleos individuales tenemos diferentes organizaciones de ‘memoria, Organizacisn 3-D: desde el punto de vista geométrico, las memorias de niicleo 3-D de W = 2°b bits-words consiste de b planos de w nicleos. Esto es, los bits en la posicién i de las w palabras estan en el mismo plano. Entonces habré un cable de sensado y uno de habilitacién por plano conectado al bit relevante en el MDR. Cada niicleo sera enhebrado por dos cables, los cables x e y que conducirsn parte de la cte necesaria para cambiar o sensar los estados. El cable x comresponderi a a decodificaci6n de la unidad inferior de la ditecci6n(en el MDR) y el cable y a la mitad superior. Los procedimientos de lectura y escritura muestran como podemos mezclar los cables de inhibicién y sensado, ya que son simplemente usados en tiempos diferentes y podrian ser compartidos. Para lectura: 1. Enviar “i? sobre el cable x y el cable y correspondiendo a la decodificacicn de tas mitades respectivas de la direccidn, amplificar las sefiales de sensado y entrarlas al MDR. Regenerar enviando i/2 sobre los mismos cables x ¢ y y “i/2 sobre el cable de inbil son 0 enel MDR. i6n para aquellos bits que Para escritura: 1. Clarear la palabra entrando ~i/2 sobre el cable x y el cable y, pero sin amplificar las sefiales de sensado, es decir no alterando el MDR. 2, Idem paso 2) de lectura. Esta organizacin requiere: W.b nticleos para almacenar informacién, ‘Un decoder x con 1/2 entradas y 2°° = Vw salidas. ‘Un decoder y con n/2 entradas y 2" salidas. 22" = 2 Ww drivers 0 conductores para los cables x ¢ y. bh cables de inhibicién o sensado. vrvvy OrganizaciGn 2-D: conceptualmente el esquema 2-D parece mas simple que el 3-D porque hace una seleccién lineal de palabras. Geometricamente la memoria 2-D tiene b lineas de ancho w. Los nticleos tienen que ser enhebrados unicamente por dos cables, uno para seleccionar la palabra y uno por bit. La wiltima linea de bit puede ser usada para sensado y para cambio de estado. Para lectura: 1. Enviar i sobre el cable selector de palabras. Amplificar las sefiales sensadas sobre las lineas de bit y entrar aquellas sefiales a los bits asociados an el MDR. Regenerar entrando i sobre la linea de palabra y —i/2 sobre las lineas de bits de aquellos bits seteados a0 en el MDR. Para escritura: 1, Idem lectura pero sin actualizar el MDR Idem lectura. Esta organizacién requiere: > W.b nticleos para almacenar informacién, 66 > Un decodificador con n entradas y 2"= > Warivers. > B lineas de inhibicién y sensado. salidas, A primera vista, parece que pagamos caro la aparente simplicidad de este esquema, w drivers en vez de 2 Yw drivers y el mismo radio de complejidad para la decodificacién. Pero se tiene la ventaja de necesitar un cable ‘menos por niicleo. Como la velocidad de cambio y sensado esté relacionado con el tamaiio del nicleo, se pueden obtener memorias més répidas con una organizacién 2-D. RAM Eletréni sensado y bit, una para c la celda asica en una RAM electrénica estética sera un FF. Conectados al FF hay dos lineas de ia estado estable(0 y 1), y una linea de palabra para todos los bits de la palabra dada. Existe una diferencia importante entre los procesos de lectura y escritura para memorias de nicleo y RAM electrénicas; en el ultimo caso el sensado es destructivo. Consecuentemente, las lineas de bit y las lineas de sensado pueden ser compartidas y las lineas de inhibicién son innecesarias. Ms atin, en el tiempo de ciclo, que es la suma de regeneracién y acceso, la segunda componente ser més pequefia que la primera en lugar de ser aproximadamente el mismo valor como en memoria de nécleo. La RAM puede ser: } De miicleo(hasta mediados de los 70°s). > Semiconductora Y Bipolar-Memorias estéticas(FF) Estitica(FF), Memoria iche(estitica). 6 transistores por celda, MoS, Dindmica(condensadores). Memoria principal(dinémica). Una celda dindmica solo un transistor. La memoria principal satisface las demandas de caches y vector units, y sirve como la interface de /O, es el destino de las entradas y el origen de las salidas. A diferencia de las caches, las medidas de perfomance de la memori principal emfatiza latencia y ancho de banda. Generalmente la latencia de memoria principal(la cual afecta la cache ‘miss penalty) es el tema primario de la cache, mientras que el ancho de banda de la memoria principal es el tema de ‘mayor importancia de VO y vector units. Como en los bloques de cache, el tamaiio de un bloque va desde 4-8 bytes hasta 64-256 bytes. La latencia de memoria depende de dos medidas- tiempo de acceso y tiempo de ciclo. Tiempo de acceso es el tiempo entre que se require una lectura y la palabra deseada arriba., mientras que tiempo de ciclo es el tiempo ‘mfnimo entre requerimientos a memoria. DRAM(Dynamic RAM): si cada fila no es accedida dentro de un cierto periodo de tiempo(2 miliseg) la informacién puede perderse. Este requerimiento significa que el sistema de memoria esti ocasionalmente no disponible porque est enviando una sefial de refresco a cada chip. El costo de un refresco es un acceso a memoria para cada fila de la DRAM. En contraste a las DRAM estén las SRAM(static RAM). La naturaleza dindmica de las DRAM requieren que el dato se escriba nuevamente luego de una lectura, por lo tanto hay una diferencia entre el tiempo de acceso y el tiempo de ciclo. Las SRAM usan mas circuitos por bit para prevenir que la informacién se pierda luego de una lectura. A diferencia de las DRAM, no existe diferencia entre el tiempo de acceso y el tiempo de ciclo; ademés no hay necesidad de refresco. En los diseiios de DRAM se pone emfasis en la capacidad, mientras que en la SRAM capacidad y velocidad, Interleaving de Memoria: en ambientes de procesamiento paralelo, la meoria principal es un recurso primario que es normalmente accedido por todos los procesadores 0 las distintas unidades de un procesador pipeline, Para evitar la degradacién de la perfomance por interferencia de memoria causada por dos 0 mais procesadores simultaneamente accediendo a la misma unidad de memoria, es conveniente no tener una sola unidad de memoria 07 para todo el sistema. Por lo tanto la memoria principal es particionada en varios médulos de memoria independientes y el direccionamiento distribuido a través de esos médulos. Esta organizaciGn se conoce como interleaving y resuelve en parte los problemas vistos, permitiendo accesos concurrentes a mas de un médulo. Si hay ‘M médulos se llama M-way interleaving. Hay dos métodos basicos de distribuir la diteccién entre los médulos. Asumiendo un total de M = 2" palabra en ‘memoria principal. Entonces la direccién fisica para una palabra en memoria consiste de n bits ay 2... Un método es interleaving de alto orden, distribuye las direcciones en M = 2” modulos de forma tal que cada médulo i, Bit paralelo: todas las palabras se comparan en paralelo con el contenido del registro de entrada, o en parte de este, segtin lo indique el registro mascara. Obviamente esto implica una gran cantidad de circuiteria por bit. > Bit serie: esta organizacién es més lenta pero tiene un HW menos costoso. Aqui se analiza de un bit por vez. de 1a palabra, Habra que hacer tantas comparaciones como bits tenga Ia palabra. En realidad es una comparaci6n simulténea, pero de a un bit por palabra. En este caso necesitarfamos otro registro, Cuando no hace match, no tiene sentido seguir con la busqueda Memoria Virtu: La meoria virtual es una técnica que permite la ejecucidn de procesos que podrian no estar completamente en ‘memoria. La principal ventaja de este esquema es que los programas pueden ser més largos que la memoria fisica. Esta técnica libera al programador de tratar con las limitaciones de memoria. Memoria virtual no es facil de implementar, ademis, podrfa decrementar sustancialmente la perfomance si se usa descuidadamente, La capacidad de ejecutar un programa que esté parcialmente en memoria tiene muchos beneficios: > La longitud de un programa no esté restringida por la cantidad de memoria fisica disponible. Los usuarios podrfan ser capaces de escribir programas para un extremadamente grande espacio de direccionado virtual, simplificando la tarea de programacién, > Como cada programa de usuario podrfa tomar menos memoria fisica, mas programas podrian ser corridos al mismo tiempo, con el correspondiente incremento en utilizacién de CPU y throughput, pero sin incrementar el tiempo de respuesta > No se necesitaria tanta VO para cargar o hacer swap de cada programa de usuario a memoria, por lo tanto cada programa podria correr mas répido. La memoria virtual generalmente se implementa mediante demand paging. Los procesos residen en memoria secundaria(usualmnete disco). Cuando se quiere ejecutar un proceso, lo ponemos en memoria. En lugar de hacer swapping del proceso entero, el pager(manipulador de péginas) lleva solo aquellas paginas necesarias a memoria, decrementando el swap time y la cantidad de memoria fisica necesaria, Se utiliza un soporte de HW para distinguir aquellas paginas que estan en memoria de las que estan en disco. Se utiliza el esquema de bit vilido-invatido para este propésito. Si un proceso trata de usar una pégina que no est en memoria se produce un page fault entonces se salva el estado del proceso interrumpido, se encuentran frames libres,se hace una operacién de disco para poner la pagina deseada en el frame alocado, se modifica la page table para indicar que la pxigina est ahora en memoria y luego se reanuda Taejecucién del proceso en el mismo lugar y estado donde se habia interrumpido, excepto que ahora la pagina deseada esta en memoria y es accesible. De esta manera es posible ejecutar procesos, aunque porciones de este todavia no esten en memoria. Este proceso es transparente al usuario. EL HW para soportar demand paging es: una page table y memoria secundaria( disco). Algoritmos de reemplazo de pagina: si no hay frames libres, buscamos uno que no sea actualmente usado y lo liberamos, Podemos liberar un frame escribiendo su contenido en el swap-space(disco), y cambiando la page table para indicar que la pagina ya no esté en memoria, El frame liberado puede usarse ahora para poner la pagina que causé el page fault. Algoritmo FIFO: este algoritmo asocia con cada pagina el tiempo en que esa pagina fue Nevada a memoria. Cuando se deba reemplazar una pagina se elige la mas vieja. Podemos crear una cola FIFO para almacenar todas las pginas en memoria. Se reemplaza la pigina que esté en la cabeza de la cola. Cuando se inserta una pagina en ‘memoria, la insertamos al final de la cola. La perfomance de este algoritmo no siempre es buena. La pagina reemplazada podria ser un médulo de inicializacién que fue usado un largo tiempo atrés y no es muy necesaria. Por el otro lado, podria contener una variable que es muy usada y que fue inicializada tempranamente y esti en constante uso. Despues de hacer page out de una pagina activa para traer una nueva, un fault ocurre casi inmediatamente para recuperar la pagina activa. Esto es, una mala eleccidn en reemplazo inerementa el promedio de page faults y baja el tiempo de ejecucién del proceso, pero no produce una ejecucién incorrecta. Este algoritmo tiene la anomalia de Belady ta cual dice: para algunos algoritmos de reemplazo de pagina, fa razén de page fault se incrementa cuando el nimero de frames alocados se incrementa Algoritmo Optimal: el uso de este algoritmo de reemplazo de pagina garantiza el promedio més bajo posible de page faults para un nimero fijo de frames(nunca sufre la anomalia de Belady). Tambien es llamado OPT o MIN. Consiste en simplemente reemplazar la pagina que no sera usada durante el perfodo de tiempo ms largo. Desafortunadamente este algoritmo es dificil de implementar, porque requiere conocimiento futuro del string de referencias. Como resultado este algoritmo es usado principalmente para estudios de comparacién 70 Algoritmo LRU(usaddo menos recientemente): este algoritmo asocia con cada pagina el tiempo de la dltima ver. que se uso. Cuando se deba reemplazar una pagina, el LRU selecciona la pagina que no se haya usado por el periodo ms largo de tiempo, Este algoritmo es bastante bueno, el problema que surge es como implementarlo, O sea, determinar un orden para los frames definido por el tiempo de uso tltimo. Hay dos implementaciones factibles: > Comtadores: es el caso més simple, asociamos con cada entrada a la page table un campo de tiempo de uso, y agregamos a la CPU un reloj Igico 0 contador. El reloj se incrementa con cada referencia a memoria, Dondequiera que se hace una referencia a memoria, los contenidos del registro reloj se copian en el campo tiempo de uso en la page table para esa pagina. Se reemplaza la pagina con el valor de tiempo mis pequeio, Este esquema requiere una biisqueda en la page table para encontrar la pagina LRU y una escritura a memoria (al campo tiempo de uso en la page table) por cada acceso a memoria. > Stack: otro approuch de implementar el reemplazo LRU es mantener una pila de nimeros de paginas. Dondequiera que una pagina es referenciada, es removida de la pila y puesta en el tope. De esta manera, el tope de la pila es siempre la pagina usada mds recientemente y parte més baja es la pégina LRU. Como las entradas tienen que ser removidas desde el medio de la pila, la mejor implementacién es una lista doblemente enlazada, con un puntero a la cabeza y a la cola. Cada actualizacién es un poco mis costosa, pero no hay biisqueda para un reemplazo. Este approuch es apropiado para implementaciones por SW 0 microcédigo, Ni el Optimal ni el LRU sufren de la anomalfa de Belady. Existe una clase de algoritmos de reemplazo de pégina, Mamados aigoritmas stack, que nunca exhiben la anomalia de Belady. Un algoritmo stack es un algoritmo por el cual puede mostrarse que el conjunto de paginas en memoria para n frames es siempre un subconjunto del conjunto de paginas que estarfan en memoria con n41 frames, Para LRU, el conjunto de paiginas en memoria serfan las n mas recientemente referenciadas. Si se incrementa el numero de frames, estas n paginas serdn todavia las mas recientemente referenciadas y todavia estarin en memoria, Ninguna implementacién de LRU es posible sin la asistencia de HW mils ayé de los registros TLB estandar. La actualizacién del campo reloj o pila se deben hacer para cada referencia a memoria, y hacerla por SW causa overhead para el manejador de memoria. Prepaginado: una caracteristica de un sistema demand-paging es el gran némero de page-faults que ocurren cuando comienza un proceso. El prepaginado es un intento de prevenir este alto nivel de page-fault inicial. La estrategia es evar a memoria de una vez. todas las paginas que se necesitardn, El prepaginado tiene sus desventajas en algunos casos. Por ejemplo, que ocurre si muchas de tas paginas que se Hevaron a memoria mediante prepaginado no son usadas. Por este motivo habrfa que analizar si el costo del prepaginado es menor que el costo de servir los correspondientes page-faults. Tamaito de Pagina: el tamafio de una pagina puede estar entre 512-16384 bytes. Para un dado espacio de memoria virtual, decrementar el tamafio de las paginas, inerementa el numero de paiginas, y por lo tanto el tamafio de la page table. Como cada proceso activo deberd tener su propia copia de la page table, es preferible tener un tamafio de pagina grande. Por otro lado, si queremos minimizar la fragmentacién interna(generalmente la ultima pagina para un dado proceso no se Hlena totalmente) es preferible un tamatio de pagina pequeito, Otro problema es el tiempo requerido para leer o escribir una pagina. El tiempo de UO esté compuesto por tiempos de bisqueda, Iatencia, transferencia. Fl tiempo de transferencia es proporcional a la cantidad transferida(esto es, el tamaiio de pagina) lo cual serfa un argumento a favor del tamaiio de pagina pequefio. Pero hay que tener en cuenta que la latencia y el seek time son factores que pesan mucho. Por ejemplo, puede tomar mucho menos tiempo leet tuna pagina de 1024 bytes, que dos paginas de 512 bytes cada una, Entonces, si se desea minimizar el tiempo de VO es mejor un tamaio de pagina grande. Fragmentacién Interna y Externa: cuando los procesos son cargados y luego liberados de memoria, el espacio de ‘memoria libre resultante queda paricionado en pequefias piezas. Hay fragmentacidn externa cuando existe espacio de memoria suficiente para satisfacer un requerimiento, pero este no es contiguo. Este problema de fragmentacién pude ser severo. En el peor de los casos, podrfamos tener un bloque de memoria libre cada dos procesos. Si toda esta memoria estuviera en un gran bloque libre, poxrfamos ser capaces de correr n més procesos. La seleccién de first-fit versus best-fit puede afectar la cantidad de fragmentacién. Estos algoritmos examinan los espacios libres y determinan cual es el mejor para alocar, > First-Fit-aloca el primer espacio que es lo suficientemente grande. > Best-Fit: aloca el menor espacio que es lo suficientemente grande, > Worst-Fit: aloca el espacio mas grande. Otto factor es que extremo del bloque libre se aloca, La fragmentacién externa puede ser mayor © menor dependiendo de la cantidad de memoria y el tamaito promedio de los procesos, Otro problema que surge con la alocacién de particiones multiples es: supongamos que tenemos una particién de 18464 bytes y un requerimiento de 18462 bytes. Si alocamos exactamente el bloque requerido, nos quedan libres dos bytes. El overhead para mantener este hole puede ser mayor que el hole en si mismo. El approuch a tener en Cuenta es alocar holes muy pequefios como parte de un requerimiento grande. De ese modo la memoria alocada puede ser levemente superior ala memoria requerida. La diferencia entre estos dos ntimeros es la fragmentacién intemna- memoria que es interna a una particién, pero no esta siendo usada. Una solucién al problema de fragmentacién externa es compactacién. El objetivo es poner toda la memoria libre en un gran bloque. La compactacién no se puede hacer si la relocaciGn es estética. Solo puede hacerse si la relocacién es dindmica, y es hecha en tiempo de ejecucidn. Si las direcciones son realocadas dinamicamente, la relocacién requiere solo mover el programa y los datos, y luego cambiar el registro hase para reflejar la nueva direccién base. Swapping tambien puede combinarse con compactacién. Un proceso puede ser rolled out de memoria principal a backing store y mls tarde rolled in, Cuando elo proceso es rolled out, se libera memoria que puede ser reusada por otro proceso, Cuando el proceso es rolled in pueden surgir algunos problemas. Si se usa relocacidn estatica, el proceso deberd ser puesto en las mismas locaciones de memoria que ocupaba previamente. Esta restriccién puede equerir que otros procesos en memoria deban ser rolled out para liberar esa memoria, Si se usa relocacién dindmica los procesos pueden ser rolled en distintas locaciones. Paginado: la memoria fisica es dividida en bloques de tamaiio fijo Iamados frames. La memoria igica tambien se divide en bloques del mismo tamaiio lamados paginas. Cuando un proceso va a ejecutarse, sus paginas se cargan en cualquier frame de memoria disponible desde el backing store. El backing store esti dividido en bloques de tamaio fijo que son del mismo tamaio que los frames de memoria, Cada direccién generada por el CPU se divide en dos partes: un ntimero de pagina(p) y un offset(d). El mimero de pagina es usado como un indice en la page table. La page table contiene Ia direccidn base de cada pagina en ‘memoria fisica. La direccién base se combina con el page offset para defini la direccién fisica de memoria. El tamaio de pagina(como el tamaiio de frame) esta definido por el HW. El tamafio va desde 512-8192 bytes(potencias de dos- hace més facil la translacicin de una direccién légica en un nimero de pagina y un offset) por pégina, dependiendo de la arquitectura. Si eltamaiio del espacio de direcciones ligicas es 2", y el tamaiio de pagina es 2°, entonces los m-n bits de mis alto orden de la direccidn légica designan el nimero de pagina, y los n bits de menor orden designan el page offset ‘Con este esquema no se produce fragmentacién externa: cualquier frame libre puede ser alocado por un proceso que lo necesite. Sin embargo tenemos alguna clase de fragmentacién interna. Por ejemplo puede ser que el tltimo frame alocado por un proceso no se ocupe en su totalidad. En el caso de tener paginas de 2048 bytes, y un proceso de 72766 bytes se necesitarian 35 paginas mas 1086 bytes. Luego se alocardn 36 paginas produciendo una fragmentacién interna de 2048-1086=962 bytes. En el peor caso se podrian necesitar n paginas més un byte. Entonces se tendria que alocar n+1 frames, resultando una fragmentacién intema de casi un frame, Esta consideracidn sugiere que el tamaito de las paginas sean pequetios. Sin embargo, existe un bit de overhead involucrado en cada entrada a la page table, y este overhead se reduce cuando el tamafio de la pagina se incremeta. Tambien, las VO de disco son mas eficientes cuando el numero de datos a transferirse es mayor. ‘Cuando un proceso arriba para ejecutarse, su tamafio expresado en paginas, es examinado. Cada pagina de usuario necesita un frame. La primera pagina del proceso es cargada dentro de uno de los frames alocados, y el nimero de frame se pone en la pge table para ese proceso. La pxigina siguiente se carga en otro frame, y su miimero de frame se pone en la page table y asf siguiendo. ELS.O. mantiene una copia de la page table para cada proceso, como lo hace con el instruction counter y el contenido de registras. Esta copia se usa para transladar direcciones Igicas en direcciones fisicas. Es claro que el paginado aumenta el tiempo de cambio de contexto, En el caso mis simple la page table se implementa como un conjunto de registros dedicados. Debido a su rapidez la translacisn de direcciones de paginas es eficiente, El uso de registros es factible si la page table es razonablemente pequefia. Actualmente la mayoria de las computadoras, permiten que la page table sea muy grande; por lo tanto el uso de registros rapids no es factible, Entonces, se puede mantener la page table en memoria, y un page-table base register{ PTBR) apunta a la page table. Cambiar de page table solo requiere cambiar este Gnico registro, reduciendo sustancialmente el tiempo de cambio de contexto. El problema con este approuch es el tiempo requerido para acceder a la locacién de memoria de usuario. Se requieren dos accesos a memoria(uno para la entrada en la page table, uno para el byte). La solucién a este problema es usar una cache, llamada translation look ahead buffer(TLB) o registros asociativos. Los registros asociativos contienen solo una parte de todas las entradas de la page table. Cuando el CPU genera una direccién ligica, su mimero de pagina es presentado a un conjunto de registros asociativos que contienen miimeros de pagina y sus correspondientes ntimero de frame. Si se encuentra el niimero de pagina, el nimero de frame esta disponible para usarse para aoceder a memoria. Si el mimero de pagina no se encuentra en los registros asociativos, se debe hacer una referencia a memoria hacia la page table. Cuando se obtiene el niimero de frame, podemos usarlo para acceder a memoria. Ademés, se agrega el mimero de pagina y el ntimero de frame a los registias asociativos; de ese modo se encontrarén rapidamente en la prcxima referencia, Si la TLB est completa, el SO deberd seleccionar una para su reemplazo. Desafortunadamente, cada vez que se seleeciona una nueva page table(por ejemplo, cada cambio de contexto), La TLB es flushed para asegurar que el préximo proceso a ejecutarse no use informacién de translacién equivocada. La proteccién de memoria en un ambiente paginado se logra mediante bits de protecciGn que se asocian con cada frame, Normalmente, estos bits se mantiene en la page table, Un bit puede definir una pagina como de lectura y escritura o solo lectura. Cada referencia a memoria recorre la page table para encontrar el niimero de frame comrecto. Al mismo tiempo que se computa la diteccidn fisica, se pueden chequear los bits de proteccién para verificar que no se hagan escrituras en una pagina de solo lectura. ‘Segmentacién: el espacio direccionado es una coleccién de segmentos. Cada segmento tiene su nombre y longitu. El usuario especitica cada direccidn mediante dos cantidades: el nombre del segmento y el offset dentro del segmento, Por simplicidad de implementacidn, los segmentos se numeran y son referenciados mediante un mimero de segmento. Entonces, una direcciGn l6gica consiste de una tupla: . Normalmente, el compilador construye automaticamente los segmentos. Por ejemplo un segmento para las variables globales, la pila de Hamadas a procedimiento, la porcidn de cédigo de cada procedimiento o funcidn, las variables locales de cada procedimiento 0 funcién,etc. El mapeo entre direcciones ldgicas y fisicas se efectiia mediante la segmet table. Cada entrada de la segment table tiene una base de segmento y un limize de segmento. La base de segmento contiene la direcciGn fisica de comienzo donde el segmento reside en memoria, mientras que el limite de sezmento especifica la longitud del segmento. ‘Una direcci6n légica consiste de dos partes: un niimero de segmento .s, y un offset dentro de ese segmento.d. El niimero de segmento es usado como un indice en la segment table. El offset d de la direcciGn l6gica debers estar entre 0 y el Kimite del segmento. Si no es asf se produce un trap del SO. Si el offset es legal, este es sumado a la base de segmento para producir la direccién en memoria fisica del byte deseado. AI igual que la page table, la segment table puede ser puesta en registros rapidos o en memoria. Una segment table que se mantiene en registros puede referenciarse rapidamente; la adicién de la base y la comparacién puede hacerse simultaneamente para ahorrar tiempo. Si un programa consiste de un gran numero de segmentos, no es factible el uso de registros, es mejor usar memoria. Un segment-table base register (STBR) apunta a la segment table. ‘Ademés, como la cantidad de segmentos usados por un programa puede variar ampliamente, se usa un segment table lenght register(STLR). Para una direccién l6gica, primero se chequea si el niimero de segmento s es legal(s

You might also like