Download 3.1. Interrupciones internas de hardware

Document related concepts

Llamada de interrupción del BIOS wikipedia , lookup

Int 13h wikipedia , lookup

Interrupción wikipedia , lookup

Lista de Interrupciones de Ralf Brown wikipedia , lookup

Intel 8259 wikipedia , lookup

Transcript
MANUAL DE LABORATORIO DE SISTEMAS OPERATIVOS
UNIVERSIDAD NACIONAL DE UCAYALI
PRACTICA N° 01
INTERRUPCIONES DE ENTRADA Y SALIDA EN EL
SISTEMA OPERATIVO WINDOWS USANDO EL
LENGUAJE DE PROGRAMACION C++
1. OBJETIVOS :
1.1. Usar adecuadamente el lenguaje de programación g++.
1.2. Aprender a compilar en g++
1.3. Reconocer diferentes interrupciones en g++
2. MATERIALES y EQUIPOS:
 Computadora con procesador Pentium, Memoria Ram 256.
3. FUNDAMENTO TEÓRICO: INTERRUPCIONES DE ENTRADA Y SALIDA
3.1. Interrupciones internas de hardware
Las interrupciones internas son generadas por ciertos eventos que surgen durante
la ejecución de un programa. Este tipo de interrupciones son manejadas en su
totalidad por el hardware y no es posible modificarlas.
Un ejemplo claro de este tipo de interrupciones es la que actualiza el contador del
reloj interno de la computadora, el hardware hace el llamado a esta interrupción
varias veces durante un segundo para mantener la hora actualizada.
Aunque no podemos manejar directamente esta interrupción (no podemos
controlar por software las actualizaciones del reloj), es posible utilizar sus efectos
en la computadora para nuestro beneficio, por ejemplo para crear un "reloj virtual"
actualizado continuamente gracias al contador del reloj interno. Únicamente
debemos escribir un programa que lea el valor actual del contador y lo traduzca a
un formato entendible para el usuario.
3.2. Interrupciones externas de hardware
Las interrupciones externas las generan los dispositivos periféricos, como pueden
ser: teclado, impresoras, tarjetas de comunicaciones, etc. También son generadas
por los coprocesadores.
No es posible desactivar a las interrupciones externas.
Estas interrupciones no son enviadas directamente a la UCP, sino que se mandan
a un circuito integrado cuya función es exclusivamente manejar este tipo de
interrupciones. El circuito, llamado PIC 8259A, si es controlado por la UCP
utilizando para tal control una serie de vias de comunicación llamadas puertos.
3.3. Interrupciones de software
Las interrupciones de software pueden ser activadas directamente por el
ensamblador invocando al número de interrupción deseada con la instrucción INT.
El uso de las interrupciones nos ayuda en la creación de programas, utilizandolas
nuestros programas son más cortos, es más fácil entenderlos y usualmente tienen
un mejor desempeño debido en gran parte a su menor tamaño.
Este tipo de interrupciones podemos separarlas en dos categorias: las
interrupciones del sistema operativo DOS y las interrupciones del BIOS.
La diferencia entre ambas es que las interrupciones del sistema operativo son más
fáciles de usar pero también son más lentas ya que estas interrupciones hacen uso
del BIOS para lograr su cometido, en cambio las interrupciones del BIOS son
mucho más rápidas pero tienen la desventaja que, como son parte del hardware
son muy específicas y pueden variar dependiendo incluso de la marca del
fabricante del circuito.
Laboratorio Nº 01
Ing. Luis Alberto Rivera Echgaray
Página 3
MANUAL DE LABORATORIO DE SISTEMAS OPERATIVOS
UNIVERSIDAD NACIONAL DE UCAYALI
La elección del tipo de interrupción a utilizar dependerá únicamente de las
características que le quiera dar a su programa: velocidad (utilizando las del BIOS)
o portabilidad (utilizando las del DOS).
4. PROCEDIMIENTO EXPERIMENTAL:
4.1. Parte 1. Codificar y analizar el siguiente programa en el sistema operativo Windows
#include<conio.h>
#include<dos.h>
#include<iostream.h>
#include<fstream.h>
main()
{
clrscr();
char caracter;
fstream imp;
cout<<"\n Programa para imprimir un carácter utilizando puerto paralelo";
cout<<"\n Ingresar el caracter";
cin>>caracter;
imp.open("LPT1",1,1);
if(!imp) {cout<<"\n Impresora desconectada";}
else{
cout<<"\n Enviando el carácter por el puerto";
imp<<caracter;
imp << '\r' // Retorno de carro (ENTER)
<< '\f' ; // Expulsa la última hoja de la impresora
imp.close();
cout<<"\n impresora cerrada";
}
getch();
}
Cual es la línea que abre el Puerto de datos
4.2. Parte 2. Verifica usando el debug del código anterior
4.2.1. Usando el debug del DOS podemos verificar la línea de puertos de entrada y de
salida con las interrupciones :
D040:08l8
Escriba y arme en octetos los puertos encontrados
4.3. Parte 3. Codificar y analizar el siguiente programa en el sistema operativo windows
#include <stdio.h>
#include <dos.h>
#include<conio.h>
int main()
{
clrscr();
unsigned int _far *puntero_a_direccion;
Laboratorio Nº 01
Ing. Luis Alberto Rivera Echgaray
Página 4
MANUAL DE LABORATORIO DE SISTEMAS OPERATIVOS
UNIVERSIDAD NACIONAL DE UCAYALI
int i;
puntero_a_direccion=(unsigned int _far *)0x00000408;
for (i=0; i<3; i++)
{
if (*puntero_a_direccion == 0)
printf("No se encontro puerto asignado a LPT%d \n", i+1);
else
printf("La direccion asignada a LPT%d es 0x%Xh\n\n", i+1,
puntero_a_direccion);
puntero_a_direccion++;
}
getch();
return 0;
}
Identifique ud la dirección asignada al puerto de salida
4.3. Parte 3. Modificar el código anterior donde busque con los puertos y muestre el tiempo
que los encontró usando la siguiente función.
Void espera (int segundos)
{
clock_t fin;
fin=clock()*segundos*CLK_TCK;
while (clock()<fin) { }
}
5. CUESTIONARIO:
5.1. ¿Cuántos puertos encontró?
5.2. ¿Verificar cual delos algoritmos es más eficiente en su búsqueda?
5.3. ¿Escribir el algoritmo usando el g++ de Linux?
5.4. Comente cada una de las experiencias, anotando tus apreciaciones y conclusiones
6. BIBLIOGRAFIA.
6.1. Ignacio Zahonero Martinez “Programación en c++”, November 2010, pp. 154.
6.2. Luis Joyanes Aguilar “Programación con puertos” 2010, pp. 354.
6.3. Alonso; Finn. "Programmig”. Addison-Wesley Iberoamericana.
6.4. Gettys; Keller; Skove. "c++ ". McGraw-Hill.
.
Laboratorio Nº 01
Ing. Luis Alberto Rivera Echgaray
Página 5