stringtranslate.com

Programa de terminación y permanencia de residente

Un programa residente de terminación y permanencia (comúnmente TSR ) es un programa de computadora que se ejecuta en DOS y utiliza una llamada al sistema para devolver el control a DOS como si hubiera terminado, pero permanece en la memoria de la computadora para que pueda reactivarse más tarde. [1] Esta técnica superó parcialmente la limitación de DOS de ejecutar solo un programa o tarea a la vez. Los TSR se utilizan sólo en DOS, no en Windows .

Algunos TSR son software de utilidad que un usuario de computadora puede utilizar varias veces al día, mientras trabaja en otro programa, mediante una tecla de acceso rápido . Borland Sidekick fue un ejemplo temprano y popular de este tipo. Otros sirven como controladores de dispositivos para hardware que el sistema operativo no admite directamente.

Usar

Normalmente DOS sólo puede ejecutar un programa a la vez. Cuando un programa finaliza, devuelve el control a DOS mediante la llamada al sistema INT 21h/4Ch de la API de DOS . [2] La memoria y los recursos del sistema utilizados se marcan como no utilizados. Esto hace imposible reiniciar partes del programa sin tener que recargarlo todo. Sin embargo, si un programa finaliza con la llamada al sistema INT 27h o INT 21h/31h , el sistema operativo no reutiliza una determinada parte especificada de su memoria.

La llamada original, INT 27h , se llama "terminar pero permanecer residente", de ahí el nombre "TSR". Usando esta llamada, un programa puede hacer residentes hasta 64 KB de su memoria. La versión 2.0 de MS-DOS introdujo una llamada mejorada, INT 21h/31h ("Mantener proceso"), que eliminó esta limitación y permitió que el programa devolviera un código de salida . Antes de realizar esta llamada, el programa puede instalar uno o varios controladores de interrupciones que apunten hacia sí mismo, para poder volver a llamarlo. La instalación de un vector de interrupción de hardware permite que dicho programa reaccione a eventos de hardware. La instalación de un vector de interrupción de software permite que el programa que se está ejecutando actualmente lo llame. La instalación de un controlador de interrupciones del temporizador permite que un TSR se ejecute periódicamente (utilizando un temporizador de intervalos programable ).

El método típico de utilizar un vector de interrupción implica leer su valor actual (la dirección), almacenarlo en el espacio de memoria del TSR y reemplazarlo con una dirección en su propio código. La dirección almacenada se llama desde el TSR, formando de hecho una lista unidireccional de manejadores de interrupciones , también llamadas rutinas de servicio de interrupciones o ISR. Este procedimiento de instalación de ISR se llama encadenar o enganchar una interrupción o un vector de interrupción.

Los TSR se pueden cargar en cualquier momento; ya sea durante la secuencia de inicio de DOS (por ejemplo, desde AUTOEXEC.BAT ), o a petición del usuario (por ejemplo, Sidekick y Turbo Debugger de Borland , QuickPay de Quicken o Calendario personal de FunStuff Software). Algunas partes del propio DOS utilizan esta técnica, especialmente en las versiones de DOS 5.0 y posteriores. Por ejemplo, el editor de línea de comandos DOSKEY y varias otras utilidades se instalan ejecutándolas en la línea de comandos (manualmente, o desde AUTOEXEC.BAT o desde CONFIG.SYS ) en lugar de cargarlos como controladores de dispositivo mediante declaraciones en CONFIG. SIS.INSTALLDEVICE

Algunos TSR no tienen forma de descargarse, por lo que permanecerán en la memoria hasta el reinicio. Sin embargo, la descarga es posible externamente, utilizando utilidades como el combo MARK.EXE/RELEASE.EXE de TurboPower Software o TSR de reinicio suave que detectarán una combinación de teclas específica y liberarán todos los TSR cargados después de ella. Como la cadena de ISR está unida individualmente y un TSR puede almacenar el vínculo con su predecesor en cualquier lugar que elija, no existe una forma general para que un TSR se elimine de la cadena. Por lo tanto, normalmente se debe dejar un resguardo en la memoria al descargar un TSR, lo que provoca la fragmentación de la memoria. Este problema dio lugar a marcos de cooperación TSR como TesSeRact y AMIS. [3]

