Vous êtes sur la page 1sur 11

Administración de Memoria

La organización y administración de la memoria principal de un sistema ha sido y es uno de los


factores más importantes en el diseño de los Sistemas Operativo

Los programas y datos deben estar en el almacenamiento principal para:

 Poderlos ejecutar.
 Referenciarlos directamente.

Se considera almacenamiento secundario al generalmente soportado en discos.

Los hechos demuestran que generalmente los programas crecen en requerimientos de


memoria tan rápido como las memorias:

La parte del S. O. que administra la memoria se llama administrador de la memoria y sus


principales funciones son:

 Llevar un registro de las partes de memoria que se están utilizando y de aquellas que no.
 Asignar espacio en memoria a los procesos cuando estos la necesitan.
 Liberar espacio de memoria asignada a procesos que han terminado.

La Importancia de esta Administración de memoria radica en que lleva un control total de la


memoria que se está usando en el momento dentro del sistema operativo y también la que no,
así hace más eficiente el sistema.

Los programas y datos tienen que estar en la memoria principal para poder ejecutarse o ser
referenciados Los programas y datos que no son necesarios de inmediato pueden mantenerse
en el almacenamiento secundario.

El almacenamiento principal es más costoso y menor que el secundario pero de acceso más
rápido. Y a su vez el cache que es más rápido que el primario también es más costoso, Los
sistemas con varios niveles de almacenamiento requieren destinar recursos para administrar el
movimiento de programas y datos entre niveles.

Estrategias de Administración de Memoria

Las Estrategias de Administración de Memoria están dirigidas a la obtención del mejor uso
posible del recurso del almacenamiento principal. Se dividen en las siguientes categorías:

 Estrategias de búsqueda:
o Estrategias de búsqueda por demanda.
o Estrategias de búsqueda anticipada.
 Estrategias de colocación.
 Estrategias de reposición.

Las estrategias de búsqueda están relacionadas con el hecho de cuándo obtener el siguiente


fragmento de programa o de datos para su inserción en la memoria principal.

En la búsqueda por demanda el siguiente fragmento de programa o de datos se carga al


almacenamiento principal cuando algún programa en ejecución lo referencia.

Se considera que la búsqueda anticipada puede producir un mejor rendimiento del sistema.

Las estrategias de colocación están relacionadas con la determinación del lugar de la memoria


donde se colocará (cargará) un programa nuevo.

Las estrategias de reposición están relacionadas con la determinación de qué fragmento de


programa o de datos desplazar para dar lugar a los programas nuevos.

Mono-programación sin intercambio o paginación

Cuando solo se tiene un proceso que ocupe la memoria a la vez, el esquema de la


administración de la memoria es el más sencillo que hay. Sin embargo, éste método ya no tiene
aplicación en la actualidad, ya que era visto en las computadoras con sistemas operativos de un
solo usuario y una sola tarea. El usuario introducía su disco a la computadora (por lo general, la
máquina no contaba con disco duro) y ejecutaba su aplicación, la cual acaparaba toda la
máquina.

Es decir en este método solo hay un proceso trabajando en memoria a la vez. Por lo tanto es
un método Mono tarea y mono usuario.

Multiprogramación con particiones fijas


Para poder realizar la multiprogramación, se puede hacer uso de particiones fijas o variables en
la memoria. En el caso de las particiones fijas, la memoria se puede organizar dividiéndose en
diversas partes, las cuales pueden variar en tamaño. Esta partición la puede hacer el usuario en
forma manual, al iniciar una sesión con la máquina.

Una vez efectuada la partición, hay dos maneras de asignar los procesos a ella. La primera es
mediante el uso de una cola única que asigna los procesos a los espacios disponibles de la
memoria conforme se vayan desocupando. El tamaño del hueco de memoria disponible es
usado para localizar en la cola el primer proceso que quepa en él. Otra forma de asignación es
buscar en la cola el proceso de tamaño mayor que se ajuste al hueco, sin embargo hay que
tomar en cuenta que tal método discrimina a los procesos más pequeños. Dicho problema
podría tener solución si se asigna una partición pequeña en la memoria al momento de hacer la
partición inicial, el cual sería exclusivo para procesos pequeños.

