jueves, 29 de agosto de 2013

Interrupciones y Llamadas a servicios de sistema

Interrupciones de los  Servicios Básicos de Entrada y Salida (BIOS, por sus siglas en inglés)

¿Qué es una interrupción?

Debido a que el procesador no puede procesar múltiples datos al mismo tiempo (procesa un dato a la vez) el sistema de multitareas es en realidad una alternancia de fragmentos de instrucciones de muchas tareas diferentes. Es posible suspender momentáneamente un programa que se estaba ejecutando mediante una interrupción que dure el tiempo que lleva una rutina de servicios de interrupción. Luego, el programa interrumpido puede continuar ejecutándose. Existen 256 direcciones de interrupción diferentes.
Una interrupción se realiza cuando un componente del hardware de la ordenador requiere la interrupción del hardware. Un ordenador posee muchos periféricos. Generalmente, necesitan utilizar recursos del sistema, aunque sólo sea para comunicarse con éste.

Definición: Una interrupción es el rompimiento en la secuencia de un programa para ejecutar un programa especial llamando una rutina de servicio cuya característica principal es que al finalizar regresa al punto donde se interrumpió el programa.
Dentro de una computadora existen dos clases de interrupciones:
           
Hay tres razones para utilizar una rutina escrita en ensamblador:
·           Aumentar la velocidad y la eficiencia.
·           Realizar una función específica de la máquina que no está disponible en C.
·           Utilizar una rutina en lenguaje ensamblador empaquetada de propósito ge­neral.

Las principales interrupciones del 8086/8088 son las siguiente.


Servicios de la interrupción 21h (sistema)

 


 


 


 

 

Llamadas al sistema (system calls)

Una llamada al sistema es cuando un programa llama a un servicio del Kernel del sistema operativo. Generalmente estos servicios se encuentran disponibles como instrucciones de lenguaje ensamblador pero algunas veces también pueden llamarse (sin tener conocimiento de ello) desde lenguajes de alto nivel.


Kernel o núcleo
Este se considera el principal componente de los sistemas operativos sirve de interfaz entre aplicaciones y el proceso de los datos de bajo nivel hecho por el hardware del equipo. Entre sus funciones están administrar los recursos del sistema como memoria, uso de CPU por las aplicaciones o acceso a interfaces de entrada y salida del equipo.

Ejemplos de esto son:
  • Exit: Para terminar la ejecución de un programa.
  • Fork: Para crear hilos de ejecución.
  • Time: Para ver la hora actual.
  • Open: Para abrir archivos
  • Close: para cerrar archivos
 Como puede observarse estas son funciones muy utilizadas en cualquier lenguaje de programación pero sin darnos cuenta estas son administradas por el núcleo del sistema operativo.

Algunos 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.
Todo sistema operativo ofrece un conjunto de llamadas al sistema. En el caso de Linux 3.0, se ofrecen un total de 345 llamadas al sistema.
Toda llamada al sistema se identifica de manera unívoca mediante un valor numérico que no debe ser modificado a lo largo de la vida del sistema operativo para evitar que se rompa la compatibilidad hacia atrás.

sábado, 24 de agosto de 2013

Estructura y organización de un procesador (CPU).



Estructura y organización de un procesador (CPU).

CPU (del inglés: Central Processing Unit) Unidad Central de Procesamiento también conocido como microprocesador o simplemente procesador.


Que es el procesador?

Es el circuito integrado central y más complejo de un sistema informático conformado por millones de componentes electrónicos.
Es el encargado de ejecutar los programas, desde el sistema operativo hasta las aplicaciones de usuario; sólo ejecuta instrucciones programadas en lenguaje de bajo nivel, realizando operaciones aritméticas y lógicas simples, tales como sumar, restar, multiplicar, dividir, las lógicas binarias y accesos a memoria.


Estructura interna

