miércoles, 28 de agosto de 2013

Interrupciones

Interrupciones y llamadas a servicios de sistema

InterrupcionesUn dispositivo periférico puede generar una señal eléctrica llamada interrupción que modifica ciertas banderas que se encuentran en el CPU. La detección de una interrupción es parte del ciclo de instrucción. En cada ciclo de instrucción, el CPU chequea las banderas hardware para ver si algún dispositivo necesita atención.Las interrupciones generadas por los dispositivos periféricos son generalmente asíncronas con respecto al programa que se está ejecutando. Un evento es asíncrono a una entidad si el momento cuando ocurre no está determinado por la entidad. Las interrupciones no siempre ocurren en el mismo punto dentro de la ejecución de un programa. En contraste, un evento de error como la división por cero es síncrono en el sentido de que siempre ocurre durante la ejecución de una instrucción particular si el mismo dato es presentado a la instrucción.Las rutinas del Sistema de Operación llamadas manejadores de dispositivos usualmente manejan las interrupciones generadas por el dispositivo. Los Sistemas de Operación usan interrupciones para implementar el tiempo compartido. Tienen un dispositivo llamado timer que genera una interrupción después de un intervalo específico de tiempo. El Sistema de Operación inicializa el timer antes de actualizar el Program Counterpare ejecutar un programa de un usuario. Cuando el timer expira, genera una interrupción causando que el CPU ejecute la rutina de servicio de la interrupción timer.

Una señal o signal es la notificación por software de que un evento ocurrió. Por lo general es la respuesta del Sistema de Operación. Por ejemploctrl-C genera una interrupción para el manejador de dispositivo que maneja el teclado. El manejador notifica al proceso apropiado mandando un signal. El Sistema de Operación también puede enviar signals a un proceso para notificar la finalización de una E/S o de un error.       


  • Las interrupciones pueden ser producidas por Hardware o por software
  • Las interrupciones por Hardware son producidas por un dispositivo y viajan por el mismo Bus del sistema.
  • Las interrupciones por Software son prodicidas por medio de la ejecucion de una operacion especial que se conoce como "Llamada sistema" (system call) o por errores producidos dentro de un proceso, tambien conocidas como excepciones.



Hay muchos tipos de interrupciones y pare cada uno de estas existe una rutina en el sistema de operación que le da servicio. Los sistemas de operación actuales permiten a los dispositivos tales como E/S o reloj del sistema interrumpir el CPU asíncronamente.

Pasos durante una interrupción
  • El CPU suspende lo que estaba realizando. El hardware 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.
  • 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.
Interrupciones softwareSon aquellas programadas por el usuario, es decir, el usuario decide cuando y donde ejecutarlas, generalmente son usadas para realizar entrada y salida.Interrupciones por hardwareSon aquellas que son provocadas por dispositivos externos al procesador su característica principal es que no son programadas, esto es, pueden ocurrir en cualquier momento en el programa. Existen dos clases de interrupciones de este tipoInterrupciones por hardware enmascarables: Aquellas en las que el usuario decide si quiere o no ser interrumpido.Interrupciones por hardware no enmascarables (NMI): Aquellas que siempre interrumpen al programa.Llamadas al SistemaDefinición de llamada al sistemaUna llamada al sistema es un método o función que puede invocar un proceso para solicitar un cierto servicio al sistema operativo. Dado que el acceso a ciertos recursos del sistema requieren la ejecución de código en modo privilegiado, el sistema operativo ofrece un conjunto de métodos o funciones que el programa puede emplear para acceder a dichos recursos. En otras palabras, el sistema operativo actúa como intermediario, ofreciendo una interfaz de programación (API) que el programa puede usar en cualquier momento para solicitar recursos gestionados por el sistema operativoAlgunos ejemplos de llamadas al sistema son las siguientes:·         time, que permite obtener la fecha y hora del sistema.·         write, que se emplea para escribir un dato en un cierto dispositivo de salida, tales como una pantalla o un disco magnético.·         read, que es usada para leer de un dispositivo de entrada, tales como un teclado o un disco magnético.·         open, que es usada para obtener un descriptor de un fichero del sistema, ese fichero suele pasarse a write.






Las llamadas al sistema y las excepciones funcionan como interrupciones del software: se gestionan igual que las interrupciones del hardware, pero las provoca la propia CPU.Para provocar una interrupción software, existe una instrucción de máquina específica:·         INT (Intel)·         TRAP (Motorola)·         SYSCALL (MIPS) 

