jueves, 30 de mayo de 2013

1 Unidad 
 Modelo de arquitecturas de cómputo.



1.1. Modelos de arquitecturas de cómputo: 
                      clásicas, segmentadas, de multiprocesamiento. 




 Clásicas.

El Concepto de von Neumann.

Los primeros computadores se programaban en realidad recableándolos. Esto prácticamente equivalía a reconstruir todo el computador cuando se requería de un nuevo programa. La tarea era simplificada gracias a un panel de contactos (muy similar al de los primeros conmutadores telefónicos que eran atendidos por operadoras, y que hoy en día sólo llegamos a ver en viajes películas en blanco y negro. Ver fig. 1) con el que era posible enlazar circuitos para crear secciones dedicadas a una actividad específicas. La programación del computador se llevaba a cabo, literalmente, reconstruyéndolo.


Fig 1.- ENIAC, primer computador electrónico y su panel de conexiones



Mientras que el recablear al computador establecía una clara distinción entre los datos (representados por los estados o señales eléctricas que serín mantenidas por los relevadores o a través de los bulbos que conformaban al computador) y el programa (las conexiones que serían establecidas entre estos componentes del hardware) la labor de "programación" requería sino del propio creador del computador si a un verdadero experto y conocedor de electrónica, principios de lógica digital y del problema mismo. Esto vino a cambiar con el concepto del programa almacenado, un concepto teórico muy importante que fue establecido por el matemático John von Neumann el 30 de junio de 1945 en un borrador sobre el diseño de la EDVAC. A diferencia de los primeros computadores, von Neumann proponía que tanto el programa como sus datos fueran almacenados en la memoria del computador. Esto no solo simplificaba la labor de programación al no tener que llevar a cabo el recableado del computador sino que además libraba y generalizaba el diseño del hardware para hacerlo independientede cualquier problema y enfocado al control y ejecución del programa. Este concepto fue tan importante y decisivo que dio lugar al concepto de la arquitectura de von Neumann, aún presente en nuestros días.

La arquitectura de von Neumann se compone de tres elementos:
  1. La Unidad Central de Procesamiento (CPU, por sus siglas en inglés), que es considerada como el cerebro y corazón del computador. Internamente consiste de una Unidad Aritmético-Lógica (ALU), un conjunto de registros y una Unidad de Control (CU). La ALU es donde se realizan todas las operaciones que involucran un procesamiento matemático (particularmente aritmético) o lógico (operaciones booleanas). Los registros permiten el almacenammiento de datos para estas operaciones y sus resultados. En la CU es donde se ejecutan todo el resto de las operaciones (decisión, control, movimiento de datos). Una CPU con todos estos elementos implementada en un solo chip recibe el nombre de microprocesador.
  2. La memoria, que es donde datos y programa es almacenado. La memoria puede ser visto como un arreglo unidimensional finito en la que cada localidad es identificada por un valor asociado a su posición y que es comunmente llamado dirección. Existen diversos tipos de memoria, identificados por el tipo de tecnología usada, aunque para un computador son generalmente clasificadas en dos grandes grupos por tipo de uso al que de destina. La memoria RAM (Random Access Memory, Memoria de Acceso Aleatorio) y que es aquella destinada al almacenamiento de datos y programas (incluyendo al sistema operativo), es considerada temporal o de tipo volátil ya que pierde si contenido cuendo el computador es apagadoo reinicializado. La memoria ROM es aquella de tipo permanente, aun cuando el computador sea desenergizado mantendrá su contenido. Es usada principalmente para el almacenamiento de pequeños programas destinados a la adminsitración básica de recursos, especialmente de entrada y salida.
  3. Las interfaces de entrada y salida (I/O). destinadas a liberar de trabajo a la CPU en la comunidación con dispositivos de entrada (teclados, ratones), salida (impresoras) y entrada-salidas (discos, cintas).

Estos tres elementos están interconectados a través de un conjunto de líneas que llevan instrucciones (control bus), datos (data bus) y que permiten dar los valores de direcciones de memoria y dispositivos (memory bus).


Fig 2.- Esquema de la arquitectura de von Neumann.