El microprocesador 8086 y el 8088 tienen internamente dos componentes, la Unidad de Interfaz del Bus y la Unidad de ejecución (Bus Interface Unit (BIU) y Execution Unit (EU)).         La unidad de ejecución es la encargada de realizar todas las operaciones mientras que la unidad de interfaz del bus es la encargada de acceder a datos e instrucciones del mundo exterior. Las unidades de ejecución son idénticas en ambos microprocesadores, pero las unidades de interfaz del bus son diferentes en varias cuestiones, como se desprende del siguiente diagrama en bloques:
La explicación del diagrama en bloques es la siguiente:

Registro AX: El registro AX es el registro acumulador, es utilizado para operaciones que implican entrada/salida, y multiplicación y división (estas dos últimas en conjunto con el registro DX) 

Registro BX: El registro BX es el registro base, y es el único registro de propósito general que puede ser un índice para direccionamiento indexado 

Registro CX: El registro CX es conocido como el registro contador. Puede contener un valor para controlar el número de veces que un ciclo se repite o un valor para corrimiento de bits 

Registro DX: El registro DX es el registro de datos. En algunas operaciones se indica mediante este registro el número de puerto de entrada/salida, y en las operaciones de multiplicación y división de 16 bits se utiliza junto con el acumulador AX

SP = El apuntador de pila de 16 bits está asociado con el segmento SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que está siendo procesada en la pila
BP = El apuntador base de 16 bits facilita la referencia de parámetros dentro de la pila.SI = Puntero índice: Sirve como puntero fuente para las operaciones con cadenas. También sirve para realizar direccionamiento indirecto.
DI = Puntero destino: Sirve como puntero destino para las operaciones con cadenas. También sirve para realizar direccionamiento indirecto.

 

Unidad aritmética y lógica

Unidad aritmético lógica, también conocida como ALU (siglas en inglés de arithmetic logic unit), es un circuito digital que calcula operaciones aritméticas (como suma, resta, multiplicación, etc.) y operaciones lógicas (si, y, o, no), entre dos números.

 

Indicadores (flags)

  • OF (Over flow flag, desbordamiento): Indica desbordamiento del bit de mayor orden después de una operación aritmética de números con signo (1=existe overflow; 0=no existe overflow).
  • DF (Direction flag, Direccion): Controla la selección de incremento o decremento de los registros SI y DI en las operaciones con cadenas de caracteres (1=decremento automático; 0=incremento).
  • IF (Interruption flag, Interrupcion): Controla el disparo de las interrupciones (1=habilita las interrupciones; 0=deshabilita las interrupciones) Indica que una interrupción externa, como la entrada desde el teclado sea procesada o ignorada.
  • TF (Trap flag, Trampa): Permite la operación del procesador en modo de depuración (paso a paso)
  • SF (Sign flag, Signo): Contiene el signo resultante de una operación aritmética (0=positivo; 1=negativo).
  • ZF (Zero flag, Zero): Indica el resultado de una operación aritmética o de comparación (0=resultado diferente de cero; 1=resultado igual a cero).
  • AF (Auxiliary carry flag, Acarreo auxiliar): Contiene el acarreo del bit 3. Esta bandera se prueba con las instrucciones DAA y DAS para ajustar el valor de AL después de una suma o resta BCD.
  • PF (Parity flag, Paridad): Indica si el número de bits 1, del byte menos significativos de una operación, es par (0=número de bits 1 es impar; 1=número de bits 1 es par).
  • CF (Carry flag, Acarreo): Contiene el acarreo del bit de mayor orden después de una operación aritmética; también almacena el contenido del último bit en una operación de desplazamiento o de rotación.

Sistema de control de la unidad de ejecución

Es el encargado de decodificar las instrucciones que le envía la cola y enviarle las órdenes a la unidad aritmética y lógica según una tabla que tiene almacenada en ROM llamada CROM (Control Read Only Memory)

 