Referencias
http://ldc.usb.ve/~spd/Docencia/ci-3821/Tema2/node4.htmlhttp://www.slideshare.net/SpiderHal/interrupciones-de-hardwarehttp://sopa.dis.ulpgc.es/so/teoria/pdf/so-02-Estructura%20del%20computador-6x1.pdfhttp://antiguo.itson.mx/die/mdomitsu/bibliotecaDigital/Programacion_Lenguaje_Ensamblador8086/Tema08.pdfhttp://1984.lsi.us.es/wiki-ssoo/index.php/Llamadas_al_sistema

Registros

REGISTROS INTERNOS DEL MICROPROCESADOR

       La unidad Central de Proceso tiene 14 registros internos cada uno de 16 bits.Los primeros cuatro, AX, BX, CX y DX, son de uso general y se pueden usar también como registros de 8 bits. Estos son los únicos registros que pueden usarse de modo dual (en 8 o 16 bits).
      Los registros internos del procesador se puede clasificar en 6 tipos diferentes


  1. Registros de segmento
  2. registros de propósito general
  3. registros de apuntadores
  4. Registro de banderas
  5. Registros de puntero de instrucción
  6. Registro de pila.
Registros de segmento.
un registro de segmento tiene 16 bits de longitud y facilita un area de memoria para direccionamiento conocida como el segmento actual.

Registros de propósito general.
Los registros de propósito general AX, BX, CX y DX son los caballos de batalla del sistema.

 

Registro de apuntador de Instrucciones.
EL registro apuntador de instrucciones de 16 bits contiene el desplazamiento de dirección de la siguiente instrucción que se ejecuta. EL IP esta  asociado con el registro CS en el sentido de que el IP indica la instrucción actual dentro del segmento de código que se esta ejecutando actualmente. Los procesadores 80386 y posteriores tienen un IP ampliado de 32 bits, llamado EIP.

Registro Apuntadores
los registros SP y BP están asociados con el registro SS y permiten al sistema accesar datos en el segmento de la pila.

Registro de Indice.
Los registros SI Y DI estas disponibles para direccionamiento indexado y para sumas y restas.

Registros Banderas
De los 16 bits del registro de banderas , nueve son comunes a toda la familia de procesadores 8086, y sirven para indicar el restado actual de la maquina y el resultado del procesamiento. Muchas instrucciones que piden comparaciones y aritmética cambian al estado de las banderas, algunas cuyas instrucciones pueden realizar pruebas para determinar la acción subsecuente.

Registros de Pila
La pila es una rea d memoria importante y por ello tiene, en vez de uno, dos registros que se usan como desplazamiento (offset) para apuntar a su contenido. Se usan como complemento al registro.

   Los Registros de la CPU son conocidos por sus nombres propios, que son:

  • AX acumulador
  • BX registro base
  • CX registro contador
  • DX registro de datos
  • DS  Registro del segmento de datos
  • ES  registro de segmento extra
  • SS  registro de segmento de pila
  • CS  registro de segmento de codigo
  • BP  registro de apuntadores base
  • SI   registro indice fuente
  • DI  registro indice destino
  • SP  registro apuntador de pila
  • IP  registro de apuntador de siguiente instruccion
  • F   registro de banderas.

El registro AX se usa para almacenar resultados, lectura o escritura desde o hacia los puertos.
El registro BX sirve como apuntador base o indice.
El registro CX se utiliza en operaciones de iteracion, como un contador que automáticamente se incrementa o decrementa de acuerdo con el tipo de instrucción usada.
El registro DX se usa como puente para el acceso de datos.

El DS es un registro de segmento cuya función es actuar como policía donde se encuentran los datos. Cualquier dato debe estar dentro de este segmento. La única excepción es cuando tenemos programas del tipo *.com, ya que estos solo pueden existir un segmento.
El ES es un registro que tiene el propósito general de permitir operaciones sobre cadenas, pero también puede ser una extensión de DS

EL SS tiene la tarea exclusiva de manejar la posición de memoria donde se encuentra la pila(stack) Esta es una estructura usada para almacenar datos en forma temporal, tanto de un programa como de las operaciones internas de la computadora personal. La CPU usa este segmento para almacenar las direcciones de retorno de las llamadas rutinas.
El registro de segmentos mas importante es el CS, es aquí donde se encuentra el código ejecutable de cada programa, el cual esta directamente ligado a los diferentes modelos de memoria.