La arquitectura von Neumann se refiere a las arquitecturas de computadoras que utilizan el mismo dispositivo de almacenamiento tanto para las intrucciones como para los datos (a diferencia de la arquitectura Harvard). El término se acuñó en el documento First Draft of a Report on the EDVAC (1945), escrito por el conocido matemático John von Neumann, que propuso el concepto de programa almacenado. Dicho documento fue redactado en vistas a la construcción del sucesor de la computadora ENIAC, y su contenido fue desarrollado por Presper Eckert, John Mauchly, Arthur Burks, y otros durante varios meses antes de que Von Neumann redactara el borrador del informe.
Los ordenadores con arquitectura Von Neumann constan de cinco partes: La unidad aritmético-lógica o ALU, la unidad de control, la memoria, un dispositivo de entrada/salida y el bus de datos que proporciona un medio de transporte de los datos entre las distintas partes.



Un ordenador con arquitectura von Neumann realiza o emula los siguientes pasos secuencialmente:
  1. Obtiene la siguiente instrucción desde la memoria en la dirección indicada por el contador de programa y la guarda en el registro de instrucción.
  2. Aumenta el contador de programa en la longitud de la instrucción para apuntar a la siguiente.
  3. Descodifica la instrucción mediante la unidad de control. Ésta se encarga de coordinar el resto de componentes del ordenador para realizar una función determinada.
  4. Se ejecuta la instrucción. Ésta puede cambiar el valor del contador del programa, permitiendo así operaciones repetitivas. El contador puede cambiar también cuando se cumpla una cierta condición aritmética, haciendo que el ordenador pueda 'tomar decisiones', que pueden alcanzar cualquier grado de complejidad, mediante la aritmética y lógica anteriores.
  5. Vuelve al paso 1.
Hoy en día, la mayoría de ordenadores están basados en esta arquitectura, aunque pueden incluir otros dispositivos adicionales, (por ejemplo, para gestionar las interrupciones de dispositivos externos como ratón, teclado, etc).


Arquitectura Harvard

El término Arquitectura Harvard originalmente se refería a las arquitecturas de computadoras que utilizaban dispositivos de almacenamiento físicamente separados para las instrucciones y para los datos (en oposición a la Arquitectura von Neumann). El término proviene de la computadora Harvard Mark I, que almacenaba las instrucciones en cintas perforadas y los datos en interruptores.
Todas las computadoras constan principalmente de dos partes, la CPU que procesa los datos, y la memoria que guarda los datos. Cuando hablamos de memoria manejamos dos parámetros, los datos en sí, y el lugar donde se encuentran almacenados (o dirección). Los dos son importantes para la CPU, pues muchas instrucciones frecuentes se traducen a algo así como "coge los datos de ésta dirección y añádelos a los datos de ésta otra dirección" , sin saber en realidad qué es lo que contienen los datos.
En los últimos años la velocidad de las CPUs ha aumentado mucho en comparación a la de las memorias con las que trabaja, así que se debe poner mucha atención en reducir el número de veces que se accede a ella para mantener el rendimiento. Si, por ejemplo, cada instrucción ejecutada en la CPU requiere un acceso a la memoria, no se gana nada incrementando la velocidad de la CPU - este problema es conocido como 'limitación de memoria'.
Se puede fabricar memoria mucho más rápida, pero a costa de un precio muy alto. La solución, por tanto, es proporcionar una pequeña cantidad de memoria muy rápida conocida con el nombre de caché. Mientras los datos que necesita el procesador estén en la caché, el rendimiento será mucho mayor que si la caché tiene que obtener primero los datos de la memoria principal. La optimización de la caché es un tema muy importante de cara al diseño de computadoras.
La arquitectura Harvard ofrece una solución particular a este problema. Las instrucciones y los datos se almacenan en cachés separadas para mejorar el rendimiento. Por otro lado, tiene el inconveniente de tener que dividir la cantidad de caché entre los dos, por lo que funciona mejor sólo cuando la frecuencia de lectura de instrucciones y de datos es aproximadamente la misma. Esta arquitectura suele utilizarse en DSPs, o procesador de señal digital, usados habitualmente en productos para procesamiento de audio y video.