Interrumpir el intercambio

Para gestionar los problemas con muchos TSR que comparten la misma interrupción, Ralf D. Brown propuso un método llamado Especificación de interrupción múltiplex alternativa (AMIS) como una mejora con respecto a los servicios utilizados anteriormente ofrecidos a través de INT 2Fh. AMIS proporciona formas de compartir interrupciones de software de forma controlada. Está modelado a partir del Interrupt Sharing Protocol de IBM, originalmente inventado para compartir interrupciones de hardware de un procesador x86. Los servicios AMIS están disponibles vía Int 2Dh. [4]

La propuesta nunca ganó una gran aceptación entre los programadores en su época. Existía junto con otras especificaciones competitivas de diversa sofisticación. [5]

Fallos

Aunque son muy útiles, o incluso esenciales, para superar las limitaciones de DOS , los TSR tienen fama de crear problemas. Muchos secuestran el sistema operativo de diversas formas, documentadas o no, y a menudo provocan que los sistemas se bloqueen al activarse o desactivarse cuando se utilizan con aplicaciones concretas u otros TSR.

Al encadenar los vectores de interrupción, los TSR pueden tomar el control total de la computadora. Un TSR puede tener uno de dos comportamientos:

La mayoría de los virus de DOS y otros programas maliciosos utilizan el método de terminar y permanecer residente , que puede tomar el control de la PC o permanecer en segundo plano. Este malware puede reaccionar a la E/S del disco o a eventos de ejecución infectando archivos ejecutables (.EXE o .COM) cuando se ejecuta y archivos de datos cuando se abren.

Además, en DOS todos los programas, incluso aquellos con grandes cantidades de RAM física , deben cargarse en los primeros 640  KB de RAM (la memoria convencional ). Los TSR no son una excepción y toman partes de esos 640 KB que, por lo tanto, no están disponibles para otras aplicaciones. Esto significaba que escribir un TSR era un desafío: lograr el tamaño más pequeño posible y verificar su compatibilidad con una gran cantidad de productos de software de diferentes proveedores, lo que a menudo era una tarea muy frustrante.

A finales de los 80 y principios de los 90, muchos videojuegos en la plataforma de PC superaron este límite y dejaron cada vez menos espacio para los TSR (incluso los esenciales como los controladores de CD-ROM ) y para organizar las cosas de modo que hubiera suficiente RAM libre para ejecutar. Los juegos, aunque mantuvieron presentes los TSR necesarios, se volvieron muy complicados. Muchos jugadores tenían varios discos de arranque con diferentes configuraciones para diferentes juegos. En versiones posteriores de MS-DOS, los scripts del "menú de inicio" permitían seleccionar varias configuraciones a través de una única entrada de menú. A mediados y finales de la década de 1990, mientras muchos juegos todavía se escribían para DOS, el límite de 640 KB finalmente se superó colocando partes de los datos del juego por encima del primer MB de memoria y usando el código por debajo de 640 KB para acceder a la memoria extendida. utilizando memoria expandida (EMS) mediante el uso de la técnica de superposición . Un enfoque alternativo posterior fue cambiar la CPU al modo protegido utilizando extensores de DOS y ejecutar el programa en modo protegido. Este último permitía tener código y datos en el área de memoria extendida. [ cita necesaria ]