El registro BP se usa para manipular la pila sin afectar al registro de segmentos SS. Es útil cuando se usa interfaz entre lenguajes de alto nivel y el ensamblador. Nos permite acceder parámetro pasados sin alterar el registro de segmento SS.
El registro SI  es útil para manejar bloques de cadenas en memoria , siendo el indice fuente, representa la dirección donde se encuentra la cadena.
El registro DI es útil para manejar bloques de cadenas en memoria, siendo el indice de destino, representa la dirección donde sera copiada.

El registro SP apunta a un área especifica de memoria que sirve para almacenar datos bajo la estructura LIFO(ultimo en entrar, primero en salir), conocida como pila.
El registro IP apunta a la siguiente instrucción que sera ejecutada en memoria. 





Del registro F (bandera) se describe el significado de cada bit en este registro:

Todas la Banderas apagadas:
NV   UP  DI  PL  NZ  NA  PO  NC

todas las banderas prendidas:
OV  DN  EI  NG  ZR  AC  PE CY

significado de los bits:
  • Overflow                               NV=no hay desbordamiento
                                                     OV=SI lo hay
  • Direction                               UP=Hacia adelante
                                                     DN=Hacia atrás
  • Interrupts                              DI=desactivadas
                                                     EI=activadas
  • Sing                                      PL=positivo
                                                     NG=negativo
  • Zero                                      NZ=no es cero
                                                     ZR=si lo es
  • Auxiliary Carry                      NA= no hay acarreo auxiliar 
                                                    AC=hay acarreo auxiliar
  • Parity                                   PO= Paridad non                             
                                                    PE= Paridad par
  • Carry                                   NC= No hay acarreo
                                                    CY=si lo hay


OF (overflow, desbordamiento). Indica desbordamiento de un bit de orden alto(mas a la izquierda) después de una operación aritmética.

DF (Dirección). designa la dirección hacia la izquierda o hacia la derecha para mover o comparar cadenas de caracteres.

IF (interrupción). Indica que una interrupción externa, como la entrada desde el teclado, sea procesado o ignorada.

TF (trampa). Permite la operación en modo de un paso. Los programas depuradores, como el DEBUG, activan esta banderas de manera que usted pueda avanzar en la ejecución de una sola instruccion a un tiempo, para examinar el efecto de esa instruccion sobre los registros de memoria.

SF (signo). Contiene el signo resultante de una operación aritmética (0= positivo y 1= negativo).

ZF (Cero). Indica el resultado de una operación aritmética o de comparación (0- resultante diferente de cero y 1= resultante igual a cero)

AF (acarreo auxiliar). Contiene un acarreo externo del bit 3 en un dato de 8 bits para aritmética  especializada.

PF (paridad). Indica paridad par o impar de una operación de datos de 8 bits de bajo orden (mas a la derecha).

CF (acarreo). Contiene el acarreo de orden alto (mas a la Izquierda) después d una operación aritmética; también lleva el contenido del ultimo bit en una operación de corrimiento o de rotación.

EJEMPLO