La arquitectura Harvard dispone de dos memorias independientes una, que contiene sólo instrucciones y otra, sólo datos. Ambas disponen de sus respectivos sistemas de buses de acceso y es posible realizar operaciones de acceso (lectura o escritura) simultáneamente en ambas memorias. Figura 1.3.


Figura 1.3. La arquitectura Harvard dispone de dos memorias independientes para datos y para instrucciones, permitiendo accesos simultáneos.




ARQUITECTURA VECTORIAL


El encadenamiento aumenta la velocidad de proceso, pero aún se puede mejorar añadiendo técnicas como el supersescalado. Esta técnica permite hacer paralelas las mismas etapas sobre instrucciones diferentes. Un procesador superescalar puede ejecutar más de una instrucción a la vez. Para ésto es necesario que existan varias unidades aritmético-lógicas, de punto flotante y de control. El proceso que sigue el micro es transparente al programa, aunque el compilador puede ayudar analizando el código y generando un flujo de instrucciones optimizado. Veamos cómo se ejecutarían las instrucciones en un procesador superescalar de que tiene duplicadas las subunidades que lo componen:


Aunque esto mejora la velocidad global del sistema, los conflictos de datos crecen. Si antes las instrucciones se encontraban muy próximas, ahora se ejecutan simultáneamente  Esto hace necesario un chequeo dinámico para detectar y resolver los posibles conflictos.

ARQUITECTURA PIPE-LINE

Paralelismo Temporal: Pipe-Line “Lineal”
La arquitectura pipe-line se aplica en dos lugares de la maquina, en la CPU y en la UAL.
Veamos en que consiste el pipe-line y tratemos de entender porque el pipe-line mejora el rendimiento de todo el sistema.
Veamos una CPU no organizada en pipe-line:

Si se trata de una instrucción a ser ejecutada por la ALU podemos decir que la CPU realiza a lo largo del ciclo de maquina estas 5 tareas.
Una vez que termina de ejecutar una instrucción va a buscar otra y tarda en ejecutarla un tiempo T, es decir cada T segundos ejecuta una instrucción.




Arquitectura PIPE-LINE.
Ya hemos mencionado que una de las formas de lograr operaciones concurrentes en un procesador se utilizan dos técnicas básicas: paralelismo y pipelining.
El paralelismo conseguía la concurrencia multiplicando la estructura del hardware tantas veces como sea posible, de modo que las diferentes etapas del proceso se ejecuten simultáneamente.
Pipelining consiste en desdoblar la función a realizarse en varias partes, asignándole al hardware correspondiente a cada una de las partes también llamadas etapas. Así como el agua fluye a través de una tubería (pipeline) las instrucciones o datos fluyen a través de las etapas de un computador digital pipeline a una velocidad que es independiente de la longitud de la tubería (numero de etapas del pipeline) y depende solamente de la velocidad a la cual los datos e instrucciones pueden ingresar al pipeline.
Esta velocidad a su vez depende del tiempo que tarde el dato en atravesar una etapa. Este tiempo puede ser significativo ya que el computador no solo desplaza los datos o instrucciones de etapa en etapa sino que en cada una de ellas se realiza alguna operación sobre los mismos. Como ejemplo en el caso de las instrucciones tendremos operaciones de búsqueda, decodificación y ejecución.

Pipeline Físico:


 Arquitecturas Segmentadas.

Las arquitecturas segmentadas o con segmentación del cauce buscan mejorar el desempeño realizando paralelamente varias etapas del ciclo de instrucción al mismo tiempo. El procesador se divide en varias unidades funcionales independientes y se dividen entre ellas el procesamiento de las instrucciones


Arquitecturas de multiprocesamiento.
Cuando se desea incrementar el desempeño más aya de lo que permite la técnica de segmentación del cauce (limite teórico de una instrucción por ciclo de reloj), se requiere utilizar más de un procesador para la ejecución del programa de aplicación.

Las CPU de multiprocesamiento :

SISO – (Single Instruction, Single Operand ) computadoras independientes
SIMO – (Single Instruction, Multiple Operand ) procesadores vectoriales
MISO – (Multiple Instruction, Single Operand ) No implementado
MIMO – (Multiple Instruction, Multiple Operand ) sistemas SMP, Clusters