Esta idea nos lleva a la implementación de otro método para particiones fijas, que es el uso de
diferentes colas independientes exclusivas para cierto rango en el tamaño de los procesos. De
esta manera al llegar un proceso, éste sería asignado a la cola de tamaño más pequeño que la
pueda aceptar. La desventaja en esta organización es que si una de las colas tiene una larga lista
de procesos en espera, mientras otra cola esta vacía, el sector de memoria asignado para ese
tamaño de procesos estaría siendo desperdiciado.

Grado de Multiprogramación
El Grado de Multiprogramación no es más que el número de procesos que actualmente están
cargados en memoria principal (en cualquier estado) y eventualmente podrán correr.

El número de particiones de la memoria va a determinar el grado de multiprogramación del


sistema, ya que si en cada partición hay un proceso y hay 3 particiones solo podré tener 3
procesos simultáneamente, si quisiera tener un grado de multiprogramación más elevado
necesitaré una mayor cantidad de particiones.

¿Cómo analizar el desempeño de un Sistema Operativo multiprogramado? 


El desempeño de un sistema operativo multiprogramado puede ser analizado usando factores
como el tiempo de procesamiento, la cantidad de procesos que se están procesando, el uso
total de CPU, el uso total de Memoria y entre otros.

El objetivo del análisis de desempeño, es poder ver cual es el aprovechamiento del CPU en
función del numero de procesos en memoria, y a su vez apreciar cual es el porcentaje de
desperdicio de CPU.

Reubicación y protección
La multiprogramación introduce dos problemas fundamentales que deben resolverse:
reubicación y protección. Diferentes trabajos deben ejecutarse en direcciones diferentes como
se puede ver en la figura superior. Cuando se enlaza un programa (es decir, cuando se
combinan el programa principal, los procedimientos escritos por el usuario y los
procedimientos de biblioteca en un único espacio de direcciones), el enlazador (linker) necesita
saber en qué dirección de la memoria comenzará el programa.

Por ejemplo, supongamos que la primera instrucción es una llamada a un procedimiento que
está en la dirección absoluta 100 dentro del archivo binario producido por el enlazador. Si este
programa se carga en la partición 1 (en la dirección 100K), esa instrucción saltará a la dirección
absoluta 100, que está dentro del sistema operativo. Lo que se necesita es una llamada a 100K
+ 100. Si el programa se carga en la partición 2, la llamada deberá llevarse a cabo como una
llamada a 200K + 100, y así sucesivamente. Este problema se conoce como el problema de la
reubicación.

Una posible solución consiste en modificar las instrucciones a medida que el programa se carga
en la memoria. Los programas cargados en la partición 1 tendrán cada dirección incrementada
en 100K, los programas cargados en la partición 2 tendrán sus direcciones incrementadas en
200K, y así sucesivamente. Para realizar la reubicación durante la carga de esa manera, el
enlazador deberá incluir en el programa binario una lista o mapa de bits que indique qué
palabras del programa son direcciones a reubicar y cuáles son códigos de operación, constantes
u otras cosas que no deben reubicarse. OS/MFT trabajaba de esta manera.

La reubicación durante la carga no resuelve el problema de la protección. Un programa


malicioso siempre puede construir una nueva instrucción y saltar a ella. Puesto que los
programas en este sistema utilizan direcciones de memoria absolutas en vez de direcciones
relativas a un registro, no hay ninguna manera de impedir que un programa construya una
instrucción que lea o escriba en cualquier palabra de la memoria. En los sistemas multiusuario
es altamente indeseable dejar que los procesos lean y escriban en la memoria perteneciente a
otros usuarios.

La solución que IBM escogió para proteger el 360 fue dividir la memoria en bloques de 2 KB y
asignar un código de protección de 4 bits a cada bloque. El registro de estado, denominado en
el 360 PSW (Program Status Word), contenía una clave de 4 bits. El hardware del 360
provocaba una excepción tras cualquier intento por parte del proceso en ejecución de acceder
a un bloque de memoria cuyo código de protección difiriera de la clave contenida en la PSW.
Puesto que sólo el sistema operativo puede modificar los códigos de protección y la clave, se
impedía así que los procesos de usuario interfiriesen unos con otros y con el sistema operativo
mismo.

Otra solución alternativa para tanto el problema de la reubicación como el de la protección