Registros de la unidad de interfaz con el bus:

CS: Registro de segmento de código: El DOS almacena la dirección inicial del segmento de código de un programa en el registro CS.
DS: Registro de segmento de datos:
La dirección inicial de un segmento de datos de programa es almacenada en el registro DS.
ES: Registro de segmento extra:
Algunas operaciones con cadenas de caracteres (datos de caracteres) utilizan el registro esta de segmento para manejar el direccionamiento de memoria.
SS: Registro de segmento de pila: El registro SS permite la colocación en memoria de una pila, para almacenamiento temporal de direcciones y datos.
 IP: Contiene el desplazamiento de dirección de la siguiente instrucción que se ejecuta.







martes, 20 de agosto de 2013


1.¿Que es el Lenguaje ensamblador?


Lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del código máquina específico para cada arquitectura de computadoras legible por un programador.   

2.¿En que se utiliza el lenguaje ensamblador?

Por ejemplo cuando: Es requerido un ejecutable binario independiente (stand-alone), es decir uno que deba ejecutarse sin recursos a componentes de tiempo de ejecución o a bibliotecas asociadas con un lenguaje de alto nivel; ésta es quizás la situación más común. Son programas empotrados que solo almacenan una pequeña cantidad de memoria y el dispositivo está dirigido para hacer tareas para un simple propósito. Ejemplos consisten en teléfonos, sistemas de combustible e ignición para automóviles, sistemas de control del aire acondicionado, sistemas de seguridad, y sensores.

Otro caso es cuando se Interactuan directamente con el hardware, por ejemplo en drivers de dispositivo.
 3.¿Que es un lenguaje de alto nivel, de bajo nivel y lenguaje de máquina?


  • Lenguajes de bajo nivel 
    Son lenguajes totalmente dependientes de la máquina, es decir que el programa que se realiza con este tipo de lenguajes no se pueden migrar o utilizar en otras máquinas.

    Al estar prácticamente diseñados a medida del hardware, aprovechan al máximo las características del mismo.
         Dentro de este grupo se encuentran:



  • El lenguaje maquina: este lenguaje ordena a la máquina las operaciones fundamentales para su funcionamiento. Consiste en la combinación de 0's y 1's para formar las ordenes entendibles por el hardware de la máquina.
    Este lenguaje es mucho más rápido que los lenguajes de alto nivel.
    La desventaja es que son bastantes difíciles de manejar y usar, además de tener códigos fuente enormes donde encontrar un fallo es casi imposible.

  • El lenguaje ensamblador: es un derivado del lenguaje máquina y está formado por abreviaturas de letras y números llamadas mnemotécnicos. Con la aparición de este lenguaje se crearon los programas traductores para poder pasar los programas escritos en lenguaje ensamblador a lenguaje máquina. Como ventaja con respecto al código máquina es que los códigos fuentes eran más cortos y los programas creados ocupaban menos memoria. Las desventajas de este lenguaje siguen siendo prácticamente las mismas que las del lenguaje ensamblador, añadiendo la dificultad de tener que aprender un nuevo lenguaje difícil de probar y mantener.
Algunos ejemplos de lenguaje ensamblador es masm
  • Lenguajes de alto nivel: Se tratan de lenguajes independientes de la arquitectura del ordenador. Por lo que, en principio, un programa escrito en un lenguaje de alto nivel, lo puedes migrar de una máquina a otra sin ningún tipo de problema.
alguno de lenguaje de alto nivel es c#



4.¿Cual es la importancia de lenguaje ensamblador?

El lenguaje ensamblador es de suma importancia ya que éste es directamente traducible al lenguaje máquina y viceversa, es una abstracción que facilita su uso para el ser humano.

Nos permite además tener un control absoluto sobre la computadora, los programas en ensamblador son además rápidos y ultra ligeros, además ocupan casi nada de espacio en memoria ya que no requieren la carga de librerías complejas adicionales.