Registros de uso general del 8086/8088:
Tienen 16 bits cada uno y son ocho:


  1. AX = Registro acumulador, dividido en AH y AL (8 bits cada uno). Usándolo se produce (en general) una instrucción que ocupa un byte menos que si se utilizaran otros registros de uso general. Su parte más baja, AL, también tiene esta propiedad. El último registro mencionado es el equivalente al acumulador de los procesadores anteriores (8080 y 8085). Además hay instrucciones como DAA; DAS; AAA; AAS; AAM; AAD; LAHF; SAHF; CBW; IN y OUT que trabajan con AX o con uno de sus dos bytes (AH o AL). También se utiliza este registro (junto con DX a veces) en multiplicaciones y divisiones.


  2. BX = Registro base, dividido en BH y BL. Es el registro base de propósito similar (se usa para direccionamiento indirecto) y es una versión más potente del par de registros HL de los procesadores anteriores.


  3. CX = Registro contador, dividido en CH y CL. Se utiliza como contador en bucles (instrucción LOOP), en operaciones con cadenas (usando el prefijo REP) y en desplazamientos y rotaciones (usando el registro CL en los dos últimos casos).


  4. DX = Registro de datos, dividido en DH y DL. Se utiliza junto con el registro AX en multiplicaciones y divisiones, en la instrucción CWD y en IN y OUT para direccionamiento indirecto de puertos (el registro DX indica el número de puerto de entrada/salida).


  5. SP = Puntero de pila (no se puede subdividir). Aunque es un registro de uso general, debe utilizarse sólo como puntero de pila, la cual sirve para almacenar las direcciones de retorno de subrutinas y los datos temporarios (mediante las instrucciones PUSH y POP). Al introducir (push) un valor en la pila a este registro se le resta dos, mientras que al extraer (pop) un valor de la pila este a registro se le suma dos.


  6. BP = Puntero base (no se puede subdividir). Generalmente se utiliza para realizar direccionamiento indirecto dentro de la pila.


  7. SI = Puntero índice (no se puede subdividir). Sirve como puntero fuente para las operaciones con cadenas. También sirve para realizar direccionamiento indirecto.


  8. DI = Puntero destino (no se puede subdividir). Sirve como puntero destino para las operaciones con cadenas. También sirve para realizar direccionamiento indirecto.


                                                        


Referencias y  Bibliografia.

  • https://docs.google.com/file/d/0BxraEIYzL2HWRVJUUml2WkUxVTA/edit?usp=sharing
  • http://www.oocities.org/mx/antrahxg/documentos/org_comp/registro.html
  • http://perso.wanadoo.es/pictob/microprg.htm


domingo, 25 de agosto de 2013

Conceptos de Lenguaje ensamblador y estructura del CPU

QUE ES LENGUAJE ENSAMBLADOR

Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al código de máquina del computador objetivo. El ensamblador realiza una traducción más o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemónicas a las instrucciones y datos de máquina
 es un lenguaje de programación de bajo nivel para los computadoresmicroprocesadoresmicrocontroladores y otros circuitos integrados programables. Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar unaarquitectura dada de CPU y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador


¿DONDE SE UTILIZA?

Fue usado principalmente en los inicios del desarrollo de software, cuando aún no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la manipulación directa de hardware, altos rendimientos, o un uso de recursos controlado y reducido.
Muchos dispositivos programables (como los microcontroladores) aún cuentan con el ensamblador como la única manera de ser manipulados

¿QUE ES UN LENGUAJE DE ALTO NIVEL?

Un lenguaje de alto nivel permite al programador escribir las instrucciones de un programa utilizando palabras o expresiones sintácticas muy similares al inglés. Por ejemplo, en C se pueden usar palabras tales como: caseifforwhile, etc. para construir con ellas instrucciones como:if( numero > 0 ) printf( "El número es positivo" )

que traducido al castellano viene a decir que: si numero es mayor que cero, entonces, escribir por pantalla el mensaje: "El número es positivo"
.

¿QUE ES UN LENGUAJE DE BAJO NIVEL?

Los lenguajes de bajo nivel, también llamados lenguajes ensambladores, permiten al programador escribir instrucciones de un programa usando abreviaturas del inglés, también llamadas palabras nemotécnicas, tales como: ADD, DIV, SUB, etc. Un programa escrito en un lenguaje ensamblador tiene el inconveniente de que no es comprensible para la computadora, ya que, no está compuesto por ceros y unos. Para traducir las instrucciones de un programa escrito en un lenguaje ensamblador a instrucciones de un lenguaje máquina hay que utilizar un programa llamado ensamblador, como se muestra en la siguiente figura:



¿QUE ES EL LENGUAJE MAQUINA?

Fue el primer lenguaje utilizado en la programación para las primeras computadoras, pero dejó de utilizarse por su dificultad y complicación, siendo sustituido por otros lenguajes más fáciles de aprender y utilizar, y que además reducen la posibilidad de cometer errores.

El lenguaje máquina es el único que entiende directamente la computadora, utiliza el alfabeto binario que consta de los dos únicos símbolos 0 y 1, denominados bits; físicamente, se materializan con tensiones comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente. Para representar datos que contengan una información se utilizan una serie de unos y ceros cuyo conjunto indica dicha información.

IMPORTANCIA DEL LENGUAJE ENSAMBLADOR

