sábado, 31 de agosto de 2013

Organización interna del computador

Todo computador digital consta de cuatro partes bien definidas. Unidad Central de Procesamiento (CPU), Memoria, Periféricos y Buses.
 
 
 
Unidad Central de Procesamiento
 
La CPU es quien crea y controla el flujo de datos, que circula por el computador a partir de las instrucciones recibidas de la memoria, que sirven para indicar las operaciones o tratamiento a realizar sobre los datos recibidos desde el exterior o previamente almacenados en la memoria. La misma consta de dos partes: la Unidad de Control y la Unidad Aritmético-Lógica (ALU).
 
Unidad de Control
 
La Unidad de Control recibe secuencialmente las instrucciones desde la memoria, a través del bus de datos, almacenándolas en el registro de instrucciones (IR). Desde IR las instrucciones pasan al decodificador de instrucciones, el cual se encarga de interpretarlas y producer una serie de impulsos de gobierno y control. Estos impulsos regulan a los elementos de la máquina, que participant en la ejecución de la instrucción.
 
La Unidad de Control, además de descodificar las instrucciones y de generar los impulsos de control, incrementa sincrónicamente un contador, llamado contador de programa (PC) cada vez que se ejecuta una instrucción, con objeto de que se quede señalando a la siguiente instrucción.
 
 
 
 
Unidad Aritmético-Lógica
 
La Unidad Aritmético-Lógica (ALU) es la encargada del procesamiento lógico y aritmético de los datos, según el carácter que determine cada instrucción.
 
 
 
Memoria
 
El programa o secuencia de instrucciones, que debe seguir la máquina para realizar el procesamiento de los datos, está almacenado en una parte de la memoria, denominada memoria o segmento de instrucciones para diferenciala del resto de la misma, que se emplea para guardar datos y resultados en forma temporal.
 
La información, que recibe la memoria a través del bus de direcciones, es un conjunto de bits lógicos, tantos como líneas tenga el bus que seleccionan la posición de memoria a la que se accede. El decodificador de direcciones se encarga de elegir una posición de la matriz de la memoria, descodificando la información que ha llegado por el bus de direcciones. Como generalmente la memoria está constituida físicamente por mas de un chip, sera tarea del decodificador de direcciones habilitar al chip correspondiente.
 
En una computadora encontraremos dos tipos de memoria: de solo lectura (ROM) y de acceso al azar (RAM).
 
Memoria ROM
 
La memoria ROM (Read Only Memory) o memoria de solo lectura también permite el acceso directo a cada uno de los elementos que la componen, pero la información en ella contenida puede ser leída pero no alterada. Debido a que conserva la información, aún en el caso de ausencia de energía, se usa para almacenar las rutinas de mas bajo nivel, que sirven para el arranque del sistema.
 
Memoria RAM
 
La memoria RAM (Random Access Memory) o memoria de acceso al azar debe su nombre al hecho de permitir el acceso a cualquiera de las localidades de memoria en forma directa, en contraste con las memorias de acceso secuencial en las cuales para accede al N-ésimo element, era necesario accede previamente a los N-1 elementos anteriores; pero su característica más importante es la de que la información contenida en cada una de las localidades puede ser leída y/o alterada. En ella se va a almacenar, por lo tanto, el sistema operative y los programas del usuario, así como la información temporal que estos manejen.
 
A la memoria RAM se le suele llamar memoria volatil, por el hecho de que la información en ellas almacenada, se pierde en ausencia de energía.
 
Periféricos
 
Son los encargados de enviar y/o recoger información del mundo externo a la computadora e intercambiarla con la unidad central de procesamiento a través de la unidad de entradas y salidas.
 
Buses
 
Los buses no son más que los conductors que interconectan cada una de las partes que component al computador. A través de ellos viaja información que según su function permite clasificarlos en tres tipos: bus de Datos, bus de Direcciones y bus de Control.
 
Bus de datos
 
El bus de datos se encarga de transferir información entre el CPU, la memoria y los periféricos. Es bidireccional, ya que la información puede fluir en ambos sentidos, es decir, desde o hacia el microprocesador.
 
Bus de direcciones
 
El bus de direcciones permite seleccionar la localidad de memoria o el periférico que el CPU desea accesar. Este bus es unidireccional ya que la información a través de él siempre fluye desde el microprocesador.
 
Bus de control
 
En el Bus de Control se encuentran las diferentes señales encargadas de la sincronización y control del sistema. Su naturaleza es unidireccional aun cuando existen señales que salen del microprocesador así como otras que entran al microprocesador. Ejemplos de las señales de control son:
 
- WR       (escritura)
- RD        (lectura)
- WAIT    (espera)
- READY  (listo)

Modos de direccionamiento