consiste en equipar la máquina con dos registros especiales de hardware, llamados el registro
de base y el registro de límite. Cuando se planifica un proceso, se carga el registro de base con
la dirección donde comienza su partición, y el registro de límite se carga con la longitud de la
partición. Cada vez que se genera una dirección de memoria, se le suma de forma automática el
contenido del registro de base antes de enviarla a la memoria. Por ejemplo, si el registro base
contiene el valor 100K, una instrucción CALL 100 se convierte efectivamente en una instrucción
CALL 100K + 100, sin que la instrucción en sí se modifique. También se comparan las direcciones
con el registro de límite para asegurar que no intentan direccionar memoria fuera de la
partición actual. El hardware protege los registros de base y de límite para evitar que los
programas de usuario los modifiquen.

Una desventaja de este esquema es la necesidad de efectuar una suma y una comparación
cada vez que se hace referencia a la memoria. Las comparaciones pueden hacerse
rápidamente, pero las sumas son lentas debido al tiempo de propagación del acarreo a menos
que se utilicen circuitos especiales de suma.

El CDC 6600 – el primer supercomputador del mundo – utilizaba este esquema. La CPU Intel
8088 incorporada en el PC original de IBM, utilizaba una versión más débil de este esquema:
registros de base, pero sin registros de límite. En la actualidad son pocos los ordenadores (si es
que hay alguno) que utilicen este esquema.

Interrupciones (Definición y Propósito)


Las interrupciones son un mecanismo por el que un dispositivo externo puede provocar que el
procesador interrumpa momentáneamente la ejecución del programa para atender su petición
y luego continuar con el programa desde el punto en que lo había dejado.

Con el procesador 8086 se amplía este concepto y permite que un programa pueda generar una
interrupción en cualquier momento. A este tipo de interrupciones se las conoce como
interrupciones software para diferenciarlas de las interrupciones hardware, generadas por
dispositivos externos al procesador. Existen, no obstante, de 8 a 15 interrupciones que no se
llaman de la misma forma que las interrupciones de software, sino mediante el controlador de
interrupciones, como interrupciones hardware.

Las Interrupciones de Hardware sirven para que el procesador pueda identificar cuando es
posible que este pueda usar estos dispositivos de hardware y a su vez identificar quien tiene
mayor prioridad según la declaración inicial.

Un programa escrito en un lenguaje de alto nivel utiliza funciones de la biblioteca estándar,


provista por el compilador empleado, para realizar la mayoría de las tareas relacionadas con el
manejo de los dispositivos de entrada y salida, y la gestión de los archivos y memoria. La
mayoría de dichas funciones hacen su trabajo mediante llamadas al sistema. Una llamada al
sistema invoca a una rutina provista por el sistema operativo para realizar una tarea. En algunas
ocasiones la función de biblioteca accede directamente al hardware para realizar su tarea si es
que no existe una rutina del sistema operativo o el desempeño de ésta no es adecuado

Un programa escrito en ensamblador, normalmente no tiene a su disposición una biblioteca de


funciones estándar y por lo tanto para realizar las tareas relacionadas con el manejo de los
dispositivos de entrada y salida, y la gestión de los archivos y memoria deberá hacerlo mediante
llamadas al sistema

El propósito de las interrupciones es generar brincos entre rutinas para crear la ilusión del
multitasking y también para permitir la adquisición de datos de los periféricos de entrada de un
ordenador aun cuando se este ejecutando un programa particular.

Vector de Interrupciones
En informática el vector de interrupciones es un vector que contiene el valor que apunta a la
dirección en memoria del gestor de una interrupción. En muchas arquitecturas de computación
típicas, los vectores de interrupción se almacenan en una tabla en una zona de memoria, la
llamada tabla de vectores de interrupción, de modo que cuando se atiende una petición de
interrupción de número n, el sistema, tras realizar eventualmente algunas tareas previas (tales
como salvar el valor de ciertos registros) transfiere el control a la dirección indicada por el
elemento n-ésimo de dicha tabla.

Usualmente, en las arquitecturas más típicas, la transferencia de control se efectuará de modo


análogo a una llamada a función a nivel de máquina, almacenándose en una pila el estado
actual del registro contador de programa, que será recuperado por una instrucción máquina de
retorno de interrupción, que restaurará el estado correspondiente a la ejecución normal de
programa forzando la ejecución de la siguiente instrucción.

TABLA DE INTERRUPCIONES DEL SISTEMA 

INT 00: División por cero  INT 02: No Enmascarable (NMI) 