la importancia del lenguaje ensamblador radica principal mente que se trabaja directamente con el micro procesador; por lo cual se debe conocer el funcionamiento interno de este, tiene la ventaja de que en el se puede realizar cualquier tipo de rpogramas que en los lenguajes de alto nuvel no lo pueden realizar. Otro punto seria que los programas en ensamblador ocupan menos espacio en memoria. Permitira adentrarnos al estudio del hardware de una PC.
Es importante como se puede ver, el lenguaje ensamblador es directamente traducible al lenguaje maquina y viceversa; simplemente es una abstraccion ue facilita su uso para los sere humanos.



ESTRUCTURA Y ORGANIZACIÓN DE UN PROCESADOR

Funcionamiento

El procesador (denominado CPU, por Central Processing Unit) es un circuito electrónico que funciona a la velocidad de un reloj interno, gracias a un cristal de cuarzo que, sometido a una corriente eléctrica, envía pulsos, denominados "picos". La velocidad de reloj (también denominada ciclo), corresponde al número de pulsos por segundo, expresados en Hertz (Hz). De este modo, un ordenador de 200 MHz posee un reloj que envía 200.000.000 pulsos por segundo. Por lo general, la frecuencia de reloj es un múltiplo de la frecuencia del sistema (FSBFront-Side Bus o Bus de la Parte Frontal), es decir, un múltiplo de la frecuencia de la placa madre

Instrucciones

Una instrucción es una operación elemental que el procesador puede cumplir.. Las instrucciones se almacenan en la memoria principal, esperando ser tratadas por el procesador. Las instrucciones poseen dos campos:
  • el código de operación, que representa la acción que el procesador debe ejecutar;
  • el código operando, que define los parámetros de la acción. El código operando depende a su vez de la operación. Puede tratarse tanto de información como de una dirección de memoria.

Las instrucciones pueden agruparse en distintas categorías. A continuación presentamos algunas de las más importantes:
  • Acceso a Memoria: acceso a la memoria o transferencia de información entre registros.
  • Operaciones Aritméticas: operaciones tales como suma, resta, división o multiplicación.
  • Operaciones Lógicas: operaciones tales como Y, O, NO, NO EXCLUSIVO, etc.
  • Control: controles de secuencia, conexiones condicionales, etc

Registros

Cuando el procesador ejecuta instrucciones, la información almacena en forma temporal en pequeñas ubicaciones de memoria local de 8, 16, 32 o 64 bits, denominadas registros.
Los registros más importantes son:
  • el registro acumulador (ACC), que almacena los resultados de las operaciones aritméticas y lógicas;
  • el registro de estado (PSWProcessor Estado: Word o Palabra de Estado del Procesador), que contiene los indicadores de estado del sistema (lleva dígitos, desbordamientos, etc.);
  • el registro de instrucción (RI), que contiene la instrucción que está siendo procesada actualmente;
  • el contador ordinal (OC o PC por Program Counter, Contador de Programa), que contiene la dirección de la siguiente instrucción a procesar;
  • el registro del búfer, que almacena información en forma temporal desde la memoria.

Unidades funcionales

El procesador se compone de un grupo de unidades interrelacionadas (o unidades de control). Aunque la arquitectura del microprocesador varía considerablemente de un diseño a otro, los elementos principales del microprocesador son los siguientes:
  • Una unidad de control que vincula la información entrante para luego decodificarla y enviarla a la unidad de ejecución:La unidad de control se compone de los siguientes elementos:
    • secuenciador (o unidad lógica y de supervisión ), que sincroniza la ejecución de la instrucción con la velocidad de reloj. También envía señales de control:
    • contador ordinal, que contiene la dirección de la instrucción que se está ejecutando actualmente;
    • registro de instrucción, que contiene la instrucción siguiente.
  • Una unidad de ejecución (o unidad de procesamiento), que cumple las tareas que le asigna la unidad de instrucción. La unidad de ejecución se compone de los siguientes elementos:
    • la unidad aritmética lógica (se escribe ALU); sirve para la ejecución de cálculos aritméticos básicos y funciones lógicas (Y, O, O EXCLUSIVO, etc.);
    • la unidad de punto flotante (se escribe FPU), que ejecuta cálculos complejos parciales que la unidad aritmética lógica no puede realizar;
    • el registro de estado;
    • el registro acumulador.
  • Una unidad de administración del bus (o unidad de entrada-salida) que administra el flujo de información entrante y saliente, y que se encuentra interconectado con el sistema RAM;