INTRODUCCIÓN
- Definición de Modo de direccionamiento: mecanismo que permite conocer la ubicación de un dato o instrucción.
- Objeto: dato o instrucción que se desea direccionar.
Un computador dispone de varios modos de direccionamiento.
- Objetivos de los modos de direccionamiento:
• Reducir el espacio ocupado en memoria por las instrucciones.
• Permitir la reubicación del código.
• Facilitar el manejo de las estructuras de datos.

Modos de direccionamiento en las instrucciones
- Los operandos y resultado de una instrucción son accedidos a través de modos de direccionamiento.
- Cada campo de operando o resultado en una instrucción contiene información acerca del modo de direccionamiento empleado para acceder a él.
• Código de operación (CO) y modificador (MD)
• Operandos (OPi) y resultado (RES)
 
 
- Cada campo de operandos o resultado tendrá los siguientes subcampos:
• Mdir: especificador del modo de direccionamiento (ocupa pocos bits).
• CR: campo especificador del registro involucrado en el modo de direccionamiento (ocupa pocos bits).
• CD: campo que puede contener un operando inmediato, una dirección o un desplazamiento (suele ocupar bastante espacio).
 
 
DIRECCIONAMIENTO INMEDIATO
- La instrucción contiene al propio objeto.
- Se emplea cuando la instrucción contiene un valor constante.
- El tamaño del operando viene determinado por el espacio reservado para él en el formato de instrucción.
- Subcampos del campo de operando
 
- Esquema de funcionamiento
 
 
- Ejemplo M68000: MOVE.B #5,D0
 
DIRECCIONAMIENTO DIRECTO
Direccionamiento mediante registro
- El operando se encuentra contenido en un registro.
- Subcampos del campo de operando
 

- Esquema de funcionamiento
 
- Ejemplos M68000: MOVE.B #5,D0
                              MOVE.W #$23A0,A3
 
 
Direccionamiento directo absolute
- La instrucción contiene la dirección de memoria exacta donde se encuentra el operando.
- El operando se encuentra en memoria.
- Subcampos del campo de operando
 
 
 
• El rango de CD debe ser capaz de direccionar toda la memoria.
 
• Si no es capaz: direccionamiento de página base.
- Esquema de funcionamiento
 
 
 
- Ejemplo M68000: MOVE.B D0,$A61350
 
 
 
DIRECCIONAMIENTO RELATIVO A REGISTRO
- El operando se encuentra en memoria.
- La dirección del objeto ha de ser calculada a partir de la suma del contenido de un cierto registro (que funciona como un puntero) y un desplazamiento (contenido en la instrucción).
- Subcampos del campo de operando
 
 
 
Direccionamiento relativo a registro base
- Se emplea como puntero un registro base, que puede ser un registro específico o uno cualquiera de los del banco.
- El registro base utilizado se indica en el subcampo CR.
- Esquema de funcionamiento
 
 
 
- Ejemplo M68000: MOVE.W 5(A0),D1
 
 
 
Direccionamiento relativo a contador de programa
- Como puntero se emplea el contador de programa.
- Este direccionamiento se emplea para acceder a instrucciones (saltos relativos o bucles) o para referenciar datos cercanos al código.
- No es preciso introducir el subcampo CR.
- Esquema de funcionamiento
 
 
 
- Ejemplo M68000: MOVE.L 24(PC),D0


Direccionamiento relativo a puntero de pila
- Pila: estructura de tipo LIFO marcada por:
• el fondo de la pila
• el puntero de pila (*SP), registro que apunta a la última posición ocupada de la pila
- Como puntero del direccionamiento se emplea el puntero de pila.
- No es preciso incluir el subcampo CR, y a veces no lleva CD.
- Ejemplo M68000: MOVE.B D0,24(SP) MOVE.B D0,24(A7)



DIRECCIONAMIENTO INDEXADO
- Similar al direccionamiento relativo a registro base.
• El operando se encuentra en memoria.
• Registro índice: se modifica a menudo en la ejecución del programa.
 
- Subcampos del campo de operando
 
 
 
- El registro índice puede permitir incrementos o decrementos antes o después de obtenerse la dirección del objeto:
• Preincremento
• Predecremento
• Posincremento
• Posdecremento

- El incremento o decremento puede depender del tamaño del objeto referenciado.
- Ejemplos M68000 (sólo predecremento y posincremento):
MOVE.B D0,(A0)+ incrementa A0 en 1
MOVE.W D0,-(A2) decrementa A2 en 2
MOVE.L (A5)+,D3 incrementa A5 en 4

- Utilizado para recorrer tablas o vectores.
 
DIRECCIONAMIENTO INDIRECTO
- El operando se encuentra en memoria.
- La instrucción contiene una dirección que se emplea para leer en memoria una dirección intermedia que será la verdadera dirección del objeto buscado.
- Subcampos del campo de operando
 
 
- Esquema de funcionamiento
 
 