INT 01: Ejecución paso a paso  INT 03: Puntos de ruptura 
INT 04: Desbordamiento (INTO)  INT 29: DOS TTY (impresión en pantalla) 
INT 05: Volcar pantalla por impresora INT 2A: Red local MS net 
(BIOS)  INT 2B-2D: Uso interno del DOS 
INT 06: Código de operación incorrecto  INT 2E: Procesos Batch (DOS) 
INT 07: Reservada  INT 2F: Multiplex (DOS) 
INT 08: IRQ 0: Contador de hora del INT 30: Compatibilidad CP/M-80 (xx:YYyy
sistema (BIOS)  en JMP XXxx:YYyy) 
INT 09: IRQ 1: Interrupción de teclado INT 31: Compatibilidad CP/M-80 (XX en JMP
(BIOS)  XXxx:YYyy) 
INT 0A: IRQ 2: canal E/S, segundo 8259 del INT 32: Reservada 
AT  INT 33: Controlador del ratón 
INT 0B: IRQ 3: COM2  INT 34-3F: Reservadas 
INT 0C: IRQ 4: COM1  INT 40: Interrupción de disquete (BIOS) 
INT 0D: IRQ 5: disco duro XT, LPT2 en AT, INT 41: Parámetros del disco duro 1
retrazo vertical PCjr  (BIOS) 
INT 0E: IRQ 6: Controlador del disquete  INT 42: Apunta a la INT 10h original del
INT 0F: IRQ 7: LPT1  BIOS si existe VGA 
INT 10: Servicios de vídeo (BIOS)  INT 43: Caracteres gráficos EGA (BIOS) 
INT 11: Listado del equipo (BIOS)  INT 44-45: Reservadas 
INT 12: Tamaño de memoria (BIOS)  INT 46: Parámetros del disco duro 2
INT 13: Servicios de disco (BIOS)  (BIOS) 
INT 14: Comunicaciones en serie (BIOS)  INT 47-49: Reservadas 
INT 15: Servicios del sistema (BIOS)  INT 4A: Alarma del usuario 
INT 16: Servicios de teclado (BIOS)  INT 4B-5F: Reservadas 
INT 17: Servicios de impresora (BIOS)  INT 60-66: Para uso de los programas 
INT 18: IBM Basic (ROM del BASIC)  INT 67: Interrupción de EMS (controlador
INT 19: Arranque del sistema (BIOS)  EMS) 
INT 1A: Fecha/hora del sistema  INT 68-6F: Reservadas 
INT 1B: Acción de CTRL-BREAK (BIOS)  INT 70: IRQ 8: Reloj de tiempo real AT (2º
INT 1C: Proceso periódico del usuario chip 8259-AT) 
(Usuario)  INT 71: IRQ 9: IRQ 2 redireccionada (2º
INT 1D: Parámetros de vídeo (BIOS)  chip 8259-AT) 
INT 1E: Parámetros del disquete (BIOS)  INT 72: IRQ 10: reservada (2º chip 8259-
INT 1F: Tabla de caracteres gráficos AT) 
(BIOS)  INT 73: IRQ 11: reservada (2º chip 8259-
INT 20: Fin de programa (DOS)  AT) 
INT 21: Servicio del sistema operativo INT 74: IRQ 12: interrupción de ratón IBM
(DOS)  (2º chip 8259-AT) 
INT 22: Dirección de terminación (DOS)  INT 75: IRQ 13: error de coprocesador
INT 23: DOS CTRL-BREAK (DOS)  matemático (2º chip 8259-AT) 
INT 24: Manipulador de errores críticos INT 76: IRQ 14: controlador disco fijo (2º
(DOS)  chip 8259-AT) 
INT 25: Lectura absoluta de disco (DOS)  INT 77: IRQ 15: reservada (2º chip 8259-
INT 26: Escritura absoluta en disco (DOS)  AT) 
INT 27: Terminar permaneciendo residente INT 78-7F: Reservadas 
(DOS)  INT 80-85: Reservadas para el Basic 
INT 28: DOS Idle (programas residentes INT 86-F0: Usadas por el Basic 
que usan funciones DOS)  INT F1-FF: Para uso de los programas
Proceso de Interrupción
Dependiendo del tipo de interrupción que se ejecute, el comportamiento puede variar un poco
pero, de manera general se ejecuta de la siguiente forma:
1. Se salva el valor de contador de programa, IP, en la pila, de manera que en la CPU, al
terminar el proceso, pueda seguir ejecutando el programa a partir de la última
instrucción.
2. La CPU salta a la dirección donde está almacenada la rutina de servicio de interrupción
(ISR, Interrupt Service Routine).
3. Se ejecuta esa rutina que tiene como objetivo atender al dispositivo que generó la
interrupción.
4. Se borran los flags y bits de interrupción.
5. Una vez que la rutina de la interrupción termina, el procesador restaura el estado que
había guardado en la pila en el paso 2 y retorna al programa que se estaba usando
anteriormente.
Interrupciones de Software

