miércoles, 28 de agosto de 2013

Actividad #5

Interrupciones

Un 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.
 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 Counterpareejecutar 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 ejemplo, ctrl-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 producidas por medio de la ejecución de una operación especial que se conoce como "llamada al sistema" (system call) o por errores producidos dentro de un proceso, también conocidas como excepciones.
  • 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 software
    Son aquellas programadas por el usuario, es decir, el usuario decide cuando y donde ejecutarlas, generalmente son usadas para realizar entrada y salida.
    Interrupciones por hardware
    Son 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 tipo
    Interrupciones 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 SISTEMA
    Las llamadas son peticiones a ejecución de rutinas y proporcionan la interfaz entre el sistema operativo y un programa en ejecución. Estas llamadas son instrucciones de lenguaje ensamblador y se presentan en los manuales que emplean los programadores de este lenguaje. Algunos sistemas permiten efectuar llamadas al sistema directamente desde un programa realizado en el lenguaje de mayor nivel, normalmente estas llamadas se asemejan a una función o sub-rutinas predefinidas, que generan una llamada a una ruta en especial de tiempo de ejecución, que realice efectivamente la llamada al sistema, o bien pueden generarla directamente en la línea. Por ejemplo: En el procesador INTEL es INT y en UNIX son rutinas en C.
    Las llamadas al sistema para ejecución y el control de programas, usualmente incluyen un conjunto completo de los servicios accesibles por la vía del lenguajes de órdenes, tales como: RUN, EXECUTE, ABORT y planificación relacionada con el tiempo, además los usuarios con las llamadas del sistema pueden suspender, establecer o cambiar atributos del tiempo de ejecución de uno ó más programas. También se proporcionan algunas facilidades muy extendidas en sistemas de tiempo real, para comunicación entre programas y sincronización.
    Las llamadas del sistema para el gestor de recursos, proporcionan servicios para la asignación, reserva y reclamación de los recursos del sistema. Por ejemplo, existen llamadas del sistema para extender o reducir la cantidad de memoria poseída por el programa que se  llama. Las llamadas del sistema pueden asignar o reservar otros tipos de objetos del sistema y después destruir o devolver su custodia al sistema operativo.
     El siguiente diagrama ilustra la relación entre la Shell y el Kernel. Recordemos que el Shell es lo que el sistema operativo nos muestra, la portada, el intérprete de comandos, etc. El Kernel es el núcleo del sistema operativo.
      

            











    Actividad #4

    REGISTROS

    Para ejecutar las instrucciones la CPU requiere de algún tipo de almacenamiento temporal. Esta pequeña memoria interna, de alta velocidad, está constituida por registros, los cuales se pueden utilizar para el almacenamiento temporal de operandos o datos que se utilicen con frecuencia. Cada registro puede almacenar una palabra de dato. Los tiempos de acceso a los registros son generalmente de 5 a 10 veces más rápidos que los de acceso a memoria.

    En la figura se muestra un esquema simplificado de las conexiones entre registros ULA y unidad de control en el CPU.




    Foto



                                            

    Los registros de la CPU están clasificados en dos categorías de acuerdo a sus funciones, aunque no existe una clara separación entre las dos.

    • Registros visibles al usuario. Permiten al programador de lenguaje de máquina o ensamblador minimizar las referencias a la memoria principal, cuando optimiza el uso de los registros.
    • Registros de control y estado. Son utilizados por la unidad de control para controlar el funcionamiento de la CPU, y por programas privilegiados del sistema operativo para controlar la ejecución de programas.

    (Antes mencionamos que no existe una clara separación entre las dos categorías, por ejemplo aunque en la mayoría de las máquinas el Contador de Programa(PC) no es visible al usuario, en algunas si lo es.




    REGISTROS VISIBLES AL USUARIO:
    Son aquellos que pueden ser referenciados por medio del lenguaje de máquina que ejecuta la CPU. Se pueden clasificar en las siguientes categorías:

    • Registros de Propósito General: pueden ser asignados por el programador a una gran variedad de funciones. Puede contener el operando de cualquier instrucción.
    • Registros de Datos: Se utilizan únicamente para almacenar datos, y no pueden utilizarse para el cálculo de la dirección de un operando.

    REGISTROS DE DIRECCIONES
    Pueden ser de uso más o menos general, o pueden estar dedicados a un modo particular de direccionamiento. Como ejemplo tenemos:

    • Apuntadores de segmento: contiene la dirección de la base del segmento en una máquina con direccionamiento segmentado.
    • Registros índices: Utilizados para direccionamiento indexado, y pueden ser autoindexados.
    • Apuntadores de Pila: Si existe un direccionamiento de pila visible al usuario, entonces la pila está en memoria y hay un registro dedicado que apunta al tope de esta.

    REGISTROS DE CODIGOS DE CONDICION (banderas(flags)
    Son bits fijados por el hardware de la CPU como resultados de una operación. Por ejemplo una operación aritmética puede producir un resultado positivo, negativo, nulo o con desbordamiento. Además de almacenar el propio resultado en memoria, se obtiene también un código de condición, que puede ser consultado como parte de una bifurcación condicional. Los bits de códigos de condición se reúnen en uno o más registros. Normalmente forman parte del registro de control. Generalmente las máquinas permiten que estos bits se lean mediante referencias
    Implícitas, pero no pueden ser alterados por el programador. En algunas máquinas, una llamada a una subrutina implica guardar el contenido de los registros visibles al usuario, para reestablecerlos al regreso. Esta tarea es realizada por el CPU como parte de la ejecución de la llamada y del regreso. Esto permite que cada subrutina utilice los registros independientemente. En otras máquinas es responsabilidad del programador guardar y reestablecer los valores de los registros Al momento de diseñar los registros de un CPU hay varios puntos que hay que considerar. Uno muy importante es la especialización, que trata de si deben utilizarse únicamente registros de propósito general o especializar su uso. Con el uso de registros especializados puede estar implícito en el código de operación el tipo de registro al que hará referencia un operando. Este debe identificar únicamente un registro de un conjunto especializado, en lugar de uno de entre todos los registros. Esto por un lado ahorra bits, pero la especialización limita la flexibilidad del programador. No existe una solución única en este punto, pero la tendencia es el uso de los registros especializados.

    Otro punto es el Número de Registros, ya sean de propósito general, de datos o de direcciones. Esto afecta el diseño del conjunto de instrucciones dado que más registros requieren más bits de operandos.
    Al parecer de 8 a 32 registros son opt5imos. Utilizar pocos registros produce más referencias a la memoria; muchos registros no reducen notablemente el número de referencias a memoria. Sin embargo, existe un nuevo planteamiento, el cual encuentra ventajas en el uso de cientos de registros, y se encuentra en algunos sistemas RISC Un último punto en el diseño es la Longitud de los Registros. Los registros que contienen direcciones deben ser lo suficientemente grandes para contener direcciones grandes. Los registros de datos deben ser capaces de almacenar valores de la mayoría de los tipos de datos. Algunas máquinas permiten el uso de dos registros contiguos para almacenar valores de longitud doble.

    REGISTROS DE CONTROL Y ESTADO
    Hay una gran variedad de registros que son utilizados para controlar la operación del CPU. La mayoría de estos, en muchísimas máquinas, no son visibles al usuario. Algunos duden ser visibles a instrucciones de máquina realizadas en un modo de control o de sistema operativo.
    Por supuesto, existen diferentes organizaciones de registros y utilizan diferente tecnología. A continuación se muestra una lista, razonablemente completa, de tipos de registros y una breve descripción.


    Registros esenciales para la ejecución de una instrucción:

    • Registro de dirección de memoria MAR: Específica la dirección de memoria a la que se está accediendo. Está conectado al bus de dirección.
    • Registro de datos de memoria MDR: Contiene el valor a escribir en la memoria o el último valor  leído de la memoria. Está conectado al bus de datos.
    • Contador de Programa PC: Contiene la dirección de la próxima instrucción a captar.
    • Registro de Instrucción IR: Almacena la instrucción que actualmente se está ejecutando


    MAR: Memory Address Register;   
    MDR: Memory Data Register; 
    PC:Program Counter;
    IR:Instruction Register



    El PC es actualizado por el CPU después de cada búsqueda de instrucción, por lo que siempre apunta a la siguiente instrucción a ser ejecutada. Una instrucción de salto también modifica al PC. La instrucción buscada se coloca en el IR donde el código de operación y el operando son analizados. Los datos se intercambian utilizando MAR y MDR. Estos cuatro registros se utilizan para la transferencia de datos entre el CPU y la memoria. Dentro del CPU los datos son presentados a la ULA para procesarlos. La ULA debe tener acceso directo al MDR y a los registros visibles al usuario.

    En la figura se muestran los dos registros involucrados directamente con el acceso a memoria.

    Foto


    Todos los diseños del CPU incluyen un registro, o conjunto de registros, conocido como palabra de estado del programa PSW (program status word). Frecuentemente el PSW contiene códigos de condición y otra información de estado. Entre los campos comunes se incluyen los siguientes:

    • Signo: Contiene el bit de signo resultante en la última operación aritmética.
    • Cero: Puesto a 1 cuando el resultado es cero.
    • Acarreo: Puesto a 1 si la operación da como resultado un acarreo del bit más significativo.
    • Igual: Puesto en 1 si el resultado de una comparación lógica es la igualdad.
    • Overflow: Utilizado para indicar un desbordamiento en una operación aritmética.
    • Interrupt enable disable: Utilizada para habilitar o deshabilitar las interrupciones.

    Supervisor: Indica cuando el CPU está operando en modo supervisor o en modo usuario. Ciertas instrucciones y áreas de memoria solo pueden accesar en modo supervisor.

    domingo, 25 de agosto de 2013

    ACTIVIDAD #3


    ESTRUCTURA Y ORGANIZACIÓN DE UN PROCESADOR (CPU) 





    ORGANIZACIÓN DEL PROCESADOR


    Se deben de cumplir algunos requisitos:
    Captar instrucción: El procesador lee una instrucción de la memoria.
    Interpretar instrucción: la instrucción se decodifica para determinar qué acción es necesaria.
    Captar datos: La ejecución de una instrucción puede exigir leer datos de la memoria o de un módulo de entrada y salida.
    Procesar datos: La ejecución  de una instrucción puede exigir llevar a cabo alguna operación aritmética o lógica con los datos.
    Escribir datos: Los resultados de una ejecución pueden exigir escribir datos en la memoria o en un módulo de E/S. 

    El procesador necesita almacenar algunos datos temporalmente, debe recordar la posición de la última instrucción de forma que pueda saber de dónde tomar la siguiente, necesita almacenar instrucciones y datos temporalmente mientras una instrucción está ejecutándose.
    En otras palabras, el procesador necesita  una pequeña memoria interna.




     La Unidad Central de Procesos (CPU), se encarga de calcular y distribuir las tareas que se deben ejecutar. Entre sus funciones está la de hacer solicitudes a la memoria para obtener todos los datos necesarios para realizar su computación; también está la de hacer gestiones a la interfaz de entrada y salida para permitir la lectura de los caracteres del teclado, los clicks del ratón, mostrar las ventanas en el monitor, etc.
    Frecuentemente, en las computadoras de un solo CPU, la velocidad de proceso se ve frenada por la capacidad de transmitir datos de un lado al otro, entre el CPU, la memoria y la interfaz de E/S. Antiguamente, las computadoras podían transmitir datos en conjuntos de 8 bits, ahora las computadoras pueden transmitir hasta 64 bits en cada tick del reloj (aunque a la fecha hay equipos de cómputo de 128 bits, pero son dedicados a consolas de juegos).


















    viernes, 23 de agosto de 2013

    ACTIVIDAD # 2



      
    1. QUE ES EL LENGUAJE ENSAMBLADOR?
    es un lenguaje de programación de bajo nivel para los computadoresmicroprocesadores,micro controladores 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 una arquitectura 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. 








    2- EN QUE SE UTILIZA EL LENGUAJE 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.





    3- QUE ES UN LENGUAJE DE ALTO NIVEL, DE BAJO NIVEL Y LENGUAJE DE MAQUINA?


    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: case, if, for, while, etc.   



    Un lenguaje de programación de bajo nivel de abstracción es el que proporciona un conjunto de instrucciones aritmeticológicas sin la capacidad de encapsular dichas instrucciones en funciones que no estén ya contempladas en la arquitectura del hardware.



    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 (abreviatura inglesa de dígitos binarios). Fue el primer lenguaje utilizado en la programación de computadoras, pero dejó de utilizarse por su dificultad y complicación, siendo sustituido por otros lenguajes más fáciles de aprender y utilizar, que además reducen la posibilidad de cometer errores.


    4-CUAL ES LA IMPORTANCIA DE LENGUAJE ENSAMBLADOR?La importancia del lenguaje ensamblador radica principalmente que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en el se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar. Otro punto sería que los programas en ensamblador ocupan menos espacio en memoria.