miércoles, 28 de agosto de 2013

Actividad #4 Investigar sobre conceptos de interrupciones y llamadas a servicios de sistema

INTERRUPCIONES
Las interrupciones son algoritmos suministrados en su mayor porcentaje por el sistema operativo y l BIOS, aunque todavía pueden existir algunas generadas por empresas diferentes a las del sistema o por el usuario.
Una interrupción puede tener varias funciones y de simular manera de un procedimiento cuando se la invoque se deberá determinar la función que se está solicitando con los parámetro que corresponden.

Las interrupciones desde el punto de vista del Hardware

El Esquema Ordenador debe atender los requerimientos de los dispositivos de entrada/salida y para ello utiliza 2 técnicas: el Polling o encuestas.
Las interrupciones se clasifican en externas a aquellas que son pedidas por el hardware que a su vez pueden ser enmascarables o no enmascarables.
El significado del enmascaramiento es que si se enmascaran no se atienden, esto se logra con una instrucción conocida como DI (Disenell Interlap) inhabilitación de interrupciones.
Las interrupciones no enmascarables que realizan sus pedidos a través de la línea MNI (None Enmascarable Interrup) a la línea de interrupciones no enmascarables.
El indicador de interrupciones no enmascarables es el bit I del Registro de Estado.
En la arquitectura de la PC el Microprocesador trabaja con un gestor de interrupciones conocido como Controlador programable de interrupciones (PIC 8259). Los diferentes dispositivos de entrada/salida solicitaran una interrupción al PIC a través de una línea IRQ (Interrap Request) desrequerimiento de interrupciones. Éste a su vez la solicitará al microprocesador a través de una línea INT de pedidos de interrupciones.
El micro evaluará si la interrupción es enmascarable leyendo el bit I del Registro de Estado, en el caso de no estarla aceptará la interrupción del PIC por medio de una señal de reconocimiento a través del INTA (Interrap Acrnoplep).
Cuando esta ocurre en PIC escribe en el bus de datos un valor de 8 bits que identifica el número interrupción solicitada (entre el 00h hasta FFh).
El hecho que un dispositivo pida interrupción a través de un número de IRQ no significa que el número de interrupción solicitada es el mismo.
Las interrupciones internas no son enmascarables porque entran directo al micro y como este lee – interpreta – ejecuta, si la leyó deberá ejecutarla porque no tiene capacidad para interrumpirla (el que decide si una interrupción es enmascarable o no es el software, es decir, el programador).

Las interrupciones desde el punto de vista del software

Al momento de solicitarse una interrupción (interna o externa) se está ejecutando un programa, si la interrupción se atiende se empilan los valores del CS, IP y del Registro de Estado y se asigna al CS el valor 0 y al IP 4 por el número de interrupciones, generando una dirección efectiva que provoca un salto a la parte baja de la memoria, un área conocida como Zona de vectorización.
La Zona de vectorización es un área de 1024 bytes (256 interrupciones por 4 bytes que tiene cada una) que se extiende desde la dirección 0 a la 3FF y que almacena las direcciones de comienzo de los algoritmos de interrupción.
Utiliza 4 bytes para la dirección, 2 para el segmento y 2 para el desplazamiento y estas direcciones se almacenan secuencialmente desde la dirección más baja, interrupción tras interrupción.
Siguiendo con la secuencia anterior se lee en la zona de vectorización la dirección de comienzo del algoritmo de interrupción asignándosele 2 bytes al segmento CS y 2 bytes al desplazamiento IP generándose en consecuencia una nueva dirección de salto que no lleva al algoritmo de interrupción.
Una vez allí se ejecutará el algoritmo (lee – interpreta – ejecuta) hasta encontrar la instrucción final del algoritmo que será un IRET o Retorno de Interrupción. Esta instrucción desempila los valores del RE, IP y CS volviendo a la instrucción ejecutada donde se había atendido la interrupción.

La interrupción 21


Es la interrupción más importante del Sistema Operativo dos y como muchas interrupciones tienen un conjunto de funciones que permiten hacer deferentes cosas. Las funciones de una interrupción suelen indicarse con el registro AH.

