Download 3.1. Interrupciones internas de hardware
Document related concepts
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