Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Las primeras CPU fueron diseñadas a medida como parte de un ordenador más
grande, generalmente un ordenador único en su especie. Sin embargo, este
método de diseñar las CPU a medida, para una aplicación particular, ha
desaparecido en gran parte y se ha sustituido por el desarrollo de clases de
procesadores baratos y estandarizados adaptados para uno o varios propósitos.
Esta tendencia de estandarización comenzó generalmente en la era de los
transistores discretos, computadoras centrales y microcomputadoras y fue
acelerada rápidamente con la popularización del circuito integrado (IC), este ha
permitido que sean diseñados y fabricados CPU más complejas en espacios
pequeños en la orden de nanómetros. Tanto la miniaturización como la
estandarización de las CPU han aumentado la presencia de estos dispositivos
digitales en la vida moderna mucho más allá de las aplicaciones limitadas de
máquinas de computación dedicadas. Los microprocesadores modernos aparecen
en todo, desde automóviles hasta teléfonos móviles o celulares y juguetes de
niños.
Los relés eléctricos y los tubos de vacío (válvulas termoiónicas) eran usados
comúnmente como elementos de conmutación; un ordenador útil requiere miles o
decenas de miles de dispositivos de conmutación. La velocidad global de un
sistema depende de la velocidad de los conmutadores. Los ordenadores de tubo,
como el EDVAC, tendieron en tener un promedio de ocho horas entre fallos,
mientras que los ordenadores de relés, (anteriores y más lentos), como el Harvard
Mark I, fallaban muy raramente.1 Al final, los CPU basados en tubo llegaron a ser
dominantes porque las significativas ventajas de velocidad producidas
generalmente pesaban más que los problemas de confiabilidad. La mayor parte de
estas tempranas CPU síncronas corrían en frecuencias de reloj bajas comparadas
con los modernos diseños microelectrónicos. Eran muy comunes en este tiempo
las frecuencias de la señal del reloj con un rango desde 100 kHz hasta 4 MHz,
limitado en gran parte por la velocidad de los dispositivos de conmutación con los
que fueron construidos.
La complejidad del diseño de las CPU aumentó junto con la facilidad de la
construcción de dispositivos electrónicos más pequeños y confiables. La primera
de esas mejoras vino con el advenimiento del transistor. Las CPU transistorizadas
durante los años 1950 y los años 1960 no tuvieron que ser construidos con
elementos de conmutación abultados, no fiables y frágiles, como los tubos de
vacío y los relés eléctricos. Con esta mejora, fueron construidas CPU más
complejas y más confiables sobre una o varias tarjetas de circuito impreso que
contenían componentes discretos (individuales).
Decode
En el paso de decodificación, la instrucción es dividida en partes que tienen
significado para otras unidades de la CPU. La manera en que el valor de la
instrucción numérica es interpretado está definida por la arquitectura del conjunto
de instrucciones (el ISA) de la CPU.nota 4 A menudo, un grupo de números en la
instrucción, llamados opcode, indica qué operación realizar. Las partes restantes
del número usualmente proporcionan información requerida para esa instrucción,
como por ejemplo, operandos para una operación de adición. Tales operandos se
pueden dar como un valor constante (llamado valor inmediato), o como un lugar
para localizar un valor, que según lo determinado por algún modo de dirección,
puede ser un registro o una dirección de memoria. En diseños más viejos las
unidades del CPU responsables de decodificar la instrucción eran dispositivos de
hardware fijos. Sin embargo, en CPUs e ISAs más abstractos y complicados, es
frecuentemente usado un microprograma para ayudar a traducir instrucciones en
varias señales de configuración para el CPU. Este microprograma es a veces
reescribible de tal manera que puede ser modificado para cambiar la manera en
que el CPU decodifica instrucciones incluso después de que haya sido fabricado.
Execute
Writeback
El paso final, la escritura, simplemente «escribe» los resultados del paso de
ejecución a una cierta forma de memoria. Muy a menudo, los resultados son
escritos a algún registro interno del CPU para acceso rápido por subsecuentes
instrucciones. En otros casos los resultados pueden ser escritos a una memoria
principal más lenta pero más barata y más grande. Algunos tipos de instrucciones
manipulan el contador de programa en lugar de directamente producir datos de
resultado. Estas son llamadas generalmente "saltos" (jumps) y facilitan
comportamientos como bucles, la ejecución condicional de programas (con el uso
de saltos condicionales), y funciones en programas.nota 5 Muchas instrucciones
también cambiarán el estado de dígitos en un registro de "banderas". Estas
banderas pueden ser usadas para influenciar cómo se comporta un programa,
puesto que a menudo indican el resultado de varias operaciones. Por ejemplo, un
tipo de instrucción de "comparación" considera dos valores y fija un número, en el
registro de banderas, de acuerdo a cuál es el mayor. Entonces, esta bandera
puede ser usada por una posterior instrucción de salto para determinar el flujo de
programa.
La manera en que un CPU representa los números es una opción de diseño que
afecta las más básicas formas en que el dispositivo funciona. Algunas de las
primeras calculadoras digitales usaron, para representar números internamente,
un modelo eléctrico del sistema de numeración decimal común (base diez).
Algunas otras computadoras han usado sistemas de numeración más exóticos
como el ternario (base tres). Casi todos los CPU modernos representan los
números en forma binaria, en donde cada dígito es representado por una cierta
cantidad física de dos valores, como un voltaje "alto" o "bajo".nota 7
Niveles más altos del rango de números enteros requieren más estructuras para
manejar los dígitos adicionales, y por lo tanto, más complejidad, tamaño, uso de
energía, y generalmente costo. Por ello, no es del todo infrecuente, ver
microcontroladores de 4 y 8 bits usados en aplicaciones modernas, aun cuando
están disponibles CPU con un rango mucho más alto (de 16, 32, 64, e incluso 128
bits). Los microcontroladores más simples son generalmente más baratos, usan
menos energía, y por lo tanto disipan menos calor. Todo esto pueden ser
consideraciones de diseño importantes para los dispositivos electrónicos. Sin
embargo, en aplicaciones del extremo alto, los beneficios producidos por el rango
adicional, (más a menudo el espacio de dirección adicional), son más significativos
y con frecuencia afectan las opciones del diseño. Para ganar algunas de las
ventajas proporcionadas por las longitudes de bits tanto más bajas, como más
altas, muchas CPUs están diseñadas con anchos de bit diferentes para diferentes
unidades del dispositivo. Por ejemplo, el IBM System/370 usó un CPU que fue
sobre todo de 32 bits, pero usó precisión de 128 bits dentro de sus unidades de
coma flotante para facilitar mayor exactitud y rango de números de coma flotante.4
Muchos diseños posteriores de CPU usan una mezcla de ancho de bits similar,
especialmente cuando el procesador está diseñado para usos de propósito
general donde se requiere un razonable equilibrio entre la capacidad de números
enteros y de coma flotante.
Frecuencia de reloj
Artículo principal: Frecuencia de reloj
La mayoría de los CPU, y de hecho, la mayoría de los dispositivos de lógica
secuencial, son de naturaleza síncrona.nota 9 Es decir, están diseñados y operan
en función de una señal de sincronización. Esta señal, conocida como señal de
reloj, usualmente toma la forma de una onda cuadrada periódica. Calculando el
tiempo máximo en que las señales eléctricas pueden moverse en las varias
bifurcaciones de los muchos circuitos de un CPU, los diseñadores pueden
seleccionar un período apropiado para la señal del reloj.
Este período debe ser más largo que la cantidad de tiempo que toma a una señal
moverse, o propagarse en el peor de los casos. Al fijar el período del reloj a un
valor bastante mayor sobre el retardo de la propagación del peor caso, es posible
diseñar todo el CPU y la manera que mueve los datos alrededor de los "bordes"
de la subida y bajada de la señal del reloj. Esto tiene la ventaja de simplificar el
CPU significativamente, tanto en una perspectiva de diseño, como en una
perspectiva de cantidad de componentes. Sin embargo, esto también tiene la
desventaja que todo el CPU debe esperar por sus elementos más lentos, aun
cuando algunas unidades de la misma son mucho más rápidas. Esta limitación ha
sido compensada en gran parte por varios métodos de aumentar el paralelismo del
CPU (ver abajo).
Sin embargo, las mejoras arquitectónicas por sí solas, no solucionan todas las
desventajas de CPUs globalmente síncronas. Por ejemplo, una señal de reloj está
sujeta a los retardos de cualquier otra señal eléctrica. Velocidades de reloj más
altas en CPUs cada vez más complejas hacen más difícil de mantener la señal del
reloj en fase (sincronizada) a través de toda la unidad. Esto ha conducido que
muchos CPU modernos requieran que se les proporcione múltiples señales de
reloj idénticas, para evitar retardar una sola señal lo suficiente como para hacer al
CPU funcionar incorrectamente. Otro importante problema cuando la velocidad del
reloj aumenta dramáticamente, es la cantidad de calor que es disipado por el CPU.
La señal del reloj cambia constantemente, provocando la conmutación de muchos
componentes (cambio de estado) sin importar si están siendo usados en ese
momento. En general, un componente que está cambiando de estado, usa más
energía que un elemento en un estado estático. Por lo tanto, a medida que la
velocidad del reloj aumenta, así lo hace también la disipación de calor, causando
que el CPU requiera soluciones de enfriamiento más efectivas.
Paralelismo
Artículo principal: Computación paralela
Modelo de un CPU subescalar. Note que toma quince ciclos para terminar tres
instrucciones.
La descripción de la operación básica de un CPU ofrecida en la sección anterior
describe la forma más simple que puede tomar un CPU. Este tipo de CPU,
usualmente referido como subescalar, opera sobre y ejecuta una sola instrucción
con una o dos piezas de datos a la vez.
Tubería básica de cinco etapas. En el mejor de los casos, esta tubería puede
sostener un ratio de completado de una instrucción por ciclo.
Uno de los métodos más simples para lograr incrementar el paralelismo es
comenzar los primeros pasos de leer y decodificar la instrucción antes de que la
instrucción anterior haya terminado de ejecutarse. Esta es la forma más simple de
una técnica conocida como segmentación (instruction pipelining en inglés), y es
utilizada en casi todas los CPU de propósito general modernos. Al dividir la ruta de
ejecución en etapas discretas, la tubería permite que más de una instrucción sea
ejecutada en cualquier tiempo. Esta separación puede ser comparada a una línea
de ensamblaje, en la cual una instrucción es hecha más completa en cada etapa
hasta que sale de la tubería de ejecución y es retirada del mismo.
Un menos común pero cada vez más importante paradigma de CPU (y de hecho,
de computación en general) trata con vectores. Los procesadores de los que se ha
hablado anteriormente son todos referidos como cierto tipo de dispositivo
escalar.nota 12 Como implica su nombre, los procesadores vectoriales se ocupan
de múltiples piezas de datos en el contexto de una instrucción, esto contrasta con
los procesadores escalares, que tratan una pieza de dato por cada instrucción.
Estos dos esquemas de ocuparse de los datos son generalmente referidos
respectivamente como SISD (single instruction, single data) y SIMD (single
instruction, multiple data). La gran utilidad en crear CPU que se ocupen de
vectores de datos radica en la optimización de tareas que tienden a requerir la
misma operación, por ejemplo, una suma, o un producto escalar, a ser realizado
en un gran conjunto de datos. Algunos ejemplos clásicos de este tipo de tareas
son las aplicaciones multimedia (imágenes, vídeo, y sonido), así como muchos
tipos de tareas científicas y de ingeniería. Mientras que una CPU escalar debe
completar todo el proceso de leer, decodificar, y ejecutar cada instrucción y valor
en un conjunto de datos, una CPU vectorial puede realizar una simple operación
en un comparativamente grande conjunto de datos con una sola instrucción. Por
supuesto, esto es solamente posible cuando la aplicación tiende a requerir
muchos pasos que apliquen una operación a un conjunto grande de datos.
Estructura de registros
• Registro de índice.
Sirve para direccionamiento, es similar al “PC”, pero tiene un valor base de
autoincremento: Ejemplo: Base 3 3, 6, 9…n, n+1; que se irá sumando para
obtener una dirección más efectiva.
Ciclo Fetch-Decode-Execute
Registros
Un registro es una estructura de datos formado por un conjunto de elementos
llamados campos, no necesariamente del mismo tipo y que permiten almacenar
una serie de datos relacionados entre sí bajo un nombre común.
Operaciones
Ejercicios
1. Proporcione la definición de los registros para cada uno de los siguientes casos:
a. El registro fecha que contiene tres enteros dia, mes y año (anio).
b. El registro persona que contiene dos cadenas de caracteres nombre y apellido,
un campo del tipo fecha (definido previamente) fecha_de_nacimiento
2. Partiendo de los registros definidos previamente, desarrolle un algoritmo en el
cual se definan dos variables correspondientes a dos personas, solicite la
información necesaria al usuario para asignarle los valores de nombre, apellido y
fecha de nacimiento de cada uno y luego muestre la información por pantalla.
Haga uso de procedimientos.
Archivos
Un archivo es una secuencia de elementos del mismo tipo, que residen
generalmente en memoria auxiliar. Los archivos son utilizados cuando se desea
que los datos puedan recuperarse aún después de haber apagado la máquina y
también cuando se manejan grandes volúmenes de información.
Declaración
Antes de empezar a utilizar un archivo se debe declarar una variable que haga
referencia al archivo con el que se va a trabajar. A continuación se muestra como
se puede hacer:
Ilustración 7 declaracion
Operaciones
Al trabajar con archivos secuenciales se pueden realizar diversas operaciones
tales como:
• Abrir el archivo: se debe hacer antes de hacer otras operaciones en le archivo.
• Cerrar el archivo: se debe hacer cuando se termina de utilizar el archivo.
• Verificar el fin del archivo (FDA o EOF).
• Leer del archivo.
• Escribir en el archivo.
A continuación se muestran ejemplos de estas operaciones utilizando los archivos
declarados anteriormente.
Ilustración 9 lectura de un archivo caracter por caracter (asumiendo que el archivo está abierto y es de
lectura)
Ilustración 10 escritura en un archivo (asumiendo que el archivo está abierto y es de escritura)
Toma en consideración que para ejecutar este ejemplo debes contar con un
archivo “info.dat”, el cual puede tener inicialmente los siguientes valores:
Maria 20.4
Jose 17.4
Pedro 56.7
Carlos 67.1
,
Ilustración 12 ejemplo permite crear un archivo e ingresar la información en un archivo “info.dat”.
Ejercicios:
1.- Considere que usted es el dueño de una tienda de herramientas y necesita
mantener un inventario que le permita llevar un control mínimo de cuáles
herramientas tiene, cuántas tiene y el costo de cada una. Escriba un programa
que:
a.- le permita listar todas sus herramientas
b.- le permita introducir nuevas herramientas.
c.- le permita actualizar la información de la cantidad de una herramienta en
particular.
Almacene la información en un archivo identificado como “inventario.txt” y
considere que el mismo tiene la siguiente información inicialmente:
Ilustración 13 Inventario
Como ya dijimos antes una CPU (Centrol Processor Unit) está conformada por
tres sub-sistemas fundamentales: la ALU (Arithmetic Logic Unit, Unidad Aritmética
y Lógica), la CU (Control Unit, Unidad de Control) y el Register Set (también
denominado Register Bank) ó sea Conjunto (o Banco) de Registros.
Ciclo de Instrucción
Se denomina ciclo de instrucción a la secuencia de acciones que realiza la CPU
(más específicamente la Unidad de Control) para lograr ejecutar una instrucción
del programa almacenado en memoria.
Notemos que no todas las instrucciones requieren de todos los pasos indicados
para su ejecución. Por ejemplo las instrucciones que tienen sus operandos en
registros, no requieren del paso “read”, mientras que las que no guardan un
resultado no requieren del paso “write”.
- A3, A2, A1, A0: seleccionan un registro y conectan su salida al bus A (ej:
0000/PC, 0001/AC, 0010/SP, 0010/IR, 0100/TIR, 0101/0, 0110/+1, 0111/-1,
1000/AMASK, 1001/SMASK, 1010/A, 1011/B … 1111/F)
- B3, B2, B1, B0: seleccionan un registro y conectan su salida al bus B (ej: idem a
la codificación para A) - C3, C2, C1, C0: seleccionan un registro y conectan su
entrada al bus C (ej: idem a la codificación para A)
- ENC: habilita el bus C para que se guarde el valor en el registro seleccionado
- X0: selecciona si conecta a su salida la entrada que viene desde el MBR o desde
el bus A (ej: 0 – MBR, 1 – Bus A)
- F1, F0: codifican la operación a realizar por la ALU (ej: 00 – A+B, 01 – A and B,
10 – A, 11 – not A)
- S1, S0: codifican la operación de desplazamiento (ej: 00 – no desplaza, 01 – un
bit a la derecha, 10 – un bit a la izquierda)
- L1, L0: controlan la carga de los registros intermedios del bus B y el bus A
respectivamente.
- M0: controla la carga en el MAR (ej: 1 – carga)
- M1, M2, M3: controlan la forma que se cargan los datos en el MBR, cuando y
desde donde se produce. M1 activa la carga (ej: 1 – carga). M2 es la señal de
lectura de memoria RD (ej: 1 – lee la memoria). M3 es la señal de escritura de
memoria (eg: 1 – escribe la memorias).
Veamos como manejaría la Unidad de Control estas señales de control para lograr
ejecutar el ciclo de instrucción. Consideremos el ejemplo en el que se va a
ejecutar una suma entre un operando en memoria y el acumulador, con modo de
direccionamiento directo (la dirección está en los últimos 12 bits de la instrucción).
El primer paso es el fetch. Para leer la instrucción de memoria se debe cargar el
contenido del registro PC en el MAR, realizar una operación de lectura desde
memoria y se debe conectar el bus de datos con el registro IR, de forma de cargar
en él la instrucción. Para ello hay que:
La forma de generar estas señales de control, que serían distintas en cada paso
de programa, puede hacerse mediante un código único para cada posible conjunto
de señales, y añadir entonces al hardware de propósito general un segmento que
acepte estos códigos y genere las señales de control adecuadas. Estos códigos
son básicamente las instrucciones que acepta el hardware, y el conjunto de estas
instrucciones sería el software del sistema.
instrucciones constituyen la CPU del sistema. La necesidad de introducir los datos
y almacenar o visualizar los resultados nos llevan a la necesidad de un sistema de
E/S. Por último, debido a que los programas necesitan acceder a datos, se
necesita una memoria que almacene la información y a la que se pueda acceder
en cualquier posición. Así pues, desde un punto de vista de máxima abstracción,
un computador consiste en una CPU, memoria y componentes de E/S, con uno o
más módulos de cada tipo. Estos componentes se interconectan de alguna forma
para obtener la función básica del computador, que es ejecutar programas. Un
microprocesador es básicamente una ALU y una unidad de control integrada en el
mismo chip. Un microcomputador combina un microprocesador con memoria y
unidades de entrada/salida de datos. En la figura se muestra la evolución de los
µP.
Existen principalmente tres tipos: CISC (Complex Instruction Set Computer), RISC
(Reduced Instruction Set Computer) y SISC (Simple Instruction Set Computing).
El lenguaje máquina
El lenguaje máquina está construido a partir de los estados discretos o
instrucciones. En la arquitectura de procesamiento, una instrucción dada puede
especificar muy bien:
Las operaciones más complejas se construyen a partir de estas, que (en una
máquina Von Neumann) se ejecutan secuencialmente, o según el control de flujo.
Desplazamiento.
Establecer un registro a un valor constante.
Mover datos desde una posición de memoria a un registro y viceversa. Esto se
realiza para obtener datos para operaciones matemáticas y su almacenamiento.
Leer y escribir datos desde dispositivos de hardware.
Operaciones matemáticas.
Sumar, restar, multiplicar o dividir dos registros y colocar el resultado en alguno de
ellos.
Realizar operaciones bit a bit, teniendo el AND y el OR de cada bit en un par de
registros, o el NOT de cada bit en un registro.
Comparar dos valores que se encuentren en registros(por ejemplo, si son iguales
o si uno es mayor que otro).
Afectan al flujo de programa.
Saltar a otra posición del programa y ejecutar instrucciones allí.
Saltar a otra posición si se cumple cierta condición.
Saltar a otra posición, pero salvando la posición actual para poder volver (realizar
una llamada, por ejemplo call printf).
Algunas computadoras incluyen instrucciones "complejas". Dichas instrucciones
pueden tomar muchas instrucciones en otros equipos. Estas se caracterizan por
instrucciones que necesitan varios pasos, como el control de múltiples unidades
funcionales.
Las computadoras mínimas del conjunto de instrucciones (MISC) son una forma
de máquina apilada, donde hay pocas instrucciones separadas (16-64), para
poder caber instrucciones múltiples en una sola palabra de máquina. Estos tipos
de núcleos llevan a menudo poco silicio para implementarse, así que pueden ser
observadas fácilmente en un FPGA o en una forma multinúcleo. La densidad del
código es similar al RISC; la densidad creciente de la instrucción es compensada
requiriendo más de las instrucciones primitivas de hacer una tarea.
Número de operando
Características deseables
Completo: que se pueda realizar en un tiempo finito cualquier tarea ejecutable con
un ordenador (computable o decidible).
Eficiente: que permita alta velocidad de cálculo sin exigir una elevada complejidad
en su UC y ALU y sin consumir excesivos recursos (memoria), es decir, debe
cumplir su tarea en un tiempo razonable minimizando el uso de los recursos.
Autocontenidas: esto es, que contengan en sí mismas toda la información
necesaria para ejecutarse.
Independientes: que no dependan de la ejecución de alguna otra instrucción.
Se puede comprobar que para que un conjunto de instrucciones sea completo solo
se necesitan cuatro instrucciones:
Escritura.
Mover a la izquierda una posición y leer.
Mover a la derecha una posición y leer.
Parar.
En esta idea se basan las arquitecturas RISC, no obstante, con este conjunto no
se puede conseguir la eficiencia del repertorio de instrucciones por lo que en la
práctica el conjunto suele ser más amplio en aras de conseguir un mejor
rendimiento, tanto en uso de recursos como en consumo de tiempo.
registro a registro.
registro a memoria.
memoria a registro.
memoria a memoria.
Nemotécnicos más frecuentes
move copia el contenido de un registro (o memoria) a otro.
store copia el contenido de un registro a memoria.
load copia el contenido de una posición de memoria a un registro.
move block copia un bloque de datos de una posición de memoria a otra.
move multiple copia del origen en varias posiciones de memoria.
exchange intercambia el contenido de dos operandos.
clear pone a 0 el destinto (todos los bits).
set pone a 1 el destino (todos los bits).
push introduce un dato en la cabecera de la pila (indicada por el SP).
pop saca un dato de la cabecera de la pila (indicada por el SP).
Instrucciones aritméticas
Son efectuadas por la ALU y suelen cambiar los flags o indicadores de condición.
Nemotécnicos más frecuentes
add: suma.
add with carry: suma con acarreo.
subtract: resta.
subtract with borrow: resta teniendo en cuenta el adeudo anterior.
increment: incrementa en 1 un valor.
decrement: decrementa en 1 un valor.
multiply: multiplica.
divide: divide.
extend: aumenta el operando de tamaño.
negate: cambia de signo.
absolute: valor absoluto.
Pueden tener instrucciones para tratar con números en BCD e incluyen
operaciones en coma flotante, lo cual se identifica con una 'f' antes del nombre del
nemotécnico como por ejemplo: fabsolute
Instrucciones de comparación
1. salto incondicional
2. salto condicional
3. llamada a subrutinas
4. gestión de las interrupciones
Saltos
Pueden ser condicionales o incondicionales, se suelen especificar
como jump o branch, y en el caso de los condicionales se suele
llamar jcond o bcond, donde cond es una o más letras que indican la condición
que ha de cumplirse para que el salto se produzca.
Incondicional
Salta sin comprobar ninguna condición.
Nemotécnicos más frecuentes: jump o branch.
Condicional
Salta si la condición se cumple.
Nemotécnicos más frecuentes: jcond o bcond.
Llamadas a subrutinas
Invoca la ejecución de funciones anteriormente definidas.
Nemotécnicos más frecuentes: call (llamada) y ret (retorno).
Gestión de interrupciones
Se usan para llamar a las rutinas de servicio de interrupción y esto
se puede hacer por hardware o bien por software. Necesita una
instrucción similar a return para retornar al contexto anterior pero
restableciendo el estado de la máquina, para no afectar a la
aplicación a la cual se interrumpió (iret).
Instrucciones de entrada y salida
Son instrucciones de transferencia salvo que el origen/destino de
dicho flujo es un puerto de un dispositivo de entrada y salida. Estas
instrucciones pueden darse mediante dos alternativas:
Segmentación de instrucciones
Número de pasos
1. Lectura de instrucción
2. Decodificación de instrucción y lectura de registro
3. Ejecución
4. Acceso a memoria
5. Escritura de vuelta en el registro
Peligros
El modelo de la ejecución secuencial asume que cada instrucción se completa
antes de que comience la siguiente; esta suposición no es cierta en el caso de un
procesador segmentado. Una situación donde el resultado esperado es
problemático se denomina peligro. Imaginemos las siguientes dos instrucciones
actuando sobre los registros de un procesador hipotético:
Medidas cautelares
Soluciones
Los procesadores segmentados suelen utilizar tres técnicas para funcionar como
se espera de ellos cuando el programador da por sentado que cada instrucción se
completa antes de que comience la siguiente:
Ramas
Programas auto-modificables
Instrucciones no interrumpibles
Economía
Al simplificar cada uno de los pasos, la segmentación puede hacer posibles las
operaciones complejas de forma más económica que añadiendo circuitería
compleja, por ejemplo para los cálculos numéricos. Por otra parte, un procesador
que rehúsa perseguir un aumento en la velocidad recurriendo a la segmentación
puede ser más sencillo y barato de fabricar.
Predecibilidad
En comparación con entornos donde el programador tiene que evitar los peligros o
buscar la forma de soslayarlos, el uso de un procesador no segmentado puede
hacer más fácil la programación y la propia tarea de formar a los programadores.
El procesador no segmentado también hace más fácil predecir la sincronización
exacta de una secuencia determinada de instrucciones.
Consideraciones de diseño
Velocidad
La segmentación tiene ocupadas todas las partes que conforman el procesador e
incrementa la cantidad de trabajo útil que éste puede realizar en un determinado
espacio de tiempo. Lo habitual es que la segmentación reduzca el tiempo de los
ciclos del procesador e incremente la tasa de transferencia efectiva de
instrucciones. Las ventajas en cuanto a velocidad disminuyen cuando la ejecución
se encuentra con peligros que requieren que ésta reduzca su velocidad por debajo
de la tasa ideal. Un procesador no segmentado sólo ejecuta una instrucción cada
vez. El comienzo de la siguiente instrucción no se retrasa por la aparición de
peligros, sino incondicionalmente.
La necesidad de un procesador segmentado de organizar todo su trabajo en
pasos modulares puede requerir la duplicación de registros, lo cual incrementa la
latencia de algunas instrucciones.
Economía
Al simplificar cada uno de los pasos, la segmentación puede hacer posibles las
operaciones complejas de forma más económica que añadiendo circuitería
compleja, por ejemplo para los cálculos numéricos. Por otra parte, un procesador
que rehúsa perseguir un aumento en la velocidad recurriendo a la segmentación
puede ser más sencillo y barato de fabricar.
Predecibilidad
En comparación con entornos donde el programador tiene que evitar los peligros o
buscar la forma de soslayarlos, el uso de un procesador no segmentado puede
hacer más fácil la programación y la propia tarea de formar a los programadores.
El procesador no segmentado también hace más fácil predecir la sincronización
exacta de una secuencia determinada de instrucciones.
Ejemplo ilustrado
A la derecha tenemos una segmentación genérica con cuatro etapas: lectura,
decodificación, ejecución y escritura. La caja gris de la parte de arriba es la lista de
instrucciones que esperan a ser ejecutadas, la caja gris de abajo es la lista de
instrucciones que han completado su ejecución, y finalmente la caja blanca central
es la segmentación en sí.
Burbuja en la segmentación
Ciclo de instrucción
2. Decodificar la instrucción
3. Ejecutar la instrucción
El ciclo de búsqueda
Los pasos 1 y 2 del ciclo de instrucción se conocen como ciclo de
búsqueda. El ciclo de búsqueda procesa la instrucción a partir de la
palabra de instrucción, que contiene el código de operación y el
operando.
El ciclo de ejecución
Los pasos 3 y 4 del ciclo de instrucción se conocen como ciclo de
ejecución. Estos pasos cambiarán con cada tipo de instrucción.
Hardware ‘a medida’
Códigos de Instrucción
Intérprete de Instrucciones
Señales de Control
La forma de generar estas señales de control, que serían distintas en cada paso
de programa, puede hacerse mediante un código único para cada posible conjunto
de señales, y añadir entonces al hardware de propósito general un segmento que
acepte estos códigos y genere las señales de control adecuadas. Estos códigos
son básicamente las instrucciones que acepta el hardware, y el conjunto de estas
instrucciones sería el software del sistema.
Estructuras de Interconexión
ESTRUCTURA DE BUS
Se denomina 'bus del sistema' al bus que conecta los componentes principales
del computador (CPU, Memoria e E/S). Un bus del sistema consiste generalmente
de 50 a 200 líneas independientes. Estas líneas están clasificadas en tres grupos
funcionales: datos, direcciones y control. Además se dispone del bus de
alimentación para cada módulo.
El bus de direcciones determina la fuente o destino de los datos del bus de datos.
La anchura del bus de direcciones determina la capacidad máxima de memoria
del sistema. Además, las líneas de este bus se utilizan también para direccionar
los módulos E/S. Generalmente, los bits más significativos se utilizan para
seleccionar un módulo particular del bus y los menos significativos seleccionan
una posición concreta de memoria o un puerto dentro del módulo seleccionado.
BUS DIRECCIONES
BUS DATOS
BUS CONTROL
E/S
Comienzo
Búsqueda
Ciclo Búsqueda Siguiente
Instrucción
Ejecución
Ciclo Ejecución Instrucción
HALT
Acceso
CPU a BI BO AR
Memoria
o E/S
Operandos Múltiples
Múltiples Resultados
Operación
Interna CDI DCO CDO EO CDR
CPU
Siguiente Instrucción
FIGURA 1.4. Diagrama de estados del ciclo de instrucción.
CICLO DE INTERRUPCION.
BI BO AR
Operandos Múltiples
Múltiples Resultados
Test
CDI DCO CDO EO CDR INT
NO SI
INT
Siguiente Instrucción
Bus interno
Bus control
UNIDAD
Señales control CONTROL Señales control
Organización de Registros.
Un registro visible para el usuario es aquél que puede referenciarse por medio del
lenguaje máquina que la CPU ejecuta. Se pueden caracterizar en las siguientes
categorías:
• Propósito general.
• Datos.
• Direcciones.
• Códigos condicionales.
Los registros de códigos de condición o estado contienen flags que son activados
por la CPU como resultado de operaciones. El código puede ser testado
posteriormente para operaciones de salto condicional. En general, pueden ser
leídos, pero no modificados directamente por el programador. Todas las CPU
incluyen uno o varios de este tipo de registros, conocidos como 'palabra de estado
de programa (PSW)'. Los indicadores más usuales son:
BANCO
REGISTROS
OPERADOR
Acumulado r
ESTADO
Conjunto de Instrucciones
La operación de la CPU está determinada por las instrucciones que ejecuta, que
suelen denominarse instrucciones máquina. Puesto que la CPU implementa
distintas funciones, éstas se reflejan en distintos tipos de instrucciones. El
conjunto de las diferentes instrucciones que puede ejecutar una CPU se denomina
conjunto de instrucciones.
4b 6b 6b
Tipos de operación
Direccionamiento
COP R Direc.
Memoria
Operando
Registros
7) Desplazamiento
Microoperaciones
La ejecución de un programa consiste en la ejecución secuencial de
instrucciones. Cada instrucción se ejecuta durante un ciclo de instrucción, que
está constituido por subciclos más cortos (búsqueda operación, búsqueda
indirecta, ejecución, interrupción. Las características de cada subciclo implican
una o más operaciones menores, denominadas microoperaciones.
EJECUCION
PROGRAMA
µ OP µ OP µ OP µ OP µ OP µ OP
PC
IR
1) Comienzo 3) 2° estado
PC
IR
2) 1er estado 4) 3er estado
PC ← (PC)+1
t3: IR ← (MBR)
Estamos suponiendo que el reloj del sistema emite pulsos de igual duración que
definen unidades de tiempo. Cada microoperación deberá realizarse en una
unidad de tiempo. La notación ti representa sucesivas unidades de tiempo.
Control de la CPU
SEÑALES DE CONTROL.
Para realizar sus funciones, la unidad de control debe disponer de entradas que
le permitan determinar el estado del sistema, y salidas que le permitan controlar
su comportamiento. Esto constituye las especificaciones externas de la unidad de
control. Internamente debe disponer de la lógica requerida para realizar las
funciones de secuenciación y ejecución.
Registro Instrucciones
Señales Control
Bus Interno CPU
Flags
UNIDAD
CONTROL
Señales Control
Reloj Bus Sistema
Bus Control
Externo
Figura 1.13. Modelo de unidad de control.
• Implementación cableada.
• Implementación microprogramada.
No obstante, utilizar una palabra de control de este tipo podría dar problemas
cuando la secuencia de microoperaciones no coincide entre instrucciones
diferentes (por ejemplo, a veces se necesita un ciclo indirecto y a veces no).
Podemos aproximarnos a la solución almacenando las palabras de control en una
memoria en la que cada palabra tenga una única dirección. De esta manera, se
puede añadir un campo de dirección a cada palabra de control que indique dónde
se almacena la siguiente palabra de control a ejecutar si se cumplen determinadas
condiciones y algunos bits para especificar la condición.
En este caso el resultado es óptimo desde el punto de vista de la velocidad de los
circuitos, pero tiene poca flexibilidad ya que cualquier cambio en el diseño del set
de instrucciones de la CPU genera la necesidad de re-escribir el diagrama de
estados y, por ende, cambiar todo el circuito lógico que lo implementa. En cambio
la filosofía de “lógica microprogramada” propone que la CU se construya en base
a un autómata más sencillo que “ejecute” el ciclo de instrucción de cada
instrucción de la CPU siguiendo en secuencia un conjunto de “microinstrucciones”
que contienen los valores de las señales apropiados para esa instrucción
particular. Es decir que para cada instrucción a nivel de la CPU existirá un
“microprograma”, consistente en una secuencia lógica de microinstrucciones que
establecerán el orden de los eventos necesarios para lograr la ejecución de la
instrucción en la CPU, incluyendo todas las “bifurcaciones” de la secuencia que se
requieran en base a los distintos tipos de direccionamiento y cualquier otra
variante que admita la instrucción específica. En este caso hay una penalización
en la velocidad de proceso porque el microprograma se almacena en una ROM
interna de la CPU y cada microinstrucción debe ser leída de ella, pero simplifica
enormemente la tarea de modificar el set de instrucciones, ya que simplemente
alcanza con cambiar el contenido de la ROM del microprograma. También las
máquinas microprogramadas permiten fácilmente implementar instrucciones
complejas, tales como la búsqueda de un elemento en un array, ó la copia o la
comparación de arrays, etc.
La tendencia en materia de diseño de CPUs era, hasta la década de 1980, utilizar
lógica microprogramada. La aparición de las arquitecturas RISCs puso en cuestión
esa tendencia, ya que dichas propuestas promovían el uso de lógica cableada, en
particular asociado al concepto de optimizar la velocidad de proceso. De todos
modos es probable que la ventaja que esos diseños obtuvieron en materia de
rendimiento se deba principalmente al uso óptimo de técnicas tales como el
“pipelining” permitido por las características de su set de instrucciones. El punto es
que si se usa un set “reducido” con fines de optimización, también resulta más
sencillo implementar la CPU en “lógica cableada”.
La forma de generar estas señales de control, que serían distintas en cada paso
de programa, puede hacerse mediante un código único para cada posible conjunto
de señales, y añadir entonces al hardware de propósito general un segmento que
acepte estos códigos y genere las señales de control adecuadas. Estos códigos
son básicamente las instrucciones que acepta el hardware, y el conjunto de estas
instrucciones sería el software del sistema.
El resultado de esto se conoce como microinstrucción horizontal. Tiene un bit
para cada línea de control interna de la CPU y un bit para cada línea del bus de
control externo. Hay un campo de condición que indica la condición para la que se
producirá el salto, y otro campo con la dirección de la siguiente instrucción a
ejecutar en este caso. La microinstrucción se interpretará de la siguiente forma:
1. Para ejecutarla, poner a estado alto todas las líneas de control cuyo bit
representativo esté a '1', y a bajo las que estén a '0'. Las señales resultantes
pueden realizar una o más microoperaciones.
a) Microinstrucción horizontal
Códigos función
b) Microinstrucción vertical
•
• Rutina Ciclo
• Búsqueda
Salto a Indirecto o Ejecución
•
•
Rutina Ciclo
•
Indirecto
Salto a Ejecución
•
•
•
Rutina Ciclo
Salto a Búsqueda Interrupción
Salto a rutina de Código de Operación
• •
• •
• •
•
•
•
Salto a Búsqueda o Interrupción
Rutina última
Instrucción
Lectura
MEMORIA
CONTROL
Registro Instrucciones
UNIDAD
CONTROL Decodificador
F lags
ALU Lógica Registro Direcciones Control
Secuenciamiento
Reloj
Lectura
MEMORIA
CONTROL
Decodificador
Eliminar
1 2 3 4 5 6 7 8 9 tiempo
FI DI CO FO EI
Instrucc.
1 FI DI CO FO EI
FI DI CO FO EI
Instrucc.
2
Instrucc. 3
No todos los procesadores tienen registros internos designados como MAR o MBR
pero se necesita algún mecanismo de almacenamiento intermedio equivalente
mediante el cual se de salida a los bits que van a ser transferidos por el bus de
sistema se almacenen los bits leídos por el bus de datos.
El ciclo de instrucción
Un ciclo de instrucción incluye los siguientes subciclos:
El Ciclo Indirecto
La ejecución de una instrucción puede involucrar a uno o más operandos en
memoria, cada uno de los cuales requiere un acceso a memoria. Además, si se
usa direccionamiento indirecto serán necesarios accesos a memoria adicionales.
Podemos considerar la captación de direcciones indirectas como un subciclo de
instrucción más. El resultado se muestra en la Figura La principal línea de
actividad consiste en alternar las actividades de captación y ejecución de
instrucciones. Después de que una instrucción sea captada, es examinada para
determinar si incluye algún direccionamiento indirecto. Si es así, los operandos
requeridos se captan usando direccionamiento indirecto. Tras la ejecución se
puede procesar una interrupción antes de la captación de la siguiente instrucción.
Esta nueva figura ilustra más correctamente la naturaleza del ciclo de instrucción.
Una vez que una instrucción es captada, deben identificarse sus campos de
operandos. Se capta entonces de la memoria cada operando de entrada, y este
proceso puede requerir direccionamiento indirecto. Los operandos ubicados en
registros no necesitan ser captados. Una vez que se ejecuta la operación, puede
ser necesario un proceso similar para almacenar el resultado en la memoria
principal.
Ciclo Fetch-Decode-Execute
FASE FETCH
Cargar la siguiente instrucción
Incrementar el secuenciador
Interpretar la Instrucción
FASE EXECUTE
Cargar los operandos
Ejecutar la operación
Guardar el resultado
Verificar si hay solicitudes de interrupción
Elementos Para Construir El CPU.
En esta idea se basan las arquitecturas RISC, no obstante, con este conjunto no
se puede conseguir la eficiencia del repertorio de instrucciones por lo que en la
práctica el conjunto suele ser más amplio en aras de conseguir un mejor
rendimiento, tanto en uso de recursos como en consumo de tiempo.
Modos de Direccionamiento.
EL CICLO DE INSTRUCCIÓN
El ciclo de instrucción.
Es el período que tarda la unidad central de proceso (CPU) en ejecutar una
instrucción de lenguaje máquina.
Comprende una secuencia de acciones determinada que debe llevar a cabo
la CPU.
para ejecutar cada instrucción en un programa.
Cada instrucción del juego de instruccionesde una CPU.
Puede requerir diferente número de ciclos de instrucción para su ejecución.
El Ciclo Indirecto
La ejecución de una instrucción puede involucrar a uno o más operandos en
memoria, cada uno de los cuales requiere un acceso a memoria. Además, si se
usa direccionamiento indirecto serán necesarios accesos a memoria adicionales.
Podemos considerar la captación de direcciones indirectas como un subciclo de
instrucción más.La principal línea de actividad consiste en alternar las actividades
de captación y ejecución de instrucciones. Después de que una instrucción sea
captada, es examinada para determinar si incluye algún direccionamiento
indirecto. Si es así, los operandos requeridos se captan usando direccionamiento
indirecto. Tras la ejecución se puede procesar una interrupción antes de la
captación de la siguiente instrucción.
Los pasos a seguir para el procesamiento de las instrucciones son los siguientes:
Ciclo de instrucción:
Un ciclo de instrucción (tambien llamado ciclo de traer y ejecutar) es el período de
tiempo durante el cual un ordenador lee y procesa una instrucción de lenguaje
máquina de su memoria o la secuencia de acciones que la unidad central (CPU)
funciona para ejecutar cada instrucción de código de máquina en un programa.
El nombre el ciclo traer-y-ejecutar comúnmente es usado.La instrucción debe ser
traída de la memoria principal, y luego ejecutado por la CPU.Esto es
fundamentalmente como un ordenador funciona, con su lectura de CPU y
ejecución de una serie de instrucciones escritas en su lenguaje máquina.De esto
surgen todas las funciones de un ordenador familiar a partir del final del usuario.
La CPU de cada ordenador puede tener ciclos diferentes basados en juegos de
instrucción diferentes.
Para traer la instruccion desde la memoria principal la CPU presenta el valor de la
PC sobre el bus de dirección.La CPU entonces trae la instrucción de la memoria
principal vía el bus de datos en el Registro de Datos de Memoria (MDR).El valor
del MDR entonces es colocado en el Registro de Instrucción Actual un circuito que
sostiene la instrucción de modo que pueda ser descifrado y ejecutado.
Ciclo de instrucción:
Del registro de instrucción, los datos que forman la instrucción son descifrados por
la unidad de control.
Pasa la información descifrada como una secuencia de señales de control a las
unidades de función relevantes de la CPU para realizar las acciones requeridas
por la instrucción como la lectura de valores de registros.
Los valores de registro pasan a la Unidad Aritmética lógica (ALU) para añadirlos
juntos y escribiendo el resultado de vuelta al registro. Una señal de condición es
enviada de regreso a la unidad de control por ALU si está implicado.
El resultado generado por la operación es almacenado en la memoria principal, o
enviado a un dispositivo de salida. Basado en la regeneración de condición del
ALU, la PC es incrementada para dirigir la siguiente instrucción o para actualizar a
diferentes direcciones de donde será traída la siguiente instrucción. El ciclo
entonces es repetido.
Ciclo de ejecución:
Proceso de memoria. La informacion es tranferida entre el CPU y el modulo I/O.
Proceso de datos usa operaciones matemáticas así como operaciones lógicas en
la referencia a datos.Alteraciones centrales
Una secuencia de operaciones, por ejemplo un salto la operación.
El último paso es una operación combinada de todos los otros pasos.
Búsqueda de cop. Op
Lectura de MEMORIA
Escritura a MEMORIA
Lectura de E/S
Escritura a E/S
Respuesta a interrupción
Bus inactivo
La función básica que realiza un computador es la ejecución de un programa. Un
programa consiste en un conjunto de instrucciones y datos almacenados en la
unidad de memoria. La CPU es la encargada de ejecutar las instrucciones
especificadas en el programa.
La culminación de cada una de estas fases necesita de una a seis ciclos de reloj.
EXECUTION
Durante una operación normal, el procesador busca secuencialmente y ejecuta
una instrucción tras otra, hasta que se procesa una instrucción (HALT) de paro. La
búsqueda y ejecución de una instrucción constituyes el ciclo de instrucción, que
representa a su vez una o más operaciones de acceso a memoria o a dispositivos
de E/S. cada acceso a memoria requiere un ciclo de máquina.
EJEMPLOS DE CILOS EN MAQUINAS
Para completar una instrucción la CPU de codifica el opcode, que genera las
señales de control que se necesitan para introducir los operadnos requeridos y
controla la ejecución de la instrucción.
CONJUNTO DE INSTRUCCIONES
Un conjunto de instrucciones o repertorio de instrucciones, juego de instrucciones
o ISA (del inglés Instruction Set Architecture, Arquitectura del Conjunto de
Instrucciones) es una especificación que detalla las instrucciones que una CPU de
un ordenador puede entender y ejecutar, o el conjunto de todos los comandos
implementados por un diseño particular de una CPU. El término describe los
aspectos del procesador generalmente visibles a un programador, incluyendo los
tipos de datos nativos, las instrucciones, los registros, la arquitectura de memoria y
las interrupciones, entre otros aspectos.
Tipos de instrucciones
Una máquina puede llegar a funcionar con un juego de instrucciones muy limitado
(recuérdese, por ejemplo, la máquina de Turing que sólo tiene 4 instrucciones,
incluso se han diseñado máquinas teóricas con menos instrucciones), esto
simplificaría mucho los circuitos de la máquina. Sin embargo, un conjunto de
instrucciones demasiado simplificado origina, como consecuencia, unos
programas demasiado complejos e ineficientes. Es necesario encontrar un
compromiso entre la simplicidad del hardware y del software. Un mínimo para
llegar a ese compromiso se consigue con los tipos de instrucciones siguientes:
Instrucciones de transferencia de datos.
Instrucciones aritméticas.
Instrucciones lógicas.
Instrucciones de control del flujo del programa (bifurcaciones, bucles,
procedimientos, etc.)
Instrucciones de entrada y salida.
Dirección
Tipo
Valor
Para aplicarlas, se realiza una operación AND del dato que se quiere analizar con
una máscara que tenga un 1 en el lugar cuyo bit se quiere probar con el resto de
la máscara a 0. El resultado de la operación será 0 si el bit en cuestión es 0, o
distinto de 0 si el bit que se quiere probar es 1; por tanto, el resultado de la prueba
quedará en el flag Z en forma complementada como se muestra en la figura 4.1.
Muchas máquinas tienen esta operación bajo el nombre de BIT TEST. Para poner
a 0 un bit de un dato, se aprovechan las mismas propiedades del operador AND.
Para aplicarlas, se construye una máscara que tenga a 1 todos los bits excepto el
correspondiente al lugar que se quiere borrar que se pone a 0 y se hace un AND
de esta máscara con el dato que se quiere tratar; como resultado de la operación
tendremos el mismo dato pero con el bit puesto a cero. El proceso se muestra en
la figura 4.2. Esta operación puede realizarse con varios bits a la vez, basta poner
en la máscara 0 todos los bits que se quieran borrar. Muchos ordenadores poseen
esta instrucción con el nombre de BIT CLEAR o BIT RESET. Para poner un bit a 1
en un dato, aplicaremos las propiedades de la operación OR (+ o ∨):
0 ∨ x = x, ∀x 1 ∨ x = 1, ∀x
En este caso, se construye una máscara con un 1 en el lugar del bit que se quiera
poner a
1 y 0 en el resto. Se realiza la operación OR entre esta máscara y el dato y el
resultado será el
mismo dato pero con el bit en cuestión puesto a 1 (figura 4.3). Esta operación
puede realizarse
con varios bits a la vez poniendo a 1 en la máscara todos los bits que se quieran
poner a 1.
Muchos ordenadores tienen esta operación con el nombre de BIT SET.
Para complementar bits en un dato aplicaremos las propiedades de la operación
OR exclusivo o XOR (⊕):
0 ⊕ x = x, ∀x 1 ⊕ x = x, ∀x
Para ello se construye una máscara con un 1 en el bit que se quiere complementar
y 0 en el resto de las posiciones. Después de hacer un XOR de la máscara con el
dato se tendrá el mismo dato con el bit complementado (figura 4.4). Esta
operación también se puede hacer con varios bits a la vez poniendo a 1 en la
máscara todos los bits que se quieran complementar. Algunas máquinas tienen
esta operación en su juego de instrucciones como BIT CHANGE.
Otra utilidad de la operación XOR es la determinación de los bits diferentes que
hay entre dos datos, para ello se hace un XOR entre ellos y los lugares que
queden a 1 son los bits diferentes entre los dos datos. Esto es debido a que la
tabla de verdad de XOR es la complementaria a la de la igualdad entre dos bits.
Esta propiedad también es útil para determinar cuándo dos datos son iguales en
todos sus bits: en este caso el OR exclusivo entre ellos nos dará 0 y, en caso
contrario, tendremos un número no nulo; este resultado puede luego ser analizado
mediante el flag Z. De aquí también se puede deducir que haciendo la operación
XOR de un operando consigo mismo el resultado da 0. Esta es una forma muy
rápida de poner a 0 los registros en algunos procesadores. Otra propiedad muy útil
del operador XOR es que si se opera dos veces con el mismo operando se
regenera el dato inicial, es decir, (x ⊕ y) ⊕ y = x, ∀x, y
Esta propiedad es útil en aplicaciones gráficas para mover cursores por pantalla.
Una utilidad directa de las operaciones lógicas es el manejo de conjuntos tal y
como se hace en el lenguaje Pascal. Supongamos el conjunto universal, U = {x0,
x1, x2,...,xn−1} Si A es un conjunto, contenido en este conjunto universal, puede
representarse internamente en la memoria de la máquina mediante la cadena de n
bits an−1an−2 ...a1a0
en que el valor del bit i indicará la pertenencia del elemento xi al conjunto A. En
otras palabras, ai = ⎧ ⎪⎨ ⎪⎩ 1 si xi ∈ A 0 si xi ∈/ A
A partir de lo anterior resulta bastante evidente que la unión e intersección de dos
conjuntos vendrá representada respectivamente por las operaciones OR y AND
sobre sus cadenas de bits. De la misma forma el complemento de un conjunto se
representa mediante la negación de la cadena de bits que le corresponde.
Mediante esta técnica puede determinarse:
La igualdad de dos conjuntos, analizando si sus cadenas de bits son iguales. La
pertenencia de un elemento x a un conjunto A, realizando un test del bit
correspondiente a x en la cadena de bits que representa al conjunto A. Si un
conjunto es vacío, analizando si su cadena de bits es nula. La inclusión de un
conjunto A en otro B; esto podría hacerse analizando en un bucle si todos los bits
activados en la cadena correspondiente a A también lo están en la cadena que
corresponde a B. Esto sería algo complicado en cuanto a la programación y
llevaría un tiempo de cálculo desproporcionado. Sin embargo, se puede realizar la
misma comprobación de una forma más simple aplicando alguna de las tres
propiedades siguientes: A ⊂ B ⇔ A ∪ B = B, A ⊂ B ⇔ A ∩ B = AoA ⊂ B ⇔ A ∩ B
=∅
Evidentemente, comprobar cualquiera de estas propiedades se reduce a una
operación lógica y una comparación, lo que resulta mucho más simple que el
procedimiento anterior. Curiosamente, la tarea de inicializar la cadena de bits
correspondiente a un conjunto es más complicada que las operaciones sobre los
conjuntos y depende de cada caso. Normalmente hay que construir una máscara
individualizada para cada elemento con el fin de poner a 1 los bits que
correspondan en la cadena. Dentro de las operaciones lógicas también deben
considerarse los desplazamientos, que pueden definirse mediante la expresión
di ← di+k
donde di representa a cada uno de los bits del operando y k es el número de
lugares que se desplaza. En función del signo de k, el desplazamiento puede ser a
la izquierda (k negativo) o a la derecha (k positivo), donde se está suponiendo que
los bits se numeran de derecha a izquierda. Los desplazamientos pueden ser de
tres tipos: lógicos, aritméticos y rotaciones o desplazamientos circulares
dependiendo del bit entrante. El desplazamiento lógico a la derecha difiere del
aritmético en que el bit entrante es, en éste último, el mismo bit de mayor peso (bit
de signo), mientras que en aquél es siempre un 0; Así se consigue que los
desplazamientos aritméticos sean equivalentes a multiplicaciones (izquierda) y
divisiones (derecha) por 2. En las rotaciones el valor del bit entrante es el mismo
que el del saliente.
V = SR S1 S2 + SR S1 S
Ilustración 29 Tabla de verdad de la suma para el bit de signo
Iteracione
Procedimiento
Ilustración 31Flujo de instrucciones en una llamada a procedimiento (a) y entre corrutinas (b).
Ilustración 32 Corrutinas.
Corrutinas
En la secuencia ordinaria de llamada a procedimiento la distinción entre el
procedimiento que llama y el llamado es clara. Consideremos el caso de dos
procedimientos que se llamen mutuamente. A primera vista esta situación se
podría considerar simétrica. La asimetría procede del hecho de que, cuando se
pasa el control del procedimiento que llama al procedimiento llamado, éste
comienza a ejecutarse desde el principio; sin embargo, cuando se produce el
retorno, la ejecución del procedimiento que hizo la llamada sigue en la instrucción
siguiente. Si se llamara más veces al procedimiento, éste comenzaría a ejecutarse
nuevamente desde el principio (situación mostrada en la figura (a)). La asimetría
se acentúa si analizamos el proceso llevado a cabo a nivel máquina: en el
momento de la llamada el valor del contador de programa pasa a la pila y cuando
el procedimiento retorna el proceso es justamente el contrario; además las
instrucciones que realizan ambas funciones son distintas. En algunas ocasiones
es útil tener dos procedimientos que se llamen el uno al otro como un
procedimiento (sin retorno) sin comenzar la ejecución desde el principio (figura
(b)). Dos procedimientos que llamen uno a otro de esta forma se denominan
corrutinas (figura). La forma de llevar a cabo en la práctica una llamada a una
corrutina es intercambiar los contenidos del contador de programa y de la cima de
pila, sin variar el apuntador de pila, ya que se saca un dato de la pila para meter
otro; de esta forma se intercambia el control entre las dos rutinas.
El Ciclo Indirecto
La ejecución de una instrucción puede involucrar a uno o más operandos en
memoria, cada uno de los cuales requiere un acceso a memoria. Además, si se
usa direccionamiento indirecto serán necesarios accesos a memoria adicionales.
Podemos considerar la captación de direcciones indirectas como un subciclo de
instrucción más.La principal línea de actividad consiste en alternar las actividades
de captación y ejecución de instrucciones. Después de que una instrucción sea
captada, es examinada para determinar si incluye algún direccionamiento
indirecto. Si es así, los operandos requeridos se captan usando direccionamiento
indirecto. Tras la ejecución se puede procesar una interrupción antes de la
captación de la siguiente instrucción.
Los pasos a seguir para el procesamiento de las instrucciones son los siguientes:
Ciclo de instrucción:
Un ciclo de instrucción (tambien llamado ciclo de traer y ejecutar) es el período de
tiempo durante el cual un ordenador lee y procesa una instrucción de lenguaje
máquina de su memoria o la secuencia de acciones que la unidad central (CPU)
funciona para ejecutar cada instrucción de código de máquina en un programa.
El nombre el ciclo traer-y-ejecutar comúnmente es usado.La instrucción debe ser
traída de la memoria principal, y luego ejecutado por la CPU.Esto es
fundamentalmente como un ordenador funciona, con su lectura de CPU y
ejecución de una serie de instrucciones escritas en su lenguaje máquina.De esto
surgen todas las funciones de un ordenador familiar a partir del final del usuario.
La CPU de cada ordenador puede tener ciclos diferentes basados en juegos de
instrucción diferentes.
Para traer la instruccion desde la memoria principal la CPU presenta el valor de la
PC sobre el bus de dirección.La CPU entonces trae la instrucción de la memoria
principal vía el bus de datos en el Registro de Datos de Memoria (MDR).El valor
del MDR entonces es colocado en el Registro de Instrucción Actual un circuito que
sostiene la instrucción de modo que pueda ser descifrado y ejecutado.
Ciclo de instrucción:
Del registro de instrucción, los datos que forman la instrucción son descifrados por
la unidad de control.
Pasa la información descifrada como una secuencia de señales de control a las
unidades de función relevantes de la CPU para realizar las acciones requeridas
por la instrucción como la lectura de valores de registros.
Los valores de registro pasan a la Unidad Aritmética lógica (ALU) para añadirlos
juntos y escribiendo el resultado de vuelta al registro. Una señal de condición es
enviada de regreso a la unidad de control por ALU si está implicado.
El resultado generado por la operación es almacenado en la memoria principal, o
enviado a un dispositivo de salida. Basado en la regeneración de condición del
ALU, la PC es incrementada para dirigir la siguiente instrucción o para actualizar a
diferentes direcciones de donde será traída la siguiente instrucción. El ciclo
entonces es repetido.
Ciclo de ejecución:
Proceso de memoria. La informacion es tranferida entre el CPU y el modulo I/O.
Proceso de datos usa operaciones matemáticas así como operaciones lógicas en
la referencia a datos.Alteraciones centrales
Una secuencia de operaciones, por ejemplo un salto la operación.
El último paso es una operación combinada de todos los otros pasos.
Búsqueda de cop. Op
Lectura de MEMORIA
Escritura a MEMORIA
Lectura de E/S
Escritura a E/S
Respuesta a interrupción
Bus inactivo
La función básica que realiza un computador es la ejecución de un programa. Un
programa consiste en un conjunto de instrucciones y datos almacenados en la
unidad de memoria. La CPU es la encargada de ejecutar las instrucciones
especificadas en el programa.
La culminación de cada una de estas fases necesita de una a seis ciclos de reloj.
EXECUTION
Durante una operación normal, el procesador busca secuencialmente y ejecuta
una instrucción tras otra, hasta que se procesa una instrucción (HALT) de paro. La
búsqueda y ejecución de una instrucción constituyes el ciclo de instrucción, que
representa a su vez una o más operaciones de acceso a memoria o a dispositivos
de E/S. cada acceso a memoria requiere un ciclo de máquina.
EJEMPLOS DE CILOS EN MAQUINAS
Para completar una instrucción la CPU de codifica el opcode, que genera las
señales de control que se necesitan para introducir los operadnos requeridos y
controla la ejecución de la instrucción.
CONJUNTO DE INSTRUCCIONES
Un conjunto de instrucciones o repertorio de instrucciones, juego de instrucciones
o ISA (del inglés Instruction Set Architecture, Arquitectura del Conjunto de
Instrucciones) es una especificación que detalla las instrucciones que una CPU de
un ordenador puede entender y ejecutar, o el conjunto de todos los comandos
implementados por un diseño particular de una CPU. El término describe los
aspectos del procesador generalmente visibles a un programador, incluyendo los
tipos de datos nativos, las instrucciones, los registros, la arquitectura de memoria y
las interrupciones, entre otros aspectos.
Tipos de instrucciones
Una máquina puede llegar a funcionar con un juego de instrucciones muy limitado
(recuérdese, por ejemplo, la máquina de Turing que sólo tiene 4 instrucciones,
incluso se han diseñado máquinas teóricas con menos instrucciones), esto
simplificaría mucho los circuitos de la máquina. Sin embargo, un conjunto de
instrucciones demasiado simplificado origina, como consecuencia, unos
programas demasiado complejos e ineficientes. Es necesario encontrar un
compromiso entre la simplicidad del hardware y del software. Un mínimo para
llegar a ese compromiso se consigue con los tipos de instrucciones siguientes:
Instrucciones de transferencia de datos.
Instrucciones aritméticas.
Instrucciones lógicas.
Instrucciones de control del flujo del programa (bifurcaciones, bucles,
procedimientos, etc.)
Instrucciones de entrada y salida.
Dirección
Tipo
Valor
d) 0 operandos explícitos
CO
Ilustración 39 Ejemplo2
Ilustración 43Resolucion
Ilustración 44Modos
Conocer en detalles todas las operaciones que son capaces de realizar las CPU.
Los programas son representados por una serie de números que se mantienen en
una memoria del computador.
Glosario
3DNow: Especificaciones multimedia para los procesadores de AMD.
Acceso Directo: Icono especial que representa a una carpeta o un archivo y que
abre o ejecuta ésta de una forma cómoda y rápida.
Acceso telefónico a redes: Aplicación que permite utilizar una línea telefónica y
un módem para conectarse a otro equipo.
ADC: Circuito para convertir la señal analógica en digital, es decir, para digitalizar.
AIX: Versión del sistema operativo UNIX diseñada por IBM para estaciones de
trabajo y grandes sistemas.
Aplicación: Programa que realiza una serie de funciones y con el cual trabajamos
en el ordenador.
Arrastrar: Dícese del movimiento generado por una selección al hacer clic sobre
ella y, sin soltar el botón del ratón, mover ésta hacia otro lugar.
Asistente: Herramienta que nos guía y ayuda a través de varios pasos a realizar
una tarea para mayor comodidad y sencillez.
Athlon: Nombre del último procesador de AMD que puede funcionar a velocidades
que oscilan desde los 500 a 700 MHz
AVI: Formato de vídeo digital por excelencia en el mundo PC, desarrollado por
Microsoft.
Barra de canales: Opción del Escritorio que proporciona una lista de los canales
disponibles en su equipo.
Barra de direcciones: Forma rectangular que aparece en la parte superior de las
ventanas y la cual nos informa en todo momento de la Path (trayectoria) donde
nos encontramos posicionados dentro de una unidad. En Internet es el lugar
donde hay que teclear la dirección de la página Web a la que deseamos acceder
para que el ordenador la cargue y la muestre en pantalla.
Barra de tareas: Forma rectangular gris que aparece nada más cargar Windows
98 en la parte inferior del Escritorio y la cual se divide en zona de control, el botón
Inicio, alguna barra de herramientas y la zona de carga de carpetas y aplicaciones.
Barra del explorador: Panel que se abre en la parte izquierda de las ventanas.
Batch: Fichero de proceso por lotes, es un archivo que encadena comandos que
son realizados por el PC cuando se le invoca.
Beta: Versión anterior a la Alfa y que puede ser la versión definitiva que se
comercializará en un determinado tiempo.
Bit (binary digit): Unidad básica de información representada por ceros y unos
que se van sucediendo para conformar los distintos significados.
BMP (Bitmap): Formato de fichero gráfico por excelencia de los ordenadores PC,
inventado por Microsoft, que tiene mucha calidad y se lee rápidamente. En contra,
no se puede comprimir de ninguna manera y, generalmente, no es reconocido por
ningún ordenador que no sea PC.
Bookmark: Marca, anotación de una dirección Web oURL que queda archivada
para su posterior uso.
Bump mapping: Técnica por la cual se consigue dotar a las texturas de un relieve
simulado.
Bus: Especie de carretera por donde circulan los datos dentro del ordenador
comunicando a los diferentes componentes de la placa base, que dependiendo de
su tamaño harán que un ordenador tenga mayores o menores prestaciones, así
como una mayor o menor capacidad de transferencia del ordenador.
Buscador: Servidor de Internet que organiza los ficheros por grupos temáticos y
que permite la localización de páginas Web mediante unas palabras clave que
introduce el usuario, sin necesidad de conocer las direcciones de las citadas
páginas.
CD-R: Disco compacto sobre el que se puede escribir una sola vez.
Chatear: Función que permite conversar en tiempo real y dentro de Internet entre
personas situadas en distintos puntos del planeta mediante la utilización del
teclado.
Cheat code: Trucos para pasar los distintos niveles o pantallas de los
videojuegos.
Ciberjuegos: Juegos a los que se puede acceder por Internet y que pueden ser
compartidos por los cibernautas.
Bibliografía
https://es.wikipedia.org/wiki/Unidad_central_de_procesamiento
http://decsai.ugr.es/~dpelta/ProgOrdenadores/glosario.html
https://www.monografias.com/trabajos83/unidad-central-procesamiento-
cpu/unidad-central-procesamiento-cpu.shtml#conclusioa
http://itpn.mx/recursosisc/5semestre/arquitecturadecomputadoras/Unidad%20II.pdf
file:///C:/Users/kike/Desktop/cresto/conjunto.pdf