LLAMADAS AL SISTEMA
Una 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 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.

domingo, 25 de agosto de 2013

Actividad#3: Investigar la estructura y organización de un procesador (CPU).

La estructura de las rutas principales de datos dentro de la CPU: Los bloques de la CPU. Estos bloques pueden organizarse e interconectarse de varias formas. Una de tales organizaciones se muestra en la siguiente figura. En este caso, la unidad aritmética y lógica (ALU) y todos los registros de la CPU están conectados a través de un bus común. Desde luego, este bus es interno y no debe confundirse con el bus externo, o buses, que conectan a la CPU con la memoria y los dispositivos de E/S. El bus externo de memoria se muestra en la siguiente figura conectado con la CPU por medio de los registros de datos y de dirección MDR y MAR. El número y funciones de los registros del RO al R(n - 1) varían mucho de una máquina a otra. Pueden ser para que el programador los emplee en operaciones generales, pero algunos de ellos pueden ser registros de aplicación especial, tales como registros índices o apuntadores de pila.
 
 
    La unidad de control es el mecanismo encargado de gobernar el funcionamiento del ordenador. Funcionalmente recibe la información almacenada, la decodifica, genera las señales de control (microórdenes) necesarias para realizar las transferencias, controles, etc. Las características de la UC son la unidad de control.
    Es la otra parte de la CPU. Se encarga de coordinar que todos los procesos se realicen de manera ordenada y secuencial. Su modo de proceder contiene un puntero que indica la siguiente instrucción a ejecutar, obtiene la instrucción de memoria, la descodifica (serie de microórdenes internas) y repite el proceso.
 
Registros:
Se utilizan para almacenar datos de forma temporal:
    Registros de propósito general: Almacena indistintamente datos y/ó direcciones y no siempre el mismo tipo de dato y/ó dirección. Su longitud, por lo tanto, será variable y dependerá del uso que se le dé en cada instante.
    Registros de propósito específico: Almacenan siempre el mismo tipo de dirección ó dato. Es de longitud fija.
En el Indalo 1.0 sólo son de propósito específico y son de 8 bits de longitud.
Las salidas de los registros se conectan a la UC por medio de puertas triestado (buffer triestado).
Registro de instrucción (IR)
En cada momento contiene la instrucción en curso, igualmente contiene el dato con la dirección asociada a esa instrucción.
Instrucción = código de operación + DIR (dirección ó dato). Se puede decir que el IR está compuesto de varios registros, en Indalo 1.0 el CO es un registro y el DIR son 2.
El CO indica el tipo de operación que se va a realizar y el operando indica sobre qué va a actuar esa operación. Va conectado al decodificador que a su vez va al secuenciado. Su longitud determina el número de operaciones que se pueden realizar y tiene que ser del tamaño de la palabra de memoria en la que se almacenan los códigos de operaciones.
El registro DIR es el resto de los bits del IR y tiene el tamaño del bus de direcciones.
En el caso de Indalo 1.0, el CO es 1 byte y el DIR, 2 bytes que se dividen en DIRH y DIRL (alta y baja).  
Contador de programa
Contiene la dirección de la próxima instrucción a realizar. La longitud del contador de programa será la del bus de direcciones (16 bits en Indalo 1.0). Si se activa el RESET, el contador de programa accede a una posición ROM (0FFFDH en el Indalo 1.0)
Registro acumulador
Se le llama A y en el se guarda el resultado de la última operación que se procesa en la ALU.
Secuenciador central
Gobierna todos los elementos de la CPU. Funciona a través de unas microórdenes que las genera en función del estado de sus entradas y el estado de señales de control que le vienen de otros circuitos como pueden ser demandas de interrupción, estado de memoria, estado de la ALU, etc. y en función de cómo esté implementado físicamente el secuenciador podemos tener una UC cableada ó una UC programada.
El hecho de que la UC sea cableada quiere decir que el secuenciador está hecho por hardware, por lo que sólo puede realizar un sólo algoritmo. El diseño es muy rígido pero más rápido. Si es programada, el hacer un cambio de órdenes es muy sencillo, pero es más lenta. Lleva una pequeña memoria donde se colocan las órdenes. Se pueden añadir y modificar instrucciones modificando el microprograma. En función del secuenciamiento de las órdenes, se dividen en:   
SINCRONOS: La UC conoce los tiempos de respuesta de los circuitos. Al lanzar una orden sabe cuanto tiempo tiene que dejar hasta ejecutar la siguiente orden.
ASINCRONO: Tiene que ir comprobando la ejecución de cada tarea para ejecutar la siguiente. Son más rápidos porque no utilizan ciclos enteros de tiempo. 

