Pregunta

Inspirado por esta pregunta

¿Cómo puedo forzar el desmontaje de GDB?

Me preguntaba sobre el INT 21h como concepto.Ahora tengo un conocimiento muy oxidado de las partes internas, pero no tantos detalles.Recuerdo que en C64 había interrupciones regulares e interrupciones no enmascarables, pero mi conocimiento se detiene aquí.¿Podrías darme alguna pista?¿Es una estrategia relacionada con DOS?

¿Fue útil?

Solución

aquí : Un polivalente DOS interrupción utilizada para diversas funciones, incluyendo la lectura del teclado y la escritura en la consola y la impresora. También se utiliza para leer y escribir discos utilizando el método de bloque de control (FCB) del archivo anterior.

Otros consejos

DOS puede ser pensado como una biblioteca utiliza para proporcionar una abstracción archivos / directorios para el PC (-y un poco más). int 21h es un hardware simple "truco" que hace que sea fácil de llamar al código de esta biblioteca sin saber de antemano dónde se ubicará en la memoria. Alternativamente, se puede pensar en esto como la manera de utilizar la API de DOS.

Ahora, el tema de las interrupciones de software es un problema complejo, en parte debido a que los conceptos han evolucionado con el tiempo como Intel añadió características a la familia x86, al tratar de seguir siendo compatible con el software de edad. Una explicación adecuada tomaría unas pocas páginas, pero voy a tratar de ser breve.

La cuestión principal es si usted está en modo real o modo protegido .

modo real es el simple, modo "original" de operación para el procesador x86. Este es el modo que se ejecuta en DOS (al ejecutar programas DOS bajo Windows, un procesador de modo real es virtualizado, por lo que dentro de él se aplican las mismas reglas). El programa se está ejecutando actualmente tiene el control total sobre el procesador.

En el modo real, no es una tabla de vectores que le indica al procesador que dirección para saltar a por cada interrupción de 0 a 255. Esta tabla está poblada por el BIOS y DOS, así como los controladores de dispositivos y, a veces con programas especiales necesidades. Algunas de estas interrupciones pueden generarse por el hardware (por ejemplo, mediante una pulsación de tecla). Otros son generadas por ciertas condiciones de software (por ejemplo, dividir por 0). Cualquier de ellos pueden ser generados por la ejecución de la int n de instrucciones.

Los programas pueden establecer / borrar el indicador "habilitar las interrupciones"; esta bandera afecta alarmas de proceso solamente y no afecta a int instrucciones.

Los diseñadores DOS optó por utilizar 21h número de interrupción para manejar DOS solicita - el número no es de importancia real: era sólo una entrada no utilizada en ese momento. Hay muchos otros (número de 10h es una rutina de interrupción del BIOS-instalado que se ocupa de los gráficos, por ejemplo). También tenga en cuenta que todo esto es para IBM PC compatibles solamente. procesadores x86 en decir que los sistemas embebidos pueden tener su software e interrumpir mesas dispuestas de manera muy diferente!

modo protegido es el complejo modo, "consciente de la seguridad" que se introdujo en el procesador 286 y mucho extendida en la 386. Se proporciona múltiples niveles de privilegio. El sistema operativo debe configurar todo esto (y si el sistema operativo se equivoca, que tienen un potencial de seguridad explotar). Los programas de usuario se limitan por lo general a un modo de "privilegio mínimo" de la operación, en la que intenta acceder a los puertos de hardware, o cambiar la bandera de interrupción, o acceder a ciertas regiones de memoria, se detiene el programa y permite que el sistema operativo para decidir qué hacer (ya sea por terminado el programa o el programa dará lo que parece querer).

manejo de interrupciones se hace más complejo. Baste decir que, en general, si un programa de usuario hace una interrupción de software, el número de interrupción es no utiliza como un vector en la tabla de interrupciones. Más bien se genera una excepción de protección general y el controlador de sistema operativo para dicha excepción puede (si el sistema operativo es el diseño de esta manera) averiguar qué quiere el proceso y atender la solicitud. Estoy bastante seguro de Linux y Windows en el pasado (si no es en la actualidad) utilizan este tipo de mecanismo para sus llamadas al sistema. Pero hay otras maneras de lograr esto, como la instrucción SYSENTER.

lista de interrupción de Ralph Brown contiene una gran cantidad de información en la que hace lo interrumpa. int 21 , como todos los demás, es compatible con una amplia gama de funcionalidades dependiendo de los valores de registro .

versión no HTML de la lista de Ralph Brown también está disponible.

La instrucción INT es una interrupción de software. Se provoca un salto a una rutina a la que apunta un vector de interrupción, que es una ubicación fija en la memoria. La ventaja de la instrucción INT es que es de sólo 2 bytes de largo, como oposed a quizás 6 para un JMP, y que puede fácilmente ser re-dirigida por modificar el contenido del vector de interrupción.

Int 0x21 es una interrupción de software x86 - básicamente significa que hay una tabla de interrupciones en un punto fijo en la memoria una lista de las direcciones de las funciones de interrupción de software. Cuando una CPU x86 recibe el código de operación de interrupción (o de lo contrario decide que una interrupción de software en particular debe ser ejecutado), que hace referencia a esa tabla para ejecutar una llamada a ese punto (la función en ese punto debe utilizar en lugar de iret ret para volver).