También son conocidas como “falsas interrupciones” ya que se producen como consecuencia
de la ejecución de otra instrucción al no ser el hardware las que las produce. Otra forma de
entender estas interrupciones, es verlas desde el punto de vista de llamadas a subrutinas,
lógicamente, la gracia está en que esas subrutinas no son nuestras, sino que son las propias de
cada sistema operativo, driver o similar tiene. Quedaros pues, con que somos nosotros los que
hacemos invocamos a la interrupción. Este tipo de interrupción es el más habitual en la
programación.

 Las interrupciones de software son invocadas a través de la instrucción INT del 8086. La
mayoría de las interrupciones de software son vectoreadas a (DSRs) localizado en el BIOS, o en
programas de aplicación. 

La instrucción de interrupción por software INT

Los procesadores la familia de INTEL80x86 ejecutan la misma secuencia de operaciones para la


instrucción de interrupción por software (INT) como para las interrupciones por hardware. En
ambos casos, el control del CPU se transfiere a un programa denominado manejador de
interrupción. La instrucción INT se complementa con la instrucción IRET, que es la instrucción
utilizada por el manejador de interrupciones para regresar el control del CPU al programa que
ha sido interrumpido.
Cuando ocurre una instrucción INT, ya sea generada por el hardware o por el programa, el CPU
conserva el estado actual del registro de banderas (FLAGS) guardándolo en la pila. Entonces se
limpia la bandera de interrupciones y se coloca el valor 0 en la bandera TRAP. Limpiar la
bandera IF es igual que ejecutar la instrucción CLI (Clear Interrupt), en ambos casos se
deshabilitan las interrupciones y se asegura que el CPU no sea interrumpido hasta que
procedimiento de INT realice su tarea crítica. Un manejador de interrupciones puede habilitar
las interrupciones tan pronto como termine, utilizando la instrucción STI (Set Interrupt) para
que otra interrupción pueda ocurrir. La instrucción STI se puede omitir si el código del
manejador es muy corto.

Después el CPU guarda el valor actual del registro CS colocándolo en la pila. Entonces se carga
el CS que corresponde al manejador de interrupciones que se encontraba almacenado en la
tabla del vector de interrupciones. La tabla del vector de interrupciones se encuentra al fondo
de la memoria RAM. La tabla se indexa multiplicando el número de la interrupción por 4 y
después sumándole 2. Esto es:

El valor actual del IP se guarda colocándolo en la pila. El nuevo IP se carga con el valor del offset
del manejador de instrucciones almacenado en el vector de interrupciones. La tabla del vector
de interrupciones se indexa multiplicando el valor de la interrupción por 4. Esto es:

Este procedimiento le pasa el control al procedimiento apuntado por el nuevo CS:IP. Cualquier
registro que utilice el manejador debe almacenarse en la pila, y cuando termine su tarea se
deben restablecer los valores que se almacenaron en la pila a sus respectivos registros. Si el
manejador es una interrupción por hardware, entonces le informa al PIC (Programable
Interrupt Controller) que a finalizado enviandolo un EOI (End Of Interrupt).

Lo último que hace un manejador de interrupciones es ejecutar la instrucción IRET. La


instrucción IRET regresa el control del CPU al proceso interrumpido haciendo lo opuesto a la
instrucción INT. Esto es, toma una palabra de la pila (2 bytes) y la coloca en el IP, y que es
el offset de la siguiente instrucción que se ejecutará. La siguiente palabra se saca de la pila y se
almacena en el registro CS y que corresponde al segmento de la siguiente instrucción a
ejecutarse. La última palabra que se recupera de la pila se almacena en el registro de bandera
(FLAGS).

Este proceso le regresa el control al programa interrumpido. Puesto que el estado de la