Procesadores vectoriales – Son computadoras pensadas para aplicar un mismo algoritmo numérico a una serie de datos matriciales, en especial en la simulación de sistemas físicos complejos, tales como simuladores para predecir el clima, explosiones atómicas, reacciones químicas complejas, etc., donde los datos son representados como grandes números de datos en forma matricial sobr los que se deben se aplicar el mismo algoritmo numérico.
En los sistemas SMP (Simetric Multiprocesesors), varios procesadores comparten la misma memoria principal y periféricos de I/O, Normalmente conectados por un bus común. Se conocen como simétricos, ya que ningún procesador toma el papel de maestro y los demás de esclavos, sino que todos tienen derechos similares en cuanto al acceso a la memoria y periféricos y ambos son administrados por el sistema operativo. 



1.2. Análisis de los componentes: CPU, 
arquitectura, memoria, dispositivos de I/O.

CPU.
Unidad central de proceso o UCP (conocida por sus siglas en inglés, CPU), circuito microscópico que interpreta y ejecuta instrucciones. La CPU se ocupa del control y el proceso de datos en las computadoras. Generalmente, la CPU es un microprocesador fabricado en un chip, un único trozo de silicio que contiene millones de componentes electrónicos. El microprocesador de la CPU está formado por una unidad aritmético-lógica que realiza cálculos y comparaciones, y toma decisiones lógicas (determina si una afirmación es cierta o falsa mediante las reglas del álgebra de Boole); por una serie de registros donde se almacena información temporalmente, y por una unidad de control que interpreta y ejecuta las instrucciones. Para aceptar órdenes del usuario, acceder a los datos y presentar los resultados, la CPU se comunica a través de un conjunto de circuitos o conexiones llamado bus. El bus conecta la CPU a los dispositivos de almacenamiento (por ejemplo, un disco duro), los dispositivos de entrada (por ejemplo, un teclado o un mouse) y los dispositivos de salida (por ejemplo, un monitor o una impresora).
Los factores relevantes de los chips de UCP son:
Compatibilidad: No todo el soft es compatible con todas las UCP. En algunos casos se pueden resolver los problemas de compatibilidad usando software especial.
Velocidad: La velocidad de una computadora está determinada por la velocidad de su reloj interno, el dispositivo cronométrico que produce pulsos eléctricos para sincronizar las operaciones de la computadora. Las computadoras se describen en función de su velocidad de reloj, que se mide en mega hertz. La velocidad también está determinada por la arquitectura del procesador, es decir el diseño que establece de qué manera están colocados en el chip los componentes individuales de la CPU. Desde la perspectiva del usuario, el punto crucial es que "más rápido" casi siempre significa "mejor".
El Procesador: El chip más importante de cualquier placa madre es el procesador. Sin el la computadora no podría funcionar. A menudo este componente se determina CPU, que describe a la perfección su papel dentro del sistema. El procesador es realmente el elemento central del proceso de procesamiento de datos.
Los procesadores se describen en términos de su tamaño de palabra, su velocidad y la capacidad de su RAM asociada.

Tamaño de la palabra: Es el número de bits que se maneja como una unidad en un sistema de computación en particular.
Velocidad del procesador: Se mide en diferentes unidades según el tipo de computador:
MHz (Megahertz): para microcomputadoras. Un oscilador de cristal controla la ejecución de instrucciones dentro del procesador. La velocidad del procesador de una micro se mide por su frecuencia de oscilación o por el número de ciclos de reloj por segundo. El tiempo transcurrido para un ciclo de reloj es 1/frecuencia.
MIPS (Millones de instrucciones por segundo): Para estaciones de trabajo, minis y macrocomputadoras. Por ejemplo una computadora de 100 MIPS puede ejecutar 100 millones de instrucciones por segundo.
FLOPS (floating point operations per second, operaciones de punto flotante por segundo): Para las supercomputadoras. Las operaciones de punto flotante incluyen cifras muy pequeñas o muy altas. Hay supercomputadoras para las cuales se puede hablar de GFLOPS (Gigaflops, es decir 1.000 millones de FLOPS).
Capacidad de la RAM: Se mide en términos del número de bytes que puede almacenar. Habitualmente se mide en KB y MB, aunque ya hay computadoras en las que se debe hablar de GB.



