U n i v e r s i d a d N a c i o n a l d e S a n A g u s t n
Facul tad de I ngeni er a de Pr oducci n y Ser vi ci os
Escuela Profesional de Ingeniera Electrnica
ARQUITECTURA DE COMPUTADORAS LABORATORIO N 7 GRUPO A
CMOS Programas residentes y manejo de interrupciones
Alumno: - Garca Mamani Roger Alex CUI: 20103986 .
A R E Q U I P A - P E R U 2 0 1 4 A 2
INDICE 1. Programas residentes tipeados de los textos especializados en algn lenguaje pequeo portable. (asembler, basic, c std, pascal, etc.) ................................................................. 3 2. Describa la direccin base de reloj de tiempo real de la PC. ............................................ 9 3. Describir las interrupciones por hardware usadas en la PC cuales estn ocupadas y cuales disponibles. ......................................................................................................... 10 4. Describir las interrupciones por software usadas en la PC cuales estn ocupadas y cuales disponibles. ......................................................................................................... 11 5. Describir el setup de la PC, las opciones de configuracin y los parmetros. ............... 12
1. Traer programas residentes tipeados de los textos especializados en algn lenguaje pequeo portable. (asembler, basic, c std, pascal, etc.) El siguiente programa residente no realiza tarea alguna, tan slo es una demostracin de la manera general de proceder para crear un programa residente. En principio, el cdigo de instalacin est colocado al final, con objeto de no dejarlo residente y economizar memoria. La rutina de instalacin (MAIN) se encarga de preservar el vector de la interrupcin peridica y desviarlo para que apunte a la futura rutina residente. Tambin se instala una rutina de control de la interrupcin 10h. Finalmente, se libera el espacio de entorno para economizar memoria y se termina residente. El procedimiento CONTROLA_INT8 puede ser modificado por el lector para que el programa realice una tarea til cualquiera 18,2 veces por segundo: de la manera que est, se limita a llamar al anterior vector de la INT 8 y a comprobar que no se est ejecutando ninguna funcin de vdeo de la BIOS (que no se ha interrumpido la ejecucin de una INT 10h). Esto significa que el lector podr utilizar libremente los servicios de vdeo de la BIOS, si bien para utilizar por ejemplo los de disquetes habra que desviar y monitorizar tambin INT 13h; por supuesto adems que no se puede llamar al DOS en este TSR (no se puede hacer INT 21h directamente desde el cdigo residente). Por cierto, si se fija el lector en la manera de controlar la INT 10h ver que al final se retorna al programa principal con IRET: los flags devueltos son los del propio programa que llam y no los de la INT 10h real. Con la INT 10h se puede hacer esto, ya que los servicios de vdeo de la BIOS no utilizan el registro de estado para devolver ninguna condicin. Sin embargo, con otras interrupciones BIOS (ej. 16h) o las del DOS habra que actuar con ms cuidado para que la rutina de control no altere nada el funcionamiento normal.
Puede que el lector haya visto antes programas residentes que no toman la precaucin de monitorizar la interrupcin 10h o la 13h de la BIOS, y tal vez se pregunte si ello es realmente necesario. La respuesta es tajantemente que s. Como se ver en el futuro en otro programa de ejemplo, reentrar a la BIOS sin ms puede provocar conflictos.
demores SEGMENT ASSUME CS:demores, DS:demores
ORG 100h inicio: JMP main
controla_int08 PROC PUSHF CALL CS:ant_int08 ; llamar al gestor normal de INT 8 STI CMP CS:in10,0 JNE fin_int08 ; estamos dentro de INT 10h
; ; Colocar aqu el proceso a ejecutar 18,2 veces/seg. ; que puede invocar funciones de INT 10h fin_int08: IRET controla_int08 ENDP
4
controla_int10 PROC INC CS:in10 ; indicar entrada en INT 10h PUSHF CALL CS:ant_int10 DEC CS:in10 ; fin de la INT 10h IRET controla_int10 ENDP
in10 DB 0 ; mayor de 0 si hay INT 10h ant_int08 LABEL DWORD ant_int08_off DW ? ant_int08_seg DW ? ant_int10 LABEL DWORD ant_int10_off DW ? ant_int10_seg DW ?
; Dejar residente hasta aqu.
main: PUSH ES MOV AX,3508h INT 21h ; obtener vector de INT 8 MOV ant_int08_seg,ES MOV ant_int08_off,BX MOV AX,3510h INT 21h ; obtener vector de INT 10h MOV ant_int10_seg,ES MOV ant_int10_off,BX POP ES
LEA DX,controla_int08 MOV AX,2508h INT 21h ; nueva rutina de INT 8
LEA DX,controla_int10 MOV AX,2510h INT 21h ; nueva rutina de INT 10h
PUSH ES MOV ES,DS:[2Ch] ; direccin del entorno MOV AH,49h INT 21h ; liberar espacio de entorno POP ES
LEA DX,main ; fin del cdigo residente ADD DX,15 ; redondeo a prrafo MOV CL,4 SHR DX,CL ; bytes -> prrafos MOV AX,3100h ; terminar residente INT 21h
demores ENDS END inicio
5
A continuacin se listan dos rutinas que habr de incorporar todo programa que desee emplear este convenio (u otras equivalentes). Las rutinas las he denominado mx_get_handle y mx_find_tsr. La primera permite buscar un valor para la interrupcin Multiplex an no empleado por otra tarea residente, tanto si sta es del convenio como si no. La segunda sirve para que el programa residente se busque a s mismo en la memoria. En esta segunda rutina se indica el tamao de la cadena de identificacin (la que contiene el nombre del fabricante, programa y versin) en CX. Si no se encuentra el programa residente en la memoria, puede repetirse la bsqueda con CX indicando slo el tamao del nombre del fabricante y el programa, sin incluir el de la versin: as se podra advertir al usuario que tiene instalada ya otra versin distinta. ; ------------ Buscar entrada no usada en la interrupcin Multiplex. ; A la salida, CF=1 si no hay hueco (ya hay 64 programas ; residentes instalados con esta tcnica). Si CF=0, se ; devuelve en AH un valor de entrada libre en la INT 2Fh.
mx_get_handle PROC MOV AH,0C0h mx_busca_hndl: PUSH AX MOV AL,0 INT 2Fh CMP AL,0FFh POP AX JNE mx_si_hueco INC AH JNZ mx_busca_hndl mx_no_hueco: STC RET mx_si_hueco: CLC RET mx_get_handle ENDP
; ------------ Buscar un TSR por la interrupcin Multiplex. A la ; entrada, DS:SI cadena de identificacin del programa ; (CX bytes) y ES:DI protocolo de bsqueda (normalmente ; 1492h:1992h). A la salida, si el TSR ya est instalado, ; CF=0 y ES:DI apunta a la cadena de identificacin del ; mismo. Si no, CF=1 y ningn registro alterado.
mx_find_tsr PROC MOV AH,0C0h mx_rep_find: PUSH AX PUSH CX PUSH SI PUSH DS PUSH ES PUSH DI MOV AL,0 PUSH CX INT 2Fh 6
POP CX CMP AL,0FFh JNE mx_skip_hndl ; no hay TSR ah CLD PUSH DI REP CMPSB ; comparar identificacin POP DI JE mx_tsr_found ; programa buscado hallado mx_skip_hndl: POP DI POP ES POP DS POP SI POP CX POP AX INC AH JNZ mx_rep_find STC RET mx_tsr_found: ADD SP,4 ; sacar ES y DI de la pila POP DS POP SI POP CX POP AX CLC RET mx_find_tsr ENDP
/********************************************************************/ /* */ /* TSRKILL 1.3 - Utilidad de desinstalacin de TSRs normalizados. */ /* Compilar en el modelo Large de Borland C. */ /* */ /********************************************************************/
int tsr_convenio(), mx_unload(), existe_xms(); void liberar_umb(), 7
desinstalar();
void main (int argc, char **argv) { int mxid; struct tsr_info far *tsr;
printf ("\nTSRKILL 1.3\n"); if ((((mxid=atoi(argv[1]))<0xc0) || (mxid>0xFF)) && (mxid!=-1)) { printf (" - Indicar nmero Mx. ID (TSRLIST) entre 192 y 255"); printf (" (-1 todos los TSR).\n"); exit (1); }
if (mxid==-1) { for (mxid=0xc0; mxid<=0xFF; mxid++) if (tsr_convenio(mxid, &tsr)) desinstalar (mxid); } else desinstalar (mxid); }
void desinstalar (int mxid) { int vector, correcto; char far *nombre, *p, cadena [80], cadaux[80];
correcto=mx_unload (mxid, &vector, &nombre);
if (correcto || (vector<0x100)) { strcpy (cadaux, nombre); p=cadaux; while (*p) if ((*p++)==':') *(p-1)=0; p=cadaux; while (*p++); strcpy (cadena, p); /* nombre programa */ strcat (cadena, " "); while (*p++); strcat (cadena, p); /* versin */ strcat (cadena, " de "); strcat (cadena, cadaux); /* autor */ }
if (correcto) printf(" - Desinstalado el %s\n", cadena); else { if (vector==0x100) printf (" - No hay TSR %u o no es del convenio.\n", mxid); else if (vector==0x101) printf (" - HBREAK es demasiado fuerte para TSRKILL.\n"); else if (vector==0x102) printf (" - 2MGUI es demasiado fuerte para TSRKILL.\n"); else { printf (" - El %s no se puede desinstalar: ", cadena); printf ("fallo en el vector %02X.\n", vector); } } }
int mx_unload (int mxid, int *interrupcin, char far **tsrnombre) { int mx, posible, vx, vector, i, nofincadena; 8
unsigned intptr, iniciotsr, tablaptr[256][2], sgm, ofs; char numvect; struct tsr_info far *tsr, far *tsrx; struct REGPACK r; void interrupt (*interr)();
if (!tsr_convenio (mxid, &tsr)) { *interrupcin=0x100; return (0); }
numvect = peekb(FP_SEG(tsr), tsr->vectores_id-1); for (i=0; i<256; i++) tablaptr[i][0]=tablaptr[i][1]=0;
for (posible=1, vx=0; posible && (vx<numvect); vx++) { vector = peekb(FP_SEG(tsr), tsr->vectores_id+5*vx); intptr = FP_SEG(getvect(vector)) + (FP_OFF(getvect(vector)) >> 4); nofincadena=1; mx=0xC0; while (posible && nofincadena) { if (tsr_convenio (mx, &tsrx)) { iniciotsr=tsrx->segmento_real; /* el OFFSET se desprecia */ i=peekb(FP_SEG(tsrx), tsrx->vectores_id-1); while ((peekb(FP_SEG(tsrx),tsrx->vectores_id+5*(i-1))!=vector) && i) i--; if (i && (intptr>=iniciotsr)&&(intptr<=iniciotsr+tsrx->ltsr)) if (mx==mxid) nofincadena=0; else { tablaptr[vx][0]=FP_SEG(tsrx); tablaptr[vx][1]=tsrx->vectores_id+5*(i-1)+1; intptr=peek(tablaptr[vx][0],tablaptr[vx][1]+2) + ((unsigned) peek(tablaptr[vx][0],tablaptr[vx][1]) >>4); mx=0xBF; /* compensar incremento posterior */ } } if (mx==0xFF) posible=0; else mx++; } }
void liberar_umb (unsigned segmento) { long controlador;
asm { push es; push si; push di; mov ax,4310h int 2Fh mov word ptr controlador,bx mov word ptr controlador+2,es mov ah,11h mov dx,segmento call controlador pop di; pop si; pop es; } }
2. Describa la direccin base de reloj de tiempo real de la PC y realizar un programa para poder tener acceso a dicho reloj en lectura y escritura. IRQ8 70 No existe Reloj de tiempo real*
10
3. Describir las interrupciones por hardware usadas en la PC cuales estn ocupadas y cuales disponibles. Las interrupciones de hardware son aquellas interrupciones que se producen como resultado de, por lo general, una operacin de E/S. No son producidas por ninguna instruccin de un programa sino por las seales que emiten los dispositivos perifricos para indicarle al procesador que necesitan ser atendidos. Cuando el microprocesador accede a un perifrico (disco duro, puerto de comunicacin...), puede transcurrir algn tiempo antes de que los datos sean obtenidos o transmitidos. La solucin ms simple es esperar hasta recibir los datos o hasta que se haya efectuado la transmisin (polling), pero esta solucin bloquea todos los programas en ejecucin, y eso no puede admitirse en un sistema multitarea. Por ello, en los sistemas modernos se prefiere un funcionamiento mediante interrupciones, ya que stas permiten mejorar la productividad del procesador, de forma que este ltimo puede ordenar una operacin de E/S y, en lugar de tener que realizar una espera activa, se puede dedicar a atender a otro proceso o aplicacin hasta que el dispositivo est de nuevo disponible, siendo dicho dispositivo el encargado de notificar al procesador mediante la lnea de interrupcin que ya est preparado para continuar/terminar la operacin de E/S. Las excepciones son un tipo de interrupcin sincrnica tpicamente causada por una condicin de error en un programa, como por ejemplo una divisin entre 0 o un acceso invlido a memoria en un proceso de usuario. Normalmente genera un cambio de contexto a modo supervisor para que el sistema operativo atienda el error. As pues, las excepciones son un mecanismo de proteccin que permite garantizar la integridad de los datos almacenados tanto en el espacio de usuario como en el espacio kernel. Cuando el Sistema Operativo detecta una excepcin intenta solucionarla, pero en caso de no poder simplemente notificar la condicin de error a la aplicacin/usuario y abortar la misma.
4. Describir el procedimiento para acceder a una interrupcin. En sistemas ms modernos utilizan la arquitectura APIC de Intel con 24 lneas y 8 extra para enrutar las interrupciones PCI. Cuando un perifrico desea acceder a un recurso, enva un pedido de interrupcin al procesador para llamar su atencin. Los perifricos cuentan con un nmero de interrupcin que se denomina IRQ (Peticiones de Interrupcin. Es como si cada perifrico tirara de un "hilo" que est atado a una campana para sealarle al equipo que desea que le preste atencin. Este "hilo" es, de hecho, una lnea fsica que conecta cada ranura de expansin as como cada interfaz E/S a la placa madre. Para una ranura ISA de 8 bits, por ejemplo, hay 8 lneas IRQ que unen ranuras ISA de 8 bits a la placa madre (IRQ0 a IRQ7). Estos IRQ estn controlados por un "controlador de interrupcin" que se encarga de cederle la palabra al IRQ que posee la mayor prioridad. 11
Al aparecer las ranuras de 16 bits, se agregaron IRQ 8 a 15. En consecuencia , fue necesario agregar un segundo controlador de interrupcin. Los dos grupos de interrupciones estn unidos por IRQ 2 el cual se conecta (o "produce una cascada") a IRQ9. En cierto modo, esta cascada "inserta" IRQ 8 a 15 entre IRQ1 y 3:
Dado que la prioridad va del IRQ inferior al superior y que se insertan IRQ 8 a 15 entre IRQ 1 y 3, el orden de prioridad es el siguiente: 0 > 1 > 8 > 9 > 10 > 11 > 12 > 13 > 14 > 15 > 3 > 4 > 5 > 6 > 7
5. Describir las interrupciones por software usadas en la PC cuales estn ocupadas y cuales disponibles. Las interrupciones por software, tambin denominadas llamadas al sistema, son aquellas generadas por un programa mientras este est ejecutndose. En general, actan de la siguiente manera: 1. Un programa que se vena ejecutando luego de su instruccin I5 , llama al Sistema Operativo, por ejemplo para leer un archivo de disco (cuando un programa necesita un dato exterior , se detiene y pasa a cumplir con las tareas de recoger ese dato). 12
2. A tal efecto, luego de I5 existe en el programa, la instruccin de cdigo de mquina CD21, simbolizada INT 21 en Assembler, que realiza el requerimiento del paso 1. Puesto que no puede seguir la ejecucin de la instruccin I6 y siguientes del programa hasta que no se haya ledo el disco y est en memoria principal dicho archivo, virtualmente el programa se ha interrumpido, siendo, adems, que luego de INT 21, las instrucciones que se ejecutarn no sern del programa, sino del Sistema Operativo. ( se detiene el programa y ordena en este caso mediante INT21 ( interrupcin predefinida ) que recoge el dato solicitado, para poder sequir el programa que la ordeno ). 3. La ejecucin de INT 21 permite hallar la subrutina del Sistema Operativo. 4. Se ejecuta la subrutina del Sistema Operativo que prepara la lectura del disco. 5. Luego de ejecutarse la subrutina del Sistema Operativo, y una vez que se haya ledo el disco y verificado que la lectura es correcta, el Sistema Operativo ordenar reanudar la ejecucin del programa autointerrumpido en espera. 6. La ejecucin del programa se reanuda.
6. Describir el setup de la PC, las opciones de configuracin y los parmetros.
13
Parmetros del Setup Standart CMOS SETUP Pantalla de presentacin del programa SETUP Esta pantalla muestra informacin con respecto de los siguientes tems: Fecha y hora del sistema. Parmetros de los dispositivos IDE. Tipo de unidad de disquete. Tipo de video instalado. En que situaciones el sistema deber detenerse durante el arranque. BIOS FEATURES SETUP o ADVANCED CMOS SETUP Las opciones ms importantes son: -Virus Warning: Permite, habilitar o deshabilitar la proteccin del sector de arranque del disco duro. -CPU L2 Cach: habilita o deshabilita la memoria cache externa (L2). -Quick Power On Self Test: esta opcin permite habilitar o deshabilitar la velocidad para el test de arranque (POST). -Boot Sequence: Este parmetro permite determinar el orden de bsqueda con respecto a la unidad por la que arrancar el sistema operativo. -Boot Up Numlock Status: habilita o deshabilita la tecla Numlock, la habilitacin de la misma permite que el trabajo con el teclado numrico, se cargue automticamente. -Security Option Mediante esta opcin se determina si el (password) definido en la opcin PASSWORD SETTING, ser solicitado solamente para ingresar al setup, o al sistema. CHIPSET FEATURES SETUP -SDRAM Frequency: permite indicar la frecuencia de la SDRAM. -AGP Mode: permite configurar el modo AGP de trabajo. -USB Controller: se utiliza para habilitar o deshabilitar los puertos USB. -Onchip Sound: permite habilitar o deshabilitar la placa de sonido onboard. POWER MANAGEMENT SETUP En esta opcin podemos determinar los tiempos a los cuales se desea que los dispositivos se apaguen temporalmente, controlando su consumo de energa. 14
PNP/PCI CONFIGURATION Maneja las variables que afectan al sistema Plug & Play y a los buses PCI, administrando los recursos del sistema, con el fin de evitar conflictos. El valor por defecto es automtico. INTEGRATED PERIPHERALS En l estn integrados los controladores del disco rgido, del disco flexible, de los puertos series, del puerto paralelo, USB, etc. Con est opcin podemos determinar los parmetros de cada uno de estos dispositivos perifricos. El uso ms comn es en un caso de reparacin, cuando por algn motivo se daa este control y debemos recurrir a placas externas. Con el fin de no crear un conflicto, se debe deshabilitar el dispositivo daado en la placa madre. CPU PNP SETUP Permite configurar la frecuencia base y el factor de multiplicacin del microprocesador. PASSWORD SETTING o CHANGE PASSWORD En esta opcin puede definir la clave, para la entrada al Setup o al sistema. IDE HDD AUTO DETECTION Detecta en forma automtica los dispositivos IDE, en los Setup actuales estos dispositivos son detectados automticamente sin necesidad de entrar al Setup. SAVE & EXIT SETUP o EXIT Solicita la confirmacin de salir del Setup y almacenar los cambios realizados. EXIT WITHOUT SAVING Abandona el programa Setup sin efectuar el almacenamiento de los cambios realizados. HARDWARE MONITOR SETUP Esta opcin la encontramos en los Setup actuales y nos permite ver la temperatura del micro y del sistema. Tambin nos informa las RPM de los ventiladores y las tensiones de la fuente de alimentacin. A partir de los procesadores de sexta generacin (80686), los chips de memoria ROM son del tipo EEPROM (Electricaly Erasable Programable Read Only Memory) conocidos como Flash-BIOS, este tipo de chip es actualizable mediante software.