Debido a que programar con muchas superposiciones es un desafío en sí mismo, una vez que el programa era demasiado grande para caber completamente en aproximadamente 512 KB, el uso de la memoria extendida casi siempre se hacía usando un extensor de DOS de terceros que implementaba VCPI o DPMI , porque se vuelve Es mucho más fácil y rápido acceder a la memoria por encima del límite de 1 MB, y es posible ejecutar código en esa área, cuando el procesador x86 cambia del modo real al modo protegido . Sin embargo, dado que DOS y la mayoría de los programas de DOS se ejecutan en modo real (VCPI o DPMI hacen que un programa en modo protegido parezca un programa en modo real para DOS y el resto del sistema al alternar entre los dos modos), los TSR de DOS y los controladores de dispositivos también se ejecutan en modo real, por lo que cada vez que uno obtiene el control, el extensor de DOS tiene que volver al modo real hasta que cede el control, lo que incurre en una penalización de tiempo (a menos que utilicen técnicas como DPMS o CLOAKING ).

Devolver

Con la llegada de las placas de memoria expandida y especialmente de los procesadores Intel 80386 en la segunda mitad de la década de 1980, fue posible utilizar memoria superior a 640 KB para cargar TSR. Esto requirió soluciones de software complejas, denominadas administradores de memoria expandida . Algunos administradores de memoria son QRAM y QEMM de Quarterdeck , 386 MAX de Qualitas, CEMM de Compaq y posteriormente EMM386 de Microsoft . Las áreas de memoria que se pueden utilizar para cargar TSR superiores a 640 KB se denominan " bloques de memoria superiores " (UMB) y cargar programas en ellos se denomina carga alta . Más tarde, los administradores de memoria comenzaron a incluir programas como Quarterdeck's Optimize o MEMMAKER de Microsoft , que intentan maximizar el espacio disponible en los primeros 640 KB determinando la mejor manera de asignar TSR entre la memoria baja y alta.

Rechazar

Con el desarrollo de juegos que utilizaban extensores de DOS (un ejemplo temprano fue Doom ), que superaron la barrera de los 640 KB, muchos de los problemas relacionados con los TSR desaparecieron, y con la adopción generalizada de Microsoft Windows y especialmente de Windows 95 (seguido de Windows 98 ). lo que hizo que la mayoría de los TSR fueran innecesarios y algunos TSR fueran incompatibles: el TSR se volvió obsoleto, aunque las aplicaciones Win16 pueden realizar trucos similares a los TSR, como parchear la tabla de descriptores de interrupciones (IDT), porque Windows lo permitió. Windows Me no permite iniciar en un kernel de DOS cerrando Windows Me; por lo tanto, los TSR se volvieron inútiles en Windows Me.

La serie Windows NT (incluidos Windows 2000 , Windows XP y posteriores) reemplazó a DOS por completo y se ejecuta en modo protegido o modo largo (solo versiones posteriores de 64 bits) todo el tiempo, lo que desactiva la capacidad de cambiar al modo real, que es necesario. para que los TSR funcionen. En cambio, estos sistemas operativos tienen marcos de controladores y servicios modernos con protección de memoria y multitarea preventiva , lo que permite que múltiples programas y controladores de dispositivos se ejecuten simultáneamente sin la necesidad de trucos de programación especiales; el núcleo y sus módulos han sido responsabilizados exclusivamente de modificar la tabla de interrupciones.

Ver también

Referencias

  1. ^ Maybury, Rick (1998). "Vence al error: virus informáticos". Consejos principales para PC . Consultado el 9 de febrero de 2012 .
  2. ^ [1] Referencia de ayuda para PC: INT 21,0 - Terminación del programa
  3. ^ "una lista de bibliotecas TSR". Archivado desde el original el 17 de agosto de 2007.También conocidos como marcos.
  4. ^ "int 2D". Archivado desde el original el 1 de diciembre de 2017 . Consultado el 14 de noviembre de 2019 .
  5. ^ "Bibliotecas TSR". 2016-06-19. Archivado desde el original el 19 de junio de 2016 . Consultado el 14 de noviembre de 2019 .

enlaces externos