La CPU contiene un conjunto de localidades de almacenamiento temporal de datos de alta velocidad llamada registro. Algunos de los registros están dedicados al control, y solo la unidad de control tiene acceso a ellos. Los registros restantes son los registros de uso general y el programador es el usuario que tiene acceso a ellos.
Dentro del conjunto básico de registros de control se deben incluir a los siguientes:
·  Contador de programa (PC).
·  Registro de direcciones de la memoria (MAR).
·  Registro de datos (RD).
·  Registro de instrucciones (ER).
·  Palabra de estado de programa (PSW).
·  (PC): La función del PC consiste en seguir la pista de la instrucción por buscar (capturar) en el siguiente ciclo de maquina, por lo tanto contiene la dirección de la siguiente instrucción por ejecutar. El PC es modificado dentro del ciclo de búsqueda de la instrucción actual mediante la suma de una constante. El numero que se agrega al PC es la longitud de una instrucción en palabras.
Por lo tanto, si una instrucción tiene una palabra de longitud se agrega 1 al PC, si una instrucción tiene dos palabras de largo se agrega 2, y así sucesivamente.

·  Registro de direcciones de la memoria (MAR): funciona como registro de enlace entre la CPU y el canal de direcciones. Cuando se logra el acceso a la memoria la dirección es colocada en el MAR por la unidad de control y ahí permanece hasta que se completa la transacción. El numero de bit que hay en el MAR es igual al del canal de direcciones.
La diferencia que existe entre el PC y el MAR es que durante el ciclo de ejecución de una instrucción, el PC y el MAR sirven al mismo fin. Sin embargo, muchas de las instrucciones de la maquina hacen referencia a la memoria y operan con los datos que están en ella. Como la dirección de los datos suele ser diferente de la instrucción siguiente se necesita el MAR.
·  Registro de datos: la función del RD consiste en proporcionar un área de almacenamiento temporal (memoria intermedia, acumulada o buffer) de datos que se intercambian entre la PCU y la memoria. Los datos pueden ser instrucciones (obtenidos en el ciclo de ejecución) o datos del operando (obtenidos en el ciclo de ejecución). Debido a su conexión directa con el canal de datos el RD contiene el mismo numero de bit que dicho canal.
·  Registro de instrucciones (ER): es un registro que conserva el código de operación de la instrucción en todo el ciclo de la maquina. El código es empleado por la unidad de control de la CPU para generar las señales apropiadas que controla le ejecución de la instrucción. La longitud del ER es la longitud en bit del código de operación.
·  Palabra de estado de programa (PSW): la palabra de estado o condición de programa almacena información pertinente sobre el programa que este ejecutándose. Por ejemplo al completarse una función de la unidad aritmética lógica se modifica un conjunto de bit llamados códigos (o señales de condición). Estos bit especifican si el resultado de una operación aritmética fue 0 o negativo o si el resultado se desbordó.
El programa puede verificar estos bit en las instrucciones siguientes cambiar en forma condicional su flujo de control según su valor.
Además el PSW contiene bit que hacen posible que la computadora responda a solicitudes de servicio asincrónicas generadas por dispositivos de Entrada-Salida, o condiciones de error interno. Estas señales se denominan interrupciones.
Los registros restantes que se pueden encontrar en un microprocesador son de uso general. Estos se utilizan para almacenar información en forma temporal. También retienen operandos que participan en operaciones de la ULA.
Algunas veces el conjunto de instrucciones de la computadora y el esquema de direccionamiento de la arquitectura restringe el uso de alguno de estos registros.
Si bien en todas las maquinas la información contenida en el registro puede manipularse como datos ordinarios durante la ejecución de algunas instrucciones los datos se utilizan en forma explícita para decidir una dirección de la memoria. La ventaja de usar registros para retener datos de operaciones es la velocidad.

Elementos que la componen
1.      Unidad de control: controla el funcionamiento de la CPU y por tanto de el computador.
2.      Unidad aritmético-lógica (ALU): encargada de llevar a cabo las funciones de procesamiento de datos del computador.
3.      Registros: proporcionan almacenamiento interno a la CPU.
4.      Interconexiones CPU: Son mecanismos que proporcionan comunicación entre la unidad de control, la ALU y los registros. 




     Funcionamiento.