COMBINACIONES DE MODOS BÁSICOS DE DIRECCIONAMIENTO
Direccionamiento indirecto a registro
- Es similar al direccionamiento indirecto, pero la dirección intermedia está contenida en un registro, no en una posición de memoria.
- La instrucción contendrá la referencia al registro.
- Subcampos del campo de operando
 

- Coincide con el direccionamiento relativo a registro base sin usar desplazamiento.
- Ejemplo M68000: MOVE.L D0,(A4)


Combinación de modos indirecto e indexado
- Subcampos del campo de operando
 

- Preindexado: El contenido del registro índice se suma al de la dirección indirecta en el primer paso de la indirección.
 
 
- Posindexado: el contenido del registro índice se suma a la dirección intermedia en el segundo paso de la indirección.
 

- Puede haber preincremento o predecremento (total: 8 posibilidades).
Direccionamiento relativo a registro con índice y desplazamiento

- La dirección del objeto se obtiene sumando el contenido de un registro base, un
registro índice y un desplazamiento.
- Subcampos del campo de operando
 
 
- Ejemplo M68000: MOVE.L D0,12(A0,D2)
 
 
 

Fuentes:
 
 
 
 

Resumen








Comandos Debug

Primeramente entramos en Debug (como dato extra, el Windows 7 64 bit no reconoce el commando Debug por lo que no se puede accesar a él)
 
 
Para ver los registros utilizamos el comando r

 
Nuestro primer programa

 
Para ejecutar el programa se utiliza el comando g y podemos ver el contenido de los registros para comprobar que el programa se ejecuto 

 
Otra forma de ver los valores y como salir del debug

 
Para crear un archivo se realiza de la siguiente manera
 
(NOTA: El código esta bien escrito, por alguna razón la computadora en la que lo realize marco un error en la creación, aún despues de hacerlo varias veces)
 
 
Condiciones, ciclos y bifurcaciones





jueves, 29 de agosto de 2013

Interrupciones y llamadas al sistema

Interrupción
 
Una interrupción es un mecanismo que permite ejecutar un bloque de instrucciones interrumpiendo la ejecución de un programa, y luego restablecer la ejecución del mismo sin afectarlo directamente. De este modo un programa puede ser interrumpido temporalmente para atender alguna necesidad urgente de la computadora y luego continuar su ejecución de manera normal y como si nada hubiera pasado.


Pasos durante una interrupción
  • El CPU suspende lo que estaba realizando. El hw transfiere el control al sistema de operación.
  • Deshabilita las interrupciones. Mientras se atiende una interrupción no se puede atender otra que llegue. Algunas arquitecturas con manejo de interrupciones sofisticadas permiten, mediante un esquema de prioridades, interrumpir un servicio de interrupción para atender otra de mayor prioridad. Aquellas interrupciones de menor o igual prioridad son deshabilitadas.
  • El kernel del sistema de operación salva el estado actual del proceso interrumpido
  • Transfiere su ejecución a una dirección fija. Esta dirección por lo general contiene la dirección de comienzo donde la rutina de servicio de la interrupción se encuentra. Una forma de manejar las interrupciones es invocando una rutina general que examine la información de la interrupción y determine el tipo de interrupción ocurrida, y de alli llama a la rutina que se encarga de atender dicha interrupción. Por lo general se maneja mediante un vector de interrupciones, indexado por el tipo de interrupción. En este vector se encuentra la dirección de comienzo de la rutina que da servicio a dicho tipo. Se le conoce como vector de interrupción. Otra forma de localizar la rutina apropiada es mediante el pooling, es decir, preguntando a cada dispositivo pare ver quien requirió el servicio.
  • Se ejecuta la rutina de interrupción
  • Se restaura el estado anterior
  • Se habilitan las interrupciones.
  • La arquitectura de interrupciones debe también almacenar la dirección de la instrucción interrumpida.


Llamadas al sistema
 
Es el mecanismo usado por una aplicación para solicitar un servicio al sistema operativo.

Las llamadas al sistema comúnmente usan una instrucción especial de la CPU que causa que el procesador transfiera el control a un código privilegiado, previamente especificado por el mismo código. Esto permite al código privilegiado especificar donde va a ser conectado así como el estado del procesador.

Cuando una llamada al sistema es invocada, la ejecución del programa que invoca es interrumpida y sus datos son guardados, normalmente en su PCB (Bloque de Control de Proceso), para poder continuar ejecutándose luego. El procesador entonces comienza a ejecutar las instrucciones de código de alto nivel de privilegio, para realizar la tarea requerida. Cuando esta finaliza, se retorna al proceso original, y continúa su ejecución. El retorno al proceso demandante no obligatoriamente es inmediato, depende del tiempo de ejecución de la llamada al sistema y del algoritmo de planificación de CPU.
 

Fuentes
 

Actividad Registros del CPU