Es posible volver a asignar Int 0x21 y otras interrupciones de software (incluso dentro de DOS aunque esto puede tener efectos secundarios negativos). Una interrupción de software interesante mapa o cadena es Int 0x1C (o 0x08 si se tiene cuidado), que es el sistema de interrupción de pulsos, llamada 18,2 veces por segundo. Esto puede ser usado para crear procesos "de fondo", incluso en modo real de un solo subproceso (el proceso de modo real se interrumpirá 18,2 veces por segundo para llamar a su función de interrupción).

En el sistema operativo DOS (o un sistema que proporciona cierta emulación de DOS, como consola de Windows) Int 0x21 se asigna a lo que es efectivamente el DOS sistemas operativos principal "API". Al proporcionar valores diferentes para el registro AH, diferentes funciones de DOS se pueden ejecutar como la apertura de un archivo (AH = 0x3D) o la impresión en la pantalla (AH = 0x09).

Esto es de gran rel="nofollow El arte de la Asamblea lenguaje de programación sobre interrupciones:

  

En el 80x86, hay tres tipos de eventos comúnmente conocido como   interrumpe: trampas, las excepciones y las interrupciones de hardware (alarmas).   En este capítulo se describen cada una de estas formas y discutir su   apoyo en las máquinas compatibles CPU 80x86 y PC.

     

A pesar de la trampa de términos y la excepción se utilizan como sinónimos, nos   utilizará la trampa término para denotar un programador iniciado y espera   transferencia del control a una rutina especial manipulador. En muchos aspectos, una   trampa es nada más que una llamada de subrutina especializada. muchos textos   consulte trampas como interrupciones de software. La instrucción es 80x86 int   el principal vehículo para la ejecución de una trampa. Tenga en cuenta que las trampas son usualmente   incondicional; es decir, cuando se ejecuta una instrucción int, el control   Siempre transfiere al procedimiento asociado a la trampa. Ya que   trampas ejecutan a través de una instrucción explícita, es fácil determinar   exactamente qué instrucciones en un programa invocará un manejo trampa   rutina.

Capítulo 17 - Estructura de interrupción y de alarma Las rutinas de servicio

(casi) todo el interfaz DOS se hizo disponible como comandos INT21H, con parámetros en los diversos registros. Es un pequeño truco, usando una tabla-de-hardware integrado para saltar al código correcto. También INT 33h era para el ratón.

Es una "interrupción de software"; así que no hay interrupción de hardware en absoluto.

Cuando una aplicación invoca una interrupción de software, que es esencialmente el mismo que el de hacer una llamada a subrutina, excepto que (a diferencia de una llamada a subrutina) al no necesita conocer la dirección exacta de la memoria del código que está invocando.

software del sistema (por ejemplo, DOS y el BIOS) exponer sus APIs a la aplicación como interrupciones de software.

Por tanto, la interrupción de software es un tipo de dinámica-linking.

Para ser precisos, aquí está el enlace directo a la lista de comandos 21H INT de R. Brown: http : //www.ctyme.com/intr/int-21.htm

En realidad, hay una gran cantidad de conceptos aquí. Vamos a empezar con lo básico.

Una interrupción es un medio para solicitar atención por parte de la CPU, a interrupción el flujo del programa actuales, vaya a un controlador de interrupción (ISR - Rutina de Servicio de Interrupción), hacer algún trabajo (por lo general por el sistema operativo kernel o un controlador de dispositivo) y luego regresar.

¿Cuáles son algunos usos típicos para interrupciones?

  • Hardware interrumpe: un dispositivo solicita la atención de la CPU mediante la emisión de una solicitud de interrupción
  • .
  • Las excepciones CPU: Si alguna condición anormal de la CPU pasa, como una división por cero, un fallo de página, ... la CPU salta al controlador de interrupción correspondiente por lo que el sistema operativo puede hacer lo que tiene que hacer (envían una señal al un proceso, se carga una página de intercambio y actualización de la tabla TLB / página, ...).
  • Software interrumpe: Desde una interrupción termina llamando al núcleo del sistema operativo, una forma sencilla de implementar las llamadas al sistema es el uso de las interrupciones. Pero no es necesario que, en x86 se puede utilizar una instrucción de llamada a alguna estructura (una especie de TSS IIRC), y el más reciente x86 existen CONSEJO SYSCALL / SYSENTER.

CPU decidir dónde ir a buscar en una mesa (vectores de excepción, los vectores de interrupción, IVT en modo real x86, IDT en modo protegido x 86, ...). Algunas CPU tiene un único vector de interrupciones de hardware, otra para excepciones y así sucesivamente, y el ISR tiene que hacer un trabajo para identificar al autor de la interrupción. Otros tienen una gran cantidad de vectores, y dirigirse directamente al ISR muy específicas.

x86 tiene 256 vectores de interrupción. En las PC originales, éstos se dividieron en varios grupos:

  • excepciones 00-04 CPU, incluyendo NMI. Con CPUs posteriores (80186, 286, ...), esta gama se expandió, la superposición con los siguientes rangos.
  • 08-0F Estas son las interrupciones de hardware, por lo general se hace referencia como IRQ0-7. El PC-AT añadió IRQ8-15
  • llamadas del BIOS 10-1F. Conceptualmente, estos se pueden considerar las llamadas al sistema, ya que la BIOS es la parte del DOS que depende de la máquina de hormigón (que es como se definió en el CP / M).
  • 20-2F DOS llama. Algunos de estos son multiplexadas, y ofrecen multitud de funciones. La principal es INT 21h, que ofrece la mayor parte de los servicios de DOS.
  • 30-FF El resto, para su uso por los conductores externos y los programas de usuario.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top