Funciones que realiza
La Unidad central de proceso o CPU, se puede definir como un circuito microscópico que interpreta y ejecuta instrucciones. La CPU se ocupa del control y el proceso de datos en los ordenadores. Habitualmente, la CPU es un microprocesador fabricado en un chip, un único trozo de silicio que contiene millones de componentes electrónicos. El microprocesador de la CPU está formado por una unidad aritmético-lógica que realiza cálculos y comparaciones, y toma decisiones lógicas (determina si una afirmación es cierta o falsa mediante las reglas del álgebra de Boole); por una serie de registros donde se almacena información temporalmente, y por una unidad de control que interpreta y ejecuta las instrucciones. Para aceptar órdenes del usuario, acceder a los datos y presentar los resultados, la CPU se comunica a través de un conjunto de circuitos o conexiones llamado bus. El bus conecta la CPU a los dispositivos de almacenamiento (por ejemplo, un disco duro), los dispositivos de entrada (por ejemplo, un teclado o un mouse) y los dispositivos de salida (por ejemplo, un monitor o una impresora).

 Memoria.
Se denomina memoria a los circuitos que permiten almacenar y recuperar la información. En un sentido más amplio, puede referirse también a sistemas externos de almacenamiento, como las unidades de disco o de cinta. Memoria de acceso aleatorio o RAM (Random Access Memory) es la memoria basada en semiconductores que puede ser leída y escrita por el microprocesador u otros dispositivos de hardware. El acceso a las posiciones de almacenamiento se puede realizar en cualquier orden. 
Los chips de memoria son pequeños rectángulos negros que suelen ir soldados en grupos a unas plaquitas con "pines" o contactos. La diferencia entre la RAM y otros tipos de memoria de almacenamiento, como los disquetes o los discos duros, es que la RAM es muchísimo más rápida, y que se borra al apagar el ordenador, no como éstos.
El interior de cada chip se puede imaginar como una matriz o tabla, en la cual cada celda es capaz de almacenar un bit. Por tanto, un bit se puede localizar directamente proporcionando una fila y una columna de la tabla. En realidad, la CPU identifica cada celda mediante un número , denominado dirección de memoria. A partir de una dirección, se calcula cuál es la fila y columna correspondiente, con lo que ya se puede acceder a la celda deseada. El acceso se realiza en dos pasos: primero se comunica la fila y luego la columna, empleando los mismos terminales de conexión. Obviamente, esta técnica (denominada multiplexado) permite emplear menos terminales de conexión para acceder a la RAM, lo que optimiza la relación entre el tamaño del chip y la capacidad de almacenamiento.
Realmente, la CPU no suele trabajar con bits independientes, sino más bien con agrupaciones de los mismos en forma de palabras binarias. Esto hace que la RAM no se presente en un solo chip, sino más bien en agrupaciones de los mismos.
Hemos de tener muy en cuenta que esta memoria es la que mantiene los programas funcionando y abiertos, por lo que al ser Windows 95/98 un sistema operativo multitarea, estaremos a merced de la cantidad de memoria RAM que tengamos dispuesta en el ordenador. En la actualidad hemos de disponer de la mayor cantidad posible de ésta, ya que estamos supeditados al funcionamiento más rápido o más lento de nuestras aplicaciones diarias. La memoria RAM hace unos años era muy cara, pero hoy en día su precio ha bajado considerablemente.
Cuando alguien se pregunta cuánta memoria RAM necesitará debe sopesar con qué programas va a trabajar normalmente. Si únicamente vamos a trabajar con aplicaciones de texto, hojas de cálculo y similares nos bastará con unos 32 Mb de ésta (aunque esta cifra se ha quedado bastante corta), pero si trabajamos con multimedia, fotografía, vídeo o CAD, por poner un ejemplo, hemos de contar con la máxima cantidad de memoria RAM en nuestro equipo (unos 128 Mb o más) para que su funcionamiento sea óptimo, ya que estos programas son auténticos devoradores de memoria. Hoy en día no es recomendable tener menos de 64 Mb, para el buen funcionamiento tanto de Windows como de las aplicaciones normales, ya que notaremos considerablemente su rapidez y rendimiento, pues generalmente los equipos actuales ya traen 128 Mb de RAM.

    Arquitecturas de la memoria.
