Arquitectura de computadoras Unida Temas d 1 Modelo de arquitecturas de cómputo. Subtemas 1.1 1.2 2 Comunicación interna en la computadora. Modelos de arquitecturas de cómputo. 1.1.1 Clásicas. 1.1.2 Segmentadas. 1.1.3 De multiprocesamiento. Análisis de los componentes. 1.2.1 CPU. 1.2.1.1 Arquitecturas. 1.2.1.2 Tipos. 1.2.1.3 Características. 1.2.1.4 Funcionamiento. 1.2.2 Memoria. 1.2.2.1 Arquitecturas. 1.2.2.2 Tipos. 1.2.2.3 Características. 1.2.2.4 Funcionamiento. 1.2.3 Dispositivos de I/O. 1.2.3.1 Arquitecturas. 1.2.3.2 Tipos. 1.2.3.3 Características. 1.2.3.4 Funcionamiento. 2.1 Buses. 2.1.1 Bus Local. 2.1.2 Bus de datos. 2.1.3 Bus de direcciones. 2.1.4 Bus de control. 2.1.5 Buses normalizados. 2.2 Direccionamiento. 2.2.1 Modo real. 2.2.2 Modo protegido. 2.2.3 Modo real virtual. 2.3 Temporización. 2.3.1 Reloj de sistema. 2.3.2 Reset del sistema. 2.3.3 Estados de espera. 2.4 Interrupciones de Hardware. 2.4.1 Enmascarable. 2.4.2 No-enmascarable. 2.5 Acceso Directo a memoria. 2.5.1 Sistema de video. 2.5.2 Sistema de discos. 2.5.3 Otras aplicaciones. 3 Selección de componentes para 3.1 Chip Set. 3.1.1 CPU. ensamble de equipos de cómputo. 4 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 Controlador del Bus. Puertos de E/S. Controlador de Interrupciones. Controlador de DMA. Circuitos de temporización y control. 3.1.7 Controladores de video. 3.2 Aplicaciones. 3.2.1 Entrada/ Salida. 3.2.2 Almacenamiento. 3.2.3 Fuente de alimentación. 3.3 Ambientes de servicios. 3.3.1 Negocios. 3.3.2 Industria. 3.3.3 Comercio electrónico. Microcontroladores 4.1 Arquitectura. . 4.1.1 Terminales. 4.1.2 CPU. 4.1.3 Espacio de Memoria. 4.1.4 Entrada/ Salida. 4.1.5 Características especiales. 4.2 Programación. 4.2.1 Modelo de programación. 4.2.2 Conjunto de instrucciones. 4.2.3 Modos de direccionamiento. 4.2.4 Lenguaje ensamblador. 4.3 Aplicaciones. 4.3.1 Como sistema independiente. 4.3.2 Como subsistema de una computadora. Unidad 1. Modelo de arquitecturas de cómputo. 1.1 Modelos de arquitecturas de cómputo. 2 3 Tecnologías RISC y CISC: RISC: (Reduced Instruction Set Computer) computadora de conjunto de instrucciones reducido Arquitectura de computadoras que ejecuta un número limitado de instrucciones. El concepto es que la mayoría de los programas usan generalmente unas pocas instrucciones, y si se acelera la ejecución de esas instrucciones básicas, se mejora el rendimiento. La arquitectura RISC elimina una capa de carga operativa llamada "microcódigo", que se emplea normalmente para facilitar la agregación de nuevas y complejas instrucciones a una computadora. Las computadoras RISC poseen un pequeño número de instrucciones montadas en los circuitos de nivel inferior, que trabajan a máxima velocidad. Aunque las máquinas RISC son sólo de un 15% a un 50% más veloces que sus contrapartidas CISC CISC: (Complex Instruction Set Computer) Computadora de conjunto de instrucciones complejo Computadoras que poseen un conjunto de instrucciones muy extenso. Las máquinas CISC tienen de doscientas a trescientas instrucciones, que están grabadas en microcódigo. http://www.monografias.com/trabajos/refercomp/refercomp.shtml 3.1.1 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. http://homepage.mac.com/eravila/computerII.html 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). http://www.programacion.com/blogs/44_diario_de_un_profesor_de_informtica/a rchive/409_que_es_la_arquitectura_informtica.html 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. "http://es.wikipedia.org/wiki/Arquitectura_Harvard" Arquitectura Harvard El procesador de los modernos microcontroladores responde a la arquitectura RISC (Computadores de Juego de Instrucciones Reducido), que se identifica por poseer un repertorio de instrucciones máquina pequeño y simple, de forma que la mayor parte de las instrucciones se ejecutan en un ciclo de instrucción. Otra aportación frecuente que aumenta el rendimiento del computador es el fomento del paralelismo implícito, que consiste en la segmentación del procesador (pipe-line), descomponiéndolo en etapas para poder procesar una instrucción diferente en cada una de ellas y trabajar con varias a la vez. http://www.unicrom.com/Tut_PICs1.asp 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. http://www.monografias.com/trabajos12/microco/microco.shtml ARQUITECTURA HARVARD Arquitectura Harvard, que utiliza antememorias de instrucciones y datos separadas. Esta técnica, denominada Arquitectura Harvard, en cierto modo contrapuesta a la idea de Von Newmann, ya que utiliza memorias caché separadas para código y datos. Esto tiene algunas ventajas . 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 simultaneamente. 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. ¿Qué sucede si dividimos en 5 unidades según las 5 cosas que realiza la CPU? Supongamos la CPU dividida en 5 unidades, de tal forma que c/u tarde lo mismo en realizar su partecita. Es decir c/u tardará T/5. Para que una instrucción se ejecute se necesita T segundos entonces para que usar pipe-line. Si ocurre esto en una CPU normal a una con pipe-line, la cantidad de instrucciones que se hacen por segundo aumenta, es decir aumenta el flujo de instrucciones que se ejecutan por segundo. http://html.rincondelvago.com/computadores_arquitectura-harvard-pipelinevectorial.html 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: Pipeline digital. Mientras un ítem en particular fluye a través del pipeline, éste ocupa sólo una etapa por vez. A medida que transcurre el tiempo la etapa que quedo vacante por un ítem, será ocupada por el siguiente. Este uso concurrente de diferentes etapas por diferentes ítems se lo conoce por solapamiento. El resultado neto es que la máxima velocidad a la cual los nuevos ítems pueden ingresar al pipeline depende exclusivamente del tiempo máximo requerido para atravesar una etapa y no del número de éstas. La utilización del pipeline se traduce en una mejora del comportamiento o performance del procesador. Si una función se lleva a cabo en T segundos en un procesador de diseño convencional, al utilizar un procesador pipeline de N etapas esa misma función podrá realizarse en T/N segundos. Esto a nivel teórico, ya que la mejora de performance dependerá de la cantidad de operaciones que puedan estructurarse en pipeline y también de calidad de la partición o subdivisión de cada una de esas operaciones. La estructuración en pipeline de un procesador se realiza en diferentes niveles como aritmética de punto flotante, ciclo de instrucción, procesador de entrada/salida, etc. Esta división o partición de una función en varias subfunciones se podrá realizar si se dan las siguientes condiciones: 1. La evaluación de la función básica es equivalente a la evaluación secuencial de las subfunciones que la constituyen. 2. Las entradas a una subfunción provienen únicamente de las salidas de subfunciones previas en la secuencia de evaluación. 3. Excepto el intercambio de entradas y salidas no existe otra vinculación entre las subfunciones. 4. Debe disponerse del hardware necesario para la evaluación de dichas subfunciones. 5. El tiempo requerido por estas unidades de hardware para evaluar las subfunciones es aproximadamente el mismo. Este hardware mencionado en el punto 4 es el correspondiente o asociado con las distintas etapas del pipeline. A diferencia del pipeline físico (tubería), el digital no maneja los datos en forma continua. Este maneja los datos en forma interrumpida y los va desplazando de etapa en etapa sincronizando con un reloj. Dado que la lógica que realiza el procesamiento en cada etapa generalmente carece de memoria y dado el carácter discontinuo de la aparición de los datos en las etapas se impone la utilización de un elemento de memoria en la entrada y salida de cada etapa. De esta manera, bajo el control del reloj asociado a cada elemento de memoria, evitamos que los datos ingresen a una etapa antes que haya finalizado el proceso anterior. Pipeline vs. Solapamiento. Los conceptos de pipelining y solapamiento tienen significados parecidos pero no son equivalentes, pese a que en algunos casos se los utiliza indistintamente. Ambos se basan en la idea de partición o subdivisión de una función, pero se aplican en distintos entornos. Se dice que podrá existir pipeline cuando se den las siguientes condiciones: 1. Cada evaluación de la función básica es independiente de las anteriores. 2. Cada evaluación requieren aproximadamente la misma secuencia de subfunciones. 3. Cada subfunción se encadena perfectamente con las anterior. 4. Los tiempos utilizados para evaluar las distintas subfunciones son aproximadamente iguales. Solapamiento se podrá utilizar cuando se den las siguientes condiciones: 1. Existe dependencia entre las distintas evaluaciones. 2. Cada evaluación puede requerir una secuencia diferente de subfunciones. 3. Cada subfunción tiene un propósito distinto. 4. El tiempo por etapa no es necesariamente constante, sino que depende de la etapa y de los datos que la atraviesan. En muchos casos el pipeline propiamente dicho y que detallamos en primer lugar se lo suele llamar sincrónico o estático, por otra parte el solapamiento se lo suele llamar pipeline asincronico o dinámico. Un ejemplo de pipeline estático es el de una unidad destinada a realizar sumas en punto flotante sobre datos provenientes de otra unidad. Aquí la función básica, suma en punto flotante es relativamente simple, el resultado de una sumo depende del anterior, próximo o de cualquier otro. Además una vez que se realizó la partición, todas las sumas siguen la misma secuencia. El ejemplo más simple de solapamiento o pipeline dinámico se da en un procesador donde la entrada/salida es manejada por un procesador, los cómputos por otro y la comunicación se realiza a través de un modulo de memoria común. La realización de una función en este procesador alternara entre el procesador de computo y el de entrada/salida. En otros casos la evaluación de una función sólo requerira de un procesador. En este caso vemos que las distintas operaciones están menos sincronizadas que en el caso del sumador en punto flotante. La participación de la función básica varía dinámicamente y aún el tiempo empleado en cada etapa es difícil de predecir. Otro ejemplo de operación por solapamiento es el de ejecución de instrucciones de CPU's de alta velocidad. En este caso el hardware podrá estar dividido en un número fijo de etapas como en el caso del sumador de punto flotante, pero de acuerdo con las diferencias de formato de las instrucciones cada una puede desarrollar un camino diferente a través del pipeline. Pipeline en maquinas SISD. Dependencia entre instrucciones y riesgos. En una maquina secuencial clásica todas las operaciones que involucran la ejecución de una instrucción se completan antes que comience la próxima. En el caso de las maquinas SISD podemos intentar realizar pipeline a nivel de ejecución de instrucciones. Esto consistirá en solapar la ejecución de las mismas de manera que algunas de las operaciones necesarias para las instrucciones i+1, i+2, .... puedan realizarse antes que finalice la ejecución de la instrucción i. Puede ocurrir que las operaciones realizadas por i+1, i+2, dependan de los resultados de i que aún no fue completada. Esta dependencia entre instrucciones crea riesgos que deben evitarse y resolverse. Se reconocen tres clases de riesgos, read-after-write, write-after-read y write-after-write. Veamos las diferencias considerando este segmento de código de programa: Almacenar en x Sumar x Almacenar en x Almacenar en x El riesgo read-after-write entre dos instrucciones i y j (siendo j posterior a i) se presentara cuando j trata de leer un operando que es modificado por i. Si la operación en i que modifica el operando no se completa antes que j lo acceda, entonces j leerá el valor erróneo. En el ejemplo el riesgo existirá entre el primer almacenar en x y el sumar x, si el sumar x extrae el operando antes que haya sido actualizado por almacenar. El write-after-read ocurre cuando la instrucción j desea modificar un operando que es leído por i. Si j modifica el operando antes que i lo haya leído, este dato así leído será erróneo. Este riesgo puede existir entre el sumar y el segundo almacenar en x. Finalmente el write-after-write existe cuando i y j tratan de actualizar el mismo operando, en el caso que j lo haga en primer lugar. En nuestro ejemplo se el segundo almacenar se realiza después del tercero, obviamente el valor en x no es el que el programa espera. 3.1.2 Segmentadas. 3.1.3 De multiprocesamiento. 3.2 Análisis de los componentes. 3.2.1 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. http://www.monografias.com/trabajos12/comptcn/comptcn.shtml#UCP 3.2.1.1 Arquitecturas. Arquitectura interna del CPU 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. http://html.rincondelvago.com/arquitectura-interna-de-la-cpu.html 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. Unidad de Control. La Unidad de Control (UC) coordina la actividad de todos los elementos que deben intervenir en un proceso concreto. Dirige todas las señales eléctricas del ordenador, es decir, es responsable del correcto funcionamiento de todos los componentes de la CPU. De esta forma, debe gobernar el funcionamiento de los periféricos de entrada, salida y almacenamiento, al mismo tiempo que el acceso a la memoria principal y la ALU. Por esta razón la UC es la encargada de interpretar el programa, del que recibe las instrucciones codificadas convenientemente, así como de enviar las órdenes oportunas a las unidades periféricas implicadas. La UC utiliza una señal generada por un reloj interno con objeto de sincronizar el funcionamiento operativo de cada elemento. Esta tarea es fundamental, ya que, en caso contrario, no podría establecerse un ritmo de operación adecuado que controle la velocidad de trabajo de cada componente. Se comprende fácilmente que la mayor o menor frecuencia del reloj interno, determinará la capacidad de hacer un número mayor o menor de instrucciones por segundo. Esta velocidad se suele medir actualmente en gigahertzios (GHz). No todas las instrucciones que tenga que ejecutar la UC consumen el mismo número de señales generadas por el reloj, sino que las instrucciones complejas necesitarán más ciclos que las instrucciones simples. En cualquier caso, la UC se encargará de las siguientes funciones: Determinar si el ordenador está en fase de introducción o en fase de ejecución de programa. En el primer caso, la UC activa la unidad de entrada de datos y controla que las sucesivas instrucciones que componen el programa vayan siendo almacenadas en posiciones contiguas de memoria. En la fase de ejecución del programa, la UC decodifica la primera instrucción del programa y según el tipo de instrucción pide su ejecución al dispositivo adecuado: las entradas y salidas a los periféricos y las operaciones aritméticas y lógicas a la ALU. Decodificar la instrucción en curso y, según su código de operación, mandar una señal para que actúe la Unidad Aritmético-Lógica o una Unidad de entrada o de salida. Verificar la transferencia de información entre los registros y la memoria principal y viceversa. Controlar qué instrucción se está ejecutando en cada momento y qué instrucción deberá seguirle a continuación. Unidad Aritmético-Logica. La Unidad Aritmético-Lógica (ALU, Arithmetic-Logical Unit) es la encargada de ejecutar las operaciones aritméticas básicas (suma, resta, multiplicación y división) y lógicas (AND, OR, NOT). Sólo con estas operaciones básicas es procesada toda la información y se obtienen los resultados. Los datos sobre los que opera esta unidad provienen de la memoria principal y pueden estar almacenados temporalmente en algunos registros internos de la propia unidad. La UC se encarga de enviarle los datos correspondientes e indicarle qué operación tiene que realizar. 3.2.1.2 Tipos. Tipos Básicamente nos encontramos con dos tipos de diseño de los microprocesadores: RISC (Reduced-Instruction-Set Computing) y CISC (complex-instruction-set computing). Los microprocesadores RISC se basan en la idea de que la mayoría de las instrucciones para realizar procesos en el computador son relativamente simples por lo que se minimiza el número de instrucciones y su complejidad a la hora de diseñar la CPU. Algunos ejemplos de arquitectura RISC son el SPARC de Sun Microsystem’s, el microprocesador Alpha diseñado por la antigua Digital, hoy absorbida por Compaq y los Motorola 88000 y PowerPC. Estos procesadores se suelen emplear en aplicaciones industriales y profesionales por su gran rendimiento y fiabilidad. Los microprocesadores CISC, al contrario, tienen una gran cantidad de instrucciones y por tanto son muy rápidos procesando código complejo. Las CPU´s CISC más extendidas son las de la familia 80x86 de Intel cuyo último micro es el Pentium II. Últimamente han aparecido otras compañías como Cirix y AMD que fabrican procesadores con el juego de instrucciones 80x86 y a un precio sensiblemente inferior al de los microprocesadores de Intel. Además, tanto Intel con MMX como AMD con su especificación 3D-Now! están apostando por extender el conjunto de instrucciones de la CPU para que trabaje más eficientemente con tratamiento de imágenes y aplicaciones en 3 dimensiones. 3.2.1.3 Características. La CPU ha de cumplir dos características bien definidas: 1. Ser capaz de reconocer y ejecutar una serie de instrucciones elementales (programa) en base a las cuales se puede realizar cualquier proceso de datos deseado, por complejo que sea. 2. Tener separados dos estados diferentes. En una primera fase ha de poder recibir y memorizar las instrucciones que configuran el proceso pedido (introducción del programa) y en segunda fase debe ejecutar en secuencia las instrucciones recibidas (ejecución del programa). Al realizar esta ejecución se leerán los datos que se necesiten a través de un dispositivo de entrada de datos en el momento en que sean requeridos, realizando las operaciones que forman el proceso hasta la obtención de los resultados, los cuales serán enviados al usuario a través de un dispositivo de salida. 3.2.1.4 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). 3.2.2 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. 3.2.2.1 Arquitecturas. 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. 3.2.2.2 Tipos. Tipos y Funcionamiento Todas hacen la misma función, pero entre ellas las diferenciamos por el tiempo de acceso y la capacidad, o por el modo como trabajan: · Registros del microprocesador: Interaccionan continuamente con la CPU, puesto que forman parte de ella, su tiempo de acceso es muy pequeño y una capacidad mínima, normalmente igual a la "palabra" del microprocesador (de 1 a 8 bytes). · Registros intermedios: Básicamente es un paso intermedio entre dos memorias, un buffer. Tiene capacidad muy pequeña y un tiempo de acceso también muy pequeño. · Memoria caché: Es la más utilizada por la CPU, y la más importante entre la principal y el microprocesador. Aunque sean de pequeña capacidad, normalmente una fracción de la memoria principal máxima posible, está continuamente intercambiando información tanto con el procesador como con la memoria principal, aunque normalmente se utiliza para guardar la dirección de la memoria principal, en vez de almacenar el archivo entero, así tarda menos a pasar la información hacia la CPU, que si lo hiciera mediante la caché. Y es por esta razón, que a menudo (excepto modelos especiales como Celeron y Duron), hay dos de memorias caché, dos niveles: Uno en el interior del microprocesador (L1), y el otro entre la principal y la CPU (L2), al exterior del "micro" de más capacidad que la de dentro. · Memoria central o principal: Donde se almacenan programas y datos. La CPU lee y escribe en ella aunque en menos cantidades que en las anteriores. Tiempo de acceso relativamente rápido y gran capacidad. · Memorias de masas o auxiliares: Son dispositivos exteriores al ordenador o conectados a la placa base por un controlador de bus (disco duro, disquetes, etc.). Dónde se almacenen todos los programas y archivos para un uso posterior. En caso de que la memoria principal sea insuficiente, se hacen servir como apoyo para ésta, denominada "memoria virtual". Como he mencionado anteriormente, las memorias además de clasificarse por su tiempo de acceso y capacidad, también se pueden clasificar por la forma en que se modifican los datos y la tecnología empleada. Así, encontramos que hay dos grandes grupos: 1. Memorias RAM (Random Acces Memory): Son memorias en las que se puede leer y escribir. Se componen electrónicamente por chips, dónde se pueden subdividir en: · SRAM (Static RAM): Su célula está basada en un biestable. · DRAM (Dinamic RAM): Su célula está basada en un pequeño condensador, carga del cual representa la información almacenada. Estas necesitan circuitos adicionales de refresco, puesto que como los condensadores son de baja capacidad, a través de la s fugas, la información se podría perder; son de lectura destructiva. 2. Memorias ROM (Read Only Memory): Son memorias en las que sólo se puede leer. Hay de varios tipos: · ROM: programadas por máscara, la información es grabada enla fábrica y no tiene posible modificación. · PROM, o ROM: programable una sola vez. · EPROM (Erasable PROM) o RPROM (Reprogramable ROM): su contenido puede ser borrado mediante rayos ultravioletas, para acto seguido regrabarlas. · EAROM (Electrically Alterable ROM) o EEROM (Electrically Erasable ROM), son la frontera entre las RAM y las ROM, su contenido puede ser regrabado eléctricamente, se diferencian de las RAM en que no son volátiles. · Memoria FLASH, denominada así por la velocidad en la que se puede reprogramar (en tan solo segundos), usan el borrado eléctrico. Básicamente las ROM se basan en una matriz de diodos unidos, esta unión puede ser destruida por una sobretensión. De esta forma, salen de la fábrica con las uniones juntas y para grabarlas se rompen dónde se quieran poner ceros. Aparte de los módulos de memoria aquí mencionados también existen, aunque ya en desuso, de otros como los SIMM (Single In<-Line Memory Module) y los SIP (Single In-Line Packages), los cuales no son nada más que chips de memoria soldados entre ellos para formar un único conjunto. También hay modelos más nuevos como el DDR (DobleData Rate) que se usa básicamente en equipos basados en microprocesadores AMD, ahora implementados también en equipos Intel, aunque principalmente se usan en las tarjetas gráficas, aunque Intel ya posee la del tipo RAMBUS. La DDR es el mismo que la SDR pero en doble sentido, de ida y de vuelta, mientras que la segunda(SDR) solamente puede hacer servir un sentido ida o vuelta. http://www.hardware12v.com/conocimientospc/5.php Tipos de Memoria RAM DRAM (Dynamic Random Access Memory): Es la memoria de trabajo, también llamada RAM, esta organizada en direcciones que son reemplazadas muchas veces por segundo. Esta memoria llegó a alcanzar velocidades de 80 y 70 nanosegundos (ns), esto es el tiempo que tarda en vaciar una dirección para poder dar entrada a la siguiente, entre menor sea el número, mayor la velocidad, y fué utilizada hasta la época de los equipos 386. FPM (Fast Page Mode): El nombre de esta memoria procede del modo en el que hace la transferencia de datos, que también es llamado paginamiento rápido. Hasta hace aproximadamente un año ésta memoria era la más popular, era el tipo de memoria normal para las computadores 386, 486 y los primeros Pentium®, llegó a fabricarse en velocidades de 60ns y la forma que presentaban era en módulos SIMM de 30 pines, para los equipos 386 y 486 y para los equipos Pentium® era en SIMM de 72 pines. EDO (Extended Data Output): Esta memoria fue una innovación en cuestión de transmisión de datos pudiendo alcanzar velocidades de hasta 45ns, dejando satisfechos a los usuarios. La transmisión se efectuaba por bloques de memoria y no por instrucción como lo venía haciendo las memorias FPM. Se utiliza en equipos con procesadores Pentium®, Pentium Pro® y los primeros Pentium II®, además de su alta compatibilidad, tienen un precio bajo y es una opción viable para estos equipos. Su presentación puede ser en SIMM ó DIMM. SDRAM (Synchronous DRAM): Esta memoria funciona como su nombre lo indica, se sincroniza con el reloj del procesador obteniendo información en cada ciclo de reloj, sin tener que esperar como en los casos anteriores. La memoria SDRAM puede aceptar velocidades de BUS de hasta 100Mhz, lo que nos refleja una muy buena estabilidad y alcanzar velocidades de 10ns. Se presentan en módulos DIMM, y debido a su transferencia de 64 bits, no es nesesario instalarlo en pares. RDRAM (Rambus DRAM): Esta memoria tiene una transferencia de datos de 64 bits que se pueden producir en ráfagas de 2ns, además puede alcanzar taza de tranferencia de 533 Mhz con picos de 1.6Gb/s. Muy pronto alcanzará dominio en el mercado, ya que se estará utilizando en equipos con el nuevo procesador Pentium 4®. Es ideal ya que evita los cuellos de botella entre la tarjeta gráfica AGP y la memoria del sistema, hoy en día se pueden encontrar éste tipo de memorias en las consolas NINTENDO 64®. Será lanzada al mercado por SAMSUNG® e HITACHI®. Tipos de Memoria ROM EPROM (Erasable Programmable Read-Only Memory): Se utiliza para corregir errores de última hora en la ROM, el usuario no la puede modificar y puede ser borrada exponiendo la ROM a una luz ultravioleta. EEPROM (Electrically Erasable Programmable Read-Only Memory): Esta memoria puede ser borrada y volver a ser programada por medio de una carga eléctrica, pero sólo se puede cambiar un byte de información a la vez. MEMORIA FLASH: Es un tipo de memoria EEPROM que es reprogramable, su utilización por lo regular es en BIOS de ahí su nombre. Otros tipos de memoria RAM BEDO (Burst Extended Data Output): Fue diseñada para alcanzar mayores velocidades de BUS. Trabaja de igual forma que la SDRAM, ó sea, la transferencia de datos se hace en cada ciclo de reloj, pero esta memoria lo hace en ráfagas (burst), haciendo que los tiempos de entrega desaparezcan casi totalmente. DDR SDRAM (Double Data Rate SDRAM ó SDRAM-II): Esta memoria tendrá el mismo aspecto que un DIMM, pero la diferencia estará en que tendrá más pines, pasando de 168 pines del actual DIMM a 184 pines, además de tener sólo una muesca en la tableta. Viendo un poco de voltaje, la DDR trabajará con tan sólo 2.5V, siendo ésta una reducción del 30% respecto a los actuales 3.3V de la SDRAM. Trabajará a velocidades de 200Mhz. VRAM: Es como la memoria RAM normal, pero la diferencia reditúa en que podrá ser accedida al mismo tiempo por el monitor y el procesador de la tarjeta de video, se podrá leer y escribir en ella al mismo tiempo. SGRAM (Synchronous Graphic RAM): Ofrece las mismas capacidades de la memoria SDRAM pero para las tarjetas gráficas, se utiliza en las nuevas tarjetas gráficas aceleradoras 3D. http://www.monografias.com/trabajos14/dispositivos/dispositivos.shtml# Jerarquía de memoria En un ordenador hay una jerarquía de memorias atendiendo al tiempo de acceso y a la capacidad que. normalmente son factores contrapuestos por razones económicas y en muchos casos también físicas. Comenzando desde el procesador al exterior, es decir en orden creciente de tiempo de acceso y capacidad, se puede establecer la siguiente jerarquía: Registros de procesador: Estos registros interaccionan continuamente con la CPU (porque forman parte de ella). Los registros tienen un tiempo de acceso muy pequeño y una capacidad mínima, normalmente igual a la palabra del procesador (1 a 8 bytes). Registros intermedios: Constituyen un paso intermedio entre el procesador y la memoria, tienen un tiempo de acceso muy breve y muy poca capacidad. Memorias caché: Son memorias de pequeña capacidad. Normalmente una pequeña fracción de la memoria principal. y pequeño tiempo de acceso. Este nivel de memoria se coloca entre la CPU y la memoria central. Hace algunos años este nivel era exclusivo de los ordenadores grandes pero actualmente todos los ordenadores lo incorporan. Dentro de la memoria caché puede haber, a su vez, dos niveles denominados caché on chip, memoria caché dentro del circuito integrado, y caché on board, memoria caché en la placa de circuito impreso pero fuera del circuito integrado, evidentemente, por razones físicas, la primera es mucho más rápida que la segunda. Existe también una técnica, denominada Arquitectura Harvard, en cierto modo contrapuesta a la idea de Von Newmann, que utiliza memorias caché separadas para código y datos. Esto tiene algunas ventajas como se verá en este capítulo. Memoria central o principal: En este nivel residen los programas y los datos. La CPU lee y escribe datos en él aunque con menos frecuencia que en los niveles anteriores. Tiene un tiempo de acceso relativamente rápido y gran capacidad. Extensiones de memoria central: Son memorias de la misma naturaleza que la memoria central que amplían su capacidad de forma modular. El tiempo de similar, a lo sumo un poco mayor, al de la memoria central y su capacidad puede ser algunas veces mayor. Memorias de masas o auxiliares: Son memorias que residen en dispositivos externos al ordenador, en ellas se archivan programas y datos para su uso posterior. También se usan estas memorias para apoyo de la memoria central en caso de que ésta sea insuficiente (memoria virtual). Estas memorias suelen tener gran capacidad pero pueden llegar a tener un tiempo de acceso muy lento. Dentro de ellas también se pueden establecer varios niveles de jerarquía. Clasificación de memorias semiconductoras de acceso aleatorio Las memorias se clasifican, por la tecnología empleada y, además según la forma en que se puede modificar su contenido, A este respecto, las memorias se clasifican en dos grandes grupos: 1) Memorias RAM: Son memorias en las que se puede leer y escribir, si bien su nombre (Random access memory) no representa correctamente este hecho. Por su tecnología pueden ser de ferritas (ya en desuso) o electrónicas, Dentro de éstas últimas hay memorias estáticas (SRAM, static RAM), cuya célula de memoria está basada en un biestable, y memorias dinámicas (DRAM, dinamic RAM, en las que la célula de memoria es un pequeño condensador cuya carga representa la información almacenada. Las memorias dinámicas necesitan circuitos adicionales de refresco ya que los condensadores tienen muy poca capacidad y, a través de las fugas, la información puede perderse, por otra parte, son de lectura destructiva. 2) Memorias ROM (Read 0nly Memory): Son memorias en las que sólo se puede leer. Pueden ser: a. ROM programadas por máscara, cuya información se graba en fábrica y no se puede modificar. b. PROM, o ROM programable una sola vez. c. EPROM (erasable PROM) o RPROM (reprogramable ROM), cuyo contenido puede borrarse mediante rayos ultravioletas para regrabarlas. d. EAROM (electrically alterable ROM) o EEROM (electrically erasable ROM), que son memorias que está en la frontera entre las RAM y las ROM ya que su contenido puede regrabarse por medios eléctricos, estas se diferencian de las RAM en que no son volátiles. En ocasiones a este tipo de memorias también se las denomina NYRAM (no volátil RAM). e. Memoria FLASH, denominada así por la velocidad con la que puede reprogramarse, utilizan tecnología de borrado eléctrico al igual que las EEPROM. Las memorias flash pueden borrarse enteras en unos cuantos segundos, mucho más rápido que las EPROM. Básicamente las memorias ROM se basan en una matriz de diodos cuya unión se puede destruir aplicando sobre ella una sobretensión (usualmente comprendida ente -12.5 y 40 v.). De fábrica la memoria sale con 1's en todas sus posiciones, para grabarla se rompen las uniones en que se quieran poner 0's. Esta forma de realizar la grabación se denomina técnica de los fusibles. Los tipos más usados de memoria RAM son los siguientes: DRAM (Dinamic-RAM): La primera memoria hasta la aparición de los 386, era algo lenta (70 ó 80 ns). En formato DIMM o SIMM de 30 contactos. Fast Page (FPM o DRAM): Algo más rápida que la anterior (70 ó 60 ns). Se presenta en formato SIMM de 30 ó 72 contactos. EDO-RAM (Extended Data Output-RAM): Permite empezar a introducir nuevos datos mientras los anteriores están saliendo (70, 60 ó 50 ns), lo que la hace algo más rápida (un 5% más que la FPM). Vienen en SIMMs de 72 contactos, aunque también los hay en DIMM de 168. SDRAM (Sincronic-RAM): Funciona sincronizadamente con la velocidad de la placa (de 50 a 66 MHz), para lo que debe ser rapidísima (de 25 a 10 ns) y se presenta en forma de DIMMs de 168 contactos. PC100 (SDRAM de 100 MHz): Memoria SDRAM que funciona a 100 MHz, que utilizan los micros más modernos. Según los tipos de conectores que lleve la memoria, al conjunto de éstos se les denominan módulos, y éstos a su vez se dividen en: SIMM (Single In-line Memory Module): Pequeña placa de circuito impreso con varios chips de memoria integrados. Se fabrican con diferentes velocidades de acceso capacidades (4, 8, 16, 32, 64 Mb) y son de 30 ó 72 contactos. Se montan por pares generalmente. DIMM: Son más alargados, cuentan con 168 contactos y llevan dos muescas para facilitar su correcta colocación. Pueden montarse de 1 en 1. Tipos de memoria RAM. La memoria RAM del ordenador suele ser la más abundante del sistema, ya que permite la grabación y posterior recuperación de la información contenida en la misma. Podemos dividir la memoria RAM en función del modo en el que trabaja: memoria RAM estática (SRAM: Static RAM) y memoria RAM dinámica (DRAM: Dynamic RAM). Ambos tipos de memoria almacenan los datos utilizando cargas eléctricas. Se diferencian en que utilizan métodos distintos para almacenarlos. La memoria SRAM suele estar basada en transistores de tecnología MOS (Semiconductor de Oxido-Metal), que permiten el almacenamiento de una alta densidad de información. En este tipo de memoria la información se almacena en una red de osciladores biestables, es decir, osciladores que sólo permiten dos estados: cero o uno. La principal característica de las memorias RAM estáticas radica en que una vez introducida la información, ésta se mantiene dentro de la memoria hasta que se desconecte la fuente de alimentación. Las memorias DRAM, por el contrario, almacenan la información en forma de una carga eléctrica en un condensador, el cual sólo puede almacenar una pequeña cantidad de carga que, unido a las inevitables fugas, provoca que la información se pierda a los pocos milisegundos. Para evitar el citado inconveniente, este tipo de memorias, que por otro lado son las más extendidas por ser las más económicas y por ser las que mayor densidad de información permiten, necesitan que se les refresque la información cada cierto tiempo. Hay que destacar que mientras la SRAM necesita un mínimo de siete transistores por cada bit de información, la memoria DRAM solamente necesita un transistor MOSFET y un condensador para la celda. El pequeño condensador, que se debe recargar o refrescar miles de veces por segundo, necesita de una circuitería adicional bastante compleja para sostener la información. Pero esta complejidad se ve compensada por lo reducido del tamaño y del coste de cada celda de memoria. En general, se emplea la DRAM como el sistema principal de almacenamiento de código y de datos, ya que es la más barata de fabricar. La SRAM se utiliza cuando sólo se necesitan pequeñas cantidades de memoria, tal como en el caso de las memorias cachés. La memoria caché es un tipo de memoria de acceso aleatorio especialmente rápida que suele estar localizada, incluso, dentro del propio microprocesador. Suele ser de pequeño tamaño y almacena la información manejada con mayor frecuencia por la CPU. Los nuevos procesadores Pentium cuentan con dos memorias cachés independientes, una para datos y otra para códigos. A continuación se describen brevemente las tecnologías de DRAM existentes en la actualidad: EDO (Extended Data Output). Incorpora varias innovaciones que permiten acelerar hasta un 15% la velocidad de acceso a memoria. SDRAM (DRAM Síncrona). Emplea una señal de reloj, sincronizada con la señal de reloj de la CPU, para coordinar las transferencias. Consigue superar la velocidad de la memoria EDO en un 25%. DDR (Double Data Rate) o SDRAM II. Segunda generación de las memorias SDRAM. Aprovecha tanto el estado alto como el bajo de la señal de reloj para sincronizar las transferencias. Consigue duplicar la velocidad de transferencia sin modificar la frecuencia del reloj (es decir, con la misma CPU). RDRAM (Rambus DRAM). Esta tecnología consigue multiplicar por 10 la velocidad de transferencia de una DRAM estándar, gracias a una tecnología exclusiva denominada RSL (Rambus Signaling Logic). SLDRAM (synclink). Tecnología desarrollada por un consorcio de doce compañías. Es una extensión de la SDRAM, que permite ampliar el número de bancos de 4 a 16. Por supuesto, para aprovechar una de estas tecnologías, el PC debe estar preparado para ello. Valgan como ejemplo los procesadores Pentium 4, que por medio de un acuerdo entre Rambus e Intel, vienen preparados para emplear RDRAM. http://aib.umh.es/1_InTroduccion_Informatica/tema2/ElPCpordentro.htm 3.2.2.3 Características. Características de la Memoria: El tiempo de almacenamiento: (volátil o no). Velocidad de acceso en operaciones de lectura / escritura. Capacidad de almacenamiento. Sin embargo: A mas velocidad mayor costeSOLUCIÓNUtilizar distintos tipos de memoria organizada de forma jerárquica. Tipos: Memorias de solo lectura ROM: PROM y EPROM Memorias de lectura / escritura RAM: SDRAM y DRAM Memorias Magnéticas / ópticas: Discos duros, CDROM, DVD Jerarquía de memoria, Niveles: NIVEL 0 Cache +VELOCIDAD NIVEL 1 Ram/Rom ……..………………. NIVEL 2 Magnético / óptico +CAPACIDAD un sistema de memoria se puede clasificar en función de muy diversas características. Entre ellas se pueden destacar las siguientes: localización de la memoria, capacidad, método de acceso y velocidad de acceso. En el caso de la memoria RAM, también denominada memoria principal o primaria, los valores de estas características son: Localización: interna, se encuentra en la placa base. Capacidad: hoy en día no es raro encontrar PC equipados con 128 o 256 MB de memoria RAM. Método de acceso: memoria de acceso aleatorio. Además, permite el acceso para lectura y escritura de información. Velocidad de acceso: actualmente se pueden encontrar sistemas de memoria RAM capaces de realizar transferencias a frecuencias del orden de los Gbps (gigabits por segundo). También es importante anotar que la RAM es una memoria volátil y por tanto requiere de alimentación eléctrica para mantener la información. Características Tienen matriz: Lugar físico en el que se almacena información. Un punto es el lugar físico donde se almacena un bit. 8 puntos es una celda Byte. Cada celda tiene asociada una dirección, que indica la ubicación física de la celda. Capacidad: número de bytes que puede almacenar. Tiempo de acceso: El tiempo que transcurre desde que el P solicita un dato y la memoria se lo entrega (en ns). CARACTERISTICAS DE LA MEMORIA CAPACIDAD Cantidad de información que puede almacenar en una memoria en concreto. Hay dos tipos: *Util: LA que puede almacenar el usuario. *Bruta: Número total de unidades de información (bits ó bytes) que pueden ser almacenadas en un dispositivo. VELOCIDAD Indica el tiempo desde que se solicita un dato hasta que se recibe. Dos grupos: * De acceso aleatorio: Si se tarde lo mismo independientemente de la situación del dato. De acceso no aleatorio: Influye el tiempo de búsqueda y el de latencia. DURACION DE LA INFORMACION Capacidad de retener la información a lo largo del tiempo. Tiene que ver con la permanencia ó no del suministro de energía eléctrica. *Volátiles: Pierden su contenido sin electricidad. Están basadas en semiconductores. *No volátiles: Permanentes. COSTES Se divide en precio/unidad de información y depende fuertemente de forma antagónica con la velocidad de acceso. Precio T.acceso Coste Registros 20000 pts/MB 10 ns RAM 5000 pts/MB 70 ns Disco duro 100 pts/MB 10 ms Disquetes 50 pts/MB 2 s Cintas Streamer 10 pts/MB 20 s Papel digital 0,01 pts/MB 2 min. Tiempo MODO DE ACCESO Se refiere a como se indica la dirección de la posición de memoria a la que se quiere acceder y como se organiza la información en el interior de la memoria. JERARQUIAS DE MEMORIA Lo que interesa es utilizar memorias rápidas, pero son muy costosas, por lo que se utilizan dispositivos caros(rápidos) para los que operan en la CPU y dispositivos baratos(lentos) pero con mayor capacidad de almacenar información que no se procesa en ese momento determinado. ns REGISTRO En la CPU decenas de ns MEMORIA CACHE MEMORIA PRINCIPAL Placa base de ms a seg. MEMORIA SECUNDARIA Fuera del ordenador 3.2.2.4 Funcionamiento. Función Formada por condensadores, que continuamente se están cargando y descargando, hacen posible almacenar los ceros y unos (ausencia y presencia de corriente respectivamente), el tiempo que tarden a volverse a cargar una vez se descargan recibe el nombre de tiempo de refresco; también hay otro tiempo establecido, es el tiempo de acceso. La memoria de trabajo (normalmente compuesta de chips RAM), hace de cajón o caja al microprocesador dónde guarda los datos que necesita para operar con ellos, así sí la CPU necesita algún dato, el disco duro la busca, y este lo envía a la memoria de trabajo, y éste va a la CPU cuando se la pide. Así pues vemos que es una memoria temporal, puesto que además, al apagar el PC se pierde toda la información que hay. http://www.hardware12v.com/conocimientospc/5.php Funciones que realiza La memoria de un computador se puede definir como 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. Hoy en día se requiere cada vez más memoria para poder utilizar complejos programas y para gestionar complejas redes de computadores. 3.2.3 Dispositivos de I/O. Las unidades de E/S constan de dos elementos: MECÁNICO: denominado “DISPOSITIVO DE E/S”. ELECTRÓNICO: denominado “CONTROLADORES”. Los dispositivos de E/S que se conectan al ordenador se clasifican en: BLOQUE: La información se almacena en bloques, esos bloques son de tamaño fijo. Donde cada bloque tiene una dirección que lo identifica. Se puede leer o escribir en un bloque independiente de los demás. Por ejemplo: disquete, CD, DVD, disco duro. CARÁCTER: La información que se generan o reciben son flujos de caracteres (no bloques). Accede a los datos en secuencia: o sea, para acceder a determinados datos, la lectura y escritura se debe hacer seguido de los datos anteriores. Por ejemplo: teclado, pantalla, cinta, ratones, interfaz de comunicación. La línea de separación no es rígida, hay dispositivos que pueden ser del tipo bloque (cintas Magnéticas) aunque son considerados del tipo carácter. Con esta clasificación, un dispositivo que está fuera de ellas, el “RELOJ”, no es orientado ni a bloque ni de carácter. Si es un dispositivo especial, ya que lo único que hace es generar interrupciones. Otros aspectos importantes que hacen la diferencia entre dispositivos son: Comportamiento: entrada, salida, almacenamiento. Tasa de transferencia: tasa de peak de transferencia entre dispositivos y memoria. El siguiente cuadro hace referencia, a las grandes diferencias entre las clases de dispositivos: DISPOSITIVO TECLADO MOUSE SCANNER VOS (Salida) IMPRESORA COMPORTAMIENTO Entrada " " Salida " CLASIFICACION Carácter " " " " TASA KB/SEG. 0,01 0,02 400 0,6 1,0 (Línea) IMPRESORA (Láser) MODEM RED LAN FLOPPY CD CINTA MAGNETICA DISCO MAGNETICO " " 200 Entrada / salida " Almacenamiento " " " " Bloque " " 2,0-8,0 500-6000 100 1000 2000 " " 2000-10000 Existen otros factores que hacen a su distinción: UNIDADES DE CONTROL REPRESENTACIÓN DE DATOS CONDICIÓN DE ERROR http://exa.unne.edu.ar/depar/areas/informatica/SistemasOperativos/MonogSO/ GESTES02.htm Principios del Software de E / S La idea básica es organizar el software como una serie de capas donde [23, Tanenbaum]: Las capas inferiores se encarguen de ocultar las peculiaridades del hardware a las capas superiores. Las capas superiores deben presentar una interfaz agradable, limpia y regular a los usuarios. Objetivos del Software de E / S Un concepto clave es la independencia del dispositivo: Debe ser posible escribir programas que se puedan utilizar con archivos en distintos dispositivos, sin tener que modificar los programas para cada tipo de dispositivo. El problema debe ser resuelto por el S. O. El objetivo de lograr nombres uniformes está muy relacionado con el de independencia del dispositivo. Todos los archivos y dispositivos adquieren direcciones de la misma forma, es decir mediante el nombre de su ruta de acceso. Otro aspecto importante del software es el manejo de errores de e / s: Generalmente los errores deben manejarse lo más cerca posible del hardware. Solo si los niveles inferiores no pueden resolver el problema, se informa a los niveles superiores. Generalmente la recuperación se puede hacer en un nivel inferior y de forma transparente. Otro aspecto clave son las transferencias síncronas (por bloques) o asíncronas (controlada por interruptores): La mayoría de la e / s es asíncrona: la cpu inicia la transferencia y realiza otras tareas hasta una interrupción. La programación es más fácil si la e / s es síncrona (por bloques): el programa se suspende automáticamente hasta que los datos estén disponibles en el buffer. El S. O. se encarga de hacer que operaciones controladas por interruptores parezcan del tipo de bloques para el usuario. También el S. O. debe administrar los dispositivos compartidos (ej.: discos) y los de uso exclusivo (ej.: impresoras). Generalmente el software de e / s se estructura en capas (ver Figura 5.3 [23, Tanenbaum]): Manejadores de interrupciones. Directivas de dispositivos. Software de S. O. independiente de los dispositivos. Software a nivel usuario. Software de E / S Independiente del Dispositivo Funciones generalmente realizadas por el software independiente del dispositivo: Interfaz uniforme para los manejadores de dispositivos. Nombres de los dispositivos. Protección del dispositivo. Proporcionar un tamaño de bloque independiente del dispositivo. Uso de buffers. Asignación de espacio en los dispositivos por bloques. Asignación y liberación de los dispositivos de uso exclusivo. Informe de errores. Las funciones básicas del software independiente del dispositivo son: Efectuar las funciones de e / s comunes a todos los dispositivos. Proporcionar una interfaz uniforme del software a nivel usuario. El software independiente del dispositivo asocia los nombres simbólicos de los dispositivos con el nombre adecuado. Un nombre de dispositivo determina de manera única el nodo-i de un archivo especial: Este nodo-i contiene el número principal del dispositivo, que se utiliza para localizar el manejador apropiado. El nodo-i contiene también el número secundario de dispositivo, que se transfiere como parámetro al manejador para determinar la unidad por leer o escribir. El software independiente del dispositivo debe: Ocultar a los niveles superiores los diferentes tamaños de sector de los distintos discos. Proporcionar un tamaño uniforme de los bloques, por ej.: considerar varios sectores físicos como un solo bloque lógico. Software de E / S en el Espacio del Usuario La mayoría del software de e / s está dentro del S. O. Una pequeña parte consta de bibliotecas ligadas entre sí con los programas del usuario. La biblioteca estándar de e / s contiene varios procedimientos relacionados con e / s y todos se ejecutan como parte de los programas del usuario. Otra categoría importante de software de e / s a nivel usuario es el sistema de spooling. El spooling es una forma de trabajar con los dispositivos de e /s de uso exclusivo en un sistema de multiprogramación: El ejemplo típico lo constituye la impresora de líneas. Los procesos de usuario no abren el archivo correspondiente a la impresora. Se crea un proceso especial, llamado demonio en algunos sistemas. Se crea un directorio de spooling. Para imprimir un archivo: Un proceso genera todo el archivo por imprimir y lo coloca en el directorio de spooling. El proceso especial, único con permiso para utilizar el archivo especial de la impresora, debe imprimir los archivos en el directorio. Se evita el posible problema de tener un proceso de usuario que mantenga un recurso tomado largo tiempo. Un esquema similar también es aplicable para la transferencia de archivos entre equipos conectados: Un usuario coloca un archivo en un directorio de spooling de la red. Posteriormente, el proceso especial lo toma y transmite. Un ej. son los sistemas de correo electrónico. http://exa.unne.edu.ar/depar/areas/informatica/SistemasOperativos/SO5.htm 3.2.3.1 3.2.3.2 Arquitecturas. Tipos. Los dispositivos de entrada salida se dividen, en general, en dos tipos: dispositivos orientados a bloques y dispositivos orientados a caracteres. Los dispositivos orientados a bloques tienen la propiedad de que se pueden direccionar, esto es, el programador puede escribir o leer cualquier bloque del dispositivo realizando primero una operación de posicionamiento sobre el dispositivo. Los dispositivos más comunes orientados a bloques son los discos duros, la memoria, discos compactos y, posiblemente, unidades de cinta. Por otro lado, los dispositivos orientados a caracteres son aquellos que trabajan con secuencias de byes sin importar su longitud ni ningúna agrupación en especial. No son dispositivos direccionables. Ejemplos de estos dispositivos son el teclado, la pantalla o display y las impresoras. La clasificación anterior no es perfecta, porque existen varios dispositivos que generan entrada o salida que no pueden englobarse en esas categorías. Por ejemplo, un reloj que genera pulsos. Sin embargo, aunque existan algunos periféricos que no se puedan categorizar, todos están administrados por el sistema operativo por medio de una parte electrónica - mecánica y una parte de software. http://www.tau.org.ar/base/lara.pue.udlap.mx/sistoper/capitulo6.html Dispositivos de entrada Estos dispositivos permiten al usuario del ordenador introducir datos, comandos y programas en la CPU. El dispositivo de entrada más común es un teclado similar al de las máquinas de escribir. La información introducida con el mismo, es transformada por el ordenador en modelos reconocibles. Otros dispositivos de entrada son los lápices ópticos, que transmiten información gráfica desde tabletas electrónicas hasta el ordenador; joysticks y el ratón o mouse, que convierte el movimiento físico en movimiento dentro de una pantalla de ordenador; los escáneres luminosos, que leen palabras o símbolos de una página impresa y los traducen a configuraciones electrónicas que el ordenador puede manipular y almacenar; y los módulos de reconocimiento de voz, que convierten la palabra hablada en señales digitales comprensibles para el ordenador. También es posible utilizar los dispositivos de almacenamiento para introducir datos en la unidad de proceso. Otros dispositivos de entrada, usados en la industria, son los sensores. Dispositivos de Entrada/Salida Los dispositivos de almacenamiento externos, que pueden residir físicamente dentro de la unidad de proceso principal del ordenador, están fuera de la placa de circuitos principal. Estos dispositivos almacenan los datos en forma de cargas sobre un medio magnéticamente sensible, por ejemplo una cinta de sonido o, lo que es más común, sobre un disco revestido de una fina capa de partículas metálicas. Los dispositivos de almacenamiento externo más frecuentes son los disquetes y los discos duros, aunque la mayoría de los grandes sistemas informáticos utiliza bancos de unidades de almacenamiento en cinta magnética. Los discos flexibles pueden contener, según sea el sistema, desde varios centenares de miles de bytes hasta bastante más de un millón de bytes de datos. Los discos duros no pueden extraerse de los receptáculos de la unidad de disco, que contienen los dispositivos electrónicos para leer y escribir datos sobre la superficie magnética de los discos y pueden almacenar desde varios millones de bytes hasta algunos centenares de millones. La tecnología de CD-ROM, que emplea las mismas técnicas láser utilizadas para crear los discos compactos (CD) de audio, permiten capacidades de almacenamiento del orden de varios cientos de megabytes (millones de bytes) de datos. También hay que añadir los recientemente aparecidos DVD que permiten almacenar más de 4 Gb de información. Dispositivos de salida Estos dispositivos permiten al usuario ver los resultados de los cálculos o de las manipulaciones de datos de la computadora. El dispositivo de salida más común es la unidad de visualización, que consiste en un monitor que presenta los caracteres y gráficos en una pantalla similar a la del televisor. Por lo general, los monitores tienen un tubo de rayos catódicos como el de cualquier televisor, aunque los ordenadores pequeños y portátiles utilizan hoy pantallas de cristal líquido (LCD, acrónimo de Liquid Crystal Displays) o electroluminiscentes. Otros dispositivos de salida más comunes son las impresoras, que permiten obtener una copia impresa de la información que reside en los dispositivos de almacenamiento, las tarjetas de sonido y los módem. Un módem enlaza dos ordenadores transformando las señales digitales en analógicas para que los datos puedan transmitirse a través de las líneas telefónicas convencionales. Dispositivos de entrada Son los que envían información a la unidad de procesamiento, en código binario. Dispositivos de entrada (entre otros): Teclado: Un teclado se compone de una serie de teclas agrupadas en funciones que podremos describir: Teclado alfanumérico: es un conjunto de 62 teclas entre las que se encuentran las letras, números, símbolos ortográficos, Enter, alt...etc. Teclado de Función: es un conjunto de 13 teclas entre las que se encuentran el ESC, tan utilizado en sistemas informáticos, más 12 teclas de función. Estas teclas suelen ser configurables pero por ejemplo existe un convenio para asignar la ayuda a F1. Teclado Numérico: se suele encontrar a la derecha del teclado alfanumérico y consta de los números así como de un Enter y los operadores numéricos de suma, resta,... etc. Teclado Especial: son las flechas de dirección y un conjunto de 9 teclas agrupadas en 2 grupos; uno de 6 (Inicio y fin entre otras) y otro de 3 con la tecla de impresión de pantalla entre ellas. Recomendaciones: En este apartado es conveniente distinguir entre dos tipos de teclado: De Membrana: Fueron los primeros que salieron y como su propio nombre indica presentan una membrana entre la tecla y el circuito que hace que la pulsación sea un poco más dura. Mecánico: Estos nuevos teclados presentan otro sistema que hace que la pulsación sea menos traumática y más suave para el usuario. Mouse: A este periférico se le llamó así por su parecido con este roedor. Suelen estar constituidos por una caja con una forma más o menos anatómica en la que se encuentran dos botones que harán los famosos clicks de ratón siendo transmitidos por el cable al puerto PS/II o al puerto de serie (COM1 normalmente). Dentro de esta caja se encuentra una bola que sobresale de la caja a la que se pegan 4 rodillos ortogonalmente dispuestos que serán los que definan la dirección de movimiento del ratón. El ratón se mueve por una alfombrilla ocasionando el movimiento de la bola que a su vez origina el movimiento de uno o varios de estos rodillos que se transforma en señales eléctricas y producen el efecto de desplazamiento del ratón por la pantalla del ordenador. Existen modelos modernos en los que la transmisión se hace por infrarrojos eliminando por tanto la necesidad de cableado. Otros presentan la bola en la parte superior de la caja no estando por tanto en contacto con la alfombrilla y teniendo que ser movida por los dedos del usuario aunque se origina el mismo efecto. Micrófono: Periférico por el cual transmite sonidos que el ordenador capta y los reproduce, los salva, etc. Se conecta a la tarjeta de sonido. Escáner: Es un dispositivo utiliza un haz luminoso para detectar los patrones de luz y oscuridad (o los colores) de la superficie del papel, convirtiendo la imagen en señales digitales que se pueden manipular por medio de un software de tratamiento de imágenes o con reconocimiento óptico de caracteres. Un tipo de escáner utilizado con frecuencia es el flatbed, que significa que el dispositivo de barrido se desplaza a lo largo de un documento fijo. En este tipo de escáneres, como las fotocopiadoras de oficina, los objetos se colocan boca abajo sobre una superficie lisa de cristal y son barridos por un mecanismo que pasa por debajo de ellos. Otro tipo de escáner flatbed utiliza un elemento de barrido instalado en una carcasa fija encima del documento. Un tipo muy popular de escáner es el escáner de mano, también llamado handheld, porque el usuario sujeta el escáner con la mano y lo desplaza sobre el documento. Estos escáneres tienen la ventaja de ser relativamente baratos, pero resultan algo limitados porque no pueden leer documentos con una anchura mayor a 12 o 15 centímetros. Lector de código de barras: dispositivo que mediante un haz de láser lee dibujos formados por barras y espacios paralelos, que codifica información mediante anchuras relativas de estos elementos. Los códigos de barras representan datos en una forma legible por el ordenador, y son uno de los medios más eficientes para la captación automática de datos. Cámara digital: Cámara que se conecta al ordenador y le transmite las imágenes que capta, pudiendo ser modificada y retocada, o volverla a tomar en caso de que este mal. Puede haber varios tipos: Cámara de fotos digital: Toma fotos con calidad digital, casi todas incorporan una pantalla LCD (Liquid Cristal Display) donde se puede visualizar la imagen obtenida. Tiene una pequeña memoria donde almacena fotos para después transmitirlas a un ordenador. Cámara de video: Graba videos como si de una cámara normal se tratara, pero las ventajas que ofrece en estar en formato digital, que es mucho mejor la imagen, tiene una pantalla LCD por la que ves simultáneamente la imagen mientras grabas. Se conecta al PC y este recoge el video que has grabado, para poder retocarlo posteriormente con el software adecuado. Webcam: Es una cámara de pequeñas dimensiones. Sólo es la cámara, no tiene LCD. Tiene que estar conectada al PC para poder funcionar, y esta transmite las imágenes al ordenador. Su uso es generalmente para videoconferencias por internet, pero mediante el software adecuado, se pueden grabar videos como una cámara normal y tomar fotos estáticas. Lápiz Óptico: dispositivo señalador que permite sostener sobre la pantalla un lápiz que está conectado al ordenador y con el que es posible seleccionar elementos u opciones (el equivalente a un clic de mouse o ratón), bien presionando un botón en un lateral del lápiz óptico o presionando éste contra la superficie de la pantalla. El lápiz contiene sensores luminosos y envía una señal a la computadora cada vez que registra una luz, por ejemplo al tocar la pantalla cuando los píxeles no negros que se encuentran bajo la punta del lápiz son refrescados por el haz de electrones de la pantalla. La pantalla de la computadora no se ilumina en su totalidad al mismo tiempo, sino que el haz de electrones que ilumina los píxeles los recorre línea por línea, todas en un espacio de 1/50 de segundo. Detectando el momento en que el haz de electrones pasa bajo la punta del lápiz óptico, el ordenador puede determinar la posición del lápiz en la pantalla. El lápiz óptico no requiere una pantalla ni un recubrimiento especiales como puede ser el caso de una pantalla táctil, pero tiene la desventaja de que sostener el lápiz contra la pantalla durante periodos largos de tiempo llega a cansar al usuario. Joystick: dispositivo señalador muy conocido, utilizado mayoritariamente para juegos de ordenador o computadora, pero que también se emplea para otras tareas. Un joystick o palanca de juegos tiene normalmente una base de plástico redonda o rectangular, a la que está acoplada una palanca vertical. Los botones de control se localizan sobre la base y algunas veces en la parte superior de la palanca, que puede moverse en todas direcciones para controlar el movimiento de un objeto en la pantalla. Los botones activan diversos elementos de software, generalmente produciendo un efecto en la pantalla. Un joystick es normalmente un dispositivo señalador relativo, que mueve un objeto en la pantalla cuando la palanca se mueve con respecto al centro y que detiene el movimiento cuando se suelta. En aplicaciones industriales de control, el joystick puede ser también un dispositivo señalador absoluto, en el que con cada posición de la palanca se marca una localización específica en la pantalla. Tarjetas perforadas: ficha de papel manila de 80 columnas, de unos 7,5 cm (3 pulgadas) de ancho por 18 cm (7 pulgadas) de largo, en la que podían introducirse 80 columnas de datos en forma de orificios practicados por una máquina perforadora. Estos orificios correspondían a números, letras y otros caracteres que podía leer un ordenador equipada con lector de tarjetas perforadas. Pantalla Táctil: pantalla diseñada o modificada para reconocer la situación de una presión en su superficie. Al tocar la pantalla, el usuario puede hacer una selección o mover el cursor. El tipo de pantalla táctil más sencillo está compuesto de una red de líneas sensibles, que determinan la situación de una presión mediante la unión de los contactos verticales y horizontales. Otros tipos de pantallas más precisas utilizan una superficie cargada eléctricamente y sensores alrededor de los bordes externos de la pantalla, para detectar la cantidad de cambio eléctrico y señalar exactamente donde se ha realizado el contacto. Un tercer tipo fija diodos emisores de rayos infrarrojos (LEDs, acrónimo de Light-Emitting Diodes) y sensores alrededor de los bordes externos de la pantalla. Estos LEDs y sensores crean una red invisible de infrarrojos en la parte delantera de la pantalla que interrumpe el usuario con sus dedos. Las pantallas táctiles de infrarrojos se usan a menudo en entornos sucios, donde la suciedad podría interferir en el modo de operación de otros tipos de pantallas táctiles. La popularidad de las pantallas táctiles entre los usuarios se ha visto limitada porque es necesario mantener las manos en el aire para señalar la pantalla, lo que sería demasiado incómodo en largos periodos de tiempo. Además no ofrece gran precisión al tener que señalar ciertos elementos en programas de alta resolución. Las pantallas táctiles, sin embargo, son enormemente populares en aplicaciones como los puestos de información porque ofrecen una forma de señalar que no requiere ningún hardware móvil y porque presionar la pantalla es algo intuitivo. Dispositivos de salida Son los dispositivos que reciben información que es procesada por la CPU y la reproducen para que sea perceptible para la persona. Dispositivos de salida (entre otros): Monitor: es la pantalla en la que se ve la información suministrada por el ordenador. En el caso más habitual se trata de un aparato basado en un tubo de rayos catódicos (CRT) como el de los televisores, mientras que en los portátiles es una pantalla plana de cristal líquido (LCD). Puntos a tratar en un monitor: Resolución (RESOLUTION): Se trata del número de puntos que puede representar el monitor por pantalla, en horizontal x vertical. Así, un monitor cuya resolución máxima sea 1024x 768 puntos puede representar hasta 768 líneas horizontales de 1024 puntos cada una, probablemente además de otras resoluciones inferiores, como 640x480 u 800x600. Refresco de Pantalla: Se puede comparar al número de fotogramas por segundo de una película de cine, por lo que deberá ser lo mayor posible. Se mide en HZ (hertzios) y debe estar por encima de los 60 Hz, preferiblemente 70 u 80. A partir de esta cifra, la imagen en la pantalla es sumamente estable, sin parpadeos apreciables, con lo que la vista sufre mucho menos. Tamaño de punto (DOT PITCH): Es un parámetro que mide la nitidez de la imagen, midiendo la distancia entre dos puntos del mismo color; resulta fundamental a grandes resoluciones. En ocasiones es diferente en vertical que en horizontal, o se trata de un valor medio, dependiendo de la disposición particular de los puntos de color en la pantalla, así como del tipo de rejilla empleada para dirigir los haces de electrones. Lo mínimo, exigible en este momento es que sea de 0,25 mm, no debiéndose admitir nada superior como no sea en monitores de gran formato para presentaciones, donde la resolución no es tan importante como el tamaño de la imagen. Controles y conexiones: Aunque se va cada vez más el uso de monitores con controles digitales, en principio no debe ser algo determinante a la hora de elegir un monitor, si bien se tiende a que los monitores con dichos controles sean los más avanzados de la gama. Multimedia: Algunos monitores llevan acoplados altavoces, e incluso micrófono y/o cámaras de video. Esto resulta interesante cuando se trata de un monitor de 15'' ó 17'' cuyo uso vaya a ser doméstico, para juegos o videoconferencias. Pantalla táctil: véase en dispositivos de entrada. Impresoras: Dispositivo que sirve para captar la información que le envía la CPU y imprimirla en papel, plástico, etc. Hay varios tipos: Matriciales: Ofrecen mayor rapidez pero una calidad muy baja. Inyección: La tecnología de inyección a tinta es la que ha alcanzado un mayor éxito en las impresoras de uso doméstico o para pequeñas empresas, gracias a su relativa velocidad, calidad y sobre todo precio reducidos, que suele ser la décima parte de una impresora de las mismas características. Claro está que hay razones de peso que justifican éstas características, pero para imprimir algunas cartas, facturas y pequeños trabajos, el rendimiento es similar y el coste muy inferior. Hablamos de impresoras de color porque la tendencia del mercado es que la informática en conjunto sea en color. Esta tendencia empezó hace una década con la implantación de tarjetas gráficas y monitores en color. Todavía podemos encontrar algunos modelos en blanco y negro pero ya no son recomendables. Las impresoras de inyección cuentan a favor con elementos como el coste, tanto de adquisición como de mantenimiento, la sencillez de manejo y el tamaño. En contra tenemos su escasa velocidad y calidad frente a otras tecnologías. Láser: Ofrecen rapidez y una mayor calidad que cualquiera, pero tienen un alto coste y solo se suelen utilizar en la mediana y grande empresa. Por medio de un haz de láser imprimen sobre el material que le pongamos las imágenes que le haya enviado la CPU. Altavoces: Dispositivos por los cuales se emiten sonidos procedentes de la tarjeta de sonido. Actualmente existen bastantes ejemplares que cubren la oferta más común que existe en el mercado. Se trata de modelos que van desde lo más sencillo (una pareja de altavoces estéreo), hasta el más complicado sistema de Dolby Digital, con nada menos que seis altavoces, pasando por productos intermedios de 4 o 5 altavoces. Sin duda alguna, se nota perfectamente el esfuerzo que todos los fabricantes han realizado para ponerse al día en esta tecnología, ya que en poco tiempo han incorporado a su tecnología desarrollos basados en Dolby Surround o Dolby Digital. Los más avanzados constan de 4 altavoces (2 delanteros y 2 traseros) de reducido tamaño, otro más central para los diálogos y un último altavoz mucho más voluminoso que se encarga de realzar las fuerzas de los graves. Hasta aquí todo parece indicar que se trata de otros juegos de altavoces cuadrafónicos. Pero la diferencia principal de estos sistemas es que incorporan un descodificador Dolby Digital, mediante el cual, podremos ajustar los volúmenes de cada juego de altavoces, así como aplicar diferentes filtros de sonido en funcíon del tipo de sonido que estemos reproduciendo en cada momento (música, película...etc). Para sacar partido de estos altavoces es necesario que nuestra tarjeta de sonido cuente con una salida S/PDIF de Dolby Digital ya que a través de ésta es desde donde los conjuntos de altavoces toman el sonido. La desventaja de este tipo de unidades suele ser la calidad de las mismas. Teniendo en cuenta el precio de este tipo de conjuntos, en el que se incluye un aparato decodificador, la calidad de los 6s altavoces no puede ser especialmente buena, aunque para un uso casero resulta más que válida. Otra cuestíon es la potencia. Tratándose de altavoces pequeños y baratos no conseguirán una fildelidad de sonido muy grande a poco que la habitación tenga un tamaño medio. En cualquier caso los equipos basados en Dolby Digital son muy escasos por el momento y debemos recurrir a equipos grandes si deseamos una calidad de sonido suficiente y por tanto será inevitable gastar una cantidad de dinero bastante importante. Auriculares: son dispositivos colocados en el oído para poder escuchar los sonidos que la tarjeta de sonido envía. Presentan la ventaja de que no pueden ser escuchados por otra persona, solo la que los utiliza. Fax: Dispositivo mediante el cual se imprime una copia de otro impreso, transmitida o bien, vía teléfono, o bien desde el propio fax. Se utiliza para ello un rollo de papel que cuando acaba la impresión se corta. http://www.monografias.com/trabajos14/dispositivos/dispositivos.shtml# 3.2.3.3 Características. Dispositivos de E / S Se pueden clasificar en dos grandes categorías: Dispositivos de bloque. Dispositivos de caracter. Las principales características de los dispositivos de bloque son: La información se almacena en bloques de tamaño fijo. Cada bloque tiene su propia dirección. Los tamaños más comunes de los bloques van desde los 128 bytes hasta los 1.024 bytes. Se puede leer o escribir en un bloque de forma independiente de los demás, en cualquier momento. Un ejemplo típico de dispositivos de bloque son los discos. Las principales características de los dispositivos de caracter son: La información se transfiere como un flujo de caracteres, sin sujetarse a una estructura de bloques. No se pueden utilizar direcciones. No tienen una operación de búsqueda. Un ejemplos típico de dispositivos de caracter son las impresoras de línea, terminales, interfaces de una red, ratones, etc. Algunos dispositivos no se ajustan a este esquema de clasificación, por ejemplo los relojes, que no tienen direcciones por medio de bloques y no generan o aceptan flujos de caracteres. El sistema de archivos solo trabaja con dispositivos de bloque abstractos, por lo que encarga la parte dependiente del dispositivo a un software de menor nivel, el software manejador del dispositivo. http://exa.unne.edu.ar/depar/areas/informatica/SistemasOperativos/SO5.htm Controladores de Dispositivos Las unidades de e / s generalmente constan de: Un componente mecánico. Un componente electrónico, el controlador del dispositivo o adaptador. Muchos controladores pueden manejar más de un dispositivo. El S. O. generalmente trabaja con el controlador y no con el dispositivo. Los modelos más frecuentes de comunicación entre la cpu y los controladores son: Para la mayoría de las micro y mini computadoras: o Modelo de bus del sistema. Para la mayoría de los mainframes: o Modelo de varios buses y computadoras especializadas en e / s llamadas canales de e / s. La interfaz entre el controlador y el dispositivo es con frecuencia de muy bajo nivel: La comunicación es mediante un flujo de bits en serie que: o Comienza con un preámbulo. o Sigue con una serie de bits (de un sector de disco, por ej.). o Concluye con una suma para verificación o un código corrector de errores. El preámbulo: o Se escribe al dar formato al disco. o Contiene el número de cilindro y sector, el tamaño de sector y otros datos similares. El controlador debe: Convertir el flujo de bits en serie en un bloque de bytes. Efectuar cualquier corrección de errores necesaria. Copiar el bloque en la memoria principal. Cada controlador posee registros que utiliza para comunicarse con la cpu: Pueden ser parte del espacio normal de direcciones de la memoria: e / s mapeada a memoria. Pueden utilizar un espacio de direcciones especial para la e / s, asignando a cada controlador una parte de él. El S. O. realiza la e / s al escribir comandos en los registros de los controladores; los parámetros de los comandos también se cargan en los registros de los controladores. Al aceptar el comando, la cpu puede dejar al controlador y dedicarse a otro trabajo. Al terminar el comando, el controlador provoca una interrupción para permitir que el S. O.: Obtenga el control de la cpu. Verifique los resultados de la operación. La cpu obtiene los resultados y el estado del dispositivo al leer uno o más bytes de información de los registros del controlador. Ejemplos de controladores, sus direcciones de e / s y sus vectores de interrupción en la PC IBM pueden verse en la Tabla 5.1 [23, Tanenbaum]. Controlador de e / Dirección de e / s s Vector de interrupciones Reloj 040 - 043 8 Teclado 060 - 063 9 Disco duro 320 - 32f 13 Impresora 378 - 37f 15 Disco flexible 3f0 - 3f7 14 Rs232 primario 3f8 - 3ff 12 Rs232 secundario 2f8 - 2ff 11 Tabla 5.1: Controladores de e / s, direcciones de e / s y vector de interrupciones. http://exa.unne.edu.ar/depar/areas/informatica/SistemasOperativos/SO5.htm 3.2.3.4 Funcionamiento. Funciones que realiza Vamos a señalar las funciones que debe realizar un computador para ejecutar trabajos de entrada/salida: Direccionamiento o selección del dispositivo que debe llevar a cabo la operación de E/S. Transferencia de los datos entre el procesador y el dispositivo (en uno u otro sentido). Sincronización y coordinación de las operaciones. Esta última función es necesaria debido a la deferencia de velocidades entre los dispositivos y la CPU y a la independencia que debe existir entre los periféricos y la CPU (por ejemplo, suelen tener relojes diferentes). Se define una transferencia elemental de información como la transmisión de una sola unidad de información (normalmente un byte) entre el procesador y el periférico o viceversa. Para efectuar una transferencia elemental de información son precisas las siguientes funciones: Establecimiento de una comunicación física entre el procesador y el periférico para la transmisión de la unidad de información. Control de los periféricos, en que se incluyen operaciones como prueba y modificación del estado del periférico. Para realizar estas funciones la CPU gestionará las líneas de control necesarias. Definiremos una operación de E/S como el conjunto de acciones necesarias para la transferencia de un conjunto de datos (es decir, una transferencia completa de datos). Para la realización de una operación de E/S se deben efectuar las siguientes funciones: Recuento de las unidades de información transferidas (normalmente bytes) para reconocer el fin de operación. Sincronización de velocidad entre la CPU y el periférico. Detección de errores (e incluso corrección) mediante la utilización de los códigos necesarios (bits de paridad, códigos de redundancia cíclica, etc.) Almacenamiento temporal de la información. Es más eficiente utilizar un buffer temporal específico para las operaciones de E/S que utilizan el área de datos del programa. Conversión de códigos, conversión serie/paralelo, etc. Dispositivos externos Una de las funciones básicas del ordenador es comunicarse con los dispositivos exteriores, es decir, el ordenador debe ser capaz de enviar y recibir datos desde estos dispositivo. Sin esta función, el ordenador no sería operativo porque sus cálculos no serían visibles desde el exterior. Existe una gran variedad de dispositivos que pueden comunicarse con un ordenador, desde los dispositivos clásicos (terminales, impresoras, discos, cintas, etc.) hasta convertidores A/D y D/A para aplicaciones de medida y control de procesos, De todos los posibles periféricos, algunos son de lectura, otros de escritura y otros de lectura y escritura (es importante resaltar que este hecho siempre se mira desde el punto de vista del proceso). Por otra parte, existen periféricos de almacenamiento también llamados memorias auxiliares o masivas. La mayoría de los periféricos están compuestos por una parte mecánica y otra parte electrónica. Estas partes suelen separarse claramente para dar una mayor modularidad. A la componente electrónica del periférico se le suele denominar controlador del dispositivo o, también, adaptador del dispositivo. Si el dispositivo no tiene parte mecánica (como, por ejemplo, la pantalla de un terminal), el controlador estará formado por la parte digital del circuito. Frecuentemente los controladores de los dispositivos están alojados en una placa de circuito impreso diferenciada del resto del periférico. En este caso es bastante habitual que un mismo controlador pueda dar servicio a dispositivos de características similares. El principal problema planteado por los periféricos es su gran variedad que también afecta a las velocidades de transmisión. Por tanto, el mayor inconveniente que encontramos en los periféricos es la diferencia entre sus velocidades de transmisión y la diferencia entre éstas y la velocidad de operación del ordenador. http://www.mailxmail.com/curso/informatica/arquitectur aordenadores/capitulo16.htm Unidad 2. Comunicación interna en la computadora. 2.6 Buses. BUSES DEL SISTEMA Funciones que realiza El bus se puede definir como un conjunto de líneas conductoras de hardware utilizadas para la transmisión de datos entre los componentes de un sistema informático. Un bus es una ruta que conecta diferentes partes del sistema, como el microprocesador, la controladora de unidad de disco, la memoria y los puertos de entrada/salida, para permitir la transmisión de información. En el bus se encuentran dos pistas separadas, el bus de datos y el bus de direcciones. La CPU escribe la dirección de la posición deseada de la memoria en el bus de direcciones accediendo a la memoria, teniendo cada una de las líneas carácter binario. Es decir solo pueden representar 0 o 1 y de esta manera forman conjuntamente el número de la posición dentro de la memoria (es decir: la dirección) Estructuras de interconexión Existen dos estructuras de operaciones Entrada/Salida que tienen que ver con los buses, son: el bus único y el bus dedicado. El bus dedicado trata a la memoria de manera distinta que a los periféricos (utiliza un bus especial) al contrario que el bus único que los considera a ambos como posiciones de memoria. Este bus especial que utiliza el bus dedicado tiene 4 componentes fundamentales: o o o o Datos: Intercambio de información entre la CPU y los periféricos. Control: Lleva información referente al estado de los periféricos (petición de interrupciones). Direcciones: Identifica el periférico referido. Sincronización: Temporiza las señales de reloj. La mayor ventaja del bus único es su simplicidad de estructura que le hace ser más económico, no permite que se realice a la vez transferencia de información entre la memoria y el procesador y entre los periféricos y el procesador. El bus dedicado es mucho más flexible y permite transferencias simultáneas. Su estructura es más compleja y por tanto sus costes son mayores. Bus es una voz inglesa que significa "transporte". Aplicada a la informática, permite significar la idea de las transferencias internas de datos que se dan en un sistema computacional en funcionamiento. En el bus todos los nodos reciben los datos aunque no se dirijan a todos los nodos, los nodos a los que no van dirigidos simplemente lo ignorán. Este sistema se usan, a veces, incluso en otras topologias como la ethernet que, aunque es en forma de estrella, se comporta como un bus cuando el concentrador es un hub en vez de un switch. En Informática, bus es el conjunto de conductores eléctricos en forma de pistas metálicas impresas sobre la tarjeta madre del computador, por donde circulan las señales que corresponden a los datos binarios del lenguaje máquina con que opera el Microprocesador. Hay tres clases de buses: Bus de Datos, Bus de Direcciones y Bus de Control. El primero mueve los datos entre los dispositivos del hardware: de Entrada como el Teclado, el Escáner, el Ratón, etc.; de salida como la Impresora, el Monitor o la tarjeta de Sonido; y de Almacenamiento como el Disco Duro, el Diskette o la Memoria-Flash. Estas transferencias que se dan a través del Bus de Datos son gobernadas por varios dispositivos y métodos, de los cuales el Controlador PCI, "Peripheral Component Interconnect", Interconexión de componentes Periféricos, es uno de los principales. Su trabajo equivale, simplificando mucho el asunto, a una central de semáforos para el tráfico en las calles de una ciudad. El Bus de Direcciones, por otra parte, está vinculado al bloque de Control de la CPU para tomar y colocar datos en el Sub-sistema de Memoria durante la ejecución de los procesos de cómputo, El Bus de Control transporta señales de estado de las operaciones efectuadas por el CPU con las demás unidades. Una tarjeta-madre tipo ATX tiene tantas pistas eléctricas destinadas a buses, como anchos sean los Canales de Buses del Microprocesador de la CPU: 64 para el Bus de datos y 32 para el Bus de Direcciones. El "ancho de canal" explica la cantidad de bits que pueden ser transferidos simultáneamente. Así, el Bus de datos transfiere 8 bytes a la vez. Para el Bus de Direcciones, el "ancho de canal" explica así mismo la cantidad de ubicaciones o Direcciones diferentes que el microprocesador puede alcanzar. Esa cantidad de ubicaciones resulta de elevar el 2 a la 32 potencia. "2" porque son dos las señales binarias, los bits 1 y 0; y "32 potencia" porque las 32 pistas del Bus de Direcciones son, en un instante dado, un conjunto de 32 bits. Así, el Canal de Direcciones del Microprocesador para una PC-ATX puede "direccionar" más de 4 mil millones de combinaciones diferentes para el conjunto de 32 bits de su Bus. http://es.wikipedia.org/wiki/Bus_de_datos Concepto y Función Es el elemento responsable de establecer una correcta interacción entre los diferentes componentes del ordenador, es por lo tanto, el dispositivo principal de comunicación. En un sentido físico, su descripción es: conjunto de líneas de hardware (metálicas o físicas), utilizadas para la transmisión de datos entre los componentes de un sistema informático. En cambio, en sentido figurado es: una ruta compartida, que conecta diferentes partes del sistema. Componentes y estructura Un bus está compuesto por conductos (vías), éstas hacen posible la interconexión de los diferentes componentes entre sí, y principalmente con la CPU y la memoria. En estos conductos se destacan dos subcategorías, el bus de datos y el bus de direcciones; entre estos existe una fuerte relación, puesto que para cada instrucción/archivo enviado por uno de los dos buses, por el otro va información sobre esta instrucción/archivo. En lo referente a la estructura de interconexión mediante los buses, existen de dos tipo: · Bus único : considera a la memoria y a los periféricos como posiciones de memoria, y hace un símil de las operaciones E/S con las de escritura/lectura en memoria. Todas estas equivalencias consideradas por este bus, hacen que no permita controladores DMA (Direct Acces Memory ; de acceso directo a memoria). · Bus dedicado : este en cambio, al considerar la memoria y periféricos como dos componentes diferentes, permite controladores DMA (dedicando un bus especial para él). Éste bus especial del bus dedicado, contiene cuatro subcategorías más: · Bus de datos : transmite información entre la CPU y los periféricos. · Bus de direcciones : identifica el dispositivo a quién va destinada la información que se transmite por el bus de datos. · Bus de control o de sistema : organiza y redirige la información hacia el bus pertinente para la información que se tiene que transmitir. Es el bus encargado de hacer el direccionamiento, quién realiza toda la función de direccionar es el controlador, diferente para cada tipo de dispositivo. La capacidad operativa del bus depende de: la inteligencia del sistema, la velocidad de éste, y la "anchura" del bus (número de conductos de datos que operan en paralelo) Aquí tenemos una tabla de los difer entes procesadores que ha habido hasta ahora y su capacidad de bus: Procesadores Bus de direcciones (bits) Bus de datos (bits) 808680186 20 16 808880188 20 8 80286 24 16 80386 SX 32 16 80386 DX 80486 SX 80486 DX 32 32 PENTIUM PENTIUM II/III/IV AMD K5/K6/K7 AMD ATHLON/THUNDERBIRD AMD ATHLON XP/MP 32 64 INTEL ITANIUM AMD ATHLON64 32/64 64/128 http://www.hardware12v.com/conocimientospc/41.php Ahora vamos a ver los distintos tipos de buses que se han ido desarrollando y los que se emplean en la actualidad. EL BUS XT y EL BUS ISA (AT) Cuando en 1980 IBM fabricó su primer PC, este contaba con un bus de expansión conocido como XT que funcionaba a la misma velocidad que los procesadores Intel 8086 y 8088 (4.77 Mhz). El ancho de banda de este bus (8 bits) con el procesador 8088 formaba un tandem perfecto, pero la ampliación del bus de datos en el 8086 a 16 bits dejo en entredicho este tipo de bus (aparecieron los famosos cuellos de botella). Dada la evolución de los microprocesadores el bus del PC no era ni mucho menos la solución para una comunicación fluida con el exterior del micro. En definitiva no podía hablarse de una autopista de datos en un PC cuando esta sólo tenía un ancho de 8 bits. Por lo tanto con la introducción del AT apareció un nuevo bus en el mundo del PC, que en relación con el bus de datos tenía finalmente 16 bits (ISA), pero que era compatible con su antecesor. La única diferencia fue que el bus XT era síncrono y el nuevo AT era asíncrono. Las viejas tarjetas de 8 bits de la época del PC pueden por tanto manejarse con las nuevas tarjetas de 16 bits en un mismo dispositivo. De todas maneras las tarjetas de 16 bits son considerablemente más rápidas, ya que transfieren la misma cantidad de datos en comparación con las tarjetas de 8 bits en la mitad de tiempo (transferencia de 16 bits en lugar de transferencia de 8 bits). No tan solo se amplió el bus de datos sino que también se amplió el bus de direcciones, concretamente hasta 24 bits, de manera que este se podía dirigir al AT con memoria de 16 MB. Además también se aumentó la velocidad de cada una de las señales de frecuencia, de manera que toda la circulación de bus se desarrollaba más rápidamente. De 4.77 Mhz en el XT se pasó a 8.33 Mhz. Como consecuencia el bus forma un cuello de botella por el cual no pueden transferirse nunca los datos entre la memoria y la CPU lo suficientemente rápido. En los discos duros modernos por ejemplo, la relación (ratio) de transferencia de datos ya es superior al ratio del bus. A las tarjetas de ampliación se les ha asignado incluso un freno de seguridad, concretamente en forma de una señal de estado de espera (wait state), que deja todavía mas tiempo a las tarjetas lentas para depositar los datos deseados en la CPU. Especialmente por este motivo el bus AT encontró sucesores de más rendimiento en Micro Channel y en el Bus EISA, que sin embargo, debido a otros motivos, no han tenido éxito. BUS MICRO CHANNEL (MCA) Vistas las limitaciones que tenía el diseño del bus ISA en IBM se trabajó en un nueva tecnología de bus que comercializó con su gama de ordenadores PS/2. El diseño MCA (Micro Channel Arquitecture) permitía una ruta de datos de 32 bits, más ancha, y una velocidad de reloj ligeramente más elevada de 10 Mhz, con una velocidad de transferencia máxima de 20 Mbps frente a los 8 Mbps del bus ISA. Pero lo que es más importante el novedoso diseño de bus de IBM incluyó un circuito de control especial a cargo del bus, que le permitía operar independientemente de la velocidad e incluso del tipo del microprocesador del sistema. Bajo MCA, la CPU no es más que uno de los posibles dispositivos dominantes del bus a los que se puede acceder para gestionar transferencias. La circuitería de control, llamada CAP (punto de decisión central), se enlaza con un proceso denominado control del bus para determinar y responder a las prioridades de cada uno de los dispositivos que dominan el bus. Para permitir la conexión de más dispositivos, el bus MCA especifica interrupciones sensibles al nivel, que resultan más fiables que el sistema de interrupciones del bus ISA. De esta forma es posible compartir interrupciones. Pero además se impusieron estándares de rendimiento superiores en las tarjetas de expansión. Es cierto que el progreso conlleva un precio: La arquitectura de IBM era totalmente incompatible con las tarjetas de expansión que se incluyen en el bus ISA. Esto viene derivado de que los conectores de las tarjetas de expansión MCA eran más pequeños que las de los buses ISA. De esto se pueden sacar dos conclusiones. Por un lado el coste de estas tarjetas era menor y por otro ofrecía un mayor espacio interior en las pequeñas cajas de sobremesa. Las señales del bus estaban reorganizadas de forma que se introducía una señal de tierra cada 4 conectores. De esta forma se ayudaba a reducir las interferencias. EISA (Extended ISA) El principal rival del bus MCA fue el bus EISA, también basado en la idea de controlar el bus desde el microprocesador y ensanchar la ruta de datos hasta 32 bits. Sin embargo EISA mantuvo compatibilidad con las tarjetas de expansión ISA ya existentes lo cual le obligo a funcionar a una velocidad de 8 Mhz (exactamente 8.33). Esta limitación fue a la postre la que adjudico el papel de estándar a esta arquitectura, ya que los usuarios no veían factible cambiar sus antiguas tarjetas ISA por otras nuevas que en realidad no podían aprovechar al 100%. Su mayor ventaja con respecto al bus MCA es que EISA era un sistema abierto, ya que fue desarrollado por la mayoría de fabricantes de ordenadores compatibles PC que no aceptaron el monopolio que intentó ejercer IBM. Estos fabricantes fueron: AST, Compaq, Epson, Hewlett Packard, NEC, Olivetti, Tandy, Wyse y Zenith. Esta arquitectura de bus permite multiproceso, es decir, integrar en el sistema varios buses dentro del sistema, cada uno con su procesador. Si bien esta característica no es utilizada más que por sistemas operativos como UNIX o Windows NT. En una máquina EISA, puede haber al mismo tiempo hasta 6 buses principales con diferentes procesadores centrales y con sus correspondientes tarjetas auxiliares. En este bus hay un chip que se encarga de controlar el tráfico de datos señalando prioridades para cada posible punto de colisión o bloqueo mediante las reglas de control de la especificación EISA. Este chip recibe el nombre de Chip del Sistema Periférico Integrado (ISP). Este chip actúa en la CPU como un controlador del tráfico de datos. El motivo para que ni MCA ni EISA hayan sustituido por completo a ISA es muy sencillo: Estas alternativas aumentaban el coste del PC (incluso más del 50%) y no ofrecían ninguna mejora evidente en el rendimiento del sistema. Es más, en el momento en que se presentaron estos buses (1987-1988) esta superioridad en el rendimiento no resultaba excesivamente necesaria: Muy pocos dispositivos llegaban a los límites del rendimiento del bus ISA ordinario. Cuantas más líneas hayan disponibles, mayor es la dirección máxima y mayor es la memoria a la cual puede dirigirse de esta forma. En el bus de direcciones original habían ya 20 direcciones, ya que con 20 bits se puede dirigir a una memoria de 1 Mb y esto era exactamente lo que correspondía a la CPU. Esto que en le teoría parece tan fácil es bastante mas complicado en la práctica, ya que aparte de los bus de datos y de direcciones existen también casi dos docenas más de líneas de señal en la comunicación entre la CPU y la memoria, a las cuales también se acude. Todas las tarjetas del bus escuchan, y se tendrá que encontrar en primer lugar una tarjeta que mediante el envío de una señal adecuada indique a la CPU que es responsable de la dirección que se ha introducido. Las demás tarjetas se despreocupan del resto de la comunicación y quedan a la espera del próximo ciclo de transporte de datos que quizás les incumba a ellas. Este mismo concepto es también la razón por la cual al utilizar tarjetas de ampliación en un PC surgen problemas una y otra vez, si hay dos tarjetas que reclaman para ellas el mismo campo de dirección o campos de dirección que se solapan entre ellos. Los datos en si no se mandan al bus de direcciones sino al bus de datos. El bus XT tenía solo 8 bits con lo cual sólo podía transportar 1 byte a la vez. Si la CPU quería depositar el contenido de un registro de 16 bits o por valor de 16 bits, tenía que desdoblarlos en dos bytes y efectuar la transferencia de datos uno detrás de otro. De todas maneras para los fabricantes de tarjetas de ampliación, cuyos productos deben atenderse a este protocolo, es de una importancia básica la regulación del tiempo de las señales del bus, para poder trabajar de forma inmejorable con el PC. Pero precisamente este protocolo no ha sido nunca publicado por lBM con lo que se obliga a los fabricantes a medir las señales con la ayuda de tarjetas ya existentes e imitarlas. Por lo tanto no es de extrañar que se pusieran en juego tolerancias que dejaron algunas tarjetas totalmente eliminadas. http://www.mailxmail.com/curso/informatica/arquitectu raordenadores/capitulo7.htm Estructuras de interconexión Existen dos organizaciones físicas de operaciones E/S que tienen que ver con los buses que son: - Bus único - Bus dedicado La primera gran diferencia entre estas dos tipos de estructuras es que el bus único no permite un controlador DMA (todo se controla desde la CPU), mientras que el bus dedicado si que soporta este controlador. El bus dedicado trata a la memoria de manera distinta que a los periféricos (utiliza un bus especial) al contrario que el bus único que los considera a ambos como posiciones de memoria (incluso equipara las operaciones E/S con las de lectura/escritura en memoria). Este bus especial que utiliza el bus dedicado tiene 4 componentes fundamentales: - Datos: Intercambio de información entre la CPU y los periféricos. - Control: Lleva información referente al estado de los periféricos (petición de interrupciones). - Direcciones: Identifica el periférico referido. - Sincronización: Temporiza las señales de reloj. La mayor ventaja del bus único es su simplicidad de estructura que le hace ser más económico, pero no permite que se realice a la vez transferencia de información entre la memoria y el procesador y entre los periféricos y el procesador. Por otro lado el bus dedicado es mucho más flexible y permite transferencias simultáneas. Por contra su estructura es más compleja y por tanto sus costes son mayores. http://www.mailxmail.com/curso/informatica/arquitectu raordenadores/capitulo8.htm PCI (Peripheral Component Interconnect) Visto lo anterior, se puede ver que el bus del futuro es claramente el PCI de Intel. PCI significa: interconexión de los componentes periféricos (Peripheral Component Interconnect) y presenta un moderno bus que no sólo está meditado para no tener la relación del bus ISA en relación a la frecuencia de reloj o su capacidad sino que también la sincronización con las tarjetas de ampliación en relación a sus direcciones de puerto, canales DMA e interrupciones se ha automatizado finalmente de tal manera que el usuario no deberá preocuparse más por ello. El bus PCI es independiente de la CPU, ya que entre la CPU y el bus PCI se instalará siempre un controlador de bus PCI, lo que facilita en gran medida el trabajo de los diseñadores de placas. Por ello también será posible instalarlo en sistemas que no estén basados en el procesador Intel si no que pueden usar otros, como por ejemplo, un procesador Alpha de DEC. También los procesadores PowerMacintosh de Apple se suministran en la actualidad con bus PCI. Las tarjetas de expansión PCI trabajan eficientemente en todos los sistemas y pueden ser intercambiadas de la manera que se desee. Solamente los controladores de dispositivo deben naturalmente ser ajustados al sistema anfitrión (host) es decir a su correspondiente CPU. Como vemos el bus PCI no depende del reloj de la CPU, porque está separado de ella por el controlador del bus. Si se instalara una CPU más rápida en su ordenador no debería preocuparse porque las tarjetas de expansión instaladas no pudieran soportar las frecuencias de reloj superiores, pues con la separación del bus PCI de la CPU éstas no son influidas por esas frecuencias de reloj. Así se ha evitado desde el primer momento este problema y defecto del bus VL. El bus PCI emplea un conector estilo Micro Channel de 124 pines (188 en caso de una implementación de 64 bits) pero únicamente 47 de estas conexiones se emplean en una tarjeta de expansión (49 en caso de que se trate de un adaptador bus-master); la diferencia se debe a la incorporación de una línea de alimentación y otra de tierra. Cada una de las señales activas del bus PCI está bien junto o frente a una señal de alimentación o de tierra, una técnica que minimiza la radiación. El límite práctico en la cantidad de conectores para buses PCI es de tres; como ocurre con el VL, más conectores aumentarían la capacitancia del bus y las operaciones a máxima velocidad resultarían menos fiables. A pesar de presentar un rendimiento similar al de un bus local conectado directamente, en realidad PCI no es más que la eliminación de un paso en el microprocesador. En lugar de disponer de su propio reloj, un bus PCI se adapta al empleado por el microprocesador y su circuitería, por tanto los componentes del PCI están sincronizados con el procesador. El actual estándar PCI autoriza frecuencias de reloj que oscilan entre 20 y 33 Mhz. A pesar que de que las tarjetas ISA no pueden ser instaladas en una ranura PCI, no debería renunciarse a la posibilidad de inserción de una tarjeta ISA. Así pues, a menudo se puede encontrar en un equipo con bus PCI la interfaz «puente» llamada «PCI-ToISA-Bridge». Se trata de un chip que se conecta entre los distintos slots ISA y el controlador del bus PCI. Su tarea consiste en transponer las señales provenientes del bus PCI al bus ISA. De esta manera pueden seguir siendo utilizadas las tarjetas ISA al amparo del bus PCI. A pesar de que el bus PCI es el presente, sigue habiendo buses y tarjetas de expansión ISA ya que no todas las tarjetas de expansión requieren las ratios de transferencia que permite el bus PCI. Sin embargo las tarjetas gráficas, tarjetas SCSI y tarjetas de red se han decantando cada vez más fuertemente hacia el bus PCI. La ventaja de la velocidad de este sistema de bus es que este hardware puede participar del continuo incremento de velocidad de los procesadores. http://www.mailxmail.com/curso/informatica/arquitectu raordenadores/capitulo12.htm SCSI (Small Computer System Interface) Además de todas las arquitecturas mencionadas anteriormente, también hay que mencionar a SCSI. Esta tecnología tiene su origen a principios de los años 80 cuando un fabricante de discos desarrollo su propia interface de E/S denominado SASI (Shugart Asociates System Interface) que debido a su gran éxito comercial fue presentado y aprobado por ANSI en 1986. SCSI no se conecta directamente al microprocesador sino que utiliza de puente uno de los buses anteriormente nombrados. Podríamos definir SCSI como un subsistema de E/S inteligente, completa y bidireccional. Un solo adaptador host SCSI puede controlar hasta 7 dispositivos inteligentes SCSI conectados a él. Una ventaja del bus SCSI frente a otros interfaces es que los dispositivos del bus se direccionan lógicamente en vez de físicamente. Esto sirve para 2 propósitos: 1.- Elimina cualquier limitación que el PC-Bios imponga a las unidades de disco. 2.- El direccionamiento lógico elimina la sobrecarga que el host podría tener en manejar los aspectos físicos del dispositivo como la tabla de pistas dañadas. El controlador SCSI lo maneja. Es un bus que a diferencia de otros buses como el ESDI puede tener hasta 8 dispositivos diferentes conectados al bus (incluido el controlador). Aunque potencialmente varios dispositivos pueden compartir un mismo adaptador SCSI, sólo 2 dispositivos SCSI pueden comunicarse sobre el bus al mismo tiempo. El bus SCSI puede configurarse de tres maneras diferenciadas que le dan gran versatilidad a este bus: 1.- Único iniciador/Único objetivo: Es la configuración más común donde el iniciador es un adaptador a una ranura de un PC y el objetivo es el controlador del disco duro. Esta es una configuración fácil de implementar pero no aprovecha las capacidades del bus SCSI, excepto para controlar varios discos duros. 2.- Único iniciador/Múltiple objetivo: Menos común y raramente implementado. Esta configuración es muy parecida a la anterior excepto para diferentes tipos de dispositivos E/S que se puedan gestionar por el mismo adaptador. Por ejemplo un disco duro y un reproductor de CD-ROM. 3.- Múltiple iniciador/Múltiple objetivo: Es mucho menos común que las anteriores pero así es como se utilizan a fondo las capacidades del bus. Dentro de la tecnología SCSI hay 2 generaciones y una tercera que está a punto de generalizarse. La primera generación permitía un ancho de banda de 8 bits y unos ratios de transferencia de hasta 5 MBps. El mayor problema de esta especificación fue que para que un producto se denominara SCSI solo debía cumplir 4 códigos de operación de los 64 disponibles por lo que proliferaron en el mercado gran cantidad de dispositivos SCSI no compatibles entre sí. Esto cambió con la especificación 2.0 ya que exigía un mínimo de 12 códigos, por lo que aumentaba la compatibilidad entre dispositivos. Otro punto a favor de SCSI 2.0 es el aumento del ancho de banda de 8 a 16 y 32 bits. Esto se consigue gracias a las implementaciones wide (ancho) y fast (rápido). Combinando estas dos metodologías se llega a conseguir una transferencia máxima de 40 Mbps con 32 bits de ancho (20 Mbps con un ancho de banda de 16 bits). El protocolo SCSI 3.0 no establecerá nuevas prestaciones de los protocolos, pero si refinará el funcionamiento de SCSI. http://www.mailxmail.com/curso/informatica/arquitectu raordenadores/capitulo13.htm AGP (Accelerated Graphics Port) La tecnología AGP, creada por Intel, tiene como objetivo fundamental el nacimiento de un nuevo tipo de PC, en el que se preste especial atención a dos facetas: gráficos y conectividad. La especificación AGP se basa en la especificación PCI 2.1 de 66 Mhz (aunque ésta apenas se usa, dado que la mayoría de las tarjetas gráficas disponibles tan sólo son capaces de utilizar la velocidad de bus de 33 Mhz), y añade tres características fundamentales para incrementar su rendimiento: operaciones de lectura/escritura en memoria con pipeline, demultiplexado de datos y direcciones en el propio bus, e incremento de la velocidad hasta los 100 Mhz (lo que supondría unos ratios de transferencia de unos 800 Mbytes por segundo, superiores en más de 4 veces a los alcanzados por PCI). Pero el bus AGP es también un bus exclusivamente dedicado al apartado gráfico, tal y como se deriva de su propio nombre, Accelerated Graphics Port o bus acelerado para gráficos. Esto tiene como consecuencia inmediata que no se vea obligado a compartir el ancho de banda con otros componentes, como sucede en el caso del PCI. Otra característica interesante es que la arquitectura AGP posibilita la compartición de la memoria principal por parte de la aceleradora gráfica, mediante un modelo que Intel denomina DIME (Direct Memory Execute, o ejecución directa a memoria) y que posibilitará mejores texturas en los futuros juegos y aplicaciones 3D, al almacenar éstas en la RAM del sistema y transferirlas tan pronto como se necesiten. http://www.mailxmail.com/curso/informatica/arquitectur aordenadores/capitulo14.htm Los buses. Son el conjunto de líneas o caminos por los cuales los datos fluyen internamente de una parte a otra de la computadora (CPU, disco duro, memoria). Puede decirse que en las computadoras modernas hay muchos buses, por ejemplo entre los puertos IDE y los drives, entre una placa Aceleradora de video y la memoria Ram, entre el modem y el Chipset, etc. Pero Los buses básicos son: a) el bus interno (bus de datos), o sea el que comunica los diferentes componentes con la CPU y la memoria RAM, formado por los hilos conductores que vemos en el circuito impreso de la placa, y el bus de direcciones. b) El bus de expansión constituido por el conjunto de slots o ranuras en donde se insertan placas independientes de sonido, video, modem, etc. Este según ha aumentado su capacidad de transmisión ha cambiado de nomenclatura: ISA (Industry Standard Architecture), 1981, solo trabaja con un ancho de banda de 16 bits, VESA (Video Electronics Standard Association), 1992, trabaja a 32 bits, pero cayo rápidamente en desuso al aparecer el actual PCI (Peripheral Component Interconnect), 1992, cuyo ancho de banda es de 64 bits. De la velocidad de transmisión del bus interno depende la selección de algunos componentes como el Microprocesador y la memoria Ram en una motherboard, entendiéndose por ejemplo que una PLACA BASE cuya velocidad de transferencia es de 100 MHz, no admite procesadores Pentium IV (que necesitan buses con mayor velocidad de transmisión) ni módulos de memoria que trabajan exclusivamente en buses con velocidad de 133 MHz. Por otra parte es importante resaltar la diferencia de conceptos que hay entre: numero de líneas de un bus (16, 32, 64 bits) y la frecuencia de trabajo del bus. La multiplicación de estos dos factores representa al ancho de banda y se mide en Mb/s. Todo bus local esta compuesto de dos áreas: datos y direcciones. El bus de datos lo forman las líneas dedicadas a la transmisión de señales u ordenes, el bus de direcciones lo constituyen las líneas que dan a conocer las posiciones de ubicación de los datos en la memoria (registros). Buses actuales. En conjunción con la Informática, la electrónica innova permanentemente para crear nuevas y mas eficientes rutas de comunicación entre los PC y sus periféricos. Muchas de estas vías pueden realmente llamarse buses entre tanto que otras solo deben clasificarse como puertos. A continuación una descripción de las principales tecnologías empezando por las de mayor relevancia.. BUS PCI. Es el bus local estándar en las motherboards actuales. El nombre abreviado proviene de Peripheral Component Interconnect y fue dado a conocer por Intel en 1993. PCI es un bus local compuesto por líneas físicas que permiten comunicar el Microprocesador con otro componente. Los puntos de conexión de los componentes son los SLOTS o puertos de expansión que se observan en las motherboards, como bloques de plástico blanco. Detalles técnicos de PCI. 1. Es un bus de 64 bits (64 líneas de transmisión). Se lo utiliza principalmente como un bus de 32 bits. 2. Trabaja con frecuencias variadas: 33 MHz, 66 Mhz, 100 MHz, 400 Mhz, etc., lo que permite alcanzar un ancho de banda de gran capacidad. 3. 32 lineas son utilizadas para transmitir datos y direcciones en forma multiplexada (multiplexado= utilización de una misma línea para transmitir datos y direcciones). Las demás líneas sirven para interpretar y validar las señales correspondientes a datos y direcciones. 4. A diferencia de su antecesor el bus AT (ISA), PCI utiliza circuitos PCI Bridge para comunicar al Microprocesador con otros componentes, lo que permite que los dispositivos acoplados en el bus PCI puedan trabajar con diferentes tipos de Microprocesadores. 5. El número de dispositivos que pueden conectarse al bus PCI está limitado a 32. No obstante, la norma PCI admite la jerarquización de buses incrementándose el número de dispositivos que pueden conectarse. El software de configuración debe ser capaz de realizar transacciones de configuración en todos los dispositivos PCI que residen más allá del puente PCI/host (bridge). 6. Control de error en la transmisión, mediante el uso de bits de control de paridad (uso de señales de verificación de envio - recepción entre los dispositivos). BUS AGP. Accelerated Graphics Port. Se trata de un bus independiente del bus general constituido por un slot específico para tarjetas gráficas. Es un bus de 32 bits que trabaja a 66 MHz, pero tiene la posibilidad de doblar o cuadruplicar las características básicas, hasta una tasa de transferencia máxima de 1064 Mbits por segundo. Puede decirse que no es un bus en el sentido estricto de la palabra sino más bien una extensión de la norma PCI, razón por la cual en algunos aspectos es idéntico a aquel. Actualmente es un puerto de uso exclusivo para dispositivos gráficos de alta velocidad. Ver aquí la foto de su ubicación física en una motherboard. BUS USB. 1996. Universal serial bus. Es un nuevo estándar para comunicaciones serie que resuelve muchos de los inconvenientes de los antiguos puertos COM ( dificultades en la adaptación a un puerto COM libre, conflicto de los vectores de interrupción IRQ, etc.). Presenta muchas ventajas frente a sistemas tradicionales: velocidades de trabajo hasta de 480 Mb/s (USB 2.0), incluye alimentación eléctrica para dispositivos con bajo consumo de energía ( alrededor de los 5 voltios), permite conectar hasta 127 dispositivos, todos ellos compartiendo el mismo canal; permite realizar conexión y desconexión en "caliente" (sin apagar el equipo), permite utilizar cables de hasta 5m de longitud para dispositivos de alta velocidad. Actualmente todos los PCs disponen de por lo menos un par de salidas USB y muchos dispositivos, como impresoras, ratones, escáneres, webcams, equipos de fotografía digital, etc. que antes se conectaban a través de puertos COM o LPT lo hacen ahora mediante USB. Mas detalles en el apartado Puertos. BUS E-IDE. Enhanced Integrated Drive Electronics. Debe ser considerado mas como una Interface. Se trata de una tecnología electrónica que basa el control de la comunicación en una placa integrada en el propio dispositivo. El bus lo constituye un cable plano de 40 u 80 hilos conductores que comunica el conector del dispositivo (disco duro, CD-ROM o grabador de CD) con el conector o puerto IDE de la motherboard. Las placas base actuales se fabrican con dos puertos: IDE 0 e IDE1. Teoricamente cada puerto IDE representa un canal. Cada canal permite la conexión de hasta 2 drives (discos duros o unidades opticas). Detalles de esta conexion se amplian bajo el tema 'Interfaces del Disco duro'. BUS SCSI. 1980, 1986. Small Computer System Interface. Es la interface de mayor capacidad, velocidad y estabilidad para conectar dispositivos directamente a una motherboard. En las computadoras desktop, SCSI es una interface pues se fabrica sobre una placa que se inserta en un slot de la motherboard (actualmente en slots PCI). Esta independencia física del microprocesador tiene la gran ventaja de hacer que los dispositivos se direccionen lógicamente en contraposición al direccionamiento físico que utiliza IDE. La consecuencia inmediata es que los dispositivos quedan liberados de las imposiciones que el Bios pudiera imponer pues SCSI se encarga de hacer el trabajo completo de comunicación y configuración. Esta capacidad lo ha hecho el preferido en equipos en los que se requiere estabilidad y alta velocidad de transmisión, como los servidores. La ultima versión de SCSI es la Wide Ultra2 SCSI, que usa un bus de 16 bits, un ancho de banda de 80MB/s y trabaja con cables planos de 68 hilos. La interface al trabajar como un dispositivo I/O (de entrada y salida) permite en teoría conectar 8 dispositivos simultáneamente, en una conexión en la que cada dispositivo se une al siguiente y en donde cada dispositivo tiene su propio ID ante el host. El mayor uso de SCSI se da en la conexión de discos duros, tape drives, unidades ópticas, escáneres e impresoras. Los dispositivos externos que trabajan con interface SCSI tienen dos puertos: uno para la entrada del cable y otro para conectarse al siguiente dispositivo. El ultimo elemento debe cerrar la cadena mediante un circuito 'terminador' para que la conexión funcione. http://www.servicioalpc.com/ensamble5.htm 2.6.1 Bus Local. Bus local. Bus entre la CPU, la memoria y dispositivos periféricos que corre a la velocidad de la CPU. En un computador personal, el bus VL y el PCI suministran una transferencia de datos más rápida que el bus ISA tradicional. A partir del 386, cuando las velocidades de la CPU comenzaron a acelerarse enormemente, los computadores personales vienen con dos buses. La CPU tiene acceso a sus chips de memoria a través de una vía de acceso interna de 32 bits (63 bits con el Pentium), conocida como bus local, a la velocidad más alta del reloj de la CPU (25MHz, 33MHz, etc.). Sin embargo, tradicionalmente ha tenido acceso a sus dispositivos periféricos en forma más lenta, en un bus ISA de 16 bits sólo a 8MHz. Incluso en el bus EISA de 32 bits inherentemente más rápido corre en forma lenta para acomodar las tarjetas ISA, que se conectan a éste. Los estándares de bus VL de VESA y de bus local PCI de Intel se crearon para aprovechar las velocidades más altas de la CPU. El PC corre a 33MHz; el bus VL hasta a 40MHz; esperándose más altas velocidades. Las tarjetas base ISA y EISA se construyen ahora con ranuras adicionales para el bus VL o las tarjetas PCI, o ambos. http://www.glosarium.com/term/893,14,xhtml LOCAL BUS Teniendo en cuenta las mencionadas limitaciones del bus AT y la infalibilidad de los buses EISA y MCA para asentarse en el mercado, en estos años se han ideado otros conceptos de bus. Se inició con el llamado Vesa Local Bus (VL-Bus), que fue concebido y propagado independientemente por el comité VESA, que se propuso el definir estándares en el ámbito de las tarjetas gráficas y así por primera vez y realmente tuviera poco que ver con el diseño del bus del PC. Fueron y son todavía las tarjetas gráficas quienes sufren la menor velocidad del bus AT. Por eso surgió, en el Comité VESA, la propuesta para un bus más rápido que fue el VESA Local Bus. Vesa Local Bus Al contrario que con el EISA, MCA y PCI, el bus VL no sustituye al bus ISA sino que lo complementa. Un PC con bus VL dispone para ello de un bus ISA y de las correspondientes ranuras (slots) para tarjetas de ampliación. Además, en un PC con bus VL puede haber, sin embargo, una, dos o incluso tres ranuras de expansión, para la colocación de tarjetas concebidas para el bus VL, casi siempre gráficos. Solamente estos slots están conectados con la CPU a través de un bus VL, de tal manera que las otras ranuras permanecen sin ser molestadas y las tarjetas ISA pueden hacer su servicio sin inconvenientes. El VL es una expansión homogeneizada de bus local, que funciona a 32 bits, pero que puede realizar operaciones a 16 bits. VESA presentó la primera versión del estándar VL-BUS en agosto de 1992. La aceptación por parte del mercado fue inmediata. Fiel a sus orígenes, el VL-BUS se acerca mucho al diseño del procesador 80486. De hecho presenta las mismas necesidades de señal de dicho chip, exceptuando unas cuantas menos estrictas destinadas a mantener la compatibilidad con los 386. La especificación VL-Bus como tal, no establece límites, ni superiores ni inferiores, en la velocidad del reloj, pero una mayor cantidad de conectores supone una mayor capacitancia, lo que hace que la fiabilidad disminuya a la par que aumenta la frecuencia. En la práctica, el VL-BUS no puede superar los 66 Mhz. Por este motivo, la especificación VL-BUS original recomienda que los diseñadores no empleen más de tres dispositivos de bus local en sistemas que operan a velocidades superiores a los 33 Mhz. A velocidades de bus superiores, el total disminuye: a 40 Mhz solo se pueden incorporar dos dispositivos; y a 50 Mhz un único dispositivo que ha de integrarse en la placa. En la práctica, la mejor combinación de rendimiento y funciones aparece a 33 Mhz. Tras la presentación del procesador Pentium a 64 bits, VESA comenzó a trabajar en un nuevo estándar (VL-Bus versión 2.0). La nueva especificación define un interface de 64 bits pero que mantienen toda compatibilidad con la actual especificación VL-BUS. La nueva especificación 2.0 redefine además la cantidad máxima de ranuras VL-BUYS que se permiten en un sistema sencillo. Ahora consta de hasta tres ranuras a 40 Mhz y dos a 50 Mhz, siempre que el sistema utilice un diseño de baja capacitancia. En el nombre del bus VL queda de manifiesto que se trata de un bus local. De forma distinta al bus ISA éste se acopla directamente en la CPU. Esto le proporciona por un lado una mejora substancial de la frecuencia de reloj (de la CPU) y hace que dependa de las línea de control de la CPU y del reloj. A estas desventajas hay que añadirle que no en todos los puntos están bien resueltas las especificaciones del comité VESA, hecho que a la larga le llevará a que el éxito del bus VL se vea empañado por ello. En sistemas 486 económicos se podía encontrar a menudo, pero su mejor momento ya ha pasado. Bus local. Bus entre la CPU, la memoria y dispositivos periféricos que corre a la velocidad de la CPU. En un computador personal, el bus VL y el PCI suministran una transferencia de datos más rápida que el bus ISA tradicional. A partir del 386, cuando las velocidades de la CPU comenzaron a acelerarse enormemente, los computadores personales vienen con dos buses. La CPU tiene acceso a sus chips de memoria a través de una vía de acceso interna de 32 bits (63 bits con el Pentium), conocida como bus local, a la velocidad más alta del reloj de la CPU (25MHz, 33MHz, etc.). Sin embargo, tradicionalmente ha tenido acceso a sus dispositivos periféricos en forma más lenta, en un bus ISA de 16 bits sólo a 8MHz. Incluso en el bus EISA de 32 bits inherentemente más rápido corre en forma lenta para acomodar las tarjetas ISA, que se conectan a éste. Los estándares de bus VL de VESA y de bus local PCI de Intel se crearon para aprovechar las velocidades más altas de la CPU. El PC corre a 33MHz; el bus VL hasta a 40MHz; esperándose más altas velocidades. Las tarjetas base ISA y EISA se construyen ahora con ranuras adicionales para el bus VL o las tarjetas PCI, o ambos. http://www.glosarium.com/term/893,14,xhtml EL BUS LOCAL PCI Cuando IBM diseño su primer ordenador, el PC, diseño un bus para la conexión de periféricos, que aunque en aquel entonces era mas que suficiente para los dispositivos existentes, quedo rápidamente obsoleto con la aparición de los nuevos microprocesadores rápidos y de los dispositivos que necesitaban una gran velocidad de transferencia para comunicarse con el procesador del sistema. Este bus fue denominado ISA, se encontraba disponible en dos versiones, una de 8 bits (que la integraban los primeros PC) y otra de 16 bits (que apareció junto con los primeros AT con procesador 80286). Ambas versiones del bus ISA funcionaban a una velocidad de 8 Mhz. si bien existen ordenadores compatibles en los que la velocidad del bus se puede elevar hasta 10 o 12 Mhz. Esta característica hizo que en poco tiempo los usuarios poseedores de ordenadores con procesadores 386 a 40 Mhz o 486 a 33 Mhz. se vieran frenados de forma considerable al hacer accesos al bus ISA. Dejando a parte las soluciones propietarias desarrolladas por algunos fabricantes de ordenadores, el primer bus local que tuvo una plena aceptación por parte del publico en general fue el bus local VESA. Esta tecnología aprovechaba el bus local del propio procesador para implementar dos o tres ranuras de expansión, mediante los cuales el usuario conectaba las tarjetas que normalmente contenían los dispositivos que podían representar en cuello de botella durante el funcionamiento del ordenador (Tarjeta grafica, y controladora de disco). Sin embargo, esta tecnología tenia como todo ventajas e inconvenientes. La ventaja principal era su bajo coste de implementación. Por otro lado los fabricantes se encontraron con una especificación del bus que era un poco vaga, por lo que rápidamente aparecieron problemas de incompatibilidad entre algunas placas base y determinadas tarjetas de expansión. Además el diseño eléctrico de este bus hacia que solo se pudieran diseñar placas con dos o a lo sumo tres ranuras de expansión VESA. Para completar este relativamente desolador panorama, el bus VESA era de 32 bits, y al menos en un primer momento no existía una especificación de 64 bits. Para crear un bus local que fuese aceptado tanto por la industria informática como por los usuarios, una serie de compañías, entre ellas Intel, se unieron en un comité, el cual fue el encargado de crear las especificaciones de lo que hoy en día conocemos como bus PCI. El bus local PCI es un bus de alto rendimiento de 32 o 64 bits de anchura (casi todas las implementaciones actuales soportan solo la versión de 32 bits) dotado de líneas de datos y direcciones multiplexadas. Este bus esta diseñado como mecanismo de interconexión entre componentes de la placa base, tarjetas de expansión y subsistema de memoria, y el propio procesador. En un sistema PCI típico, el subsistema formado por el procesador, la memoria cache externa o de segundo nivel y la memoria principal se conectan al bus PCI mediante un bridge o puente PCI. Este puente proporciona un acceso mediante el cual el procesador puede acceder directamente a los dispositivos PCI, ya sea mediante entrada/salida mapeada en la memoria del sistema o utilizando un espacio de direcciones separado para las operaciones de entrada/salida. La especificación PCI permite la existencia de dispositivos PCI maestros o masteres, los cuales con capaces de acceder a la memoria principal de ordenador sin que sea necesaria la intervención del microprocesador. El bridge puede disponer de algunas otras funciones destinadas a optimizar el rendimiento general del sistema, como por ejemplo buffer de escritura y de arbitro del bus. Las configuraciones PCI típicas permiten la conexión de hasta cuatro tarjetas de expansión. En cuanto al tamaño de las tarjetas de expansión, se han definido tres tamaños, tarjetas largas, cortas y cortas de longitud variable. No es necesario que todos los sistemas soporten estos tres tipos de tarjetas. Los dos tipos de voltajes soportados por el bus PCI (5 y 3'3 voltios) han tenido su influencia en el diseño de las tarjetas de expansión, de forma que se han definido tres tipos de tarjetas: una tarjeta de cinco voltios, que solo se puede conectar a las ranuras PCI de este tipo, una tarjeta "universal" que se puede conectar a ranuras de 5 y 3'3 voltios, y por ultimo otro tipo de tarjeta que solo se puede conectar a las ranuras de 3'3 voltios. La velocidad estándar de funcionamiento del PCI es de 33 Mhz, por lo que asumiendo un ancho de banda de 32 bits es posible obtener velocidades superiores a los 120 MB/seg. http://www.dinastiasoft.com.ar/Tecnologia/PCI.htm La conexión entre los elementos de un computador se realiza a través de los BUSES. Un bus es un conjunto de cables (pistas de circuito impreso o hilos conductores) que proporciona un camino para el flujo de información entre los distintos elementos que forman el ordenador. Cuando un dato pasa de un componente a otro, viaja a lo largo de este camino común para alcanzar su destino. Por cada pista o cable se transmite un bit; para transmitir un bloque de varios bytes, pueden transmitirse todos por el mismo hilo (un bit después de otro), lo que se denomina transmisión en serie, o transmitir por distintos cables a la vez, lo que nos proporciona una transmisión en paralelo. Por el bus se debe transmitir distintos tipos de información: la dirección del dato al que se quiere acceder, el dato a transferir, o información de control para permitir la operación de los distintos elementos. http://64.233.167.104/search?q=cache:QXZW4e1mbg8J:wwwdi.ujaen.es/~mcdiaz/doce ncia/cur04_05/fi/teoria/04_Ordenador.pdf+%22funcionamiento+de+la+memoria%22inf ormatica&hl=es 2.6.2 Bus de datos. Sirve para transmitir información entre el microprocesador, la memoria y los periféricos. Por él circulan los datos y las instrucciones. Tiene tantas líneas como bits se transmiten en paralelo (una para cada bit). El flujo es de doble sentido y a mayor número de bits paralelos mayor podrá ser la velocidad de transmisión que consigamos. El ancho de este bus (n° de bits que puede transmitir simultáneamente en paralelo) es una medida de la potencia del microprocesador. Este bus es como una autopista de datos electrónicos y cuanto más ancho sea, más datos podrán moverse al mismo tiempo. El ancho del bus de datos es una de las características más importantes del microprocesador. Cuando decimos que un microprocesadores, por ej., de 16 bits, nos estamos refiriendo al ancho de su bus de datos. http://www.lawebdelprogramador.com/diccionario/mostrar.php?letra=B&pagina=4 El Bus de Datos es bidireccional, pues los datos pueden fluir hacia ó desde la CPU. Los m terminales de la CPU, de D0 - Dm-1 , pueden ser entradas ó salidas, según la operación que se este realizando ( lectura ó escritura ) . en todos los casos, las palabras de datos transmitidas tiene m bits de longitud debido a que la CPU maneja palabras de datos de m bits; del número de bits del bus de datos, depende la clasificación del microprocesador. En algunos microprocesadores, el bus de datos se usa para transmitir otra información además de los datos ( por ejemplo, bits de dirección ó información de condiciones ). Es decir, el bus de datos es compartido en el tiempo ó multiplexado. En general se adoptó 8 bits como ancho estándar para el bus de datos de los primeros computadores PC y XT. Usualmente el computador transmite un carácter por cada pulsación de reloj que controla el bus (bus clock), el cual deriva sus pulsaciones del reloj del sistema (system clock). Algunos computadores lentos necesitan hasta dos pulsaciones de reloj para transmitir un carácter. Los computadores con procesador 80286 usan un bus de datos de 16 bits de ancho, lo cual permite la comunicación de dos caracteres o bytes a la vez por cada pulsación de reloj en el bus. Los procesadores 80386 y 80486 usan buses de 32 bits. El PENTIUM de Intel utiliza bus externo de datos de 64 bits, y uno de 32 bits interno en el microprocesador. Bus de datos de 16 bits Los procesadores dominantes antes de la introducción del IBM PC, basado en el 8086, eran todos de 8 bits; con lo que nos refereimos al bus de datos. Esto quiere decir que se podía accesar un byte de memoria en un solo ciclo de reloj, pues existían 8 cables entre la memoria y el procesador, por donde viajaban a la vez 8 bits de información. Que el procesador ahora sea de 16 bits, quiere decir que pueden viajar a la vez 16 bits (2 bytes) entre el procesador y la memoria; por tanto, el procesador puede mover bloques de memoria en la mitad del tiempo, y con la mitad de instrucciones. Esto hace más eficiente el acceso a memoria por parte del procesador. Al tamaño del bus de datos también suele llamársele tamaño de palabra. Bus de datos, que transporta los datos que se transfieren entre unidades. El número de líneas (y por tanto el número de bits) que utilice el bus de datos en un ordenador determina el tamaño de su palabra, es decir el tamaño del dato que se puede transmitir. Es bidireccional, es decir, los mismos hilos se utilizan para transmitir información hacia dentro o hacia fuera de una unidad en instantes diferentes Bus de datos: Lleva los datos que es necesario enviar de un elemento a otro, puede ser bidireccional (los datos pueden ir en uno u otro sentido). Existe un bus de datos interno: (ejemplo: entre el microprocesador y la memoria) y uno externo, entre la computadora y sus periféricos (ejemplo: Computadora e impresora) http://www.unicrom.com/Cmp_estructura.asp El bus de datos Los procesadores 80x86 utilizan el bus de datos para intercambiar información entre los diferentes componentes del sistema. El tamaño de éstos buses es variable dependiendo del tipo de procesador, por esta razón es común pensar en el tamaño del bus como una medida del "tamaño" del procesador, puede haber buses de datos de 8 (8088, 80188), 16 (8086, 80186, 80286), 32 (80386, 80486) ó 64 líneas (Pentium, Pentium Pro). En cada línea del bus de datos se transmite un bit de información pero un sistema no está limitado a manejar información de acuerdo al tamaño del bus de datos, es decir, un bus de 32 bits no está limitado a trabajar con tipos de datos máximos de 32 bits. El tamaño del bus de datos por otro lado si limita el número de bits que el sistema puede manejar por cada ciclo de memoria de tal manera que un sistema de 16 bits necesita dos ciclos de memoria para manejar un tipo de dato de 32 bits, naturalmente pero no necesariamente, un sistema de 32 bits es el doble de rápido que un sistema de 16 bits, la limitación es porque existen otros factores que influyen en el rendimiento de un sistema. http://www.modelo.edu.mx/univ/virtech/prograc/cbyn03.htm 2.6.3 Bus de direcciones. Bus de direcciones: Muchos de los elementos de una computadora así como las posiciones de memoria tienen una dirección única dentro del sistema. De esta dirección se puede leer un dato o en esta dirección podemos escribir un dato. En el bus de direcciones se coloca la dirección del elemento a accesar y con ayuda del bus de datos movemos la información de un elemento a otro. Ejemplo: Si la CPU quiere leer unos datos de memoria para después enviarlo a la impresora o la pantalla, primero pone en el bus de direcciones la dirección del dato en memoria, lo lee (lo obtiene a través del bus de datos), después pone en el bus de direcciones la otra dirección (la de pantalla o impresora) y escribe (con ayuda del bus de datos). ¿Quién controla todo este proceso......? http://www.unicrom.com/Cmp_estructura.asp Bus de direcciones Es utilizado por el microprocesador para señalar la celda de memoria (o el dispositivo de E/S) con el que se quiere operar. El tipo de operación será de lectura o de escritura y los datos implicados viajarán por el bus de datos. Por él circula la expresión binaria de la dirección de memoria a la cual el microprocesador quiere acceder. Tiene sentido de flujo unidireccional desde el microprocesador hacia la memoria. Una vez localizados los datos perdidos, su transmisión hacia el microprocesador (o hacia donde sea) se hará a través del bus de datos. Los dispositivos de E/S intercambian la información con el microprocesador mediante los puertos de E/S. Cada puerto está asociado con un determinado dispositivo y tiene una dirección que lo identifica. El ancho de este bus también es una medida de la potencia del microprocesador, ya que determina la cantidad de memoria a la que éste puede acceder, es decir, la cantidad de espacio direccionable. El espacio de direcciones es el rango de valores distintos que el microprocesador puede seleccionar. La cantidad máxima de direcciones disponibles será 2 a la n, siendo n el número de líneas del bus de direcciones. http://html.rincondelvago.com/bus-de-direcciones_dispositivo-dma.html El bus de Direcciones es un medio de comunicación unidireccional, debido a que los datos fluyen en un único sentido, de la CPU a la memoria u otros dispositivos. La CPU alimenta niveles lógicos en las líneas de dirección, con lo cual se generan 2n posibles direcciones diferentes. Cada una de estas direcciones corresponde a una localidad de la memoria ó dispositivo. Los procesadores 8086 y 8088 usados en los primeros computadores personales contaban con un bus de 20 líneas o bits de dirección, con lo cual eran capaces de direccionar hasta 1 megabyte de memoria (1.048.576 bytes), lo cual fue superado por los equipos AT (80286), que con 24 bits de direccionamiento, podían administrar hasta 16 MB de memoria (16.777.216 bytes). Subsecuentemente, los procesadores 80386DX direccionan directamente 4 gigabytes de memoria principal, mientras que el procesador 80486DX hasta 64 GB. http://www.tecnotopia.com.mx/mecatronica/buses.htm Bus de direcciones, que transporta la dirección de la posición de memoria o del periférico que interviene en el tráfico de información (de dónde procede el dato o a dónde se dirige). Permite la comunicación entre el procesador y las celdas de la memoria RAM. Cuando el procesador quiere leer el contenido de una celda de memoria, envía por el bus de direcciones la dirección de la celda que quiere leer, recibiendo a través del bus de datos el contenido de la misma. El tamaño de este bus define la cantidad de memoria RAM que la CPU puede gestionar. Puesto que hay dos valores posibles que pueden viajar a lo largo de cada una de las líneas de direcciones, tenemos que, por ejemplo: o con 10 bits podemos acceder a 1024 palabras, es decir, 1 Kbyte si la palabra equivale a 1 byte. o con 16bits accedemos a 65536 palabras (65KBytes) o con 32bits podemos acceder a 4294967296 palabras, es decir 4GB Bus de direcciones de 20 bits También antes del 8086 había una limitante en la memoria de la que el procesador podía disponer. Los procesadores anteriores contaban con un bus de direcciones de 16 bits, con lo que podían indexar 65536 localidades distintas en memoria; siendo éstas bytes. Por tanto, su memoria máxima era de 64 Kb. Intel reconoció que pronto, esta memoria sería insuficiente, por lo que decidió ampliarla. Sin embargo, no pudieron imaginar usos para una memoria mayor a 1 Mb.; parecía infinita para los estándares de entonces. Por lo que aumentaron las líneas del bus de direcciones a 20, con lo cual se pueden indexar memorias con 1'048,576 elementos (1 Mb.) El bus de direcciones El bus de direcciones es el encargado de diferenciar las ubicaciones físicas de cada elemento de un sistema de cómputo, sea memoria ó elemento de E/S, cuando un programa necesita tener acceso a un elemento determinado del sistema coloca su dirección en el bus de direcciones, los circuitos electrónicos asociados sea con la memoria ó con un dispositivo de E/S son los encargados de reconocer ésta dirección y consecuentemente colocar los datos correspondientes en el bus de datos. Con una sola línea de dirección es posible tener acceso a dos elementos diferentes, con n líneas de dirección se puede acceder a 2n direcciones diferentes, por lo tanto el número de bits de un bus de direcciones determina la cantidad máxima de direcciones de memoria que un sistema puede acceder. Un procesador Pentium tiene un bus de direcciones de 32 bits por lo que su capacidad física real de direccionamiento de memoria de de 4 Gigabytes, utilizando la técnica de segmentación éstos procesadores pueden acceder a un mayor número de direcciones de memoria. http://www.modelo.edu.mx/univ/virtech/prograc/cbyn03.htm Bus de direcciones El bus del PC XT contiene 20 líneas identificadas SA0 a SA19; que en el AT se aumentaron a 27, añadiendo las denominaciones LA17 a LA23. Estas líneas contienen las direcciones que identifican la parte del ordenador que comunica. Las direcciones son de dos tipos; unas se refieren a direcciones de memoria; otras a direcciones de puertos de E/S, pero en cualquier caso son de 20 bits para el PC XT y de 27 para los ATs. Con los datos anteriores, resulta evidente ( 0.4) que el PC XT podía manejar 1.048.576 direcciones (220), mientras que en el AT esta cantidad asciende a algo más de 134 millones (227). Sin embargo, recordemos que tanto los procesadores 8088 presentes en el XT, como los 80287 del AT, tenían registros de 16 bits ( H3b) que solo podían albergar 65.536 posiciones (216), muy alejado de los valores anteriores. Para resolver el problema, se utilizan las direcciones segmentadas ( H5.1), compuestas por dos palabras de 16 bits que se componen para formar una dirección de 20 bits. Nota: durante las operaciones E/S de puertos, las direcciones SA16SA19 del 8088 permanecen iguales a cero ( H3.2.1), por lo que solo pueden utilizarse 16 bits para direcciones de puertos. http://www.zator.com/Hardware/H2.htm#Controlador DMA 2.6.4 Bus de control. Bus de control: Son hilos que transportan señales de control, dan la información del estado de ciertos componentes, la dirección del flujo de la información, controlan el momento (temporización) en que suceden ciertos eventos de manera que no haya choques de datos, transmiten señales de interrupción, etc. http://www.unicrom.com/Cmp_estructura.asp El bus de control El bus de control es una colección de líneas que transportan un conjunto de señales cuyo propósito es la sincronía de todas las operaciones efectuadas por el CPU con los diferentes subsistemas de un equipo de cómputo, destacan las líneas para escritura (write) y lectura (read) de datos, el reloj del sistema, líneas de interrupción, líneas de estado, etc. El uso de éstas líneas se comprenderá mejor conforme se avance en éste curso. Los procesadores de la familia 80x86 proveen dos espacios diferentes de direccionamiento, uno para la memoria y otro para la E/S, mientras que el direccionamiento de memoria varía según el procesador, las líneas de E/S son siempre de 16 bits, lo que permite direccionar 65,536 localidades diferentes. Algunas líneas de control son las encargadas de decidir qué direcciones son para memoria y cuáles son para E/S. http://www.modelo.edu.mx/univ/virtech/prograc/cbyn03.htm El Bus de Control es utilizado para sincronizar las actividades y transacciones con los periféricos del sistema. Algunas de estas señales, como R / W , son señales que la CPU envía para indicar que tipo de operación se espera en ese momento. Los periféricos también pueden remitir señales de control a la CPU, como son INT, RESET, BUS RQ. Las señales más importantes en el bus de control son las señales de cronómetro, que generan los intervalos de tiempo durante los cuales se realizan las operaciones. Este tipo de señales depende directamente del tipo del microprocesador. Bus de control, que transporta las señales de control y de estado, indicando la dirección de la transferencia de datos, controlando la temporización de eventos durante la transferencia, transmitiendo las señales de interrupción, etc. En definitiva, son las señales para controlar y sincronizar todos los componentes. Las señales de control parten desde la unidad de control hacia el resto de elementos, y las de estado parten del resto de los elementos hacia la unidad de control. Además, se suele distinguir dos tipos de buses dependiendo de las partes del sistema que conectan: el bus que conecta la CPU con la memoria (bus interno o de CPU) y el que conecta la CPU con el resto de elementos (bus de expansión, que es una prolongación del bus interno). El bus de CPU es interesante en relación con los tipos de memoria que exige, puesto que se dedica a transferir datos entre la CPU y la memoria. Destaca por su velocidad, y existen arquitecturas con velocidades de más de 100 Mhz. Pero la clase realmente interesante de los buses son los buses de expansión. · Bus de control o de sistema : organiza y redirige la información hacia el bus pertinente para la información que se tiene que transmitir. Es el bus encargado de hacer el direccionamiento, quién realiza toda la función de direccionar es el controlador, diferente para cada tipo de dispositivo. http://www.hardware12v.com/conocimientospc/41.php El bus del sistema El bus del sistema conecta a los elementos que forman una computadora Von Neumann, en una máquina Intel 80x86 existen tres buses principales: el bus de datos, el bus de direcciones y el bus de control. Un bus es un conjunto de alambres por los cuales pasan señales eléctricas entre los componentes de un sistema, éstos buses varían de procesador en procesador, sin embargo cada bus transporta información equivalente para todos los procesadores. Un típico componente de un sistema 80x86 utiliza niveles TTL estándar de señal, esto significa que cada alambre en un bus utiliza un nivel de voltaje estándar para representar los niveles lógicos de 1 y 0. http://www.modelo.edu.mx/univ/virtech/prograc/cbyn03.htm Papel del bus de control: a traves de este bus, la unidad de control activa el MAR el MDR y los demas registros involucrados en los procesos de lecturaescritura. Sincroniza el momento en que se activan AB y DB, esto corresponde a un conjunto de microoperraciones necesarias para producir una lectura o escritura en memoria. http://html.rincondelvago.com/arquitectura-de-computadoras_2.html Bus de Control El bus de control, al igual que el bus de direcciones es unidireccional y se utiliza para efectuar la lectura y escritura en las memorias y puertos de E/S. Este bus en general lo emplea la CPU para controlar el flujo de los datos y las direcciones de forma organizada. Funcionamiento del Bus del Sistema El bus de datos depende del tamaño de los datos que maneja el procesador, este puede tener 8, 16 o 32 bits y el bus de direcciones generalmente tiene como mínimo 16 bits. El bus del sistema se utiliza para transferir información entre la CPU y la memoria o para extraer instrucciones almacenadas en memoria y datos presentes en los puertos de E/S. El intercambio de información por el bus del sistema se realiza con dos tipos de operaciones: o o Ciclo de Lectura: Cuando los datos en Memoria o puertos de E/S se transfieren a la CPU. Ciclo de Escritura: Cuando los datos de la CPU se transfieren a la Memoria o a los puertos de E/S. Las líneas de control son aquellas con las que se controla el flujo de la información por los buses, y las más importantes son: o o o CHIPSELECT (CS’) LECTURA (RD’) ESCRITURA (WR’) Cada transferencia empieza con la carga de una dirección en el bus de direcciones. Las líneas correspondientes a la los bits menos significativos de la dirección se encuentran conectados directamente a las memorias. Las líneas de dirección de los bits más significativos se utilizan para seleccionar el dispositivo del cual se desea extraer la información, ya sea una EPROM, RAM o un Puerto de E/S. Entonces, el decodificador de direcciones se encarga de seleccionar el dispositivo que se debe activar según la dirección presente en el bus. Para ello, cada dispositivo en el microcomputador debe tener una única dirección que lo identifique. En la figura 11.2.3 se muestra un diagrama de los tiempos de las señales presentes durante el flujo de los datos y direcciones en el bus del sistema. Figura 11.2.3. Diagrama de tiempos de las señales del bus del sistema. La señal CS’ selecciona el dispositivo que debe transmitir los datos por el bus de datos. Luego una de las señales RD o WR se activa desde la CPU, con lo cual se ordena al dispositivo seleccionado enviar los datos a la CPU (ciclo de lectura) o recibirlos de la CPU (ciclo de escritura). Todos los ciclos de lectura y escritura comienzan con una dirección válida de la CPU. Luego el decodificador de direcciones genera una señal CS’ para seleccionar uno de los dispositivos. Entonces la CPU envía una señal RD o WR para efectuar la lectura o escritura de los datos. Para una operación de lectura el dispositivo debe conducir a través del bus de datos, lo cual toma un tiempo corto (el tiempo de acceso de los datos), y los datos deben estar disponibles en el bus durante el flanco de subida de la señal RD. Durante este flanco de subida la CPU toma los datos y los almacena internamente en sus registros. Durante un ciclo de escritura la CPU por si misma maneja de los datos. En este caso, al igual que en el ciclo de lectura los datos deben estar disponibles en el bus antes de que ocurra el flanco de subida de la señal WR, para que el dispositivo seleccionado pueda recibir los datos correctamente. http://www.virtual.unal.edu.co/cursos/ingenieria/2000477/lecciones/110201.htm Bus de control Además de los datos y la energía, el bus transporta una serie de señales de control, por lo que a estas líneas se las denomina bus de control o del sistema. Las principales son las siguientes: 0WS ("Zero Wait State"). Es utilizado por los dispositivos rápidos conectados al bus para prevenir al procesador que no inserte estados adicionales de espera. AEN ("Address Enabled") Se utiliza para indicar si es la UCP o el controlador DMA, el que tiene control sobre las líneas de datos y de direcciones en ese momento. Cuando está alta, el controlador DMA controla el bus de datos y el de direcciones, además de las líneas MEMR, MEMW, IOR e IOW, ALE ("Address Latch Enabled") Cuando está alta, señala que la UCP ha colocado una dirección válida en el bus de direcciones. CLK. Señal del reloj que conecta directamente con una patilla del procesador ( H3b1). En el XT es de 4.77 MHz, un tercio de la señal del oscilador (OSC). En el AT esta frecuencia se elevó a 7 MHz, la mitad de la señal del oscilador. OSC. Señal del oscilador ; basada en la frecuencia de un cristal instalado en la placa-base. En el XT es de 14.31818 MHz. I/O CH CHK ("Channel Check"). Es una señal de detección de errores. Cuando está baja, algún dispositivo del bus ha detectado un error de paridad. I/O CH RDY ("Channel Ready"). Sirve para avisar al procesador o al MDAC que un dispositivo lento necesita tiempo extra para estar preparado. Cuando algún dispositivo necesita tiempo extra, baja esta señal, aunque nunca durante un periodo de más de 10 ciclos CLK. IRQ ("Interrupt request"). En el PC XT existen 6 líneas identificadas IRQ2 a IRQ7, que juegan un papel fundamental en el funcionamiento del ordenador, ya que la tecnología de los ordenadores modernos se basa en un sistema de interrupciones al que nos referiremos más adelante ( H2.4). Estas 6 líneas fueron aumentadas posteriormente en el PC AT, añadiéndose 8, aunque no todas fueron destinadas al servicio de periféricos, por lo que en el nuevo BUS solo aparecen IRQ10, IRQ11, IRQ12, IRQ14 e IRQ15. Adelantamos aquí que una interrupción es una señal que se origina en un dispositivo (un periférico) para indicar al procesador que algo requiere su atención inmediata (de ahí su nombre, literalmente "Petición de interrupción"). Se solicita al procesador que suspenda lo que está haciendo para atender la petición. IOR ("I/O Read") Orden de lectura. Esta línea indica a un dispositivo E/S conectado al bus que debe colocar un dato en el bus de datos. IOW ("I/O Write") Orden de escritura. Esta línea indica a un dispositivo E/S que debe leer el dato situado en el bus de datos. RESET. Una señal en esta línea ( H4), que conecta con una patilla especial del procesador, origina el reinicio del sistema. Cuando esta línea es puesta a masa (desaparece su tensión) y después vuelve a su valor normal, se origina un reinicio del procesador. SBHE ("System Bus High Enable"). Cuando está activado indica que se está realizando una transferencia de datos. DRQ ("DMA Request"). Similares en concepto a las líneas IRQ, pero utilizadas para solicitar acceso directo a memoria. Existen tres de ellas, señaladas DRQ1 a DRQ3. DACK ("DMA Acknowledge"). Se utilizan para acusar recibo de la petición DRQ correspondiente. Existen cuatro, señaladas DACK0 a DACK3, aunque el mecanismo DMA solo utiliza las tres últimas, DACK0 es utilizada en el XT para señalar un ciclo de refresco de memoria. MEMR ("Memory Read") Cuando se activa, esta señal indica a la memoria conectada al bus que escriba los datos en el bus de datos. MEMW ("Memory Write") Cuando se activa, indica a la memoria que almacene los datos situados en el bus de datos. T/C ("Terminal Count"). Sirve para señalar que el controlador DMA ha alcanzado el final de una transferencia ( 2.3). El sistema de acceso directo a memoria DMA ("Direct Memory Access") es muy importante. Como puede verse, algunas líneas del bus están destinadas a este servicio, que será tratado más adelante con mayor detalle ( 2.3). http://www.zator.com/Hardware/H2.htm#Controlador DMA 2.6.5 Buses normalizados. Buses normalizados más comunes El Chipset marca las características del bus de la CPU Tipos de buses de expansión ISA Usado en los primeros PC. Es de ocho bits por que usa ocho líneas para comunicarse con tarjeta de placas. También hay de 16 bits. Características: Baja capacidad y amplia difusión. 8 bits 16 bits NCA Es un ISD extendido de 32 bits. Es compatible con el ISA. No se usa para orden de alto nivel avanzado y más avanzado. EISD Es un ISD extendido de 32 y compatibles con ISD. No se usaba para ordenes de alto nivel. Bases locales Obtienen alto rendimiento entre la placa y las ranuras de expansión. Trabaja a 33 Mhz. TIPOS VL-BUS Instalado en los 468 de gama alta. No había acceso directo a RDM, y tenía que intervenir o la CPU o un canal DMD y esto tardaba mucho. PCI Evita el problema anterior creado por Intel. Características: - Bus de 32 bit de datos y direcciones. - Velocidad de 33 Mhz. - Capacidad de transferir datos de 132 Mb/seg. - Soporta el bus masterin´ (Bus master RMD) - Permite realizar casos concurrentes de escritura. - Reparte de forma inteligente la capacidad. Otorga más capacidad al dispositivo que más lo necesite. - Permite realizar casos concurrentes de escritura. - Soporta máximo 3 ó 4 slots por cada bus PCI - Puede coexistir con buses de otro tipo. - Preparado para multitud de plataformas. No sólo para PC. - Incorpora facilidades ( Plug & Play) - El coste de este tipo de buses es muy bajo. AG`P Específico para controladores de vídeo. Bus de alto rendimiento de 32 bits y velocidad de 66 Mhz, su capacidad es muy superior. Buses normalizados de periféricos SCSI Entándart universal para la conversión de todo tipo de periféricos. Utilizado para dispositivos de almacenamiento. Características - Sencillez - Los dispositivos conectados son específicos para el Scasi, es decir, son de tipo SCASI, esto conlleva a que todos los dispositivos llevan conector de “E” y de “S” para el SCASI. - Contienen altas prestaciones. - Alto coste de adquisición SCSI 1 Ocho bits permite conectar hasta 8 dispositivos. Realmente son sólo siente dispositivos, ya que uno lo ocupa la controladora. La transferencia es de 3,3. Mb/seg. Hasta 5 Mb/seg. SCSI 2 Se mejora la velocidad. Hay cuatro tipos de SCSI . Normal 8 bitss 5 Mb/seg Fast 8 bits 10 Mb/seg Wide 16 bits 10 Mb/seg Fast-Wide 16 bits 20 Mb/seg Ultra SCSI: Salió en 1996, aumenta las prestaciones del SCSI. Compatible con FastSCSI 2 y con Fast/Wide-SCSI 2. Para buses de 8 bits. Alcanza los 20 Mb/seg, y para buswes de 16 bits llega hasta 40 Mb/seg. SCSI 3: Es otro conjunto de estándares, muy especializado. Por ejemplo, uno de esos conjuntos está orientado a serie en fibra óptica, y alcanza una gran velocidad en este campo. SCSI 3 ya no es compatible con los otros, a favor de la velocidad. USB: (universal serial Bus). La información se transmite en serie. Su objetivo es superar los inconvenientes de la conexión entre periféricos y ordenador. IEEE 1394 Tiene los mismos objetívos (wire-fire) http://html.rincondelvago.com/informatica-basica_8.html 2.7 Direccionamiento. MODOS DE DIRECCIONAMIENTO Y FORMATOS Introducción El campo de operación de una instrucción especifica la operación que se debe realizar. Esta debe ser ejecutada sobre algunos datos almacenados en registros del computador o en palabras de memoria, es decir, sobre los operandos. El modo de direccionamiento especifica la forma de interpretar la información contenida en cada campo de operando para localizar, en base a esta información, el operando. Los ordenadores utilizan técnicas de direccionamiento con los siguientes fines: - Dar versatilidad de programación al usuario proporcionando facilidades tales como índices, direccionamientos indirectos, etc., esta versatilidad nos servirá para manejar estructuras de datos complejas como vectores, matrices, etc. - Reducir el número de bits del campo de operando. Al usuario que tiene poca experiencia, la variedad de modos de direccionamiento en un ordenador le puede parecer excesivamente complicada. Sin embargo, la disponibilidad de diferentes esquemas de direccionamiento le da al programador experimentado flexibilidad para escribir programas que son más eficientes en cuanto a número de instrucciones y tiempo de ejecución. Es tal la importancia de los modos de direccionamiento que la potencia de una máquina se mide tanto por su repertorio de instrucciones como por la variedad de modos de direccionamiento que es capaz de admitir. Definición: Los modos de direccionamiento de un ordenador son las diferentes formas de transformación del campo de operando de la instrucción en la dirección del operando. En esta definición el término dirección debe interpretarse en su sentido más general de localización del operando, en cualquier lugar, y no en el sentido más estricto de dirección de memoria. A la dirección obtenida de las transformaciones anteriores la llamaremos dirección efectiva. Esta dirección, en el caso de tratarse de una dirección de memoria, es la que se cargará en el M.A.R. o registro de dirección de memoria. Llamando x a la información del campo de operando y Aef. a la dirección efectiva, la función f que a partir de x nos da Aef. constituirá el modo de direccionamiento empleado: Aef. = f(x) En la evaluación de la función f pueden intervenir otras informaciones además de la información presente en el campo de operando de la instrucción. Estas informaciones pueden residir en registros del procesador o en memoria. La especificación del modo de direccionamiento puede ir en el código de operación o en el campo de cada operando. Normalmente se codifica en el código de operación si el número de modos es pequeño, en caso contrario se codifica con cada operando, esta última forma de codificación favorece la ortogonalidad. Modos de direccionamiento más usuales En los párrafos siguientes se irán describiendo los modos de direccionamiento más frecuentes. La mayoría de estos modos son comunes a muchas máquinas, sin embargo, hay otros que sólo se usan en determinados procesadores. - Direccionamiento implícito En este modo, llamado también inherente, el operando se especifica en la misma definición de la instrucción. El modo implícito se usa para hacer referencia a operandos de dos tipos: - Registros: En el caso de que el código de operación se refiera en particular a un registro. - Operandos en la pila: En el caso de que la operación se realice siempre sobre el dato situado en la cima de pila. El primer caso es típico de las organizaciones de un solo acumulador. Generalmente en un ordenador de este tipo todas las instrucciones que actúan sobre el acumulador utilizan direccionamiento implícito. En el segundo caso están la mayoría de las instrucciones de los ordenadores con organización de pila. Estas operaciones llevan implícitos los operandos que son los elementos de la cima de pila. Esto se debe a que en este tipo de máquinas la mayoría de las operaciones no tienen campos de dirección. También están en este caso las instrucciones PUSH y POP de la mayoría de los ordenadores cuyo operando implícito también es, como en el caso anterior, la cima de pila. - Direccionamiento inmediato (o literal) En este modo es el operando el que figura en la instrucción no su dirección. En otras palabras el campo de operando contiene él mismo, sin transformación alguna, la información sobre la que hay que operar. Este modo es útil para inicializar registros o palabras de memoria con un valor constante. - Direccionamiento directo por registro Se mencionó anteriormente que el campo de dirección de una instrucción puede especificar una palabra de memoria o un registro M procesador. Cuando se da este último caso se dice que el operando está especificado con direccionamiento directo por registro, en tal caso, el operando reside en uno de los registros del procesador que es seleccionado por un campo de registro de k bits en la instrucción. Un campo de k bits puede especificar uno de 2k registros. Este modo es típico de los ordenadores con organización de registros de uso general. Las ventajas de este modo son: - El acceso a los registros es muy rápido, por tanto el direccionamiento por registro debe usarse en las variables que se usen con más frecuencia para evitar accesos a memoria que son más lentos, un ejemplo muy típico del uso de este direccionamiento son los índices de los bucles. - El número de bits necesarios para especificar un registro es mucho más pequeño que el necesario para especificar una dirección de memoria, esto es debido a que el número de registros del procesador es muy pequeño comparado con el número de direcciones de memoria. Sin embargo, hay que tener en cuenta que en los ordenadores modernos el número de registros ha aumentado considerablemente. - Direccionamiento directo (o absoluto) Este es el modo de direccionamiento más sencillo. El campo de dirección no necesita transformación alguna para dar la dirección efectiva, es decir la función que transforma el campo de operando en la dirección efectiva es la identidad. Esto significa que el campo de operando es ya la dirección efectiva. Este direccionamiento sólo se usa en ordenadores pequeños en que el programa siempre se sitúa en la misma zona de memoria ya que dificulta la relocalización de los programas, es decir que el código de los programas no dependa de su situación en memoria. Ordinariamente este modo sólo se usa para acceder a direcciones del sistema que normalmente se refieren a operaciones de entrada y salida ya que estas direcciones no dependen del programa. - Direccionamiento indirecto En este modo el campo de operando de la instrucción indica la localización de la dirección efectiva del operando. El modo de direccionamiento indirecto puede adquirir diferentes formas según cuál sea el lugar donde se encuentre la dirección del operando. En general, todos los modos de direccionamiento tienen su versión indirecta que añade un eslabón más a la cadena del direccionamiento. Por ejemplo existe el direccionamiento indirecto por registro, en el que el registro especificado contiene la dirección del operando, no el operando mismo. Este direccionamiento es útil cuando se trabaja con punteros ya que los punteros son variables que contienen las direcciones de los operandos, no los operandos mismos. - Direccionamiento relativo Hay algunos modos de direccionamiento en que se hace uso de una propiedad muy generalizada de los programas denominada localidad de referencia, esta propiedad consiste en que las direcciones referenciadas por los programas no suelen alejarse mucho unas de otras y, por tanto, suelen estar concentradas en una parte de la memoria. Estas consideraciones nos llevan a la conclusión de que no es necesario utilizar todos los bits de la dirección de memoria en el campo de operando, basta utilizar los bits precisos para cubrir la parte de memoria donde estén incluidas las direcciones a las que el programa hace referencia. Esto puede hacerse tomando corno referencia un punto de la memoria y tomando como campo de operando la diferencia entre ese punto y la dirección efectiva del operando. La dirección que se toma como punto de referencia puede residir en un registro de la CPU y, por tanto, sumando el contenido de ese registro con el campo de operando obtendremos la dirección efectiva. Hay varios direccionamientos basados en esta técnica que reciben diferentes nombres dependiendo de cuál sea el registro en el que radica la dirección tomada como referencia. Todos ellos podrían catalogarse como direccionamientos relativos a un registro. El direccionamiento denominado habitualmente relativo toma como valor de referencia el registro contador de programa. Cuando se usa este modo de direccionamiento, el campo de operando consiste en un número (normalmente con signo) que expresa la diferencia entre la dirección del dato y la dirección siguiente a la instrucción en curso (contenida en el contador de programa). Si el campo de operando, llamado en este caso desplazamiento u offset, es positivo el operando residirá en una dirección posterior a la de la instrucción y si es negativo, en una dirección anterior. Este modo de direccionamiento es usado muy frecuentemente en programas cuyo código deba ser independiente de la posición de memoria donde estén situados (programas relocalizables) ya que el desplazamiento es independiente de la localización del programa. También se usa con mucha frecuencia en instrucciones de bifurcación. - Direccionamiento por base y desplazamiento Este modo de direccionamiento se fundamenta en la propiedad de localidad de referencia mencionada anteriormente. La dirección que se toma como referencia de la zona de memoria en la que están localizados los datos se deposita en un registro denominado registro base y el campo de operando indica la diferencia entre el registro base y la dirección M operando. Normalmente se toma como referencia (registro base) la dirección de comienzo de la zona de memoria ocupada por un programa. Por tanto, la dirección efectiva del operando se calculará sumando el contenido del registro base con el campo de operando. Este modo de direccionamiento se usa en ordenadores que pueden mantener en memoria varios programas ya que, de esta forma, los diferentes registros base pueden contener las direcciones de comienzo de cada uno de los programas. Esto es muy útil porque facilita la relocalización de los programas para situar el programa en una zona de memoria diferente bastará con cambiar el contenido de su registro base, no será necesario cambiar ninguno de los campos de operando. - Direccionamiento indexado En este modo de direccionamiento, la dirección del operando también se calcula sumando un registro de la CPU al campo de operando, este registro es un registro específico para este uso llamado registro índice. En los ordenadores con organización de registros generales, el registro índice puede ser cualquiera de los registros de la CPU. En los ordenadores en que el contador de programa es considerado como un registro de uso general (PDP 11 y VAX) el modo relativo es un caso particular del direccionamiento indexado. A la cantidad que hay que sumar al registro índice para conseguir la dirección del operando también se le llama desplazamiento u offset. Este modo de direccionamiento es especialmente útil para el direccionamiento de vectores y matrices en bucles ya que, si se quieren direccionar elementos consecutivos del vector o matriz, basta mantener en el desplazamiento la dirección del primer elemento e ir incrementando el registro índice. También sirve para acceder de forma relativa a elementos de vectores cercanos a uno dado, para ello, se carga la dirección del elemento de referencia en el registro índice y después se accede mediante direccionamiento indexado, con el desplazamiento adecuado, al anterior, al siguiente, etc., esto mismo también es aplicable a pilas, en que, en ocasiones, hay que acceder a datos cercanos, por encima o por debajo, al dato señalado por algún apuntador. Una consecuencia de todo esto es una modalidad de direccionamiento indexado de que disponen algunos ordenadores, denominada autoindexación, que hace que el registro índice sea incrementado o decrementado en el tamaño del operando antes o después de acceder al mismo. Los ordenadores que poseen autoindexación incorporan los modos de direccionamiento descritos en los dos apartados siguientes. En algunos ordenadores existen variantes del direccionamiento indexado en que se obtiene la dirección del operando sumando el contenido de varios registros con el desplazamiento, esto puede servir para especificar el comienzo de un vector mediante un desplazamiento respecto a un registro y el elemento del vector mediante un registro índice. - Direccionamiento autoincremental o postincremental En este modo, la dirección del operando se encuentra en un registro y éste es incrementado, después de acceder al operando, en el tamaño del mismo. Este modo es útil para manejar vectores y matrices como se veía en el apartado anterior. También se puede utilizar para extraer datos de pilas (que crezcan hacia direcciones bajas) ya que, si el registro sobre el que se aplica este modo es el apuntador de pila, después de la operación el apuntador señalará al siguiente elemento de la pila. - Direccionamiento autodecremental o predecremental En este modo para obtener la dirección del operando hay que decrementar un registro en el tamaño del operando; el nuevo contenido del registro después de efectuar esa operación, es la dirección del operando. Para finalizar, veamos un resumen de las utilidades de los modos de direccionamiento usados con más frecuencia. http://www.mailxmail.com/curso/informatica/arquitecturaordenadores/capitulo19.htm http://www.mailxmail.com/curso/informatica/arquitecturaordenadores/capitulo20.htm http://www.mailxmail.com/curso/informatica/arquitecturaordenadores/capitulo21.htm http://www.mailxmail.com/curso/informatica/arquitecturaordenadores/capitulo22.htm http://www.mailxmail.com/curso/informatica/arquitecturaordenadores/capitulo23.htm http://www.mailxmail.com/curso/informatica/arquitecturaordenadores/capitulo24.htm 2.7.1 Modo real. Segmentos y párrafos Esta forma de representación segmentada de las direcciones es en realidad una imagen de como son manejadas internamente en el procesador. Los procesadores 8088 tienen registros de 16 bits que pueden servir para almacenar los desplazamientos, es decir, cualquier dirección dentro de una zona de 64 KB (que se conoce como segmento). Disponen además de 4 registros de segmento de 16 bits (CS, SS, DS y ES H3.2), en los que se almacenan las direcciones de inicio del segmento activo en cada momento. Resulta así, que pueden direccionar un total absoluto de 1MByte, y hasta 64 x 4 = 256 KB sin necesidad de cambiar los registros de segmento. Esto es lo que se conoce como funcionamiento en modo real (como puede verse, en realidad es una forma de manejar la memoria). La figura adjunta muestra como se utilizan los registros para señalar las direcciones de inicio de los diversos módulos de un programa cargado en memoria ( E1.3.2) dentro del espacio de memoria direccionable con 20 bits (00000-FFFFFh). En la figura 1 se muestra una división de este "Mega" en 16 segmentos cuyos desplazamientos son justamente 0h, 1h, 2h ... Fh. http://www.zator.com/Hardware/H5_1.htm El 80386 tiene dos modos de operación: modo de direccionamiento real (modo real), y modo de direccionamiento virtual protegido (modo protegido). En modo real el 80386 opera como un 8086 muy rápido, con extensiones de 32 bits si se desea. El modo real se requiere primariamente para preparar el procesador para que opere en modo protegido. http://lorca.act.uji.es/e08/ayudas/intel/80386.HTM Ese mismo año aparece en escena el 80286, mucho más complejo que el 8086. Aunque el juego de instrucciones es prácticamente el mismo, se diseñó pensando en la ejecución de sistemas multitarea. Contaba con dos modos de ejecución, el real y el protegido. En el modo real el 286 opera como un 8086; sin embargo en modo protegido cuando un programa intenta acceder a una región de la memoria o ejecutar una determinada instrucción se comprueba antes si tiene ese privilegio. Si no es así se activa un mecanismo de protección que generalmente gestionará el sistema operativo, que es el programa que controla los derechos del resto de programas. Además este modo protegido permitía manejar hasta 16Mb de memoria RAM (por contar con un bus de direcciones de 24 bits), aunque como los registros seguían siendo de 16 bits, no posibilitaba el manejo de bloques de memoria -segmentos- de más de 64kb. En cualquier caso, más allá del mero aumento de la velocidad de reloj (hasta 10MHz en el 8086, 16, 20 e incluso 25MHz en el 286), o el espacio de memoria direccionable, se produjo una fuerte reducción del número de ciclos de reloj por instrucción, lo que llevó a un incremento aún mayor del rendimiento. En 1985 sale el 80386, lo que vendría a ser un peso pesado comparado a sus antecesores. Prácticamente todos los registros quedaban extendidos a 32 bits, e incluía un mecanismo de gestión de memoria más avanzado que el 286, facilitando el uso de memoria virtual (disco duro como si fuera ram). Contaba con un bus de direcciones de 32 bits, llegando a direccionar 4Gb de memoria, y memoria caché. Aparte del modo real incluía un nuevo modo protegido mejorado. En este modo protegido se permitía la ejecución de programas en un modo virtual o V86, posibilitando la ejecución de máquinas virtuales 8086; el sistema puede pasar con cierta facilidad de un modo a otro, permitiendo que funcionen varios "8086" en una especie de modo "real" al tiempo, cada uno con su memoria, estado... funcionando completamente ajeno al resto del software. Cuando se ejecuta un programa de MS-DOS (modo real) bajo Windows (modo protegido) en realidad entra en acción el modo virtual, ejecutando la aplicación con relativa seguridad aislada del sistema y resto de aplicaciones (y digo relativa porque he colgado muchas *muchas* veces el windows enredando con un programilla DOS; los mecanismos de protección del Windows dejan bastante que desear). http://www.rinconsolidario.org/eps/asm8086/CAP1.html 2.7.2 Modo protegido. El modo protegido provee el acceso al sofisticado manejo de memoria y paginado. Dentro del modo protegido, el software puede realizar un cambio de tarea para entrar en tareas en modo 8086 virtual (V86 mode) (esto es nuevo con este microprocesador). Cada una de estas tareas se comporta como si fuera un 8086 el que lo está ejecutando, lo que permite ejecutar software de 8086 (un programa de aplicación o un sistema operativo). Las tareas en modo 8086 virtual pueden aislarse entre sí y del sistema operativo (que debe utilizar instrucciones del 80386), mediante el uso del paginado y el mapa de bits de permiso de entrada/salida (I/O Permission Bitmap). Finalmente, para facilitar diseños de hardware de alto rendimiento, la interfaz con el bus del 80386 ofrece pipelining de direcciones, tamaño dinámico del ancho del bus de datos (puede tener 16 ó 32 bits según se desee en un determinado ciclo de bus) y señales de habilitación de bytes por cada byte del bus de datos. Un 286 en modo protegido no podía volver al modo real salvo con un reset, lo que supuso una seria traba al desarrollo de software que explotase este modo de funcionamiento (no olvidemos que por entonces el estándar de facto en sistemas operativos era MSDOS). Además, seguíamos estando limitados a segmentos de 64k, y con el 386 al caer (siempre que se lanza un procesador nuevo, están los de las siguientes generaciones en diferentes estados de desarrollo) no compensaba el esfuerzo. Debido a la escasa relevancia del modo protegido del 286, nos referiremos genéricamente a modo protegido cuando hablemos de 386+. http://lorca.act.uji.es/e08/ayudas/intel/80386.HTM Modo protegido y memoria extendida La especificación EMS de Lotus/Intel/Microsoft, permitía manejar grandes cantidades de datos (ahora no nos parecen tan grandes), pero no resolvía el problema de grandes cantidades de código, ya que el segmento de código no podía manejarse de esta forma. Esto presentaba problemas no solo para programas grandes, sino para cualquier intento de multiprogramación ( 1.7), cuando varios programas deben coexistir en memoria. Como siempre, la solución vino de la mano de otro avance tecnológico; en este caso, la aparición del procesador Intel 80286, que en 1982 inició la era del PC AT. Este micro permite un acceso a memoria que recuerda vagamente la especificación EMS, pero de forma nativa, ya que los mecanismos están incluidos en el procesador. Como la política de Intel ha sido mantener compatibilidad con los micros anteriores, el 80286 podía trabajar en modo real, imitando el funcionamiento del 8088 , mientras que la nueva forma se denominó modo protegido. El modo protegido utiliza los registros de segmento como punteros a unos nuevos registros de dirección de 24 bits denominados tablas de descripción ("Descriptor tables"), que permiten acceder a un máximo de 2 24 (16 MBytes) de memoria física, de forma que los registros de segmento son selectores que marcan el inicio de una dirección de 24 bits. La memoria que se hacía accesible mediante este sistema se denominó memoria extendida, para distinguirla de la antigua EMS [3]. La posterior introducción del 80386, con registros de 32 bits, permitió direccionar hasta 232 (4 GBytes) de memoria externa. Los nuevos micros incluyeron otras mejoras que permitían al Sistema Operativo un funcionamiento más cómodo y seguro de las aplicaciones cuando operaba en modo protegido. Los mecanismos pertinentes estaban incluidos en el hardware o al menos este proporcionaba recursos al SO para realizarlos cómodamente, aunque desde luego, para sacar provecho de estas mejoras el Sistema debía estar preparado ex profeso. El DOS no podía utilizarlas, sí en cambio los sistemas más avanzados del momento, como OS/2, Unix o Windows. Básicamente estas mejoras se referían a dos cuestiones: Manejo de memoria virtual Soporte nativo para multiprogramación §7.1 Memoria virtual Esta técnica consiste en hacer creer al programa que dispone de más memoria que la físicamente disponible en RAM. Este artificio tiene sentido porque en ese momento (y actualmente), la memoria extendida era mayor que la físicamente disponible en muchos sistemas, además el disco duro era estándar en todos los equipos. Esta RAM ficticia se conoce como memoria virtual; una simulación conocida de antiguo en el mundo de los mainframes, que fue introducida en la informática personal a partir del 80286; este procesador ya disponía de un controlador hardware para este menester, de forma que su manejo no significaba una gran sobrecarga para el Sistema. Su funcionamiento se basa en que cuando una aplicación necesita más espacio y la memoria física está agotada, el controlador de memoria virtual proporciona espacio auxiliar utilizando un fichero de intercambio ("Swap file") situado en memoria externa (disco duro generalmente H2), donde se almacena la información que no cabe en la RAM. Además de facilitar la apariencia de más RAM que la físicamente disponible, este mecanismo permite que diversas aplicaciones compartan la misma memoria física, aunque para ello se requieran constantes maniobras de carga y descarga ("swapping") de trozos del fichero de intercambio a memoria, por lo que el rendimiento global del sistema se resiente si la desproporción entre el fichero de intercambio y la RAM es muy notable [4]. Nota: En el caso de los sistemas operativos de Microsoft, la memoria virtual fue introducida de forma más o menos perfeccionada desde la aparición del primer Windows 3.1 en 1.987. En Windows 95, el Sistema comienza a funcionar directamente en modo protegido de 32 bits, proporcionando a cualquier aplicación un espacio de memoria de hasta 4 GB. (siempre que esté disponible el adecuado espacio en disco). En este Sistema, el fichero de intercambio puede crecer a medida de las necesidades hasta ocupar todo el espacio disponible en disco. http://www.zator.com/Hardware/H5_1.htm El modo protegido utiliza los registros de segmento como punteros a unos nuevos registros de dirección de 24 bits denominados tablas de descripción ("Descriptor tables"), que permiten acceder a un máximo de 224 (16 MBytes) de memoria física, de forma que los registros de segmento son selectores que marcan el inicio de una dirección de 24 bits. La memoria que se hacía accesible mediante este sistema se denominó memoria extendida, para distinguirla de la antigua EMS [3]. La posterior introducción del 80386, con registros de 32 bits, permitió direccionar hasta 232 (4 GBytes) de memoria externa. Los nuevos micros incluyeron otras mejoras que permitían al Sistema Operativo un funcionamiento más cómodo y seguro de las aplicaciones cuando operaba en modo protegido. Los mecanismos pertinentes estaban incluidos en el hardware o al menos este proporcionaba recursos al SO para realizarlos cómodamente, aunque desde luego, para sacar provecho de estas mejoras el Sistema debía estar preparado ex profeso. El DOS no podía utilizarlas, sí en cambio los sistemas más avanzados del momento, como OS/2, Unix o Windows. Básicamente estas mejoras se referían a dos cuestiones: Manejo de memoria virtual Soporte nativo para multiprogramación http://personales.com/colombia/bucaramanga/koll/Modo%20protegido%20y%2 0memoria%20virtual.htm 2.7.3 Modo real virtual. El 80386 (DX) El procesador 80386 significó un cambio total en el mundo de las Pcs. El 386DX cambió radicalmente varios de los aspectos de los procesadores anteriores y estableció una gran diferencia con los demás: Por primera vez, los programas requerían de un procesador por sus características para poder correr y no por su velocidad, lo que generó una especie de incompatibilidad hacia atrás: los programas desarrollados para aprovechar sus características no podían funcionar en cualquier otro procesador anterior. Fue el primer procesador de 32 bits, el 386DX tiene un bus de datos e instrucciones de 32 bits tanto interno como externo; por lo tanto duplica el ancho del bus con respecto al de su predecesor: el 80286. El bus de direcciones también fue ampliado a 32 bits, por lo tanto el chip puede direccionar un máximo de 4096 Mb de memoria ( 4 Gb ). Sus velocidades de reloj comenzaron con 16 Mhz y se llegaron a desarrollar chips de hasta 33 y 40 Mhz. También se le agregó una memoria caché externa para aumentar el rendimiento y solucionar el problema de la lentitud de las memorias con respecto a la velocidad del procesador. Las aplicaciones desarrolladas para correr sobre los procesadores anteriores al 386DX simplemente correrán más rápido al ser ejecutadas en un sistema con este procesador, pero las aplicaciones que aprovechan las características avanzadas de este chip corren muchísimo más rápido que una aplicación equivalente desarrollada para un chip anterior, ya que el ancho del bus de direccionamiento permite direccionar memoria sin los problemas que generaba el de los procesadores de 16 bits. Al ser un procesador de32 bits, el 386DX tiene un nuevo conjunto de registros extendidos de 32 bits, lo que permite un mayor rendimiento en las aplicaciones que manejen los datos directamente en 32 bits en vez de trabajar con datos de 16 bits. También se introduce una nueva modalidad de trabajo: el modo real virtual. Este modo de operación permite una multitarea muchísmo más avanzado que el que provee el 80286. Cada una de las aplicaciones que se ejecute en un entorno de trabajo multitarea, tendrán su propia CPU virtual con su memoria propia. Esto sería parecido a tener varias computadoras personales ejecutando cada una su aplicación y que cada una esperara para que la otra ejecute una operación para luego ejecutar la suya: se distribuyen los tiempos, pero cada aplicación tiene su área de trabajo propia. Esta modalidad de trabajo fue el principio de funcionamiento de los sistemas operativos de 32 bits que surgieron bastante tiempo después que el primer 386DX: OS/2 a partir de la versión 2.0, Windows a partir de la versión 95 y Windows NT en todas sus aplicaciones. También con estos procesadores aparece otro nuevo concepto: la memoria virtual. Cualquier dispositivo de entrada y salida (como por ejemplo un disco duro) puede tener asignado un rango de direcciones de memoria y trabajar como ésta, de manera que si se posee memoria insuficiente, se puede recurrir al disco y utilizarlo de las misma forma que la memoria, aunque no se tendrán las mismas velocidades. Esta capacidad es propia de los procesadores y no del sistema operativo, como suele pensarse. Que el sistema operativo lo aproveche o no, es otra cosa. Los procesadores que tengan un bus de direcciones de 32 bits pueden direccionar teóricamente hasta 64 Tb de memoria virtual. El 386DX puede procesar el doble de datos que el 80286 en la misma cantidad de tiempo, gracias a su juego de comandos mejorados y el ancho del bus de datos. http://personales.com/peru/lima/ensamblaje/procesador.htm Desde que el bus de direcciones se expandió a 32 bits, el chip puede direccionar directamente 4.294.967.296 (2 elevado a la 32) localizaciones de memoria, o 4 gigabytes de RAM . Esto hace posible direccionar incluso 64 terabytes de forma virtual, lo que permite otro modo de operación, llamado el modo real virtual. Con este modo de operación, es posible efectuar la multitarea bajo MS- /PC-DOS porque cada aplicación involucrada en el proceso de multitarea recibe una CPU virtual con 1 MB de memoria. 2.8 Temporización. En máquinas de arquitectura Von Neumann la mayoría de las operaciones son serializadas, esto significa que la computadora ejecuta los comandos en un orden preestablecido. Para asegurarnos de que todas las operaciones ocurren justo en el tiempo adecuado, las máquinas 80x86 utilizan una señal alternante llamada el reloj del sistema. En su forma básica, el reloj del sistema maneja toda la sincronización de un sistema de cómputo. El reloj del sistema es una señal eléctrica en el bus de control que alterna entre los valores de cero y uno a una tasa dada. La frecuencia en la cual el reloj del sistema alterna entre cero y uno es llamada frecuencia del reloj de sistema. El timepo que toma para cambiar de cero a uno y luego volver a cero se le llama periodo de reloj, también llamado ciclo de reloj. La frecuencia del reloj es simplemente el número de ciclos de reloj que ocurren en un segundo, en sistemas actuales, éste valor excede los 200 ciclos por segundo, siendo ya común frecuencias del orden de los 366 Mhz. (MegaHertz, que equivale a un millón de ciclos por segundo). Observe que el periodo de reloj es el valor inverso de la frecuencia, por lo tanto, para un sistema de 200 Mhz el periodo es igual a 5 nanosegundos. Para asegurar la sincronización, el CPU inicia una operación ya sea en el flanco ascendente (cuando la señal cambia de cero a uno) ó en el descendente (cuando la señal cambia de uno a cero). Como todas las operaciones de un CPU están sincronizadas en torno a su reloj, un CPU no puede ejecutar operaciones más rápido que la velocidad del reloj. http://www.modelo.edu.mx/univ/virtech/prograc/cbyn03.htm EL TEMPORIZADOR 8253 U 8254. pocas cuando contadores pueden ser D7..D0: CLK 0: OUT 0: GATE 0: CLK 1: OUT 1: GATE 1: CLK 2: OUT 2: GATE 2: A0..A1: -CS: -WR: -RD: El 8253/4 es un chip temporizador que puede ser empleado como reloj de tiempo real, contador de sucesos, generador de ritmo programable, generador de onda cuadrada, etc. En este capítulo, la información vertida estará relacionada con el 8254 que equipa a los AT, algo más potente que el 8253 de los PC/XT; sin embargo, las diferencias serán comentadas llegue el caso. 12.3.1 - DESCRIPCIÓN DEL INTEGRADO. Este circuito integrado posee 3 totalmente independientes, que programados de 6 formas diferentes. BUS de datos bidireccional de 3 estados. CLOCK 0, entrada de reloj al contador 0. Salida del contador 0. Puerta de entrada al contador 0. CLOCK 1, entrada de reloj al contador 1. Salida del contador 1. Puerta de entrada al contador 1. CLOCK 2, entrada de reloj al contador 2. Salida del contador 2. Puerta de entrada al contador 2. Líneas de dirección para seleccionar uno de los tres contadores o el registro de la palabra de control. Habilita la comunicación con la CPU. Permite al 8254 aceptar datos de la CPU. Permite al 8254 enviar datos a la CPU. DESCRIPCIÓN FUNCIONAL El diagrama funcional del 8254, con la estructura interna de las diversas partes que lo componen, se muestra a la izquierda. A la derecha, diagrama de los bloques internos de un contador: El buffer del bus de datos, de 8 bits y tres estados, comunica el 8254 con la CPU. La lógica de lectura y escritura acepta entradas del bus y genera señales de control para las partes funcionales del 8254. Las líneas A0..A2 seleccionan uno de los tres contadores o el registro de la palabra de control, para poder leerlos o escribirlos. El registro de la palabra de control es seleccionado cuando A0=A1=1, este registro sólo puede ser escrito (se puede obtener información de estado, como se verá más adelante, con el comando read-back del 8254, no disponible en el 8253). Los contadores 1, 2 y 3 son idénticos en su funcionamiento, por lo que sólo se describirá uno; son totalmente independientes y cada uno de ellos puede ser programado en una modalidad diferente. Si se observa el esquema de un contador, a la derecha, se verá el registro de la palabra de control: aunque no es parte del contador propiamente dicho, afecta a su modo de funcionamiento. El registro de estado, cuando es transferido al correspondiente latch, contiene el valor en curso del registro de la palabra de control y alguna información adicional (como se verá después en el comando read-back). El contador propiamente dicho está representado en la figura por CE (Counting Element) y es un contador descendente síncrono de 16 bits que puede ser inicializado. OLM y OLL son dos latch de 8 bits (OL significa Output Latch; los subíndices M y L están relacionados con el más y el menos significativo byte, respectivamente); ambos son referenciados normalmente como un conjunto denominado OL a secas. Estos latches siguen normalmente la cuenta descendente de CE, pero la CPU puede enviar un comando para congelarlos y poder leerlos; tras la lectura continuarán siguiendo a CE. La lógica de control del contador se encarga de que un sólo latch esté activo a un tiempo, ya que el bus interno del 8254 es de 8 bits. CE no puede ser nunca leído directamente (lo que se lee es OL). De manera análoga, existen un par de registros CRM y CRL (CR significa Count Register) que almacenan la cuenta del contador y se la transmiten convenientemente a CE. Los valores de cuenta se escriben siempre sobre CR (y no directamente sobre CE). La lógica de control gestiona la conexión con el exterior a través de las líneas CLK, GATE y OUT. DESCRIPCIÓN OPERACIONAL Tras el encendido del ordenador, el 8254 está en un estado indefinido; con un modo, valor de cuenta y estado de salida aleatorios. Es entonces cuando hay que programar los contadores que se vayan a emplear; el resto, no importa dejarlos de cualquier manera. Programación del 8254. Para programar un contador del 8254 hay que enviar primero una palabra de control y, después, un valor de cuenta inicial. Los contadores se seleccionan con las líneas A0 y A1; el valor A0=A1=1 selecciona la escritura de la palabra de control (en la que se identifica el contador implicado). Por tanto, el 8254 ocupa normalmente 4 direcciones de E/S consecutivas ligadas a los contadores 0, 1, 2 y al registro de la palabra de control. Para enviar la cuenta inicial se utiliza simplemente el puerto E/S ligado al contador que se trate. El formato de la palabra de control es: Operaciones de escritura. El 8254 es muy flexible a la hora de ser programado. Basta con tener en cuenta dos cosas: por un lado, escribir siempre primero la palabra de control, antes de enviar la cuenta inicial al contador. Por otro, dicha cuenta inicial debe seguir exactamente el formato seleccionado en la palabra de control (enviar sólo byte bajo, enviar sólo byte alto, o bien enviar ambos consecutivamente). Teniendo en cuenta que cada contador tiene su propio puerto y que la palabra de control indica el contador al que está asociada, no hay que seguir un orden especial a la hora de programar los contadores. Esto significa que, por ejemplo, se puede enviar la palabra de control de cada contador seguida de su cuenta inicial, o bien enviar todas las palabras de control para los 3 contadores y después las 3 cuentas iniciales; también es válida cualquier combinación intermedia de estas secuencias (por ejemplo: enviar la palabra de control para el contador 0, después la palabra de control para el contador 1, después la parte baja de la cuenta para el contador 0, luego la parte baja de la cuenta para el contador 1, la parte alta de la cuenta para el contador 0, etc...). Un nuevo valor de cuenta inicial puede ser almacenado en un contador en cualquier momento, sin que ello afecte al modo en que ha sido programado (el resultado de esta operación dependerá del modo, como se verá más adelante). Si se programa el contador para leer/escribir la cuenta como dos bytes consecutivos (bajo y alto), el sentido común indica que entre ambos envíos/recepciones no conviene transferir el control a una subrutina que utilice ese mismo contador para evitar un resultado incorrecto. Operaciones de lectura. Existen tres posibles métodos para leer el valor de un contador en el 8254. El primero es el comando Read-Back, sólo disponible en el 8254 (y no en el 8253), como luego veremos. El segundo consiste en leer simplemente el contador accediendo a su puerto correspondiente: este método requiere inhibir la entrada CLK al contador (por ejemplo, a través de la línea GATE o utilizando circuitería exterior de apoyo) con objeto de evitar leer la cuenta en medio de un proceso de actualización de la misma, lo que daría un resultado incorrecto. El tercer método consiste en el comando de enclavamiento. Comando de enclavamiento (Counter Latch Command). Este comando se envía cual si de una palabra de control se tratara (A1=A0=1): para diferenciarlo de ellas los bits 5 y 4 están a cero. En los bits 7 y 6 se indica el contador afectado. Los demás bits deben estar a cero para compatibilizar con futuras versiones del chip. Cuando se envía el comando, el OL del contador seleccionado queda congelado hasta que la CPU lo lee, momento en el que se descongela y pasa de nuevo a seguir a CE. Esto permite leer los contadores al vuelo sin afectar la cuenta en curso. Se pueden enviar varios de estos comandos a los diversos contadores, cuyos OL's quedarán enclavados hasta ser leídos. Si se envían varios comandos de enclavamiento al mismo contador, separados por un cierto intervalo de tiempo, sólo se considerará el primero (por tanto, la cuenta leída corresponderá al valor del contador cuando fue enclavado por vez primera). Por supuesto, el contador debe ser leído utilizando el formato que se definió al enviar la palabra de control; aunque en el caso de leer 16 bits, las dos operaciones no han de ser necesariamente consecutivas (se pueden insertar en el medio otras acciones relacionadas con otros contadores). Otra característica interesante (¿disponible tal vez sólo en el 8254?) consiste en la posibilidad de mezclar lecturas y escrituras del mismo contador. Por ejemplo, si ha sido programado para cuentas de 16 bits, es válido hacer lo siguiente: 1) leer el byte menos significativo, 2) escribir el nuevo byte menos significativo, 3) leer el byte más significativo, 4) escribir el nuevo byte más significativo. Comando Read-Back. Sólo está disponible en el 8254, no en el 8253. Este comando permite leer el valor actual de la cuenta, así como averiguar también el modo programado para un contador y el estado actual de la patilla OUT, además de verificar el banderín de cuenta nula (Null Count) de los contadores que se indiquen. El formato del comando Read-Back es el siguiente: El comando Read-Back permite enclavar la cuenta en varios OL's de múltiples contadores de una sola vez, sin requerir múltiples comandos de enclavamiento, poniendo el bit 5 a cero. Todo funciona a partir de aquí como cabría esperar (los contadores permanecen enclavados hasta ser leídos, los que no son leídos permanecen enclavados, si el comando se reitera sólo actúa la primera vez reteniendo la primera cuenta...). También es posible enviar información de estado al latch OL, enclavándola para que puede ser leída con comodidad por el puerto que corresponda a ese contador. La palabra de estado tiene el siguiente formato: En D0..D5 se devuelve justo la misma información que se envió en la última palabra de control; en el bit D7 se entrega el estado actual de la patilla OUT del 8254, lo que permite monitorizar por software las salidas del temporizador economizando hardware en ciertas aplicaciones. El bit NULL COUNT (D6) indica cuándo la última cuenta escrita en CR ha sido transferida a CE: el momento exacto depende del modo de funcionamiento del contador. Desde que se programa un nuevo valor de cuenta, pasa un cierto tiempo hasta que éste valor pasa de CR a CE: leer el contador antes de que se haya producido dicha transferencia implica leer un valor no relacionado con la nueva cuenta. Por ello, según las aplicaciones, puede llegar a ser necesario esperar a que NULL COUNT alcance el valor 0 antes de leer. El funcionamiento es el siguiente: Operación Consecuencias A -Escribir al registro de la palabra de control (1) NULL COUNT = 1 B -Escribir al registro contador (CR) (2) NULL COUNT = 1 C -Nueva cuenta cargada en CE (CR ->CE) NULL COUNT = 0 Notas: (1) Sólo el contador especificado por la palabra de control tiene su NULL COUNT a 1; los demás contadores, lógicamente, no ven afectado su correspondiente bit NULL COUNT. (2) Si el contador es programado para cuentas de 16 bits, NULL COUNT pasa a valer 1 inmediatamente después de enviar el segundo byte. Si se enclava varias veces seguidas la palabra de estado, todas serán ignoradas menos la primera, por lo que el estado leído será el correspondiente al contador en el momento en que se enclavó por vez primera la palabra de estado. Se pueden enclavar simultáneamente la cuenta y la palabra de estado (en un comando Read-Back con D5=D4=0), lo que equivale a enviar dos Read-Back consecutivos. En este caso, y con independencia de quién de los dos hubiera sido enclavado primero, la primera lectura realizada devolverá la palabra de estado y la segunda la cuenta enclavada (que automáticamente quedará de nuevo desenclavada). MODOS DE OPERACIÓN DEL 8254 MODO 0: Interrupt On Terminal Count (Interrupción al final de la cuenta). Es empleado típicamente para contar sucesos. Tras escribir la palabra de control, OUT está inicialmente en estado bajo, y permanecerá así hasta que el contador alcance el cero: entonces se pone a 1 y no volverá a bajar hasta que se escriba una nueva cuenta o una nueva palabra de control. La entrada GATE puesta a 0 permite inhibir la cuenta, sin afectar a OUT. El contador sigue evolucionando tras llegar a cero (0FFFFh, 0FFFEh, ...) por lo que lecturas posteriores del mismo devuelven valores pseudoaleatorios. Tras escribir la cuenta inicial y la palabra de control en el contador, la cuenta inicial será cargada en el próximo pulso del reloj conectado (CLK), pulso que no decrementa el contador: para una cuenta inicial N, OUT permanecerá a 0 durante N+1 pulsos del reloj tras escribir la cuenta inicial. Si se escribe una nueva cuenta en el contador, será cargada en el próximo pulso del reloj y el contador comenzará a decrementarse; si se envía una cuenta de dos bytes, el primer byte enviado inhibe la cuenta y OUT es puesto a cero inmediatamente (sin esperar a CLK): tras escribir el segundo byte, la cuenta será cargada en el siguiente pulso del reloj. Esto permite sincronizar la secuencia de conteo por software. Si se escribe una nueva cuenta mientras GATE=0, ésta será cargada en cualquier caso en el siguiente pulso del reloj: cuando GATE suba, OUT se pondrá en alto tras N pulsos del reloj (y no N+1 en este caso). MODO 1: Hardware Retriggerable One-Shot (Monoestable programable). OUT será inicialmente alta y bajará en el pulso de reloj que sigue al flanco de subida de GATE, permaneciendo en bajo hasta que el contador alcance el cero. Entonces, OUT sube y permanece activo hasta el pulso del reloj que siga al próximo flanco de subida de GATE. Tras escribir la palabra de control y la cuenta inicial, el contador está preparado. Un flanco de subida de GATE provoca la carga del contador (CR -< CE) y que OUT baje en el próximo pulso del reloj, comenzando el pulso One-Shot de N ciclos de reloj de duración; el contador vuelve a ser recargado si se produce un nuevo flanco de subida de GATE, de ahí que OUT permanezca en bajo durante N pulsos de reloj tras la última vez que suceda esto. El pulso One-Shot puede repetirse sin necesidad de recargar el contador con el mismo valor. GATE no influye directamente en OUT. Si se escribe una nueva cuenta durante un pulso One-Shot, el One-Shot en curso no resulta afectado, a menos, lógicamente, que se produzca un nuevo flanco de subida de GATE: en ese caso, el contador sería recargado con el nuevo valor. MODO 2: Rate Generator (Generador de ritmo). En este modo, el contador funciona como un divisor por N. Es empleado típicamente para las interrupciones de los relojes de tiempo real. OUT estará inicialmente en alto. Cuando el contador se decremente hasta el valor 1, OUT pasará a estado bajo durante un pulso del reloj; tras ello, volverá a subir y el contador se recargará con la cuenta inicial, repitiéndose el proceso. Este modo es, por tanto, periódico, y la misma secuencia se repite indefinidamente. Para una cuenta inicial N, la secuencia se repite cada N ciclos de reloj (CLK). Si GATE=0 la cuenta descendiente se detiene: si GATE es bajado durante un pulso de salida, OUT sube inmediatamente. Un flanco de subida en GATE provoca una recarga del contador con el valor de cuenta inicial en el siguiente pulso del reloj (después, como cabría esperar, OUT bajará tras los N pulsos del reloj correspondientes): GATE puede ser utilizado para sincronizar el contador. Tras escribir la palabra de control y la cuenta inicial, el contador será cargado en el próximo pulso del reloj: OUT bajará N pulsos de reloj después, lo que permite también una sincronización por software. Escribir un nuevo valor de cuenta durante el funcionamiento del contador no afecta a la actual secuencia de cuenta; si se recibe un flanco de subida de GATE antes del final del período el contador se recargará con ese nuevo valor de cuenta inicial tras el próximo pulso del reloj y volverá a comenzar, en caso contrario se recargará con el nuevo valor tras finalizar con normalidad el ciclo en curso. MODO 3: Square Wave Mode (Generador de onda cuadrada). Este modo es empleado normalmente para la generación de una señal de onda cuadrada. Este modo es similar al 2, con la diferencia de que la salida OUT conmuta al transcurrir la mitad de la cuenta: inicialmente está en alto, pero al pasar la mitad de la cuenta pasa a estado bajo hasta que la cuenta finaliza. Este modo es también periódico: la onda resultante para una cuenta inicial N tiene un período de N ciclos. Si GATE=0 la cuenta descendiente se detiene: si GATE es bajado durante un pulso de salida, OUT sube inmediatamente sin esperar ningún CLK. Un flanco de subida en GATE provoca una recarga del contador con el valor de cuenta inicial en el siguiente pulso del reloj: GATE puede ser utilizado para sincronizar el contador. Tras escribir la palabra de control y la cuenta inicial, el contador será cargado en el próximo pulso del reloj: también puede ser sincronizado por software. Escribir un nuevo valor de cuenta durante el funcionamiento del contador no afecta a la actual secuencia de cuenta; si se recibe un flanco de subida de GATE antes del final del medio-período el contador se recargará con ese nuevo valor de cuenta inicial tras el próximo pulso del reloj y volverá a comenzar, en caso contrario se recargará con el nuevo valor tras finalizar con normalidad el medio-ciclo en curso. Para valores de cuenta impares, la duración a nivel alto de OUT será un período de reloj mayor que la duración a nivel bajo. MODO 4: Software Triggered Mode (Pulso Strobe iniciado por software). OUT está en alto al principio; cuando la cuenta inicial expira, OUT baja durante un pulso de reloj y luego vuelve a subir. El proceso se inicia cuando se escribe la cuenta inicial. GATE=0 inhibe el contador y GATE=1 lo habilita; GATE no influye en OUT. Tras escribir la palabra de control y la cuenta inicial, el contador será cargado en el próximo pulso del reloj: como ese pulso no decrementa el contador, para una cuanta inicial N, OUT no bajará hasta N+1 pulsos de CLK. Si se escribe una nueva cuenta durante el proceso, se cargará en el próximo pulso CLK y continuará el proceso de cuenta con la nueva cuenta escrita; si la cuenta es de 2 bytes, al escribir el primero no se altera el funcionamiento del contador hasta que se envíe el segundo. MODO 5: Hardware Triggered Strobe (Pulso Strobe iniciado por hardware). OUT estará en alto al principio: con el flanco de subida de la señal GATE, el contador comienza a decrementar la cuenta. Cuando llega a cero, OUT baja durante un pulso CLK y luego vuelve a subir. Después de escribir la palabra de control y la cuenta inicial, el contador no será cargado hasta el pulso de reloj posterior al flanco de subida de GATE. Este pulso CLK no decrementa el contador: por ello, ante una cuenta inicial N, OUT no bajará hasta que pasen N+1 pulsos de reloj. GATE no afecta a OUT. Si una nueva cuenta inicial es escrita durante el proceso, la actual secuencia del contador no será alterada; si se produce un flanco de subida en GATE antes de que la nueva cuenta sea escrita pero después de que expire la cuenta actual, el contador será cargado con la nueva cuenta en el próximo pulso del reloj. 12.3.2 - EL 8254 EN EL ORDENADOR. Todos los AT y PS/2 llevan instalado un 8254 o algo equivalente; los PC/XT van equipados con un 8253, algo menos versátil; los PS/2 más avanzados tienen un temporizador con un cuarto contador ligado a la interrupción no enmascarable, si bien no lo consideraremos aquí. Todos los contadores van conectados a un reloj que oscila a una frecuencia de 1.193.180 ciclos por segundo (casi 1,2 Mhz). La dirección base en el espacio de E/S del ordenador elegida por IBM cuando diseñó el PC es la 40h. Por tanto, los tres contadores son accedidos, respectivamente, a través de los puertos 40h, 41h y 42h; la palabra de control se envía al puerto 43h. La señal GATE de los contadores 0 y 1 está siempre a 1; en el contador 2 es seleccionable el nivel de la línea GATE a través de bit 0 del puerto E/S 61h. La BIOS programa por defecto el contador 0 en el modo 3 (generador de onda cuadrada) y el contador 1 en el modo 2 (generador de ritmo); el usuario normalmente programa el contador 2 en el modo 2 ó 3. La salida del contador 0 está conectada a IRQ 0 (ligado a la INT 8, que a su vez invoca a INT 1Ch); este contador está programado por defecto con el valor cero (equivalente a 65536), por lo que la cadencia de los pulsos es de 1.193.180/65.536 = 18,2 veces por segundo, valor que determina la precisión del reloj del sistema, ciertamente demasiado baja. Se puede modificar el valor de recarga de este contador en un programa, llamando a la vieja INT 8 cada 1/18,2 segundos para no alterar el funcionamiento normal del ordenador, si bien no es conveniente instalar programas residentes que cambien permanentemente esta especificación: los programas del usuario esperan encontrarse el temporizador a la habitual y poco útil frecuencia de 18,2 interrupciones/segundo. La salida del contador 1 controla el refresco de memoria en todas las máquinas, su valor normal para el divisor es 18; aumentándolo se puede acelerar el funcionamiento del ordenador, con el riesgo -eso sí- de un fallo en la memoria, detectado por los chips de paridad -si los hay-, que provoca generalmente el bloqueo del equipo. De todas maneras, en los PC/XT se puede aumentar entre 19 y 1000 sin demasiados riesgos, acelerándose en ocasiones hasta casi un 10% la velocidad de proceso del equipo. En los AT la ganancia de velocidad es mucho menor y además este es un punto demasiado sensible que conviene no tocar para no correr riesgos, aunque se podría bajar hasta un valor 2-17 para ralentizar el sistema. Sin embargo, no es conveniente alterar esta especificación porque, como se verá más adelante, hay un método para realizar retardos (empleado por la BIOS y algunas aplicaciones) que se vería afectado. El contador 2 puede estar conectado al altavoz del ordenador para producir sonido; alternativamente puede emplearse para temporizar. Es el único contador que queda realmente libre para el usuario, lo que suele dar quebraderos de cabeza a la hora de producir sonido. 12.3.3 - TEMPORIZACIÓN. Los contadores 0 y 1, especialmente este último, ya están ocupados por el sistema; en la práctica el único disponible es el 2. Este contador ha sido conectado con el doble propósito de temporizar y de generar sonido. Para emplearlo en las temporizaciones, es preciso habilitar la puerta GATE activando el bit 0 del puerto 61h; también hay que asegurarse de que la salida del contador no está conectada al altavoz (a menos que se desee música mientras se cronometra) poniendo a 0 el bit 1 del mismo puerto (61h): IN AL,61h AND AL,11111101b contador 2 con el altavoz) OR AL,00000001b contador 2) JMP SHORT $+2 OUT 61h,AL ; borrar bit 1 (conexión ; activar bit 0 (línea GATE del ; estado de espera para E/S El siguiente programa de ejemplo, CRONOS.ASM, incluye dos subrutinas para hacer retardos de alta precisión. La primera de ellas, inic_retardo, hay que llamarla al principio para que programe el contador 2 del temporizador; la rutina retardo se encarga de hacer el retardo que se indique en AX (en unidades de 1/1193180 segundos). ; ; ; ; ; ; ; ; ; ******************************************************************** * * * CRONOS.ASM - Subrutinas para hacer retardos de precisión. * * * * INIT_RETARDO: llamarla al principio del todo. * * RETARDO: Entregar en AX el nº de 1193180-avos de * * segundo que dura el retardo (máximo 65400). * * * ******************************************************************** programa SEGMENT ASSUME CS:programa, DS:programa ORG 100h CALL MOV MOV CALL LOOP INT inic_retardo CX,20 AX,59659 retardo retard 20h inicio: retard: inic_retardo inic_retardo retardo PROC PUSH IN AND OR JMP OUT MOV JMP OUT POP RET ENDP PROC PUSH AX AL,61h AL,11111101b AL,1 SHORT $+2 61h,AL AL,10110100b SHORT $+2 43h,AL AX AX ; 20 retardos ; de 50 milisegundos ; contador 2, modo 2, binario retardando: retardo programa PUSH CLI OUT MOV JMP OUT JMP IN XOR JMP OUT XOR JMP OUT STI JMP MOV MOV OUT JMP IN MOV JMP IN XCHG CMP MOV JBE POP POP RET ENDP ENDS END BX 42h,AL AL,AH SHORT $+2 42h,AL SHORT $+2 AL,61h AL,1 SHORT $+2 61h,AL AL,1 SHORT $+2 61h,AL SHORT $+2 BX,0FFFFh AL,10000000b 43h,AL SHORT $+2 AL,42h AH,AL SHORT $+2 AL,42h AH,AL AX,BX BX,AX retardando BX AX ; parte baja de la cuenta ; parte alta ; bajar GATE ; subir GATE ; enclavamiento ; leer contador ; AX = valor del contador inicio El procedimiento inic_retardo programa el contador 2 en el modo 2, con datos en binario y dejándolo listo para enviar/recibir secuencias de 2 bytes para la cuenta (primero el byte menos significativo y luego el alto). Las instrucciones JMP SHORT $+2 colocadas oportunamente (para saltar a la siguiente línea) evitan que las máquinas AT más antiguas fallen en dos operaciones de E/S consecutivas demasiado rápidas. El procedimiento retardo envía el nuevo valor de cuenta. A continuación baja y vuelve a subir la señal GATE, con objeto de provocar un flanco de subida en esta línea, lo cual provoca que el contador se cargue con el valor recién enviado de manera inmediata (de lo contrario, no se recargaría hasta acabar la cuenta anterior). Finalmente, entramos en un bucle donde se enclava continuamente la cuenta y se espera hasta que acabe. Lo más intuitivo sería comprobar si la cuenta es cero, pero esto es realmente difícil ya que cambia nada menos que ¡más de 1 millón de veces por segundo!. Por tanto, nos limitamos a comprobar si tras dos lecturas consecutivas la segunda es mayor que la primera ...¡no puede ser!... sí, si puede ser, si tras llegar a 0 el contador se ha recargado. De esta manera, el mayor valor admitido en AX al llamar es 65535, aunque no conviene que sea superior a 65400, para permitir que las recargas puedan ser detectadas en la máquina más lenta (un XT a 4.77 y en 135/1193180 segundos dispone de unos 540 ciclos, en los que holgadamente cubre este bucle). A la hora de emplear las rutinas anteriores hay que tener en cuenta dos consideraciones. Por un lado, están diseñadas para hacer pequeños retardos: llamándolas repetidamente, el bucle que hay que hacer (y las interrupciones que se producen durante el proceso) provoca que retarden más de la cuenta. Por ejemplo, en el programa principal, poniendo 1200 en CX en lugar de 20, el retardo debería ser de 60 segundos; sin embargo, comparando este dato con el contador de hora de la BIOS (en una versión ligeramente modificada del programa) resulta ser de casi 60,2 segundos. La segunda consideración está relacionada con las interrupciones: de la manera que está el listado, se puede producir una interrupción en la que algún programa residente utilice el contador 2 del temporizador, alterando el funcionamiento de las rutinas de retardo (por ejemplo, una utilidad de click en el teclado) o incluso provocando un fallo en la misma (si a ésta no le da tiempo a comprobar que ya es la hora): este es un aspecto a tener en cuenta en un caso serio. Se puede, por ejemplo, inhibir todas las interrupciones (o enmascar sólo las más molestas), aunque anular la interrupción del temporizador, la más peligrosa, provocaría un retraso de la hora del ordenador. Para hacer retardos o temporizaciones de más de 50 milisegundos, es más conveniente emplear el contador de hora de la BIOS (variable de 32 bits en 0040h:006Ch) que la INT 8 se encarga de incrementar 18,2 veces cada segundo y de volver a ponerlo a cero cada 24 horas. No es conveniente mirar el valor del contador de hora de la BIOS, sumarle una cantidad y esperar a que alcance dicha cantidad fija: la experiencia demuestra que eso produce a veces cuelgues del ordenador, no solo debido a que suele fallar cuando son las 23:59:59 sino también porque cuando se alcanza el valor esperado, por cualquier motivo (tal como un alargamiento excepcional de la rutina que controla INT 8 ó INT 1Ch debido a algún programa residente) puede que el programa principal no llegue a tiempo para comprobar que ya es la hora... y haya que esperar otras 24 horas a probar suerte. Lo ideal es contar las veces que cambia el contador de hora de la BIOS. Por último, como ejemplo ameno, el siguiente fragmento de programa hace que la hora del ordenador vaya diez veces más rápida -poco recomendable, aunque muy divertido- programando el contador 0 con un valor de cuenta 6553 (frente al 0=65536 habitual), de la siguiente manera: MOV AL,00110110b OUT MOV MOV JMP OUT MOV JMP OUT 43h,AL BX,6553 AL,BL SHORT $+2 40h,AL AL,BH SHORT $+2 40h,AL ; contador 0, operación 11b, datos binarios ; valor de cuenta ; enviar byte bajo ; enviar byte alto Un método genial para hacer retardos y controlar timeouts en AT. Aunque ausente en todos los manuales de referencia técnica y en todos los libros relacionados con la programación de PC, existe un método muy fácil y eficiente para temporizar disponible en todos los ordenadores AT. Pese a no estar documentado, un programa muy usual como es el KEYB del MS-DOS (a partir de la versión 5.0 del sistema) lo utiliza en todos los AT, sin importar el modelo. Por ello, cabe suponer que seguramente los futuros equipos mantendrán la compatibilidad en este aspecto. Sucede que la salida del contador 1 del 8254, encargada del refresco de la memoria, controla de alguna manera desconocida (tal vez a través de un flip-flop) la generación de una onda cuadrada de unos 33 KHz que puede leerse a través del bit 4 del puerto 61h (no se trata de la salida OUT del contador 1: éste está programado en modo 2 y no genera precisamente una onda cuadrada). El contador 1 es programado por la BIOS en todos los PC con una cuenta 18, conmutando el nivel de la salida cada segundo 1193180/18 = 66287,77 veces. Para hacer un determinado retardo basta con contar las veces que el bit cambia de nivel: la función en ensamblador retardo_asm() del programa de ejemplo lo ilustra. Este método es especialmente interesante en los programas residentes que precisen retardos de precisión, para sonido u otras tareas, tales como limitar la duración máxima de una comprobación en un bit de estado a unos milisegundos o microsegundos (control de timeouts); la principal ventaja es que no se modifica en absoluto la configuración de ningún chip que pueda estar empleando el programa principal, empezando por el 8254. Además, no requiere preparación previa alguna. Para los más curiosos, decir que el bit 5 del puerto 61h es la salida OUT del contador 2 del 8254 (la línea OUT del contador 2 del 8253 de los PC/XT también puede consultarse a través del bit 5, pero del puerto 62h). El único inconveniente del método es la alta frecuencia con que cambia el bit: esta misma rutina escrita en C podría no ser suficientemente ágil para detectar todas las transiciones en las máquinas AT más lentas a 6 MHz. A partir de 8 MHz sí puede ser factible, como evidencian las pruebas realizadas, aunque hay que extremar las precauciones para que el código compilado sea lo bastante rápido: utilizar las dos variables registro que realmente soportan los compiladores y huir de la aritmética de 32 bits, como puede observarse en la función retardo_c() del programa de ejemplo. Una mala codificación o compilador podrían hacer inservible el método incluso en una máquina a 16 ó 20 MHz. Para no tener problemas, es mejor emplear la versión en ensamblador, escrita en un C no mucho menos estándar. La macro MICRO() ayuda a seleccionar con más comodidad el retardo, indicándolo en mus, aunque implica una operación en coma flotante que por sí sola añade unos 100 mus de retardo adicionales en un 386-25 sin coprocesador y con las librerías de Borland. Anécdota: Para los más curiosos, decir que los programadores de Microsoft emplean este método en el KEYB en dos ocasiones: para limitar a un tiempo razonable la espera hasta que el registro de entrada del 8042 se llene (15 ms) y, en otra ligera variante, para controlar la duración del pitido de error. Los aficionados al ensamblador pueden comprobarlo personalmente aplicando el comando U del DEBUG sobre el KEYB para desensamblar a partir de los offsets 0E39 y 0D60, respectivamente: en el primer caso, la subrutina sólo es ejecutada en AT; en el segundo, veréis como el KEYB se asegura de que el equipo es un AT comprobando el valor de BP antes de saltar a 0D70 (ejecuta un bucle vacío en las demás máquinas). Esta nueva técnica ha permitido eliminar respecto a anteriores versiones del programa algunos test sobre tipos de ordenadores, cuya finalidad más común era ajustar las constantes de retardo. Son válidos tanto el KEYB del MS-DOS 5.0 castellano como el del MS-DOS 6.0 en inglés o castellano indistintamente (¡las direcciones indicadas coinciden!). También en las BIOS modernas suele haber ejemplos de esta técnica, aunque las direcciones ya no coinciden... /********************************************************************/ /* */ /* Programa de demostración del método de retardo basado en la */ /* monitorización de los ciclos de refresco de memoria del AT. */ /* */ /********************************************************************/ #include <dos.h> #define MICRO(microseg) ((long)(microseg/15.08573727)) void retardo_asm(), retardo_c(); void main() { /* cuatro formas de hacer un mismo retardo de precisión */ retardo_asm retardo_asm retardo_c retardo_c (66267L); (MICRO(1000000L)); (66267L); (MICRO(1000000L)); /* /* /* /* un segundo */ otro segundo (¡más claro!) */ ahora en C */ la otra alternativa */ } void retardo_asm (long cuenta) /* método ensamblador recomendado */ { asm push ax asm push cx asm push dx asm mov cx,word ptr cuenta /* DX:CX = cuenta */ asm mov dx,word ptr [cuenta+2] asm jcxz fin_l /* posible cuenta baja nula */ esp_ref: asm in al,61h asm and al,10h /* aislar bit 5 */ asm cmp al,ah asm je esp_ref /* esperar cambio de nivel */ asm mov ah,al asm loop esp_ref /* completar cuenta baja */ fin_l: asm and dx,dx asm jz fin_ret /* posible cuenta alta nula */ asm dec dx asm jmp esp_ref /* completar cuenta alta */ fin_ret: asm pop dx asm pop cx asm pop ax } void retardo_c (long cuenta) /* método en C no recomendado */ { register a, b; unsigned cuenta_h, cuenta_l; cuenta_h=cuenta >> 16; cuenta_l=cuenta & 0xFFFF; do do { while (a==(b=inportb(0x61) & 0x10)); a=b; } while (cuenta_l--); while (cuenta_h--); } 12.3.4 - SÍNTESIS DE SONIDO. La producción de sonido es uno de los puntos más débiles de los ordenadores compatibles, que sólo superan por muy escaso margen a alguno de los micros legendarios de los 80, si bien las tarjetas de sonido han solventado el problema. Pero aquí nos conformaremos con describir la programación del altavoz. En todos los PCs existen dos métodos diferentes para generar sonido, con la utilización del 8254 o sin él, que veremos por separado. Control directo del altavoz. El altavoz del ordenador está ligado en todas las máquinas al bit 1 del puerto E/S 61h. Si se hace cambiar este bit (manteniéndolo durante cierto tiempo alto y durante cierto tiempo bajo, repitiendo el proceso a gran velocidad) se puede generar una onda cuadrada de sonido. Cuanto más deprisa se realice el proceso, mayor será la frecuencia del sonido. Por fortuna, la baja calidad del altavoz del PC redondea la onda cuadrada y produce un sonido algo más musical de forma involuntaria. No existe, en cualquier caso, control sobre el volumen, que dada la calidad del altavoz también está en función de la frecuencia. Este método de producción de sonido tiene varios inconvenientes. Por un lado, la frecuencia con que se hace vibrar al bit que lo produce, si no se tiene mucho cuidado, está a menudo más o menos ligada a la capacidad de proceso del ordenador: esto significa que el sonido es más grave en máquinas lentas y más agudo en las rápidas. Esto es particularmente grave y evidente cuando las temporizaciones se hacen con bucles de retardo con registros de la CPU: la frecuencia del sonido está totalmente a merced de la velocidad de la máquina en que se produce. Es por ello que el pitido de error que produce el teclado es a menudo distinto de unos ordenadores a otros, aunque tengan el mismo KEYB instalado. Otro gran inconveniente de este método es que las interrupciones, fundamentalmente la del temporizador, producen fuertes interferencias sobre el sonido. Por ello, es normal tenerlas inhibidas, con el consiguiente retraso de la hora. Por último, un tercer gran inconveniente es que la CPU está completamente dedicada a la producción de sonido, sin poder realizar otras tareas mientras tanto. Antes de comenzar a producir el sonido con este método hay que bajar la línea GATE del 8254, ya que cuando está en alto y se activa también el bit 1 del puerto E/S 61h, el temporizador es el encargado de producir el sonido (este es el segundo método, como veremos). Por tanto, es preciso poner primero a cero el bit 0 del mismo puerto (61h): CLI ; evitar posible INT 8, entre otras IN AND JMP OUT AL,61h AL,11111110b SHORT $+2 61h,AL ; estado de espera para E/S ; bajar GATE del contador 2 del 8254 MOV CX,100h PUSH CX IN AL,61h XOR AL,2 JMP SHORT $+2 OUT 61h,AL MOV CX,300 retardo: LOOP retardo POP CX LOOP otro_ciclo STI Control del altavoz por el temporizador. ; 256 vueltas otro_ciclo: ; invertir bit 1 ; constante de retardo El otro método posible consiste en emplear el contador 2 del temporizador conectado al altavoz; así, enviando el período del sonido (1.193.180/frecuencia_en_Hz) a dicho contador (programado en modo 3), éste se encarga de generar el sonido. Esto permite obtener sonidos idénticos en todos los ordenadores. Existe el pequeño problema de que la duración del sonido ha de ser múltiplo de 1/18,2 segundos si se desea utilizar el reloj del sistema para determinarla (un bucle de retardo sería, una vez más, dependiente de la máquina) ya que el contador 2 está ahora ocupado en la producción de sonido y no se puede usar para temporizar (al menos, no sin hacer malabarismos). Alternativamente, se podría evaluar la velocidad de la CPU para ajustar las constantes de retardo o aumentar la velocidad de la interrupción periódica. Para emplear este sistema, primero se prepara el contador 2 para temporizar (poniendo a 1 el bit 0 del puerto 61h) y luego se conecta su salida al altavoz (poniendo a 1 el bit 1 del puerto 61h). Al final, conviene borrar ambos bits de nuevo. Ahora no es preciso inhibir las interrupciones para garantizar la calidad del sonido: MOV AL,10110110b operación 11b, datos binarios OUT 43h,AL MOV AX,2711 LA) = 2711 JMP SHORT $+2 OUT 42h,AL MOV AL,AH JMP SHORT $+2 OUT 42h,AL JMP SHORT $+2 IN AL,61h OR AL,00000011b JMP SHORT $+2 OUT 61h,AL MOV CX,0 demora: LOOP demora por el peor método IN AL,61h AND AL,11111100b JMP SHORT $+2 OUT 61h,AL ; contador 2, modo 3, ; programar contador 2 ; 1.193.180 / 440 Hz (nota ; frecuencia programada ; altavoz sonando ; esperar un cierto tiempo ; altavoz callado Las frecuencias en Hz de las distintas notas musicales están oficialmente definidas y los músicos suelen tenerlas en cuenta a la hora de afinar los instrumentos. La escala cromática temperada, adoptada por la American Standards Asociation en 1936, establece el LA4 como nota de referencia en 440 Hz. En general, una vez conocidas las frecuencias de las notas de una octava, las de la octava siguiente o anterior se obtienen multiplicando y dividiendo por dos, respectivamente. La fórmula de abajo permite obtener las frecuencias de las notas asignándolas un número (a partir de 6 y hasta 88; el LA de 440 Hz es la nota 49) con una precisión razonable, máxime teniendo en cuenta que van a ir a parar al altavoz del PC. Tal curiosa relación se verifica debido a que la respuesta del oído humano es logarítmica, lo que ha permitido reducir a simples matemáticas el viejo saber milenario de los músicos. http://atc.ugr.es/docencia/udigital/1203.html 2.8.1 Reloj de sistema. Acceso a memoria y el reloj del sistema El acceso a memoria es probablemente la actividad más común de un CPU, se trata en definitiva de una operación sincronizada al reloj del sistema, esto es, la lectura o escritura no puede ser más rápida que un ciclo de reloj, de hecho, en muchos sistemas 80x86 el acceso a memoria toma varios ciclos de reloj. El tiempo de acceso a memoria es el número de ciclos de reloj que el sistema necesita para acceder a una ubicación de memoria, este es un valor importante ya que a mayor número de ciclos menor desempeño. El tiempo de acceso a memoria es la cantidad de tiempo que transcurre desde que se solicita una operación (sea de lectura ó escritura) y el tiempo en que la memoria completa dicha operación. En procesadores de 5 Mhz (80x88, 80x86) el tiempo de acceso a memoria es de aproximadamente 800 ns. (nanosegundos), en cambio, un procesador de 50 Mhz (80x486) el tiempo es de aproximadamente 20 ns. El tiempo de acceso a memoria en el procesador 80x486 es casi 40 veces más rápido que en el caso del procesador 80x86 porque éste último consume más ciclos de reloj para el acceso a memoria además del incremento en la velocidad de reloj. Los dispositivos de memoria presentan varias características pero las principales son su capacidad de almacenamiento y el tiempo de acceso. Una memoria de acceso aleatorio (RAM) típica tiene una capacidad de 16 ó más megabytes y un tiempo de acceso de 70 nanosegundos ó menos, con estos datos seguramente se estará preguntando cómo es posible que éstas memorias relativamente lentas trabajan en procesadores mucho más rápidos. La respuesta son los estados de espera. Un estado de espera es una señal que se coloca en el bus de control por parte del dispositivo de memoria para detener temporalmente el trabajo realizado por el CPU, como consecuencia utilizar uno o más estados de espera tiene el mismo efecto que reducir proporcionalmente la velocidad de reloj, obviamente introducir estados de espera no es una opción deseable por la reducción en el desempeño del sistema. Los diseñadores de hardware han encontrado un mecanismo que tiene un efecto similar a introducir estados de espera pero sin afectar notablemente el rendimiento de la computadora, a este mecanismo se le llama memoria cache ( se pronuncia "cash"). Una memoria cache es un dispositivo sin estados de espera que se encuentra construida como parte integral del CPU, físicamente se encuentra entre el CPU y los módulos de memoria RAM, su función es evitar la generación de estados de espera por parte de los módulos de memoria RAM y así aprovechar al máximo el rendimiento esperado por el CPU, sin embargo la memoria cache no es un dispositivo perfecto pues hay ocasiones en que no es posible colocar en memoria cache los datos que requiere el programa para ejecutarse forzando al sistema a leer dichos datos directamente de los módulos de memoria RAM y por lo tanto generando estados de espera, cuando ocurre éste fenómeno se le llama pérdida cache (cache miss), cuando tienen éxito las operaciones en memoria cache se le llama éxito cache (cache hit). Por lo general el radio entre éxito y pérdida en memoria cache está entre 85 y 90%. Este rendimiento disminuye al aumentar la cantidad de memoria cache y por esta razón la memoria cache es relativamente pequeña, sus valores de almacenamiento oscilan entre 256 y 512 Kb. http://www.modelo.edu.mx/univ/virtech/prograc/cbyn03.htm Relojes Los relojes son esenciales para el buen funcionamiento de cualquier sistema porque juegan un papel decisivo en la sincronización de procesos, en la calendarización de trabajos por lote y para la asignación de turnos de ejecución entre otras tareas relevantes. Generalmente se cuenta con dos relojes en el sistema: uno que lleva la hora y fecha del sistema y que oscila entre 50 y 60 veces por segundo y el reloj que oscila entre 5 y 100 millones de veces por segundo y que se encarga de enviar interrupciones al CPU de manera periódica. El reloj de mayor frecuencia sirve para controlar el tiempo de ejecución de los procesos, para despertar los procesos que están 'durmiendo' y para lanzar o iniciar procesos que fueron calendarizados. Para mantener la hora y fecha del sistema generalmente se usa un registro alimentado por una pila de alta duración que almacena estos datos y que se programan de fábrica por primera vez. Así, aunque se suspenda la energía la fecha permanece. Para lanzar procesos (chequeo de tiempo ocioso de un dispositivo, terminación del time slice de un proceso, etc), se almacena un valor en un registro (valor QUANTUM) el cual se decrementa con cada ciclo del reloj, y cuando llega a cero se dispara un proceso que ejecutará las operaciones necesarias (escoger un nuevo proceso en ejecución, verificar el funcionamiento del motor del disco flexible, hacer eco de un caracter del teclado, etc). http://www.tau.org.ar/base/lara.pue.udlap.mx/sistoper/capitulo6.html 2.8.2 Reset del sistema. 2.8.3 Estados de espera. 2.9 Interrupciones de Hardware. Uso de interrupciones Un computador debe disponer de los elementos suficientes para que el programador tenga un control total sobre todo lo que ocurre durante la ejecución de su programa. La llegada de una interrupción provoca que la CPU suspenda la ejecución de un programa e inicie la de otro (rutina de servicio de interrupción). Como las interrupciones pueden producirse en cualquier momento, es muy probable que se altere la secuencia de sucesos que el programador había previsto inicialmente. Es por ello que las interrupciones deber controlarse cuidadosamente. De esta forma, podemos resumir todas las etapas seguidas ante una interrupción en un sistema dotado de vectorización. Estos pasos son los siguientes: 1.- El dispositivo envía la solicitud de interrupción mediante la línea INTR. 2.- El procesador termina la ejecución de la instrucción en curso y analiza la línea de petición de interrupción, INTR. Si esta línea no está activada continuará normalmente con la ejecución de la siguiente instrucción, en caso contrario se pasa a la etapa siguiente. 3.- La CPU reconoce la interrupción, para informar al dispositivo de ello, activa la línea de reconocimiento de interrupción, INTA. 4.- El dispositivo que reciba la señal INTA envía el código de interrupción por el bus de datos. 5.- La CPU calcula la dirección de memoria donde se encuentra la rutina de servicio de interrupción (vector de interrupción). 6.- El estado del procesador, y en particular el contador de programa, se salva en la pila de la misma forma que en una llamada a procedimiento. 7.- La dirección de la rutina de servicio de interrupción se carga en el contador de programa, con lo que se pasa el control a la citada rutina. 8.- La ejecución continúa hasta que el procesador encuentre la instrucción de retorno de interrupción. 9.- Cuando se encuentre la instrucción de retorno de interrupción se restaura el estado del procesador, en especial el contador de programa, y se devuelve el control al programa interrumpido. Normalmente la primera instrucción de la rutina de servicio tendrá como fin desactivar las interrupciones para impedir el anidamiento, por otra parte, antes de devolver el control al programa interrumpido se volverán a habilitar si es necesario. http://www.mailxmail.com/curso/informatica/arquitecturaordenadores/ca pitulo17.htm Hay cuatro categorías principales de interrupciones: 1) En primer lugar, hay interrupciones generadas por la circuitería del ordenador en respuesta a algún acontecimiento, tal como la pulsación de una tecla. Estas interrupciones están manejadas por el chip controlador de interrupciones (el 8259, también conocido como PIC), que l as prioriza antes de enviarlas a la CPU para que actúe. A estas interrupciones se les suele llamar interrupciones hardware. 2) En segundo lugar, hay interrupciones que son generadas por la CPU como resultado de algún suceso inusual producido por el programa como, por ejemplo, una división por cero. A estas interrupciones solemos referirnos como excepciones. 3) En tercer lugar, hay interrupciones generadas deliberadamente por los programas para invocar, por ejemplo, las llamadas al sistema. Estas interrupciones son llamadas interrupciones software. 4) Por último, hay también un tipo especial de interrupción, llamada interrupción no enmascarable (NMI), que se utiliza para solicitar la atención inmediata de la CPU. A menudo indica que se ha producido una emergencia, como, por ejemplo, una caída de voltaje, o un error de paridad de memoria. Cuando se envía una NMI la CPU la atiende antes que al resto de las interrupciones, por supuesto. Los programas en ensamblador pueden desactivar, o lo que es lo mismo enmascarar, las interrupciones hardware. Por esta razón, también se las llama enmascarables; el resto de las interrupciones que interceptan errores especiales, como la división por cero, no se pueden enmascarar. Se pueden aducir dos razones para desactivar las interrupciones hardware: a) Cuando se necesita ejecutar un fragmento de código especialmente crítico antes de que suceda ninguna otra tarea en el ordenador, interesa que todas las interrupciones queden bloqueadas. Por ejemplo, cuando se quiere hacer algún cambio en la tabla de vectores de interrupción. b) A veces interesa enmascarar ciertas interrupciones hardware cuando éstas pueden interferir en alguna actividad cuya dependencia temporal sea crítica. Por ejemplo, si se está ejecutando una rut ina de E/S cuya temporización tiene que estar exquisitamente controlada, uno no puede permitirse el lujo de esperar "aparcado" mientras se ejecuta una lenta interrupción de disco. En el primer caso, se ha de tener en cuenta que en último término, la ejecución de todas las interrupciones descansa sobre el flag de interrupción (bit 9) del registro de estado (flags de estado) del procesador. Cuando este bit toma el valor 0, acepta cualquier solicitud de interrupción que permita el registro de máscaras de int errupción. Cuando es uno, no se permiten interrupciones hardware. Para hacer que este flag tome el valor cero, desactivando así las interrupciones, se utiliza la instrucción CLI. Para volver a poner el flag a uno, autorizando de nuevo las interrupciones, se utiliza la instrucción STI. Para gestionar las interrupciones hardware, todos los PC's utilizan el llamado chip controlador de interrupciones programable (PIC) Intel 8259. Existe la posibilidad de que aparezca más de una solicitud de interrupción simultáneamente, por lo que el chip establece una jerarquía de prioridades. Existen ocho niveles de prioridad, excepto en el AT, que tiene dieciséis, a los que se refieren con las abreviaturas IRQ0 a IRQ7 ( IRQ0 a IRQ16 en AT), que corresponden a las siglas inglesas de solicitud de interrupción (interrupt request). La mayor prioridad se consigue en el nivel 0. En el caso del AT, los ocho niveles de prioridad extra se gestionan con un segundo chip 8259 denominado slave, en contraposición al primer chip 8259 denominado master; esta segunda serie de niveles tiene una prioridad comprendida entre IRQ2 e IRQ3. En la siguiente tabla se muestra como se asignan los niveles de interrupción a los distintos periféricos: ¡Error! Marcador no definido. El 8259 posee tres registros de un byte que controlan y gestionan las ocho (o dieciséis) líneas de interrupción hardware, pero a nosotros sólo nos interesa el registro de máscara de interrupciones (IMR). El 8259 emplea este registro para averiguar si una interrupción de un determinado nivel está permitida en cualquier momento. Para desactivar interrupciones hardware concretas, se envía un patrón de bits al puerto 21h (INT_CTLMASK), que es la dirección del registro de máscaras de interrupción (IMR). El registro de máscara del segundo chip 8259 del AT se sitúa en el puerto A1h (INT2_CTLMASK). En este patrón de bits, se ponen a uno los bits que corresponden a los números de interrupción que se desea enmascarar. 2.9.1 Enmascarable. Interrupción enmascarable: La solicitud de interrupción enmascarable se realiza a través de la entrada INTR (Interrupt Request). INTR solicita una interrupción de “tipo” variable que se determina en el ciclo de reconocimiento. INTR, es una entrada activa por nivel alto, que se muestrea durante el último ciclo de reloj de cada instrucción (hay instrucciones especiales en que esto no se cumple, ver nota). En ese momento se determina si el micro debe continuar ejecutando la próxima instrucción o debe ingresar en el ciclo de reconocimiento de interrupción. Para que el pedido sea reconocido, INTR debe permanecer en alto (al menos) durante el último ciclo de reloj de la ejecución de la instrucción en curso. Luego INTR puede bajar en cualquier momento después del flanco descendente del primer pulso de INTA, dentro de la secuencia de reconocimiento. Esta línea puede “enmascararse” a través de un bit interno del micro (IF: interrupt enable flag bit) que se ubica en el Flag Register. Si la máscara se encuentra activada (IF=0) la línea es ignorada. Si por el contrario IF=1, el pedido es aceptado y se dará inicio al ciclo de INTA. La máscara permite condicionar la atención de las solicitudes de interrupción que ingresan a través de INTR. Esto es fundamental para permitir o no el anidamiento de rutinas de atención de interrupciones de esta clase. Es importante ver que, cuando comienza la ejecución de la rutina de atención de la interrupción, IF debe pasar a 0 al menos hasta que la línea INTR pase a bajo. Si esto no fuera así, solo llegaría a ejecutarse la primera instrucción de esta rutina y el micro comenzaría nuevamente con otro ciclo de reconocimiento. Conceptualmente: las interrupciones activas por nivel deben ser enmascarables. Nota: Una excepción es la instrucción WAIT que espera un nivel bajo en la entrada TEST para continuar con el programa. Esta instrucción muestrea continuamente la entrada de interrupciones “durante” su ejecución, permitiendo la atención de interrupciones en el interior de la “espera”. Cuando finaliza la rutina de atención, el micro retorna a ejecutar la instrucción WAIT. Interrupción enmascarable significa que, bajo control del software, el procesador puede aceptar o ignorar (enmascarar) la señal de interrupción. Para ello se envía una señal a la patilla INTR , y el procesador la atiende o la ignora en función del contenido de un bit (IF) en un registro (FLAGS) que puede estar habilitado o deshabilitado ( H3.2). En el primer caso, cuando se recibe la señal, el procesador concluye la instrucción que estuviese en proceso y a continuación responde con una combinación de señales en algunas de sus patillas componiendo una sucesión de dos señales INTA ("Interrupt Acknowledge" H3.2.1). La primera señal es simplemente un aviso; la segunda es una petición para que el PIC coloque en el bus de datos un Byte con el número de interrupción, de forma que el procesador pueda localizar el servicio solicitado. El valor recibido (0-255) es multiplicado por 4 para calcular la dirección del vector correspondiente en la tabla de vectores de interrupción, lo que se realiza mediante un desplazamiento binario de dos posiciones a la izquierda ( 4.9.3). A continuación, el procesador salva en la pila los valores del registro de estado ( H3.2), del contador de programa (PC) y del segmento de código (CS); deshabilita el bit IF del registro de estado, para que la interrupción no pueda ser molestada con una nueva interrupción enmascarable hasta que sea específicamente permitido, y finalmente ejecuta el servicio. La penúltima secuencia de la rutina de servicio es enviar una señal de que la interrupción ha terminado (EOI) para que el PIC pueda seguir enviando interrupciones. A continuación debe restaurar los registros a su estado inicial (existente antes de que se produjera la interrupción). La señal de terminación del servicio de la interrupción EOI ("End of interrupt") es la siguiente secuencia: MOV DX, PIC0 MOV AL, EOI OUT DX, AL La primera instrucción mueve el contenido PIC0 al registro DX (PIC0 es el nemónico de la dirección más baja de puerto A0 = 0). La segunda mueve el valor EOI (nemónico del valor 20h) al registro AL. La tercera es una sentencia de escritura a puerto; escribe el contenido del registro AL (el valor EOI puesto en la sentencia anterior) en el puerto señalado por el contenido del registro DX (establecido en la primera instrucción). Para facilitar el manejo de interrupciones, el 8088 y sucesores disponen de algunas instrucciones específicas: IRET Retorno de interrupción ("Interrupt Return"). Recupera de la pila el contador de programa PC; el segmento de código CS (lo que supone devolver el programa al punto de ejecución original), y el registro de estado FLAGS (lo que supone devolver las interrupciones enmascarables al estado inicial). CLI Limpiar la interrupción ("Clear Interrupt"); pone a cero el registro IF, deshabilitando las interrupciones enmascarables. STI Es la instrucción opuesta ("Set Interrupt") pone a 1 el registro IF habilitando las interrupciones enmascarables. La idea importante a resaltar aquí, es que el PIC asocia un número entre 0 y 255 a cada petición. Este número, que se conoce como número de interrupción, no debe ser confundido con el número de línea IRQ's que realizó la solicitud. El número de interrupción sirve para identificar el servicio mediante la tabla IDT . Una vez ejecutado el servicio, deben dejarse las cosas como estaban para que el programa original pueda continuar su ejecución. http://www.zator.com/Hardware/H2_4.htm 2.9.2 No-enmascarable. Interrupción no enmascarable La solicitud de interrupción no enmascarable se realiza a través de la entrada NMI (Non maskable Interrupt). NMI solicita una interrupción de “tipo” fijo igual a 2, por lo tanto no es necesario que se realice un ciclo de INTA. NMI es una entrada asincrónica activa por flanco ascendente. El flanco ascendente en la entrada de NMI, se lachea en el interior del micro hasta que la instrucción en curso finaliza. No es enmascarable por lo que su atención es inevitable. Esto hace que, independiente de la estructura que se monte para las interrupciones enmascarables, puede pensarse que, NMI es siempre la interrupción más prioritaria ya que puede interrumpir la ejecución de cualquier servicio generado por INTR. Para que el pedido se haga efectivo, la entrada debe permanecer en alto, al menos dos ciclos de reloj, hasta que el micro la reconozca. La línea puede bajar antes, durante o después del servicio de NMI. Para que el micro vuelva a reconocer otro pedido, la línea debe haber permanecido en bajo al menos dos ciclos de reloj después de haber bajado. Debe tenerse especial cuidado en que no haya flancos espurios en el circuito de NMI que puedan generar interrupciones indeseables. NMI, se usa para situaciones graves que requieran atención incondicional del micro. Un uso típico de NMI, es la ejecución de la rutina para caídas de alimentación del sistema o sistemas de watch - dog. Es importante ver que, como NMI es no enmascarable, no podría ser activa por nivel, ya que sería imposible impedir que se repita el comienzo de la atención cuando se ejecuta la primera instrucción de la rutina de servicio. Conceptualmente: las interrupciones no enmascarables deben ser activas por flanco. Interrupción no enmascarable significa que la interrupción no puede ser deshabilitada por software. Este tipo de interrupciones ocurren cuando se recibe una señal en la patilla NMI ("Nonmaskable Interrupt" §5 ) del procesador. Se reservan para casos en que es crítica la respuesta, por ejemplo que se detecte un error de paridad en la memoria. Además son de prioridad más alta que las enmascarables. Nota: La única forma de enmascarar estas interrupciones es a través de circuitos externos al procesador, por ejemplo a nivel del PIC. Cuando el procesador recibe una de estas instrucciones no se genera ningún ciclo de reconocimiento de la instrucción (INTA), y el procesador le asigna un 2 como número de excepción. http://www.zator.com/Hardware/H2_4.htm Ciclo de reconocimiento de interrupción: Este ciclo, también llamado ciclo de INTA, se utiliza para detectar el “tipo” de interrupción que desea ejecutarse como resultado de la solicitud que ingresa por INTR. Esta secuencia de reconocimiento se genera solo como respuesta a una interrupción proveniente de INTR. En realidad el ciclo de reconocimiento está formado por dos ciclos de INTA, cada uno de ellos es muy similar a un ciclo de lectura. En el segundo ciclo de INTA, se lee un byte del bus de datos que identifica el “tipo” de la interrupción. Por tanto, INTA (Interrupt Aknowledge) es la salida de reconocimiento de interrupción y se usa como pulso de lectura del “tipo” en el ciclo de INTA. Es activa en bajo y pasa a este valor durante T2, T3 (y Tw) de los ciclos de reconocimiento de interrupción. Su objetivo es avisar al dispositivo solicitante que su pedido de interrupción ha sido aceptado y que debe notificar al micro cuál es el “tipo” de interrupción que pide. Segundo ciclo de INTA detallado: Nota: Durante el ambos ciclos de INTA, el bus AD está flotante. Atención de Interrupción: Previo al comienzo de la ejecución de la rutina de servicio de interrupción, y como parte de la respuesta a cualquier interrupción (o pseudo interrupción) el micro realiza una serie de tareas que forman parte de la secuencia de ejecución de una interrupción. En los casos en donde exista (INTR), la secuencia de ejecución se realiza luego de la de reconocimiento. Las acciones que forman esta secuencia son: � PUSH del registro de banderas, el CS y el IP en la pila. � Reset de los bits de trampa y de máscara para que , al menos por default, la rutina de ejecución de interrupción no sea ejecutada en modo paso a paso, ni sea interrumpida por interrupciones enmascarables (ver nota). � Carga de los nuevos CS e IP (provenientes de la IVT). Luego de estas acciones, se ejecuta la primera instrucción de la rutina de atención. Nota: Estos dos bits pueden se re habilitados en el interior de la rutina de servicio de la interrupción, permitiendo la ejecución paso a paso de esa rutina (ojo no se puede hacer en la ejecución de la rutina de atención de paso a paso) o permitir que otra interrupción enmascarable sea atendida durante la ejecución de una interrupción dada (anidamiento). En resumen: Cada vez que el micro finaliza la ejecución de una instrucción, comprueba (en este orden): � Si está activa la trampa (TF=1) � Si hubo pedido NMI � Si hay overflow en el segmento del coprocesador � Si hay INTR � Si la próxima es una instrucción INT Si se da alguna de estas condiciones, entonces se produce la siguiente secuencia: � Si hay un INTR, se realiza la secuencia de reconocimiento de interrupción. � Se salva el contenido del registro de banderas en pila � Se desactivan la máscara de interrupción IF y el TF � Se salva el contenido del CS en la pila � Se salva el contenido del IP en la pila � Se recupera el contenido del vector de interrupción y se carga el CS y el IP en con su contenido de manera que el micro continúe ejecutando donde ellos indiquen. Tanto en la INTR como en la NMI, los tiempos de demora entre la activación del pedido y la ejecución de la primera instrucción de la rutina de servicio, dependen de la instrucción que se esté ejecutando en el momento de esa activación. Los tiempos que si pueden determinarse en forma exacta son los de demora entre el final de la instrucción en curso y el comienzo de la primera instrucción de la rutina de servicio. Por ejemplo, en el caso de una INTR, el retardo desde el final de la instrucción durante la cual ocurrió la interrupción, hasta el comienzo de la ejecución de la primera instrucción de la rutina de atención, es de 61 ciclos de reloj. En las interrupciones generadas por soft no hay ciclos de INTA. Esto reduce el 2.10 Acceso Directo a memoria. Acceso Directo a Memoria (DMA) El acceso directo a memoria se inventó con el propósito de liberar al CPU de la carga de atender a algunos controladores de dispositivos. Para comprender su funcionamiento vale la pena revisar cómo trabaja un controlador sin DMA. Cuando un proceso requiere algunos bloques de un dispositivo, se envia una señal al controlador con la dirección del bloque deseado. El controlador lo recibe a través del 'bus' y el proceso puede estar esperando la respuesta (trabajo síncrono) o puede estar haciendo otra cosa (trabajo asíncrono). El controlador recibe la señal y lee la dirección del bus. Envía a su vez una o varias señales al dispositivo mecánico (si es que lo hay) y espera los datos. Cuando los recibe los escribe en un buffer local y envía una señal al CPU indicándole que los datos están listos. El CPU recibe esta interrupción y comienza a leer byte por byte o palabra por palabra los datos del buffer del controlador (a través del device driver) hasta terminar la operación. Como se ve, el CPU gasta varios ciclos en leer los datos deseados. El DMA soluciona ese problema de la manera siguiente. Cuando un proceso requiere uno o varios bloques de datos, el CPU envía al controlador la petición junto con el número de bytes deseados y la dirección de en dónde quiere que se almacenen de regreso. El DMA actuará como un 'cpu secundario' [Stal92] en cuanto a que tiene el poder de tomar el control del 'bus' e indicarle al verdadero CPU que espere. Cuando el controlador tiene listos los datos, el DMA 'escucha' si el 'bus' está libre aprovechando esos ciclos para ir leyendo los datos del buffer del controlador e ir escribiéndolos en el área de memoria que el CPU le indicó. Cuando todos los datos fueron escritos, se le envía una interrupción al CPU para que use los datos. El ahorro con el DMA es que el CPU ya no es interrumpido (aunque sí puede ser retardado por el DMA) salvando así el 'cambio de contexto' y además el DMA aprovechará aquellos ciclos en que el 'bus' no fue usado por el CPU. El hecho de que los controladores necesiten buffers internos se debe a que conforme ellos reciban datos de los dispositivos que controlan, los deben poder almacenar temporalmente, ya que el CPU no está listo en todo momento para leerlos. http://www.tau.org.ar/base/lara.pue.udlap.mx/sistoper/capitulo6.html Acceso Directo a Memoria (DMA) Muchos controladores, especialmente los correspondientes a dispositivos de bloque, permiten el DMA. Si se lee el disco sin DMA: El controlador lee en serie el bloque (uno o más sectores) de la unidad: o La lectura es bit por bit. o Los bits del bloque se graban en el buffer interno del controlador. Se calcula la suma de verificación para corroborar que no existen errores de lectura. El controlador provoca una interrupción. El S. O. lee el bloque del disco por medio del buffer del controlador: o La lectura es por byte o palabra a la vez. o En cada iteración de este ciclo se lee un byte o una palabra del registro del controlador y se almacena en memoria. Se desperdicia tiempo de la cpu. DMA se ideó para liberar a la cpu de este trabajo de bajo nivel. La cpu le proporciona al controlador: La dirección del bloque en el disco. La dirección en memoria adonde debe ir el bloque. El número de bytes por transferir. Luego de que el controlador leyó todo el bloque del dispositivo a su buffer y de que corroboró la suma de verificación: Copia el primer byte o palabra a la memoria principal. Lo hace en la dirección especificada por medio de la dirección de memoria de DMA. Incrementa la dirección DMA y decrementa el contador DMA en el número de bytes que acaba de transferir. Se repite este proceso hasta que el contador se anula y por lo tanto el controlador provoca una interrupción. Al iniciar su ejecución el S. O. luego de la interrupción provocada, no debe copiar el bloque en la memoria, porque ya se encuentra ahí (ver Figura 5.1 [23, Tanenbaum]). El controlador necesita un buffer interno porque una vez iniciada una transferencia del disco: Los bits siguen llegando del disco constantemente. No interesa si el controlador está listo o no para recibirlos. Si el controlador intentara escribir los datos en la memoria directamente: o Tendría que recurrir al bus del sistema para c / u de las palabras (o bytes) transferidas. o El bus podría estar ocupado por otro dispositivo y el controlador debería esperar. o Si la siguiente palabra llegara antes de que la anterior hubiera sido almacenada, el controlador la tendría que almacenar en alguna parte. Si el bloque se guarda en un buffer interno: El bus no se necesita sino hasta que el DMA comienza. La transferencia DMA a la memoria ya no es un aspecto crítico del tiempo. Los controladores simples no pueden atender la e / s simultánea: Mientras transfieren a la memoria, el sector que pasa debajo de la cabeza del disco se pierde; es decir que el bloque siguiente al recién leído se pierde. La lectura de una pista completa se hará en dos rotaciones completas, una para los bloques pares y otra para los impares. Si el tiempo necesario para una transferencia de un bloque del controlador a la memoria por medio del bus es mayor que el tiempo necesario para leer un bloque del disco: o Sería necesario leer un bloque y luego saltar dos o más bloques. o El salto de bloques: Se ejecuta para darle tiempo al controlador para la transferencia de los datos a la memoria. Se llama separación. Al formatear el disco, los bloques se numeran tomando en cuenta el factor de separación (ver Figura 5.2 [23, Tanenbaum]). Esto permite al S. O.: Leer los bloques con numeración consecutiva. Conservar la máxima velocidad posible del hardware. http://exa.unne.edu.ar/depar/areas/informatica/SistemasOperativos/SO5.htm 2.10.1 2.10.2 2.10.3 Sistema de video. Sistema de discos. Otras aplicaciones. Unidad 3. Selección de componentes para ensamble de equipos de cómputo. 3.1 Chip Set. El "chipset" es el conjunto (set) de chips que se encargan de controlar determinadas funciones del ordenador, como la forma en que interacciona el microprocesador con la memoria o la caché, o el control de los puertos y slots ISA, PCI, AGP, USB... Antiguamente estas funciones eran relativamente sencillas de realizar y el chipset apenas influía en el rendimiento del ordenador, por lo que el chipset era el último elemento al que se concedía importancia a la hora de comprar una placa base, si es que alguien se molestaba siquiera en informarse sobre la naturaleza del mismo. Pero los nuevos y muy complejos micros, junto con un muy amplio abanico de tecnologías en materia de memorias, caché y periféricos que aparecen y desaparecen casi de mes en mes, han hecho que la importancia del chipset crezca enormemente. De la calidad y características del chipset dependerán: Obtener o no el máximo rendimiento del microprocesador. Las posibilidades de actualización del ordenador. El uso de ciertas tecnologías más avanzadas de memorias y periféricos. Debe destacarse el hecho de que el uso de un buen chipset no implica que la placa base en conjunto sea de calidad. Como ejemplo, muchas placas con chipsets que darían soporte a enormes cantidades de memoria, 512 MB o más, no incluyen zócalos de memoria para más de 128 ó 256. O bien el caso de los puertos USB, cuyo soporte está previsto en la casi totalidad de los chipsets de los últimos dos años pero que hasta fecha reciente no han tenido los conectores necesarios en las placas base. Trataremos sólo los chipsets para Pentium y superior, ya que el chipset de un 486 o inferior no es de mayor importancia (dentro de un límite razonable) por estar en general todos en un nivel similar de prestaciones y rendimiento, además de totalmente descatalogados. Tampoco trataremos todas las marcas, sino sólo las más conocidas o de más interés; de cualquier forma, muchas veces se encuentran chipsets aparentemente desconocidos que no son sino chipsets VIA, ALI o SIS bajo otra marca. Chipsets para Pentium y Pentium MMX De Intel (Tritones) Fueron la primera (y muy exitosa) incursión de Intel en el mundo de los chipsets, mundo en el cual ha pasado de no fabricar prácticamente ninguno a tener un monopolio casi total, que es la forma en que a Intel le gusta hacer los negocios. Esto no resulta extraño, ya que nadie mejor que Intel conoce cómo sacar partido a sus microprocesadores; además, el resto de fabricantes dependen de la información técnica que les suministra Intel, que lo hace cuando y como quiere. 430 FX: el Tritón clásico, de apabullante éxito. Un chipset bastante apropiado para los Pentium "normales" (no MMX) con memorias tipo EDO. Hoy en día desfasado y descatalogado. 430 HX: el Tritón II, la opción profesional del anterior. Mucho más rápido y con soporte para placas duales (con 2 micros). Algo anticuado pero muy bueno. 430 VX: ¿el Tritón III? Más bien el 2.5; algo más lento que el HX, pero con soporte para memoria SDRAM. Se puede decir que es la revisión del FX, o bien que se sacó para que la gente no se asustara del precio del HX... 430 TX: el último chipset de Intel para placas Pentium (placas socket 7). Si queremos usar micros Intel y aplicaciones que se contenten con placas con 1 Pentium, la opción a elegir. Soporte MMX, SDRAM, UltraDMA... Un problema: si se le pone más de 64 MB de RAM, la caché deja de actuar; aunque más de 64 MB es mucha RAM. Chipsets de Intel para Pentium y Pentium MMX Concepto 430 FX 430 HX 430 VX 430 TX Número CPUs máx. 1 2 1 1 RAM máxima 128 MB 512 MB 128 MB 256 MB Tipos de RAM RAM cacheable máxima FPM, EDO 64 MB FPM, EDO, SDRAM 512 MB (según placa, no todas) 64 MB Caché L2 máxima 512 KB Velocidad bus máx. 66 MHz Puertos adicionales USB UltraDMA y USB Comentarios Desfasado No adecuados para micros no Intel de nueva generación (no soportan AGP ni bus 100 MHz) Lo más destacable de estos chipsets, su buen rendimiento, especialmente con micros Intel. Lo peor, su escaso soporte para micros no Intel, que en el campo socket 7 tienen desarrollos superiores a los de Intel, como los AMD K6 (normal y K6-2) o los Cyrix-IBM 6x86MX (M2), en general más avanzados que los Pentium y Pentium MMX. De VIA (Apollos) Unos chipsets bastante buenos, se caracterizan por tener soporte para casi todo lo imaginable (memorias SDRAM o BEDO, UltraDMA, USB...); su pelea está en la gama del HX o TX, aunque suelen ser algo más lentos que éstos al equiparlos con micros Intel, no así con micros de AMD o Cyrix-IBM. Chipsets de VIA para Pentium y Pentium MMX Concepto VP2 VPX VP3 Número CPUs máx. 1 RAM máxima Tipos de RAM RAM cacheable máxima MVP3 512 MB 1 GB FPM, EDO, BEDO, SDRAM FPM, EDO, SDRAM 512 MB (según placa, no todas) Caché L2 máxima 512 MB ó 1 GB (según placa, no todas) 2048 KB Velocidad bus máx. 66 MHz 75 MHz 66 MHz 100 MHz Puertos adicionales UltraDMA y USB UltraDMA, USB y AGP Comentarios No adecuados para micros no Intel de nueva generación (no soportan AGP ni bus 100 MHz) Sin bus a 100 MHz Muy moderno, con todos los avances Lo bueno de las placas con chipsets VIA es que siguen en el mercado socket 7, por lo que tienen soporte para todas las nuevas tecnologías como el AGP o los buses a 100 MHz, además de que su calidad suele ser intermedia-alta. En las placas con chipsets Intel hay un abanico muy amplio entre placas muy buenas y otras francamente malas, además de estar ya desfasadas (ningún chipset Intel para socket 7 soporta AGP, por ejemplo). El último chipset de VIA para socket 7, el MPV3, ofrece todas las prestaciones del BX de Intel (excepto soporte para placas duales), configurando lo que se denomina una placa Super 7 (con AGP y bus a 100 MHz), que con un micro como el nuevo AMD K6-2 no tiene nada que envidiar a un equipo con Pentium II. De ALI Muy buenos chipsets, tienen soluciones tan avanzadas como el chipset para placas Super 7 "Aladdin V", que como el MPV3 de VIA resulta equiparable a todos los efectos al BX de Intel para placas Pentium II (bus a 100 MHz, AGP...); una fantástica elección para micros como el AMD K6-2. Chipsets de ALI para Pentium y Pentium MMX Concepto M1521/M1523 (Aladdin III) M1531/M15X3 (Aladdin IV-IV+) Número CPUs máx. M1541/M1543 (Aladdin V) 1 RAM máxima 1 GB Tipos de RAM FPM, EDO, SDRAM RAM cacheable máxima FPM, EDO, SDRAM, PC100 512 MB (según placa, no todas) Caché L2 máxima 1 MB Velocidad bus máx. 75 MHz 83,3 MHz 100 MHz Puertos adicionales USB UltraDMA y USB UltraDMA, USB y AGP Comentarios Apropiados para micros no Intel pero no de última generación (AMD K6-2) por carecer de bus a 100 MHz Muy moderna, con todos los avances De SiS Como los anteriores, sus capacidades son avanzadas, aunque su velocidad sea a veces algo más reducida que en los de Intel. Resultan recomendables para su uso junto a chips compatibles Intel como el K6 de AMD o el 6x86MX (M2) de Cyrix-IBM, aunque desgraciadamente no soportan por ahora el bus a 100 MHz del nuevo K6-2. Chipsets de SIS para Pentium y Pentium MMX Concepto 5597/5598 5581/5582 Número CPUs máx. RAM máxima Tipos de RAM 5591/5592 1 384 MB 768 MB FPM, EDO, SDRAM RAM cacheable máxima 128 MB 256 MB Caché L2 máxima 512 KB 1 MB Velocidad bus máx. 75 MHz 83 MHz Puertos adicionales UltraDMA, USB y SVGA integrada UltraDMA y USB UltraDMA, USB y AGP Comentarios Apropiados para micros no Intel (especialmente Cyrix) pero no los de última generación (AMD K6-2) por carecer de bus a 100 MHz Chipsets para Pentium II y Celeron De Intel A decir verdad, aún sin competencia seria, lo que no es de extrañar teniendo el Pentium II sólo un añito... y siendo de Intel. Son bastante avanzados, excepto el anticuado 440 FX (que no es propiamente un chipset para Pentium II, sino más bien para el extinto Pentium Pro) y el barato EX, basado en el LX pero con casi todas las capacidades reducidas. Chipsets de Intel para Pentium II y Celeron Concepto 440 FX 440 LX Número CPUs máx. 440 BX 440 EX 2 1 RAM máxima 512 MB 1 GB EDO ó 512 MB SDRAM 1 GB 256 MB Tipos de RAM FPM, EDO FPM, EDO, SDRAM SDRAM y PC100 SDRAM FPM, EDO, SDRAM RAM cacheable máxima No aplicable (dentro del microprocesador, tamaño fijo) Caché L2 máxima Velocidad bus máx. 66 MHz Puertos adicionales UltraDMA y USB Comentarios Desfasado 100 MHz 66 MHz UltraDMA, USB y AGP Apropiado sólo para Celeron De otras marcas No son demasiados, pero los que hay tienen todas las capacidades que hacen falta en una placa Pentium II. El problema con el que se encuentran no es su falta de eficacia, ya que aunque los de Intel están algo más rodados, el rendimiento es muy similar; pero el hecho de que durante un año la gente sólo haya oído hablar de FX, LX, BX y EX hace difícil que entren en un mercado donde Intel tiene un monopolio absoluto. Chipsets de otras marcas para Pentium II y Celeron Concepto VIA Apollo Pro Número CPUs máx. ALI Aladdin Pro II M1621/M15X3 1 ó más dependiendo de la placa RAM máxima 1 GB 1 GB SDRAM ó 2 GB FPM o EDO Tipos de RAM FPM, EDO, SDRAM, PC100 SDRAM SIS 5601 RAM cacheable máxima No aplicable (dentro del microprocesador, tamaño fijo) ? Caché L2 máxima Velocidad bus máx. 100 MHz Puertos adicionales UltraDMA, USB y AGP Comentarios Muy avanzados, equivalentes al Intel BX En proyecto Glosario de términos relacionados Resulta muy bonito saber que el chipset soporta esto o aquello, pero si saber qué es esto o aquello no vamos a ningún lado. Los términos más importantes a conocer son: AGP: un tipo de puerto o slot especializado para gráficos 3D. Bus (del sistema): el canal por el que se comunica el micro con la memoria y habitualmente con la caché L2. Cuanto más ancho sea, mejor, especialmente para micros muy rápidos. Caché L2: la caché secundaria o de nivel 2 (level 2). Es la memoria caché externa, que acelera el rendimiento del ordenador; cuanta más memoria RAM tengamos, más caché necesitaremos (por ejemplo, unos 512 KB para 32 MB de RAM). PC100: el tipo normalizado de memoria SDRAM de 100 MHz. RAM cacheable: la cantidad de RAM máxima que es capaz de manejar la caché. Si superamos esta cifra es como si no tuviéramos memoria caché. UltraDMA: una tecnología para los discos duros IDE modernos que la soportan que eleva la transferencia teórica de datos hasta 33,3 MB/s. USB: un tipo de puerto moderno para conectar dispositivos externos de velocidad media-baja, con la ventaja de ser universal (el mismo para todos) y poderse conectar en cadena unos a otros. La elección del chipset Chipset y placa base forman un conjunto indisoluble y de la máxima importancia, por lo que su compra debe estar acompañada de una cierta reflexión. Lo primero es recordar que un buen chipset sólo no hace una buena placa; si encontramos dos placas con el mismo chipset pero una cuesta el doble que la otra, por algo será (aunque a veces ese algo es simplemente la marca de la placa, por ejemplo las placas Intel, que en general no son tan avanzadas como las Asus, Iwill o Gigabyte pero que cuestan lo mismo o más que éstas...) Así mismo, una placa debe ser comprada pensando en el futuro. Por ejemplo, si vamos a comprar una para Pentium II, merece la pena comprar una con un chipset capaz de trabajar a 100 MHz de bus (una Intel BX, Apollo Pro o Aladdin Pro II), con lo que podremos ampliarla en el futuro a micros a 350 MHz o más, cosa que no podremos hacer si compramos una LX, por ejemplo. No se obsesione con el Intel Inside. No es que le tenga una manía especial a Intel, y si la tuviera, me la aguantaría; se trata de que mucha gente prefiere dejarse llevar por el atractivo de una marca sin informarse de las características de lo que compra. Por ejemplo, si bien el chipset BX de Intel para Pentium II es aún el mejor de su categoría, en el campo socket 7 los mejores desarrollos no son de Intel, que lo ha abandonado a favor del campo Pentium II. Por ello, comprarse una placa TX ahora sería un error, no porque sea Intel sino porque ese chipset está anticuado (aunque hace unos meses era probablemente el mejor de su categoría); y lo mismo pasa con el EX, que es mucho peor que los Apollo Pro o Aladdin Pro II. Y por último, estudie bien la compra. Puede ser que el chipset admita mucha memoria, pero que la placa tenga pocos zócalos para instalarla; o que estemos comprando una placa base o un ordenador de segunda mano, y realmente nos importe más que la memoria sea suficiente y fácilmente ampliable (EDO mejor que FPM, con zócalos vacíos...) que el hecho de que tenga un chipset sin AGP o sin AGP ni UltraDMA, cuando puede que no vayamos a usar uno ni otro. http://www.conozcasuhardware.com/quees/chipset.htm 3.1.1 3.1.2 CPU. Controlador del Bus. Controlador del bus Es una especie de controlador de tráfico. En el PC XT es el chip 8288 y en el AT es el 82288. El procesador necesita del concurso de este chip para generar el juego completo de señales del bus de control. Control del bus asíncrono. Una de las características principales del µP MC68000 es que la transferencias entre el µP y los dipspositivos externos ( incluída la memoria ) se realizan de forma asíncrona. Es decir, la velocidad de transferencia no viene dada por la frecuencia del reloj del sistema. De echo, en un sistema basado en el MC68000 cada dispositivo puede funcionar con una frecuencia de reloj distinta. De esta manera los datos se transfieren a la máxima velocidad admisible por los distintos dispositivos . Por ejemplo, si en un sistema determinado la memoria ROM tiene un tiempo de acceso de 500 ns., y el de la memoria RAM es de 250 ns., el MC68000 podrá transferir los datos a la memoria RAM al doble de la velocidad con que los transfiere a la memoria ROM. El control del bus asíncrono requiere unas señales que realizan el protocolo entre el microprocesador y los dispositivos externos: Address Strobe ( AS ). Esta señal indica que hay una dirección válida en el bus de direcciones. Read/Writee ( R/W ). Esta señal define la dirección de la transferencia por el bus de datos . A nivel alto indica que el µP desea realizar una lectura desde el dispositivo externo, y viceversa. Normalmente está a nivel alto. Upper Data Strobe ( UDS ) y Lower Data Strobe ( LDS ). Estas señales indican qué parte del bus de datos va a ser usada durante la transferencia del dato. Si la señal UDS está activa, ello significa que el µP desea leer o escribir ( según el estado de R/W ) un dato de 8 bits por la parte alta del bus de datos ( D8-D15 ). Si la señal LDS está cativa, está indicando que el µP desea transferir http://www.ii.uam.es/~fjgomez/68000/tutorial/cap5.html#cap5-1-1 3.1.3 Puertos de E/S. La comunicación entre un programa y el hardware, es decir los chips de soporte y las tarjetas de ampliación, se efectuará mediante los llamados puertos. Como puerto uno tiene que imaginarse una entrada o salida de datos de 8 o 16 bits de ancho, que se identificará por su dirección entre 0 y 65535. Éste autoriza el acceso a los diferentes registros de la correspondiente unidad de hardware y por regla general un grupo de puertos queda cubierto por un dispositivo. Para la comunicación con los puertos, la CPU utiliza el bus de datos y el bus de direcciones y se comporta de forma muy similar que en el acceso a la memoria. - En primer lugar ésta manda una señal mediante una conexión especial de bus, para que todas las unidades que estén recibiendo el bus sepan que ahora no se va a dirigir a un punto de memoria sino a un puerto. - Seguidamente coloca la dirección del puerto en los 16 bits inferiores del bus de direcciones y espera que uno de los “escuchas” del bus declare su competencia. - Una vez esto ha sucedido, la CPU manda los datos que deben transmitirse por medio del bus de datos. En dirección contraria , el puerto actuará de la misma forma al leer los datos, el único requisito es que el contenido del puerto lo mande la tarjeta de ampliación a la CPU. Pero sólo mandará los datos en caso de que le sea requerido y no cuando la tarjeta crea que tiene algo importante para mandar. Una última cosa por comentar es que hoy en día las direcciones de puerto de los elementos más importantes del PC están estandarizadas, es decir en todos los ordenadores dichas direcciones son idénticas. Puertos Entrada/Salida Nota: Para tener una visión de conjunto, antes de adentrarse en este apartado, dedicado a los puertos de E/S, es recomendable leer el epígrafe en que se tratan las Entradas/Salidas de forma genérica ( H2.1) §1 Sinopsis 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 ( H2), 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 ( 2.2.4b), de modo que, por ejemplo, un puerto puede ser 0x21 en un fuente o 21h en un texto informático. Nota: Al tratar de las E/S ( H2.1) hemos indicado que puerto es sinónimo de periférico, un dispositivo externo que comunica con el sistema a través de una dirección. Sin embargo no todos son dispositivos externos a la placa-base, de hecho algunos dispositivos hardware incluidos en ella tienen la característica de "Puertos". Por ejemplo, durante mucho tiempo algunos PC's disponían de un botón frontal señalado "Turbo", con el que se podía cambiar la velocidad de funcionamiento. Este cambio de la velocidad del reloj también puede realizarse por software. Basta para ello cambiar un par de bits en un "Puerto" instalado en la propia placa-base (generalmente en el rango 626Fh). §2 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 ( H2.1) §2.1 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) Altavoz del sistema CMOS RAM & NMI Mask Reg (AT) 060-064 061-061 070-071 Registros de página DMA Controlador de interrupciones PIC#2 (AT) NMI Mask register (XT) 081-08F 0A0-0A1 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 Unidad de expansión (XT) Ratón (conectado al bus) Ratón de bus alternativo Puerto paralelo (LPT2) EGA (Enhanced Graphic Adapter) EGA EGA GPIB Adaptador 0 (AT) Puerto serie 8250 (COM4) Puerto serie 8250 200-20F 210-21F 238-23B 23C-23F 278-27F 2B0-2BF 2C0-2CF 2D0-2DF 2E0-2E7 2E8-2EF 2F8-2FF 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. Nota: Los usuarios de Windows 98 pueden comprobar la asignación de puertos del sistema mediante el programa C:\Archivos de programa\Archivos comunes\Microsoft Shared\MSINFO\MSINFO32.EXE. En Linux pueden consultarse en el fichero /proc/ioports ( Ejemplo). (COM2) Tarjetas específicas (prototipos) Tarjetas específicas (prototipos) Controlador disco duro (XT) Tarjeta de red Tarjeta de red Puerto paralelo (LPT1) SDLC Puerto 2 [1] SDLC Puerto 1 MDA (Monochrome Display Adapter) Puerto paralelo (LPT3) EGA CGA §2.1a Respecto a las asignaciones "Estandar" de algunos puertos, es pertinente hacer algunas observaciones: En realidad IBM definió de forma distinta las direcciones de puerto de las interfaces de impresora en los PC monocromo y en los de color. Las asignaciones fueron las siguientes: Puerto LPT1 LPT2 LPT3 Puerto serie 8250 (COM3) 300-30F 310-31F 320-32F 360-363 368-36B 378-37F 380-38F 3A0-3AF 3B0-3BB 3BC-3BF 3C0-3CF 3D0-3DF 3E8-3EF Controlador de disquete 3F0-3F7 Puerto serie 8250 (COM1) 3F8-3FF Monocromo Color 3BC-3BFh 378-37Fh 378-37Fh 278-27Fh 278-27Fh --- En lo referente a los puertos serie, durante la secuencia inicial de identificación del hardware ( 4.2), la BIOS realiza una búsqueda de dispositivos de E/S por direcciones en un orden determinado, y les asigna un nombre lógico según el orden de aparición. En el caso de los puertos serie el orden suele ser el siguiente: Puerto COM1 COM2 COM3 COM4 Dirección 3F8-3FFh 2F8-2FFh 3E8-3EFh 2E8-2EFh §2.2 Las direcciones mapeadas en memoria se eligieron para algunos dispositivos como los adaptadores gráficos, que requerían mover grandes cantidades de datos muy rápidamente. Con objeto de no causar conflictos con la RAM general, algunas de estas direcciones fueron mapeadas desde el principio por los diseñadores de IBM, fuera de la denominada memoria convencional ( H5.1). Es decir, fuera del espacio de los 640 KB que podían utilizarse en los primeros PC's para Sistema y programas de aplicación. Por ejemplo, el adaptador de video utiliza un área de memoria de 128 KB mapeada entre las direcciones A0000-BFFFFh. Sin embargo, los decodificadores de direcciones de periféricos de los primitivos PC's solo podían utilizar direcciones de 10 bits para tales accesos, por lo que las direcciones de puertos estaban constreñidas a 210 (1 KB 0000-0400h). En realidad el espacio era aún más pequeño, puesto que los primeros 256 Bytes estaban copados por algunos dispositivos de la placa-base, resultando que los dispositivos E/S debían ser mapeados en 768 Bytes. Generalmente se utilizaron fragmentos de 256 Bytes en la forma xxF0-xxFFh, organizados de forma bastante desordenada. La introducción del AT amplió estas direcciones a 16 [2]. Sin embargo, incluso los 64 KB resultantes eran un espacio pequeño y de organización caótica, dado que los nuevos dispositivos se construían de forma que fueran compatibles con las antiguas placas ISA que solo reconocían direcciones de 10 bits. Incluso las placas para buses posteriores que fueron desarrollados pensando en 64 KB porque debían ser compatibles hacia atrás con las antiguas placas ISA (que coexistían en las nuevas). El resultado de todo esto es que, incluso los sistemas actuales con muchos MB. de RAM, deben seguir lidiando con los puertos a través de pequeñas ventanas de memoria con localizaciones absurdas. §3 Comunicar con los puertos Nos detendremos brevemente en analizar los aspectos involucrados en las operaciones E/S con los puertos desde una doble vertiente: Lógica y física; esta última relativa a los mecanismos involucrados en el intercambio. §3.1 Aspectos lógicos El software utilizado depende de la modalidad de direccionamiento (dedicado o mapeado) que se elija. En el segundo caso, se dispone un amplio repertorio de recursos para mover datos entre los registros y la memoria (la mayoría de las instrucciones del procesador operan de esta forma), así como de los mecanismos auxiliares de transferencia, como el acceso directo a memoria DMA. El panorama es distinto cuando se trata de puertos de direccionamiento dedicado. En este caso, para realizar las operaciones E/S en los procesadores 8088 y descendientes, solo se dispone de dos instrucciones específicas: IN y OUT. La primera lee un byte del registro de salida del puerto y lo sitúa en un registro del procesador; la segunda escribe el contenido de un registro del procesador en un registro del puerto. Ambas instrucciones permiten dos variaciones sintácticas: IN acumulador-destino, direccion-de-puerto-origen IN acumulador-destino, acumulador-origen OUT dirección-de-puerto-destino, acumulador-origen OUT acumulador-destino, acumulador-origen Las dos primeras sitúan el dato contenido en el puerto origen en el acumulador-destino, que puede ser AX o AL. Observe que el puerto puede ser expresado directamente mediante una dirección (hexadecimal) o mediante un acumulador-origen, que debe ser DX; en este caso, su contenido se toma como dirección del puerto que se lee. Las instrucciones OUT sitúan el valor contenido en el acumulador-origen, que puede ser AX o AL, en el puerto destino, que puede ser identificado directamente mediante su dirección hexadecimal, o por el valor señalado por el acumulador-destino, que debe ser DX. En el IBM-PC, las direcciones-de-puerto utilizadas en estas instrucciones estan en el rango 00-FFh, aunque en la práctica solo 00-F7h, porque Intel reserva las direcciones F8-FFh para el coprocesador metemático ( 0.3.2). En cambio, si se utiliza la dirección contenida en el registro DX el rango de direcciones puede moverse en el rango 0000-FFFFh. Por supuesto, cualquier programa que quiera utilizar puertos deberá emplear directa o indirectamente estas dos instrucciones ensamblador, aunque en muchos casos no es imprescindible enredarse en demasiados detalles. Los usuarios de DOS pueden utilizar servicios del Sistema; concretamente la interrupción 21h que realiza operaciones de E/S con puertos (utilizando IN y OUT por supuesto). Por ejemplo, las instrucciones: MOV DL,7 MOV AH,2 INT 21 provocan un pitido en el sistema bajo DOS. La explicación es la siguiente: La última instrucción invoca una interrupción software ( H2.4) número 33 (21h) que, como hemos indicado, corresponde a los servicios del DOS. Cuando esto ocurre, se comprueba el contenido del registro AH ( H3.2), que en este caso es 2 (valor previamente establecido en la segunda instrucción), lo que indica que debe escribirse un carácter en pantalla (un dispositivo de salida); en este caso, el carácter que se envía al puerto es el contenido del registro DL, que previamente se ha establecido en el valor 7 con la primera instrucción. El 7 es el valor BELL ASCII ( 2.2.1a); cuando se intenta mostrar este carácter, se produce un pitido en el altavoz del sistema. Los demás Sistemas disponen de utilidades análogas. Por ejemplo, los sistemas Windows disponen de una DLL específica para este tipo de servicios. §3.2 Aspectos físicos El procedimiento que se sigue el procesador para las E/S hacia puertos, es siempre el mismo: Poner el dato en el bus de datos y la dirección en el de direcciones. Como indicamos a continuación, el sistema sabe que se trata de una dirección de memoria (real o de puerto mapeado) o de un puerto de dirección dedicada, y cual es la acción esperada (lectura o escritura) porque se dispone de 4 líneas específicas en el bus de control ( H2): IOR Orden de lectura para dispositivo E/S conectado al bus, que debe colocar un dato en el bus de datos. IOW Orden de escritura para dispositivo E/S, que debe leer el dato situado en el bus. MEMR Esta señal indica a los dispositivos de memoria que deben colocar un dato en el bus de datos. MEMW Señal que indica a los dispositivos de memoria que deben almacenar el dato colocado en el bus de datos. Una cuestión adicional es que cuando la comunicación debe establecerse desde el lado del puerto (es el puerto el que desea establecer comunicación con el sistema), primero debe anunciarlo al procesador, para lo que se utiliza un sistema de interrupciones cuyo mecanismo de funcionamiento se ha detallado en el capítulo correspondiente ( H2.4). La consecuencia es que la mayoría de los puertos disponen de líneas IRQ asignadas para este menester. http://www.zator.com/Hardware/H2_5.htm 3.1.4 Controlador de Interrupciones. Controlador de interrupciones Las interrupciones del PC, a las que nos referimos más detenidamente en el epígrafe correspondiente ( H2.4), son manejadas por un chip conocido como PIC ("Programmable Interrupt Controller"). Originariamente era un 8259A, que puede manejar 8 peticiones de interrupción, pero pronto se hizo evidente que eran un número excesivamente corto, por lo que en 1984, IBM añadió un segundo controlador en el modelo AT. Este diseño, con dos controladores, ha permanecido invariable hasta nuestros días en lo que se refiere a su funcionalidad. Recientemente ha sido sustituido por el denominado APIC ("Advanced Programmable Interrupt Controller") en las máquinas Pentium y sucesoras, que está basado en un chip 82489DX. 3.1.5 Controlador de DMA. Controlador DMA DMA es el acrónimo de "Direct Memory Access"; se trata de un mecanismo incluido en la arquitectura del PC, que permite intercambios de datos entre la memoria y ciertos dispositivos sin intervención del procesador (por esta razón se denomina precisamente acceso directo a memoria); está controlado por un chip específico, el DMAC ("DMA Controller"). En los XT estaba integrado en un chip 8237A que proporcionaba 4 canales. Posteriormente en los AT se instalaron dos, ampliándose a 8 el número de canales. En el epígrafe dedicado al Acceso directo a memoria ( H2.3), se expone con más detalle su funcionamiento. Controlador programable 8237 DMA El controlador de DMA 8237 suministra a la memoria y al E/S señales de control e información y direccionamiento a la memoria durante la transferencia de DMA. El 8237 es, en realidad, un microprocesador de propósito especial cuya labor es la transferencia de datos a alta velocidad entre la memoria y el espacio de E/S. Aunque este controlador quizá no aparezca como componente discreto en sistemas modernos basados en microprocesador, se emplea en los conjuntos de controladores integrados (chip-set) que hay en los sistemas más nuevos. El 8237 tiene cuatro canales y es compatible con los microprocesadores 8086 y 8088. El 8237 puede expandirse para incluir cualquier número de entradas de canal de DMA, aunque parece ser que cuatro canales son adecuados para muchos sistemas pequeños. El 8237 puede efectuar transferencias de DMA a velocidades de hasta 1.6 Mbytes por segundo. Cada una puede direccionar a una sección completa de 64 Kbytes de la memoria y puede transferir hasta 64 Kbytes con una sola programación. http://www.monografias.com/trabajos5/tempori/tempori.shtml#con 3.1.6 Circuitos de temporización y control. Elementos de temporización Los ordenadores son máquinas síncronas, lo que significa que todas sus partes funcionan de forma acompasada. Es frecuente poner el ejemplo de los remeros en las películas de galeras, donde cada remero no va por su cuenta, todos siguen el ritmo del gordo del tambor. En el PC ocurre otro tanto, aquí el ritmo no lo marca un tambor, sino un metrónomo (reloj) que genera una señal (señal de reloj), que marca el ritmo de la "música" que es capaz de ejecutar el sistema. Esta señal está presente en el bus de control , la línea CLK. El corazón del reloj es un oscilador controlado por un cristal de cuarzo que actúa de patrón (es un elemento fácilmente identificable con aspecto de almohadilla plateada). En los PC originales la frecuencia del cristal es de 14.31818 MHz. Esta señal está también presente en el bus de control, línea OSC, y la denominaremos frecuencia del oscilador. En los primitivos PCs la señal del reloj era de 4.77 MHz es decir, un tercio de la frecuencia del oscilador [3]. La señal CLK es importantísima, ya que sin ella sería imposible un funcionamiento armónico de los distintos elementos (incluyendo el procesador, una de cuyas patillas conecta directamente con ella). Todos los sucesos internos tienen lugar al compás de este tic-tac electrónico [6]. Nota: Hemos señalado , que a partir de la introducción del 80486 algunos elementos del ordenador no pueden funcionar al ritmo endiablado del reloj, que resulta demasiado rápido para el resto de chips instalados en la placa, por lo que en esta se utilizan frecuencias inferiores. Esto se consigue utilizando solo uno de cada tres, cuatro o cinco pulsos de CLK. En este sentido es particularmente significativa la denominada velocidad del bus externo. Que es la que se utiliza en dicho bus. Por ejemplo, un procesador que esté trabajando a 200 MHz, puede que esté utilizando una frecuencia de 66 MHz en sus comunicaciones con el bus externo. Exactamente la misma que un procesador de "solo" 66 MHz de reloj que utilice también 66 MHz para el bus externo. La situación actual es que las velocidades típicas de las placas-base son de 60- 66- 100- 133 MHz mientras que los procesadores funcionan a frecuencias múltiplos de aquellas; típicamente de 1x hasta 10x, es decir, desde 60 a 1330 MHz (lo que se denomina velocidad del núcleo). Chip del reloj En el PC original, el oscilador antes mencionado está montado en un chip 8284A (88284 en el AT), que se conoce como generador de reloj (no confundir con el reloj programable ). La fecha y hora, que había que introducir en la puesta en marcha del sistema, se perdía cada vez que se apagaba el equipo. Durante el funcionamiento, el sistema de fecha y hora era mantenido por una interrupción de alta prioridad ( H2.4) que ocurría unas 18 veces cada segundo. A partir de la introducción del PC AT, se instaló en la placa base el denominado chip del reloj, abreviadamente RTC ("Real Time Clock"). Es un auténtico reloj que suministra la fecha y hora al sistema. Como este reloj debía continuar su funcionamiento incluso estando el equipo desconectado, se le dotó de una pequeña pila o batería. Aprovechando que este circuito disponía de su propia fuente de energía, se utilizó para añadirle cierta cantidad de memoria CMOS ("Complementary MetalOxide Semiconductor") de bajo consumo, la denominada ROM del sistema, que se utiliza para guardar información relativa a la configuración del equipo. Estos datos son accesibles pulsando una combinación de teclas en los momentos iniciales de arranque, lo que inicia un programa de configuración grabado en la BIOS conocido generalmente como Setup. Nota: La batería de backup de la placa base, es un elemento fácilmente identificable; tiene forma de pila de botón reemplazable, o de elementos soldados recubiertos de una funda plástica. Este último es el caso mostrado en la fig. 2. La batería es el elemento azul; por encima está el conector del teclado y sobre éste, junto al letrero BATTERY, se distinguen tres de los 4 pines del conector para la batería auxiliar [7]. Esta batería se agota con el tiempo, especialmente si el equipo permanece mucho tiempo apagado, en cuyo caso se pierde la fecha Fig. 2 y (lo que es más importante) los datos de configuración establecidos con el programa de Set-up. Aunque la mayoría de equipos funcionan bien con la configuración por defecto, en caso de sustituir la batería es posible que sea necesario reconfigurar el Set-up. Tradicionalmente este circuito CMOS/RTC era un Motorola MC146818. En los modelos iniciales esta memoria era de 128 bytes. Actualmente es de 256 KB, y junto con algunos otros elementos están incluidos en un chipset de solo dos circuitos integrados. A su vez el programa de configuración es cada vez más sofisticado, de forma que simplifica la configuración del sistema. Por ejemplo, dispone de un sistema de protección ("Password") de acceso y de autodetección del tipo de disco instalado; algo que en los modelos antiguos debía hacerse manualmente. Temporizador programable Junto con el anterior se encuentra un circuito que recibe varios nombres: PIT ("Programmable Interval Timer") temporizador programable, reloj programable, temporizador ("timer"), Etc. Constituido por un chip 8253 (8254 en el AT y máquinas con bus EISA/MCA) que dispone de tres temporizadores programables independientes numerados del 0 al 2. En realidad son divisores de frecuencia que obtienen la señal del generador de reloj. Tienen cuatro modos de funcionamiento programables que pueden generar diversas señales: Pulsos de anchura variable. Generar una interrupción al final de la cuenta de una serie de pulsos de reloj, para lo que dispone de tres contadores independientes de 16 bits. Ondas cuadradas que sean una fracción de la frecuencia de entrada (reloj). Por ejemplo, podemos conseguir que generen una señal por cada 1000 señales de la frecuencia del reloj RTC, con lo que en un PC XT obtendríamos una frecuencia de 4.77 KHz. Medir el intervalo entre sucesos. Estas capacidades se utilizan para cuestiones tales como producir señales de sincronización para refresco de la RAM, o tonos audibles de diversas frecuencias en el altavoz del PC. La distribución de tareas es como sigue: Canal 0: Produce una interrupción cada 54.94 ms en IRQ0, que activa la rutina de actualización del reloj de tiempo real RTC . Canal 1: Produce una interrupción cada 15.12 microsegundos que marca el comienzo del ciclo de refresco de las memorias RAM dinámicas ( 5.3.2). Canal 2: Este canal se destina a generar tonos para el altavoz del sistema. http://www.zator.com/Hardware/H2.htm#Controlador DMA 3.1.7 Controladores de video. ¿Qué es la tarjeta de video? La tarjeta de video, (también llamada controlador de video, ver figura 2),es un componente electrónico requerido para generar una señal de video que semanda a una pantalla de video por medio de un cable. La tarjeta de video seencuentra normalmente en la placa de sistema de la computadora o en una placa deexpansión. La tarjeta gráfica reúne toda la información que debevisualizarse en pantalla y actúa como interfaz entre el procesador y elmonitor; la información es enviada a éste por la placa luego de haberlarecibido a través del sistema de buses. Una tarjeta gráfica se compone, básicamente,de un controlador de video, de la memoria de pantalla o RAM video, y elgenerador de caracteres, y en la actualidad también poseen un acelerador de gráficos.El controlador de video va leyendo a intervalos la información almacenada en laRAM video y la transfiere al monitor en forma de señal de video; el número deveces por segundo que el contenido de la RAM video es leído y transmitido almonitor en forma de señal de video se conoce como frecuencia de refresco de lapantalla. Entonces, como ya dijimos antes, la frecuencia depende en gran medidade la calidad de la placa de video. Tipos de tarjeta de video Tarjeta gráfica Hércules Con ésta tarjeta se podía visualizar gráficos y textos simultáneamente. Enmodo texto, soportaba una resolución de 80x25 puntos. En tanto que en los gráficoslo hacía con 720x350 puntos, dicha tarjeta servía sólo para gráficos de unsolo color. La tarjeta Hércules tenía una capacidad total de 64k de memoriavideo RAM. Poseía una frecuencia de refresco de la pantalla de 50HZ. Color Graphics Adapter (CGA) La CGA utiliza el mismo chip que la Hércules y aporta resoluciones y coloresdistintos. Los tres colores primarios se combinan digitalmente formando un máximode ocho colores distintos. La resolución varía considerablemente según elmodo de gráficos que se esté utilizando, como se ve en la siguiente lista: * 160 X 100 PUNTOS CON 16 COLORES * 320 X 200 PUNTOS CON 4 COLORES * 640 X 200 PUNTOS CON 2 COLORES La tarjeta EGA Enchanced Graphics Adapter (EGA). Se trata de una tarjeta gráfica superiora la CGA. En el modo texto ofrece una resolución de 14x18 puntos y en el modográfico dos resoluciones diferentes de 640x200 y 640x350 a 4 bits, lo que dacomo resultado una paleta de 16 colores, siempre y cuando la tarjeta estéequipada con 256KB de memoria de video RAM. La tarjeta VGA La Video Graphics Adapter (VGA) significó la aparición de un nuevo estándardel mercado. Esta tarjeta ofrece una paleta de 256 colores, dando como resultadoimágenes de colores mucho más vivos. Las primeras VGA contaban con 256KB dememoria y solo podían alcanzar una resolución de 320x200 puntos con lacantidad de colores mencionados anteriormente. Primero la cantidad de memoriavideo RAM se amplió a 512KB, y más tarde a 1024KB, gracias a ésta ampliaciónes posible conseguir una resolución de, por ejemplo, 1024x768 píxeles con 8bits de color. En el modo texto la VGA tiene una resolución de 720x400 pixeles,además posee un refresco de pantalla de 60HZ, y con 16 colores soporta hasta640X480 puntos. La tarjeta SVGA La tarjeta SVGA (Super Video Graphics Adapter) contiene conjuntos de chips deuso especial, y más memoria, lo que aumenta la cantidad de colores y laresolución. http://www.ilustrados.com/publicaciones/EpypkAEEypZqhjZKbE.php Controladores de periféricos En la placa-base existen diversos chips destinados específicamente al control de periféricos serie y paralelo. A continuación reseñaremos brevemente algunos de los más conocidos. El PPI ("Programmable peripheral interface"), también conocido como PIO ("Programmable Input/Output") era originariamente un 8255. Se trata de un chip de 24 patillas que pueden ser programadas individualmente en dos grupos de 12, de las cuales 8 son de datos y 4 bits auxiliares incluyen señales de control (STROBE; ACKNOWLEDGE; BUFFER FULL, Etc.) Este chip tiene gran variedad de aplicaciones, entre ellas almacenar información sobre el estado de configuración de la placa-base y controlar otros chips, como el temporizador programable y la interfaz del teclado, pero su uso característico es como interfase paralelo bidireccional para periféricos que utilizan este tipo de comunicación (por ejemplo impresoras, escáneres, Etc.) El altavoz del sistema está conectado a dos patillas de este integrado. Desde el punto de vista lógico este dispositivo responde a las direcciones 060h-063h, que son sus números de puerto y dispone de tres registros de 1 byte conocidos como A, B y C, cuyas direcciones respectivas son 060h, 061h y 062h. La dirección 063h se utiliza para configurar el dispositivo. Nota: Como hemos señalado anteriormente, a partir del AT, el estado de configuración de la placa-base se almacena en un integrado alimentado con batería que contiene también el reloj de tiempo real. En realidad el AT no tiene un 8255 como tal, pero emula su comportamiento. En este caso el controlador es un 8742 responde a las direcciones 060h-064h, y realiza otras funciones no directamente relacionadas con el teclado, como resetear la UCP, controlar la puerta A20 y manejar el ratón [9]. El 8250 ACE ("Asynchronous communication equipment"), es una interfaz entre el bus paralelo del sistema y los periféricos que utilizan comunicación serie, como módems y ratones. Puede generar las señales de control de la popular interfaz RS-232 [8]; dispone de un generador de velocidad de transmisión que permite generar cualquiera de las más frecuentes. Puede funcionar bajo control de programa o mediante interrupciones ( H2a) y dispone de una cierta capacidad de comprobación y corrección de los errores típicos de las comunicaciones serie. El PD765, que controlaba el disquete en los XT, más conocido como FDC ("Floppy Disc Controller"). Fue sustituido por el 82072A en el AT y por el 82077A en el PS/2. 3.2 Aplicaciones. 3.2.1 Entrada/ Salida. 3.2.2 Almacenamiento. 3.2.3 Fuente de alimentación. Es un transformador rectificador a 220 V. Transformador porque pasa de 220 V a 5 y 12 V, y rectificador porque transforma corriente alterna (AC) en continua (DC). Es una caja grande de la que salen cables. Tiene un refrigerador que refrigera la unidad central. La fuente de alimentación es el dispositivo que se encarga de distribuir la energía a todos los componentes internos de la computadora. Tiene un ventilador propio que la mantiene fresca a ella misma como a todas demás partes de la computadora. Además, la fuente puede operar un ventilador auxiliar ubicado en cualquier otra parte de la computadora. Las fuentes están clasificadas por su potencia en watts, que hablando fácil se trata de la cantidad de energía eléctrica que pueden entregar a todo el sistema. Cuanto mas alta sea la potencia, mejor, porque la fuente se encontrara en mejores condiciones de enfrentarse con las necesidades de la computadora, alejando la probabilidad de fallas. Las fuentes generalmente vienen en capacidades que oscilan entre los 95 a 300 watts. Todas son aproximadamente del mismo tamaño, ya que están diseñadas siguiendo un estándar para las ATs. http://www.monografias.com/trabajos/acmother/acmother.shtml 3.3 Ambientes de servicios. 3.3.1 Negocios. 3.3.2 Industria. 3.3.3 Comercio electrónico. DEFINICIONES Pondremos a continuación tres definiciones que nos parecen apropiadas al término Comercio Electrónico: "Es la aplicación de la avanzada tecnología de información para incrementar la eficacia de las relaciones empresariales entre socios comerciales". (Automotive Action Group in North America) "La disponibilidad de una visión empresarial apoyada por la avanzada tecnología de información para mejorar la eficiencia y la eficacia dentro del proceso comercial." (EC Innovation Centre) "Es el uso de las tecnologías computacional y de telecomunicaciones que se realiza entre empresas o bien entre vendedores y compradores, para apoyar el comercio de bienes y servicios." Conjugando estas definiciones podemos decir que el comercio electrónico es una metodología moderna para hacer negocios que detecta la necesidad de las empresas, comerciantes y consumidores de reducir costos, así como mejorar la calidad de los bienes y servicios, además de mejorar el tiempo de entrega de los bienes o servicios. Por lo tanto no debe seguirse contemplando el comercio electrónico como una tecnología, sino que es el uso de la tecnología para mejorar la forma de llevar a cabo las actividades empresariales. Ahora bien, el comercio electrónico se puede entender como cualquier forma de transacción comercial en la cual las partes involucradas interactúan de manera electrónica en lugar de hacerlo de la manera tradicional con intercambios físicos o trato físico directo. Actualmente la manera de comerciar se caracteriza por el mejoramiento constante en los procesos de abastecimiento, y como respuesta a ello los negocios a nivel mundial están cambiando tanto su organización como sus operaciones. El comercio electrónico es el medio de llevar a cabo dichos cambios dentro de una escala global, permitiendo a las compañías ser más eficientes y flexibles en sus operaciones internas, para así trabajar de una manera más cercana con sus proveedores y estar más pendiente de las necesidades y expectativas de sus clientes. Además permiten seleccionar a los mejores proveedores sin importar su localización geográfica para que de esa forma se pueda vender a un mercado global. 2. ORIGEN Y EVOLUCION HISTORICA El comercio, actividad ancestral del ser humano, ha evolucionado de muchas maneras. Pero su significado y su fin en siempre el mismo. Según el diccionario consultor de economía, el Comercio es "el proceso y los mecanismos utilizados, necesarios para colocar las mercancías, que son elaboradas en las unidades de producción, en los centros de consumo en donde se aprovisionan los consumidores, último eslabón de la cadena de comercialización. Es comunicación y trato". En líneas generales, y con un sentido amplio, el comercio implica la investigación de mercado con el fin de interpretar los deseos del consumidor, la publicidad que anuncia la existencia del producto, la posibilidad de adquirirlo, y en que lugar, a la vez que se utilizan los métodos de persuasión, la venta al por menor y finalmente, la adquisición por parte del público. Según lo expuesto, a través de los años han aparecido diferentes formas o tipos de comercio. A principio de los años 1920 en Los Estados Unidos apareció la venta por catálogo, impulsado por las grandes tiendas de mayoreo. Este sistema de venta, revolucionario para la época, consiste en un catálogo con fotos ilustrativas de los productos a vender. Este permite tener mejor llegada a las personas, ya que no hay necesidad de tener que atraer a los clientes hasta los locales de venta. Esto posibilitó a las tiendas poder llegar a tener clientes en zonas rurales, que para la época que se desarrollo dicha modalidad existía una gran masa de personas afectadas al campo. Además, otro punto importante de esto es que los potenciales compradores pueden escoger los productos en la tranquilidad de sus hogares, sin la asistencia o presión, según sea el caso, de un vendedor. La venta por catálogo tomó mayor impulso con la aparición de las tarjetas de crédito; además de determinar un tipo de relación de mayor anonimato entre el cliente y el vendedor. A mediados de 1980, con la ayuda de la televisión, surgió una nueva forma de venta por catálogo, también llamada venta directa. De esta manera, los productos son mostrados con mayor realismo, y con la dinámica de que pueden ser exhibidos resaltando sus características. La venta directa es concretada mediante un teléfono y usualmente con pagos de tarjetas de crédito. A principio de los años 1970, aparecieron las primeras relaciones comerciales que utilizaban una computadora para transmitir datos. Este tipo de intercambio de información, sin ningún tipo de estándar, trajo aparejado mejoras de los procesos de fabricación en el ámbito privado, entre empresas de un mismo sector. Es por eso que se trataron de fijar estándares para realizar este intercambio, el cual era distinto con relación a cada industria. Un ejemplo conocido de esto es el caso del Supermercado mayorista Amigazo. A mediados de los años 1980 esta empresa desarrolló un sistema para procesar ordenes de pedido electrónicas, por el cual los clientes de esta empresa emitían ordenes de pedido desde sus empresas y esta era enviada en forma electrónica. Esta implementación trajo importantes beneficios a Amigazo, ya que se eliminaron gran parte de errores de entregas y se redujeron los tiempos de procesamiento de dichas ordenes. El beneficio fue suficiente como para que la empresa Amigazo, instale un equipo a sus clientes habituales. Por otra parte, en el sector publico el uso de estas tecnologías para el intercambio de datos tuvo su origen en las actividades militares. A fines de los años 1970 el Ministerio de Defensa de Estados Unidos inicio un programa de investigación destinado a desarrollar técnicas y tecnologías que permitiesen intercambiar de manera transparente paquetes de información entre diferentes redes de computadoras, el proyecto encargado de diseñar esos protocolos de comunicación se llamo "Internetting project" (de este proyecto de investigación proviene el nombre del popular sistema de redes), del que surgieron el TCP/IP (Transmission Control Protocol)/(Internet Protocol) que fueron desarrollados conjuntamente por Vinton Cerf y Robert Kahn y son los que actualmente se emplean en Internet. A través de este proyecto se logró estandarizar las comunicaciones entre computadoras y en 1989 aparece un nuevo servicio, la WWW (World Wide Web, Telaraña Global), cuando un grupo de investigadores en Ginebra, Suiza, ideo un método a través del cual empleando la tecnología de Internet enlazaban documentos científicos provenientes de diferentes computadoras, a los que podían integrarse recursos multimedia (texto, gráficos, música, entre otros). Lo más importante de la WWW es su alto nivel de accesibilidad, que se traduce en los escasos conocimientos de informática que exige de sus usuarios. El desarrollo de estas tecnologías y de las telecomunicaciones ha hecho que los intercambios de datos crezcan a niveles extraordinarios, simplificándose cada vez mas y creando nuevas formas de comercio, y en este marco se desarrolla el Comercio Electrónico. 3. VENTAJAS Ventajas para los Clientes Permite el acceso a más información. La naturaleza interactiva del Web y su entorno hipertexto permiten búsquedas profundas no lineales que son iniciadas y controladas por los clientes, por lo tanto las actividades de mercadeo mediante el Web están más impulsadas por los clientes que aquellas proporcionadas por los medios tradicionales. Facilita la investigación y comparación de mercados. La capacidad del Web para acumular, analizar y controlar grandes cantidades de datos especializados permite la compra por comparación y acelera el proceso de encontrar los artículos. Abarata los costos y precios. Conforme aumenta la capacidad de los proveedores para competir en un mercado electrónico abierto se produce una baja en los costos y precios, de hecho tal incremento en la competencia mejora la calidad y variedad de los productos y servicios. Ventajas para las empresas Mejoras en la distribución. El Web ofrece a ciertos tipos de proveedores (industria del libro, servicios de información, productos digitales) la posibilidad de participar en un mercado interactivo, en el que los costos de distribución o ventas tienden a cero. Por poner un ejemplo, los productos digitales (software) pueden entregarse de inmediato, dando fin de manera progresiva al intermediarismo. También compradores y vendedores se contactan entre sí de manera directa, eliminando así restricciones que se presentan en tales interacciones. De alguna forma esta situación puede llegar a reducir los canales de comercialización, permitiendo que la distribución sea eficiente al reducir sobrecosto derivado de la uniformidad, automatización e integración a gran escala de sus procesos de administración. De igual forma se puede disminuir el tiempo que se tardan en realizar las transacciones comerciales, incrementando la eficiencia de las empresas. Comunicaciones de mercadeo. Actualmente, la mayoría de las empresas utiliza el Web para informar a los clientes sobre la compañía, a parte de sus productos o servicios, tanto mediante comunicaciones internas como con otras empresas y clientes. Sin embargo, la naturaleza interactiva del Web ofrece otro tipo de beneficios conducentes a desarrollar las relaciones con los clientes. Este potencial para la interacción facilita las relaciones de mercadeo así como el soporte al cliente, hasta un punto que nunca hubiera sido posible con los medios tradicionales. Un sitio Web se encuentra disponible las 24 horas del día bajo demanda de los clientes. Las personas que realizan el mercadeo pueden usar el Web para retener a los clientes mediante un diálogo asincrónico que sucede a la conveniencia de ambas partes. Esta capacidad ofrece oportunidades sin precedentes para ajustar con precisión las comunicaciones a los clientes individuales, facilitando que éstos soliciten tanta información como deseen. Además, esto permite que los responsables del área de mercadeo obtengan información relevante de los clientes con el propósito de servirles de manera eficaz en las futuras relaciones comerciales. Los sitios Web más sencillos involucran a los clientes mediante botones para enviar mensajes de correo electrónico a la empresa. En otros centros más sofisticados, los clientes rellenan formularios, con el objeto de que desarrollen una relación continua con la compañía, cuyo fin es informar tanto sobre los productos y servicios como obtener información sobre las necesidades que los clientes tienen sobre los mismos. De esta manera, se obtiene publicidad, promoción y servicio al cliente a la medida. El Web también ofrece la oportunidad de competir sobre la base de la especialidad, en lugar de hacerlo mediante el precio, ya que desde el punto de vista del mercadeo, rara vez es deseable competir tan sólo en función del precio. El mercadeo intenta satisfacer las necesidades de los clientes en base a los beneficios que buscan, lo que quiere decir que el precio depende de la valorización del cliente, y no de los costos; tales oportunidades surgen cuando lo ofrecido se diferencia por elementos de mercadeo distintos al precio, lo cual produce beneficios cargados de valor, como por ejemplo, la comodidad producida por el reparto directo mediante la distribución electrónica de software. Beneficios operacionales. El uso empresarial del Web reduce errores, tiempo y sobrecostos en el tratamiento de la información. Los proveedores disminuyen sus costos al acceder de manera interactiva a las bases de datos de oportunidades de ofertas, enviar éstas por el mismo medio, y por último, revisar de igual forma las concesiones; además, se facilita la creación de mercados y segmentos nuevos, el incremento en la generación de ventajas en las ventas, la mayor facilidad para entrar en mercados nuevos, especialmente en los geográficamente remotos, y alcanzarlos con mayor rapidez. Todo esto se debe a la capacidad de contactar de manera sencilla y a un costo menor a los clientes potenciales, eliminando demoras entre las diferentes etapas de los subprocesos empresariales. 4. CATEGORIAS El comercio electrónico puede subdividirse en cuatro categorías: La categoría compañía - compañía, se refiere a una compañía que hace uso de una red para hacer ordenes de compra a sus proveedores, recibir facturas y realizar los pagos correspondientes. Esta categoría ha sido utilizada por muchos años, particularmente haciendo uso de EDI ("Electronic Data Interchange") sobre redes privadas o redes de valor agregado ("Value added Networks-VAN"). La categoría compañía - cliente, se puede comparar con la venta al detalle de manera electrónica. Esta categoría ha tenido gran aceptación y se ha ampliado sobre manera gracias al WWW, ya que existen diversos centros comerciales (del Inglés malls) por todo Internet ofreciendo toda clase de bienes de consumo, que van desde pasteles y vinos hasta computadoras. La categoría compañía - administración, se refiere a todas las transacciones llevadas a cabo entre las compañías y las diferentes organizaciones de gobierno. Por ejemplo en Estados Unidos cuando se dan a conocer los detalles de los requerimientos de la nueva administración a través de Internet, las compañías pueden responder de manera electrónica. Se puede decir que por el momento esta categoría esta en sus inicios pero que conforme el gobierno empiece a hacer uso de sus propias operaciones, para dar auge al Comercio Electrónico, está alcanzará su mayor potencial. Cabe hacer mención que también se ofrecerán servicios de intercambio electrónico para realizar transacciones como el regreso del IVA y el pago de impuestos corporativos. La categoría cliente - administración, aún no ha nacido, sin embargo después del nacimiento de las categorías compañía - cliente y compañía administración, el gobierno hará una extensión para efectuar interacciones electrónicas como serían pagos de asistencia social y regreso de pago de impuestos. 5. RIESGOS Como medio comercial el Web presenta las siguientes deficiencias, derivadas tanto de su tecnología como de su naturaleza interactiva: Entorno empresarial y tecnológico cambiante. Empresas y clientes desean tener flexibilidad para cambiar, según su voluntad, de socios comerciales, plataformas y redes. No es posible evaluar el costo de esto, pues depende del nivel tecnológico de cada empresa, así como del grado deseado de participación en el comercio electrónico. Como mínimo una empresa necesitará una computadora personal con sistema operativo Windows o Machintosh, un módem, una suscripción a un proveedor de servicios de Internet, una línea telefónica. Una compañía que desee involucrarse más, deberá prepararse para introducir el comercio electrónico en sus sistemas de compras, financieros y contables, lo cual implicará el uso de un sistema para el intercambio electrónico de datos (EDI) con sus proveedores y/o una intranet con sus diversas sedes. Privacidad y seguridad. La mayoría de los usuarios no confía en el Web como canal de pago. En la actualidad, las compras se realizan utilizando el número de la tarjeta de crédito, pero aún no es seguro introducirlo en Internet sin conocimiento alguno. Cualquiera que transfiera datos de una tarjeta de crédito mediante el Web, no puede estar seguro de la identidad del vendedor. Análogamente, éste no lo está sobre la del comprador. Quien paga no puede asegurarse de que su número de tarjeta de crédito no sea recogido y sea utilizado para algún propósito malicioso; por otra parte, el vendedor no puede asegurar que el dueño de la tarjeta de crédito rechace la adquisición. Resulta irónico que ya existan y funcionen correctamente los sistemas de pago electrónico para las grandes operaciones comerciales, mientras que los problemas se centren en las operaciones pequeñas, que son mucho más frecuentes. Cuestiones legales, políticas y sociales. Existen algunos aspectos abiertos en torno al comercio electrónico: validez de la firma electrónica, no repudio, legalidad de un contrato electrónico, violaciones de marcas y derechos de autor, pérdida de derechos sobre las marcas, pérdida de derechos sobre secretos comerciales y responsabilidades. Por otra parte, deben considerarse las leyes, políticas económicas y censura gubernamentales. 6. USOS El comercio electrónico puede utilizarse en cualquier entorno en el que se intercambien documentos entre empresas: compras o adquisiciones, finanzas, industria, transporte, salud, legislación y recolección de ingresos o impuestos. Ya existen compañías que utilizan el comercio electrónico para desarrollar los aspectos siguientes: Creación de canales nuevos de mercadeo y ventas. Acceso interactivo a catálogos de productos, listas de precios y folletos publicitarios. Venta directa e interactiva de productos a los clientes. Soporte técnico ininterrumpido, permitiendo que los clientes encuentren por sí mismos, y fácilmente, respuestas a sus problemas mediante la obtención de los archivos y programas necesarios para resolverlos. Mediante el comercio electrónico se intercambian los documentos de las actividades empresariales entre socios comerciales. Los beneficios que se obtienen en ello son: reducción del trabajo administrativo, transacciones comerciales más rápidas y precisas, acceso más fácil y rápido a la información, y reducción de la necesidad de reescribir la información en las computadoras. Los tipos de actividad empresarial que podrían beneficiarse mayormente de la incorporación del comercio electrónico, son: Sistemas de reservas. Centenares de agencias dispersas utilizan una base de datos compartida para acordar transacciones. Existencias comerciales. Aceleración a nivel mundial de los contactos entre mercados de existencias. Elaboración de pedidos. Posibilidad de referencia a distancia o verificación por parte de una entidad neutral. Seguros. Facilita la captura de datos. Empresas que suministran a fabricantes. Ahorro de grandes cantidades de tiempo al comunicar y presentar inmediatamente la información que intercambian. 7. TECNOLOGIAS QUE EMPLEA El comercio electrónico utiliza un amplio rango de tecnologías como son: Intercambio Electrónico de Datos (EDI-Electronic Data Interchange) Correo Electrónico (E-mail o Electronic Mail) Transferencia Electrónica de Fondos (EFT- Electronic Funds Transfer) Aplicaciones Internet: Web, News, Gopher, Archie Aplicaciones de Voz: Buzones, Servidores Transferencia de Archivos Diseño y Fabricación por Computadora (CAD/CAM) Multimedia Tableros Electrónicos de Publicidad Videoconferencia 8. TIPOS DE RELACIONES QUE PUEDEN PRESENTARSE El comercio electrónico es un método contemporáneo para la transacción empresarial que enfoca la necesidad percibida, tanto por las empresas como por sus clientes, de disminuir los costos de los bienes y servicios, manteniendo la cantidad e incrementando la velocidad de entrega. Las actividades de manejo de la información que se realizan en el comercio electrónico mediante transacciones empresariales pueden clasificarse en las siguientes categorías: Transacciones entre una empresa y sus clientes mediante una red pública de telecomunicaciones (teléfono+módem) con el propósito de realizar compras desde el hogar ("home shopping"), o el banco en su casa ("home banking") utilizando técnicas de cifrado para manejar los aspectos de seguridad y dinero electrónico. Transacciones con socios comerciales usando EDI. Transacciones para la obtención de información: investigación de mercados utilizando exploradores de códigos de barras, tratamiento de información para la toma de decisiones directivas o la solución de problemas organizativos, y la manipulación de información para la organización de operaciones, como la administración de la cadena de proveedores de una empresa. Transacciones para la distribución de información con clientes potenciales, tales como mercadeo, publicidad, y ventas interactivas. La conectividad entre los participantes es una cuestión esencial para la viabilidad del comercio electrónico, e Internet lo consigue a un costo bajo. 9. CAMBIOS EN LAS EMPRESAS El continuo avance en el mejoramiento de la infraestructura de las telecomunicaciones ha proporcionado los medios para el intercambio casi instantáneo de los datos. El comercio electrónico hace uso de estos flujos de datos de una forma eficaz. El intercambio eficiente de la información determina el éxito de una empresa; cuando se logra asegurar que el personal de una compañía consume más tiempo en la producción o venta de productos y servicios, en lugar de reprocesar innecesariamente los datos, podemos decir que ha iniciado la optimización de su potencial. Internet ha demostrado que estamos viviendo en una comunidad global, esto quiere decir que no importa las diferencias de horario, ni la ubicación geográfica, lo que implica que la actividad empresarial puede realizarse con cualquier persona y en cualquier parte del mundo de manera instantánea. Esto significa que las empresas deben replantear sus estrategias empresariales, sean cuales fueran sus objetivos: ampliación del mercado, obtención de bienes por parte de proveedores nuevos, externalización de servicios ("outsourcing"), o búsquedas de nuevas alianzas.El comercio electrónico se introduce en las empresas en tres fases: Sustitución de las operaciones manuales basadas en papel por alternativas electrónicas. Replanteamiento y simplificación de los flujos de información. Uso novedoso y dinámico de los flujos de información. La sustitución de los sistemas basados en papel, tanto dentro de una empresa, como entre ellas, produce pocos beneficios reales. Es cierto que reduce los costos administrativos y mejora el nivel de precisión en el intercambio de datos, pero no aborda las cuestiones relacionadas con que las actividades comerciales se hagan eficientemente a la primera. Las aplicaciones del comercio electrónico ayudan a reformar las maneras de realizar las actividades comerciales, y con frecuencia, actúan como un catalizador para que las empresas utilicen la reingeniería de procesos empresariales. 10. EFECTOS A continuación se mencionan algunas consecuencias derivadas del desarrollo del comercio electrónico: Empresas virtuales. Es la oportunidad para utilizar socios comerciales externos sin una ubicación física, pues se establece una relación basada en transacciones electrónicas. Los vendedores pequeños acceden al mercado global. Tradicionalmente estos mercados que tan sólo han estado abiertos para las multinacionales, se vuelven accesibles a las compañías más pequeñas debido a la escasa cantidad de recursos necesarios para funcionar en el extranjero. Transformación de tiendas de venta al menudeo. El crecimiento de las compras desde el hogar y de la venta directa por parte de los fabricantes provocará una disminución en los precios, y en consecuencia, una reducción de las comisiones. Presión sobre el servicio al cliente, el ciclo de desarrollo y los costos. Aumentará la necesidad de la entrega rápida y directa. La cadena de valor será cada vez menos tolerante con la necesidad de inventarios y almacenamiento. Será inevitable el incremento de la competencia, así como de la necesidad de dinero electrónico. 11. LOS INTERMEDIARIOS El advenimiento de infraestructuras ubicuas de información ha provocado predicciones respecto a que uno de los efectos de los mercados será la eliminación de los intermediarios, basándose en la capacidad de las redes de telecomunicaciones. Sin embargo, la realidad puede ser bien distinta puesto que las tecnologías de la información no sólo reforzarán la posición de los intermediarios tradicionales, sino que además promoverán la aparición de nuevas generaciones de intermediarios. En un mercado tradicional puede considerarse que los intermediarios proporcionan un servicio de coordinación, sin embargo, es necesario definir con mayor precisión esta actividad para identificar como afectará Internet a esta tarea: Búsqueda y evaluación. Un cliente que elige una tienda especializada sobre unos grandes almacenes escoge implícitamente entre dos alternativas de búsqueda y criterios de evaluación. En cualquier caso el cliente delega una parte del proceso de búsqueda del producto en el intermediario, quien también suministra un control de calidad y evaluación del producto. Valoración de necesidades y emparejamiento de necesidades. En muchos casos no es razonable asumir que los clientes posean el conocimiento individual necesario para evaluar fidedignamente sus necesidades e identificar los productos que las cumplirán eficazmente. Por lo tanto los intermediarios pueden suministrar un servicio valioso ayudando a sus clientes a determinar sus necesidades. Proporcionando información no sólo del producto, sino sobre su utilidad, e incluso proporcionando la asistencia explícita de un experto para identificar las necesidades de los clientes, los intermediarios proporcionan a los clientes servicios sobre la evaluación de los productos. Manejo de los riesgos del cliente. Los clientes no siempre tienen la información perfecta y por tanto pueden comprar productos que no satisfagan sus necesidades, en consecuencia en cualquier transacción al detalle el cliente se enfrenta con ciertos riesgos. Estos pueden ser el resultado de una incertidumbre en las necesidades del cliente, un fallo en la comunicación con respecto a las características, o un fallo intencionado o accidental del fabricante al proporcionar un producto adecuado. Otro servicio que proporcionan muchos intermediarios está relacionado con el manejo de este riesgo, suministrando a los clientes la opción de devolver los productos defectuosos o proporcionando garantías adicionales, los intermediarios reducen la exposición de los clientes a los riesgos asociados con los errores de los fabricantes. Si el cliente tiene la opción de devolver los productos por cualquier motivo, el intermediario reduce más la exposición del cliente a los riesgos asociados con los fallos de los clientes para valorar las necesidades con precisión y compararlas con las características del producto. Por lo tanto, eligiendo un intermediario que proporciona estos servicios, los clientes están comprando implícitamente al intermediario un seguro. Distribución de productos. Muchos intermediarios juegan un papel importante en la producción, envasado y distribución de bienes. La distribución es un factor crítico en la determinación del valor de la mayoría de los bienes de consumo. Por ejemplo un litro de gasolina a mil Km del hogar de un cliente frente al que está a un Km es significativamente diferente, debido principalmente a los servicios de distribución proporcionados. Difusión de información sobre productos. Se trata de que el intermediario informe a los clientes sobre la existencia y las características de los productos. Los fabricantes confían en una variedad de intermediarios, incluyendo a las tiendas de venta al menudeo, casas de ventas por correo/catálogo, agencias de publicidad y puntos de venta para informar a los clientes. Influencia sobre las compras. A fin de cuentas, a los fabricantes no sólo les interesa proporcionar información a los clientes, sino vender productos. Además de los servicios de información, los fabricantes también valoran los servicios relacionados con la influencia en las elecciones de compra de los clientes: la colocación de los productos por parte de los intermediarios puede influir en la elección de los mismos, como poder asesorarse explícitamente mediante un vendedor. Esquemas para la compensación de comisiones, pagos por el espacio en estanterías y descuentos especiales son formas en las que los fabricantes ofrecen servicios de asesorías de compras a los intermediarios. Suministro de información. Esta información que es recogida por intermediarios especializados como empresas de investigación de mercados, es utilizada por los fabricantes para evaluar nuevos productos y planificar la producción de los existentes. Manejo de los riesgos del fabricante. El fraude y robo realizado por los clientes es un problema que tradicionalmente ha sido tratado por los detallistas e intermediarios crediticios. En el pasado, estos intermediarios han proporcionado sistemas y políticas para limitar este riesgo. Cuando no podía eliminarse, eran los intermediarios quienes afrontaban la exposición a este riesgo. Integración de las necesidades de los clientes y de los fabricantes. Los intermediarios deben ocuparse de problemas que surgen cuando las necesidades de los clientes chocan con las de los fabricantes. En un entorno competitivo, un intermediario satisfactoriamente integrado proporciona un haz de servicios que equilibra las necesidades de los clientes y de los fabricantes de una forma aceptable para ambos. 11.1 TIPOS A continuación se identifican diversos tipos de intermediarios basados en Internet: 1. Directorios. Ayudan a los clientes a encontrar productos clasificando instalaciones Web y proporcionando menús estructurados para facilitar la navegación. En la actualidad son gratuitos, pero en el futuro podrían ser de pago. Existen tres tipos de directorios: o Generales. Como por ejemplo, Yahoo que proporciona un catálogo general de una gran variedad de diferentes sitios Web. Habitualmente existe un esquema para organizar y o o elegir los sitios que serán incluidos. Estas instalaciones suelen soportar "browsing" así como búsqueda del catálogo mediante palabras clave. Comerciales. Como El Indice que se centra en proporcionar catálogos de sitios comerciales. No proporcionan infraestructura o servicios de desarrollo para los fabricantes, sino que tan sólo actúan como un directorio de instalaciones existentes. También pueden suministrar información sobre una área comercial específica, con frecuencia a empresas que no tienen Web. Estos intermediarios son equivalentes a los editores de guías en papel. Especializados. Están orientados a temas, y son incluso tan sencillos como una página creada por una persona interesada en un tema. Estas páginas pueden suministrar al cliente información sobre un bien o fabricante en particular. 1. Servicios de búsqueda. Similares a AltaVista, proporcionan a los usuarios capacidades para realizar búsquedas basadas en palabras clave sobre grandes bases de datos de páginas o instalaciones Web. 2. Centros comerciales. Son instalaciones que proporcionan una infraestructura al fabricante o al detallista a cambio de una cuota. Pueden estar compuestos de una gran variedad de tiendas que venden múltiples productos. 3. Editoriales. Son generadores de tráfico que ofrecen contenidos de interés para los clientes, que parecen periódicos o revistas interactivas. Las editoriales se convierten en intermediarios cuando ofrecen vínculos con los fabricantes a través de publicidad o listas de productos relacionadas con sus contenidos. 4. Revendedores virtuales. Estos intermediarios existen para vender a los clientes centrándose en productos especializados que obtienen directamente de los fabricantes, quienes pueden dudar en dirigirse directamente a los clientes por temor a alejar a los detallistas de los que dependen. 5. Evaluadores de los sitios Web. Los clientes pueden dirigirse a un fabricante a través de un sitio que ofrece alguna forma de evaluación, lo que puede ayudar a reducir su riesgo. Algunas veces las evaluaciones se basan en la frecuencia de acceso, mientras que en otros casos son una revisión explícita de las instalaciones. 6. Auditores. Tienen funciones similares a las de los servicios de medición de audiencia en medios tradicionales. El comercio electrónico requiere de los mismos servicios adicionales que facilitan el comercio tradicional. Los anunciantes requieren información sobre las tasas de uso asociadas con la publicidad en el Web, así como información fidedigna sobre las características de los clientes. 7. Foros, clubes de aficionados y grupos de usuarios. Estos tipos de instalaciones no son necesariamente intermediarios directos, pero pueden jugar un gran papel al facilitar la retroalimentación entre clientes y fabricantes, así como soportar la investigación de mercados. Los mejores ejemplos de estos grupos son las listas relacionadas con productos que conectan al fabricante con los clientes. 8. Intermediarios financieros. Cualquier forma de comercio electrónico debe permitir alguna manera de realizar o autorizar pagos del comprador hacia el vendedor. Los sistemas de pago podrán ser desde autorización de crédito, cheques electrónicos, pago en efectivo y envío de correo electrónico seguro para autorizar un pago. 9. Redes de trueque. Es posible que las personas cambien un bien o un servicio por otro, en vez de pagarlo con dinero. Aparecerán intermediarios similares a las casas de subastas y bolsas de mercancías para capitalizar estas oportunidades. 10. Agentes Inteligentes. Son programas que mediante un criterio preliminar de búsqueda proporcionado por el usuario, facilitan la localización de recursos a través de Internet, aprendiendo de los comportamientos pasados para optimizar las búsquedas. Esto puede convertirse en un nuevo servicio de intermediación que los clientes adquieren cuando necesitan cierto bien o servicio. 12. CONTRATACION INFORMATICA Bajo la definición de contratación informática, se encuentra la contratación de bienes o servicios informáticos. De esta manera entendemos por contratación informática, aquella cuyo objeto sea un bien o un servicio informático -o amboso que una de las prestaciones de las partes tenga por objeto ese bien o servicio informático. Bienes informáticos son todos aquellos elementos que forman el sistema (ordenador) en cuanto al hardware, ya sea la unidad central de proceso o sus periféricos, así como todos los equipos que tienen una relación directa de uso con respecto a ellos y que, en conjunto, conforman el soporte físico del elemento informático. Asimismo, se consideran bienes informáticos los bienes inmateriales que proporcionan las ordenes, datos, procedimientos e instrucciones, en el tratamiento automático de la información y que, en su conjunto, conforman el soporte lógico del elemento informático. Como Servicios informáticos se entiende todos aquellos servicios que sirven de apoyo y complemento a la actividad informática en una relación de afinidad directa con ella. 12.1 PARTES DE UN CONTRATO INFORMATICO En la contratación informática se ven involucrados varios elementos, a los que podemos denominar complementarios, que se interrelacionan entre sí. Así, distinguiremos entre: contratantes, parte expositiva, cláusulas o pactos y anexos, que se analizan a continuación. 12.1.1 LOS CONTRATANTES No es lo mismo la contratación informática realizada entre profesionales de la informática, que la contratación informática realizada entre un profesional de la informática y un tercero. Por ello, la identificación y situación profesional de los intervinientes reviste gran importancia, debiendo fijar, no solamente quien adquiere cada responsabilidad proveniente de la contratación y a quien representa, sino también que conocimientos o formación profesional, o empresarial, relacionada con el tema objeto del contrato, tiene cada uno debido a la obligación existente, desde la óptica de una buena fe contractual, de informar correctamente a la otra parte y de proporcionar claridad a las cláusulas y obligaciones del contrato. La formación de la voluntad y las responsabilidades de cada una de las partes, tienen una relación con la identificación personal y profesional de las mismas, que la convierten en dato de gran importancia en este tipo de contratos. 12.1.2 PARTE EXPOSITIVA En esta parte se expone, de forma clara y concreta, el por qué y el para qué del contrato. Es importante señalar que dentro de los contratos informáticos es imprescindible fijar de forma sencilla, por que se realiza el contrato y cuales han sido los condicionantes o circunstancias que han movido a las partes a unirse mediante esta relación contractual. Para ello, se fijaran los intereses de cada cual, especificando las necesidades de uno y la oferta del otro; dejando bien claro que es lo que ofrece una parte y que es lo que acepta la otra y debiendo existir una coincidencia real sobre el objeto, o concepto que de el y de su utilidad respecto al fin perseguido, tienen cada una de las partes. Por otro lado es de especial interés establecer claramente el negocio jurídico en el cual luego, de acuerdo con la teoría general para ese negocio en el ordenamiento, se pueda subsumir el caso e interpretar el contrato. 12.1.3 CLAUSULAS O PACTOS Partiremos del principio de buena fe y, estableceremos una "obligación" de colaboración en ambos sentidos; el suministrador debe colaborar con el usuario y, lo que es igual de importante, el usuario debe colaborar con el suministrador. Además, el usuario debe respetar y seguir las directrices que, respecto al bien contratado y su implementación en el circuito de información, le indique el suministrador y, consecuentemente, utilizar el equipo informático o los programas, siguiendo las instrucciones que, para su optima utilización, le señale. El suministrador, por su parte, se exonera de responsabilidad en el caso en que exista una anomalía consecuencia del incumplimiento por parte del usuario de estas instrucciones de funcionamiento o manejo. Estas cláusulas o pactos han de cumplir los siguientes requisitos, aunque son orientativos: Obligaciones de las partes, claras y concisas. El deber de asesoramiento. El cumplimiento del plazo. La formación del usuario. Prohibición de subarrendar. Sustitución del equipo. Definición de términos o conceptos oscuros. El mantenimiento preventivo. Cláusulas de garantía. 12.1.4 LOS ANEXOS Es fundamental que los contratos informáticos vayan acompañados de unos Anexos que incorporados a ellos y con la misma fuerza de obligar, contengan diferentes desarrollos de elementos que forman parte sustancial del contrato. Entre los Anexos tipo, que ayudan a describir el objeto y que siempre deben figurar, en un contrato informático destacan: Especificaciones del sistema a contratar. Especificaciones de los programas a desarrollar. Pruebas de aceptación. Resultados a obtener y que, en algún caso, formaran el propio objeto del contrato. Análisis. 12.2 TIPOS DE CONTRATOS INFORMATICOS Ante la gran diversidad de contratos informáticos que existen en la actualidad, dividiremos su estudio en dos grupos diferenciados. El primero, respecto al objeto, debido a las características especiales de los distintos objetos sobre los que pueden versar estos contratos -ya sea hardware, software, servicios de mantenimiento y formación, o llave en mano- que llevan a la necesidad de su estudio y tratamiento individualizado. El segundo, respecto al negocio jurídico, debido a que los contratos informáticos, más comúnmente realizados, se han llevado a cabo bajo el paraguas protector de una determinada figura jurídica en la que han encontrado acomodo, pero casi todos los casos, ha sido necesario adecuar el objeto del contrato al negocio jurídico realizado. A - POR EL OBJETO Por el objeto del contrato distinguiremos contratos de hardware, contratos de software, contratos de instalación llave en mano y contratos de servicios auxiliares. Contratos de Hardware. En los que hay que conceptuar como hardware todo aquello que, físicamente, forme parte del equipo, considerando como tal, también, a los equipos de comunicaciones u otros elementos auxiliares para el funcionamiento del sistema que se va a implementar. Contratos de Software. Hay que diferenciar en el momento de analizar una contratación de software, si se trata de un software de base o de sistema, o se trata de u software de utilidad, o de aplicación o usuario, ya que este ultimo, debe responder a unas necesidades particulares, las del propio usuario, el que encarga la aplicación, y que, por tanto, tendrán que quedar claramente especificadas en el contrato; sin embargo, el software de base o sistema y el software de utilidad responden a unas características generales que son las del propio sistema o las de la utilidad a la que sirven y es un producto ya conformado de antemano que no se somete a peticiones o particularidades del usuario. Contratos de instalación llave en mano. En los que irán incluidos tanto el hardware como el software, así como determinados servicios de mantenimiento y de formación del usuario. Contratos de servicios auxiliares. Como pueden ser, el mantenimiento de equipos y programas o la formación de las personas que van a utilizar la aplicación respecto a equipos, sistema o aplicaciones. B - POR EL NEGOCIO JURIDICO De acuerdo con el negocio jurídico del contrato, existirán tantos tipos de contratos como negocios jurídicos se realicen sobre este objeto. Así, algunos de los mas utilizados en el campo de la informática son los llamados de venta, de arrendamiento financiero, de alquiler, de opción de compra, de mantenimiento, de prestación de servicios, de arrendamiento de obra, de préstamo, de deposito. De venta. Cuando sea un contrato en el que el suministrador, o vendedor en este caso, se obliga a entregar una cosa determinada, un bien informático, y la otra parte, comprador, a pagar por él a un precio cierto (art. 1445 CC). La venta también puede ser de servicios. De arrendamiento financiero. Mediante el que se requiera que participen tres partes, el suministrador, vendedor, del equipo informático, una entidad o intermediario financiero que compra el bien, para un tercero que es el usuario, y el usuario del bien que lo poseerá, pero lo tendrá en régimen de arrendamiento financiero hasta que haya cumplido con unas determinadas características o requisitos. De alquiler. El arrendamiento sobre bienes informáticos es un arrendamiento tipo de los regulados en el Código Civil, art. 1543 y ss., caracterizado porque el suministrador se obliga a dar al usuario el goce o uso de un bien informático durante un tiempo determinado y por un precio cierto. De opción de compra. Aunque la opción de compra no esta definida en nuestro ordenamiento y solamente se recoge para bienes inmuebles en la legislación hipotecaria (art.14), nuestra doctrina y jurisprudencia la tienen bien delimitada exigiendo que para que exista este tipo de contrato, tienen que darse tres requisitos principales: Respecto al optante, que le debe conceder la decisión unilateral de la realización de la opción de compra. Precio de compraventa, que debe quedar perfectamente señalado para el caso de que el optante decida acceder a dicha compraventa. Plazo del ejercicio de la opción de compra, que debe quedar determinado con claridad en el acuerdo de las partes. De mantenimiento. Puede ser tanto de equipos como de programas, o incluso, mantenimiento integral en el que se puede incluir un servicio de formación, asesoramiento y consulta. De prestación de servicios. En los que incluiríamos análisis, especificaciones, horas maquina, tiempo compartido, programas, etc., que los podíamos calificar como unos contratos de arrendamientos de servicios. El arrendamiento de servicios se da cuando una parte se obliga con la otra a prestarle unos determinados servicios, con independencia del resultado que se obtenga mediante la prestación. De ejecución de obra, consistente en el compromiso de una de las partes, en nuestro caso el suministrador del bien o servicio informático, a ejecutar una obra, y de la otra parte realizar una contraprestación en pago por la obra llevada a cabo. De préstamo, caracterizado porque una parte entrega a otra el bien informático para que use de él durante un tiempo determinado y le devuelva una vez cumplido ese tiempo y de Comodato, consistente en un tipo de contrato de préstamo en el que el suministrador transfiere el uso del bien informático prestado. El Código Civil (art. 1740), se refiere al comodato como un contrato de préstamo, en el que una de las partes entrega a la otra alguna cosa no fungible para que use de ella por cierto tiempo y se la devuelva, indicando que es esencialmente gratuito. En el caso de que se acuerde entre las partes una retribución, deja de ser comodato para pasar a ser un arrendamiento de cosas. De depósito, que se constituye, de acuerdo con lo establecido en el Código Civil (art. 1758), desde que una persona recibe una cosa ajena con la obligación de guardarla y restituirla, siendo un contrato gratuito, salvo pacto contrario (art.1760), pero que en el caso de cumplirse los requisitos establecidos en el Código de Comercio (art.303), se trata de un deposito mercantil, en el que el depositario tendrá derecho a exigir retribución por el deposito, salvo pacto contrario (art.304), con las obligaciones para el depositario de conservación de la cosa, en este caso, del bien informático, de acuerdo con lo establecido en los arts.306 y concordantes del mismo cuerpo legal. La contratación de bienes y la prestación de servicios informáticos no tiene una calificación uniforme que la pueda situar, en cada caso, en un modelo o tipo de contrato de los que figuran en nuestro ordenamiento. Los contratos informáticos están formados por elementos dispares que exigen la mezcla o unión de dos o más tipo de contratos para poder configurar sus características, siendo su objeto múltiple y diversificado, pudiendo darse multitud de figuras que desequilibrarían cualquier relación tipo que se pueda pensar. Todo ello debido a la pluralidad de las partes que intervienen y la dispersión de intereses entre ellas, así como a la particularidad de determinadas cláusulas que forman parte de este tipo de contratos. Asimismo el desconocimiento por el usuario, en términos generales, de las posibilidades y limites de la informática, hace que no todo en el contrato pueda estar basado en el ya mencionado principio de la autonomía de la voluntad de los contratantes. En muchas ocasiones, son contratos de adhesión, en los que una de las partes fija las cláusulas del contrato y lo otra se adhiere a las mismas, sin tener posibilidad de modificar ninguna de ellas. Estos contratos de adhesión son producto de la contratación en masa que, frecuentemente, violan los derechos de los consumidores de bienes y servicios informáticos por el gran desequilibrio que se produce al faltar la emisión libre de voluntad por una de las partes en la fijación de las cláusulas del contrato. En algunos casos, como el de las conocidas contrataciones llave en mano, seria adecuada la aplicación de la teoría del resultado en le contratación informática, en un claro arrendamiento de obra. Ahora bien, ello implica que los resultados se especifiquen en el contrato definiendo cuales son, dentro de unos limites razonables, o dicho de ora forma, cuando la función básica de tratamiento de la información sea cumplida aunque se puedan dar algunos comportamientos de la misma que, sin tener gran carga sobre la aplicación, no sean los adecuados o adolezcan de algunos errores o fallos. En definitiva la contratación informática, en general, adolece de determinadas características que la hacen extremadamente complicada en la redacción de los contratos y en la fijación de los derechos y obligaciones de las partes. A ello hay que añadir a inexistencia de una normativa adecuada a los mismo y la dificultad en la fijación del objeto cuando son contratos complejos. Es por ello, que se deben redactar teniendo en cuenta un equilibrio de prestaciones y evitar en lo posible la existencia de cláusulas oscuras. A continuación adjuntamos un ejemplo de los contratos informáticos más extendidos y utilizados en la actualidad. CONTRATO "LLAVE EN MANO" DE CESION DE USO DE PRODUCTOS INFORMATICOS Entre: Domicilio: CIF: A continuación denominado el USUARIO Y EMPRESA a continuación denominado el FABRICANTE, con CIF X-999999. Y domicilio social en: La calle de la empresa, Zaragoza. Se convienen las CLAUSULAS que a continuación se mencionan: PRIMERA. OBJETO DEL CONTRATO El FABRICANTE concede al USUARIO una licencia de uso de productos informáticos (en adelante denominado el PRODUCTO), descrito en el ANEXO I que forma parte de este contrato; esta licencia de uso no tiene el carácter de exclusiva y será intransferible. El PRODUCTO será instalado en una sola unidad central, propiedad del Usuario. El FABRICANTE se compromete a prestar al USUARIO los siguientes servicios, tal y como se definen en las cláusulas de este contrato: Instalación del producto y soporte correspondiente. Documentación del producto. Soporte del producto. SEGUNDA. USO DEL PRODUCTO El producto que se define en el ANEXO correspondiente, esta diseñado para funcionar como se describe en la documentación entregada con el mismo. El inicio del uso del PRODUCTO sea considerado desde la fecha de su recepción por el USUARIO. Esta fecha se denominara en adelante FECHA DE INICIO. TERCERA. INSTALACION Y SOPORTE Se entiende por INSTALACION las acciones realizadas por el FABRICANTE para que el PRODUCTO pueda ser utilizado por el USUARIO en el Hardware designado. En el momento de la INSTALACION se entregara al usuario la documentación correspondiente del PRODUCTO en igual cantidad al numero de licencias contratadas. Para cada subsistema se recibirá formación técnica y asesoría en las cuestiones relacionadas con el producto, también de adaptación paramétrica. CUARTA. COPIAS ADICIONALES Se entiende por LICENCIA ADICIONAL cualquier nueva instalación de los PRODUCTOS. El USUARIO que necesite una LICENCIA ADICIONAL deberá requerirlo por escrito al FABRICANTE. Las LICENCIAS ADICIONALES se especifican en sucesivos ANEXOS al presente contrato. Para las siguientes licencias de uso se establece un descuento del 25% sobre el precio de la primera. QUINTA. GARANTIA El PRODUCTO goza de una garantía de 60 días, contados a partir de la FECHA DE INICIO. Esta fecha resultante, se denominara FECHA EFECTIVA para el SOPORTE. Caso de la instalación de varios subsistemas en distintas fechas se establecerá una garantía por subsistema a partir de la cual se iniciara el SOPORTE, que deberá contratarse aparte. Durante el periodo de GARANTIA, el USUARIO contara con un soporte telefónico que de forma razonable cubrirá las incidencias presentadas. El interlocutor del USUARIO debe tener información suficiente de operatoria del PRODUCTO. La GARANTIA asegura el cumplimiento de las especificaciones del PRODUCTO. Si así no ocurriese y siempre que los fallos no se deban al mal uso o negligencia del USUARIO se procederá a su corrección o reemplazo. Dentro de la garantía no quedan incluidos los gastos que puedan originarse como consecuencia del envío de material, de desplazamientos al domicilio del usuario y demás gastos suplidos, que serán siempre por cuenta del usuario. Una vez transcurrido el periodo de garantía, el USUARIO se responsabiliza de la verificación de la idoneidad de los productos con licencias contratados para alcanzar los resultados adecuados. Cualquier modificación, alteración o ampliación de cuantas especificaciones se contemplan en este contrato y sus correspondientes ANEXOS, se entenderán excluidas de los mismos, y, consiguientemente, en caso de que por acuerdo mutuo sean considerados cambios o modificaciones necesarios para la viabilidad de los extremos pactados en este documento, deberán ser contemplados en otro aparte que será ampliación del presente contrato. SEXTA. CONFIDENCIALIDAD A causa de la naturaleza confidencial del PRODUCTO el USUARIO queda obligado a no vender, alquilar o poner a disposición de terceros el PRODUCTO o cualquier información confidencial relacionada con el PRODUCTO. El USUARIO reconoce y declara que el PRODUCTO suministrado por el FABRICANTE y cualquier copia del mismo son y seguirán siendo propiedad del FABRICANTE o de la firma representada por el FABRICANTE, declarando expresamente esta propiedad en cualquier copia, total o parcial, realizada por el USUARIO en desarrollo y conformidad con lo acordado en este contrato. El FABRICANTE por su parte se obliga a no divulgar o utilizar, sin consentimiento previo, información perteneciente al USUARIO considerada como confidencial. SEPTIMA. TRANSMISION DE OBLIGACIONES, NULIDAD DE CLAUSULAS. Las obligaciones del USUARIO y del FABRICANTE, contraídas por el presente contrato, se transmitirán a los respectivos sucesores o apoderados y a cualquier otra entidad en la que cualquiera de las partes pueda incorporarse o fusionarse de manera permanente o accidental. Los contratantes declaran que consideran las cláusulas del presente contrato independientes, por lo que la nulidad de una de ellas no origina la nulidad ni de la totalidad del presente contrato, ni de las demás acordadas. OCTAVA. RESPONSABILIDADES E INDEMNIZACIONES. El FABRICANTE no será responsable de los retrasos en la ejecución de las obligaciones derivadas de este contrato o interrupción del servicio, cuando estos sucedan por causas ajenas a su voluntad y no le sean imputables. El FABRICANTE no se hace responsable de las perdidas o daños sufridos por el USUARIO, sus empleados o clientes, directamente o indirectamente originados por errores en los programas, su documentación, la operación de los programas o el uso de un hardware no autorizado por el FABRICANTE. En el caso de que el FABRICANTE se disolviera por el motivo que fuera, se compromete a depositar las fuentes del PRODUCTO ante un Notario ejerciente de los de su ciudad para que el USUARIO, pueda cubrir sus necesidades relativas a ellos, según las tarifas vigentes en esas fechas. NOVENA. ARBITRAJE. Para cualquier divergencia del presente contrato, ambas parte se someten expresamente, y con renuncia a su fuero propio, a la decisión del asunto o litigio planteado, mediante el arbitraje institucional de ARBITEC, Asociación Española de Arbitraje Tecnológico, a la cual encomiendan la administraron del arbitraje y la designación de los árbitros. El arbitraje se realizara conforme al procedimiento establecido en el Reglamento Arbitral de ARBITEC y en la Ley de Arbitraje, de 5 de diciembre de 1988. El laudo arbitral deberá dictarse durante los noventa días siguientes a la aceptación del cargo por parte de los árbitros designados, obligándose ambas partes a aceptar y cumplir la decisión contenida en él. Para el caso en que arbitraje no legara a realizarse por mutuo acuerdo o fuese declarado nulo, ambas partes se someten a los Juzgados y Tribunales de Zaragoza con renuncia a u propio fuero si este fuese otro. DECIMA. ACTUALIZACION. En el caso de que alguna o algunas de las cláusulas del contrato pasen a ser invalidas, ilegales o inejecutables en virtud de alguna norma jurídica, se consideraran ineficaces en la medida que corresponda, pero en lo demás, este contrato conservara su validez. Las partes contratantes acuerdan sustituir la cláusula o cláusulas afectadas por otra u otras que tengan los efectos económicos más semejantes a los de las sustituidas. Este contrato y sus correspondientes anexos reemplazan a cualquier otro compromiso o anexo establecido anteriormente sea verbalmente o por escrito, que se refiera al mismo producto que en ellos se mencionan. Y para que así conste, y en prueba de conformidad y aceptación al contenido de este escrito, ambas partes lo firman por duplicado y a un solo efecto en la fecha y lugar indicados en el encabezamiento. EMPRESA EL USUARIO Por: Por: Cargo: Cargo: Firma: Firma: Fecha:Fecha: ANEXO CONTRATO "LLAVE EN MANO" DE CESION DE USO DE PRODUCTOS INFORMATICOS. ANEXO I DESCRIPCION PRODUCTOS / MODULOS NUMERO DE LICENCIAS IMPORTE HORAS INST. SOP. TOTAL (IVA no incluido) Este Anexo forma parte del CONTRATO DE CESION DE USO DE PRODUCTOS INFORMATICOS Núm. XXX/xcxxxxxx y esta sujeto a los términos que en el mismo figuran. CONDICIONES DE PAGO COMERCIAL, PRIMAS Y PRODUCCION 30% a la aceptación del pedido. 40% a la aceptación de cada modulo. 30% a la aceptación de la instalación de todos los módulos. GESTION DE PERSONAL Y AREA ECONOMICO-FINANIERA 30% a la aceptación del pedido. 70% a la puesta en marcha de cada modulo. DOMICILIACION BANCARIA. Las facturas de EMPRESA, serán presentadas al cobro. El USUARIO se compromete a atenderlas a través de: BANCO: SUCURSAL: DIRECCION: NÚM. CTA.: EMPRESA EL USUARIO Por: Por: Cargo: Cargo: Firma: Firma: 13. EL PAGO POR INTERNET No cabe duda que uno de los elementos fundamentales en el comercio en general y en el comercio electrónico en particular, es la realización del pago correspondiente a los bienes o servicios adquiridos. En este ámbito el comercio electrónico presenta una problemática semejante a la que plantea en otros sistemas de compra no presencial, es decir, en aquella en la que las partes no se reúnen físicamente para realizar la transacción, como por ejemplo en la compra por catálogo o telefónica: El comprador debe tener garantía sobre calidad, cantidad y características de los bienes que adquiere. El vendedor debe tener garantía del pago. La transacción debe tener un aceptable nivel de confidencialidad. En ocasiones, se entiende que para garantizar estos hechos, comprador y vendedor deben acreditar su identidad, pero realmente sólo necesitan demostrar su capacidad y compromiso respecto a la transacción. De esta manera cada vez más sistemas de pago intentan garantizar la compra "anónima". En el comercio electrónico se añade otro requerimiento que generalmente no se considera en otros sistemas de venta no presencial, aún cuando existe: El comprador debe tener garantía de que nadie pueda, como consecuencia de la transacción que efectúa, suplantar en un futuro su personalidad efectuando otras compras en su nombre y a su cargo. Se observa que al tratar los medios de pago en el comercio electrónico, se abordan fundamentalmente los temas de seguridad, garantía y acreditación. Aún queda un requerimiento respecto a los medios de pago de cualquier tipo de comercio: El costo por utilizar un determinado medio de pago debe ser aceptable para el comprador y el vendedor. Al igual que cuando se utiliza una tarjeta de crédito para pagar en una tienda, el comerciante acepta el pago de un porcentaje sobre el importe de la compra a cambio del mayor número de ventas que espera realizar aceptando este medio de pago; los medios de pago asociados al comercio electrónico suelen conllevar un costo que los puede hacer inapropiados o incluso inaceptables para importes pequeños, los denominados micropagos. Para realizar estos micropagos los sistemas suelen ser de uno de estos dos tipos: 1. 2. El comprador adquiere dinero anticipadamente (prepago) para poder gastarlo en pequeños pagos. El comprador mantiene una cuenta que se liquida periódicamente y no transacción a transacción. Este sistema se utiliza frecuentemente para el acceso a pequeñas piezas de información de pago, como por ejemplo, artículos de la prensa económica. En el comercio electrónico pueden distinguirse dos tipos de medios de pago: Medios de pago tradicionales, utilizados en cualquier tipo de transacción comercial, electrónica o no. Por ejemplo: Contrarrembolso. Es el único medio de pago utilizado en el comercio electrónico que implica la utilización de dinero en efectivo. Hoy día es uno de los medios de pago preferidos por el consumidor en general, pues garantiza la entrega de los bienes antes del pago. Desde el punto de vista del vendedor este medio de pago conlleva dos inconvenientes fundamentales: el retraso del pago y la necesidad de recolectar físicamente el dinero por parte de quien realiza la entrega. Cargos en cuenta (domiciliación). Suele emplearse para cargos periódicos o suscripciones, por ejemplo, el Boletín Oficial del Estado. Tarjeta de débito y de crédito. Son el medio más popular y tradicionalmente usado en el comercio electrónico. Para el comprador supone el pago al momento de realizar la transacción (débito) o a posteriori, con o sin devengo de intereses (crédito). Para el vendedor, suponen un cobro rápido, a cambio de una comisión que le descuenta el banco. Medios de pago específicos, para el nuevo entorno del comercio electrónico, especialmente Internet. Por ejemplo: Tarjeta de crédito o débito, sólo utilizable para el comercio electrónico. Su uso es escaso. Intermediarios electrónicos para sistemas basados en tarjetas de crédito tradicionales: CyberCash. First Virtual. Moneda electrónica En cualquiera de los casos, los medios de pago utilizados pueden ser de pago anticipado (prepago o "pay before"), inmediato ("pay now") o posterior ("pay after"). Tarjetas de crédito y débito Ampliamente usadas hoy en día como medio de pago en el comercio electrónico, las tarjetas de crédito y débito tradicionales han permitido la realización de transacciones comerciales en el nuevo medio a través de la utilización de los procedimientos de liquidación y pago preestablecidos. Si se realiza una compra en Internet utilizando una tarjeta de crédito como medio de pago, la transacción comercial se ordena en la red, pero la validación y la realización efectiva del pago se efectúa a través de los circuitos tradicionales de procesamiento de operaciones con tarjeta de crédito.En el esquema más general, intervienen en este proceso los siguientes actores: El comprador. El vendedor ("merchant"). El banco emisor ("issuer") de la tarjeta de crédito o débito que presenta el cliente. El banco que en nombre del vendedor recibe la transacción ("acquirer") y en el cual reside la cuenta en la que a éste se le va a liquidar el pago. La red de medios de pago ("scheme") como VISA o MasterCard. El proceso de pago es como sigue: 1. 2. 3. 4. Una vez realizado el pedido, el comprador proporciona su número de tarjeta al vendedor a través de la red. El centro servidor donde reside el vendedor envía la transacción al banco "acquirer" o directamente a la red de medios de pago. Este envío suele producirse fuera de la red pública y se realiza de forma análoga a como se efectuará desde una terminal punto de venta (TPV) físico que existiese en una tienda real. El banco receptor pide autorización al banco emisor a través de la red de medios de pago. Si la transacción se autoriza, la liquidación del pago (transferencia de dinero desde la cuenta del comprador en el banco emisor hasta la cuenta del vendedor en el banco receptor) se realiza a través de la red tradicional de medios de pago. Como puede observarse el punto crítico de este proceso se produce cuando el comprador envía su número de tarjeta al vendedor a través de una red pública potencialmente insegura como Internet.El estándar que se utiliza en Internet para asegurar esta transferencia da datos es el SSL (del Inglés, Secure Sockets Layer).Para la realización de una transacción utilizando SSL se requiere de dos elementos: 1. 2. 3. 4. 5. 6. 7. Que el vendedor se haya certificado con una organización reconocida por las partes, lo que supone un procedimiento administrativo y el pago de unas tarifas de alta, así como la renovación de tal certificación. Que el comprador utilice un visor o navegador ("browser") compatible como SSL. Con el uso del SSL: El comprador tiene garantía de que el vendedor es quien dice ser y que, por tanto, no está entregando su número de tarjeta a un posible impostor. La información que envía el comprador se cifra, impidiendo el acceso a la misma por alguien distinto al vendedor. Se garantiza la no-manipulación de los datos entre el comprador y el vendedor. La versión 3 de SSL permite la autenticación del comprador, que debe recibir sus claves previamente de una autoridad de certificación. Lo que SSL no garantiza es el aspecto económico de la transacción, de tal manera que sólo con proporcionar un número de tarjeta válido con saldo suficiente cualquier persona podría intentar comprar electrónicamente de forma fraudulenta, sobre todo si no existe una entrega física de los bienes en sí con una autoridad de certificación. Ante esta limitación, en 1995 se constituyeron dos grupos de trabajo liderados respectivamente por VISA y MasterCard, que comenzaron a definir dos estándares incompatibles para asegurar las transacciones dentro de Internet. Afortunadamente, a principios de 1996 debido a la presión del mercado (consumidores, vendedores, y fabricantes de tecnología) ambos grupos se fusionaron para la definición del estándar SET (Secure Electronic Transactions) en el que participan además de VISA y MasterCard, empresas como Microsoft, Netscape, IBM, Terisa, GTE, SAIC, VeriSign y otras compañías tecnológicas. SET resuelve las siguientes necesidades: 1. 2. 3. 4. 5. Confidencialidad de los datos, tanto económicos, como respecto a la naturaleza de los bienes comprados. Integridad de los datos en la transacción, sin la posibilidad de modificaciones intermedias. Autenticación del comprador como legítimo usuario de un medio de pago. Autenticación del comercio como poseedor de una cuenta de liquidación con un banco vendedor. Compatibilidad entre múltiples plataformas "hardware" y "software". Antes de poder realizar una transacción SET, el cliente debe poseer un medio de pago y recibir un certificado de la institución financiera emisora que incluye la firma digital de esa institución y una fecha de expiración. De igual manera, cada comercio debe también certificarse con la institución financiera donde posee la cuenta de liquidación. Así, cada uno de los agentes (comprador, vendedor, banco emisor, banco adquirente) de una transacción posee una firma digital emitida por una autoridad de certificación SET. Tarjetas chip En pleno desarrollo, las tarjetas chip o tarjetas inteligentes son aquellas que poseen una capacidad de almacenar información en un chip que incorporan. Fundamentalmente esta información suele ser: Una identificación que incluye determinadas claves cifradas. Una cantidad de dinero disponible. Antes de comprar es preciso cargarlas con dinero a través de un cajero automático. Tras realizar esta operación funcionan como si contuvieran dinero en efectivo ("cash"). Este tipo de tarjetas son ideales para realizar micropagos, tanto en el comercio del mundo físico como en el virtual. No obstante, su utilización en el comercio electrónico requiere de un dispositivo conectado a la computadora personal, un módem o línea de teléfono que permita su lectura y actualización al realizar transacciones por la red. En contrapartida, la existencia de "inteligencia" local posibilita su utilización para múltiples aplicaciones: cupones de descuento, aplicaciones de fidelización y almacenamiento de datos específicos del cliente. Cybercash Procedente de la compañía Verifone, especializada en terminales punto de venta, Cybercash es un sistema de realización de transacciones en Internet mediante el uso de tarjetas de crédito. Una vez realizada la compra, el comprador envía sus datos cifrados al vendedor. Este añade sus propios datos que lo identifican y solicita autorización a CyberCash. A partir de aquí, CyberCash se comunica con la red tradicional de medios de pago, y una vez obtenida la autorización de la transacción, se la pasa al comercio. CyberCash tiene una fortaleza basada en la emisión de más de 400,000 carteras de clientes y la conexión con el 80% de los bancos estadounidenses pero puede verse seriamente afectada por la puesta en marcha de SET, que reduciría sensiblemente el valor añadido de esta solución, por lo que está intentando adaptarse al nuevo estándar. First Virtual First Virtual (FV) es un sistema de pagos operado por First USA y EDS, basado en el mantenimiento de cuentas virtuales de clientes que se liquidan periódicamente contra tarjetas de crédito. Cada posible comprador debe darse previamente de alta, recibiendo un número de identificación personal (NIP) sólo utilizable en transacciones por Internet. Al hacer cada transacción, el comprador envía su NIP por correo electrónico al vendedor, el cual lo comprueba contra FV. Una vez realizada la operación de compra, FV solicita a través de correo electrónico la aceptación del comprador, por lo que no se precisa ningún elemento de cifrado para proteger los mensajes, y procede a realizar el cargo en la cuenta. FV se convierte así en un centro de compensación independiente de los bancos tradicionales y al liquidar las operaciones periódicamente, posibilita el uso de este medio para micropagos. 14. ASPECTOS TRIBUTARIOS Las autoridades deben prever que el comercio electrónico no socave la capacidad del Gobierno para recaudar los ingresos públicos vía tributación. Asimismo, los principios de tributación que rigen a los gobiernos en relación con el comercio tradicional deberían adecuarse para su aplicación a esta nueva vía de comercialización. La relación existente entre la jurisdicción tributaria y el comercio electrónico no es tan sencilla como se puede imaginar, dado que el término "comercio electrónico" reúne transacciones muy diversas, tanto en sus contenidos como en los sujetos intervinientes, incluso en la forma de su ejecución, pues la transacción puede concluirse y realizarse a través de la propia Web "on line" o por medio de otros medios "off line" como ser correo electrónico. En Argentina, las operaciones de comercio electrónico se encuentran alcanzadas por los gravámenes que integran el sistema tributario argentino, entre ellos, el Impuesto al Valor Agregado. No obstante ello, se ha estimado conveniente evaluar su impacto para determinar si y en qué medida la legislación en vigor debería ser adaptada. A mediados de 1998 se creó en el ámbito del Ministerio de Economía y Obras y Servicios Públicos, un Grupo de Trabajo sobre Comercio Electrónico y Comercio Exterior, en el cual participaron distintos sectores del gobierno relacionados con el tema. El objetivo de este Grupo fue examinar las implicancias de las distintas modalidades del comercio electrónico en la República Argentina y los requerimientos que ellas plantean en materia de políticas públicas, partiendo de la premisa de que a las transacciones electrónicas deberían aplicarse los mismos principios de imposición que rigen respecto del comercio tradicional: (neutralidad, eficiencia, seguridad y simplicidad, eficacia e imparcialidad y flexibilidad). El citado Grupo se encontraba dividido en cinco subgrupos de trabajo temáticos a saber: comercial, legal, tributario, financiero y tecnológico. Debe destacarse que al Subgrupo de Asuntos Tributarios le correspondió la tarea de analizar el impacto en la recaudación fiscal como consecuencia del avance de las operaciones de comercio electrónico. En tal sentido, dicho subgrupo se abocó, en primer término, al estudio del fenómeno de la elusión y la evasión tributaria como factor de distorsión del comercio electrónico, así como la situación impositiva y aduanera de los bienes intangibles y los servicios, todo esto en el marco de la legislación vigente y de los compromisos internacionales asumidos. El Subgrupo de Aspectos Tributarios efectuó un análisis del comercio electrónico y de las distintas modalidades de imposición, destacándose que resulta sumamente importante la distinción entre comercio electrónico directo e indirecto. Ello en virtud de que, el primero involucra bienes inmateriales que se trasmiten por la red, mientras que el segundo, no guarda diferencia alguna con las ventas telefónicas. En atención a ello, se consideró necesario definir adecuadamente cada uno de los contratos involucrados a efectos de establecer el tratamiento impositivo a dispensarles. Bajo ese entendimiento, su informe aclara que se debe distinguir en primer lugar si el comprador es un sujeto individual o una empresa, para seguidamente analizar cada tipo de transacción en particular. Así pues, en el caso de que el adquirente sea una persona física y el producto digitalizado sea destinado a su consumo personal, se estará ante una prestación de servicio, pudiendo presentarse en el Impuesto al Valor Agregado las siguientes alternativas: a) Operación efectuada con un prestador del exterior: en este caso la transacción no se encuentra alcanzada por el impuesto. b) Operación efectuada por un prestador local a un no residente: la operación se encuentra gravada a tasa 0. c) Operación efectuada con un prestador local: la misma se encuentra sujeta al tributo. En cuanto a las transacciones realizadas con empresas, sean éstas personas jurídicas o empresas unipersonales, corresponderá analizar cada contrato en particular para tipificar adecuadamente el mismo. En particular, pueden presentarse los siguientes casos: A) Transmisión de Software. En este caso se debe distinguir el objeto del contrato a fin de determinar si se está en presencia de una licencia de uso o una licencia de explotación. En el primer caso, la operación recibirá el tratamiento de una prestación de servicios, mientras que en el segundo caso se le dispensará el tratamiento de explotación de derechos de autor. Tratándose de una licencia de uso, se pueden presentar diversas alternativas las que merecerán el siguiente tratamiento en el Impuesto al Valor Agregado: Operación efectuada con un prestador del exterior: en este caso la transacción está alcanzada por el impuesto, siempre que el prestatario no sea un sujeto exento o no alcanzado por el impuesto. Operación efectuada con un prestador local: la misma se encuentra sujeta al impuesto. Por el contrario, si se tratara de una licencia de explotación, dicha transacción se encuentra fuera del objeto del Impuesto al Valor Agregado. En este caso no resultaría aplicable la previsión contenida en el último párrafo del artículo 3º de la ley del gravamen, por cuanto los derechos cedidos difícilmente se relacionarían con una prestación gravada, en el sentido entendido por el dispositivo legal. B) Transmisión de información digitalizada (ejemplo música, libros, acceso a base de datos, etc.). Al igual que en el caso anterior, se deberá distinguir el destino dado al producto. Así, en caso de uso, se estará ante una prestación de servicios, mientras que si la transmisión está destinada a permitir la reproducción del bien, existirá transferencia de derechos de autor, pudiendo éstos ser acompañados o no de transferencia de marca. C) Transferencia de información técnica (ejemplo planos, fórmulas, etc.) En estos casos, independientemente del destino dado al intangible, se estará ante una transferencia de tecnología, no resultando la operación alcanzada por el Impuesto al Valor Agregado. D) Locación de espacios publicitarios en sitios de la red. El informe señaló que otro negocio que puede ser explotado a través de una red es la locación de espacios publicitarios en los llamados sitios Web. Una vez desarrollado el sitio Web, sus propietarios pueden ceder espacios publicitarios a aquellas empresas interesadas en dar a conocer sus productos o realizar publicidad institucional en Internet. De esta manera, se genera la aparición de un negocio similar a la publicidad en los medios habituales de comunicación. A fin de establecer la imposición aplicable a los servicios de publicidad prestados por propietarios de sitios Web, corresponde señalar que en el inciso b de su artículo 1º de la Ley de Impuesto al Valor Agregado, se incluye dentro del objeto del impuesto "... las prestaciones de servicios... realizadas en el territorio de la Nación". En este sentido, la norma dispone que en el caso de las telecomunicaciones internacionales, "... se las entenderá realizadas en el país en la medida en que su retribución sea atribuible a la empresa ubicada en él". Al respecto, el Grupo de Trabajo se expidió en el sentido de que dicha norma podría ampliarse con la finalidad de incluir las prestaciones realizadas a través de sitios Web, debiendo establecerse en qué casos debería considerarse la existencia de exportación e importación de servicios. A tales efectos, y de acuerdo con la ley del tributo, se deberá dilucidar si el servicio es utilizado económicamente en el territorio nacional, por lo que se estimó necesario incorporar como presunción legal que el servicio será utilizado en el territorio nacional si la empresa prestataria es residente en el país. Caso contrario, el servicio constituirá una exportación de servicio. El informe comentado finaliza afirmando que la normativa actual del impuesto al valor agregado en lo atinente a las definiciones de objeto y sujeto resulta comprensiva de las transacciones efectuadas electrónicamente, sin perjuicio de destacar la ausencia de algunos elementos constitutivos del hecho imponible. Atento a ello, se estimó conveniente sugerir la incorporación en la Ley del Impuesto al Valor Agregado, de disposiciones legales referidas al momento de nacimiento de la obligación tributaria y su base de cálculo. Asimismo, y en relación con la locación de espacios publicitarios en la red, se estimó conveniente sugerir el dictado de los supuestos legales, relativos a la utilización efectiva de los servicios en el impuesto al valor agregado. Unidad 4. Microcontroladores. Qué es un Microcontrolador Muchos de los sistemas digitales pueden diseñarse empleando procesadores o microcontroladores, la selección del dispositivo depende del tipo de aplicación y la diferencia básica que existe entre estos dos dispositivos se explica a continuación: o o Los procesadores son empleados para procesar información. A manera de ejemplo, con un procesador se podría hallar todas las personas en Bogotá entre edades de 15 y 30 años, de sexo femenino, y ordenados por el Apellido. Los procesadores usan un conjunto de instrucciones útiles para procesar datos, lo cual los hace muy versátiles para manejar información. Los microcontroladores son utilizados como su nombre lo indica para controlar. Son muy utilizados para implementar controles automáticos. Como ejemplo, un microcontrolador puede sensar la temperatura de un proceso, compararla con un valor almacenado en memoria y tomar la decisión de encender un equipo de calefacción si la temperatura baja de cierto valor, y además de ello mostrar el valor en un display. Los microcontroladores generalmente tienen instrucciones especiales que permiten controlar procesos como el indicado anteriormente y otros más complejos; todo depende de la habilidad del programador para generar el código para manejar el proceso. Un microcontrolador es simplemente un procesador con memoria ROM y RAM, puertos de E/S y otros dispositivos de propósito especial como conversores A/D, contadores, temporizadores y puertos de comunicación, o en otras palabras es un microcomputador con funciones especiales. En la figura 11.7.1 se indica la estructura interna típica de un microcontrolador. Figura 11.7.1. Estructura típica de un microcontrolador Estos dispositivos generalmente incluyen variedad de funciones especiales que se pueden utilizar gracias a los dispositivos internos incluidos dentro de ellos. Entre las características mas relevantes de un microcontrolador, se pueden enunciar las siguientes: La memoria de programa generalmente es una Flash o EEPROM. Tiene puertos de Entrada y Salida (Configurables por o software). Poseen contadores de propósito especial. Tiene incluido un reloj del sistema que permite o o contabilizar tiempo. o o o o Algunos modelos incluyen conversores A/D. Tiene Memoria EEPROM para almacenar datos. Tiene puerto de comunicaciones. Manejan velocidades de operación hasta 20 MHz. Algunos de estos dispositivos tienen puerto de o comunicaciones serial. o o o Tienen entradas para interrupción. La programación es rápida. Las herramientas de desarrollo son económicas y se encuentran disponibles en a red, las cuales incluyen el ensamblador y simulador. Los microcontroladores se pueden encontrar en varias aplicaciones que se relacionen con medida, almacenamiento, control, cálculo entre otras. También se pueden encontrar dentro de los teclados, módems, impresoras y otros periféricos. Como se puede notar los microcontroladores son dispositivos muy versátiles que pueden ser utilizados en muchas aplicaciones, donde todo el potencial se encuentra en la programación. Como seleccionar un microcontrolador Dentro de cada familia de dispositivos, usted encontrará normalmente una selección de varios microcontroladores dependiendo de los dispositivos internos que tenga disponibles, y la capacidad de memoria de programa y datos. Los microcontroladores también se especifican por la cantidad de bits que pueden procesar por unidad de tiempo. Un número alto de bits indica que se trata de un dispositivo rápido y de altas prestaciones. Los microcontroladores de 8 bits son muy populares y se emplean en proyectos simples, sin embargo se encuentran arquitecturas que manejan hasta 32 bits, para aplicaciones más complejas. El consumo de potencia es otra especificación que se debe tener en cuenta, sobre todo para sistemas alimentados por baterías. Los Chips normalmente son fabricados con tecnología CMOS debido al consumo bajo que ofrece. Algunos de estos dispositivos CMOS tienen disponible un estado de espera o modo "sleep", como el de los compuatdores cuando se suspenden, el cual limita el consumo de corriente en unos cuantos microamperios cuando los circuitos se encuentran inactivos. Usando este modo de funcionamiento, el consumo de potencia puede ser reducido cuando se da espera a la entrada de datos durante la ejecución de un programa. Microcontroladores disponibles en el mercado En esta sección se describen algunos microcontroladores populares que pueden ser empleados para infinidad de aplicaciones. Lo más recomendable en la selección de un microcontrolador es tener disponible un buen juego de herramientas de desarrollo y que su costo no sea tan elevado, además de ello también es importante tener acceso a la documentación del dispositivo para conocer su arquitectura y funciones. Para iniciarse en la programación de estos dispositivos generalmente son recomendables los microcontroladores de INTEL, MOTOROLA y MICROCHIP entre otros, de los cuales se consiguen con facilidad sus herramientas de desarrollo y documentación. A continuación de dará una breve descripción de los dispositivos de cada una de estas Marcas. FAMILIA 805X, 80186 - INTEL Los microcontroladores de la serie 8051, son la segunda generación después del 8048. Este dispositivo es muy poderoso y fácil para programar. Tiene arquitectura Harvard, es decir, que los la memoria de datos y programa se encuentran por separado en su estructura. La memoria del programa es de 64K y la memoria de datos es de 128 bytes y 256 bytes para los 8052. Hay disponible gran cantidad de software de desarrollo para los microcontroladores de esta familia que puede ser encontrado en Internet. La tercera generación de estos microcontroladores son los de la familia 80C196, los cuales manejan palabras de 16 bits. Entre las principales características de estos dispositivos se pueden enumerar las siguientes: efectúan operaciones de multiplicación y división el hardware multiplica y divide, 6 modos de direccionamiento, Sistema de E/S de alta velocidad, Conversor A/D, módulo de comunicación serial, 8 fuentes de interrupción, generador de PWM, Watchdog Timer. Existe también el microcontrolador 80386 EX, el cual tiene toda la potencialidad de un procesador 80386 pero con dispositivos adicionales que lo convierten en un microcontrolador muy potente y versátil. Este dispositivo tiene puerto serial, modos de ahorro de energía, contadores y temporizadores, memoria DRAM y fuentes de interrupción. FAMILIA 68HC11 - MOTOROLA El 68HC11 es un microcontrolador de 8 bits. Este microcontrolador tiene bus de direcciones interno de 16 bits con un juego de instrucciones similar al de sus predecesores de las familias 6801, 6805 y 6809. La arquitectura de estos microcontroladores es Von-Newman, es decir, que las direcciones y los datos comparten el mismo espacio en memoria. Dependiendo de la variedad, los 68HC11 tienen EEPROM incorporada, RAM, entradas y salidas digitales, temporizadores, conversor A/D, generador de PWM, contadores de pulsos, puerto de comunicaciones seriales sincrónicas y asincrónicas, entre otras funciones. PIC16C - MICROCHIP Los microcontroladores de Microchip fueron los primeros dispositivos RISC. RISC significa que el dispositivo tiene un número reducido de instrucciones, lo cual implica simplicidad en su arquitectura y bajo costo. Aunque estos microcontroladores tienen pocas instrucciones (33 para el PIC16CXX) en la actualidad son muy utilizados por su facilidad de programación y costo reducido. Estos dispositivos son de arquitectura Harvard, por lo cual teien buses de datos y direcciones separados. Los beneficios que tiene este dispositivo frente a los demás es su sencillez, lo cual permite fabricarlo en chips muy pequeños, con la ventaja adicional de consumir muy poca energía. Estos dispositivos son muy populares y generalmente se encuentran en aplicaciones en revistas de electrónica e Internet. Actualmente existen varias familias de este microcontrolador entre las cuales se pueden destacar la PIC16C5X, PIC16CXX, y la PIC17CXX, que también se pueden conseguir con memoria Flash en las familias PIC16FXXX 4.1 Arquitectura. Arquitectura Von Neumann La arquitectura tradicional de computadoras y microprocesadores está basada en la arquitectura Von Neumann, en la cual la unidad central de proceso (CPU), está conectada a una memoria única donde se guardan las instrucciones del programa y los datos. El tamaño de la unidad de datos o instrucciones está fijado por el ancho del bus que comunica la memoria con la CPU. Así un microprocesador de 8 bits con un bus de 8 bits, tendrá que manejar datos e instrucciones de una o más unidades de 8 bits (bytes) de longitud. Si tiene que acceder a una instrucción o dato de más de un byte de longitud, tendrá que realizar más de un acceso a la memoria. Y el tener un único bus hace que el microprocesador sea más lento en su respuesta, ya que no puede buscar en memoria una nueva instrucción mientras no _nalicen las transferencias de datos de la instrucción anterior. Resumiendo todo lo anterior, las principales limitaciones que nos encontramos con la arquitectura Von Neumann son: 1. La limitación de la longitud de las instrucciones por el bus de datos, que hace que el microprocesador tenga que realizar varios accesos a memoria para buscar instrucciones complejas. 2. La limitación de la velocidad de operación a causa del bus único para datos e instrucciones que no deja acceder simultáneamente a unos y otras, lo cual impide superponer ambos tiempos de acceso. Arquitectura Harvard La arquitectura Harvard tiene la unidad central de proceso (CPU) conectada a dos memorias (una con las instrucciones y otra con los datos) por medio de dos buses diferentes. Una de las memorias contiene solamente las instrucciones del programa (Memoria de Programa), y la otra sólo almacena datos (Memoria de Datos). Ambos buses son totalmente independientes y pueden ser de distintos anchos. Para un procesador de Set de Instrucciones Reducido, o RISC (Reduced Instrucción Set Computer), el set de instrucciones y el bus de memoria de programa pueden diseñarse de tal manera que todas las instrucciones tengan una sola posición de memoria de programa de longitud. Además, al ser los buses independientes, la CPU puede acceder a los datos para completar la ejecución de una instrucción, y al mismo tiempo leer la siguiente instrucción a ejecutar. Ventajas de esta arquitectura: 1. El tamaño de las instrucciones no esta relacionado con el de los datos, y por lo tanto puede ser optimizado para que cualquier instrucción ocupe una sola posición de memoria de programa, logrando así mayor velocidad y menor longitud de programa. 2. El tiempo de acceso a las instrucciones puede superponerse con el de los datos, logrando una mayor velocidad en cada operación. Una pequeña desventaja de los procesadores con arquitectura Harvard, es que deben poseer instrucciones especiales para acceder a tablas de valores constantes que pueda ser necesario incluir en los programas, ya que estas tablas se encontraran físicamente en la memoria de programa (por ejemplo en la EPROM de un microprocesador). El microcontrolador PIC 16F84 posee arquitectura Harvard, con una memoria de datos de 8 bits, y una memoria de programa de 14 bits. En la Figura 5 vemos la arquitectura interna organizada en bloques interconectados, en donde se incluye la memoria RAM, la memoria EEPROM, los puertos de entrada y salida (I/O), etc. El procesador Es el elemento más importante del microcontrolador y determina sus principales características, tanto a nivel hardware como software. Se encarga de direccionar la memoria de instrucciones, recibir el código OP de la instrucción en curso, su decodi_cación y la ejecución de la operación que implica la instrucción, así como la búsqueda de los operandos y el almacenamiento del resultado. Existen tres orientaciones en cuanto a la arquitectura y funcionalidad de los procesadores actuales. CISC Un gran número de procesadores usados en los microcontroladores están basados en la _losofía CISC (Computadores de Juego de Instrucciones Complejo). Disponen de más de 80 instrucciones máquina en su repertorio, algunas de las cuales son muy so_sticadas y potentes, requiriendo muchos ciclos para su ejecución. Una ventaja de los procesadores CISC es que ofrecen al programador instrucciones complejas que actúan como macros, es decir, RISC Tanto la industria de los computadores comerciales como la de los microcontroladores están decantándose hacia la _losofía RISC (Computadores de Juego de Instrucciones Reducido). En estos procesadores el repertorio de instrucciones máquina es muy reducido y las instrucciones son simples y, generalmente, se ejecutan en un ciclo. La sencillez y rapidez de las instrucciones permiten optimizar el hardware y el software del procesador. SISC En los microcontroladores destinados a aplicaciones muy concretas, el juego de instrucciones, además de ser reducido, es especí_co, o sea, las instrucciones se adaptan a las necesidades de la aplicación prevista. Esta filosofía se ha bautizado con el nombre de SISC (Computadores de Juego de Instrucciones Específico). Según la arquitectura interna de la memoria del microcontrolador se puede distinguir entre: Microcontroladores con arquitectura Von Neumann. Microcontroladores con arquitectura Harvard. Inicialmente, todos los microcontroladores adoptaron la arquitectura clásica de Von Neumann. Actualmente, muchos microcontroladores utilizan esta arquitectura, pero poco a poco se impone la arquitectura Harvard. La arquitectura de Von Neumann se caracteriza por disponer de una sola memoria principal donde se almacenan datos e instrucciones de forma indistinta. A dicha memoria se accede por un sistema de buses único (direcciones, datos y control). Esta arquitectura presenta algunos problemas cuando se demanda rapidez. 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. Esta estructura no modifica nada desde el punto de vista del usuario y la velocidad de ejecución de los programas es impresionante. http://html.rincondelvago.com/adquisicion-de-magnitudes-fisicas-mediantemicrocontrolador.html Arquitectura cerrada o abierta. Entre los fabricantes de microcontroladores hay dos tendencias para resolver las demandas de los usuarios. Los microcontroladores con arquitectura cerrada poseen una determinada UCP, cierta cantidad de memoria de datos, cierto tipo y capacidad de memoria de instrucciones, un número de E/S y un conjunto de recursos auxiliares muy concreto. El modelo no admite variaciones ni ampliaciones. La aplicación a la que se destina debe encontrar en su estructura todo lo que precisa, y en caso contrario, hay que desecharlo. Los microcontroladores con arquitectura abierta se caracterizan porque, además de poseer una estructura interna determinada, emplean sus líneas de E/S para sacar al exterior los buses de datos, direcciones y control, con lo que se posibilita la ampliación de la memoria y las E/S con circuitos integrados externos. Esta solución se asemeja a la que emplean los clásicos microprocesadores. La línea que separa unos de otros es muy delgada, pero el concepto de microcontrolador se acerca posiblemente más a la arquitectura cerrada. Los microcontroladores PIC están basados en la arquitectura Harvard que posee buses y espacios de memoria diferenciados para los datos y las instrucciones. Gracias a ella se puede acceder de forma simultánea e independiente a la memoria de datos y a la memoria de instrucciones, por tanto son más rápidos que los microcontroladores basados en la arquitectura tradicional de Von Neuman. Por otro lado, esta independencia entre datos e instrucciones permite que cada uno tenga el tamaño más adecuado. Así, los datos tienen una longitud de 8 bits, mientras que las instrucciones son de 14 bits (Figura 6-6). Como se observa en la Figura 6-7 el PIC16F84 consta de un procesador con una ALU y un Decodificador de Instrucciones, una memoria de programa tipo FLASH de 1K palabras de 14 bits, una memoria de datos SRAM con 68 posiciones de 8 bits. También existe una zona de 64 bytes de EEPROM para datos no volátiles. Finalmente dispone de interrupciones, un temporizador, perro guardián y dos puertas A y B de entrada y salida de información digital. http://www.dte.upct.es/docencia/temarios/tecn_electricidad_elect_dig/Tema6.PDF 4.1.1 4.1.2 Terminales. CPU. Arquitectura del procesador o UCP. Según la filosofía de la arquitectura del procesador se puede distinguir entre: Microcontroladores CISC. Microcontroladores RISC. Microcontroladores SISC. Un microcontrolador basado en la filosofía CISC (Computadores de Juego de Instrucciones Complejo) dispone de más de 80 instrucciones máquina en su repertorio, algunas de las cuales son muy sofisticadas y potentes, requiriendo muchos ciclos para su ejecución. Una ventaja de los procesadores CISC es que ofrecen al programador instrucciones complejas que actúa como macros. Tanto la industria de los computadores comerciales como los de los microcontroladores están decantándose hacia la filosofía RISC (Computadores de Juego de Instrucciones Reducido). En estos procesadores el repertorio de instrucciones máquina es muy reducido y las instrucciones son simples y, generalmente, se ejecuta en un solo ciclo. La sencillez y rapidez de las instrucciones permiten optimizar el hardware y el software del procesador. En los microcontroladores destinados a aplicaciones muy concretas, el juego de instrucciones, además de ser reducido, es específico, o sea, las instrucciones se adaptan a las necesidades de la aplicación prevista. Esta filosofía se ha bautizado con el nombre de SISC (Computadores de Juego de Instrucciones Específico). http://html.rincondelvago.com/adquisicion-de-magnitudes-fisicas-mediantemicrocontrolador.html 2.1. Procesador. Es el elemento más importante del microcontrolador tanto a nivel hardware como software. Se encarga de direccionar la memoria de instrucciones, recibir el código OP (opcode) de la instrucción en curso, su decodificación y la ejecución de la operación aritmética o lógica que implica la instrucción, así como la búsqueda de los operandos y el almacenamiento del resultado. La necesidad de conseguir rendimientos elevados en el procesamiento de las instrucciones ha desembocado en el empleo generalizado de procesadores de arquitectura Hardvard, frente a los tradicionales que seguían la arquitectura de Von Neuman. Esta última se caracteriza porque la CPU se conectaba a una memoria única donde coexistían datos e instrucciones a través de un sistema de buses. En la arquitectura Harvard son independientes la memoria de instrucciones y la memoria de datos y cada una dispone de su propio sistema de buses para el acceso. Esto propicia el paralelismo (Figura 6-5). El procesador o CPU. El procesador responde a la arquitectura RISC, que se identifica porque el juego de instrucciones se reduce a 35, donde la mayoría se ejecutan en un solo ciclo de reloj, excepto las instrucciones de salto que necesitan dos ciclos. La ALU (Arithmetic Logic Unit) ubicada dentro del procesador realiza las operaciones lógicas y aritméticas con dos operandos, uno que recibe desde el registro W (registro de trabajo) y otro que puede provenir de cualquier registro interno (Figura 6-7). 4.1.3 Espacio de Memoria. Memoria En los microcontroladores la memoria de instrucciones y datos está integrada en el propio chip. Una parte debe ser no volátil, tipo ROM, y se destina a contener el programa de instrucciones que gobierna la aplicación. Otra parte de memoria será tipo RAM, volátil, y se destina a guardar las variables y los datos. Hay dos peculiaridades que diferencian a los microcontroladores de los computadores personales: No existen sistemas de almacenamiento masivo como disco duro o disquetes. Como el microcontrolador sólo se destina a una tarea en la memoria ROM, sólo hay que almacenar un único programa de trabajo. La RAM en estos dispositivos es de poca capacidad pues sólo debe contener las variables y los cambios de información que se produzcan en el transcurso del programa. Por otra parte, como sólo existe un programa activo, no se requiere guarda r una copia del mismo en la RAM pues se ejecuta directamente desde la ROM. Los usuarios de computadores personales están habituados a manejar Megabytes de memoria, pero, los diseñadores con microcontroladores trabajan con capacidades de ROM comprendidas entre 512 bytes y 8 k bytes y de RAM comprendidas entre 20 y 512 bytes. Según el tipo de memoria ROM que dispongan los microcontroladores, la aplicación y utilización de los mismos es diferente. Se describen las cinco versiones de memoria no volátil que se pueden encontrar en los microcontroladores del mercado. ROM con máscara Es una memoria no volátil de sólo lectura cuyo contenido se graba durante la fabricación del chip. Si tenemos idea de cómo se fabrican los circuitos integrados, sabremos de donde viene el nombre. Estos se fabrican en obleas que contienen varias decenas de chips. Estas obleas se fabrican a partir de procesos fotoquímicos, donde se impregnan capas de silicio y oxido de silicio, y según convenga, se erosionan al exponerlos a la luz. Como no todos los puntos han de ser erosionados, se sitúa entre la luz y la oblea una mascara con agujeros, de manera que donde deba incidir la luz, esta pasará. Con varios procesos similares pero más complicados se consigue fabricar los transistores y diodos micrométricos que componen un chip. Ahora ya sabes de donde viene la máscara y no te acostarás sin saber una cosa más. El elevado coste del diseño de la máscara sólo hace aconsejable el empleo de los microcontroladores con este tipo de memoria cuando se precisan cantidades superiores a varios miles de unidades. OTP El microcontrolador contiene una memoria no volátil de sólo lectura programable una sola vez por el usuario. OTP (One Time Programmable). Es el usuario quien puede escribir el programa en el chip mediante un sencillo grabador controlado por un programa desde un PC. La versión OTP es recomendable cuando es muy corto el ciclo de diseño del producto, o bien, en la construcción de prototipos y series muy pequeñas. Tanto en este tipo de memoria como en la EPROM, se suele usar la encriptación mediante fusibles para proteger el código contenido. EPROM Los microcontroladores que disponen de memoria EPROM (Erasable Programmable Read OnIy Memory) pueden borrarse y grabarse muchas veces. La grabación se realiza, como en el caso de los OTP, con un grabador gobernado desde un PC. Si, posteriormente, se desea borrar el contenido, disponen de una ventana de cristal en su super_cie por la que se somete a la EPROM a rayos ultravioleta durante varios minutos. Las cápsulas son de material cerámico y son más caros que los microcontroladores con memoria OTP que están hechos con material plástico. EEPROM, E2PROM o E2PROM Se trata de memorias de sólo lectura, programables y borrables eléctricamente EEPROM (Electrical Erasable Programmable Read OnIy Memory). Tanto la programación como el borrado, se realizan eléctricamente desde el propio grabador y bajo el control programado de un PC. Es muy cómoda y rápida la operación de grabado y la de borrado. No disponen de ventana de cristal en la superficie. Los microcontroladores dotados de memoria EEPROM una vez instalados en el circuito, pueden grabarse y borrarse cuantas veces se quiera sin ser retirados de dicho circuito. Para ello se usan "grabadores en circuito"que confieren una gran flexibilidad y rapidez a la hora de realizar modi_caciones en el programa de trabajo. El número de veces que puede grabarse y borrarse una memoria EEPROM es finito, por lo que no es recomendable una reprogramación continua. Son muy idóneos para la enseñanza y la Ingeniería de diseño. Se va extendiendo en los fabricantes la tendencia de incluir una pequeña zona de memoria EEPROM en los circuitos programables para guardar y modificar cómodamente una serie de parámetros que adecuan el dispositivo a las condiciones del entorno. Este tipo de memoria es relativamente lenta, como ya veremos más adelante. FLASH Se trata de una memoria no volátil, de bajo consumo, que se puede escribir y borrar. Funciona como una ROM y una RAM pero consume menos y es más pequeña. A diferencia de la ROM, la memoria FLASH es programable en el circuito. Es más rápida y de mayor densidad que la EEPROM. La alternativa FLASH está recomendada frente a la EEPROM cuando se precisa gran cantidad de memoria de programa no volátil. Es más veloz y tolera más ciclos de escritura/borrado. Las memorias EEPROM y FLASH son muy útiles al permitir que los microcontroladores que las incorporan puedan ser reprogramados en circuito, es decir, sin tener que sacar el circuito integrado de la tarjeta. Así, un dispositivo con este tipo de memoria incorporado al control del motor de un automóvil permite que pueda modi_carse el programa durante la rutina de mantenimiento periódico, compensando los desgastes y otros factores tales como la compresión, la instalación de nuevas piezas, etc. La reprogramación del microcontrolador puede convertirse en una labor rutinaria dentro de la puesta a punto. 4.1.4 Entrada/ Salida. Puertas de Entrada y Salida Las puertas de Entrada y Salida (E/S) permiten comunicar al procesador con el mundo exterior, a través de interfaces, o con otros dispositivos. Estas puertas, también llamadas puertos, son la principal utilidad de las patas o pines de un microprocesador. Según los controladores de periféricos que posea cada modelo de microcontrolador, las líneas de E/S se destinan a proporcionar el soporte a las señales de entrada, salida y control. Periféricos digitales de entrada. Pulsadores. Estos dispositivos permiten introducir un nivel lógico en el momento que se les acciona, pasando al nivel contrario cuando se deja de hacerlo (vuelven a la posición de reposo). En el esquema de la izquierda de la Figura 6-14 la línea de entrada (IN) recibe un nivel lógico alto cuando el pulsador está reposo y un nivel lógico bajo cuando se acciona. El pulsador de la derecha funciona al revés. Hay multitud de detectores, finales de carrera y sensores digitales que funcionan de la misma manera que los pulsadores. Interruptores. Los interruptores tienen dos estados estables y hay que accionarlos para cambiar de uno a otro. El interruptor admite el estado abierto y el estado cerrado. Las formas de conectar un interruptor a una entrada del microcontrolador son iguales a las de la figura 6-14, sustituyendo el pulsador por el interruptor. Todos los circuitos electromecánicos (pulsadores, interruptores,...) originan un fenómeno denominado “rebotes”: las láminas se abren y se cierran varias veces en el momento de la transición (Figura 6-15). El efecto que produce es semejante a abrir y cerrar el interruptor o pulsador varias veces, por lo que puede provocar resultados erróneos. El efecto de los rebotes se puede solucionar bien mediante software, o bien por hardware. En la Figura 6-16 se muestran dos circuitos hardware antirrebotes. El circuito de la izquierda emplea un condensador y el de la derecha un flip-flop R-S. Periféricos digitales de salida Diodos LED. El diodo led es un elemento que se emplea como indicador luminoso. Cuando la diferencia de potencial entre su ánodo y su cátodo supere un determinado valor umbral el diodo led se encenderá. Las líneas de los PIC pueden suministrar suficiente corriente como para encender a un diodo led, por eso se pueden conectar directamente a través de una resistencia como muestra la Figura 6-17. Si empleamos la conexión de la izquierda de la figura, el diodo led se encenderá al poner a ‘1’ la salida del microcontrolador, mientras que con la conexión de la derecha lo hará cuando la salida se ponga a ‘0’. En ocasiones, los diodos u otro tipo de carga necesitan más corriente que la que pueden entregar las líneas de los PIC. En ese caso es necesario intercalar una etapa amplificadora. Relés La activación y desactivación de un relé brinda la oportunidad de poder controlar cargas mucho mayores (más corriente) porque pueden ser controladas por los contactos de dicho relé (Figura 6-18). Cuando la línea de salida, OUT, aplica un nivel alto a la base del transistor Darlington (etapa amplificadora) hace que conduzca y se active el relé. Al cerrarse los contactos del relé se controla una carga mayor. El valor de la resistencia depende del tipo de relé y del transistor. http://www.dte.upct.es/docencia/temarios/tecn_electricidad_elect_dig/Tema6.PDF 4.1.5 Reloj principal Características especiales. Todos los microcontroladores disponen de un circuito oscilador que genera una onda cuadrada de alta frecuencia, que configura los impulsos de reloj usados en la sincronización de todas las operaciones del sistema. Esta señal del reloj es el motor del sistema y la que hace que el programa y los contadores avancen. Generalmente, el circuito de reloj está incorporado en el microcontrolador y sólo se necesitan unos pocos componentes exteriores para seleccionar y estabilizar la frecuencia de trabajo. Dichos componentes suelen consistir en un cristal de cuarzo junto a elementos pasivos o bien un resonador cerámico o una red R-C. Aumentar la frecuencia de reloj supone disminuir el tiempo en que se ejecutan las instrucciones pero lleva aparejado un incremento del consumo de energía y de calor generado. RECURSOS ESPECIALES Cada fabricante oferta numerosas versiones de una arquitectura básica de microcontrolador. En algunas amplía las capacidades de las memorias, en otras incorpora nuevos recursos, en otras reduce las prestaciones al mínimo para aplicaciones muy simples, etc. La labor del diseñador es encontrar el modelo mínimo que satisfaga todos los requerimientos de su aplicación. De esta forma, minimizará el coste, el hardware y el software. Los principales recursos específicos que incorporan los microcontroladores son: Temporizadores o Timers. Perro guardián oWatchdog. Protección ante fallo de alimentación o Brownout. Estado de reposo o de bajo consumo (Sleep mode). Conversor A/D (Analógico ->Digital). Conversor D/A (Digital ->Analógico). Comparador analógico. Modulador de anchura de impulsos o PWM (PulseWide Modulation). Puertas de E/S digitales. Puertas de comunicación. A continuación pasamos a ver con un poco más de detalle cada uno de ellos Temporizadores o Timers Se emplean para controlar periodos de tiempo (temporizadores) y para llevar la cuenta de acontecimientos que suceden en el exterior (contadores). Para la medida de tiempos se carga un registro con el valor adecuado y a continuación dicho valor se va incrementando o decrementando al ritmo de los impulsos de reloj o algún múltiplo hasta que se desborde y llegue a 0, momento en el que se produce un aviso. Cuando se desean contar acontecimientos que se materializan por cambios de nivel o flancos en alguna de las patitas del microcontrolador, el mencionado registro se va incrementando o decrementando al ritmo de dichos impulsos. Vaya, nos hemos metido en términos de microcontroladores demasiado pronto. Bueno, con el fin de aclarar que es un registro, anticipamos que es un valor numérico en una posición fija de memoria. Un ejemplo: esto es igual que el segundero de nuestro reloj digital, este va aumentando hasta que llega a 60 segundos, pero en la pantalla pone 00, esto quiere decir que se desborda. Pero cuando cambia da un aviso y se incrementan los minutos. En este ejemplo, el registro es el segundero; estos son fijos ya que sabemos que son los de la derecha del todo y no se van a cambiar. Perro guardián oWatchdog Cuando el computador personal se bloquea por un fallo del software u otra causa, se pulsa el botón del reset y se reinicia el sistema. Pero un microcontrolador funciona sin el control de un supervisor y de forma continuada las 24 horas del día. El Perro Guardián consiste en un contador que, cuando llega al máximo, provoca un reset automáticamente en el sistema. Se debe diseñar el programa de trabajo que controla la tarea de forma que resetee al Perro Guardián de vez en cuando antes de que provoque el reset. Si falla el programa o se bloquea (si cae en bucle in_nito), no se refrescará al Perro guardián y, al completar su temporización, provocará el reset del sistema. Protección ante fallo de alimentación o Brownout Se trata de un circuito que resetea al microcontrolador cuando el voltaje de alimentación (VDD) es inferior a un voltaje mínimo (brownout). Mientras el voltaje de alimentación sea inferior al de brownout el dispositivo se mantiene reseteado, comenzando a funcionar normalmente cuando sobrepasa dicho valor. Esto es muy útil para evitar datos erróneos por transiciones y ruidos en la línea de alimentación Estado de reposo ó de bajo consumo Son abundantes las situaciones reales de trabajo en que el microcontrolador debe esperar, sin hacer nada, a que se produzca algún acontecimiento externo que le ponga de nuevo en funcionamiento. Para ahorrar energía, (factor clave en los aparatos portátiles), los microcontroladores disponen de una instrucción especial (SLEEP en los PIC), que les pasa al estado de reposo o de bajo consumo, en el cual los requerimientos de potencia son mínimos. En dicho estado se detiene el reloj principal y se congelan sus circuitos asociados, quedando sumido en un profundo sueño. Al activarse una interrupción ocasionada por el acontecimiento esperado, el microcontrolador se despierta y reanuda su trabajo. Para hacernos una idea, esta función es parecida a la opción de Suspender en el menú para apagar el equipo (en aquellos PCs con administración avanzada de energía) Conversor A/D (CAD) Los microcontroladores que incorporan un Conversor A/D (Analógico/Digital) pueden procesar señales analógicas, tan abundantes en las aplicaciones. Suelen disponer de un multiplexor que permite aplicar a la entrada del CAD diversas señales analógicas desde las patillas del circuito integrado. Conversor D/A (CDA) Transforma los datos digitales obtenidos del procesamiento del computador en su correspondiente señal analógica que saca al exterior por una de las patillas del chip. Existen muchos circuitos que trabajan con señales analógicas. Comparador analógico Algunos modelos de microcontroladores disponen internamente de un Amplificador Operacional que actúa como comparador entre una señal fija de referencia y otra variable que se aplica por una de las patitas de la cápsula. La salida del comparador proporciona un nivel lógico 1 ó 0 según una señal sea mayor o menor que la otra. También hay modelos de microcontroladores con un módulo de tensión de referencia que proporciona diversas tensiones de referencia que se pueden aplicar en los comparadores. Modulador de anchura de impulsos o PWM Son circuitos que proporcionan en su salida impulsos de anchura variable, que se ofrecen al exterior a través de las patitas del encapsulado. Puertos digitales de E/S Todos los microcontroladores destinan parte de su patillaje a soportar líneas de E/S digitales. Por lo general, estas líneas se agrupan de ocho en ocho formando Puertos. Las líneas digitales de las Puertos pueden configurarse como Entrada o como Salida cargando un 1 ó un 0 en el bit correspondiente de un registro destinado a su configuración. Otra vez más nos volvemos a meter con unos, ceros y registros paciencia que pronto llega lo mejor. Puertas de comunicación Con objeto de dotar al microcontrolador de la posibilidad de comunicarse con otros dispositivos externos, otros buses de microprocesadores, buses de sistemas, buses de redes y poder adaptarlos con otros elementos bajo otras normas y protocolos. Algunos modelos disponen de recursos que permiten directamente esta tarea, entre los que destacan: UART, adaptador de comunicación serie asíncrona.(Ej: Puerto Serie) USART, adaptador de comunicación serie síncrona y asíncrona Puerta paralela esclava para poder conectarse con los buses de otros microprocesadores. USB (Universal Serial Bus), que es un moderno bus serie para los PC. Bus I2C, que es un interfaz serie de dos hilos desarrollado por Philips. CAN (Controller Area Network), para permitir la adaptación con redes de conexionado multiplexado desarrollado conjuntamente por Bosch e Intel para el cableado de dispositivos en automóviles. En EE.UU. se usa el J185O. Tanto el I2C en televisores, como el Bus CAN en automóviles, fueron diseñados para simplificar la circuitería que supone un bus paralelo de 8 líneas dentro de un televisor, así como para librar de la carga que supone una cantidad ingente de cables en un vehículo. 4.2 Programación. 4.2.1 Modelo de programación. Modelo de programación El modelo de programación es un diagrama de bloques simplificado en el que sólo aparecen los elementos que el programador puede manejar mediante el conjunto de instrucciones. En el MC68000 se dispone de 16 registros de 32 bits de propósito general (D0-D7, A0A7), un puntero contador de programa (PC) de 32 bits, y un registro de códigos de condición (CCR) de 8 bits. Los primeros 8 registros (D0-D7) se utilizan como registros de datos para bytes (8 bits), words (16 bits) y long words (32 bits). Los registros del segundo bloque de 8 (A0-A7) pueden ser utilizados como punteros de pila o como bases de direcciones. En concreto el registro A7 es adoptado por el microprocesador como puntero de la pila del sistema. Además, los registros de direcciones pueden ser utilizados en operaciones con words y long words. Todos los registros pueden utilizarse como registros índice. Registro de datos Registros de direcciones (USP) Puntero de pila de usuario Puntero de programa CCR Registro de códigos de condición Esquema de los registros del MC68000. En estado supervisor se dispone de otros dos registros: Por una parte, el puntero de la pila del supervisor (SSP Supervisor Stack Pointer) que sustituye al USP y por tanto se establece como A7 en modo supervisor. Además se dispone del registro de estado (SR Status Register) que es una ampliación del CCR. Puntero de pila de supervisor Registro de estado Estos registros son exclusivos del modo supervisor. EL REGISTRO DE ESTADO (SR) Es un registro de 16 bits. El formato del registro de estado es el siguiente: T S I2 I1 I0 XNZVC Estructura del registro de estado (SR). Esta dividido lógicamente en sus dos bytes, el byte alto denominaod BYTE del SISTEMA, y el byte bajo, REGISTRO de CODIGOS DE CONDICION. BYTE del SISTEMA: sólo puede ser modificado desde el modo supervisor, posee 5 bits significaativos que controlan el funcionamiento del microprocesador. La función específica de cada bit es: o T : BIT DE TRAZA, Cuando este bit está a 1, la CPU entra en el modo de ejecución paso a paso. Después de ejecutarse una instrucción se genera una excepción, que dará paso a la correspondiente subrutina. Util para prueba y depuración. o S: BIT de ESTADO, Cuando este bit está a 1 el microprocesador opera en modo supervisor, cuando está a 0, en modo usuario. Este bit permite el paso de modo supervisor a modo usuario. o I2,I1,I0 : MASCARA DE INTERRUPCION, Estos 3 bits constituyen el nivel de la máscara de interrupción. Esto quiere decir que, para que una interrupción sea atendida, debe ser de un nivel superior al indicaado por estos 3 bits. REGISTRO DE CODIGOS DE CONDICION (CCR): Solo son significativos los 5 bits más bajos. Cada uno de estos bits, llamados "flags", tiene la función de señalar la ocurrencia de un hecho concreto: C : BIT DE ACARREO, Sirve para notificar que el resultado de uan operación aritmética supera el número de bits de los operandos. Depende de la instrucción concreta como se verá afectado el bit C y la interpretación correcta de su valor. Tambiésn se modifica por instrucciones de rotación y desplazamiento. Otras instrucciones lo ponen a 0. V : BIT de DESBORDAMIENTO. Tiene sentido cuando se trabaja con valores numéricos con signo (en complemento a 2 con el bit mas significativo reservado para el signo) y se pone a 1 cuando el resultado de una operación no se puede almacenar en el numero de bits que permite la representación del numero Z : BIT de CERO, Se pone a 1 cuando el resultado de una operación o de una transferencia de datos es cero. N: BIT DE SIGNO, Contiene el valor del bit más significativo del resultado de una operación aritmética ó lógica. X: BIT DE EXTENSION, Utilizado en operaciones de precisión múltiple , toma el valor del bit C, salvo en operaciones de rotación extendida. http://www.ii.uam.es/~fjgomez/68000/tutorial/cap1.html 4.2.2 Conjunto de instrucciones. ADD - Add Binary ADD Suma Binaria Operación Fuente + Destino -> Destino Sintaxis en Ensamblador 1- ADD <ea>,Dn 2- ADD Dn,<ea> Atributos Tamaños=(Byte, Word, Long) Descripción Suma el operando fuente con el operando destino, y guarda el resultado en el operando destino. El tamaño de los operandos puede elegirse entre Byte, Word y Long. El Modo de la instrucción que diferencia entre las dos sintáxis (1 o 2) indica que operando es el fuente y cual es el destino asi como los tamaños de los operandos. Registro de Códigos de Condición X * N * Z * V * C * N: Se pone a 1 (Set) si el resultado es negativo. Se pone a 0 (Cleared) en otro caso. Z: Se pone a 1 (Set) si el resultado es cero. Se pone a 0 (Cleared) en otro caso. V: Se pone a 1 (Set) si se genera desbordamiento (overflow). Se pone a 0 (Cleared) en otro caso. C: Se pone a 1 (Set) si se genera acarreo. Se pone a 0 (Cleared) en otro caso. X: Toma el mismo valor que el C. Codificación Binaria 1 1 0 1 Reg. Datos Modo Operación Dirección Efectiva La Suma binaria admite dos Modos : 1. Modo 1 si se utiliza ADD <dir. efectiva>,Dx 2. con el Campo Modo Operacion = 000, 001, 010 Según sea BYTE, WORD y LONG. 1. Modo 2 si se utiliza ADD Dx, <dir. efectiva> 2. con el Campo Modo Operacion = 100, 101, 110 Según sea BYTE, WORD y LONG. Los operandos pueden ser tamaño Byte, Word, o Long. ABCD - Add Decimal with Extend ADDA - Add Address ADDI - Add Immediate ADDI Suma Inmediata Operación Dato Inmediato + Destino -> Destino Sintaxis en Ensamblador ADDI #<data>,<ea> Atributos Tamaño=(Byte, Word, Long) Descripción Suma el dato inmediato al operando destino, y almacena el resultado en el operando destino. El tamaño del operando puede ser Byte , Word o Long. El tamaño del dato inmediato se hace igual al del operando Registro de Códigos de Condición X * N * Z * V * C * N: Se pone a 1 (Set) si el resultado es negativo. Se pone a 0 (Cleared) de otro modo. Z: Se pone a 1 (Set) si el resultado es cero. Se pone a 0 (Cleared) en otro caso. V: Se pone a 1 (Set) si se genera desbordamineto (overflow). Se pone a 0 (Cleared) en otro caso. C: Se pone a 1 (Set) si se genera acarreo. Se pone a 0 (Cleared) en otro caso. X: Toma el mismo valor que el C. Codificación Binaria El campo Tamaño distingue entre : 1. BYTE = 00 1. WORD = 01 1. LONG = 10 Los operandos son tamaño Byte,Word o Long 0 0 0 0 0 1 1 0 Tamaño Modo Registro WORD = Palabra (16 bits) BYTE = Byte ( 8 bits) Palabra larga = LONG (32 bits) ADDQ - Add Quick ADDQ Suma Rapida Operación Dato Inmediato + Destino -> Destino Sintaxis en Ensamblador ADDQ #<data>,<ea> Atributos Tamaño=(Byte, Word, Long) Descripción Suma el dato inmediato al operando destino y queda el resultado en destino. El rango de valores del dato inmediato es de 1 a 8. El tamaño de la operación puede especificarse como Byte, Word o Long. En operaciones de tamaño Word o Long está también permitido usar registros de direcciones, en cuyo caso el registro de códigos de condición no se ve afectado. Cuando se suma el registro de direcciones, se emplea el tamaño total del registro de direcciones independientemente del tamaño de operación. Registro de Códigos de Condición X * N * Z * V * C * N: Se pone a 1 (Set) si el resultado es negativo. Se pone a 0 (Cleared) de otro modo. Z: Se pone a 1 (Set) si el resultado es cero. Se pone a 0 (Cleared) en otro caso. V: Se pone a 1 (Set) si se genera desbordamineto (overflow). Se pone a 0 (Cleared) en otro caso. C: Se pone a 1 (Set) si se genera acarreo. Se pone a 0 (Cleared) en otro caso. X: Toma el mismo valor que el C. Los códigos de condición no se alteran si el operando destino es un registro de direcciones Codificación Binaria 1 1 0 0 Dato 0 Tamaño Dir. Efectiva Modo Registro El campo Tamaño distingue entre : 1. BYTE = 00 1. WORD = 01 1. LONG = 10 La operación puede ser tamaño Byte,Word o Long ADDX - Add Extended ADDX Suma Extendida Operación Fuente + Destino + X -> Destino Sintaxis en Ensamblador ADDX Dy,Dx ADDX -(Ay),-(Ax) Atributos Tamaño=(Byte, Word, Long) Descripción Suma el operando fuente con el destino y con el bit X, guarda el resultado en el operando destino Los operandos pueden direccionarse de dos maneras: Registro de Datos a registro de Datos: Los operandos estan contenidos en los registros de datos especificados en la instrucción. Memoria a Memoria: Se indican los operandos con direccionamiento indirecto con predecremento usando el registro de direcciones especificado en la instrucción. El tamaño de los operandos puede ser byte, word, or long. Registro de Códigos de Condición X * N * Z * V * C * N: Se pone a 1 (Set) si el resultado es negativo. Se pone a 0 (Cleared) de otro modo. Z: Se pone a 1 (Set) si el resultado es cero. Se pone a 0 (Cleared) en otro caso. V: Se pone a 1 (Set) si se genera desbordamineto (overflow). Se pone a 0 (Cleared) en otro caso. C: Se pone a 1 (Set) si se genera acarreo. Se pone a 0 (Cleared) en otro caso. X: Toma el mismo valor que el C. Nota: Normalmente el bit Z se pone a 1 via programa antes de iniciar una operación. Esto admite comprobar si el resultado es cero despues de realizar una operación de multiple-precisión Codificación Binaria 1 1 0 0 Reg. Destino 1 Tamaño 0 0 R/M Reg. Fuente Admite dos Modos : 1. R/M=0 si se utiliza ADDX Dy,Dx 1. R/M=1 si se utiliza ADDX -(Ay),-(Ax) El campo Tamaño distingue entre : 1. BYTE = 00 1. WORD = 01 1. LONG = 10 Los operandos son tamaño Byte, Word o Long AND - And Logical AND And Lógico Operación Fuente & Destino -> Destino Sintaxis en Ensamblador AND <ea>,Dn AND Dn,<ea> Atributos Tamaño=(Byte, Word, Long) Descripción Realiza la función lógica AND, bit a bit, entre el operando fuente y el destino guardando el resultado en el destino. El tamaño de la operación puede ser Byte, Word o Long. No se puede usar como operando el contenido de un registro de direcciones. Registro de Códigos de Condición X - N * Z * V 0 C 0 N: Se pone a 1 (Set) si el bit mas significativo del resultado esta a 1. Se pone a 0 (Cleared) de otro modo. Z: Se pone a 1(Set) si el resultado es cero. Se pone a 0 (Cleared) en otro caso. V: Siempre a 0 (cleared). C: Siempre a 0 (cleared). X: No se ve afectado. Codificación Binaria 1 1 0 0 Reg. Datos Modo Opera. Dir. Efectiva Modo Registro El And lógico admite dos Modos : 1. Modo 1 si se utiliza AND <dir. efectiva>,Dx 2. con el Campo Modo Operacion = 000, 001, 010 Según sea BYTE, WORD y LONG. 1. Modo 2 si se utiliza AND Dx, <dir. efectiva> 2. con el Campo Modo Operacion = 100, 101, 110 Según sea BYTE, WORD y LONG. Los operandos pueden ser tamaño Byte, Word, o Long. ANDI - AND Immediate ANDI AND Inmediato Operación Dato Inmediato & Destino -> Destino Sintaxis en Ensamblador ANDI #<data>,<ea> Atributos Tamaño=(Byte, Word, Long) Descripción Realiza la operación AND lógico entre el dato inmediato y el operando destino, almacenado el resultado en el destino. El tamaño de la operación puede especificarse como Byte, Word o Long. El tamaño de la operación se hace igual al tamaño del operando. Registro de Códigos de Condición X - N Z * V * C 0 0 N: Se pone a 1 (Set) si el bit mas significativo del resultado esta a 1. Se pone a 0 (Cleared) de otro modo. Z: Se pone a 1(Set) si el resultado es cero. Se pone a 0 (Cleared) en otro caso. V: Siempre a 0 (cleared). C: Siempre a 0 (cleared). X: No se ve afectado. Codificación Binaria El campo Tamaño distingue entre : 1. BYTE = 00 1. WORD = 01 1. LONG = 10 Los operandos son tamaño Byte,Word o Long 0 0 0 0 0 1 1 0 Tamaño Modo Registro WORD = Palabra (16 bits) BYTE = Byte ( 8 bits) Palabra larga = LONG (32 bits) ANDI to CCR - ANDI Immediate to Condition Codes ANDI a CCR ANDI Inmediato con el registro de Codigos de Condición Operacion Fuente & CCR -> CCR Sintaxis en Ensamblador ANDI #<data>,CCR Atributos Tamaño=(Byte) Descripción Realiza la operación AND entre el dato inmediato y el registro de codigos de condición, almacenando el resultado en el byte bajo del registro de estado. Registro de Códigos de Condición X * N * Z * V * C * N: Se pone a 0 (Cleared) si el bit 3 del dato inmediato es cero. No cambia en otro caso. Z: Se pone a 0 (Cleared) si el bit 2 del dato inmediato es cero. No cambia en otro caso. V: Se pone a 0 (Cleared) si el bit 1 del dato inmediato es cero. No cambia en otro caso. C: Se pone a 0 (Cleared) si el bit 0 del dato inmediato es cero. No cambia en otro caso. X: Se pone a 0 (Cleared) si el bit 4 del dato inmediato es cero. No cambia en otro caso. Codificación Binaria ANDI a CCR 00000010 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 BYTE de datos ( 8 bits) ANDI to SR - ANDI Immediate to the Status Register (Priviledged Instruction) ADDQ - Add Quick ASL,ASR - Arithmetic Shift ASL Desplazamiento aritmético a la izquierda Operación Sintaxis en Ensamblador ASL Dy,Dx ASL #<dato>,Dx ASL <direccionamiento indirecto de memoria> Atributos Tamaño=(Byte, Word, Long) Descripción Suma el operando fuente con el destino y con el bit X, guarda el resultado en el operando destino Los operandos pueden direccionarse de dos maneras: Registro de Datos a registro de Datos: Los operandos estan contenidos en los registros de datos especificados en la instrucción. Memoria a Memoria: Se indican los operandos con direccionamiento indirecto con predecremento usando el registro de direcciones especificado en la instrucción. El tamaño de los operandos puede ser byte, word, or long. Registro de Códigos de Condición X * N * Z * V * C * N: Se pone a 1 (Set) si el resultado es negativo. Se pone a 0 (Cleared) de otro modo. Z: Se pone a 1 (Set) si el resultado es cero. Se pone a 0 (Cleared) en otro caso. V: Se pone a 1 (Set) si se genera desbordamineto (overflow). Se pone a 0 (Cleared) en otro caso. C: Se pone a 1 (Set) si se genera acarreo. Se pone a 0 (Cleared) en otro caso. X: Toma el mismo valor que el C. Nota: Normalmente el bit Z se pone a 1 via programa antes de iniciar una operación. Esto admite comprobar si el resultado es cero despues de realizar una operación de multiple-precisión Codificación Binaria 1 1 0 0 Reg. Destino 1 Tamaño 0 0 R/M Reg. Fuente Admite dos Modos : 1. R/M=0 si se utiliza ADDX Dy,Dx 1. R/M=1 si se utiliza ADDX -(Ay),-(Ax) El campo Tamaño distingue entre : 1. BYTE = 00 1. WORD = 01 1. LONG = 10 Los operandos son tamaño Byte, Word o Long ASL,ASR - Arithmetic Shift Bcc - Branch Conditionally Bcc Branch Conditionally Operation If (condition true) then PC + d -> PC Assembler Syntax Bcc <label> Attributes Size=(Byte, Word, Long) Description If the specified condition is met, program execution continues at location (PC) + displacement. The displacement is a two's complement integer which counts the relative distance in bytes. The value in the PC is the sign-extend instruction location plus two. If the 8-bit displacement in the instruction word is zero, then the 16-bit displacement (word immediately following the instruction) is used. If the 8-bit displacement in the instruction word is all ones ($FF), then the 32-bit displacement (long word immediately following the instruction) is used. "cc" may specify the following conditions: CC CS EQ GE GT HI LE LS LT MI NE PL VC VS carry clear carry set equal greater or equal greater than high less or equal low or same less than minus not equal plus overflow clear overflow set (!C) C Z N*V+(!N)*(!V) N*V*(!Z)+(!N)*(!V)*(!Z) (!C)*(!Z) Z+N*(!V)+(!N)*V C+Z N*(!V)+(!N)*V N (!Z) (!N) (!V) V Condition Codes Not affected. BCHG - Test a Bit and Change BCHG Test a Bit and Change Operation ~(<bit number> of Destination) -> Z; ~(<bit number> of Destination) -> (bit number) of Destination Assembler Syntax BCHG Dn,<ea> BCHG #<data>,<ea> Attributes Size=(Byte, Long) Description A bit in the destination operand is tested and the state of the specified bit is reflected in the Z condition code. After the test, the state of the specified bit is changed in the destination. If a data register is the destination, then the bit numbering is a modulo 32 allowing bit manipulation on all bits in a data register. If a memory location is the destination, a byte is read from that location, the bit operation is performed using the bit number, modulo 8, and the byte is written back to the location. In all cases, bit zero refers to the least significant bit. The bit number for this operation may be specified in two different ways: Immediate: the bit number is specified in the second word of the instruction. Register: the bit number is contained in a data register specified in the instruction. Condition Codes X - N - Z * V - C - N Not affected. Z Set if the bit tested is zero. Cleared otherwise. V Not affected. C Not affected. X Not affected. BCLR - Test a Bit and Clear BCLR Test a Bit and Clear Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. BRA - Branch Always BRA Branch Always Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. BSET - Test a Bit and Set BSET Test a Bit and Set Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. BSR - Branch to Subroutine BSR Branch to Subroutine Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. BTST - Test a Bit CHK - Check Register against Bounds CHK Check Register against Bounds Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. CLR - Clear an Operand CLR Clear an Operand Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. CMP - Compare CMP Compare Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. CMPA - Compare Address CMPA Compare Address Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. CMPI - Compare Immediate CMPI Compare Immediate Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. CMPM - Compare Memory CMPM Compare Memory Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. DBCC - Test Condition, Decrement and Branch DBCC Test Condition, Decrement and Branch Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. DIVS - Signed Divide DIVS Signed Divide Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. DIVU - Unsigned Divide DIVU Unsigned Divide Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. EOR - Exclusive OR Logical EOR Exclusive OR Logical Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. EORI - Exclusive OR Immediate EORI Exclusive OR Immediate Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. EXG - Exchange Registers EXG Exchange Registers Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. EXT - Sign Extend EXT Sign Extend Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - N. Z. V. C. X. JMP - Jump V - C - JMP Jump Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. JSR - Jump to Subroutine JSR Jump to Subroutine Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. LEA - Load Effective Address LEA Load Effective Address Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. LINK - Link and Allocate LINK Link and Allocate Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. LSL,LSR - Logical Shift MOVE - Move Data from Source to Destination MOVE Move Data from Source to Destination Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. MOVE from SR - Move from the Status Register MOVE from SR Move from the Status Register Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N. Z. V. C. X. N - Z - V - C - MOVE to CCR - Move to Condition Codes MOVE to CCR Move to Condition Codes Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. MOVE to SR - Move to the Status Register MOVE to SR Move to the Status Register Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N. Z. V. C. X. N - Z - V - C - MOVE USP - Move User Stack Pointer MOVE USP Move User Stack Pointer Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. MOVEA - Move Adress MOVEA Move Adress Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N. Z. V. C. X. N - Z - V - C - MOVEM - Move Multiple Registers MOVEM Move Multiple Registers Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. MOVEP - Move Peripheral Data MOVEP Move Peripheral Data Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N. Z. V. C. X. N - Z - V - C - MOVEQ - Move Quick MOVEQ Move Quick Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. MULS - Signed Multiply MULS Signed Multiply Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N. Z. V. C. X. N - Z - V - C - NBCD - Negate Decimal with Extend NBCD Negate Decimal with Extend Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. NEG - Negate NEG Negate Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N. Z. V. C. X. N - Z - V - C - NEGX - Negate with Extend NEGX Negate with Extend Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. NOP - No Operation NOP No Operation Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N. Z. V. C. X. N - Z - V - C - NOT - Logical Complement NOT Logical Complement Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. OR - Inclusive OR Logical OR Inclusive OR Logical Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N. Z. V. C. X. N - Z - V - C - ORI - Inclusive OR Immediate ORI Inclusive OR Immediate Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. PEA - Push Effective Address PEA Push Effective Address Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N. Z. V. C. X. N - Z - V - C - RESET - Reset External Devices ROL,ROR - Rotate (without Extend) ROXL,ROXR - Rotate with Extend RTE - Return from Exception RTE Return from Exception Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. RTR - Return and Restore Condition Codes RTR Return and Restore Condition Codes Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. RTS - Return from Subroutine RTS Return from Subroutine Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. SBCD - Subtract Decimal with Extend SBCD Subtract Decimal with Extend Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. SCC - Set According to Condition SCC Set According to Condition Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. STOP - Load Status Register and Stop STOP Load Status Register and Stop Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. SUB - Subtract Binary SUB Subtract Binary Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. SUBA - Subtract Address SUBA Subtract Address Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. SUBI - Subtract Immediate SUBI Subtract Immediate Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. SUBQ - Subtract Quick SUBQ Subtract Quick Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. SUBX - Subtract with Extend SUBX Subtract with Extend Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. SWAP - Swap Register Halves SWAP Swap Register Halves Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. TAS - Test and Set an Operand TAS Test and Set an Operand Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. TRAP - Trap TRAP Trap Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. TRAPV - Trap on Overflow TRAPV Trap on Overflow Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. TST - Test an Operand TST Test an Operand Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. UNLK - Unlink UNLK Unlink Operation Assembler Syntax Attributes Size=(Byte) Condition Codes X - N - Z - V - C - N. Z. V. C. X. http://www.ii.uam.es/~fjgomez/68000/tutorial/cap4.html Operaciones de movimiento de datos Los transvases de datos y direcciones son realizados principalmente por la instrucción MOVE. Esta instrucción con sus diversos modos de direccionamiento y las tres longitudes de operandos permite todo tipo de movimiento entre registros y memoria. Además de esto se permiten ciertos tipos de movimiento de datos especiales que son ejecutados por las instrucciones: MOVEM ( mueve múltiples registros de una sola vez), MOVEP (mueve valores a direcciones de periféricos de 8 bits), MOVEQ (ejecuta un movimiento rápido de valores inmediatos pequeños), EXG (intercambia el contenido de dos registros entre sí), LEA (carga una dirección efectiva), PEA ( introduce en el stack una dirección efectiva), LINK ( establece un encadenamiento), UNLIK ( elimina un encadenamiento). Instrucción Sintaxis de los operandos Tamaño Operación EXG Rn, Rm 32 Rn <=> Rm LEA < ea > , An 32 < ea > => An LINK An, # < d > 16 - >32 MOVE MOVEA < ea >, < ea > < ea >, list 8 , 16 , 32 16 , 32 -> 32 Origen => Destino MOVEM list , < ea > < ea > , list 16 , 32 16 , 32 -> 32 Reg de lista => Destino Origen => Reg de lista MOVEP Dn , (d16 , An ) 16 , 32 Dn [ 31:24 ] => ( An + d ) ; Dn [ 23:16 ] => ( An + d + 2 ) ; Dn [ 15:8 ] => ( An + d + 4 ) ; Dn [ 7:0 ] => ( An + d + 6 ) ; ( An + d ) => Dn [ 31:24 ] ; ( An + d + 2 ) => Dn [ 23:16 ] ; ( An + d + 4 ) => Dn [ 15:8 ] ; ( An + d + 6 ) => Dn [ 7:0 ] ; Dato inmediato => Destino (d16 , An ), Dn SP-4 => SP ; An => (SP) SP => An ; SP + d => SP MOVEQ # < data , Dn 8 -> 32 PEA < ea > 32 SP - 4 => SP ; < ea > => ( SP ) UNLK An 32 An => SP ; ( SP ) => An ; SP + 4 => SP fig. 4-2 - Instrucciones de movimientos de datos. Operaciones aritméticas con enteros Las operaciones aritméticas son básicamente cuatro: ADD (suma), SUB (resta), MUL (multiplicación) y DIV (división). A estas deben añadirse CMP/CMPM (comparación), CLR (borrado) y NEG (negación o cambio de signo). Las operaciones de multiplicación y división tienen dos variantes según se trate de aritmética con signo o sin signo (MULS/MULU y DIV/DIVU). Se pueden realizar operaciones multiprecisión mediante las operaciones ADDX, SUBX, NEGX y EXT (extensión de un operando de un determinado tamaño hasta otro superior). Instrucción Sintaxis de los operandos Tamaño ADD ADDA Dn , < ea > < ea > , Dn < ea > , An 8 , 16 , 32 8 , 16 , 32 16 , 32 Operación Origen + Destino => Destino # < data > , < ea > # < data > , < ea > 8 , 16 , 32 8 , 16 , 32 16 , 32 Dato inmediato + Destino => Destino ADDX Dn , Dn - ( An) , - ( An) 8 , 16 , 32 8 , 16 , 32 Origen + Destino + X => Destino CLR < ea > 8 , 16 , 32 0 => Destino CMP CMPA < ea > , Dn < ea > , An 8 , 16 , 32 16 , 32 Destino - Origen CMPI # < data > , < ea > 8 , 16 , 32 Destino -> Dato inmediato CMPM ( An ) + , ( An ) + 8 , 16 , 32 Destino - Origen < ea > , Dn 32/ 16 => 16 Destino / Origen => Destino con / sin signo Dn Dn 8 => 16 16 => 32 Destino signo ext. => Destino < ea > , Dn 16 * 16 => 32 Destino / Origen => Destino con / sin signo NEG < ea > 8 , 16 , 32 0 - Destino => Destino NEGX < ea > 8 , 16 , 32 0 - Destino - X -> Destino SUB 8 , 16 , 32 8 , 16 , 32 16 , 32 Destino - Origen => Destino SUBA Dn , < ea > < ea > , Dn < ea > , An SUBI SUBQ # < data > , < ea > # < data > , < ea > 8 , 16 , 32 8 , 16 , 32 Destino - Dato inm. => Destino SUBX Dn , Dn - ( An) , - ( An) 8 , 16 , 32 8 , 16 , 32 Destino - Origen - X => Destino ADDI ADDQ DIVS DIVU EXT MULS MULU fig. 4-3 - Instrucciones de operaciones aritméticas. 4.1.3.- Operaciones de lógica. Las operaciones lógicas disponibles son AND, OR, EOR y NOR. Estas admiten todo tipo de operando entero con cualquier tamaño. Para realizar operaciones lógicas con datos inmediatos existen las siguiente variantes de las anteriores operaciones: ANDI, ORI y EORI. A este conjunto de instrucciones se puede añadir la TST, que realiza una comparación del operando con cero, afectando en consecuencia a los códigos de condición. Instrucción Sintaxis de los operandos AND Tamaño Operación Dn, < ea > < ea > , Dn 8 , 16 , 32 8 , 16 , 32 # < data > , < ea > 8 , 16 , 32 Dato inm. ^ Destino => Destino EOR Dn, < ea > 8 , 16 , 32 Origen Destino => Destino EORI # < data > , < ea > 8 , 16 , 32 Dato inm. Destino -> Destino NOT < ea > 8 , 16 , 32 ~ Destino => Destino OR Dn, < ea > < ea > , Dn 8 , 16 , 32 8 , 16 , 32 Origen V Destino => Destino # < data > , < ea > 8 , 16 , 32 < ea > 8 , 16 , 32 ANDI ORI TST Origen Destino => Destino Dato inm. V Destino => Destino Destino - 0 ==> Condiciones del CCR fig. 4-4 - Instrucciones de operaciones de lógica. 4.1.4.- Operaciones de rotación y desplazamiento. Se dispone de instrucciones de desplazamiento de los bits en un operando en los dos sentidos, derecha e izquierda, y en modo aritmético (con signo) y lógico. Estas son ASL, LSL y LSR Las operaciones de rotación también pueden realizarse en los dos sentidos, y además pueden afectar o no al bit de extensión en el registro de códigos de condición (CCR). se tienen por tanto cuatro instrucciones que son: ROR, ROL, ROXR, ROXL. Las operaciones de rotación y desplazamiento sobre registros admiten todos los tamaños de operando y un número de bits a desplazar entre 1 y 8. Si el operando está en memoria sólo se admite el tamaño word y movimientos de un bit. La instrucción swap intercambia los contenidos de las dos mitades de 16 bits de un registro. Instrucción Sintaxis de los operandos ASL Dn, Dn # < data >, Dn < ea > ASR Dn, Dn # < data >, Dn < ea > Tamaño 8 , 16 , 32 8 , 16 , 32 16 8 , 16 , 32 8 , 16 , 32 16 Operación LSL Dn, Dn # < data >, Dn < ea > 8 , 16 , 32 8 , 16 , 32 16 LSR Dn, Dn # < data >, Dn < ea > 8 , 16 , 32 8 , 16 , 32 16 ROL Dn, Dn # < data >, Dn < ea > 8 , 16 , 32 8 , 16 , 32 16 ROR Dn, Dn # < data >, Dn < ea > 8 , 16 , 32 8 , 16 , 32 16 ROXL Dn, Dn # < data >, Dn < ea > 8 , 16 , 32 8 , 16 , 32 16 ROXR Dn, Dn # < data >, Dn < ea > 8 , 16 , 32 8 , 16 , 32 16 SWAP Dn 32 fig. 4-5 - Instrucciones de rotación y desplazamiento. 4.1.5.- Operaciones de manipulación de bits. Se pueden realizar operaciones con bits mediante las instrucciones: BTST ( testeo de un bit ). BSET ( testeo y puesta a uno de un bit ), BCLR ( testeo y puesta a cero de un bit ) y BCHG ( testeo y cambio del estado de un bit ). Cuando el operando es un registro el tamaño asumido es de 32 bits, pero si el operando está en memoria el tamaño se toma como byte. Sintaxis de los operandos Tamaño BCHG Dn , < ea > # < data > , < ea > 8 , 32 8 , 32 ~ Destino [P] => Z => Destino [P] BCLR Dn , < ea > # < data > , < ea > 8 , 32 8 , 32 ~ Destino [P] => Z; 0 => Destino [P] BSET Dn , < ea > # < data > , < ea > 8 , 32 8 , 32 ~ Destino [P] => Z; 1 => Destino [P] BTST Dn , < ea > 8 , 32 ~ Destino [P] => Z ; Instrucción Operación # < data > , < ea > 8 , 32 fig. 4-6 - Instrucciones de manipulaación de bits. 4.1.6.- Operaciones con decimal codificado en binario ( BCD ). Pueden realizarse operaciones aaritméticas multiprecisión con formato decimal codificado en binario (BCD) mediante: ABCD ( suma decimal con extensión ),SBCD ( resta decimal con extensión ) y NBCD ( negación o cambio de signo decimal con extensión ). Instrucción Sintaxis de los operandos Tamaño Operación ABCD Dn, Dn - ( An ), - ( An ) 8 8 Origen + Destino + X => Destino 10 10 10 NBCD < ea > 8 0 - Destino + X => Destino 10 10 SBCD Dn, Dn - ( An ), - ( An ) 8 8 Destino - Origen - X => Destino 10 10 10 fig. 4-2 - Instrucciones de movimientos de datos. 4.1.7.- Operaciones de control del programa. El flujo del programa se controla mediante tres grupos de instrucciones: saltos condicionales ( Bcc y DBcc ), saltos incondicionales ( BRA, BSR, JMP y JSR ) y retornos ( RTR y RTS ). Las instrucciones de salto condicional admiten las condiciones de test vistas en el apartado 3.2. La instrucción NOP no tiene ningún efecto, por lo que puede considerarse dentro de este grupo como un salto a la siguiente posición. Instrucción Sintaxis de los operandos Tamaño Operación Condicionales Bcc DBcc < label > 8 , 16 Dn , < label > 16 Si cc cierta, PC + d => PC Si cc falsa, Dn - 1 => Dn; si Dn distinto - 1, PC + d => PC Scc < ea > 8 Si cc cierta 11111111 => Destino si no, 0 => Destino Incondicionales BRA < label > 8, 16 PC + d => PC BSR < label > 8, 16 SP - 4 => SP; PC => ( SP ); PC + d => PC JMP < ea > - < ea > => PC JSR < ea > - SP - 4 =>SP; PC => ( SP ); < ea > => PC NOP - - - Retornos RTR - - SP => CCR; SP + 2 => SP; ( SP ) => PC; SP + 4 => SP RTS - - ( SP ) => PC; SP + 4 => SP fig. 4-8 - Instrucciones de control de programa. 4.1.8.- Operaciones de control del sistema. Las operaciones de control del sistema se realizan mediante las instrucciones privilegiadas ( RESET, RTE, STOP, ORI to SR, MOVE USP, ANDI to SR, EORI to SR y MOVE EAA to SR ), las de generación de traps ( TRAP, TRAPV y CHK ) y aquellas que utilizan o modifican el registro de estado SR ( ANDI CCR, EORI CCR, MOVE CCR to EA, ORI CCR y MOVE SR to EA ). Instrucción Sintaxis de los operandos Tamaño Operación Privilegiadas ANDI # < data > , SR 16 Dato inmediato ^ SR =>SR EORI # < data > , SR 16 Dato inmediato SR => SR MOVE < ea > , SR 16 Origen => SR MOVE USP, An An, USP 32 USP => An An => USP # < data > , SR 16 Dato inmediato SR => SR ORI RESET - - Activa la linea RESET RTE - - ( SP ) => SR; SP + 2 => SP; ( SP ) => PC; SP + 4 => SP; STOP # < data > 16 Dato inmediato => SR; Parar Generación de Traps CHK < ea >, Dn 16 Si Dn < 0 ó Dn > ( < ea > ), entonces excepción CHK TRAP # < data > 16 SSP - 4 => SSP; PC => ( SSP ); SSP - 2 => SSP; SR => ( SSP ); Vector trap nº < data > => PC - - TRAPV Si V es 1, proceso de excepción Registro de condiciones ANDI # < data > , CCR 8 Dato inmediato ^ CCR => CCR EORI # < data > , CCR 8 Dato inmediato CCR => CCR MOVE SR, < ea > 16 SR => Destino MOVE < ea > , CCR 16 Origen => CCR # < data > , CCR 8 Dato inmediato CCR => CCR ORI fig. 4-9 - Instrucciones de control del sistema. 4.1.9.- Operaciones multiprocesador. Para trabajar con sistemas multiprocesador se dispone de la instrucción TAS que ejecuta un ciclo de lectura-modificación-escritura indivisible. Instrucción TAS Sintaxis de los operandos Tamaño < ea > 8 Operación Destino - 0; 1 => Destino fig. 4-10 - Instrucciones multiprocesador. 4.2.3 Modos de direccionamiento. MODOS DE DIRECCIONAMIENTO 2.1.-Direccionamiento y Formato de las instrucciones. La codificación de instrucciones del 68000 contiene dos tipos de datos: la operación a realizar y la localización de los operandos. Esta localización de operandos puede hacerse de una de las tres siguientes formas: 'Especificación de registro'. En la codificación de la instrucción hay un campo en el que se determina un número de registro. 'Dirección efectiva'. Este sistema se verá detalladamente a continuación. 'Referencia implícita'. Por definición de la operación a realizar está implícito el uso de determinados registros. Los 14 modos de direccionamiento se agrupan en seis tipos básicos: 1.-Direccionamiento directo a registro * Directo a registro de datos * Directo a registro de direcciones 2.- Direccionamiento absoluto * Absoluto corto * Absoluto largo 3.- Direccionamiento relativo al puntero de programa * Relativo con desplazamiento * Relativo con índice y desplazamiento 4.-Direccionamiento indirecto * Indirecto * Indirecto con postincremento * Indirecto con predecremento * Indirecto con índice y desplazamiento 5.- Direccionamiento inmediato * Inmediato * Inmediato rápido 6.- Direccionamiento implícito * Registro implícito Modos de direccionamiento. 2.2.1- Formato de las instrucciones. La codificación de instrucciones puede ocupar desde una word hasta cinco. En la primera word se especifica la operación a realizar y el tamaño de los operandos. Cuando no se utiliza direccionamiento por dirección efectiva, la word de operación puede llevar también la especificación de registros. En caso de utilizar el método de dirección efectiva se necesitan otras words de extensión que en alguna ocasión pueden ser hasta cuatro. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 word de operación ( especifica la operación y el modo ) operando inmediato o extensión de dirección efectiva de origen ( si es necesario, una o dos words ) dirección efectiva del destino ( si es necesario, una o dos words ) Formato de las instrucciones 2.2.2- Dirección efectiva. La mayoría de los direccionamientos en el 68000 se realizan mediante el método de 'dirección efectiva'. Este método consiste en codificar dentro de la word de operación el tipo de direccionamiento a usar según la pauta de la siguiente figura. Codificación de la dirección efectiva Codificación: MODO DE DIRECCIONAMIENTO Notación MODO Registro Directo por registro de datos. Dn 000 número Directo por registro de direcciones An 001 número Indirecto por registro de direcciones. (An) 010 número idem con postincremento. (An)+ 011 número idem con predecremento. -(An) 100 número idem con desplazamiento. (d16,An) 101 número (d8,An,Xm) 110 número idem con índice y desplazamiento. Absoluto corto xxx.W 111 000 Absoluto largo xxx.L 111 001 (d16,PC) 111 010 111 011 111 Direccionamientos por dirección efectiva 100 PC con desplazamiento PC con indice y desplazamiento Inmediato (d8,PC,Xn) #<dato> 2.2.3- Modos directos a registro. Estos modos especifican como operando uno de los 16 registros multifunción del 68000. El tamaño a utilizar de los mismos queda especificado en la word de operación. Considérese como ejemplo la instruccion ADD.W <ea>,D3 que realizará la siguente suma con operandos de tamaño word : Dn + <ea> -> Dn. Que tiene como formato general La codificación de esta instruccion a falta de decidir el modo de direccionamiento empleado para el operando fuente será donde bits 15-12 indican el código de operacion para ADD (1101) bits 11-9 indican que el registro de datos D3 es el destino (3 =011) bits 8-6 indican el tamaño de operando (001 = WORD) bits 5-3 indicarán el modo de direccionamiento de la fuente bits 2-0 indicaran el registro(caso de ser necesario de la fuente). 2.2.3.1- Directo a registro de datos. sería por ejemplo ADD.W D1,D3 El operando fuente es el registro de datos indicado en el código. donde modo=000 indica un registro de datos y 001 indica que es D1 2.2.3.2- Directo a registro de direcciones. sería por ejemplo ADD.W A1,D3 El operando fuente es el registro de direcciones indicado en el código. donde modo=001 indica un registro de direcciones y 001 indica que es A1 2.2.4- Modos de direccionamiento de memoria. Estos modos especifican como operando una posición de memoria mediante diferentes cálculos para obtener la dirección de la misma. 2.2.4.1- Indirecto por registro de direcciones. sería por ejemplo ADD.W (A0),D3 El operando se encuentra en memoria, en una posición cuya dirección se corresponde con el contenido del registro An. donde modo=010 indica indirecto por registro de direcciones y 000 indica que es el registro A0 2.2.4.2- Indirecto con postincremento. sería por ejemplo ADD.W (A0)+,D3 El operando se encuentra en memoria, en una posición cuya dirección se corresponde con el contenido del registro An. Una vez determinada dicha dirección se incrementa el contenido del registro An en 1, 2 ó 4 en función de la longitud de los operandos (byte, word ó long word respectivamente). donde modo=011 indica indirecto por registro de direcciones y 000 indica que es el registro A0 NOTA: Si el registro es A7 (stack) y el tamaño de la operación es byte, el postincremento es de dos unidades para mantener el alineamiento en direcciones pares del stack. El byte queda almacenado en la dirección par, dejando sin significado el contenido de la dirección impar inmediatamente siguiente. 2.2.4.3- Indirecto con predecremento. sería por ejemplo ADD.W -(A0),D3 Se comienza por decrementar el contenido del registro An en 1, 2 ó 4 en función de la longitud de los operandos (byte, word ó long word respectivamente). A continuación se considera que el operando se encuentra en memoria, en una posición cuya dirección se corresponde con el contenido del registro An. donde modo=011 indica indirecto por registro de direcciones y 000 indica que es el registro A0 NOTA: Si el registro es A7 (stack) y el tamaño de la operación es byte, el predecremento es de dos unidades para mantener el alineamiento en direcciones paresdel stack. El byte queda almacenado en la dirección impar inmediatamente siguiente. 2.2.4.4- Indirecto con desplazamiento. ADD 4(A0),D3 Al contenido del registro An se le suma un entero de 16 bits previamente extendido a 32, que debe encontrarse en la primera word de extensión (detrás de la word de operación). El resultado de dicha operación es la dirección de memoria que determina el operando. 2.2.4.5- Indirecto con índice y desplazamiento. El formato de la instrucción sería donde Rn es el numero de registro empleado como indice (1) Indica el tipo de registro indice , = registro de datos y 1 registro de direcciones (2) Indica el tamaño del registro empleado como indice , 0 = WORD, 1 = LONG, Desplazamietno de 8 bits. ( es un numero en complemento a 2) Como por ejemplo : ADD 4(A0,D6),D3 Al contenido del registro An se le suma un entero de 8 bits previamente extendido a 32, que debe encontrarse en la primera word de extensión (detrás de la word de operación). A continuación, al resultado obtenido se le suma el registro índice (también codificado en la word de extensión). Si el registro índice está tomado en tamaño word, es extendido a 32 bits con anterioridad a la suma. Finalmente el resultado de ambas sumas es la dirección de memoria que determina el operando. La operación realizada sería la suma siguiente: o también puede ser ADD 4(A0,D6.L),D3 2.2.5- Modos especiales de direccionamiento. Estos modos de direccionamiento no se basan en la utilización de registros. 2.2.5.1- Direccionamiento absoluto corto. por ejemplo ADD ETIQUETA,D3 donde modo=111 indic modo especial y 000 indica que la direccion especificada en la etiqueta cabe en un WORD. Este modo de direccionamiento se basa en una word de extensión de la que se obtiene la dirección del operando una vez que se le ha extendido el signo hasta 32 bits. Por tanto este direccionamiento se puede utilizar dentro de los 32 kbytes primeros de la memoria (0000-7FFF) y dentro de los 32 kbytes finales (FF8000-FFFFFF). 2.2.5.2- Direccionamiento absoluto largo. por ejemplo ADD ETIQUETA,D3 donde modo=111 indic modo especial y 001 indica que la direccion especificada en la etiqueta cabe en un LONG. Este modo de direccionamiento utiliza dos words de extensión de las que se obtiene la dirección del operando por concatenación, situando la primera como parte alta de la dirección y la segunda como parte baja. 2.2.5.3- Indirecto por PC con desplazamiento. Al contenido del puntero de programa (program counter) se le suma un entero de 16 bits previamente extendido a 32, que debe encontrarse en la primera word de extensión (detrás de la word de operación). El resultado de dicha operación es la dirección de memoria que determina el operando. La dirección que contiene el puntero de programa al tomar su contenido para hacer la suma es la de la word de extensión. 2.2.5.4- Indirecto por PC con índice. Al contenido del contador de programa (program counter) se le suma un entero de 8 bits previamente extendido a 32, que debe encontrarse en la primera word de extensión (detrás de la word de operación). A continuación, al resultado obtenido se le suma el registro índice (también codificado en la word de extensión). Si el registro índice está tomado en tamaño word, es extendido a 32 bits con anterioridad a la suma. Finalmente el resultado de ambas sumas es la dirección de memoria que determina el operando. La dirección que contiene el puntero de programa al tomar su contenido para hacer la suma es la de la word de extensión. El formato de la instrucción tiene la misma estructura que la explicada con anterioridad el el direcionamiento indirecto con índice y desplazamiento. 2.2.5.5- Dato inmediato. Con este tipo de direccionamiento el operando se encuentra en una o dos words de extensión, dependiendo de la longitud de la operación. Si la operación es de byte se utiliza una word de extensión cuyos bits 0-7 son el operando y los 8-15 se ponen a cero. En el caso de una operación de tamaño word se utiliza también una sola word y toda ella es el operando. Por último, en el caso de un tamaño de operación long word, el operando se forma por concatenación de dos words de extensión; la primera es la parte alta (bits 16-31) y la segunda la parte baja (bits 0-15). Por ejemplo ADDI #7,D3 El formato general de esta instrucción es que en el caso del ejemplo es Un caso particular es el direecionamiento inmediato rápido ADDQ #7,D3 con el siguiente formato general que se reduce por tanto a 2.2.6- Direccionamiento implícito. Algunas instrucciones llevan implícito el uso de determinados registros. Estas son las siguientes: Mnemónico Instrucción Bcc, BRA Salto condicional e incondicional Registros afectados PC BSR Salto a subrutina PC, SP CHK Chequeo de registros entre límites SSP, SR DBcc Test de condición, decremento y salto DIVS División con signo SSP, SR DIVU División sin signo SSP, SR JMP Salto JSR Salto a subrutina LINK Encadena y reserva espacio MOVE CCR Mover los códigos de condición MOVE SR Mover el registro de estado MOVE USP Mover el apuntador de pila de usuario PC PC PC, SP SP SR SR USP PEA Apilar la dirección efectiva SP RTE Retorno de una excepción PC, SP, SR RTR Retorno restablecido códigos condición PC, SP, SR RTS Retorno de subrutina PC, SP Trap SSP, SR TRAPV Trap si hay rebose SSP, SR UNLK Desencadenar TRAP SP http://www.ii.uam.es/~fjgomez/68000/tutorial/cap2.html Modos de direccionamiento sin ningún componente. El modo de direccionamiento sin componente, normalmente llamado direccionamiento inmediato, es una forma particular ya que no tiene componente de dirección. El valor del operando se especifica directamente en la misma instrucción. La importancia del direccionamiento inmediato es obvia debido a la frecuencia con que esta ocurre. La mayoría de las constantes en un programa son especificadas usando direccionamiento inmediato lo cual es ventajoso debido a que las constantes suelen ser números pequeños (cero y uno ocurren frecuentemente). Consecuentemente, esto es mas eficiente para especificar las constantes, mejor que la ubicación de una dirección de memoria. Además las constantes no necesitan ser cambiadas, porque ellas pueden ser colocadas en la misma instrucción. Hay dos lugares, básicamente diferentes, en los cuales se almacena el dato inmediato : 1. Dentro de la instrucción básica: esto es frecuentemente llamado direccionamiento inmediato corto o rápido. Las constantes pueden ser solamente pequeñas (debido a que ellas tienen que ajustarse dentro del primer byte o palabra de instrucción), sin embargo ellas usan memoria mas eficientemente. 2. Dentro de extensiones de instrucciones: este método usa constantes con la longitud igual a la longitud de instrucción básica o un múltiplo de ellas. La longitud del dato inmediato es normalmente especificada dentro de la parte básica y el dato sigue inmediatamente a esta parte básica por ello se llama direccionamiento inmediato. Modos de direccionamiento de un componente Estos modos de direccionamiento especifican la dirección efectiva del valor del operando mediante el uso de un único componente en la operación especifica. Este componente puede ser un numero de registro o una dirección absoluta de un operando. Ambos componentes pueden ser usados en forma directa o indirecta. Direccionamiento registro-directo. En este modo, se especifica un numero de registro que indica al registro que contiene el valor del operando. Este modo es usado frecuentemente por su eficiencia y velocidad. Ya que son pocos los registros que están disponibles (típicamente 8 o 16), se puede obtener una especificación compacta del operando, usando 3 o 4 bits. Además, porque el archivo del registro esta localizado normalmente en un chip, este tiempo de acceso es muy pequeño comparado con el tiempo de acceso a memoria o incluso al cache. Todas las arquitecturas modernas poseen más de un registro para soportar este modo. En arquitecturas con solo un registro, este es a menudo especificado implícitamente. La arquitectura MC68020 divide su set de registro en dos grupos : uno denominado Registros de datos los cuales están destinados principalmente para utilizarse como fuente o destino para las operaciones aritméticas y lógicas. Y el otro grupo denominado Registros de direcciones los cuales se utilizan principalmente para especificar direcciones de operandos Direccionamiento absoluto. En este modo de direccionamiento una instrucción esta compuesta por el código de operación y a continuación la dirección del operando, directamente especificada en uno o más byte según el alcance del campo de direcciones. El direccionamiento absoluto es necesario en muchas arquitecturas para la especificación de un vector de entrada / salida y direcciones del registro de estado (asumiendo que ellas forman una superposición lógica con la memoria principal. Direccionamiento indirecto. Este direccionamiento es muy usado cuando las direcciones de las estructuras de datos no son conocidas, hasta que se corra el programa, porque las direcciones deben ser calculadas con instrucciones y almacenadas en un registro, después de lo cual el operando puede ser recuperado vía este registro. Direccionamiento indirecto con modificación de registro. Son posibles muchas variaciones del modo de direccionamiento registro indirecto básico. Muchas arquitecturas soportan modos de direccionamiento en los cuales el registro contiene la dirección del operando, la cual es modificada antes o después de usado. Son entonces posibles 4 modos, dependiendo de la dirección de la modificación (incremento o decremento) y del tiempo de modificación (pre o pos modificación). Modos de direccionamientos de dos componentes. Se pueden combinar dos componentes básicos para formar un modo de direccionamiento de dos componentes. Generalmente uno de los componentes es denominado Base, mientras que el otro se denomina Desplazamiento, a menudo el desplazamiento es la distancia que hay entre la dirección base y la dirección del operando. La dirección base y el desplazamiento pueden ser fijos (conociendo el tiempo de compilación) o variables (calculando el tiempo de ejecución del programa). Direccionamiento indexado. En este modo se especifica la dirección base (fija) en el código de instrucción (comparable al direccionamiento absoluto), así para formar la dirección del operando se suma a la dirección base, el contenido de un registro denominado índice. Este modo se emplea cuando la dirección base de una estructura de datos, tal como un vector, se conoce en el momento de la compilación pero la posición exacta del elemento solo se puede determinar en el momento de la ejecución. Para acondicionar el tamaño del operando de varias longitudes, el indice es a menudo multiplicado por un factor de escala. Si un vector A [0 .. 100] posee datos ocupando 4 byte, el factor de escala es 4, asumiendo una resolución de dirección de un byte. Dado que la dirección base para el vector A[0..100], cuya dirección de comienzo es 1000, el elemento A[3] puede ser encontrado en la dirección 1000 + 34 = 1012. También existe el modo de indexado indirecto, el cual presenta dos variantes : Preindexado indirecto y Pos-indexado indirecto. En el modo de pre-indexado, el desplazamiento se suma a la dirección base, produciendo una dirección intermedia. Los contenidos de estas direcciones intermedias son luego usados como direcciones de operandos. En el modo de posindexado, la dirección base es usada como una dirección intermedia. Después, el desplazamiento se adiciona al contenido de la dirección intermedia para obtener la dirección del operando. Direccionamiento base. Direccionamiento base-indexado. En este modo, tanto la dirección base como el desplazamiento son variables, y estos son calculados en el tiempo de ejecución. Esto permite el acceso a un elemento arbitrario en una estructura de datos, con la dirección de comienzo que es desconocida al compilar. Direccionamiento relativo al contador de programa. Esta es una clase especial de modo de direccionamiento de dos componentes, la cual usa el contador de programa (PC) como el registro que contiene la dirección base. En este modo se obtiene la dirección efectiva como la suma de un desplazamiento contenido como segundo byte de la instrucción con el contenido del PC. Dado que el valor de la dirección base es variable hay dos modos de direccionamiento posibles : el PC base (llamado generalmente direccionamiento relativo)y el PC base indexado. El uso más común del direccionamiento PC relativo es en instrucciones divididas, las cuales son esenciales para la implementación de estructuras de control en lenguajes de alto nivel. Modos de direccionamiento de multi-componentes. Todos los modos de direccionamiento previamente tratados pueden ser combinados para formar todas los tipos de modos de direccionamiento multi-componentes (algunos muy utilizados) 4.2.4 Lenguaje ensamblador. Estructura general de un programa en ensamblador. En una programa escrito en lenguaje ensamblador, además de las 35 instrucciones que interpreta el procesador también se colocan directivas, que son comandos para realizar ciertas operaciones con el programa. A continuación se comentan las partes que generalmente hay en un programa: 1º. Modelo de procesador y sistema de numeración. Los programas comienzan con la directiva list que referencia el modelo de microcontrolador. También se suele especificar el tipo de numeración que se empleará con la directiva radix. Lo usual es emplear el sistema hexadecimal, en el que los valores se expresan precedidos de “0x”. En los ejemplos que se desarrollarán a lo largo del tema comenzaremos el programa ensamblador con las siguientes directivas (detrás del punto y coma se pueden añadir comentarios): List p=16F84 ;Se utiliza el microcontrolador PIC16F84 Radix hex ; Se usará el sistema hexadecimal 2º. Variables. Las posiciones de la memoria de datos se utilizan para guardar operandos y resultados, además de almacenar registros especiales. Para que al programador le sea más sencillo confeccionar el programa, en lugar de hacer referencia a las posiciones de la memoria donde se encuentran los datos que va a emplear, a cada una de estas posiciones se le asocia un nombre. La directiva equ relaciona un nombre con la dirección que se asigna, así el programador trabaja con nombres y el compilador traduce automáticamente éstos a las direcciones correspondientes. Por ejemplo el registro que contiene la información de estado se encuentra en la dirección 0x03, el puerto de entrada A en 0x05, etc.. Si queremos emplear nombres de variables para estas direcciones de memoria escribiríamos: ESTADO equ 0x03 ;La etiqueta “ESTADO” está asociada a la dirección 0x03 PUERTAA equ 0x05 ;La etiqueta “PUERTAA” está asociada a la dirección 0x05 3º. Origen del programa. Antes de comenzar a escribir instrucciones máquina debe definirse la dirección de la memoria de programa a partir de la cual se desea comenzar a cargar el programa. Para ello se emplea la directiva org. En los PIC el origen del programa siempre se pone en la dirección 0x00 porque es donde comienza a ejecutarse el programa después de hacer un reset. Definiremos el origen de la siguiente manera: org 0x00 ;Inicio de programa Cuando el programa maneja interrupciones, no se comienza a cargar el programa desde la dirección 0x00, porque si se genera una interrupción el programa que la atiende comienza en la dirección 0x04 (vector de interrupción). En este caso lo que se suele hacer es poner en la dirección 0x00 un salto a una dirección de la memoria de programa posterior al vector de reset, por ejemplo saltaríamos a una posición etiquetada como INICIO que se encuentra en la dirección 0x05. org 0x00 ;La siguiente instrucción estará al inicio de la memoria goto INICIO ;Salta a la dirección etiquetada con INICIO org 0x05 ;La siguiente instrucción estará en la dirección 0x05 INICIO ------------end 4º. Cuerpo del programa y final. Tras indicar la dirección donde se comenzará a cargar el programa, sigue el cuerpo del mismo compuesto por las instrucciones máquina y los operandos de éstas. El código se estructura en columnas. La primera columna se utiliza para las etiquetas que se emplean para hacer referencia a partes del programa y nos permiten realizar saltos a estas partes (como INICIO en el ejemplo anterior). Las siguientes columnas contienen el campo de instrucciones, el campo de datos y el campo de comentarios. Los comentarios comienzan con ; ). Al final del programa se coloca la directiva end. 3.4.2. Ejemplos de programación. Ejemplo 6.1. Sumar el contenido de la posición de memoria 0Ch (5) con el contenido de la posición de memoria 0Dh (2) y almacenar el resultado en la posición de memoria 0Eh. El sumador (ALU) del PIC es capaz de sumar dos datos de 8 bits cada uno, pero debido a su configuración uno de los sumandos debe proceder del registro de trabajo W (Figura 6-7). El ejemplo maneja tres posiciones de la memoria de datos de propósito general (figura 6-19). En la posición 0Ch se colocará el primer operando con el valor 5; en la posición 0Dh el segundo con el valor 2 y el resultado se almacenará en 0Eh. Como se vio en la Figura 6-9 las direcciones 0Ch, 0Dh y 0Eh son las tres primeras posiciones de la memoria de datos RAM (banco 0) que el usuario puede emplear para fines propios. Antes de exponer el código del programa se explican las instrucciones que se van a utilizar: Instrucción mov Permite transferir el contenido de un registro fuente f a un registro destino d. En los PIC todos los datos residen en posiciones de la memoria de datos a excepción del registro W. La instrucción mov puede mover tres tipos fundamentales de operandos: 1. El contenido del registro W. 2. El contenido de una posición de memoria de datos. 3. Un literal o valor. movf f,d : mueve el contenido del operando fuente f (posición de la memoria de datos) al destino d (puede ser W o la propia fuente). Programa fuente: El programa fuente esta compuesto por una sucesión de líneas de programa. Cada línea de programa esta compuesta por 4 campos separados por uno o más espacios o tabulaciones. Estos campos son: [Etiqueta] Comando [Operando(s)] [;Comentario] La etiqueta es opcional. El comando puede ser un mnemónico del conjunto de instrucciones. El operando esta asociado al comando, si no hay comando no hay operando, e inclusive algunos comandos no llevan operando. El comentario es opcional para el compilador aunque es buena práctica considerarlo obligatorio para el programador. La etiqueta, es el campo que empieza en la primer posición de la línea. No se pueden insertar espacios o tabulaciones antes de la etiqueta sino será considerado comando. Identifica la línea de programa haciendo que el compilador le asigne un valor automáticamente. Si se trata de una línea cuyo comando es una instrucción de programa del microcontrolador, se le asigna el valor de la dirección de memoria correspondiente a dicha instrucción (location counter). En otros casos se le asigna un valor de una constante, o la dirección de una variable, o será el nombre de una macroinstrucción, etc. El comando puede ser un código mnemónico de instrucción del microcontrolador, o una directiva o pseudoinstrucción para el compilador. En el primer caso será directamente traducido a código de maquina, en el segundo caso será interpretado por el compilador y realizara alguna acción en tiempo de compilación como ser asignar un valor a una etiqueta, etc. El campo de parámetros puede contener uno o más parámetros separados por comas. Los parámetros dependen de la instrucción o directiva. Pueden ser números o literales que representen constantes o direcciones. El campo de comentario debe comenzar con un caracter punto y coma. No necesita tener espacios o tabulaciones separándolo del campo anterior, e incluso puede empezar en la primer posición de la línea. El compilador ignora todo el texto que contenga la línea después de un caracter punto y coma. De esta manera pueden incluirse líneas que contengan solo comentarios, y es muy buena práctica hacer uso y abuso de esta posibilidad para que los programas resulten autodocumentados. http://www.geocities.com/micros_uan/cap2.html Conjunto de instrucciones El conjunto de instrucciones de los microprocesadores PIC 16C5X consiste en un pequeño repertorio de solo 33 instrucciones de 12 bits, que pueden ser agrupadas para su estudio en tres a cinco grupos. En este curso se ha optado por clasificarlas, desde el punto de vista del programador, en cinco categorías bien definidas de acuerdo con la función y el tipo de operandos involucrados. En primer lugar se agrupan las instrucciones que operan con bytes y que involucran algún registro de la memoria interna. En segundo lugar se analizaran las instrucciones que operan solo sobre el registro W y que permiten cargarle una constante implícita o incluida literalmente en la instrucción (literales). En tercer lugar se agrupan las instrucciones que operan sobre bits individuales de los registros de la memoria interna. En cuarto lugar se clasifican las instrucciones de control de flujo del programa, es decir las que permiten alterar la secuencia lineal de ejecución de las instrucciones. Por último se agrupan unas pocas instrucciones que llamaremos especiales, cuyas funciones o tipos de operandos son muy específicos y no encajan en ninguna de las clasificaciones anteriores. Instrucciones de Byte que operan con Registros Estas instrucciones pueden ser de simple o doble operando de origen. El primer operando de origen será siempre el registro seleccionado en la instrucción, el segundo, en caso de existir, será el registro W. El destino, es decir donde se guardara el resultado, será el registro seleccionado o el W, según se seleccione con un bit de la instrucción. El formato genérico de estas instrucciones es el siguiente : 11 10 9 8 7 6 5 4 0 d f 3 f 2 f 1 f f Los bits 0 a 4 (5 bits), denominados “f” permiten seleccionar uno de 32 registros de la memoria interna. El bit 5, denominado “d”, permite especificar el destino del resultado. Si d = 1 el resultado se guardara en el registro seleccionado. Si d = 0 el resultado se guardara en W. Los bits 6 a 11 identifican la instrucción especifica a realizar. Las instrucciones siguientes son las tres operaciones lógicas de doble operando : ANDWF f,d ;operación AND lógica, destino = W f IORWF f,d ;operación OR lógica, destino = W f XORWF f,d ;operación XOR lógica, destino = W f Los nombres mnemónicos de estas instrucciones provienen de : AND W con F, Inclusive OR W con F y XOR W con F. Las que siguen son las cuatro operaciones aritméticas y lógicas sencillas de simple operando : MOVF f,d ;movimiento de datos, destino = f COMF f,d ;complemento lógico, destino = NOT f INCF f,d ;incremento aritmético, destino = f + 1 DECF f,d ;decremento aritmético, destino = f - 1 Los mnemónicos de estas instrucciones provienen de : MOVe File, COMplement File, INCrement File y DECrement File. En las siete instrucciones anteriores el único bit afectado de la palabra de estado del procesador es el Z, que se pone en 1 si el resultado de la operación es 00000000, y se pone en 0 si el resultado tiene cualquier otro valor. A continuación siguen las dos instrucciones de rotación de bits a través del CARRY : RLF f,d ;rotación a la izquierda, destino = f ROT RRF f,d ;rotación a la derecha, destino = f ROT En estas operaciones (Rotate Left File y Rotate Right File) los bits son desplazados de cada posición a la siguiente, en sentido derecho o izquierdo. El desplazamiento es cerrado, formando un anillo, con el bit C (CARRY) de la palabra de estado. En estas dos instrucciones, el único bit afectado de la palabra de estado del procesador es el bit C, que tomará el valor que tenia el bit 7 o el bit 0, según sea el sentido del desplazamiento. Estas instrucciones son muy útiles para la manipulación de bits, y además para realizar operaciones aritméticas, ya que en numeración binaria, desplazar un número a la izquierda es equivalente a multiplicarlo por 2, y hacia la derecha, a dividirlo por 2. La instrucción siguiente realiza el intercambio de posiciones entre los cuatro bits menos significativos y los cuatro más significativos (nibble bajo y nibble alto). SWAPF f,d ;intercambia nibbles, destino = SWAP f Esta instrucción (SWAP File) no afecta ninguno de los bits de la palabra de estado del procesador. Esta instrucción es muy útil para el manipuleo de números BCD empaquetados, en los que en un solo byte se guardan dos dígitos BCD (uno en cada nibble). Las dos operaciones que siguen son la suma y la resta aritméticas : ADDWF f,d ;suma aritmética, destino = f + W SUBWF f,d ;resta aritmética, destino = f - W Estas operaciones (ADD W a F y SUBstract W de F) afectan a los tres bits de estado C, DC y Z. El bit Z se pone en 1 si el resultado de la operación es 00000000, y se pone en 0 si el resultado tiene cualquier otro valor. La suma se realiza en aritmética binaria pura sin signo. Si hay un acarreo del bit 7, es decir que el resultado es mayor que 255, el bit C (carry) resulta 1, en caso contrario resulta 0. Si hay un acarreo del bit 3, es decir que la suma de las dos mitades (nibbles) menos significativas (bits 0 a 3) resulta mayor que 15, se pone en 1 el bit DC (digit carry), en caso contrario se pone en 0. Ejemplos : 1010 0010 1101 0000 + 0100 1111 C DC Z + 0110 1111 C DC Z 1111 0001 0 1 0 0011 1111 1 0 0 La resta se realiza sumando, en binario puro sin signo, el registro f más el complemento a dos de W (el complemento a 1, o complemento lógico, más 1) Ejemplos : f W 0100 0100 - 0010 1000 C DC Z 0001 1100 1 0 0 0010 1000 - 0100 0100 C DC Z 1110 0100 0 1 0 equivalente a : f 0100 0100 cmp.2 W + 1101 1000 C DC Z 0001 1100 1 0 0 0010 1000 + 1011 1100 C DC Z 1110 0100 0 1 0 Los bits de estado C y DC toman el valor normal correspondiente a la suma de f con el complemento a 2 de W. De esta manera el significado para la operación de resta resulta invertido, es decir que C (carry) es 1 si no hubo desborde en la resta, o dicho de otra manera, si el contenido de W es menor que el de f. El bit DC se comporta de manera similar, es decir que DC es 1 si no hubo desborde en la mitad menos significativa, lo que equivale a decir que el nibble bajo del contenido de W es menor que el del registro f. Las instrucciones que siguen son de simple operando, pero son casos especiales ya que el destino es siempre el registro seleccionado : CLRF f ;borrado de contenido, f = 0 MOVWF f ;copia contenido W f, f = W La instrucción CLRF (CLeaR File) afecta solo al bit Z que resulta siempre 0. La instrucción MOVWF (MOVe W a F) no afecta ningún bit de la palabra de estado. Instrucciones de Byte que operan sobre W y Literales Estas instrucciones se refieren todas al registro W, es decir que uno de los operandos de origen y el operando de destino son siempre el registro W. En las instrucciones de este grupo que tienen un segundo operando de origen, este es siempre una constante de programa literalmente incluida en la instrucción, llamada constante literal o simplemente literal. El formato genérico de estas instrucciones es el siguiente : 11 10 9 8 7 6 5 4 3 2 1 0 k k k k k k k k Los bits 0 a 7 especifican la constante literal de 8 bits que se utilizara en la operación. Las tres instrucciones que siguen son las operaciones lógicas tradicionales, similares a las que ya vimos anteriormente, pero realizadas entre una constante de programa y el registro W : IORLW k ; operación OR lógica, W = W k ANDLW k ; operación AND lógica, W = W k XORLW k ; operación XOR lógica, W = W k En estas tres instrucciones (Inclusive OR Literal W, AND Literal W y XOR Literal W) el único bit afectado de la palabra de estado del procesador es el Z, que se pone en 1 si el resultado de la operación es 00000000, y se pone en 0 si el resultado tiene cualquier otro valor. La instrucción que sigue sirve para cargar una constante de programa en el registro W : MOVLW k ;carga constante en W, W=K Esta (MOVe Literal W) instrucción no afecta ninguno de los bits de estado del procesador. La instrucción que sigue (CLeaR W) no correspondería incluirla en este grupo, y pertenece en realidad al primero, el de las instrucciones que operan sobre registros, ya que se trata de un caso especial de la instrucción CLRF, con destino W, y f = 0. La incluimos aquí porque como se le ha asignado un mnemónico particular referido específicamente al registro W, creemos que, desde el punto de vista del programador, es más útil verla dentro del grupo de instrucciones referidas a W. CLRW ;borra el contenido de W, W = 0 Al igual que en la instrucción CLRF, el único bit de estado afectado es el Z que resulta 1. Instrucciones de Bit El formato genérico de estas instrucciones es el siguiente : 11 10 9 8 7 6 5 4 3 2 1 0 b b b f f f f f Los bits 0 a 4 (5 bits), denominados “f”, permiten seleccionar uno de 32 registros de la memoria interna. Los bits 5 a 7, denominados “b”, permiten especificar el numero de bit (0 a 7) sobre el que se operara. Estas instrucciones operan solamente sobre el bit especificado, el resto de los bits del registro no son alterados. Estas instrucciones no tienen especificación de destino, ya que el mismo es siempre el registro seleccionado. BCF f,b ;borra el bit b de f ;bit f(b) = 0 BSF f,b ;coloca en uno el bit b de f ;bit f(b) = 1 Estas instrucciones (Bit Clear File y Bit Set File) no afectan ningún bit de la palabra de estado del procesador. Instrucciones de Control GOTO k ;salto a la posición k (9 bits) del programa Esta es la típica instrucción de salto incondicional a cualquier posición de la memoria de programa (que en la mayoría de los microprocesadores convencionales se llama JUMP). La constante literal k es la dirección de destino del salto, es decir la nueva dirección de memoria de programa a partir de la cual comenzarán a leerse las instrucciones después de ejecutar la instrucción GOTO. Esta instrucción simplemente carga la constante k en el registro PC (contador de programa). La única complicación de esta instrucción es que la constante k es de solo 9 bits, mientras que el registro PC es de 11 bits, ya que en el 16C57 debe permitir direccionar una memoria de programa de 2 K. Los dos bits faltantes, bit 9 y 10 del PC, son tomados respectivamente de los bits de selección de página PA0 y PA1 de la palabra de estado. Este comportamiento particular hace que la memoria de programa aparezca como dividida en paginas de 512 posiciones como se vera más adelante. El programador debe tener en cuenta que antes de ejecutar una instrucción GOTO es posible que haya que programar los bits PA0 y PA1. La que sigue es la instrucción de llamado a subrutina: CALL k ;salto a la subrutina en la posición k (8 bits) Su comportamiento es muy similar al de la instrucción GOTO, salvo que además de saltar guarda en el stack la dirección de retorno de la subrutina (para la instrucción RETLW). Esto lo hace simplemente guardando en el stack una copia del PC incrementado, antes de que el mismo sea cargado con la nueva dirección k. La única diferencia con la instrucción GOTO respecto de la forma en la que se realiza el salto, es que en la instrucción CALL la constante k tiene solo 8 bits en vez de 9. En este caso también se utilizan PA0 y PA1 para cargar los bits 9 y 10 del PC, pero además el bit 8 del PC es cargado siempre con 0. Esto hace que los saltos a subrutina solo puedan realizarse a posiciones que estén en las primeras mitades de las paginas mencionadas. El programador debe tener en cuenta este comportamiento y asegurarse de ubicar las posiciones de inicio de las subrutinas en las primeras mitades de las paginas. La instrucción que aparece a continuación es la de retorno de subrutina: RETLW k ;retorno de subrutina con constante k, W=k Esta (RETurn con Literal in W) instrucción produce el retorno de subrutina con una constante literal k en el registro W. La operación que realiza consiste simplemente en sacar del stack un valor y cargarlo en el PC. Ese valor es el PC incrementado antes de realizar el salto, de la ultima instrucción CALL ejecutada, por lo tanto es la dirección de la instrucción siguiente a dicho CALL.. Dado que el stack es de 11 bits, el valor cargado en el PC es una dirección completa, y por lo tanto se puede retornar a cualquier posición de la memoria de programa, sin importar como estén los bits de selección de pagina. Esta instrucción además carga siempre una constante literal en el registro W. Ya que esta es la única instrucción de retorno de subrutina de los PIC16C5X, no hay en estos microprocesadores forma de retornar de una subrutina sin alterar el registro W. Por otro lado, y con una metodología especial de programación, un conjunto de sucesivas instrucciones RETLW puede ser usado como una tabla de valores constantes incluida en el programa (Ej. : tablas BCD/7 seg., hexa/ASCII, etc.). A continuación se presentan las dos únicas instrucciones de “salteo” (skip) condicional. Estas instrucciones son los únicos medios para implementar bifurcaciones condicionales en un programa. Son muy generales y muy poderosas ya que permiten al programa tomar decisiones en función de cualquier bit de cualquier posición de la memoria interna de datos, y eso incluye a los registros de periféricos, los puertos de entrada/salida e incluso la palabra de estado del procesador. Estas dos instrucciones reemplazan y superan a todo el conjunto de instrucciones de salto condicional que poseen los microprocesadores sencillos convencionales (salto por cero, por no cero, por carry, etc.). BTFSC f,b BTFSS f,b ;salteo si bit = 0, bit = f(0) saltea ;salteo si bit = 1, bit = f(1) saltea BTFSC (Bit Test File and Skip if Clear) saltea la próxima instrucción si el bit b del registro f es cero. La instrucción BTFSS (Bit Test File and Skip if Set) saltea si el bit es 1. Estas instrucciones pueden usarse para realizar o no una acción según sea el estado de un bit, o, en combinación con GOTO, para realizar una bifurcación condicional. Ejemplo 1 : ------------------------btfsc flags,run ;sí ha arrancado el reloj incf tiempo ;incremento contador de tiempo ------------------------- Ejemplo 2 : ------------------------movf tiempo,w ;testeo por tiempo = 60 xorlw 60 btfss STATUS,Z goto acc_2 ;salto si tiempo <> 60 - - - - - - - - - - - - - ;acción 1 ------------------------goto acc_fin acc_2 - - - - - - - - - - - - - ;acción 2 ------------------------acc_fin ;acá se unen los caminos Las instrucciones que siguen son casos especiales de las de incremento y decremento vistas anteriormente. Estas instrucciones podrían categorizarse dentro del grupo de instrucciones orientadas a byte sobre registros (primer grupo), ya que efectivamente operan sobre los mismos, y el formato del código de la instrucción responde al de ese grupo, pero, a diferencia de las otras, pueden además alterar el flujo lineal del programa y por eso se les incluyó en este grupo. DECFSZ f,d ;decrementa y saltea sí 0, destino= f - 1, = 0 saltea INCFSZ f,d ;incrementa y saltea sí 0, destino= f + 1, = 0 saltea Estas dos instrucciones (DECrement File and Skip if Zero, e INCrement File and Skip if Zero) se comportan de manera similar a DECF e INCF, salvo que no afectan a ningún bit de la palabra de estado. Una vez realizado el incremento o decremento, si el resultado es 00000000, el microprocesador salteara la próxima instrucción del programa. Estas instrucciones se utilizan generalmente en combinación con una instrucción de salto (GOTO), para el diseño de ciclos o lazos (loops) de instrucciones que deben repetirse una cantidad determinada de veces. Ejemplo: clrf 10 ;pongo cero en la posición 10 de la memoria interna loop ;lo que sigue se ejecutará 256 veces ..................................... ..................................... ..................................... incfsz 10,1 goto loop ;incremento la posición 10 hasta que llegue a 0 ;si no llego a cero voy a repetir la secuencia ;cuando llegue a cero salteo el goto ..................................... ;y sigue la continuación del programa ..................................... ..................................... Instrucciones Especiales En este grupo se reunieron las instrucciones que controlan funciones específicas del microprocesador o que actúan sobre registros especiales no direccionados como memoria interna normal. La instrucción que sigue es la típica NO OPERATION, existente en casi todos los microprocesadores. NOP ;no hace nada, consume tiempo Esta instrucción solo sirve para introducir una demora en el programa, equivalente al tiempo de ejecución de una instrucción. No afecta ningún bit de la palabra de estado. La siguiente es una instrucción especifica de control de los puertos de entrada/salida. TRIS f ;carga el tristate control, TRISf = W Esta instrucción (TRIState) carga el registro de control de los buffers tristate de un puerto de entrada salida (data dirección register), con el valor contenido en W. El parámetro f debe ser la dirección de memoria interna del puerto, aunque el valor W no será cargado en el puerto sino en el registro de tristate del mismo. Los valores validos para f son 4 y 5 en los 16C54/56 y 4, 5 y 6 en los 16C55/57. Esta instrucción no afecta ningún bit de la palabra de estado. La siguiente instrucción sirve para programar el registro OPTION que controla el RTCC y prescaler OPTION ;carga el registro OPTION, OPTION = W El registro OPTION no es accesible como memoria interna y solo se lo puede programar con esta instrucción. Esta instrucción no afecta ningún bit de la palabra de estado. La instrucción que sigue borra el contador del watch dog timer. Este registro tampoco esta accesible como memoria, y esta es la única instrucción que lo modifica. CLRWDT ;borra el watch dog timer, WDT = 0 Esta instrucción, además, coloca en uno los bits PD (power down) y TO (time-out) de la palabra de estado. La siguiente es una instrucción especial de control del microcontrolador que lo pone en el modo power down. En este modo el microprocesador se detiene, el oscilador se apaga, los registros y puertos conservan su estado, y el consumo se reduce al mínimo. La única forma de salir de este estado es por medio de un reset o por time-out del watch dog timer. SLEEP ;coloca el µC en modo sleep, WDT = 0 Esta instrucción, además, borra el bit PD (power down) y setea el bit TO (time-out) de la palabra de estado. Resumen de instrucciones (clasificación según el fabricante en tres grupos): Instrucciones orientadas a byte: Instrucciones orientadas a bit: Instrucciones orientadas a literal y control: En esta tabla de resumen del conjunto de instrucciones se pueden observar los mnemónicos, la explicación, el número de ciclos, el código de máquina y los bits afectados del registro STATUS para cada una de las instrucciones. http://www.geocities.com/micros_uan/cap21.html Modos de direccionamiento Direccionamiento de la memoria de datos (RAM) La memoria interna se direcciona en forma directa por medio de los 5 bits “f” contenidos en las instrucciones que operan sobre registros. De esta manera se puede direccionar cualquier posición desde la 00 a la 1F. Como se vió en el capítulo correspondiente a los mapas de memoria, las direcciones 10 a 1F corresponden a los bancos de registros, por lo tanto, en los microcontroladores que tengan más de un banco, antes de acceder a alguna variable que se encuentre en esta zona, el programador deberá asegurarse de haber programado los bits de selección de banco en el registro FSR. Los registros especiales y de uso general de la posición 00 a la 0f están presentes en todos los PIC16C5X, al igual que el banco 0 de registros. Los bancos 1, 2 y 3 de registros están presentes solo en el 16C57. El registro FSR, además de servir para seleccionar el banco activo, sirve como puntero para direccionamiento indirecto. La posición 00 del mapa de RAM es la llamada dirección indirecta. Sí en cualquier instrucción se opera con la dirección 00, en realidad se estará operando con la dirección a donde apunte el contenido del FSR. Por ejemplo si el FSR contiene el valor 14, una instrucción que opere sobre la dirección 0, operara en realidad sobre la dirección 14. Se puede decir en este ejemplo que la posición 14 de memoria fue direccionada en forma indirecta a través del puntero FSR. Ejemplo : ; Esta porción de programa borra 5 posiciones de memoria a partir de la dirección 12 FSR equ 04 ..................................... ..................................... ;(definición al comienzo del programa) movlw movwf movlw movwf 5 08 12h FSR ; ;prepara para repetir 5 veces ;(el registro 08 es el contador del loop) ;apunta a la dirección 12h loop: clrf 0 ;borra una posición de memoria incf FSR ;apunta a la siguiente decfsz 08 ;si todavía no borra todas goto loop ;sige borrando ..................................... ..................................... El direccionamiento indirecto es muy útil para el procesamiento de posiciones consecutivas de memoria, como en el ejemplo, o para el direccionamiento de datos en subrutinas. Direccionamiento de la memoria de programa (EPROM, OTP) La instrucción GOTO dispone solo de 9 bits en el código de operación para especificar la dirección de destino del salto. Al ejecutar una instrucción GOTO el microprocesador toma los dos bits que restan para completar la dirección de 11 bits, de los bits 5 y 6 de la palabra de estado. Estos últimos son llamados bits de selección de página (PA0 y PA1). El programador deberá asegurarse de que estos dos bits tengan el valor correcto antes de toda instrucción GOTO. Ver figura 2.2.1 FIG 2.2.1 Direccionamiento directo con instrucción GOTO Deberá tenerse en cuenta además que es posible avanzar de una página a otra en forma automática cuando el PC se incrementa. Esto ocurre si el programa empieza en una página y sigue en la siguiente. Sin embargo, al incrementarse el PC desde la última posición de una página a la primera de la siguiente, los bits PA0 y PA1 no se modifican, y por lo tanto sí se ejecuta una instrucción GOTO, CALL o alguna que actúe sobre el PC, esta producirá un salto a la página anterior, a menos que el programador tenga la precaución de actualizar el valor de dichos bits. Por este motivo es conveniente dividir el programa en módulos o rutinas que estén confinados a una página. En el caso de la instrucción CALL, el direccionamiento se complica un poco más, ya que la misma solo dispone de 8 bits para especificar la dirección de destino salto. En este caso también se utilizan los mismos bits de selección de página para completar los bits décimo y decimoprimero de la dirección, pero falta el noveno bit. En estas instrucciones este bit se carga siempre con 0, lo que implica que solo se pueden realizar saltos a subrutina a las mitades inferiores de cada página. En este caso también el programador deberá asegurarse que el estado de los bits PA0 y PA1 sea el correcto al momento de ejecutarse la instrucción. Ver figura 2.2.2 FIG. 2.2.2 Direccionamiento directo con instrucción CALL Las instrucciones que operan sobre el PC como registro y alteran su contenido provocando un salto, responden a un mecanismo muy similar al de las instrucciones CALL para la formación de la dirección de destino. En este caso los bits 0 a 7 son el resultado de la instrucción, el bit 8 es 0 y los bits restantes se toman de PA0 y PA1. Este mecanismo se llama paginado, y a pesar de que representa una complicación bastante molesta para el programador, resulta muy útil ya que permite ampliar la capacidad de direccionamiento de memoria de programa para las instrucciones de salto. http://www.geocities.com/micros_uan/cap22.html Herramientas de desarrollo UNA MIRADA RAPIDA AL MPLAB Qué es el MPLAB ? EL MPLAB es un “Entorno de Desarrollo Integrado “ (Integrated Development Environment, IDE) que corre en “Windows “, mediante el cual Usted puede desarrollar aplicaciones para los microcontroladores de las familias PIC 16/17. EL MPLAB le permite a Usted escribir, depurar y optimizar los programas (firmware) de sus diseños con PIC 16/17. EL MPLAB incluye un editor de texto, un simulador y un organizador de proyectos. Además, el MPLAB soporta el emulador PICMASTER y a otras herramientas de desarrollo de Microchip como el PICSTART - Plus. De que forma le ayuda el MPLAB ? Con el MPLAB Usted puede: Depurar sus programas fuente. Detectar errores automáticamente en sus programas fuente para editarlos. Depurar los programas utilizando puntos de corte (breakpoints) mediante valores de los registros internos. Observar el flujo del programa con el simulador MPLAB -SIM, ó seguirlo en tiempo real utilizando el emulador PICMASTER. Realizar medidas de tiempo utilizando un cronómetro. Mirar variables en las ventanas de observación. Encontrar respuestas rápidas a sus preguntas, utilizando la Ayuda en línea del MPLAB. LAS HERRAMIENTAS DEL MPLAB El Organizador de Proyectos (Proyect Manager). El organizador de proyectos (Proyect Manager) es parte fundamental de MPLAB. Sin crear un proyecto Usted no puede realizar depuración simbólica. Con el Organizador de Proyectos (Proyect manager) puede utilizar las siguientes operaciones: Crear un proyecto. Agregar un archivo de programa fuente de proyecto. Ensamblar o compilar programas fuente. Editar programas fuente. Reconstruir todos los archivos fuente, o compilar un solo archivo. Depurar su programa fuente. Software ensamblador: El software ensamblador que presenta Microchip viene en dos presentaciones, una, para entorno DOS llamado MPASM.EXE y la otra, para entorno Windows llamado MPASMWIN.EXE Las dos presentaciones soportan a TODOS los microcontroladores de la familia PIC de Microchip. El conjunto de instrucciones de los microcontroladores PIC es en esencia la base del lenguaje ensamblador soportado por este software. Directivas de uso frecuente: Son instrucciones para el compilador. #DEFINE ej. #define <nombre> [<valor a remplazar>] explicación: declara una cadena de texto como substituto de otra END ej. end explicación: indica fin de programa EQU ej. status equ 05 explicación: define una constante de ensamble INCLUDE ej. include <PIC16F84.h> explicación: incluye en el programa un archivo con código fuente ORG ej. org 0x100 explicación: ensambla a partir de la dirección especificada Para información más completa referirse a la guía rápida del MPASM. Una vez instalado adecuadamente el MPLAB, para realizar la simulación de un programa deben seguirse los siguientes pasos: Edite en un archivo de texto el siguiente programa: ;ejemplo: status equ 0x03 ;hace equivalencia entre el símbolo status indicándolo como 3 en hexadecimal Cont equ 0x20 F equ 1 org 0 ;indica posición de memoria desde donde se ensambla Inicio movlw 0x0F ;carga de w con el valor constante 15 (literal) movwf Cont ;el contenido de w se pasa al reg. CONT Loop decfsz Cont,F ;decremento de Cont y elude siguiente si=0 goto Loop ;salto incondicional a Loop goto $ ;Salto incondicional aqui mismo end ;Fin del código Lista de pasos: 1. Haga doble click en el ícono correspondiente a MPLAB. 2. Crear el archivo fuente correspondiente (menú File...New Source). 3. Salve el archivo (con extensión .ASM) una vez terminada su edición (menú FILE...Save). 4. Debe a continuación crearse un nuevo proyecto (menú Project...New Project). 5. Cuando aparezca la ventana de New Project editar las cajas de texto: Project path and Name y Development Mode, hacer click en <OK>. 6. En la siguiente ventana Edit Project, hacer click en la sección Non-project files sobre el nombre del archivo fuente realizado en los pasos 2 y 3. 7. Haga click en el botón <=add y luego de que éste aparezca en la sección Project Files haga click sobre el botón <OK>. 8. Salvar el proyecto (en el menú Project...Save project). 9. Realizar la "construcción de todo el proyecto" (menú Project...Build All). 10. En esta etapa se realiza en forma automática el ensamble de nuestro programa fuente y el vaciado de éste en memoria de simulación. El proceso de ensamble generará un archivo de errores en caso de que estos existan, sí es así deben corregirse directamente sobre el archivo fuente, salvar las correcciones y reconstruir el proyecto (menú Project...Build All). <<<En esta etapa del proceso ya se tiene el entorno listo para la simulación>>> Vista típica del entorno MPLAB Como en la mayoría de las aplicaciones Windows la pantalla se divide en varias secciones: 1. Barra de título: 2. Barra de menus: 3. Barra de herramientas: 4. Barra de estados: Se observa el nombre del proyecto Acceso a las diferentes opciones del entorno Cada ícono ejecuta las acciones correspondientes Indica el estado del entorno y sus ventanas Simulación: 1. Resetear el procesador (menú Debug...Run...Reset) ó con F6 ó con el ícono correspondiente en la barra de herramientas. 2. Crear una nueva ventana donde se incluyan las variables que queremos tener en cuenta (Window...New Watch Window) 3. Empezar a correr paso a paso el programa haciendo el seguimiento detallado de todos y cada uno de los pasos (menú Debug...Run...Step) ó con la tecla F7 ó con el ícono correspondiente en la barra de herramientas. El proceso de simulación nos permite detectar y corregir problemas de lógica, problemas de situaciones que no hayamos tenido en cuenta que son errores que no pueden ser detectados en el momento del ensamble del programa. Nota: El programa MPLAB puede obtenerse en forma gratuita de la dirección: http://www.microchip.com/10/Tools/mTools/MPLAB/index.htm http://www.geocities.com/micros_uan/cap23.html Importancia del lenguaje ensamblador La importancia del lenguaje ensamblador radica principalmente que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en el se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar. Otro punto sería que los programas en ensamblador ocupan menos espacio en memoria. 2. Ventajas y desventajas del Lenguaje Ensamblador Ventajas 1. Velocidad .- Como trabaja directamente con el microprocesador al ejecutar un programa, pues como este lenguaje es el mas cercano a la máquina la computadora lo procesa mas rápido. 2. Eficiencia de tamaño .- Un programa en ensamblador no ocupa mucho espacio en memoria porque no tiene que cargan librerías y demás como son los lenguajes de alto nivel 3. Flexibilidad .- Es flexible porque todo lo que puede hacerse con una máquina, puede hacerse en el lenguaje ensamblador de esta máquina; los lenguajes de alto nivel tienen en una u otra forma limitantes para explotar al máximo los recursos de la máquina. O sea que en lenguaje ensamblador se pueden hacer tareas especificas que en un lenguaje de alto nivel no se pueden llevar acabo porque tienen ciertas limitantes que no se lo permiten Desventajas Tiempo de programación .- Como es un lenguaje de bajo nivel requiere más instrucciones para realizar el mismo proceso, en comparación con un lenguaje de alto nivel. Por otro lado, requiere de más cuidado por parte del programador, pues es propenso a que los errores de lógica se reflejen más fuertemente en la ejecución. Programas fuente grandes .- Por las mismas razones que aumenta el tiempo, crecen los programas fuentes; simplemente requerimos más instrucciones primitivas para describir procesos equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los programas, y nuevamente reduce la productividad de los programadores. Peligro de afectar recursos inesperadamente .- Que todo error que podamos cometer, o todo riesgo que podamos tener, podemos afectar los recursos de la maquina, programar en este lenguaje lo más común que pueda pasar es que la máquina se bloquee o se reinicialize. Porque con este lenguaje es perfectamente posible (y sencillo) realizar secuencias de instrucciones inválidas, que normalmente no aparecen al usar un lenguaje de alto nivel. Falta de portabilidad.- Porque para cada máquina existe un lenguaje ensamblador; por ello, evidentemente no es una selección apropiada de lenguaje cuando deseamos codificar en una máquina y luego llevar los programas a otros sistemas operativos o modelos de computadoras. 3. Relación del lenguaje ensamblador con los componentes internos del procesador En la memoria se almacena la información en celdas especiales llamados registros los cuales tienen un nivel alto y un nivel bajo. Unidad aritmética y lógica es la responsable de realizar como su nombre lo indica operaciones aritméticas y lógicas. Unidad de control Se encarga de coordinar de que los otros componentes ejecuten las operaciones correctamente. Bus interno son los canales por donde pasa la información que la máquina va a procesar (bus de entrada) o procesada (bus de salida). Registros de uso general AX = Registro acumulador, dividido en AH y AL (8 bits cada uno).- Interviene en las operaciones aritméticas y lógicas, después de la operación arroja un resultado. BX = Registro base, dividido en BH y BL.- Se utiliza en transferencias de datos entre la memoria y el procesador. CX = Registro contador, dividido en CH y CL.- Se utiliza como contador en bucles(LOOP), en operaciones con cadenas(REP), y en desplazamientos(CL). DX = Registro de datos, dividido en DH y DL.- Se utiliza en operaciones de multiplicación y división junto con Ax y en operaciones de entrada y salida de puertos, su mitad inferior DL contiene el número de puertos. Registros de Estado Hay nueve indicadores de un bit en este registro de 16 bits. Los cuatro bits más significativos están indefinidos, mientras que hay tres bits con valores determinados: los bits 5 y 3 siempre valen cero y el bit 1 siempre vale uno. CF (Carry Flag, bit 0): Si vale 1, indica que hubo "arrastre" (en caso de suma) o "préstamo" (en caso de resta). Este indicador es usado por instrucciones que suman o restan números que ocupan varios bytes. Las instrucciones de rotación pueden aislar un bit de la memoria o de un registro poniéndolo en el CF. PF (Parity Flag, bit 2): Si vale uno, el resultado tiene paridad par, es decir, un número par de bits a 1. Este indicador se puede utilizar para detectar errores en transmisiones. AF (Auxiliary carry Flag, bit 4): Si vale 1, indica que hubo "arrastre" o "préstamo" del nibble (cuatro bits) menos significativo al nibble más significativo. Este indicador se usa con las instrucciones de ajuste decimal. ZF (Zero Flag, bit 6): Si este indicador vale 1, el resultado de la operación es cero. SF (Sign Flag, bit 7): Refleja el bit más significativo del resultado. Como los números negativos se representan en la notación de complemento a dos, este bit representa el signo: 0 si es positivo, 1 si es negativo. TF (Trap Flag, bit 8): Si vale 1, el procesador está en modo paso a paso. En este modo, la CPU automáticamente genera una interrupción interna después de cada instrucción, permitiendo inspeccionar los resultados del programa a medida que se ejecuta instrucción por instrucción. IF (Interrupt Flag, bit 9): Si vale 1, la CPU reconoce pedidos de interrupción externas. Si vale 0, no se reconocen tales interrupciones DF (Direction Flag, bit 10): Si vale 1, las instrucciones con cadenas sufrirán "auto-decremento", esto es, se procesarán las cadenas desde las direcciones más altas de memoria hacia las más bajas. Si vale 0, habrá "auto-incremento", lo que quiere decir que las cadenas se procesarán de "izquierda a derecha". OF (Overflow flag, bit 11): Si vale 1, hubo un desborde en una operación aritmética con signo, esto es, un dígito significativo se perdió debido a que tamaño del resultado es mayor que el tamaño del destino. Relación entre el código binario y el lenguaje ensamblador En el código binario se utilizan ceros y unos, mientras que el lenguaje ensamblador es una colección de símbolos mnemónicos que representan: operaciones, nombres simbólicos, operadores y símbolos especiales. La relación entre estos dos lenguajes sería que el binario es el lenguaje que la máquina entiende y el ensamblador se acerca mas lenguaje de esta. 4. Manejo de la memoria: Direccionamiento (interno y externo) El manejo de la memoria depende de que procesador tenga la máquina, entre los cuales a continuación se mencionan los siguientes: Memoria de Programa Memoria Externa de Datos Memoria Interna de Datos Registros de Funciones Especiales Memoria de Bit. El espacio de la Memoria de Programa contiene todas las instrucciones, datos, tablas y cadenas de caracteres (strings) usadas en los programas. Esta memoria se direcciona principalmente usando el registro de 16 bits llamado Data Pointer. El tamaño máximo de la Memoria de Programa es de 64 Kbytes. La Memoria Externa de Datos contiene todas las variables y estructuras de datos que no caben en la memoria interna del Microprocesador. Esta memoria se direcciona principalmente por el registro de 16 bits Data Pointer , aunque también se puede direccionar un banco de Memoria Externa de Datos de 256 bytes usando los dos primeros registros de propósito general . El espacio de Memoria Interna de Datos funcionalmente es la memoria de datos más importante, ya que ahí es donde residen cuatro bancos de registros de propósito general; la pila o stack del programa; 128 bits de los 256 bits de un área de memoria direccionable por bit y todas las variables y estructuras de datos operadas directamente por el programa. El tamaño máximo de la Memoria Interna de Datos es de 256 bytes. Contiene un espacio para los denominados Registros de Funciones Especiales destinado para los puertos de entrada/salida, temporizadores y puerto serie del circuito integrado. Estos registros incluyen al Stack Pointer; al registro de la palabra de estado del programa y al Acumulador. La cantidad máxima de Registros de Funciones Especiales es 128. Todos los Registros de Funciones Especiales tienen direcciones mayores a 127 y se ubican en los 128 bytes superiores de la Memoria Interna de Datos. Estas dos áreas de la Memoria Interna de Datos se diferencian por el modo de direccionamiento usado para accesarlas. Los Registros de Funciones Especiales solo se pueden accesar usando el modo de direccionamiento Directo, mientras que los 128 bytes superiores solo se pueden accesar con el modo de direccionamiento Indirecto. Por otra parte, el espacio de Memoria de Bit se usa para almacenar variables y banderas de un bit. El tamaño máximo de la Memoria de Bit es de 256 bits, 128 de los bits comparten su espacio con 16 bytes del espacio de la Memoria Interna de Datos y los otros 128 bits lo hacen con los Registros de Funciones Especiales. http://www.monografias.com/trabajos14/lenguensambla/lenguensambla.s html 4.3 Aplicaciones. 4.3.1 Como sistema independiente. 4.3.2 Como subsistema de una computadora.