Professional Documents
Culture Documents
Las funciones básicas de un computador puede llevar a cabo son: El procesamiento, almacenamiento y transferencia de
datos y llevar un control.
Hay cuatro componentes estructurales principales:
• CPU: Controla el funcionamiento del computador y lleva a cabo sus funciones de procesamiento de datos.
• Memoria principal: Almacena datos.
• E/S : Transfiere datos entre el computador y el entorno externo
• Sistema de interconexiones: Es un mecanismo que proporciona la comunicación entre la CPU, la MP y la E/S.
La estructura de la CPU es la siguiente:
• Unidad de control: Controla el funcionamiento de la CPU
• ALU: Lleva a cabo las funciones de procesamiento de datos del computador.
• Registros: Proporciona almacenamiento interno a la CPU
• Interconexiones CPU: Son mecanismos que proporcionan comunicación entre la unidad de control, la ALU y los
registros.
Durante el “ciclo de captación”, el codop de la siguiente instrucción es cargado en el IR y la parte que contiene la
dirección es almacenada en el MAR. Esta instrucción puede ser captada desde el IBR o puede ser obtenida de la
memoria cargando una palabra en el MBR y luego en IBR, IR y MAR.
Una vez que el codop esta en el IR, se lleva a cabo el “Ciclo de ejecución”. Los circuitos de control interpretan el codop y
ejecutan la instrucción enviando las señales de control adecuadas para provocar que los datos se transfieran o que la
ALU realice la operación. El IAS tiene las siguientes instrucciones:
• Transferencia de datos: Entre la memoria y los registros de la ALU o entre dos registros de la ALU
• Salto incondicional: Pueden cambiar la secuencia lineal de instrucciones, para repeticiones.
• Salto condicional: Salto según una condición, IF.
• Aritmética: Operaciones realizadas por la ALU
• Modificación de direcciones: Permite que la ALU haga operaciones con las direcciones y las inserte en
instrucciones almacenadas en memoria.
Computadoras comerciales
En 1947 se fabrica la primera maquina con tales fines, el UNIVA I. IBM saca su prime computador con programas
almacenados electrónicamente, el 701 en 1953.
1
Los transistores
EL transistor es mas pequeño, mas barato, dispara menos calor y puede ser usado de la misma forma que los tubos de
vació en la construcción de computadores. El transistor provoco una revolución electrónica en 1947. Se introdujeron
unidades lógicas y aritméticas mas complejas, así como el uso del lenguaje de programación de alto nivel y se
proporciono un software des sistema con el computador.
El IBM 7094
El incremento de la velocidad se logro mejorando la electrónica. LA diferencia mas importante con el IAS es el uso de
canales de datos, un canal de datos es un modulo de E/S independiente, con su propio procesador y su propio conjunto
de instrucciones.
IBM sistema/360
En 1964 IBM anuncio el sistema/360 era incompatible con las maquinas IBM anteriores, pero fue el éxito de la década ya
que utilizaba el concepto de familia con las siguientes características: Si un programa se ejecutaba en una maquina se
podrá ejecutar en cualquier otra, sistemas operativos similares o idénticos, velocidad, tamaño de memoria y costo
creciente.
DEC PDP-8
En el mismo año del IBM sistema/360 tuvo lugar otro lanzamiento trascendental, el PDP-8 de DEC, cuando la mayoría
de los computadores requerían una habitación con aire acondicionado este era lo bastante pequeño para ser colocado
en una mesa de escritorio.
Ultimas generaciones
Se podría decir que la aplicación comercial de nuevos desarrollos resulto uno de los principales cambios de principios de
los años 70, dos de los más importantes fueros:
• Memorias semiconductoras: La primera aplicación de la tecnología de circuitos integrados en computadores, dejo a
un lado la construcción del procesador con chips de circuitos integrados. Sin embargo, se encontró con que esta
misma tecnología podía usarse para construir memorias.
• Microprocesadores: En 1971 Intel desarrollo su 4004, que fue el primer chip que contenía todos los componentes
de la CPU en un solo chip.
2
CAPITULO 3: BUSES DEL SISTEMA
1- Al comienzo de cada ciclo de instrucción la CPU capta una instrucción de memoria, se utiliza el PC para seguir la pista
de la instrucción que debe captarse a continuación
- La CPU siempre incrementa el PC después de captar cada instrucción.
- La instrucción captada se almacena en el IR.
- La CPU interpreta la instrucción y lleva a cabo la acción requerida, esta acción puede ser:
Transferencia de datos: Procesador-memoria / procesador-E/S
Procesamiento de datos: la CPU debe realizar alguna operación aritmética o lógica con los datos
Control: Una instrucción puede especificar que la secuencia de ejecución se altere.
La ejecución de una instrucción puede implicar una combinación de estas acciones.
INTERRUPCIONES
Las interrupciones proporcionan una forma de mejorar la eficiencia del procesador, hay diferentes clases de
interrupciones:
• Programa: Generadas por alguna condición que se produce como resultado de la ejecución de una instrucción, tal
como desbordamiento aritmético, división por cero, intento de ejecuta una instrucción maquina inexistente, e intento
de acceder fuera del espacio de memoria permitido.
• Temporización: Generadas por un temporizador interno el procesador. Esto permite al sistema operativo realizar
ciertas funciones de manera regular.
• E/S: Generadas por un controlador de E/S, para indicar la finalización sin problemas de una operación o para avisar
de ciertas condiciones de error.
• Fallo de hardware: Generadas por un fallo tal como la falta de potencia de alimentación o un error de paridad en la
memoria.
El procesador comprueba si se ha generado alguna interrupción indicada por la presencia de una señal de interrupción,
si la hay hace lo siguiente:
1- Suspender la ejecución del programa en curso y guarda si contexto. Esto significa almacenar la dirección de la
siguiente instrucción a ejecutar y cualquier otro dato relacionado con la actividad en curso del procesador
2- Carga el contador del programa con la dirección de comienzo de una rutina de gestión de interrupción.
A continuación el procesador prosigue con el ciclo de captación y accede a la primera instrucción del programa de
gestión de interrupción, que dará servicio a la interrupción. Generalmente el programa de gestión de interrupción forma
parte del sistema operativo. Normalmente este programa determina el origen de la interrupción y realiza todas las
acciones que sean necesarias.
Es claro que este proceso supone una cierta penalización. Deben ejecutarse instrucciones extra (en el gestor de
interrupción) para determinar el origen de la interrupción y para decidir la acción apropiada.
3
INTERRUPCIONES MULTIPLES
ESTRUCTURAS DE INTERCONEXION
El conjunto de líneas que conectan los diversos módulos (CPU, MP, E/S) se denominan estructura de interconexión.
Nos referimos a cada una de estas interfaces con un dispositivo externo con el nombre de puerto y se le asignara una
dirección a cada uno.
Un modulo de E/S puede evitar señales de interrupción al procesador.
El procesador lee instrucciones y datos, escribe datos una vez los ha procesado y utiliza ciertas señales para controlar el
funcionamiento del sistema, también puede recibir señales de interrupción.
Tipo: Dedicado: Esta permanentemente asignada a una función o a un subconjunto físico de componentes
del computador.
Multiplexado: Diseñado `para operar con varios dispositivos de E/S simultáneamente. Varios
dispositivos de E/S pueden transferir registros al mismo tiempo intercalando campos de
datos. LA ventaja es el uso de menos líneas, la desventaja es que se necesita una
circuiteria mas compleja en cada modulo. Además las líneas no pueden producirse en
paralelo.
Método de arbitraje: Centralizado: Hay un único dispositivo hardware denominado controlador del bus, es
responsable de asignar tiempos al bus
Distribuido: No existe un controlador central, en su lugar cada modulo dispone de lógica para controlar
el acceso y los módulos actúan conjuntamente para compartir el bus.
El propósito del arbitraje es designar un dispositivo al procesador o modulo de E/S, como maestro del bus (el que
inicia la Transferencia)
Anchura del bus: Dirección: Cuando mas ancho es el bus de direcciones mayor es el rango de posiciones a las que
se puede hacer referencia
Datos: Cuando más ancho es el bus de datos mayor es el número de bits que se pueden transferir a
la vez.
4
Tipo de transferencia: Lectura:
Escritura:
Lectura-modificación-escritura:
Lectura-después de escritura: Consiste en una escritura seguida de una lectura en la misma dirección,
la lectura se utiliza para comprobar el resultado.
Bloque:
PCI
El bus PCI tiene un ancho de banda elevado, independiente del procesador, proporciona mejores prestaciones para los
subsistemas de E/S de alta velocidad. Se implementa con muy pocos circuitos integrados y permite que otros buses se
conecten al bus PCI. Utiliza Temporizacion sincrónica y un esquema de arbitraje centralizado.
Cuando un maestro del bus adquiere el control del mismo determina el tipo de transferencia que se producirá a
continuación, los tipos de transferencia son:
• Reconocimiento de interrupción: Es una orden de lectura proporcionada por el dispositivo que actúa como controlador
de interrupciones del bus PCI.
• Ciclo especial: Se utiliza para iniciar la difusión de un mensaje a uno o mas destinos
• Lectura-escritura E/S: Para intercambiar datos entre el modulo que inicia la transferencia y un controlador de E/S.
• Lectura-escritura en memoria: Para especificar la transferencia de una secuencia de datos utilizando uno o mas ciclos
de reloj.
• Lectura-escritura de configuración: Para que un dispositivo maestro lea y actualice los paramentos de config. de un
dispositivo conectado al bus PCI.
• Ciclo de dirección dual: Se utilizan por el dispositivo que inicia la transferencia para indicar que esta utilizando
direcciones de 64 bits.
Toda transferencia de datos en el bus PCI es una transferencia única, que consta de una fase de direccionamiento y una
o más fases de datos.
5
CAPITULO 4: MEMORIA INTERNA
La memoria de un computador tiene una organización jerárquica, en el nivel superior (el mas próximo al procesador)
están los registros, la cache, la memoria principal y por ultimo la memoria externa (disco duro y soportes extraíbles).
A medida que descendemos en la jerarquía de memoria, disminuye el coste por bit, aumenta la capacidad y crece el
tiempo de acceso.
Transferencia: Palabra: El tamaño suele coincidir con el numero de bits utilizados para representar números y con la
longitud de
las instrucciones.
Unidad direccionable: La relación entre la longitud A de una dirección y el numero N de unidades
direccionales es 2ª = N
Unidad de transferencia: Para memorias internas es igual al numero de líneas de E/S de datos del
modulo de memoria, en general es igual a la longitud de palabra. Para la memoria
principal en el número de bits que se leen o escriben en memoria a la vez. Para la
memoria externa los datos se transfieren en unidades mas grandes que la palabra,
“bloques”.
Acceso: Secuencial: Se utiliza un mecanismo de lectura / escritura compartida, que debe ir trasladándose desde
su posición actual a la deseada pasando y obviando cada registro intermedio.
Directo: Los bloques individuales o registros tienen una dirección única basada en su dirección física. El
acceso de lleva a cabo mediante una acceso directo a una vecindad dada seguido de una búsqueda
secuencial.
Aleatorio: Cualquier posición puede seleccionarse aleatoriamente y puede ser direccionada y accedida
directamente.
Asociativo: Permite hacer una comparación de ciertas posiciones de bits dentro de una palabra
buscando que coincida con unos valores dados y hacer esto para todas las palabras
simultáneamente. Una palabra es recuperada basándose en una porción de su contenido en lugar de
su dirección.
Prestaciones: Tiempo de acceso: El tiempo que transcurre desde el instante en el que se presenta una dirección a la
memoria hasta que el dato ha sido memorizado o esta disponible para su uso.
Tiempo de ciclo: El tiempo de acceso y algún tiempo mas que se requiere antes de que pueda iniciarse
un segundo acceso a memoria. Este tiempo adicional puede que sea necesario para que
finalicen las transacciones en las líneas se señal o para regenerar los datos en el caso de
lecturas destructivas.
Velocidad de transferencia: Velocidad en la que se puede transferir datos.
Una parte de la memoria principal puede utilizarse como almacén intermedio (buffer) para guardar temporalmente datos
que van a ser volcados en disco, esta técnica se denomina “Cache de disco”, de esta forma la escritura al disco se hace
por grupos y algunos datos destinados a ser escritos como salidas pueden ser referenciados por un programa antes de
que sean volcados en disco.
6
MEMORIA PRINCIPAL SEMICONDUCTORA
MEMORIA CACHE
El objetivo es lograr que la velocidad de la memoria sea lo mas rápida posible, esta contiene una copia de partes de la
memoria principal. Cando el procesador intenta leer una palabra de memoria se hace una comprobación para determinar
si la palabra esta en la cache. Si es así, se entrega dicha palabra al procesador. Si no, un bloque de memoria principal
consistente en un cierto número de palabras se transfiere a la cache y después la palabra es entregada al procesador.
La cache conecta con el procesador mediante líneas de datos, de control y de direcciones, las líneas de datos y de
direcciones conectan también con buffers de datos y de direcciones que las comunican con el bus del sistema a través
del cual accede a la memoria principal. Cuando ocurre un acierto de cache, los buffers de datos y de direcciones se
inhabilitan y la comunicación tiene lugar solo entre el procesador y cache, sin trafico en e bus. Cuando ocurre un fallo de
cache, la dirección deseada se carga en el bus del sistema y de dato es llevado a través del buffer de datos, tanto a la
cache como al procesador. (ver figura 4.16 de Pág. 114)
Tamaño: Cuando mas grande es, mayor es el numero de puertas implicadas en direccional la cache. El resultado es que
caches muy grandes tienden a ser ligenramente más lentas que las pequeñas.
Función de correspondencia: Se requiere algún medio de determinar que bloque en memoria principal ocupa
actualmente una línea dada de cache. Le elección de la función de correspondencia determina como se organiza
la cache. Pueden utilizarse tres técnicas:
Directa: Consiste en hacer corresponder cada bloque de memoria principal a solo una línea posible de cache.
(ver del libro Pág.116)
Su principal desventaja es que hay una posición concreta de cache para cada bloque dado. Por ello si un
programa referencia repetidas veces a palabras de dos bloques diferentes asignados en la misma línea,
dichos bloques se estarían intercambiando continuamente en la cache y la tasa de aciertos seria baja.
Asociativa: Supera la desventaja de la directa permitiendo que cada bloque de memoria principal pueda cargarse
en cualquier línea de la cache. En este caso la lógica de control de la cache interpreta una dirección de
memoria simplemente como una etiqueta y un campo de palabra. Para determinar si un bloque esta en la
cache, su lógica de control debe examinar simultáneamente todas las etiquetas de líneas para buscar
una coincidencia. (ver figura Pág. 4.20 Pág. 119).
La principal desventaja es la compleja circuiteria para examinar en paralelo las etiquetas de todas las
líneas de cache.
Asociativa por conjuntos: Puede asignarse en cualquier momento cualquiera de las k líneas del conjunto I. En
este caso la lógica de control de la cache interpreta una dirección de memoria como tres campos:
etiqueta, conjunto, palabra.
7
Algoritmos de sustitución:
LRU (Least-recently-used): Se sustituye el bloque que se ha mantenido en la cache por más tiempo sin haber
sido referenciado. Esto es fácil de implementar para la asociativa por conjuntos de dos vías. Cada línea
incluye un bit USO. Cuando una línea es referenciada se pone a 1 su bit USO y a 0 el de la otra línea del
mismo conjunto.
FIFO (Firs in first out): Se sustituye aquel bloque del conjunto que ha estado más tiempo en la cache. El
algoritmo puede implementarse mediante round robin.
LFU (least frequently used): Se sustituye aquel bloque del conjunto que ha experimentado menos referencias.
LFU podría implementarse asociando un contador a cada línea.
Política de escritura: Antes de que pueda ser reemplazado un bloque que esta en una línea de cache, es necesario
comprobar si ha sido alterado en cache pero no en memoria principal. Hay dos problemas contra los que luchar. En
primer lugar más de un dispositivo puede tener acceso a la memoria principal. Si una palabra ha sido modificada solo
en la cache, la correspondiente palabra de memoria no es valida. Además si el dispositivo de E/S ha alterado la
memoria principal, entonces la palabra de cache no es valida, otro problema es cuando varios procesadores se
conectan al mismo bus y cada uno tiene su propia cache local, en tal caso, si se modifica una palabra en una de las
caches podría presumiblemente invalidar una palabra de las otras caches.
Escritura inmediata: Las operaciones de escritura se hacen tanto en cache como en memoria principal, la
desventaja es que genera un tráfico sustancial a memoria que puede originar un cuello de
botella.
Post-escritura: La actualizaciones se hacen solo en la cache. Cuando tiene lugar una actualización, se activa un
bit “actualizar” asociado a la línea. Después cuando el bloque es sustituido, es escrito en
memoria principal si el bit esta activado.
Si se modifican los datos de una cache, se invalida, no solamente la palabra correspondiente de memoria sino
también la misma palabra en otras caches. Un sistema que evite este problema se dice que mantiene “coherencia de
cache”, esto incluye:
• Vigilancia del bus escritura inmediata: Cada controlador de cache monitoriza las líneas de direcciones para
detectar operaciones de escritura en memoria por parte de otros maestros del bus. So otro maestro escribe en una
posición de memoria compartida, que también reside en la memoria cache, el controlador de cache invalida el
elemento de la cache. Esta estrategia depende del uso e una política de escritura inmediata por parte de todos los
controladores de cache.
• Transparencia hardware: Se utiliza hardware adicional para asegurar que todas las actualizaciones de memoria,
vía cache, quedan reflejadas en todas las caches. así si un procesador modifica una palabra de si cache, esta
actualización se escribe en memoria, además de actualizan todas las palabras coincidentes de otras caches.
• Memoria excluida de cache: Una porción de memoria se comparte por más de un procesador y esta se diseña
como no transferible a cache. En un sistema de este tipo, todos los accesos a la memoria compartida son fallos de
cache, porque la memoria compartida nunca se copia en la cache. La memoria excluida de cache puede ser
identificada utilizando lógica de selección de chip o los bits más significativos de la dirección.
Tamaño de línea: Bloques mas grandes reducen el número de bloques que caben en la cache, dado que cada bloque
captado se escribe sobre contenidos anteriores de la cache, un número reducido de bloques da lugar a que se
sobrescriba sobre los datos poco después de haber sido captados.
A medida que un bloque se hace mas grande, cada palabra adicional esta mas lejos de la requerida y por tanto en
mas improbable que sea necesaria a corto plazo.
Numero de caches: Es posible tener una cache en el mismo chip del procesador, cuando la instrucción se encuentra en
la cache se elimina el acceso al bus, entonces el bus esta libre para realizar otras transferencias. Normalmente los
diseños mas actuales incluyen tanto cache on chip como externa.
La estructura resultante se conoce como cache de dos niveles, siendo la cache interna el nivel 1 (L1) y la externa nivel
2 (L2). Si se utiliza una cache L” SRAM entonces con frecuencia la información que falta puede recuperarse
fácilmente.
Más recientemente se ha hecho normal separar la cache en dos: una dedicada a instrucciones y otra a datos. Una
cache unificada tiene varias ventajas como que para un tamaño dado de cache, una unificada tiene una tasa de
aciertos mayor que una partida, ya que nivela automáticamente la carga entre captación de instrucciones y de datos.
La ventaja del diseño de una cache partida es que elimina la competición por la cache entre el procesador de
instrucciones y la unidad de ejecución.
La DRAM mejorada (EDRAM) integra una pequeña cache SRAM en un chip de DRAM genérica. Las operaciones de
refresco pueden llevarse a cabo en paralelo con operaciones de lectura de la cache, minimizando el tiempo que el chip
estaría no disponible por causa del refresco, también el camino de lectura desde la cache de filas hasta el puerto de
salida es independiente del camino de escritura desde el modulo de E/S a los amplificadores de lectura.
8
DRAM CACHE (CDRAM)
Puede utilizarse como una verdadera cache de un número dado de líneas de 64 bits, también puede utilizarse como
buffer para proporcionar accesos serie a un bloque de datos.
RAM LINK
Se centra en la interfaz procesador/memoria en lugar de en la arquitectura interna de los chip DRAM. El tráfico en el
anillo es gestionado por un controlador de memoria que envía mensajes a los chips de DRAM, los cuales actúan como
nodos de la red en anillo. Los datos se intercambian en forma de paquetes. Una de las ventajas en que proporciona una
arquitectura expandible que soporta un número pequeño o grande de DRAM y no impone una estructura interna de
DRAM.
9
CAPITULO 5: MEMORIA EXTERNA
DISCOS MAGNETICOS
Durante una operación de lectura o escritura, la cabeza permanece quieta mientras el plato rota bajo ella, esto da lugar a
que los datos se organicen en un conjunto de anillos concéntricos en el plato llamados pistas. Cada pista es del mismo
ancho que la cabeza.
La densidad, en bits por pulgada lineal, aumenta según se avanza de la pista mas externa a la mas interna.
Los datos se transfieren hacia y desde el disco en bloques, normalmente el bloque es menor que la capacidad de una
pista, los datos se almacenan en regiones del tamaño de un bloque, conocidos como sectores. (ver figura 5.1 Pág. 148).
El disco se graba con un formato que contiene algunos datos extra, usados solo por el controlador del disco y no
accesibles al usuario.
En un disco de cabeza fija hay una cabeza de lectura/escritura por pista. Todas las cabezas se montan en un brazo
rígido que se extiende a través de todas las pistas, en uno de cabeza móvil hay solo una cabeza de lectura/escritura,
como la cabeza debe poder posicionarse encima de cualquier pista, el brazo debe extenderse o retraerse para este
propósito.
Cuando la unidad de disco esta funcionando, el disco esta rotando a una velocidad constante. Para leer o escribir, la
cabeza debe posicionarse en la pista deseada y al principio del sector deseado en la pista. La selección de la pista
implica un movimiento de la cabeza (cabeza móvil) o una selección electrónica de una cabeza (cabezas fijas). En un
sistema de cabeza móvil, el tiempo que tarda la cabeza en posicionarse en la pista se conoce como “tiempo de
búsqueda”. En cualquier caso, una vez seleccionada la pista, el controlador del disco espera hasta que el sector
apropiado rote hasta alinearse con la cabeza.
El tiempo que tarda el sector en alcanzar la cabeza se llama “retardo rotacional” o latencia rotacional. LA suma del
tiempo de búsqueda, si lo hay y el retardo rotacional se denomina “tiempo de acceso”. Una vez posicionada la cabeza se
lleva a cabo la operación de lectura/escritura desplazándose el sector bajo la cabeza, esta operación conlleva un tiempo
de transferencia de datos.
(ver tp de operativos)
MEMORIA OPTICA
CD ROM
La información grabada digitalmente se graba como una serie de hoyos microscópicos en la superficie reflectante. Esto
se hace en primer lugar, con un láser de alta intensidad, enfocado con precisión, para crear el disco patrón. El patrón se
usa después para hacer una matriz para estampar copias. La información se recupera también con un láser. La
intensidad de la luz reflejada cambia si se encuentra un hoyo. Un fotosensor detecta este cambio que es convertido en
una señal digital.
El láser puede leer todos los hoyos a la misma velocidad, esto se puede hacer incrementando el espaciado lineal entre
bits de información grabados en los segmentos mas externos del disco. La info. se puede explorar a la misma velocidad,
girando el disco con una velocidad fija, conocida como CAV (velocidad angular constante). La ventaja de usar CAV es
que los bloques individuales de datos se pueden direccional directamente a partir de la pista y el sector. Para mover la
cabeza de su posición habitual a una dirección especifica, se hace solo un pequeño movimiento de la cabeza a la pista
especifica y se espera un poco a que el sector se posicione bajo la cabeza. La desventaja de CAV es que la cantidad de
datos se puede almacenar en las pistas exteriores, mas grandes, es la misma que la que se puede almacenar en las
pistas mas pequeñas.
Puesto que poner menos información en la parte mas exterior del disco malgasta espacio, el método CAV no se usa en
CD y CD-ROM, el mismo se explora a la misma velocidad rotando el disco a una velocidad variable. El láser lee los
hoyos a una velocidad lineal constante (CLV).
Como los WORM los discos ópticos borrables usan una velocidad angular constante (CAV)
11
CAPITULO 6: ENTRADA/SALIDA
Las dos funciones principales de un modulo de E/S es realizar la interfaz entre el procesador y la memoria a través del
bus del sistema o un conmutador central y realizar la interfase entre uno o mas dispositivos periféricos mediante enlaces
de datos específicos.
DISPOSITIVOS EXTERNOS
Un dispositivo externo se conecta al computador mediante un enlace a un modulo de E/S. El enlace utiliza se utiliza para
intercambiar señales de control, estado y datos entre el modulo de E/S y el dispositivo externo.
Las señales de control determinan la función que debe realizar el dispositivo, tal como enviar datos al modulo de E/S,
aceptar datos desde el modulo de E/S, indicar el estado o realiza alguna función de control particular del dispositivo (por
ejemplo situar la cabeza del disco, etc.). Las señales de estado indican el estado del dispositivo. Como ejemplos están
las señal LISTO/NO LISTO.
En el teclado y monitor cada carácter de este código se representa mediante un único numero binario de 7+1 bits,
CONTROLADOR DE DISCO
Contiene la electrónica necesaria para intercambiar señales de datos, control y estado con un modulo de E/S, mas la
electrónica para controlar el mecanismo de lectura/escritura del disco.
MODULO DE E/S
El control de transferencia de datos desde un dispositivo externo al procesador podría implicar la siguiente secuencia:
1. El procesador interroga al modulo de E/S para comprobar el estado del dispositivo conectado al mismo.
2. El modulo de E/S devuelve el estado del dispositivo.
3. Si el dispositivo esta operativo y preparado para transmitir, el procesador solicita la transferencia del dato
mediante una orden al modulo de E/S.
4. El modulo de E/S obtiene un dato del dispositivo externo.
5. Los datos de transfieren desde el modulo de E/S al procesador.
Una tarea esencial para un modulo de E/S es el almacenamiento temporal de datos. Los datos provenientes de la
memoria se envían al modulo de E/S en ráfagas rápidas. Los datos se almacenan temporalmente en el modulo de E/S y
después se envían al periférico a la velocidad de este.
Por ultimo un modulo de E/S a menudo es responsable de la detección de errores y de informar de estos errores al
procesador. Una clase de errores son los defectos mecánicos y electrónicos en el funcionamiento del dispositivo (papel
atascado, pista de disco en mal estado, etc.) y cuando recibe un byte de paridad el modulo comprueba para determinar
si ha producido un error.
El modulo se conecta al resto del computador a través de un conjunto de líneas. Los datos que se transfieren a y desde
el modulo se almacenan temporalmente en uno o mas registros de datos. Además, puede haber uno o mas registros de
estado que proporcionan información del estado presente. Un registro de estado también puede direccionar como un
registro de control, para recibir información de control del procesador. La lógica que hay en el modulo interactúa con el
procesador a través de una serie de líneas de control. Estas son las que utiliza el procesador para proporcionar las
ordenes al modulo de E/S. El modulo también debe ser capaz de reconocer y generar la direcciones asociadas a los
dispositivos que controla. Cada modulo de E/S tiene una dirección única o si controla mas de un dispositivo externo, un
conjunto único de direcciones. Por ultimo, el modulo de E/S posee la lógica especifica para la interfaz con cada uno de
los dispositivos que controla.
E/S PROGRAMADA
12
Acceso directo a memoria DMA: En este caso, el modulo de E/S y la memoria intercambian datos directamente sin la
intervención del procesador.
ORDENES DE E/S
Al ejecutar una instrucción relacionada con una E/S, el procesador proporciona una dirección especificando el modulo de
E/S particular y el dispositivo externo y una orden de E/S. Hay cuatro tipos de ordenes de E/S que puede recibir un
modulo de E/S cuando es diseccionado por el procesador:
• Control: Se utiliza para activar el periférico e indicarle que hacer.
• Test: Para comprobar diversas condiciones de estado. El procesador podrá comprobar si el periférico en
cuestión esta conectado y disponible para su uso.
• Lectura: Hace que el modulo de E/S capte un dato de un periférico y lo sitúe en un buffer interno. Después el
procesador puede obtener el dato solicitando que el modulo de E/S lo ponga en el bus de datos.
• Escritura: Hace que el modulo de E/S capte un dato del bus de datos y posteriormente lo transmita al periférico.
INSTRUCCIÓNES DE E/S
Normalmente habrá muchos dispositivos de E/S conectados al sistema a través de los módulos de E/S. Cada dispositivo
tiene asociado un identificador único o dirección. Cuando el procesador envía una orden de E/S, la orden contiene la
dirección del dispositivo deseado. Asi, cada modulo de E/S debe interpretar las líneas de dirección para determinar si la
orden es para el. (Ver de nitzel memoty mapped)
Hay distintas técnicas para identificar el modulo de E/S que solicito la interrupción. Una de estas se trata del “arbitraje de
bus”. Con esto un modulo de E/S debe, primero disponer del control del bus antes de poder activar la línea de petición de
interrupción. Así solo un modulo puede activar la línea en un instante. Cuando el procesador detecta la interrupción,
responde mediante una línea de reconocimiento de interrupción. Después el modulo que la solicito la interrupción sitúa
su vector en las líneas de datos.
Tanto la E/S programada como la de interrupciones presentan dos inconvenientes, el primero trata sobre la velocidad de
transferencia e E/S ya que este esta limitada por la velocidad a la cual el procesador puede comprobar y dar servicio a
un dispositivo, también el procesador debe dedicarse a la gestión de las transferencias de E/S, se debe ejecutar cierto
numero de instrucciones por cada transferencia de E/S.
13
El DMA requiere un modulo adicional en el bus del sistema, debe utilizar el bus solo cuando el procesador no lo necesita,
o debe forzar a este para que suspenda temporalmente su funcionamiento.
Cuando el procesador desea leer o escribir un bloque de datos envía una orden al modulo de DMA, incluyendo la
siguiente información:
• Si se solicita una lectura o una escritura utilizando la línea de control de lectura o escritura entre el procesador y
el modulo DMA.
• La dirección del dispositivo de E/S en cuestión indicada a través de las líneas de datos.
• La posición inicial de memoria a partir de donde se lee o se escribe, indicada a través de las líneas de datos y
almacenada por el modulo de DMA en su registro de direcciones.
• El numero de palabras a leer o escribir, también indicado a través de las líneas de datos y almacenado en el
registro de cuenta de datos.
Después el procesador continúa con otro trabajo. Ha delegado la operación de E/S al modulo de DMA, que se encargar
de ella. Cuando la transferencia se ha terminado, el modulo de DMA envía una señal de interrupción al procesador.
14
CAPITULO 7: SOPORTE DEL SISTEMA OPERATIVO
Un sistema operativo es un programa que controla la ejecución de los programas de aplicación y actua como interfaz
entre el usuario y el hardware del computador. Tiene dos objetivos:
• Comodidad: Hace que un computador sea mas fácil y cómodo de usar
• Eficiencia: Permite que los recursos del computador se utilicen de forma eficiente.
El SO dirige al procesador en el uso de otros recursos del sistema y en la Temporizacion de la ejecución de otros
programas. Una parte del SO esta en la memoria principal. Esta incluye el núcleo (kernel) que realiza las funciones mas
frecuentemente utilizadas por el sistema operativo.
El SO decide cuando un programa en ejecución puede usar un dispositivo de E/S y controla el acceso y el uso de los
ficheros, también debe determinar el tiempo que el procesador dedica a la ejecución de cada programa.
15
Sistema de colas multiprogramados
Incluso con la sucesión automática de trabajos que proporcionan los sistemas de colas sencillos, el procesador esta
parado a menudo. El problema surge porque los dispositivos de E/S son lentos en comparación con el procesador.
Cuando un trabajo necesita esperar debido a una E/S, el procesador puede conmutar al otro trabajo, que posiblemente
no estará esperando una E/S. Es mas, se podría expandir la memoria para disponer de tres, cuatro o mas programas
entre los que conmutar. Este proceso se conoce como multiprogramación o multitarea. Es el tema central de los
sistemas operativos modernos.
GESTION DE LA MEMORIA
Tenemos una cola a largo plazo de solicitudes de proceso, usualmente almacenados en disco, estas solicitudes se traen
a memoria, una a una, a medida que hay espacio disponible. Conforme terminan, los procesos se sacan de la memoria
principal. Ahora podría ocurrir que ninguno de los procesos en la memoria este en el estado preparado (por ejemplo
todos están esperando una operación de E/S). En lugar de permanecer parado, el procesador intercambia uno de esos
procesos, situándolo en el disco en una cola intermedia. Esta es una cola de procesos existentes que se han sacado
temporalmente de memoria. El sistema operativo trae entonces otro proceso de la cola intermedia o acepta una nueva
petición de proceso ed la cola de largo plazo. La ejecución continúa con el proceso recientemente activado.
DEFINICION DE PARTICIONES
• Particiones de tamaño fijo: Aunque las particiones son de tamaño fijo, no todas son de igual tamaño. Cuando un
proceso se introduce en memoria, se sitúa en la partición disponible mas pequeña que puede incluirlo.
• Particiones de tamaño variable: Cuando un proceso se introduce en memoria, se le asigna exactamente la
memoria que necesita. Esto puede llevar a situaciones en las que hay muchos huecos pequeños en memoria. A
medida que pasa el tiempo, la memoria se fragmenta mas y mas y empeora su utilización. Una técnica para
solucionar este problema es la compactación.
Una dirección lógica indica una posición relativa al comienzo del programa. Las instrucciones del programa contienen
solo direcciones lógicas. Una dirección física es la posición actual en la memoria principal, cuando el procesador
ejecuta un proceso, convierte las direcciones lógicas en físicas, sumando a cada dirección lógica la posición de
comienzo actual del proceso, llamada dirección base. (Ver figura 7.17 Pág. 244)
PAGINACION
Los trozos de un programa, conocidos como páginas se podrían asignar a los trozos de memoria disponibles, conocidos
como frames. Entonces el espacio de memoria despreciado por un proceso es, como mucho, una fracción de la última
pagina. La lista de marcos libres es gestionada por el sistema operativo. Esta mantiene una tabla de paginas para cada
proceso, la tabla indica el marco que aloja a cada pagina del proceso. Dentro del programa, cada dirección lógica esta
constituida por un numero de pagina y una dirección relativa dentro de la pagina.
MEMORIA VIRTUAL
Podemos hacer un mejor uso de la memoria cargando solo unas pocas páginas. Después si el programa salta a una
instrucción de una pagina que no esta en memoria principal o si el programa hace referencia a un dato de una pagina
que no en memoria, se produce un fallo de página. Esto indica al sistema operativo que debe cargar la página deseada.
El sistema operativo debe ser lo suficientemente ingenioso para manejar este esquema. Cuando se introduce una pagina
en memoria, debe sacar otra afuera. Si saca una pagina justo en el momento en que va a empezar a utilizarse, tendrá
que volver a introducirla en memoria casi inmediatamente. Si esto ocurre frecuentemente se produce una situación
conocida como hiperpaginacion. El SO intenta predecir, basándose en su historia reciente, que paginas se utilizaran con
menos probabilidad en el futuro próximo.
16
BUFFER DE TRADUCCION ANTICIPADA (TLB)
En principio toda referencia a memoria virtual puede ocasionar dos accesos a la memoria física: uno para captar el
elemento de la tabla de paginas apropiada y otro para captar el dato deseado. Como consecuencia, un esquema de
memoria virtual directo tendría el efecto de duplicar el tiempo de acceso a memoria. Para resolver este problema, la
mayoría de los esquemas de memoria virtual hacen el uso de una cache especial para los elementos de la tabla de
paginas, llamada “buffer de traducción anticipada” (TLB). Contiene aquellos elementos de la tabla de paginas a los que
se ha accedido as recientemente. (ver figura 7.19 Pág. 248)
SEGMENTACION
La segmentación permite que el programador vea la memoria constituida por múltiples espacios de direcciones o
segmentos. Los segmentos tienen un tamaño variable, dinámico. Las referencias a memoria se realizan mediante
direcciones constituidas por un numero de segmento y un desplazamiento.
Las ventajas que tiene son las siguientes:
• Si el programador no conoce a priori el tamaño que puede llegar a tener una estructura de datos particular, no es
necesario que lo presuponga. A la estructura de datos se le asigna su propio segmento y el sistema operativo lo
expandirá o lo reducirá según sea necesario.
• Permite modificar los programas y recompilarlos independientemente sin que sea necesario volver a enlazar y
cargar el conjunto entero de programas.
• Permite que varios procesos compartan segmentos.
• Se facilita la protección.
Estas ventajas no se tienen con la paginación, que es invisible para el programador.
El Pentium II incluye hardware tanto para segmentación como para paginación. Ambos mecanismos se pueden
desactivar, permitiendo elegir entre cuatro formas e ver la memoria:
• Memoria no segmentada y no paginada: La dirección virtual es la misma que la dirección física.
• Memoria paginada no segmentada: La memoria se ve como un espacio lineal de direcciones paginado. La
protección y la gestión de memoria se realiza a través de la paginación.
• Memoria segmentada no paginada: Se ve la memoria como un conjunto de espacios de direcciones lógicas. La
ventaja de esta imagen sobre el enfoque de la paginación estriba en que proporciona protección por debajo del
nivel del byte, si es necesario. Es mas, a diferencia de la paginación, garantiza que la tabla de traducción necesaria
(la tabla de segmentos) se encuentra almacenada en el chip cuando el segmento esta en memoria. De esta forma
la segmentación sin páginas da lugar a tiempo de acceso predecibles.
• Memoria segmentada paginada: Se utiliza la segmentación para definir particiones lógicas de memoria den el
control de acceso, mientras que la paginación se usa para gestionar la asignación de memoria dentro de las
particiones.
Segmentación
Cada dirección virtual consta de referencia al segmento de 16 bits y un desplazamiento de 32 bits. Dos bits de la
referencia al segmento se utilizan para el mecanismo de protección y los 14 bits restantes para especificar al segmento
en cuestión, Así con una memoria no segmentada, la memoria virtual de usuario es 2^32 = 4 Gbytes. Con una memoria
segmentada el espacio de memoria virtual total visto por el usuario es 2^46 = 64 terabytes.
Hay cuatro niveles de privilegio, desde el mas protegido (nivel 0) al menos protegido (nivel 3).
Paginación
Cuando se utiliza la segmentación, las direcciones utilizadas en los programas son direcciones virtuales y se convierten
en direcciones lineales, como se ha descrito. Cuando no se utiliza segmentación, los programas utilizan direcciones
lineales.
(Ver tabla 7.5 Pág. 253)
Para comprender la estructura de la dirección lineal es preciso tener en cuenta que el mecanismo de paginación del
PENTIUM II es de hecho una operación de búsqueda en una tabla de dos niveles. El primer nivel es un directorio de
páginas que contiene hasta 1.024 elementos. Esto divide los 4GB del espacio lineal de memoria en 1024 grupos de
páginas, cada uno con su propia tabla de páginas y cada uno de 4Mbytes de longitud.
El directorio de paginas para la tarea en curso esta siempre en memoria principal. Las tablas de páginas pueden estar en
memoria virtual.
Además el Pentium II hace uso del buffer de traducción rápida TLB. EL buffer puede contener 32 elementos de la pabla
de paginas.
(Ver figura 7.22 Pág. 254).
17
CAPITULO 8: LA UNIDAD CENTRAL DE PROCESAMIENTO
18
CAPITULO 9: REPERTORIOS DE INSTRUCCIONES: CARACTERISTICAS Y FUNCIONES
Los operandos fuente y resultado pueden estar en alguna de las siguientes áreas:
• Memoria principal: Como en las referencias a instrucciones siguientes, debe indicarse la dirección de memoria
principal o de memoria virtual.
• Registro de la CPU: Si solo existe un registro la referencia a el puede ser implícita, si existen varios cada registro
tendrá signado un numero.
• Dispositivo de E/S: La instrucción debe especificar el modulo y dispositivo de E/S para la operación. En el caso
de E/S asignadas en memoria, se dará otra dirección de memoria principal o virtual.
Ejemplos DE codops: ADD (sumar), SUB (restar), MPY (multiplicar), DIV (dividir), LOAD (cargar dato de memoria),
STOR (Almacenar en memoria).
Un lenguaje de alto nivel expresa operaciones de forma algebraica concisa, utilizando variables. Un lenguaje maquina
expresa las operaciones de una manera elemental, implicando operaciones de transferencia de datos a o desde
registros.
Los tipos de instrucciones pueden ser de procesamiento de datos (instrucciones aritméticas y lógicas), de
almacenamiento, de transferencia o de control (instrucciones de comprobación y de bifurcación).
(Ver figura 9.3 Pág. 317)
El Pentium II emplea el estilo “little endian”, es decir el byte menos significativo es almacenado en la dirección mas baja.
Entero de una palabra: 16 bits (complemento a dos)
Entero corto: 32 bits (complemento a dos)
Entero largo: 64 bits (complemento a dos)
Los códigos de condición de condición son C (acarreo), P (paridad), Z (cero), S (signo), O (desbordamiento).
La tecnología MMX del Pentium II comprende instrucciones muy optimizadas para tareas multimedia.
PILAS
Una pila es un conjunto ordenado de elementos en el que solo uno de ellos es accesible en un instante dado. El punto de
acceso se denomina cabecera de la pila. El numero de elementos de la pila, o longitud de la pila, es variable. Solo se
pueden añadir o eliminar elementos en la cabecera de la pila.
19
Para un funcionamiento correcto se necesitan tres direcciones, normalmente memorizadas en registros de la CPU:
Puntero de pila: Contiene la dirección del tope de la pila. Si se añade o se elimina un elemento de la pila el puntero se
incrementa o decremento.
Base de la pila: Contiene la dirección base del bloque reservado APRA la pila. Si se intenta un POP cuando la pila esta
vacía, se informa error.
Limite de la pila: Contiene la dirección del otro extremo del bloque reservado. Si se incrementa un PUSH cuando el
bloque esta utilizado en su totalidad, se informa error.
Una técnica alternativa es la notación denominada polaca inversa o posfijo. En esta notación, el operador se especifica
después de los operandos, por ejemplo: a + b seria a b +; a + (b x c) seria a b c x +; (a + b) x c seria a b + c x.
Por compleja que sea la expresión, no se requieren paréntesis en esta notación. La ventaja de la notación postfija es que
una expresión con este formato es fácil de evaluar usando una pila. Una expresión en notación postfija se recorre de
izquierda a derecha y para cada elemento de la expresión se aplican las siguientes reglas:
1. El el elemento es una variables o una constante, se introduce en la pila.
2. Si el elemento es un operador, se extraen de la cabecera de la pila los dos operandos, se realiza la operación y
se apila el resultado.
Tras recorrer la expresión completa, el resultado se encuentra en la cabecera de la pila.
20
CAPITULO 10: REPERTORIOS DE INSTRUCCIONES: MODOS DE DIRECCIONAMIENTO Y FORMATOS
DIRECCIONAMIENTO
Todas las arquitecturas de computadora ofrecen distintos modos de direccionamiento. La unidad de control sabe que
modo de direccionamiento se esta empleando en cada instrucción, lo puede saber porque codops diferentes emplearan
modos de direccionamientos distintos, también uno o mas bits del formato de instrucción pueden utilizarse como campo
de modo, este campo determina que modo de direccionamiento va a utilizarse.
La suma de la dirección de comienzo del segmento y la dirección efectiva produce una dirección lineal. Si esta se esta
empleando en paginación, esta dirección lineal debe pasar por un mecanismo de traducción de paginas para producir
una dirección física.
Cada registro e segmento retiene la dirección de comienzo del correspondiente segmento. Asociado con cada registro de
segmento visible para el usuario, hay un registro descriptor de segmento que registra los derechos de acceso APRA el
segmento, así como la dirección de comienzo y el limite del segmento. Además hay dos registros que pueden emplearse
para construir una dirección: el registro base y el registro índice.
• Modo inmediato: El operando se incluye en la instrucción
• Modo de operando en registro: El operando esta situado en un registro. Para instrucciones de tipo general, tales
como instrucciones de transferencia de datos, aritméticas, y lógicas, el operando puede ser uno de los registros
generales de 32, 16, u 8 bits, para operaciones con coma flotante, los operando de 64 bits forman utilizando dos
21
registros de 32 bits como una pareja. Hay también algunas instrucciones que hacen referencia a los registros de
segmento
• Modo de desplazamiento: El desplazamiento del operando esta incluido, forma parte de la instrucción, como
desplazamiento de 8, 16, o 32 bits. Con segmentación, todas las direcciones dadas en instrucciones hacen
referencia a desplazamientos dentro de registros. El modo de direccionamiento con desplazamiento se puede
encontrar en pocas maquinas, ya que implica instrucciones largas.
• Modos base con desplazamiento: La instrucción incluye un desplazamiento que hay que sumar a un registro
base, que puede ser cualquiera de los registros de uso general.
• Modo de desplazamiento con índice escalado: La instrucción incluye un desplazamiento a suma r a un registro,
llamado en este caso registro índice. El registro índice puede ser cualquiera de los registros generales, excepto el
ESP, que normalmente se emplea para procesamientos de pila. Para calcular la dirección efectiva, el contenido del
registro índice se multiplica por un factor de escala 1, 2, 4, u 8, y se suma después un desplazamiento.
• Modo base con índice y desplazamiento: Suma los contenidos de los registros base e índice, y un
desplazamiento, para formar la dirección efectiva. Pueden ser cualquiera de los registros generales.
• Modo base con índice escalado y desplazamiento: Suma el contenido del registro índice multiplicado por un
factor de escala, con el contenido del registro base y el desplazamiento.
• Direccionamiento relativo: Puede emplearse en instrucciones de transferencia del control. Se suma un
desplazamiento al valor del contador del programa que apunta a la siguiente instrucción.
Las instrucciones se componen de entre cero y cuatro prefijos de instrucción opcionales, un codop de uno o dos bytes,
una especificación de dirección opcional que consta del byte MOD R/M y del byte del índice de escala SCALE INDEX, un
desplazamiento opcional y un campo inmediato opcional.
Consideremos los bytes de prefijo:
• Prefijos de instrucción: El prefijo, si esta presente, contiene el prefijo LOCK o uno de los refijos de repetición. El
prefijo LOCK se utiliza para asegurar el uso exclusivo de la memoria compartida en entornos multiprocesador. Los
prefijos de repetición permiten al Pentium 2 procesar cadena mucho mas rápido que con un bucle software
habitual. REP, REPE, RPEZ, REPNE, REPNZ. Un código de repetición se ejecuta hasta que el registro CX llegue a
cero o hasta que se cumpla una determinada condición.
• Segmento explicito: Especifica de forma explicita que registro de segmento deberá utilizar una instrucción,
prevaleciendo sobre la selección de registro de implícito generada por el Pentium 2 para dicha instrucción.
• Tamaño de la dirección: EL procesador puede direccionar memoria utilizando direcciones de 16 o 32 bits, el
tamaño de la dirección define el tamaño de desplazamiento indicado en las instrucciones y el tamaño de los
desplazamientos de direcciones generado durante el calculo de la dirección efectiva EA. Uno de los tamaños se
considera implícito y el prefijo de tamaño de la dirección conmuta entre la generación de una dirección de 32bits o
una de 16 bits.
• Tamaño del operando: De manera similar, una instrucción tiene, implícitamente un tamaño de operando de 16 o
32 bits, el prefijo de operando conmuta entre 32 o 16.
23
EL CICLO DE INSTRUCCIÓN
FLUJO DE DATOS
Durante el ciclo de captación se lee una instrucción de la memoria. PC contiene la dirección de la siguiente instrucción
que hay que captar. Esta dirección es llevada a MAR y puesta en el bus de direcciones. La unidad de control solicita una
lectura de memoria y el resultado se pone en el bus de datos, se copia en MBR y después se lleva a IR. Mientras tanto,
PC se incrementa en 1 como preparación para la siguiente captación.
Una vez concluido el ciclo de captación, la unidad de control examina los contenida de IR para determinar si contiene un
campo de operando que use direccionamiento indirecto. Si es así se lleva a cabo el ciclo indirecto.
En el ciclo de interrupción, el contenido de PC se transfiere a MBR para ser escrito en memoria. La posición de memoria
especial reservada para este propósito se carga en MAR desde la unidad de control. PC se carga con la dirección e la
rutina de interrupción. Como resultado, el siguiente ciclo de instrucción comenzara captando la instrucción oportuna.
SEGMENTACION DE INSTRUCCIONES
La segmentación de cauce, se llama así porque como en una tubería o cauce, en un extremo se aceptan nuevas
entradas antes de que algunas entradas aceptadas con anterioridad aparezcan como salidas en el otro extremo.
Hay periodos en la ejecución de una instrucción en los que no se accede a memoria principal. Este tiempo podía
utilizarse la siguiente instrucción en paralelo con la ejecución de la actual. El cauce tiene dos etapas independientes. La
primera etapa capta una instrucción y la almacena en un buffer. Cuando la segunda etapa ejecuta la instrucción, la
primera etapa utiliza algún ciclo de memoria no usado para captar y almacenar la siguiente instrucción A esto se lo llama
precaptacion de instrucción.
El tiempo de ejecución será generalmente mas largo que el tiempo de captación. La ejecución implicara la lectura y
almacenamiento de operandos y la realización de alguna operación. Así la etapa de captación puede tener que esperar
algún tiempo antes de que pueda vaciar su buffer.
Una instrucción de bifurcación condicional hace que la dirección de la siguiente instrucción a captar sea desconocida. De
este modo, la etapa de captación debe esperar hasta que reciba la dirección de la siguiente instrucción desde la etapa
de ejecución. LA etapa de ejecución puede entonces tener que esperar mientras se capta la siguiente instrucción.
Aunque estos factores reduzcan la efectividad potencial del cauce de dos etapas, se produce alguna alteración. Para
conseguir una mayor aceleración, el cauce debe tener más etapas:
• Captar instrucción (Fetch Instruction, FI): Leer la supuesta siguiente instrucción en un buffer.
• Decodificar instrucción (Decode Instruction, DI): Determinar el código de operación y los campos de operando
• Calcular operandos (Calcule Operands, CO): Calcular la dirección efectiva de cada operando fuente. Esto puede
involucrar direccionamiento mediante un desplazamiento, indirecto a través de registro, indirecto u otras formas de
calcular la dirección.
• Ejecutar instrucción (Execute Instruction, EI): Realizar la operación indicada y almacenar el resultado, si lo hay,
en la posición de operando destino especificada.
• Escribir operando (Write Operand, WO): Almacenar el resultado en memoria.
(Ver y leer Pág. 408, y ver figura 11.13 Pág. 409)
La etapa CO puede depender del contenido de un registro que podría verse alterado por una instrucción previa que aun
este en el cauce. Podrían ocurrir otros conflictos con registros y con memoria. El sistema tiene que incluir lógica para
tener en cuanta este tipo de conflictos.
24
En cada etapa del cauce hay algún gasto extra debido a la transferencia de datos de buffer y a la realización de varias
funciones de preparación y distribución. Este gasto adicional puede prolongar sensiblemente el tiempo de ejecución total
de una instrucción aislada. Esto es importante cuando las instrucciones secuénciales son lógicamente dependientes,
bien a causa de un uso abundante de bifurcaciones, bien debido a dependencias de acceso a memoria.
La cantidad de lógica de control necesario para manejar dependencias de memoria y registros y para optimizar el uso del
cauce aumenta enormemente con el número de etapas.
TRATAMIENTO DE SALTOS
El principal obstáculo es la instrucción de bifurcación condicional. Hasta que la instrucción no se ejecuta realmente es
imposible determinar si el salto se producirá o no. Hay varias aproximaciones:
• Flujos múltiples: En las instrucciones de bifurcación una solución es captar las dos instrucciones utilizando los
dos caminos. Presenta dos problemas, hay retardos y en el cauce pueden entrar instrucciones de bifurcación antes
de que se resuelva la bifurcación inicial.
• Precaptar el destino de salto: Se precapta la instrucción de destino de salto y se guarda hasta que se ejecute la
instrucción de bifurcación.
• Buffer de bucles: Es una memoria pequeña de gran velocidad que contiene las n instrucciones captadas mas
recientemente. Si se va a producir un salto, el hardware comprueba si el destino de salto esta en el buffer y en ese
caso la siguiente instrucción se capta del buffer. El buffer es similar a una cache de instrucciones, la diferencia en
que el buffer guarda instrucciones consecutivas, es mucho más pequeña y de menos coste.
• Predicción de saltos: Las técnicas para predecir si un salto se va a producir son las siguientes: Predecir que
nunca salta, predecir que siempre salta, predecir según el código de operación, conmutar saltar/no saltar, tabla de
historia de saltos. Las tres primeras no dependen de la historia de la ejecución que haya tenido lugar hasta la
instrucción de bifurcación condicional. Los dos últimos dependen de la historia de la ejecución.
En las dos primeras una asume que el salto no se producirá y continua captando instrucciones secuencialmente y
la otra que el salto se producirá y siempre capta la instrucción de destino del salto.
Las estrategias de bifurcación dinámicas intentan mejorar la exactitud e las predicciones, registrando la historia de
las instrucciones de bifurcación condicional en un programa. Cuando la instrucción en cache es reemplazada, su
historia se pierde. Otra posibilidad es mantener una pequeña tabla para las instrucciones de la bifurcación
ejecutadas recientemente. Con un único bit, todo lo que no puede registrar es si la última instrucción que se ejecuto
dio lugar a un salto o no. Si se usa con dos bits, se pueden emplear para registrar el resultado de las dos últimas
veces que se ejecuto la instrucción asociada.
La tabla de historia de de saltos en una pequeña memoria cache asociada con la etapa de captación de instrucción
del cauce. Cada elemento de la tabla consta de tres campos: la dirección de una instrucción e bifurcación, un
determinado numero de bits de historia que guardan el estado de uso de esa instrucción e información sobre la
instrucción destino. Cuando se encuentra una instrucción de bifurcación condicional que no esta en la tabla, se
añade a la tabla y uno de los elementos existentes se desecha, usando uno de los algoritmos de reemplazo de
cache.
• Salto retardado: Se pueden mejorar las prestaciones de un cauce reordenando automáticamente las
instrucciones de un programa, de forma que las instrucciones de salto tengan lugar después e lo realmente
deseado.
• Captación (Fetch): Las instrucciones se captan de la cache o de la memoria externa y se colocan en uno de los
buffer de búsqueda de 16 bytes.
• Etapa de decodificación 1: Del código de operación y modo de direccionamiento
• Etapa de decodificación 2: Expande cada código e operación en señales de control para la ALU.
• Ejecución: Incluye operaciones de la ALU, acceso a cache y actualización de registros.
• Escritura: Cuando es necesario actualiza las registros e indicadores de estado.
EL PROCESADOR PENTIUM
El registro EFLAGS indica el estado del procesador y ayuda a controlar su funcionamiento. En el registro hay bits de
control: Indicador de trampa, indicador de habilitación de interrupciones, indicador de dirección, nivel de privilegio de E/S,
indicador de reanudación, verificación de alineación, indicador de identificación.
El Pentium II emplea 4 registros de control de 32 bits para controlar varios aspectos del funcionamiento del procesador.
El registro CR0 contiene indicadores de control del sistema, que controlan modos o indican estados que se aplican
generalmente al procesador, en lugar de la ejecución de una tarea individual. Los indicadores son los siguientes:
Habilitación de protección, coprocesador presente, emulación, tarea conmutada, tipo de coprocesador, error numérico,
protección de escritura, mascada de alineación, no escritura inmediata, inhabilitación de cache, paginación.
CR2 y CR3 se usan para paginación y CR4 nueve bits de control adicional.
Los registros MMX del Pentium II utilizan varios tipos de datos de 64 bits. Las instrucciones MMX utilizan campos de
direccionamiento de registros de 3 bits, de modo que son posibles ocho registros MMX.
Los registros de coma flotante existentes se usan para almacenar los valores MMX. El uso MMX tiene los siguientes
caracteristicas: En las operaciones MMX los registros se acceden directamente (en operaciones de coma flotante se
tratan como una pila), la instrucción EMMX (abandonar el estado MMX) es importante que el programador lo inserte al
final de un bloque de MMX para que las operaciones de coma flotante posteriores funcionen correctamente.
PROCESAMIENTO DE INSTRCCIONES
Una interrupción se genera por una señal de hardware y puede ocurrir en momentos aleatorios durante la ejecución de
un programa. Una excepción se genera desde el software y es provocada por la ejecución de una instrucción. Hay dos
fuentes de interrupciones y dos fuentes de excepciones:
Interrupciones:
• Interrupciones enmascarables: Las recibe el procesador por la patilla INTR. El procesador no reconoce una
interrupción enmascarable a no ser que el indicador de habilitación de interrupciones este en uno.
• Interrupciones no enmascarables: Las recibe el procesador por la patilla NMI. No se puede evitar el
reconocimiento de tales interrupciones.
Excepciones:
• Excepciones detectadas por el procesador: Se producen cuando el procesador encuentra un error mientras
intenta ejecutar una instrucción
• Excepciones programadas: Hay instrucciones que generan una excepción (INTO, BOUND, etc.)
Cada tipo de instrucción tiene asignado un numero que se usa para indexar en la tabla de vectores de interrupción. La
posición de los numeros de vector dentro de la tabla no refleja ninguna prioridad. En orden decreciente de prioridad son
las siguientes:
• Clase 1: Interrupciones en la instrucción previa (vector numero 1)
• Clase 2: Interrupciones externas (2, 32-255)
• Clase 3: Fallos captando la siguiente instrucción (3, 14)
• Clase 4: Fallos decodificando la siguiente instrucción (6, 7)
• Clase 4: Fallos ejecutando una instrucción (0, 4, 5, 8, 10-14, 16, 17)
Cuando una interrupción tiene lugar y es reconocida por el procesador, tiene lugar la siguiente secuencia de eventos:
1. Si la transferencia supone un cambio del nivel de privilegio, los contenidos actuales del registro de
segmento e pila ampliado (ESP) se introduce en la pila
2. El valor actual del registro EFLAG se introduce en la pila
26
3. Los indicadores de interrupciones IF y trampa TF se ponen a cero. Ello inhabilita las interrupciones INTR
y la interceptación o modo paso a paso.
4. Los contenidos actuales del puntero de segmento de código CS y del puntero de instrucción IP o EIP se
introducen en la pila.
5. Si la interrupción viene acompañada por un código de error, este se introduce en la pila.
6. Los contenidos del vector de interrupción se captan y se cargan en los registros CS e IP o EIP. La
ejecución continua por la rutina de servicio de interrupción.
27
CAPITULO 12: COMPUTADORES DE REPERTORIO REDUCIDO DE INSTRUCCIONES
RISC es el computador de repertorio reducido de instrucciones. Sus elementos clave son: Un gran número de registros
de uso general, el uso de tecnología para optimizar el uso de registros, un repertorio de instrucciones limitado y sencillo,
énfasis en la optimización e la segmentación de instrucciones.
Los lenguajes de programación de alto nivel (HLL) permiten al programador expresar los algoritmos de manera mas
conocida, se encargan parte de los programadores y a menudo, apoyan de manera natural al diseño orientado a objetos.
El problema es el salto semántico: la diferencia entre las operaciones que proporcionan los HLL y los que proporcionan
la arquitectura del computador.
Teniendo en cuenta los conceptos que caracterizan la arquitectura RISC.
Primero, el uso de un gran numero de registros, o un compilador que optimiza el tratamiento de estos, se debe para
optimizar las referencias a operandos. En segundo lugar, hay que prestar una cuidadosa atención al diseño de los
cauces de instrucciones, debido a la alta proposición de instrucciones de bifurcación condicional y de llamado o
procedimiento, una gran proporción de instrucciones se precaptan, pero nunca llegan a ser ejecutadas.
La razón de almacenamiento en registros es que estos construyen el dispositivo de almacenamiento más rápido
disponible. El banco de registros esta en el mismo chip que la ALU y la UC y emplea direcciones mucho mas cortas. La
aproximación por software consiste en confiar al compilador la maximización del uso de registros y la aproximación por
hardware consiste sencillamente en usar más registros.
La ventana de registro se divide en tres áreas de tamaño fijo. Los registros de parámetros contienen parámetros pasados
al procedimiento en curso desde el procedimiento que lo llamo, y los resultados a devolver a este. Los registros locales
se usan para variables locales. Los registros temporales se usan para intercambiar parámetros y resultados con el
siguiente nivel mas bajo (el procedimiento llamado por el procedimiento en curso).
Las variables globales son aquellas a las que accede, las de un procedimiento. El compilador puede asignar posiciones
de memoria a las variables declaradas como globales, o se puede incorporar al procesador un conjunto de registros
globales, fijos en cuanto a número y accesibles a rodos los procedimientos.
El banco de registros organizado en ventanas funciona como un buffer pequeño y rápido, es por ello que se comporta de
manera muy similar a una cache. Un sistema basado en cache será notablemente más lento por la sobrecarga de
direccionamiento.
Lo esencial de la labor de direccionamiento es decir que cantidades tienen que ser asignadas a registros en cualquier
punto determinado del programa. La técnica mas usada comúnmente en los compiladores para RISC se conoce como
coloreado de grafos.
La labor del escritor de compiladores es generar una secuencia de instrucciones máquina para cada sentencia HLL. Si
existen instrucciones máquina que se parezcan a sentencias del HLL, la tarea se simplifica.
Aunque hay diferentes aproximaciones a la arquitectura de repertorio reducido de instrucciones, tiene ciertas
características:
• Una instrucción por ciclo: Un ciclo de maquina se define como el tiempo que se tarda en captar dos operandos desde
dos registros, realizar una operación de la ALU y almacenar el resultado en un registro.
• Operaciones registros a registro: La mayoría de las operaciones debe ser de este modo, con excepción de LOAD y
STORE para acceder a memoria.
• Modos de direccionamiento sencillos: Casi todas las instrucciones RISC usan el sencillo direccionamiento a registros.
• Formatos de instrucciones sencillos: La longitud de las instrucciones es fija y alineada en los límites de una palabra.
Con campos fijos, la decodificación del código de operación y el acceso a los operandos en registros pueden tener
lugar simultáneamente.
28
SEGMENTACION DE CAUCE EN RISC
Un ciclo de instrucción tiene las fases de captación de instrucción y ejecución (realiza una operación de la ALU con
registros como entrada y salida).
Las operaciones de carga y almacenamiento requieren tres fases: Captación de instrucción, ejecución (calculo de la
dirección de memoria) y memoria (operación de registro a memoria o viceversa). Como la fase de ejecución usualmente
implica una operación de la ALU, puede ser mas largo. Es ese caso podemos dividirla en dos subyaces: lectura del
banco de registros y operación de la ALU y escritura en el registro.
(Ver figura 12.6 Pág. 458 “efectos de la segmentación”)
29
CAPITULO 13: PARALELISMO A NIVEL INSTRUCCIONES Y PROCESADORES SUPERESCALARES
VISION DE CONJUNTO
Un procesador “superescalar” es aquel que unas múltiples cauces de instrucciones de manera independiente. El
concepto puede llevarse mas lejos, permitiendo que las instrucciones se ejecuten en un orden diferente al del programa.
La supersegmentación aprovecha el hecho de que muchas etapas del cauce se realizan tareas que requieren menos de
la mitad de un ciclo de reloj. El cauce tiene cuatro etapas: Captación de instrucción, decodificación de la operación,
ejecución de la operación y escritura del resultado.
Aunque se ejecuten varias instrucciones concurrentemente, solo hay una instrucción en la etapa de ejecución en un
determinado instante.
La expresión paralelismo a nivel de instrucciones se refiere al grado en el que las instrucciones de un programa se
pueden ejecutar en paralelo, existen cinco limitaciones:
• Dependencia de datos verdadera: La segunda instrucción necesita un dato producido por la primera instrucción.
Si no hay dependencia se pueden captar y ejecutar dos instrucciones en paralelo. En caso contrario se retarda la
segunda instrucción tantos ciclos de reloj como sea necesario para eliminar la dependencia.
• Dependencia relativa al procedimiento: La presencia de bifurcaciones complica el funcionamiento del cauce.
También con las instrucciones de longitud variable estas eran de decodificarse parcialmente antes e captar la
siguiente instrucción.
• Conflictos en los recursos: Es una pugna de dos o mas instrucciones por el mismo recurso al mismo tiempo
• Dependencia de salida: La misma instrucción produce un valor que se usa en la segunda.
• Antidependencia: La segunda instrucción destruye un valor que usa la primera.
CUESTIONES RELACIONADAS CON EL DISEÑO
El paralelismo a nivel instrucciones existe cuando las secuencias de instrucciones son independientes. El paralelismo de
la maquina depende del numero de cauces paralelos al mismo tiempo.
Las políticas de emisión de instrucciones se refieren al protocolo usado para emitir instrucciones. Las categorías son las
siguientes:
• Emisión en orden y finalización en orden: Emitir instrucciones en el orden exacto en que lo haría una ejecución
secuencial y escribir los resultados en ese mismo orden.
• Emisión en orden y finalización desordenada: Puede captar cualquier numero ed instrucciones en la etapa de
ejecución en un momento dado, hasta alcanzar el mayor grado de paralelismo de la maquina. Es más difícil
ocuparse de las interrupciones y excepciones pues el procesador debe asegurar que la reanudación tiene en
cuenta que, en el momento de la interrupción, algunas instrucciones posteriores a la instrucción que provoco dicha
instrucción pueden haber finalizado ya.
• Emisión desordenada y finalización desordenada: Para permitir la emisión desordenada es necesario un buffer
llamado ventana de instrucciones. Cuando un procesador termina de decodificar una instrucción coloca esta en la
ventana de instrucciones. Mientras el buffer no se llene, el procesador puede continuar captando y decodificando
nuevas instrucciones. Cualquier instrucción puede emitirse siempre que la unidad funcional que necesite este
disponible y que no haya ningún conflicto ni dependencia.
Con la estrategia de salto retardado permite al procesador calcular el resultado ed las instrucciones de bifurcación
condicional, antes e que se precapte cualquier instrucción inservible. Con este método, el procesador siempre ejecuta la
instrucción que sigue inmediatamente a la bifurcación manteniendo al cauce lleno.
Elementos necesarios para la implementación superescalar:
• Estrategias de captación de instrucciones que capten simultáneamente múltiples instrucciones a menudo
prediciendo los resultados de las instrucciones de bifurcación condicional y captando mas allá de ellas. Estas
funciones requieren la utilización de múltiples etapas d captación y descodificación y lógica de predicción de saltos.
• Lógica para determinar dependencias verdaderas entre valores de registros y mecanismos para comunicar esos
valores a donde sean necesarios durante la ejecución.
• Mecanismos para iniciar o emitir múltiples instrucciones en paralelo
• Recursos para la ejecución en paralelo de múltiples instrucciones que incluyan múltiples unidades funcionales
segmentadas y jerarquías de memoria capaces de atender múltiples referencias a memoria
• Mecanismos para entregar el estado del procesador en un orden correcto.
30
PENTIUM II
El Pentium II usa una estrategia de predicción dinámica de saltos basada en la historia de las ejecuciones. Se utiliza un
buffer de destino de saltos (BTB) que guarda información sobre las instrucciones de bifurcación encontradas
recientemente. El BTB de Pentium II, esta organizado como una cache asociativa por conjunto de cuatro más con 512
líneas. Las bifurcaciones condicionales que no tienen historia en el BTB, se predicen utilizando un algoritmo de
predicción estático.
31