Elementos que la componen
Una memoria vista desde el exterior, tiene la estructura mostrada en la figura 3-1. Para efectuar una lectura se deposita en el bus de direcciones la dirección de la palabra de memoria que se desea leer y entonces se activa la señal de lectura (R); después de cierto tiempo (tiempo de latencia de la memoria), en el bus de datos aparecerá el contenido de la dirección buscada. Por otra parte, para realizar una escritura se deposita en el bus de datos la información que se desea escribir y en el bus de direcciones la dirección donde deseamos escribirla, entonces se activa la señal de escritura (W), pasado el tiempo de latencia, la memoria escribirá la información en la dirección deseada. Internamente la memoria tiene un registro de dirección (MAR, memory address register), un registro buffer de memoria o registro de datos (MB, memory buffer, o MDR, memory data register) y, un decodificador como se ve en la figura 3-2. Esta forma de estructurar la memoria se llama organización lineal o de una dimensión. En la figura cada línea de palabra activa todas las células de memoria que corresponden a la misma palabra.

Por otra parte, en una memoria ROM programable por el usuario con organización lineal, las uniones de los diodos correspondientes a lugares donde deba haber un "0" deben destruirse. También se pueden sustituir los diodos por transistores y entonces la célula de memoria tiene el esquema de la figura 3-3 en este caso la unión que debe destruirse para grabar un "0" es la del emisor.

En el caso de una memoria RAM estática con organización lineal cada célula de memoria toma la forma mostrada en la figura 3-4. En este esquema las primeras puertas AND sólo son necesarias en el una de las células de cada palabra. Se debe comentar la necesidad de la puerta de tres estados a la salida del biestable: esta puerta se pone para evitar que se unan las salidas de los circuitos de las células de diferentes palabras a través del hilo de bit. Si esa puerta no se pusiera (o hubiera otro tipo de puerta en su lugar, como una puerta AND) la información correspondiente a la palabra activa entraría por los circuitos de salida de las demás células, lo que los dañaría.
Organizar 1a memoria de esta forma, tiene el inconveniente de que la complejidad del decodificador crece exponencialmente con el número de entradas y, en una memoria de mucha capacidad, la complejidad del decodificador la hace inviable. Esto hace necesaria una alternativa que simplifique los decodificadores. Esta alternativa la constituye la organización en dos dimensiones en que los bits del registro de dirección se dividen en dos partes y cada una de ellas va a un decodificador diferente. En este caso, las líneas procedentes de ambos decodificadores (X e Y) se cruzan formando un sistema de coordenadas en que cada punto de cruce corresponde a una palabra de memoria. Dado que en cada decodificador sólo se activa una línea, sólo se activará la palabra correspondiente al punto de cruce de las dos líneas activadas. Fácilmente se puede comprender que los decodificadores se simplifican mucho ya que cada uno tiene la mitad de entradas que en el caso anterior. Hay que decir, sin embargo, que la célula de memoria se complica un poco porque hay que añadir una puerta AND en cada palabra para determinar si coinciden las líneas X e Y.

La organización de la memoria en dos dimensiones también es útil para las memorias dinámicas ya que el refresco de estas memorias se realiza por bloques y éstos pueden coincidir con una de las dimensiones (la que corresponda a los bits de dirección de mayor peso).
En la práctica, las memorias dinámicas son más lentas que las estáticas y además son de lectura destructiva, pero resultan más baratas, aunque necesiten circuitos de refresco, si la memoria no es de mucha capacidad.


DISPOSITIVOS DE ENTRADA Y SALIDA
Cualquier dispositivo (distinto de la memoria RAM) que intercambie datos con el sistema lo hace a través de un "puerto", por esto se denominan también puertos de E/S ("I/O ports").  Desde el punto de vista del software, un puerto es una interfaz con ciertas características; se trata por tanto de una abstracción (no nos referimos al enchufe con el que se conecta físicamente un dispositivo al sistema), aunque desde el punto de vista del hardware, esta abstracción se corresponde con un dispositivo físico capaz de intercambiar información (E/S) con el bus.