máquina se ha restablecido (esto es, el valor de los registros) a como estaban, el programa
interrumpido no se da cuenta que fue suspendido y continúa su ejecución sin cambios.

La técnica del vector de interrupciones proporciona una forma muy pura para hacer
modificaciones a las interrupciones de los programas sin cambiar las formas de las funciones
del CPU. Todo lo que se debe hacer es cambiar las direcciones de puntos de entrada en la tabla.
Los cambios más comunes en los programas de manejo de interrupciones (o programas de
servicio) se hacen cuando se carga un sistema operativo.
INT 0: Error de división, generada automáticamente cuando el cociente no cabe en el registro o
el divisor es cero. Sólo puede ser generada mediante DIV o IDIV. El 8088/8086 guardan en la
pila la sentencia siguiente a la que causó la excepción, mientras que el 286 y superiores
guardan la sentencia que la generó.

INT 3: Utilizada para poner puntos de ruptura en la depuración de programas.

BOUND reg16, mem32. Verifica que el valor contenido en el registro se encuentre entre los dos
valores indicados en la memoria (un valor está dado por los dos primeros bytes, y el otro por los
dos últimos). Si está fuera de rango se ejecuta una interrupción interna de tipo 5. De esta
manera se puede observar que BOUND es una instrucción de interrupción condicional,
como INTO.

Interrupciones de Hardware. 
Este tipo de interrupción es invocado directamente por los dispositivos hardware de nuestro
ordenador, por lo que “son bastante más auténticas” que las anteriores. Al producir algún
dispositivo hardware la interrupción el controlador de interrupciones o PIC se encarga de
gestionarla determinando, en el caso de producirse más de una interrupción a la vez, cual de
ellas tiene más prioridad y debe de ser gestionada por la CPU. El funcionamiento de este tipo de
interrupciones es bastante similar y se suele utilizar mucho para la programación de sistemas
de comunicaciones.

INTR (Interrupt Request): Por esta entrada se introduce una interrupción que es aceptada o no
según haya sido previamente indicado por las instrucciones EI (Permitir interrupciones) o DI (No
permitir interrupciones). Cuando una interrupción es permitida y ésta se ha producido, la CPU
busca una instrucción RST (de un sólo byte), que es presentada por el bus de datos por el
periférico que interrumpe. Este byte tiene el formato binario 11 XXX 111. La subrutina se
ubicará en la dirección 00 XXX 000.

NMI
Una interrupción no enmascarable (o NMI) es un tipo especial de interrupción usada en la
mayoría de los microordenadores como el IBM PC y el Apple II.

Una interrupción no enmascarable causa que la CPU deje lo que está haciendo, cambie el
puntero de instrucción para que apunte a una dirección particular y continúe ejecutando el
código de esa dirección. Se diferencia de los otros tipos de interrupción en que los
programadores no pueden hacer que la CPU las ignore, aunque algunos ordenadores pueden
por medios externos bloquear esa señal, dando un efecto similar al resto de las interrupciones.

Usos
Al no poderse desactivar son empleadas por dispositivos para los que el tiempo de respuesta es
crítico, como por ejemplo el coprocesador matemático Intel 8087 en el IBM PC, el indicador de
batería baja, o un error de paridad que ocurra en la memoria.

En algunos ordenadores Clónicos las interrupciones no emascarables se usaban para manejar


las diferencias entre su hardware y el original de IBM. Así, si se intentaba acceder a uno de
estos dispositivos se lanzaba una NMI y el BIOS ejecutaba el código para el hardware presente
en esa máquina.

También se podían lanzar NMI por el usuario, permitiendo interrumpir el programa actual para
permitir la depuración. En este caso al lanzarse una NMI se suspendía la ejecución del programa
actual y el control se transfería a un depurador para que el programador pudiera inspeccionar
el estado de la memoria, los registros, etc. Estas NMI eran lanzadas de diferentes maneras,
como pulsando un botón, por medio de una combinación de teclas o por medio de un
programa.

En juegos, se producía una NMI y se interrumpía el juego, de esta manera se podían conseguir
vidas extras por ejemplo modificando el área de memoria donde se guardaban las vidas
restantes.

INTA
Cuanto el procesador está dispuesto a aceptar la petición de interrupción activa una señal de
un bit, llamada INTA. Entonces, el hardware externo envía el identificador de interrupción que
usará el procesador para indexar el vector de interrupciones.

Vous aimerez peut-être aussi