Summary

Este documento proporciona un resumen de los componentes básicos de una computadora y cómo funcionan. Explica conceptos como la arquitectura de Von Neumann, los tipos de memoria, las unidades de control y aritmético-lógicas, y la interacción entre hardware y software. También describe el ciclo de instrucciones y la importancia del sistema operativo.

Full Transcript

TEMAS REPASO COC Una Computadora es una máquina digital programable y sincrónica, con cierta capacidad de cálculo numérico y lógico, controlada por un programa almacenado y con posibilidad de comunicación con el mundo exterior. Es DIGITAL porque dentro de la computadora las señales eléctricas que se...

TEMAS REPASO COC Una Computadora es una máquina digital programable y sincrónica, con cierta capacidad de cálculo numérico y lógico, controlada por un programa almacenado y con posibilidad de comunicación con el mundo exterior. Es DIGITAL porque dentro de la computadora las señales eléctricas que se manejan y la información que se procesa se representa en forma discreta, por medio de dos valores (0 y 1). Es SINCRÓNICA porque realiza las operaciones coordinada por un reloj central que envía señales de sincronismo a todos los elementos que componen la computadora. Internamente posee una capacidad de cálculo numérico y lógico, en un subsistema denominado Unidad Aritmético-Lógica o ALU. Está CONTROLADA POR PROGRAMA (a diferencia a una calculadora), significa que internamente se tienen órdenes o instrucciones almacenadas, que la computadora podrá obtener, interpretar y ejecutar. Además, está COMUNICADA con el mundo exterior. Esto significa que podrá realizar operaciones de ingreso o egreso de valores desde y hacia el mundo real, utilizando dispositivos periféricos.  Componentes y funcionamiento básico de una computadora La mayoría de las computadoras actuales de propósito general presentan una estructura interna basada en la arquitectura definida por JOHN VON NEUMANN. Esta estructura interna debe contener aquellos componentes que permitan realizar el procesamiento de datos útiles para el problema a resolver. Dado que se utilizará un programa que controlará la sucesión de pasos a seguir, será necesario no solamente tener una unidad de cálculo sino también una unidad de memoria. Podrá también, ser necesario interactuar con el mundo exterior, tanto para obtener datos como para entregar resultados, por lo que unidades que se encarguen de la entrada y salida de valores podrán estar presentes. La memoria principal se divide conceptualmente en memoria de instrucciones donde residen las órdenes que la computadora debe interpretar y ejecutar, y memoria de datos donde se almacena la información con la cual la computadora realizará los procesos (cálculos, decisiones, actualizaciones) que sean necesarios para la resolución del problema. Las líneas de comunicación indicadas como bus de comunicaciones normalmente permiten el paso de tres grandes categorías de información que son independientes entre si:  Bus de control: mediante él se indica el tipo de operación a realizar, se sincronizan los dispositivos, se verifica si la contraparte esta lista, se autoriza el uso de otro bus, entre otros.  Bus de datos: a través de este canal se transfieren los datos, una vez que se establecieron las señales de control correspondientes y que se estableció con que dispositivo o dirección de memoria se desea comunicar. Cuanto mayor capacidad tenga este bus, más datos se pueden transferir en cada instante de tiempo.  Bus de direcciones: a través de este canal se transfiere con que dirección de memoria se desea comunicar. La combinación de la unidad de control UC, la unidad de cálculo ALU y un conjunto de REGISTROS se la llama unidad central de procesamiento CPU. La ALU se ocupa de realizar el cómputo, y los datos con los que se trabaja siempre están en registros: a esta memoria interna deben viajar las instrucciones y los datos desde la memoria principal. Luego, la UC decodifica las instrucciones y orquesta las operaciones para ejecutarlas. Algunos registros especiales son:  Contador de programa: este registro guarda la dirección en la que esta almacenada la próxima instrucción a ejecutar, y se incrementa en uno cada vez que se hace una lectura de instrucciones. De esta manera, el procesador sabe a donde ir a leer la instrucción.  Registro de instrucción: la instrucción se lee desde la memoria principal y se va almacenando en este registro para que la UC decida qué hacer.  Registro de direccionamiento: en este registro se coloca el número de dirección al que ir a buscar un dato. Esta dirección es indicada por la propia instrucción o por algún otro modo de direccionamiento. Lo importante es no interferir con el contador del programa porque la máquina podría “perderse”.  Funcionamiento básico 1. Buscar la próxima instrucción a ejecutar en la memoria de instrucciones Mi 2. Interpretar qué hacer en la Unidad de Control (UC). 3. Ejecutar las operaciones interpretadas por UC, utilizando la ALU de ser necesario. Estas operaciones pueden comprender lectura/escritura de la memoria de datos o entrada/salida por los periféricos. 4. Esto representa una secuencia infinita de pasos.  Algunos conceptos El HARDWARE se refiere a las componentes físicas de la computadora. El SOFTWARE comprende los programas que se ejecutan sobre la computadora. Un BIT (dígito binario) es la unidad de información más pequeña. Solo puede tener uno de dos valores: encendido o apagado (0 o 1, sí o no, etc.). La Unidad Central de Procesamiento CPU es la encargada de interpretar y llevar a cabo las instrucciones de los programas. COMO FUNCIONA LA COMPUTADORA PROCESADOR MEMORIA Solo realiza un conjunto pequeño de El procesador debe depender de una operaciones básicas, que memoria en donde el programa es combinadas resuelven problemas almacenado, y un mecanismo para más grandes. leer y escribir esa memoria. SOFTWARE CICLO DE INSTRUCCIONES Los programas, nuestra tarea es El procesador ejecuta combinar las operaciones del repetidamente una serie de pasos procesador para resolver problemas que permiten ejecutar el programa más complejos. cargado en memoria. Antes existía lo que se conoce como programación en Hardware, y cuando cambiaban las tareas debíamos cambiar el hardware. Luego, con la operación en Software en cada paso se efectúa alguna operación sobre los datos. Para cada paso se necesita un nuevo conjunto de señales de control, proporcionadas por las instrucciones. De este modo aparece un nuevo concepto de programación puesto que ya no es necesario cambiar el hardware cada vez que quiera realizar una tarea distinta.  Software La producción de sistemas de software, constituye el puente útil entre el usuario y la computadora. Hay un modelo por capas desde la máquina hasta el usuario: 1. HARDWARE: es la primera capa, puede ser un artefacto muy elaborado desde el punto de vista tecnológico, pero totalmente inútil si no se lo “carga” con software. 2. SISTEMA OPERATIVO: es la segunda capa, nos permite comunicarnos con la computadora y utilizar eficientemente sus recursos. Se subdivide en tres niveles: el primer nivel del sistema operativo es el que nos permite que al encender la máquina haya funciones “vitales” incorporadas al hardware, estas vienen incorporadas con el hardware y se denomina Sistema Operativo residente o BIOS; el segundo nivel del sistema operativo trata de ser “portable”, es decir agregar funciones que sean útiles al usuario del sistema operativo sobre cualquier máquina, y normalmente se "cargan” desde disco al ser solicitadas; el tercer nivel del sistema operativo se refiere esencialmente a las funciones de administración de recursos de la o las máquinas que controla el usuario: administrar la memoria principal, los dispositivos de almacenamiento, etc. 3. UTILITARIOS BÁSICOS: es la tercera capa y se refiere a los programas que nos acercan soluciones a problemas muy básicos del mundo real como procesadores de texto, planillas de cálculo, etc. En general, estas aplicaciones de software se construyen alrededor de metáforas visuales del mundo real, extendiendo de algún modo las habilidades naturales del usuario (por ejemplo, tener un procesador de textos con corrector ortográfico). 4. LENGUAJES DE PROGRAMACIÓN DE APLICACIONES: en la cuarta capa tenemos los lenguajes de programación de aplicaciones (tales como Pascal, C, Java, C++, ADA, Basic, Fortran, Delphi, etc.). 5. LEGUAJES ORIENTADOS A LA APLICACIÓN: en la quinta capa se trata de acercar aún más la forma de expresar los problemas y su solución al mundo del usuario. Estos lenguajes permiten resolver en forma sencilla alguna clase de problemas, no exigiendo una preparación especial del usuario. 6. SISTEMA DE SOFTWARE DE PROPÓSITO GENERAL: en la sexta capa tenemos estos sistemas, tales como los sistemas contables, de liquidación de sueldos, de facturación, etc. 7. SISTEMA DE SOFTWARE DEDICADOS: en la séptima capa se trata de desarrollar un producto “a medida” para una determinada organización, empresa o máquina. Por ejemplo, los controladores de un robot, de una máquina fotográfica o de un lavarropas. 8. USUARIO DEL MUNDO REAL. ¿Qué es el sistema operativo? En el sistema operativo se incorporan las funciones de control del hardware de una computadora, de administración de sus recursos físicos y de sus usuarios, así como el control efectivo de la ejecución de los programas que en ella se carguen. El funcionamiento del Sistema Operativo implica de existencia de al menos un programa que está permanentemente ejecutándose junto con nuestras aplicaciones. Algunas de las tareas que hace el SO son: comunicación con los periféricos, control de autorización de usuarios, control de la ejecución de programas, control de errores, administración de memoria, entre otros. El modo en que el sistema operativo se comunica con el usuario constituye la interfaz del mismo. VIMA (WIMP en inglés) significa Ventanas, Iconos, Menúes y Apuntadores, como interfaz de usuario tiene una serie de ventajas: son intuitivas ya que el usuario no necesita estudiar un manual de comandos para comprender lo que la imagen le muestra en un menú; son consistentes puesto que toda una gama de aplicaciones tiene la misma forma de interfaz; facilitan el autoaprendizaje al ser repetitivas; incorporan mecanismos de seguridad, como impedir determinados errores mediante mensajes y bloqueos para el usuario o permitir “volver atrás”, de modo de corregir alguna secuencia incorrecta de acciones; incrementan la flexibilidad, por ejemplo, al usar simultánea o alternativamente el teclado o el mouse. ¿Qué es lo primero que hace el procesador al encender la máquina? Buscar una instrucción en la memoria, decodificarla, buscar los operandos, ejecutar la operación, almacenar el resultado, verificar interrupciones, repetir el ciclo con la siguiente dirección de memoria. El procesador siempre carga la primera instrucción desde una dirección preestablecida. De esta forma ejecuta un firmware que se encarga de inicializar dispositivos y ceder la ejecución al SO.  Componentes de la computadora Las computadoras en realidad solo hacen cuatro cosas: recibir entradas (aceptan información desde el mundo exterior), producir salidas (dan información al mundo exterior), procesar información (llevan a cabo operaciones aritméticas o lógicas con la información) y almacenar información (mueven y almacenan información en la memoria). Virtualmente todos los diseños de computadoras contemporáneas están basados en los conceptos desarrollados por John Von Neumann. Tal diseño es conocido como la Arquitectura Von Neumann, y se basa en tres conceptos claves:  Los datos e instrucciones están almacenados en una única memoria de lectura-escritura constituida por celdas de igual tamaño.  Los contenidos de las celdas de la memoria son identificables por posición, sin importar el tipo de los datos guardados en ese lugar.  La ejecución ocurre de manera secuencial (a menos que se modifique explícitamente) de una instrucción a la siguiente. El modelo de Von Newmann consta de 5 elementos principales:  Unidad de Entrada: provee las instrucciones y los datos.  Unidad de Memoria: en donde se almacenan los datos e instrucciones.  Unidad Aritmético-Lógica: es la que procesa lo datos.  Unidad de Control: es la que dirige la operación.  Unidad de Salida: donde se envían los resultados. LA UNIDAD CENTRAL DE PROCESAMIENTO Toda computadora tiene una CPU que interpreta y lleva a cabo las instrucciones de los programas, efectúa manipulaciones aritméticas y lógicas con los datos y se comunica con las demás partes del sistema de cómputo. En las computadoras personales se utilizan varios chips de CPU distintos. Aunque hay variantes en cuanto al diseño de estos chips, existen dos factores relevantes para el usuario: la compatibilidad (no todo el software es compatible con todas las CPU) y la velocidad (en una computadora está determinada en gran parte por la velocidad de su reloj interno, el dispositivo cronométrico que produce pulsos eléctricos para sincronizar las operaciones. Por lo general, las computadoras se describen en términos de su velocidad de reloj, medida en Hertz. La velocidad está determinada también por la arquitectura del procesador, esto es, el diseño que establece de qué manera están colocados en el chip los componentes individuales de la CPU). Los principales componentes de la CPU son una Unidad Aritmética y Lógica (ALU) y una Unidad de Control (UC). La ALU realiza la computación real o procesamiento de datos. La UC controla la operación de la ALU. Además, existe una mínima memoria interna de la CPU, consistente de un conjunto de lugares de almacenamiento, llamados registros. También hay un bus interno de CPU, necesario para transferir datos entre los distintos registros y la ALU, dado que la ALU de hecho opera sólo sobre datos en la memoria interna de la CPU. Los registros de la CPU sirven para dos funciones:  Registros visibles al usuario. Permiten al programador en lenguaje de máquina minimizar las referencias a memoria principal optimizando el uso de los registros, que son de acceso más rápido que aquella.  Registros de control y estado. Son utilizados por la UC para controlar la operación de la CPU, y por programas del SO para controlar la ejecución de los programas. Ejemplo: el Contador de Programa (que contiene la ubicación de la próxima instrucción a ser buscada y ejecutada) y el Registro de Instrucción (que contiene la última instrucción buscada). LA MEMORIA la CPU sólo puede manejar una instrucción y unos cuantos datos a la vez. La computadora tiene que “recordar” el resto del programa y los datos hasta que el procesador esté listo para usarlos. La CPU está conectada con el resto de los componentes del sistema a través de tres buses distintos. Se tiene entonces, un medio para identificar: el bus de direcciones, un medio para transportar el dato propiamente dicho: el bus de datos, y un medio para controlar el intercambio de información: el bus de control. La CPU saca información de la misma instrucción que debe ejecutar, así sabe, por ejemplo, en qué sentido deberían viajar los datos (lectura o escritura) y envía en consecuencia las señales adecuadas por el bus de control. La CPU deberá también conocer cuando enviar esas señales para trabajar en forma conjunta y ordenada. Se denomina tiempo de acceso al tiempo que tarda un elemento de memoria en cumplir efectivamente una orden de lectura o escritura. El denominado ‘tamaño del bus de direcciones’, determina cuántos bits tienen las direcciones que identifican cada celda de memoria identificada con una dirección de memoria. En general para identificar N diferentes posiciones de memoria, se necesitará que n (el número de bits del bus de direcciones) sea tal que se cumpla: N ≤ 2n Ejemplo 1 ¿Cuántos bits deberán tener las direcciones para identificar 250 posiciones de memoria diferentes? N = 250 ≤ 2n si n = 8, 28 = 256 y se cumple la desigualdad. Respuesta: 8 bits. Ejemplo 2 Escriba en binario la dirección más pequeña y la más grande para el bus de direcciones del ej. anterior. ¿Puede determinar su valor en decimal? Dirección más pequeña = 00000000 | Dirección más grande = 11111111 Identificamos cada posición de memoria con un número binario llamado dirección. La cantidad de bits almacenados en ella (llamado dato) se conoce como “unidad mínima direccionable”. Si la posición de memoria puede contener 8 bits (1 byte) de información decimos que la unidad mínima direccionable es el byte. RAM Y ROM La RAM (Random Access Memory o Memoria de Acceso Aleatorio) es el tipo más común de almacenamiento primario o memoria de la computadora. Los chips RAM contienen circuitos que sirven para almacenar temporalmente instrucciones de programas y datos. Un chip de RAM está dividido en posiciones o celdas de igual tamaño, identificadas por una dirección única, de manera que el procesador puede distinguirlas y ordenar que se guarde o recupere información de ella. La RAM es una memoria volátil: si se interrumpe la energía eléctrica, la computadora olvida inmediatamente todo lo que estaba recordando en la RAM. La memoria no volátil se denomina ROM (Read-Only Memory o Memoria Sólo de Lectura), la computadora puede leer información de ella, pero no escribir nueva información. Todas las computadoras modernas cuentan con dispositivos de ROM que contienen las instrucciones de arranque y otra información crítica. La información en la ROM se graba permanentemente cuando nace la computadora, de modo que siempre está disponible cuando ésta opera, pero no puede cambiarse a menos que se reemplace el chip de ROM. En RAM y ROM el tiempo de acceso es constante sin importar la ubicación relativa de las celdas. Adicionalmente, existen otros medios donde almacenar información y que constituyen una forma de memoria externa, como por ejemplo los discos rígidos. Hay una relación entre las tres características clave de la memoria (costo, capacidad y tiempo de acceso): a menor tiempo de acceso, mayor costo por bit; a mayor capacidad, menor costo por bit; a mayor capacidad, mayor tiempo de acceso. BUSES Y ENTRADA / SALIDA Por lo general, los buses tienen 8, 16 o 32 cables; dado que por cada cable puede fluir un bit a la vez, un bus con 16 cables se denomina bus de 16 bits, ya que puede transmitir 16 bits de información al mismo tiempo (por distintos caminos); transmite el doble de información que un bus de 8 bits. Entonces, los buses más anchos pueden transmitir información con más rapidez que los angostos. Además de la CPU y un conjunto de módulos de memoria, el tercer elemento clave de un sistema de cómputo es un conjunto de módulos de entrada y/o salida (E/S). Cada módulo realiza la interfase con el bus del sistema y controla uno o más dispositivos periféricos. Un módulo de E/S es la entidad responsable de controlar uno o más dispositivos externos y de intercambiar datos entre estos dispositivos y la memoria principal y/o los registros de la CPU.  El ciclo de instrucción La función básica realizada por una computadora es la ejecución de programas. Hay que entender el proceso de ejecución: el punto de vista más simple es considerar el procesamiento de una instrucción como consistente de dos pasos: la CPU lee (búsqueda) las instrucciones desde la memoria una a la vez, y las completa (ejecución). La corrida de un programa consiste en la repetición de los pasos de búsqueda y ejecución. La ‘búsqueda’ de instrucción es una operación común para cada instrucción, y consiste en leer información de, al menos, una posición de memoria. La ‘ejecución’ puede involucrar varias operaciones y depende de la naturaleza de la instrucción. El procesamiento requerido para una sola instrucción es llamado ciclo de instrucción. Usando la descripción simplificada, los dos pasos son el ciclo de búsqueda y el ciclo de ejecución. El ciclo se detiene sólo si la máquina es apagada, si ocurre algún error irrecuperable, o se encuentra una instrucción de programa que detenga la computadora. En el comienzo de cada ciclo de instrucción, la CPU busca una instrucción desde la memoria. En una CPU típica, se usa un registro llamado contador de programa para conocer la ubicación desde la cual la próxima instrucción debe ser buscada. A menos que se diga otra cosa, la CPU siempre incrementa el contador de programa después de cada búsqueda de instrucción, de modo de quedar listo para buscar la próxima en secuencia (es decir, la instrucción ubicada en la siguiente posición de memoria). Esta secuencia podrá ser alterada y deberemos indicarla en modo especial. La instrucción buscada es cargada en un registro de la CPU conocido como Registro de Instrucción. La instrucción está en la forma de un código binario que especifica qué acción debe tomar la CPU; ésta interpreta la instrucción y realiza la acción requerida. En general, estas acciones caen en 4 categorías:  CPU - Memoria: los datos pueden ser transferidos desde la UCP a la memoria o desde la memoria a la CPU.  CPU - E/S: los datos pueden ser transferidos hacia o desde el mundo exterior por una transferencia entre la CPU y el módulo de E/S.  Procesamiento de datos: la CPU puede realizar alguna operación aritmética o lógica sobre los datos.  Control: una instrucción puede especificar que la secuencia de ejecución sea alterada (por ejemplo, con una operación de salto o jump). Por ejemplo, si la CPU busca una instrucción de la posición 149 que especifica que la próxima instrucción sea buscada en la posición 182, la CPU recordará esto poniendo el 182 en el contador de programa. Así, en el próximo ciclo de búsqueda, la instrucción será buscada en la posición 182 en vez de la 150 como sería en la secuencia sin alterar. La ejecución de una instrucción puede involucrar una combinación de estas acciones. Además, todas las computadoras proveen un mecanismo por el cual otros módulos, de E/S o memoria, pueden interrumpir el procesamiento normal de la CPU. Las interrupciones se proveen principalmente como una manera de mejorar la eficiencia de procesamiento.  Representación numérica Los datos e informaciones que se manejan internamente en un sistema informático se pueden representar, según sus características, en: CÓDIGOS ALFANUMÉRICOS (ASCII): en general cada carácter se maneja internamente en una computadora por medio de un conjunto de 8 bits (1 byte) mediante un sistema de codificación binario que denominaremos código de caracteres. REPRESENTACIONES NUMÉRICAS: un sistema de numeración se caracteriza fundamentalmente por su base, que es el número de símbolos distintos que utiliza, y un coeficiente que determina cuál es el valor de cada símbolo dependiendo de la posición que ocupe. Teorema Fundamental de la Numeración Se trata de un teorema que relaciona una cantidad expresada en cualquier sistema de numeración posicional con la misma cantidad expresada en el sistema decimal. El Teorema Fundamental de la Numeración dice que el valor decimal de una cantidad expresada en otro sistema de numeración, está dado por la fórmula: SISTEMA DECIMAL: sistema posicional que utiliza 10 símbolos (del 0 al 9). SISTEMA BINARIO: es el sistema de numeración que utiliza internamente el hardware de las computadoras actuales. La base o número de símbolos que utiliza el sistema binario es 2 (siendo los símbolos 0 y 1). SISTEMA HEXADECIMAL: es un sistema posicional pero que utiliza dieciséis símbolos (0 al 9 y de A al F). Rango de representación Se denomina rango de representación en un sistema determinado, al conjunto de números representables con el mismo. Un sistema de base b y números de n dígitos tiene un rango igual a bn. PRÁCTICA PERIFÉRICOS  Pantalla alfanumérica: sólo pueden mostrar caracteres alfanuméricos y para esto se dividen en filas y columnas. En cada celda se almacena un carácter codificado en binario. Para esto se utiliza la tabla ASCII que asigna 8 bits a cada carácter. Puede suceder que se especifique un color para cada carácter, entonces necesito bits adicionales. Como sólo se puede elegir un color por vez y por carácter serán log2(cantidad colores). Si se agregan atributos por cada carácter (subrayado, negrita, etc.) se necesitará 1 bit adicional para cada atributo (puedo tener más de uno a la vez). Tamaño de memoria para la pantalla alfanumérica Columnas x filas x (8 bits ASCII + bits color + cantidad atributos)  Pantalla gráfica: este tipo de pantalla se divide en pixeles. La cantidad de pixeles estará dada por la resolución (ancho x alto, por ejemplo, 1024x768). Cada punto puede ser de un color, e indicando el color de cada pixel en toda la pantalla se formará la imagen. Existen diferentes profundidades de color, por ejemplo: monocromo (blanco o negro, 1 bit); escala de grises (256 tonos de gris, 1 byte por pixel); True Color (24 bits por pixel). Tamaño de memoria para la pantalla gráfica Ancho x alto x bits color  Impresoras y escáneres: estos dispositivos sirven para transferir información desde (escáner) y hacia (impresora) un medio impreso como el papel. Las características del medio y las capacidades del dispositivo definirán el tamaño de la información. La cantidad de puntos o de caracteres dependerá de la resolución del dispositivo. Además, existen impresoras que trabajan en modo texto, y cada unidad, en lugar de ser un punto es un carácter lo que agrega 8 bits (ASCII) a cada unidad de dato. Ejemplo 1: calcular el tamaño de memoria para un escáner monocromo con una resolución de 300ppp al escanear una hoja de 10x15 pulgadas. (300 x 10) x (300 x 15) x 1 bit (monocromo) = 13500000 bits Ejemplo 2: calcular el tamaño de memoria para una impresora con una resolución de 150 puntos por centímetro que trabaja en True Color para imprimir una hoja 10x15cm. (150 x 10) x (150 x 15) pixels x 3 bytes / pixels (24 bits True Color) = 10125000 bytes Ejemplo 3: calcular el tamaño de memoria para una impresora que imprime en alfanumérico con 150 filas y 100 caracteres por fila en True Color. (150 x 10) x (150 x 15) caracteres x (1 + 3 bytes) / caracter (TC + ASCII) = 13500000 bytes  Disco duro: este es un dispositivo externo de almacenamiento secundario. Vamos a asumir que las dos caras de cada plato son utilizables. Todas las caras tienen la misma cantidad de pistas, todas las pistas tienen la misma cantidad de sectores y todos los sectores tienen la misma cantidad de bits. Esto es importante ya que la pista más interna es más corta que la más externa, lo cual implica que los sectores son más densos en el interior, pero siempre todos almacenan la misma cantidad de bytes. Por lo general un sector tiene 512 bytes y esta es la mínima unidad que se puede leer / escribir en el disco. Tamaño de memoria para disco duro X platos x 2 caras x X pistas x X sectores x 512 bytes plato cara pista sector Ejemplo: calcular el tamaño de memoria para un disco duro de 2 platos con 300 pistas por cara y 1000 sectores por pista. 2 platos x 2 caras / plato x 300 pistas / cara x 1000 sectores / pista x 512 bytes / sector = 614,4MB Cosas a tener en cuenta: 1. La velocidad de rotación es una característica importante del disco porque afecta al desempeño general. 2. Si debemos hacer cálculos que impliquen a la velocidad de rotación diremos que en cada vuelta se puede leer una pista completa. 3. Si el valor que conocemos es el radio o diámetro de una pista y la densidad de sectores en ese extremo hay que usar la fórmula de la circunferencia. Ejemplo: calcular cantidad de sectores por pista, si tengo 10 sectores por centímetro y una pista de radio de 2 centímetros. 10 sectores / cm x (2𝜋 x radio) cm = 10 x 2𝜋 x 2 sectores = 40𝜋 sectores ≈ 125 sectores SISTEMAS DE REPRESENTACIÓN EN PUNTO FIJO BSS – Binario sin signo  Con n bits represento 2n números.  Rango de representación: 0 ≤ x ≤ 2n-1  Números negativos o fraccionarios no pueden ser representados en este sistema. Ejemplo BSS restringido a 3 bits Represento 23=8 números / Rango de representación: 0 ≤ x ≤ 7 0=000 | 1=001 | 2=010 | 3=011 | 4=100 | 5=101 | 6=110 | 7=111 BCS – Binario con signo  Con n bits represento 2n números.  Rango de representación: -(2n-1-1) ≤ x ≤ 2n-1-1  Tengo dos ceros: 00...0 / 11...1  Números positivos igual que el BSS, números negativos empiezan con 1. Ejemplo BCS restringido a 3 bits Represento 23=8 números / Rango de representación: -3 ≤ x ≤ 3 -3=111 | -2=110 | -1=101 | 0=000 y 111 | 1=001 | 2=010 | 3=011 TECNICA DE COMPLEMENTOS: el complemento a un número N de un número A (A 9  SUMO 6 a ese digito (genero “acarreo” porque hay seis combinaciones no usadas). Por ejemplo: +1 26 0010 0110 + + 15  0001 0101 41 1011 + 0110 0100 0001 SISTEMA BCH (Sistema Hexadecimal codificado en Binario) Los dígitos decimales se convierten uno a uno en binario. Para representar un dígito hexadecimal se usarán siempre 4 bits, asociando cada dígito con su valor en binario puro. 0=0000 | 1=0001 | 2=0010 | 3=0011 | 4=0100 | 5=0101 | 6=0110 | 7=0111 8=1000 | 9=1001 | A=1010 | B=1011 | C=1100 | D=1101 | E=1110 | F=1111 SUMA Y RESTA BINARIA En el Sistema Binario, cada nueva posición tiene un valor dos veces más grande que el anterior. En la suma En la resta 1 0 0 1 1 0 1 1 0 + + + + – – – – 0 1 0 1 0 1 0 1 0 1 1 10 0 0 1 0 CAMBIO DE BASES BASE2 BASE10 BASE16 BASE2 Teorema Fundamental de TABLA: formo grupos la Numeración de 4 bits desde la 𝑵𝟏𝟎 = ∑𝒎𝒊=𝒏 𝒅𝒊 𝟐 𝒊 derecha y asigno hexa. 11 11102 = 3E16 BASE10 Divido x10 por 2 Divido x10 por 16 5 | 2  510 = 1012 20 | 16  2010 = 1416 1 2|2 4 1 0 1 BASE16 TABLA: reemplazo cada Teorema Fundamental de dígito hexadecimal por la Numeración su binario. 𝑵𝟏𝟎 = ∑𝒎𝒊=𝒏 𝒅𝒊 𝟏𝟔 𝒊 4A16 = 0100 10102 FLAGS Las FLAGS son bits de condición que el procesador establece de modo automático acorde al resultado de cada operación realizada. Sus valores permitirán tomar decisiones como: realizar o no una transferencia de control o determinar relaciones entre números. Z (cero) N (negativo) C (carry) O (overflow) 1 todos los bits = 0 1  número negativo 1  acarreo / borrow 1  desborde en BCS 0  algún bit es 1 0  número positivo 0  otro caso 0  otro caso  Si hay OVERFLOW [O]  Ca2 es incorrecto Cuando hay Overflow +++=– +––=–  Si hay CARRY o BORROW [C]  BSS es incorrecto –+–=+ ––+=+ REPRESENTACIÓN ALFANUMÉRICA Se pueden representar: letras (mayúsculas y minúsculas), dígitos decimales (0…9), signos de puntuación, caracteres especiales, caracteres u órdenes de control. Algunos códigos son:  FIELDATA: 26 letras mayúsculas + 10 dígitos + 28 caracteres especiales. Como hay 64 combinaciones en total  Código de 6 bits.  ASCII: FIELDATA + minúsculas + control. Como hay en total 127 combinaciones  Código de 7 bits.  ASCII extendido: ASCII + multinacional + semigráficos + matemática  Código de 8 bits.  EBCDIC [Extended BCD Interchange Code]: es parecido al ASCII, pero de IBM.  Código de 8 bits. SISTEMA EN PUNTO FLOTANTE Este sistema nos permite tener un rango mayor de números, es decir, podemos representar números de “más pequeños” a “más grandes”, con la misma cantidad de bits, lo cual era una limitación para el sistema en Punto Fijo. ±𝑴 × 𝑩±𝑬  EXPONENTE MANTISA La base [B] es implícita y no necesita almacenarse, puesto que es la misma para todos los números. La ventaja que tiene este sistema es que necesito menos bits para almacenar la mantisa y el exponente, que para almacenar el número completo. Tanto la M como el E, están representados en algún sistema Punto Fijo ya conocido (BSS, BCS, Ca1, Ca2, Ex2). DIFERENCIAS ENTRE SISTEMAS PUNTO FIJO Y PUNTO FLOTANTE  El rango en Punto Flotante es mayor.  La cantidad de combinaciones binarias es la misma en ambos sistemas.  En Punto Flotante, la resolución no es constante a lo largo del intervalo. MANTISA SIN NORMALIZAR, NORMALIZADA, O NORMALIZADA BIT IMPLÍCITO  Número SIN NORMALIZAR: podemos tener distintas representaciones para un mismo número, por ejemplo: 2-1x 20 = 20x 2-1 = 22x 2-3 … etc.  NORMALIZACIÓN: nos sirve para tener un único par de valores de mantisa y exponente para un número [SIN 0]. EN EL SISTEMA FRACCIONARIO NORMALIZADO TODAS LAS MANTISAS EMPIEZAN CON 0,1.  NORMALIZACIÓN BIT IMPLÍCITO: en este caso, no almaceno el uno más significativo de la mantisa, este es el bit implícito [SIN 0]. MANTISA ENTERA O FRACCIONARIA La mantisa puede ser entera o fraccionaria, y esto me lo especifican en el enunciado. Por ejemplo, si me dan el número 0011 010 con 4 bits de mantisa fraccionaria BSS y 3 de exponente BCS, la mantisa [M] será 0,011 = 2-2+2-3 y el exponente [E] será 010 = 2, entonces reemplazamos Mx2E = (2-2+2-3) x 22 = 20+2-1 = 1,5 RANGO Y RESOLUCIÓN EN SISTEMA PUNTO FLOTANTE Al igual que en el Sistema Punto Fijo, el RANGO es la diferencia entre el mayor y el menor número, se denota [mayor; menor]. Siempre será: mínimo  menor número en mantisa y mayor número en exponente | máximo  mayor número en mantisa y mayor número en exponente. Además, si la mantisa es normalizada con signo, voy a tener dos intervalos de números, uno positivo y otro negativo, por lo tanto, voy a tener dos mínimos y dos máximos, uno por cada intervalo. La RESOLUCIÓN es la diferencia entre dos representaciones sucesivas, y a diferencia del Sistema en Punto Fijo, en el caso del Sistema Punto Flotante varía a lo largo del rango. Podemos tener 4 resoluciones distintas: INFERIOR NEGATIVA | SUPERIOR NEGATIVA | INFERIOR POSITIVA | SUPERIOR POSITIVA En una recta se ven: 0 INFERIOR NEGATIVA SUPERIOR NEGATIVA INFERIOR POSITIVA SUPERIOR POSITIVA Tener en cuenta que cuando la mantisa fraccionaria tiene muchos dígitos, para buscar máximos número de mantisa [M] con n dígitos hacemos M = ± (1-2-n). Por ejemplo, para una mantisa fraccionaria 6 dígitos BCS y un bit de signo, el número máximo que puedo representar con la mantisa es M = ± (1-2-6). (Después tengo que ver el exponente) SUMAS EN SISTEMA PUNTO FLOTANTE Y CORRIMIENTO DEL EXPONENTE Para realizar operaciones en el Sistema Punto Flotante es necesario que, para sumar las mantisas, los exponentes de cada número sean iguales, en el caso de que no se cumpla esto, debo hacer un corrimiento de alguno de los dos exponentes (o ambos de ser necesario), para poder realizar la operación correctamente. Por ejemplo, suma en Punto Flotante con mantisa BSS 8 bits y exponente en BCS 8 bits. 00001111 00000011 + 00001000 00000010 00001111 00000011  E = 3 00001000 00000010  E = 2  Mx2E = 23x22 = 22x23  M = 00000100 Luego sumo: + 00001111 00000011 00000100 00000011  (24+21+20) x 23 = 27+24+23 = 152 00010011 00000011 APROXIMACIÓN, ERROR ABSOLUTO, RELATIVO Y MAXIMO  El error absoluto es la diferencia entre el valor representado y el valor que quiero representar EA = |X-NaRepr|.  El error absoluto máximo cumple EAmax ≤ res/2.  El error relativo lo calculo haciendo ER = EA/NaRepr ESTÁNDAR IEEE 754 SIMPLE Y DOBLE PRECISIÓN El IEEE 754 es un estándar de aritmética en coma flotante. Este estándar especifica cómo deben representarse los números en coma flotante con simple precisión (32 bits) o doble precisión (64 bits), y también cómo deben realizarse las operaciones aritméticas con ellos. Emplea mantisa fraccionaria, normalizada y en representación signo magnitud (M y S), sin almacenar el primer dígito, que es igual a 1. El exponente se representa en exceso, que en este caso no se toma como 2n-1, sino como 2n-1-1. Además, la base implícita de este sistema es 2.  Simple Precisión: el estándar IEEE-754 para la representación en simple precisión de números en coma flotante exige una cadena de 32 bits. El primer bit es el bit de signo (S), los siguientes 8 son los bits del exponente (E) y los restantes 23 son la mantisa (M). La mantisa es fraccionaria normalizada, con la coma después del primer bit que es siempre uno (1,) en M y S; y el exponente se representa en exceso.  Doble precisión: el estándar IEEE-754 para la representación en doble precisión de números en coma flotante exige una cadena de 64 bits. El primer bit es el bit de signo (S), los siguientes 11 son los bits del exponente (E) y los restantes 52 son la mantisa (M). SIMPLE PRECISIÓN DOBLE PRECISIÓN S=1 EXPONENTE = 8 MANTISA = 23 S=1 EXPONENTE = 11 MANTISA = 52 Bits totales 32 64 Exponente en exceso 127 1023 Rango de exponente -126 | +127 -1022 | +1023 Rango de números 2-126 | ~2128 2-1022 | ~21024 EXPONENTE MANTISA SIGNO VALOR 0 < E < 255 Cualquiera 0|1 ± 2E-127 x 1.M 255 No nulo 0|1 NaN (not a number) 255 0 0|1 ±∞ 0 No nulo 0|1 ± 2-126[-1022] x 0.M (sin normalizar) 0 0 0|1 ±0 [DEL STALLING] El Estándar IEEE 754 se desarrolló para facilitar la portabilidad de los programas de un procesador a otro y así poder alentar el desarrollo de programas numéricos sofisticados. Dichos formatos reducen la posibilidad de que el resultado final se vea deteriorado por un error de redondeo. LÓGICA DIGITAL Un circuito digital es en el que están presentes dos valores lógicos. Y las compuertas son dispositivos electrónicos que pueden realizar distintas funciones con estos dos valores lógicos. Las compuertas constituyen la base de hardware sobre la que se construyen todas las computadoras digitales. Para describir los circuitos que pueden construirse combinando compuertas, se requiere un nuevo tipo de álgebra, en donde las variables solo pueden ser 0 o 1: esta es el álgebra booleana. Puesto que una función booleana de n variables tiene 2n combinaciones de los valores de entrada, la función puede describirse totalmente con una tabla de 2n renglones, donde cada uno indica un valor de la función para cada combinación distinta de las entradas. Dicha tabla se la conoce como tabla de verdad. Identidades del álgebra booleana Identidad 1.A = A 0+A=A Nula 0.A = 0 1+A=1 Idempotencia A.A = A A+A =A Inversa A.A̅=0 A+A ̅=1 Conmutativa A.B = B.A A+B =B+A Asociativa (A. B). C = A. (B. C) (A + B) + C = A + (B + C) Distributiva A + (B. C) = (A + B). (A + C) A. (B + C) = (A. B) + (A. C) Absorción A. (A + B) = A A + (A. B) = A De Morgan ̅̅̅̅̅̅ A.B = A ̅+B ̅ ̅̅̅̅̅̅̅ A+B = A ̅.B ̅ Funciones lógicas Toda función lógica puede representarse mediante una tabla de verdad y un diagrama de compuertas lógicas. Si quiero escribir la función lógica a partir de una tabla de A B|F verdad, debo tener en cuenta que deben haber tantos términos como unos en los 0 0 0 0 1 1 resultados de la tabla, y las variables que valen 0 en la tabla aparecen negadas. 1 0 1 ̅ B + AB Por ejemplo para la siguiente tabla de verdad tenemos la función  F = A ̅ 1 1 0 Suma de Productos: Es posible inferir la fórmula lógica asociada a una función desconocida de la cual sólo se conoce la respuesta ante todas las combinaciones posibles de entradas. La función tendrá tantos términos como unos tenga el resultado de la tabla. Circuitos integrados Las compuertas no se fabrican ni se venden individualmente, sino en unidades llamadas circuitos integrados, también conocidos como IC o chips. Un IC es un trozo cuadrado de silicio de unos 5mm en el que se han depositado algunas compuertas. Estos suelen montarse en paquetes de plástico o cerámica rectangulares, cuyos lados largos cuentan con dos filas paralelas de terminales conectadas a la entrada o salida de alguna compuerta del chip, a la alimentación eléctrica o a tierra. Circuitos combinacionales o combinatorios Un circuito combinacional es un conjunto de puertas lógicas interconectadas, cuya salida, en un momento dado, es función solamente de los valores de las entradas en ese instante. La aparición de un valor en las entradas viene seguido casi inmediatamente por la aparición de un valor en la salida, con un retardo propio de la puerta. En general, un circuito combinacional consiste de n entradas binarias y m salidas binarias. Al igual que una compuerta lógica, un circuito combinacional puede definirse de tres formas:  Tabla de verdad: Para cada una de las posibles combinaciones de las n señales de entrada, se enumera el valor binario de cada una de las m señales de salida.  Símbolo gráfico: Describe la organización de las interconexiones entre puertas.  Ecuaciones booleanas: Cada señal de salida se expresa como una función booleana de las señales de entrada (suma de productos). Los circuitos combinacionales implementan las funciones esenciales de una computadora digital. Sin embargo, ellos no proporcionan memoria, que es un elemento también esencial para el funcionamiento. Para estos fines, se utilizan circuitos lógicos digitales más complejos denominados circuitos secuenciales. Los circuitos combinacionales cuentan con una o varias entradas y salidas. Los mismos responden a los valores lógicos en las entradas, y la o las salidas están determinadas exclusivamente por los valores de entrada en ese instante. Entonces, si cambia la entrada, cambia la salida. Además, los valores pasados de las entradas, no influyen en los valores de la salida. Por ejemplo, algunos circuitos combinacionales de uso frecuente son:  Multiplexores: circuito con 2n entradas de datos, 1 salida de datos y n entradas de control que seleccionan una de las entradas de datos. Estos pueden usarse para seleccionar una de varias entradas o para implementar una tabla de verdad. También como convertidor de datos paralelos a seriales.  Decodificadores: estos son circuitos que aceptan un número de n bits como entrada y lo utiliza para seleccionar (poner en 1) una y sólo una de las dos líneas de salida. Por ejemplo, imagínate una memoria que consiste en 8 chips; un decodificador 3 a 8, tiene 3 entradas A, B, C para seleccionar uno de los 8 chips, puesto que, gracias a la combinación, sólo una línea de salida se pone en uno, sólo se podrá habilitar un chip a la vez.  Comparadores: estos comparan dos palabras de entrada. En el ejemplo, el comparador acepta dos entradas cada una de 4 bits y produce 1 si son iguales y 0 si no. Circuitos secuenciales Los circuitos lógicos secuenciales se asocian al estudio de dispositivos de almacenamiento en general, en donde una de sus características principales es que sus salidas dependen de las entradas actuales, de entradas en tiempos anteriores y de una señal externa de reloj. Las salidas dependen tanto de las entradas como del estado interno del circuito. Estos circuitos tienen la característica de almacenar valores lógicos internamente, y los mismos se almacenan, aunque las entradas lógicas no estén. Conceptos Generales de Latches y flip-flops: Los circuitos biestables son aquellos que poseen dos estados estables que se pueden mantener por tiempo indefinido, salvo que las entradas provoquen un cambio, lo que nos permite tener almacenado un dato en un dispositivo por el tiempo que se desee. Según la manera en que las salidas respondan a las señales lógicas presentes en la entrada, los biestables se clasifican en SR, J-K, D y T. Respecto del instante en que pueden cambiar dichas salidas, pueden ser:  ASINCRÓNICOS: cuando en la entrada se establece una combinación, las salidas cambiaran.  SINCRÓNICOS: la presencia de una entrada especial determina cuando cambian las salidas, acorde a las entradas. Las salidas del circuito, además de ser función de las entradas son función de la información almacenada en elementos de memoria del circuito, en el momento que se producen las entradas. Están formados por un circuito combinacional y un bloque de elementos de memoria: La señal del reloj indica a los elementos de memoria cuando deben cambiar su estado. Existen dos tipos de biestables muy importantes: el latch y el flip-flop. Estos circuitos están compuestos por compuertas lógicas y lazos de retroalimentación y son considerados los circuitos básicos que constituyen los sistemas digitales. El latch es un circuito biestable asíncrono, es decir que sus salidas cambian en la medida en que sus entradas cambien. El flip-flop es un dispositivo secuencial sincrónico que toma muestras de sus entradas y determina una salida sólo en los tiempos determinados por el reloj (CLK). Latch SR: para crear una memoria de un bit necesitamos un circuito que de alguna manera “recuerde” los valores de entrada anteriores. Podemos construir un circuito así a partir de dos compuertas NOR. Este circuito tiene dos entradas S [set] para establecer el latch, es decir, ̅ que ponerlo en 1, y R [reset] para restablecerlo (ponerlo en 0). También hay dos salidas, Q y Q son complementarias. A diferencia de los circuitos combinacionales, las salidas de un latch no están determinadas de forma única por las entradas vigentes. Flip-Flop En muchos circuitos es necesario muestrear un valor que hay en una línea dada en un instante dado y almacenarlo. En esta variable, llamada Flip-Flop, la transición de estado no ocurre cuando el reloj es 1, sino durante la transición del reloj de 0 a 1 (flanco ascendente) o de 1 a 0 (flanco descendente). ¿Qué diferencia hay entre un Flip-Flop y un Latch? Un Flip-Flop se dispara por flanco, mientras que un Latch se dispara por nivel. Flip-Flop SR: es un circuito biestable conformado por un detector de transición de impulsos que está encargado de detectar cuándo se tiene un flanco de subida o de bajada del reloj (CLK), dos compuertas AND y dos CK S R Qn+1 compuertas NOR. En estas compuertas NOR, una de las 1 0 0 Qn 1 0 1 0 salidas está conectada a la entrada de la otra 1 1 0 1 compuerta, logrando una retroalimentación. 1 1 1 Prh 0 x x Qn Flip-Flop D: en el Flip-Flop SR hay que aplicar dos entradas diferentes para cambiar el estado, el Flip-Flop D permite aplicar una sola entrada para cambiar la salida. El Flip-Flop D está compuesto por dos compuertas AND encargadas de enviar la señal de habilitación a dos compuertas NOR. La salida de una CK D Qn+1 1 0 Qn compuerta NOR se transforma en la entrada de la otra 1 1 0 (retroalimentación). Hay una gran similitud con el Flip- Flop SR, sólo difieren en que este tiene una sola entrada de habilitación y en que la entrada de Reset es igual a la de Set negada. Flip-Flop JK: El biestable SR presenta problemas cuando se activan simultáneamente las dos entradas S y R. Podemos diseñan un biestable similar que no presente estos problemas a partir de un biestable D. Este es el S R Qn+1 Flip-Flop JK. En este caso, para lograr un valor estable 0 0 Qn cuando se activan ambas entradas, se hace una 0 1 0 1 0 1 ̅ con las compuertas de la retroalimentación de Q y Q 1 1 Qn entrada. Flip-Flop T: el Flip-Flop T [Toggle] mantiene su estado o lo cambia dependiendo de valor de T cada vez que se activa. La salida Q cambiará de 1 a 0 o de 0 a 1 en cada pulso de la entrada T. Se puede implementar utilizando un biestable JK. Relojes En muchos circuitos secuenciales el orden en que ocurren los sucesos es crucial. A veces un suceso debe suceder a otro, u ocurrir dos sucesos en simultáneo. Para que los diseñadores puedan establecer las relaciones de temporización requeridas, muchos circuitos digitales emplean relojes que hacen posible la sincronización. Un reloj es un circuito que emite una serie de pulsaciones con una anchura de pulsación precisa y un intervalo preciso entre pulsaciones consecutivas. Es una señal de tiempo precisa que determina cuando se producen los eventos. El periodo entre los flancos correspondientes de dos pulsaciones consecutivas se denomina tiempo de ciclo del reloj. Registros Se forman a partir de biestables de tipo D conectados en cascada. Un registro con N biestables es capaz de guardar N bits. Estos son circuitos sincrónicos y todos los biestables están gobernados por la misma señal del reloj. Estos pueden ser de almacenamiento o de desplazamiento. Registro de almacenamiento D [D0,D1,D2,D3] es el dato a escribir. Q [Q0,Q1,Q2,Q3] es el dato leído. Registro de desplazamiento (en serie) CICLO DE INSTRUCCIÓN La computadora tiene como función ejecutar programas, los mismos están compuestos por instrucciones almacenadas en memoria. La CPU procesa estas instrucciones, trayéndolas desde memoria una por vez y luego cumpliendo cada operación ordenada. Podemos descomponer el procesamiento de instrucciones en dos etapas:  Etapa de búsqueda: se lee desde memoria y es común a todas las instrucciones.  Etapa de ejecución: dependiendo de la instrucción puede implicar varias operaciones. El procesamiento requerido para una sola instrucción se llama CICLO DE INSTRUCCIÓN, que consta de dos pasos: ciclo de búsqueda y ciclo de ejecución. La ejecución del programa se interrumpe sólo si la máquina se apaga, hay un error o hay una instrucción que interrumpe a la computadora. Al principio de cada ciclo, la CPU busca una instrucción en memoria. En la CPU hay un registro llamado Contador de Programa [PC], que tiene la dirección de la próxima instrucción a buscar. La CPU, después de buscar cada instrucción, incrementa el valor contenido en PC, así podrá buscar la siguiente instrucción en secuencia (de esta manera, el PC siempre va a estar apuntando a la próxima instrucción a ejecutar). La instrucción buscada se carga dentro de un registro de la CPU, llamado Registro de Instrucción [IR]. Esta instrucción está en la forma de un código binario que especifica las acciones que tomará la CPU. La CPU interpreta cada instrucción y lleva a cabo las acciones requeridas. A esta interpretación se la llama “decodificar”. En general, dichas acciones caen en cuatro tipos:  CPU-Memoria: los datos pueden transferirse entre memoria y CPU.  CPU-E/S: los datos pueden transferirse entre el CPU y E/S.  Procesamiento de datos: el CPU efectúa operaciones aritméticas o lógicas en los datos.  Control: se altera la secuencia de ejecución de instrucciones (saltos). Esquematización de búsqueda y ejecución en un ciclo de instrucción El dibujo nos esquematiza una CPU y la memoria del sistema (falta el bloque de E/S). Dentro del CPU esta la ALU, dos registros temporarios a la entrada de la ALU y uno a la salida [RT1, RT2, RT3], luego los registros en celeste que son el Registro de Instrucciones [IR] y el Contador de Programa [PC]. Luego el otro bloque celeste son los secuenciadores que forman parte de la Unidad de Control [UC] que nos va a indicar en que paso estamos dentro de la ejecución de una instrucción. Luego la memoria dentro del esquema está separada en dos partes: la Memoria de Instrucciones [MI] y la Memoria de Datos [MD]. A la derecha e izquierda están los Buses: el Bus de Direcciones y el Bus de Datos (no está esquematizado el Bus de Control). Recordar que la CPU se conecta al Bus de Datos por medio del registro MBR; y se conecta al Bus de Direcciones por medio del registro MAR. 1. El primer paso en el ciclo de instrucción es la búsqueda de la instrucción. El contenido del PC se utiliza para direccionar la memoria y así poder hacer la lectura del código de la instrucción. La dirección viaja por el Bus de Direcciones desde la PC hasta la MI. Luego, a través del Bus de Datos va la información de la instrucción que vamos a ejecutar desde la CPU al IR. 2. El segundo paso es la decodificación de la instrucción, la información del código de operación que esta copiado en el IR, es decodificada por la UC para así saber lo que tiene que hacer a continuación. [ESTOS DOS PASOS SON COMUNES A TODAS LAS INSTRUCCIONES]. Supongamos que tenemos que hacer una operación aritmética con dos operandos que van a estar en memoria y luego de realizar la operación se guarda el resultado en memoria también. 3. Búsqueda del primer operando: parte de la información de la instrucción que acaba de leerse dice como calcular la dirección del primer operando. Entonces la CPU coloca la dirección del operando en el Bus de Direcciones hace un ciclo de acceso para la lectura de la memoria, y la memoria entrega el dato que viaja a través del Bus de Datos, ingresa a la CPU y llega al Registro Temporario 1 [RT1]. 4. Búsqueda del segundo operando: se repite lo mismo que el paso anterior, pero con el segundo operando. 5. Operación aritmético-lógica realizada por la ALU, que luego coloca el resultado en el Registro Temporario 3 [RT3] que es el registro de salida de la ALU. (Si estuviera el registro de Flags, se actualizaría el mismo luego de hacer esta operación). 6. Almacenar el resultado: la instrucción nos dice dónde colocar el resultado, entonces la CPU coloca la dirección en el Bus de Direcciones y hace un ciclo de acceso para escritura de la memoria. Esta vez, es la CPU la que coloca el dato en el Bus de Datos que viaja por él y es copiado en la dirección de memoria que le corresponde ser guardado. Entonces el flujo en este caso es desde el RT3 hasta la Memoria de Datos [MD], haciendo la escritura del resultado. 7. Cálculo de la dirección de la próxima instrucción: se incrementa el Contador de Programa [PC], así este apuntará a la dirección de memoria siguiente a donde estaba la instrucción que acabamos de ejecutar. Y así se reinicia el ciclo para la próxima instrucción. Diagrama de estados Este diagrama muestra los distintos estados por los que pasa la CPU durante la ejecución de un ciclo de instrucción. No todos los ciclos de instrucción involucran todos los estados, algunos estados pueden no darse y otros pueden llegar a repetirse. Cada uno de estos círculos representan un estado dentro de un ciclo de instrucción, y las flechas nos marcan el flujo de los estados. Los estados por encima de la raya horizontal (2, 5 y 8) son estados que involucran manejo de los buses, es decir acceso de la CPU a la memoria o a E/S para leer o escribir información; y los estados que están por debajo de la raya horizontal (1, 3, 4, 6, 7) son operaciones internas de la CPU, es decir que no involucran el uso de los buses (sólo los buses internos de la CPU).  ESTADO 1: cálculo de la dirección de la instrucción. Esto involucra utilizar el PC, incrementarlo para que apunte a la próxima instrucción a ejecutar y así poder acceder a ella. Una vez que tenemos la dirección de la instrucción pasamos al siguiente estado.  ESTADO 2: búsqueda de la instrucción. Se hace un acceso al Bus de Direcciones con la dirección de la instrucción que se generó en el E1, se hace el acceso a la memoria para ir a buscar la instrucción. Esta instrucción se va a colocar en el IR (es decir la instrucción viaja de la memoria a la CPU y se guarda en el IR, mediante el Bus de Datos).  ESTADO 3: decodificación de la instrucción. Se analiza la instrucción para determinar qué tipo de operación hay que hacer, que operandos y cuantos operandos se van a utilizar. Esto dependerá de que instrucción se trate. [ESTOS TRES ESTADOS SON COMUNES A TODAS LAS INSTRUCCIONES].  ESTADO 4: cálculo de la dirección del operando. Si la instrucción implica la referencia de un operando en la memoria de E/S es acá donde se determina la dirección. Puede ser que la instrucción nos indique directamente donde está el operando, o puede que tengamos que realizar una cuenta antes para saber en dónde se encuentra dicho operando. Este estado está asociado con los Modos de Direccionamiento. Además, si no necesitamos operando esta parte no sería necesaria.  ESTADO 5: búsqueda del operando. Se realiza el ciclo de acceso a Memoria o a E/S para acceder a la información. Como involucra a la Memoria o E/S este estado está por encima de la línea horizontal, es decir, está involucrando el manejo de los buses. [Los estados 4 y 5 se pueden repetir, por ejemplo, si necesito buscar un segundo operando].  ESTADO 6: operación sobre los datos. El o los operandos necesarios ya están en la CPU y ahora hay que realizar la operación sobre esos datos (suma, resta, multiplicación, etc.).  ESTADO 7: cálculo de la dirección del resultado. Ya hicimos el cálculo en la CPU y ahora hay que calcular la dirección en la cual voy a guardar este resultado. La instrucción nos tiene que haber dado la información, de donde debo guardar el resultado. Una vez que tengo dicha dirección paso al último estado.  ESTADO 8: almacenamiento del resultado. Se hace la operación de almacenar la información. En este estado vuelve a ser necesario el uso de los buses, pues debo enviar el resultado ya sea en Memoria o en E/S. En algunas máquinas hay instrucciones que procesan arreglos de operandos (vectores). Entonces, luego de almacenar una componente del vector resultado [Estado 8] se procesa el siguiente componente del vector [Estado 4]. En este caso, la instrucción sólo se decodifica una vez y luego repite los estados del 4 al 8 para operar cada componente del vector. EJEMPLO: supongamos que tenemos la siguiente instrucción ADD A,B en donde ADD es el código de operación; A es la referencia al primer operando, y referencia a un registro; y B es la dirección a la que hay que ir a buscar el segundo operando, que es una dirección de memoria. Esta instrucción tiene una determinada cantidad de bits, algunos van a estar asociados con el código de operación, otros bits para la referencia al registro, nos va a decir con cuál de los registros internos posibles vamos a trabajar, y otros bits estarán asociados a la dirección del segundo operando. El objetivo de esta instrucción es sumar esos dos operandos y guardar el resultado. Dado que acá no hay un tercer campo en el cuál se guardará el resultado, vamos a considerar implícita dicha información, entonces el resultado se guardará en la referencia al primer operando (es decir, se guardará en A).  Primero vamos a buscar la instrucción en Memoria, para esto incrementamos el PC. La CPU busca la instrucción en memoria. Para esto copia el valor del PC al MAR y de ahí al Bus de Direcciones. La UC envía las señales necesarias para una operación de lectura. Se pueden leer uno o más bytes. A través del Bus de Datos se trae la información que pasa por el MBR y llega al IR.  Luego de buscar la instrucción, la CPU debe incrementar el PC para apuntar a lo que sigue, que puede ser un dato, una dirección (en el caso de que la instrucción actual involucre varias palabras) o la siguiente instrucción. (Puede que primero accedemos a memoria y luego incrementamos el PC para la próxima instrucción o al revés, primero incrementamos el PC y luego vamos a buscar la instrucción en la dirección de Memoria que nos indica el PC).  Decodificamos la instrucción, para saber qué tipo de operación vamos a hacer (suma, resta, etc). En este momento la CPU no sólo se entera de la operación, sino también donde se encuentran los datos sobre los cuales operar. La instrucción es AUTOCONTENIDA, en ella está toda la información que se necesita. (que es lo que hay que hacer, con que operandos, donde están, donde colocar el resultado y donde está la próxima instrucción).  Si es necesario buscar una constante en una dirección de memoria (en el caso de que se requiera voy a buscar una palabra, incremento el PC y luego voy a buscar otra palabra, es decir, debería apuntar más allá de la constante si esta se guarda en dos direcciones contiguas de memoria).  Si es necesario, hay que calcular la dirección del operando. En el paso anterior la CPU ya determinó si tiene que ir a buscar un operando o constante a memoria, y si esta ocupa una celda o más bytes en memoria. Si hemos leído más palabras en la instrucción la CPU debe incrementar el PC en el valor adecuado de celdas.  Buscar uno de los operandos desde memoria o registro.  Buscar el otro operando desde registro.  Realizar la suma  Almacenar el resultado en A, que es la información implícita en esta instrucción. FORMATO DE INSTRUCCIONES Y MODOS DE DIRECCIONAMIENTO ¿Cómo es el formato de una instrucción? ¿Cómo esta guardada una instrucción en memoria? ¿Qué campos la componen? ¿Cómo se distribuyen los bits? Sabemos que todas las instrucciones son AUTOCONTENIDAS, esto significa que la instrucción da toda la información necesaria para realizar todas las acciones que se necesiten para llevar a cabo la instrucción, y para el encadenamiento con la próxima instrucción también. Los elementos de una instrucción de máquina son:  El código de operación, que es un código binario que el fabricante asigna para cada operación que se pueda llevar a cabo, y nos especifica la operación a realizar.  La referencia del operando fuente, es una determinada cantidad de bits que nos van a permitir encontrar donde está el operando fuente. La mayoría de las operaciones aritméticas o lógicas involucran dos operandos, entonces vamos a tener que poder especificar en la instrucción donde está el operando 1 y el operando 2 (si existiese).  La referencia del operando resultado, nos indica donde colocar el resultado.  La referencia a la próxima instrucción, para saber dónde está la próxima instrucción. Lo natural es tener un Contador de Programa [PC] que nos indique la dirección de la próxima instrucción a ejecutar, puesto es que lo normal es que una instrucción este a continuación de la otra en posiciones consecutivas de memoria (en modo secuencial). Pero esto no siempre es así, puesto que por ejemplo en el caso de haber instrucciones de control condicionales esto no se cumpla. Los operando fuente y resultado pueden estar en tres lugares: pueden estar en Memoria, en una Registro de la CPU, o dentro de los circuitos de E/S. Cada instrucción dentro de la CPU está representada por un cierto número de bits que nos van a indicar todo lo necesario referente a la instrucción (¿Qué hacer? ¿Con qué? ¿Dónde va el resultado? ¿Dónde está la próxima instrucción?). Este conjunto de bits que codifican la instrucción lo podemos considerar dividido en campos, donde cada campo nos da la información necesaria para cada una de esas cuestiones que tenemos que especificar. El esquema que nos dice como están distribuidos esos campos es lo que se conoce como FORMATO DE INSTRUCCIÓN. Vamos a tener formatos de instrucción distintos, con más o menos campos y hay que analizar cuantos bits se asignarán para cada campo. La totalidad de los bits de cada campo nos darán el largo de la instrucción. En programación es muy incómodo estar trabajando en lenguaje de bits, entonces lo que se hace es usar una representación simbólica, por ejemplo, ADD para la suma, MUL para la multiplicación, etc. Estos se llaman Nemónicos. Del mismo modo, los operandos también conviene representarlos con una representación simbólica, por ejemplo, MOV Reg1, Mem1 es una instrucción que copia lo contenido en la dirección de memoria Mem1 a un registro Reg1. Obviamente tiene que estar previamente definido que se entiende por Mem1 y Reg1. En este ejemplo tenemos bits asignados al código de operación, otros al operando fuente y otros para el operando resultado. ¿Qué se va a codificar en la memoria? La secuencia de n bits que forman dicha instrucción. Ejemplo en lenguaje de alto nivel: X := X + Y  Esta instrucción suma los valores almacenados en las posiciones de memoria X e Y, para luego guarda el resultado en X. Esto puede implicar cargar registros, sumarlos y luego almacenar el resultado en memoria. Hay que tener en cuenta que una instrucción en alto nivel puede requerir varias instrucciones de máquina. La diferencia entre el lenguaje de alto nivel y el lenguaje de máquina (bajo nivel) es que el lenguaje de alto nivel expresa operaciones en forma concisa usando variables, mientras que el lenguaje de máquina expresa las operaciones de forma básica involucrando movimiento de datos y uso de registros. Además, cualquier programa escrito en lenguaje de alto nivel se debe convertir en lenguaje de máquina para ser ejecutado, pues este lenguaje es cómodo para el programador, pero el procesador no puede ejecutar eso directamente, lo que puede ejecutar el procesador son las instrucciones de máquina utilizando los registros internos de la CPU. El conjunto de instrucciones de máquina debe ser capaz de expresar cualquiera de las instrucciones de un lenguaje de alto nivel. Podemos categorizar las instrucciones de máquina en:  Procesamiento de datos: instrucciones relacionadas con operaciones aritméticas y lógicas.  Almacenamiento de datos: instrucciones relacionadas con transferencias dentro del sistema, entre la memoria y el CPU.  Instrucciones de E/S: en algunos casos, la arquitectura requiere una salida específica para la transferencia de datos entre la computadora y los mecanismos externos.  Instrucciones de control: manejan el flujo del programa, por ejemplo, instrucciones de salto o ramificación. También hay instrucciones de control que modifican registros especiales que afectan el comportamiento de la CPU, y esas instrucciones también entran dentro de esta categoría. ¿Qué número de direcciones necesito en una instrucción de máquina? En principio las direcciones que se necesitan son cuatro: dos direcciones para hacer referencia a los operandos fuente, una que hace referencia al operando resultado y la dirección de la próxima instrucción (y además necesitamos bits para indicar el Código de Operación, pero esto no es una dirección). Este sería el caso de una máquina de 4 direcciones, aquí no hay Contador de Programa, la dirección de la próxima instrucción está contenido en la instrucción actual. Tenemos direcciones explicitas para operandos fuentes y operando resultado, y para la próxima instrucción. Estas son muy raras puesto que cada campo de dirección necesita tener bits para acomodar una dirección completa. Entonces, por ejemplo, si cada dirección ocupa 24 bits, necesito 24 x 4 = 96 bits por instrucción para indicar las direcciones. Cód. Operación Dir. Resultado Dir. Op1 Dir. Op2 Dir. PróxInstr Ya sabemos que las instrucciones en un programa se ordenan en forma de secuencia entonces si sabemos que las mismas se encuentran en posiciones contiguas de memoria bastaría contar con un registro en el CPU llamado Contador de Programa, que vaya haciendo el encadenamiento de instrucción a instrucción, entonces de este modo cada vez que leemos una instrucción incrementamos el PC y de este modo siempre estará apuntando a la próxima instrucción. Entonces la dirección de la próxima instrucción estará implícita en el PC, y ahora necesitaría sólo 3 direcciones por cada instrucción de máquina. Esta es una máquina de 3 direcciones. Ahora se acorta la cantidad de bits que tengo por instrucción dedicado a direcciones, siguiendo el ejemplo anterior de 24 bits por dirección, necesito 24 x 3 = 72 bits por instrucción para indicar las direcciones en una máquina de tres direcciones. Cód. Operación Dir. Resultado Dir. Op1 Dir. Op2 Luego tenemos las máquinas de 2 direcciones, ¿Cómo podemos reducir el tamaño de la instrucción en base a los bits dedicados a las direcciones? Podemos tener alguna otra información implícita. Esta información implícita sería la dirección en la cual se guardará el resultado, la misma va a ser la dirección del primer operando. [ADD AX,BX  de modo implícito está indicado que la suma entre el contenido del registro AX y el registro BX va a ser guardado en la dirección del primer operando, es decir dentro del registro AX.] En este caso y siguiendo la idea de 24 bits por dirección, estaríamos dedicando 24 x 2 = 48 bits a las referencias de direcciones. Tenemos menos elección para guardar el resultado porque este va a ser guardado en la dirección referenciada por el operando 1. La manera de compensar esta limitación es tener una operación que nos permita mover la información contenida en el lugar al que apunta esa dirección (por ejemplo, un MOV). Cód. Operación Dir. Op1/Res Dir. Op2 Por último, está el caso de las máquinas de 1 dirección, tenemos que suponer implícita otra información más para así sacar otro campo dedicado a una dirección. Esta máquina dispone de un registro especial en la CPU llamado acumulador que es uno de los operandos de la operación y además el destino para el resultado (cumple el rol del operando 1 en la máquina de dos direcciones, sólo que en este caso es un registro de la CPU). Este operando lo vamos a ir a buscar en memoria y lo vamos a colocar en un registro interno acumulador, para no perder flexibilidad vamos a necesitar un código de operación para cargar el acumulador [LOAD] y otro para descargarlo [STORE]. Cód. Operación Dir. Op2 RESOLVER LA SIGUIENTE ECUACIÓN  A = (B + C) * D - E Máquina de 3 direcciones Máquina de 2 direcciones Máquina de 1 dirección ADD A , B , C | 1ac MI / 3ac MD MOV A , B | 1ac MI / 2ac MD LOAD B | 1ac MI / 1ac MD MUL A , A , D | 1ac MI / 3ac MD ADD A , C | 1ac MI / 3ac MD ADD C | 1ac MI / 1ac MD SUB A , A , E | 1ac MI / 3ac MD MUL A , D | 1ac MI / 3ac MD MUL D | 1ac MI / 1ac MD 3 INSTRUCCIONES  EN TOTAL SUB A , E | 1ac MI / 3ac MD SUB E | 1ac MI / 1ac MD SON 3 ACCESOS A MI Y 9 ACCESOS 4 INSTRUCCIONES  EN TOTAL SON 4 STORE A | 1ac MI / 1ac MD A MD ACCESOS A MI Y 11 ACCESOS A MD [la 5 INSTRUCCIONES  EN 1er instrucción accede a MD dos veces, TOTAL SON 5 ACCESOS A MI una para buscar los datos de B y otra Y 5 ACCESOS A MD para dejarlos en A; las otras acceden 3 veces, 2 para buscar operandos y luego una vez más a A para dejar el resultado ] El conjunto de instrucciones es el medio que tiene el programador para poder controlar la CPU. El fabricante tuvo que tener determinadas consideraciones:  Que tipos de operaciones se pueden manejar, cuáles [si por ejemplo quiero multiplicar y no tengo una operación para eso, deberé implementar otro modo de hacerlo como por ejemplo sumas sucesivas] y cuántas [si yo tengo muchas operaciones voy a necesitar más bits para codificarlas]. Tenemos distintos tipos de operaciones posibles: o Instrucciones de transferencia de datos: MOV, LOAD, STORE o Instrucciones aritméticas: ADD, SUB, MUL, INC, DEC o Instrucciones lógicas: AND, NOT, XOR, OR o Instrucciones de conversión: por ejemplo, de binario a decimal. o Instrucciones para manejo de Entrada y Salida de datos: son para transferir datos entre la E/S y la CPU. Por ejemplo, IN, OUT o Instrucciones de transferencia de control: por ejemplo, las de bifurcación (condicionales) o los saltos. o Instrucciones de control de sistema: estas son las que maneja el SO  Que tipos de datos vamos a trabajar, puesto que las instrucciones tienen que dar soporte a distintos tipos de datos. Los tipos de datos más importantes son direcciones, números (entero, punto fijo, etc), caracteres (ASCII, BCD) y datos lógicos.  Cuál va a ser el formato de las instrucciones en esta arquitectura [longitud (cantidad de bits), número de direcciones, tamaños de cada campo].  Uso de registros, cantidad que se pueden referenciar mediante las instrucciones y uso específico o general de los mismos.  Modos de direccionamiento, esto es la manera que tenemos de especificar la dirección de un operando o de una instrucción. Modos de direccionamiento Como ya vimos, en una instrucción se necesitan bits para expresar el Código de Operación, que indica la operación que vamos a hacer y otra cantidad de bits para especificar de donde provienen los datos que vamos a utilizar en esta instrucción. ¿Cómo se puede reducir el tamaño de estas especificaciones? Hay dos métodos generales: 1. Si un operando va a usarse varias veces, puede colocarse en un registro dentro de la CPU, esto tiene como ventaja que el acceso será más rápido, puesto que todo lo que está colocado en registro del CPU se accede más rápidamente; y además voy a necesitar menos bits pues por ejemplo si tengo 32 registros dentro del CPU me alcanzan 5 bits para referenciar al operando contenido en el registro del CPU, pues 25 = 32. De este modo reduzco el tamaño de las instrucciones. 2. Puedo especificar uno o más operandos en forma implícita, por ejemplo, en el caso de las máquinas de una dirección con el registro acumulador lo que hago es ahorrarme bits en la instrucción que me referencien las instrucciones de uno de los operando fuentes y el operando resultado. Por lo general los modos de direccionamiento tienen como objetivo: disminuir la cantidad de bits dentro de la instrucción; lograr que existan direcciones que no precisan conocerse hasta la ejecución del programa (por ejemplo, no necesito saber la dirección del operando para escribir un programa, sólo con usar la representación simbólica del operando puedo escribir mi programa y después la CPU se encargará de decodificar las instrucciones); poder manejar los datos de manera más eficiente, por ejemplo, en las estructuras de datos de tipo arreglos.  Modo de Direccionamiento Inmediato [MOV AL , 4]: en este modo de direccionamiento el operando esta codificado en la instrucción, es decir, se obtiene automáticamente de la memoria al mismo tiempo que la instrucción. En este caso no hay que ir a hacer una referencia posterior a memoria, cuando nos llevamos la instrucción a la CPU, llevamos codificado dentro de la instrucción el operando. Este modo de direccionamiento se utiliza para definir constantes y también para inicializar variables, por ejemplo. La desventaja es que el tamaño del operando va a estar limitado al tamaño de ese campo de direccionamiento, entonces, si por ejemplo el campo de direccionamiento para ese operando es de 16 bits, tengo que tener en cuenta que el operando no puede ocupar más de 16 bits.  Modo de Direccionamiento Directo [ADD BX , NUM]: en este caso se nos da dentro de la instrucción en el campo de dirección, directamente la dirección del operando, entonces usamos esa dirección para ir a buscar el operando a la Memoria. Por ejemplo, si el operando dice que es 11FFH entonces el CPU va a ir a buscar el operando (o la dirección a donde colocar el resultado) a la dirección de memoria 11FFH. Es un modo simple, pero de nuevo estaremos limitados por la cantidad de bits del campo de dirección de esta instrucción. Este modo de direccionamiento se usa para acceder a variables globales cuya dirección se conoce al momento de la compilación. En estos casos por lo general se va a utilizar una representación simbólica que indique a que dirección ir a buscar el operando fuente o resultado (es decir, el nombre de la constante o variable).  Modo de Direccionamiento por Registro [ADD AL , BL]: en el campo de dirección tenemos una referencia a un registro interno del CPU. Con esa referencia vamos a buscar el dato, sólo que esta vez no tenemos que acceder a Memoria, sino a los registros de la CPU. Como los registros del CPU son pocos comparados con la Memoria, entonces este campo de dirección referenciando a un registro va a ocupar menos bits. Conceptualmente es igual al Modo de Direccionamiento Directo, sólo que se especifica un registro interno de la CPU en lugar de una posición de memoria. La referencia a registro ocupa menos bits que la especificación de la dirección y no requiere acceso a memoria de datos. La desventaja es que los registros no son muchos, entonces es un recurso limitado, por lo tanto, hay que analizar bien como usarlos.  Modo de Direccionamiento Indirecto por Memoria: en este caso no vamos directamente a la dirección de memoria que necesitamos, sino que tenemos que dar un paso intermedio antes. Es decir, en el campo de la instrucción, ya no nos dan la dirección efectiva del operando, sino que nos dan una dirección que tiene guardada la dirección efectiva del operando. Entonces se lee la dirección y se accede a Memoria, y ahí se hace un segundo acceso a Memoria para acceder al operando. ¿De qué nos sirve que en la instrucción este la dirección de la dirección del operando? Es para tratar de solucionar el problema del Modo de Direccionamiento Directo, y así, con una dirección de menos bits en la instrucción, se apunta a una dirección de más bits. La ventaja es que tendremos un espacio de direccionamiento mayor, pues el sitio en memoria al que esta apuntando el campo de mi instrucción puede tener más bits. Pero la desventaja es que voy a tener más accesos a memoria, entonces, este modo de direccionamiento será más lento que el modo de direccionamiento Directo. Otra ventaja es que no necesito conocer la dirección efectiva del operando en el momento en el que escribo mi programa.  Modo de Direccionamiento Indirecto vía Registro [ADD AL , [BX]]: en este caso, a través de un registro accedemos a una dirección de memoria. Es decir, el campo de la instrucción tiene la dirección a un registro de la CPU que guarda una dirección de memoria, en la cual tenemos guardada el operando que queremos usar, esta es la dirección efectiva del operando. La ventaja es que son muy pocos bits para especificar el registro. Tenemos un espacio de direccionamiento grande y se accede una sola vez a memoria, para ir a buscar el operando, ya que el paso indirecto se da adentro de la CPU entonces es más rápido. En este caso el registro sería un registro puntero pues apunta a la dirección efectiva del operando.  Modo de Direccionamiento por Desplazamiento: este modo implica especificar dos cosas, un registro involucrado y una cantidad que hay que sumársela al contenido del registro para encontrar la dirección efectiva del operando. Entonces la dirección efectiva de aquello que queremos referenciar se calcula con el contenido de un registro más una cantidad binaria que se le suma. El registro puede estar implícito o no, dependiendo de que instrucción sea y del procesador. Si bien se están dimensionando dos conjuntos de bits, uno que nos referencia la dirección de un registro y otro que nos indica una cantidad que sería el desplazamiento, estamos especificando sólo una dirección. Este modo de direccionamiento combina las capacidades de los modos de direccionamiento indirecto y directo. Hay distintos Modos de Direccionamiento por Desplazamiento, los más comunes son: o MDD por Desplazamiento Relativo: el registro que está involucrado en el direccionamiento está implícito y es el Contador de Programa. Entonces la dirección de la instrucción actual se suma al campo de dirección (que sería el desplazamiento) para producir la dirección efectiva. Este campo de dirección está dado en Ca2. Entonces nos permite referenciar posiciones relativas a donde estamos parados en el programa. Esto tiene mucha utilidad, por ejemplo, cuando estamos manejando instrucciones de salto, por lo general no saltamos a lugares muy alejados del que nos encontramos, entonces este campo que nos indica que tanto tenemos que saltar puede ser de pocos bits. Además, al ser el PC el registro implícito, esto nos permite construir código que se llama reubicable, es decir el Contador de Programa yo lo corro más arriba o más abajo en memoria, y toda la secuencia de instrucciones que conforman el programa, al cambiarse el PC no importa si es más arriba o más hacia abajo, se va a mantener y va a seguir referenciando la misma dirección. o MDD por Desplazamiento de Registro Base: el registro referenciado contiene una dirección de memoria y el campo de dirección tiene un desplazamiento. Esto es muy útil para trabajar por ejemplo con la estructura arreglo. Supongamos que yo quiero trabajar siempre con un dato que está en la posición 4 de un arreglo, y yo quiero trabajar con distintos arreglos, pero siempre con el dato de la posición 4, entonces puedo ir cambiando la dirección del registro, pero el desplazamiento siempre será el mismo. o MDD por Desplazamiento Indexado: acá también se direcciona la memoria con un registro más un desplazamiento. En esencia es igual desplazamiento por Registro Base, lo que cambia es que se interpreta por desplazamiento y por dirección base. Acá el desplazamiento estaría dado por el contenido del registro, y la dirección base está dada por el campo A. Entonces la dirección base (desde donde comienzo) va a estar fija, y el desplazamiento que se lleve a cabo va a depender del contenido del registro. Este registro lo puedo ir variando por ejemplo en un lazo (iteración) y entonces así voy accediendo a distintos lugares de memoria en base a los distintos desplazamientos que se van dando. En el caso de un arreglo, en el campo de la instrucción especificamos la dirección del comienzo del arreglo y en el registro (que vamos a llamar registro índice) vamos a tener la información que nos indique como nos vamos a desplazar dentro de ese arreglo. Por esto mismo es que podemos decir que la Indexación proporciona un mecanismo eficiente para realizar operaciones iterativas. Algunas máquinas pueden realizar una auto-indexación, es decir, puede incrementar o decrementar este registro como parte de la instrucción.  Modo de Direccionamiento del Stack: el Stack es un área de memoria que está administrada como una estructura de tipo Pila, en donde el último en entrar es el primero en salir, es decir, la información dentro de la estructura se va apilando. Entonces vamos a tener un registro puntero de Pila que apunta a una dirección. Cada vez que meto algo en la pila, al puntero se le cambia el valor para que apunte a la dirección en donde está guardada la última información ingresada. Este registro llamado Puntero de Pila [Stack Pointer] está implícito y se incrementa/decrementa automáticamente. Este puntero siempre va a apuntar al tope de la pila. REGISTROS Dentro de la CPU tenemos disponibles registros que son visibles para el usuario, es decir, para el programador, y otros que son registros de control y estado, que son utilizados por la UC para controlar las operaciones de la CPU y no son visibles por el programador. ¿A qué le llamamos registros visibles? Estos son los que pueden ser afectados por el programador directamente a través de las instrucciones. Si yo tengo una instrucción de suma sobre un registro AX con un operando inmediato, se puede decir que el registro AX es visible para mí porque yo puedo afectarlo mediante una instrucción. Ahora un registro temporario que este en la entrada de la ALU que es necesario para alojar temporalmente un dato hasta que se haga la operación, este registro yo puedo suponer que existe (ya que lo vi en la clase de Organización de computadoras) pero no tengo modo de que pueda manejarlo. Por ejemplo, el Registro de Instrucciones [IR] es un registro de control y estado porque no puedo controlar lo que está dentro de ese registro, aunque sepa para que sirve y sepa que existe. Registros visibles para el usuario: tenemos varios tipos  Registros de propósito general: tienen múltiples funciones, en principio pueden ser usados para cualquier operando y ese operando puede utilizarse para cualquier código de operación. A veces pueden existir restricciones (por ejemplo, registros sólo usados para operandos en Punto Flotante). También se pueden utilizar para direccionamiento (por ejemplo, Direccionamiento Indirecto vía Registro).  Registros exclusivos para trabajar con datos.  Registros para alojar direcciones: estos pueden ser asignados para un Modo de Direccionamiento con Desplazamiento, por ejemplo, el registro índice para el MDD auto-indexado.  Registros de estado en donde están almacenados los códigos de condición. ¿Conviene tener todos los registros para propósito general o conviene especializar su uso? La primera respuesta que tenemos es que, si todos los registros son de propósito general, esto va a afectar el tamaño de las instrucciones. Ahora si tengo registros especializados, puede ahorrar bits para los casos especializados en el que necesite menos bits, pero se limita la flexibilidad del programador. La cantidad de registros que tenga en la CPU es importante pues:  Afecta el tamaño de la instrucción (pues necesito más bits para el campo de dirección para el registro).  Si tengo una mayor cantidad de registros, voy a precisar un mayor número de bits para poder codificarlos.  Si tenemos pocos registros, significa que no voy a poder tener muchos datos dentro de la CPU; entonces voy a tener que ir permanentemente a Memoria a buscar mis datos.  El número óptimo de registros suele ser entre 8 y 32 registros (direcciones de 3 y 5 bits). En cuanto a la longitud de los registros:  Los registros de direcciones deben ser capaces de almacenar la dirección más grande que podamos trabajar. Si, por ejemplo, las direcciones con las que va a trabajar nuestro procesador son de 32 bits, nuestros registros tienen que tener espacio suficiente para guardar estas direcciones de 32 bits.  Si los registros guardan datos, la idea es que puedan guardar la mayoría de tipos de datos que trabaje ese procesador. En algunas máquinas se permite que un par de registros puedan estar almacenando partes de un mismo dato, es decir que estos registros estén de manera contigua y actúen como un solo registro, para poder trabajar un dato de doble longitud. El CPU también cuenta con bits de condición [Flags]:  Estos son establecidos por la CPU como resultado de operaciones.  Pueden ser utilizados por las instrucciones de bifurcación condicional, por ejemplo, saltar si hubo Overflow.  Generalmente no son alterados por el programador, sólo son utilizados para sus instrucciones condicionales. Igualmente hay instrucciones para alterar estos bits pero no es una práctica tan común. Respecto a los registros de control y estado:  Hay algunos de estos registros que son básicos para el funcionamiento de la CPU, como el Registro Contador de Programa [PC], el Registro de Instrucción [IR], el Registro Buffer de Memoria [MBR] que vincula la CPU con el Bus de Datos o el Registro de Dirección de Memoria [MAR] que vincula la CPU con el Bus de Direcciones. Estos 4 registros son esenciales puesto que se emplean para el movimiento de datos entre la CPU y la Memoria. EJEMPLOS DE ORGANIZACIONES DE REGISTROS EN DOS PROCESADORES Intel - Línea de procesadores 8086 Fue el primer procesador de esta línea, si bien los siguientes modelos que salieron fueron agregando complejidades a su CPU; fue siempre conservando la posibilidad de funcionar en un modo compatible con los programas hechos para los primeros procesadores. En el modelo de registros de esta línea, los registros en azul (de 32 bits) no estaban presentes en el 8086, aparecen más adelante. Los registros eran de 16 bits: AX, BX, CX, DX (sólo se muestran los registros visibles para el programador). Estos 4 registros son de uso general. También puedo hablar, en lugar de AX, de AH y AL, que son registros de 8 bits cada uno. El uso es indistinto y puedo mezclar registros de todo tipo. En el caso del MSX88, que simula el Intel 8086, no existen los registros de 32 bits (EAX, EBX, ECX, EDX), sólo los de 16 bits y 8 bits. ¿Qué significa que los registros se puedan ver como EAX, AX, o AH y AL? Es más versátil a la hora de trabajar con datos o direcciones que ocupan más o menos bits. En el Intel 8086 tenemos cuatro registros Punteros e Índices. Hay dos punteros a una zona especial de Memoria llamada Pila, que son el Stack Pointer [SP], que siempre apunta al tope de la pila; y el Puntero Base [BP], que nos permite acceder a información c que esta guardada en la pila, sin necesidad de desapilar. Luego hay dos registros índices [DI] y [SI] que nos permiten recorrer arreglos. Por ejemplo, en operaciones complejas de transferencia de un arreglo de datos a otro, el DI funciona como Índice Destino y el SI está pensado como Puntero Fuente. En el modelo 386 en adelante, estos son registros de 32 bits (registros en azul) pero en Intel 8086 y 8088 eran registros de 16 bits. Están también los llamados Registros de Segmento, que se utilizan para formar la dirección que sale al Bus de Direcciones. En el Intel 8086, había 4 registros de segmento, luego se agregaron dos más. Originalmente se usaban para completar la generación de la dirección. El bus de direcciones en el 8086 era de 20 bits, es decir, las direcciones eran de 20 bits, pero los registros eran de 16 bits. ¿Cómo se complementan los 20 bits de direcciones? Lo que se hacía era sumar el contenido de un registro de segmento con el registro de direcciones que estábamos usando para el direccionamiento. Por ejemplo, si queríamos acceder a la pila se usaba el registro de Segmento de Stack [SS] y el Stack Pointer [SP]. Ahora, ¿Cómo logramos los 20 bits del Bus de Direcciones? Esta suma se hace desplazada, el registro de Segmento estaría aportando 20 bits donde los cuatro bits menos significativos siempre valen 0 y a eso se le suma el registro usado en el direccionamiento. Luego tenemos el Registro Contador de Programa [IP] que en el entorno Intel se llama distinto, y el Registro de Flags. En Intel 8086 eran registros de 16 bits y luego después de 386 en adelante eran de 32 bits (en azul). Los registros llamados de propósito general (AX, BX, CX, DX), si bien son de uso general, tienen funciones particulares cada uno de ellos.  Registro AX: es el registro Acumulador, es el que se usa principal

Use Quizgecko on...
Browser
Browser