ORGANIZACIÓN DEL PROCESADOR
Un procesador, incluye tanto registros visibles por el usuario como registros de control/estado. Los registros visibles por el usuario pueden ser de uso general o tener una utilidad especial, mientras que los registros de control y estado se usan para controlar el funcionamiento del procesador, un claro ejemplo es el contador de programa.

Los procesadores utilizan la segmentación de instrucciones para acelerar la ejecución. La segmentación de cauce se puede dividir en ciclo de instrucción en varias etapas separadas que operan secuencialmente, tales como la captación de instrucción, decodificación de instrucción, cálculo de direcciones de operando, ejecución de instrucción y estructura del operando resultado.

A continuación se muestra cómo se organiza un procesador, para esto se tiene que considerar los siguientes requisitos:
Captar instrucciones: el procesador lee una instrucción de memoria (registro, cache o memoria principal).
Interpretar instrucción: la instrucción se codifica para determinar qué acción es necesario.
Captar datos: la ejecución de una instrucción puede exigir leer datos de memoria o de un módulo de  E/S.
Procesar datos: la ejecución e 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 el módulo de E/S.
Para hacer estas cosas, el procesador necesita almacenar instrucciones y datos temporalmente mientras una instrucción esta ejecutándose, en otras palabras el procesador necesita una pequeña memoria interna.


Figura 12.1 El procesador y el bus del sistema

En esta figura se muestra  una visión simplificada de un procesador, que indica su conexión con el resto de sistema, a través del bus del sistema. La ALU lleva a cabo el verdadero cálculo o procesamiento de datos. La unidad de control controla la transferencia de datos e instrucciones así a dentro y así afuera del procesador, y el funcionamiento de la ALU. Además la figura muestra una memoria interna mínima, que consta de un conjunto de posiciones de almacenamiento llamadas registros.

Figura 12.2 Estrucutra interna del procesador


En esta figura se indican los caminos de transferencia de datos y de la lógica de control, que incluye un elemento con el rotulo bus interno del procesador. También se muestran los elementos básicos típicos de la ALU. Hay que observar la similitud entre la estructura interna del computador en su totalidad y la estructura interna del procesador. En ambos casos hay una pequeña colección de elementos principales (computador: procesador, E/S, memoria; procesador: unidad de control, ALU, registros) conectados por caminos de datos.

martes, 20 de agosto de 2013

Actividad #2:Investigar los siguientes conceptos
 
 
  • Que es el Lenguaje ensamblador
El lenguaje ensamblador, o assembler (assembly language en inglés), es un lenguaje de programación de bajo nivel para los computadores, microprocesadores, microcontroladores 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. Esta representación es usualmente definida por el fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria y otras características del lenguaje. Un lenguaje ensamblador es por lo tanto específico de cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que idealmente son portátiles.
  • En que se utiliza el lenguaje ensamblador
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
  • Que es un lenguaje de alto nivel, de bajo nivel y lenguaje de máquina
Un lenguaje de programación de alto nivel se caracteriza por expresar los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas.

Un lenguaje de programación de bajo nivel es aquel en el que sus instrucciones ejercen un control directo sobre el hardware y están condicionados por la estructura física de la computadora que lo soporta.

El lenguaje de máquina o código máquina es el sistema de códigos directamente interpretable por un circuito microprogramable, como el microprocesador de una computadora o el microcontrolador de un autómata.
  • 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.