Como los dispositivos E/S tienen algún tipo de conexión con el bus externo  deben tener una dirección (o conjunto de ellas) que los identifique.  Los hemos comparado con un teléfono, un dispositivo con el que se puede enviar/recibir información mediante una dirección.  Hablar de un puerto E/S es casi siempre sinónimo de una dirección, y es costumbre informática referirse a estas direcciones en hexadecimal. De modo que, por ejemplo, un puerto puede ser 0x21 en un fuente o 21h en un texto informático.


Direcciones de puertos
El modelo de direccionamiento del PC ha adoptado dos modelos, según la naturaleza del dispositivo a conectar:  Direccionamiento dedicado para dispositivos de media/baja velocidad.  Por ejemplo, puertos serie y paralelo (impresora), teclado, Etc. y direccionamiento mapeado en memoria para dispositivos rápidos (típicamente los adaptadores gráficos).  En el apartado dedicado a E/S se explican las diferencias entre ambas modalidades
  Respecto a los dispositivos de direccionamiento dedicado, desde la introducción del IBM-PC, es costumbre que determinados dispositivos muy comunes se conecten mediante puertos de direcciones determinadas.
Agunas direcciones (hex) de puertos en el PC XT/AT
Dispositivo
Dirección
Controlador DMAC#1 primario 8237A
000-00F
Controlador de interrupciones PIC#1 8259A
020-021
Temporizador programable PIT 8253 y 8254
040-043
Controlador periféricos PPI 8255 (XT)
060-063
Controlador 8742 (AT)
060-064
Altavoz del sistema
061-061
CMOS RAM & NMI Mask Reg (AT)
070-071
Registros de página DMA
081-08F
Controlador de interrupciones PIC#2 (AT)
0A0-0A1
NMI Mask register (XT)
0A2-0AF
Controlador DMAC#2 secundario (AT)
0C0-0DF
Clear / Reset del coprocesador matemático
0F0-0F1
Coprocesador matemático 80287
0F8-0FF
Controlador de disco duro (AT)
1F0-1FF
Puerto de juegos
200-20F
Unidad de expansión (XT)
210-21F
Ratón (conectado al bus)
238-23B
Ratón de bus alternativo
23C-23F
Puerto paralelo (LPT2)
278-27F
EGA (Enhanced Graphic Adapter)
2B0-2BF
EGA
2C0-2CF
EGA
2D0-2DF
GPIB Adaptador 0 (AT)
2E0-2E7
Puerto serie 8250 (COM4)
2E8-2EF
Puerto serie  8250 (COM2)
2F8-2FF
Tarjetas específicas (prototipos)
300-30F
Tarjetas específicas (prototipos)
310-31F
Controlador disco duro (XT)
320-32F
Tarjeta de red
360-363
Tarjeta de red
368-36B
Puerto paralelo (LPT1)
378-37F
SDLC  Puerto 2 [1]
380-38F
SDLC  Puerto 1
3A0-3AF
MDA (Monochrome Display Adapter)
3B0-3BB
Puerto paralelo (LPT3)
3BC-3BF
EGA
3C0-3CF
CGA
3D0-3DF
Puerto serie 8250 (COM3)
3E8-3EF
Controlador de disquete
3F0-3F7
Puerto serie 8250 (COM1)
3F8-3FF
En la tabla adjunta se muestran algunas de estas direcciones típicas para dispositivos de E/S [3].  Las referencias a los chips se refieren a los utilizados en los primeros PCs.  Actualmente han sido sustituidos por uno o dos integrados (Chipset) que realizan todas las funciones.
Puede observarse que para un mismo periférico se tienen varias direcciones (un "rango").  La razón es que estos dispositivos tienen varios registros y/o son programables, para lo que disponen de registros especiales (cada registro de un Byte tiene una dirección, y estas son correlativas).  Por ejemplo, el controlador de puerto serie de los primeros PCs era un circuito integrado 8250 de National Semiconductor; que dispone de 8 registros, aunque los datos se reciben y transmiten por uno de ellos, el resto sirve para programar y controlar el funcionamiento del chip.





1 comentario: