Anda di halaman 1dari 15

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

BIBLIOGRAFIA .............................................................................................................................. 15

















3

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. */
/* */
/********************************************************************/


#include <dos.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>


struct tsr_info {
unsigned segmento_real;
unsigned offset_real;
unsigned ltsr;
unsigned char info_extra;
unsigned char multiplex_id;
unsigned vectores_id;
unsigned extension_id;
unsigned long validacion;
char autor_nom_ver[80];
};


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++;
}
}

*interrupcin = vector;
*tsrnombre = tsr->autor_nom_ver;

if (strstr(*tsrnombre, "HBREAK")!=NULL) {
posible=0; *interrupcin=0x101; }

if (strstr(*tsrnombre, "2MGUI")!=NULL) {
posible=0; *interrupcin=0x102; }

if (posible) {
for (i=0; i<numvect; i++) {
vector = peekb(FP_SEG(tsr), tsr->vectores_id+5*i);
sgm = peek(FP_SEG(tsr), tsr->vectores_id+5*i+3);
ofs = peek(FP_SEG(tsr), tsr->vectores_id+5*i+1);
if ((tablaptr[i][0]==0) && (tablaptr[i][1]==0)) {
interr=MK_FP(sgm, ofs);
setvect (vector, interr);
}
else {
asm cli
poke (tablaptr[i][0], tablaptr[i][1], ofs);
poke (tablaptr[i][0], tablaptr[i][1]+2, sgm);
asm sti
9

}
}

switch (tsr->info_extra & 3) {
case 0: r.r_es=tsr->segmento_real; r.r_ax=0x4900;
intr (0x21, &r); break;
case 1: if (existe_xms()) liberar_umb (tsr->segmento_real);
break;
}
}
return (posible);
}


int tsr_convenio (int entrada, struct tsr_info far **info)
{
struct REGPACK r;

r.r_ax=entrada << 8;
r.r_es=0x1492; r.r_di=0x1992;
intr (0x2f, &r);
*info = MK_FP(r.r_es, r.r_di-16);
return ((r.r_ax==0xFFFF) &&
(peek(r.r_es,r.r_di-4)==9002) && (peek(r.r_es,r.r_di-2)==10787));
}
int existe_xms ()
{
struct REGPACK r;

r.r_ax=0x4300; intr (0x2F, &r); return ((r.r_ax & 0xFF)==0x80);
}


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.




15

BIBLIOGRAFIA

- http://www.ecured.cu/index.php/Interrupci%C3%B3n_de_Hardware
- http://isa.uniovi.es/docencia/TiempoReal/Recursos/temas/hardware_rt.pdf
- http://www.informaticamoderna.com/Setup.htm
- http://es.kioskea.net/contents/383-interrupciones-irq-y-conflictos-del-
hardware
- es.wikipedia.org

Anda mungkin juga menyukai