Ukončit a zůstat rezidentním programem - Terminate and stay resident program

Program terminate-and-stay-resident (obyčejně TSR ) je počítačový program běžící pod DOS , který používá systémové volání k vrátit řízení DOS, jako by to bylo hotové, ale zůstává v paměti počítače, takže jej lze znovu aktivovat později. Tato technika částečně překonala omezení systému DOS provádět pouze jeden program nebo úkol najednou. TSR se používají pouze v systému DOS, nikoli ve Windows .

Některé TSR jsou obslužný software, který může uživatel počítače vyvolat několikrát denně při práci v jiném programu pomocí klávesové zkratky . Borland Sidekick byl raný a populární příklad tohoto typu. Jiné slouží jako ovladače zařízení pro hardware, který operační systém přímo nepodporuje.

Použití

Za normálních okolností může DOS spustit současně pouze jeden program. Když program skončí, vrátí řízení DOSu pomocí systémového volání INT 21h/4Ch . Použitá paměť a systémové prostředky jsou poté označeny jako nevyužité. To znemožňuje restartovat části programu, aniž byste museli celý znovu načíst. Pokud však program skončí systémovým voláním INT 27h nebo INT 21h/31h , operační systém určitou specifikovanou část paměti znovu nepoužije.

Původní hovor, INT 27h , se nazývá „ukončit, ale zůstat rezidentní“, odtud název „TSR“. Pomocí tohoto volání může program vytvořit až 64 kB rezidentní paměti. MS-DOS verze 2.0 zavedl vylepšené volání INT 21h/31h ('Keep Process'), které toto omezení odstranilo a nechalo program vrátit kód ukončení . Před provedením tohoto volání může program nainstalovat jeden nebo několik obslužných programů přerušení směřujících do sebe, aby jej bylo možné znovu volat. Instalace vektoru přerušení hardwaru umožňuje takovému programu reagovat na události hardwaru. Instalace vektoru přerušení softwaru umožňuje jeho vyvolání aktuálně spuštěným programem. Instalace obslužné rutiny přerušení časovače umožňuje, aby TSR běžel pravidelně (viz ISA a programovatelný intervalový časovač , zejména část „ Kompatibilní s IBM PC “).

Typický způsob použití vektoru přerušení zahrnuje čtení jeho současné hodnoty (adresy), jeho uložení do paměťového prostoru TSR a jeho nahrazení adresou ve vlastním kódu. Uložená adresa je volána z TSR, ve skutečnosti tvoří jednotlivě propojený seznam obsluh přerušení , nazývaných také rutiny služby přerušení nebo ISR. Tento postup instalace ISR se nazývá řetězení nebo zaháknutí přerušení nebo vektor přerušení.

Zřetězením vektorů přerušení mohou TSR převzít úplnou kontrolu nad počítačem. TSR může mít jedno ze dvou chování:

  • Převezměte úplnou kontrolu nad přerušením tím, že nebudete volat jiné TSR, které dříve změnily stejný vektor přerušení.
  • Kaskádujte s jinými TSR voláním starého vektoru přerušení. To lze provést před nebo po spuštění jejich skutečného kódu. TSR tak mohou tvořit řetězec, kde každý volá další.

Metodu terminate-and-stay-resident používá většina virů DOS a dalšího malwaru, který může buď převzít kontrolu nad PC, nebo zůstat na pozadí. Tento malware bude reagovat na vstupně -výstupní operace nebo události spuštění infikováním spustitelných souborů (.EXE nebo .COM) při spuštění a datových souborů při jejich otevření.

TSR lze načíst kdykoli; buď během spouštěcí sekvence DOS (například z AUTOEXEC.BAT ), nebo na žádost uživatele (například Borland 's Sidekick a Turbo Debugger, Quicken's QuickPay nebo FunStuff Software Personal Calendar). Části samotného systému DOS používají tuto techniku, zejména v systému DOS verze 5.0 a novější. Například editor příkazového řádku DOSKEY a různé další nástroje se instalují tak, že je spustíte na příkazovém řádku (ručně nebo z AUTOEXEC.BAT nebo INSTALLz prostředí CONFIG.SYS ), než je načtete jako ovladače zařízení pomocí DEVICEpříkazů v CONFIG. SYS.

Některé TSR se nemohou samy uvolnit, takže zůstanou v paměti až do restartu. Vykládání je však možné externě pomocí nástrojů, jako je MARK.EXE / RELEASE.EXE combo od TurboPower Software nebo soft restart TSR, které zachytí konkrétní kombinaci kláves a uvolní všechny TSR načtené po nich. Protože řetězec ISR je jednotlivě propojen a TSR může ukládat odkaz na svého předchůdce kdekoli, neexistuje, neexistuje obecný způsob, jak by se TSR mohl z řetězce odstranit. Při vykládce TSR tedy obvykle musí být v paměti ponechán útržek, což způsobuje fragmentaci paměti. Tento problém dal vzniknout rámcům spolupráce TSR, jako jsou TesSeRact a AMIS.

Přerušit sdílení

Pro zvládnutí problémů s mnoha TSR sdílejícími stejné přerušení navrhl Ralf D. Brown metodu nazvanou Alternate Multiplex Interrupt Specification (AMIS) jako vylepšení oproti dříve používaným službám nabízeným prostřednictvím INT 2Fh. AMIS poskytuje způsoby, jak kontrolovaně sdílet softwarová přerušení . Je modelován podle protokolu IBM Interrupt Sharing Protocol , původně vyvinutého pro sdílení hardwarových přerušení procesoru x86. Služby AMIS jsou k dispozici prostřednictvím Int 2Dh.

Tento návrh nikdy nezískal mezi programátory ve své době široké uplatnění. Existoval vedle několika dalších konkurenčních specifikací různé náročnosti.

Poruchy

Přestože jsou TSR velmi užitečné, nebo dokonce nezbytné k překonání omezení DOS , mají pověst problémových výrobců. Mnoho únosů operačního systému různými dokumentovanými nebo nezdokumentovanými způsoby, což často způsobuje selhání systémů při jejich aktivaci nebo deaktivaci při použití s ​​konkrétními aplikacemi nebo jinými TSR. Jak bylo vysvětleno výše, některé viry a další malware byly kódovány jako TSR a jsou záměrně problematické. Navíc v systému DOS musí být všechny programy, dokonce i ty, které mají velké množství fyzické paměti RAM , načteny do prvních 640  kB RAM ( konvenční paměť ). TSR nejsou výjimkou a berou kusy z těchto 640 KB, které tak nejsou k dispozici pro jiné aplikace. To znamenalo, že sepsání TSR bylo výzvou k dosažení co nejmenších velikostí a kontrola kompatibility s mnoha softwarovými produkty od různých dodavatelů - často velmi frustrující úkol.

Na konci osmdesátých a na začátku devadesátých let se mnoho videoher na platformě PC postavilo proti tomuto limitu a ponechávalo TSR stále méně prostoru-dokonce i ty zásadní, jako jsou ovladače CD-ROM -a uspořádání věcí tak, aby bylo k dispozici dostatek volné paměti RAM ke spuštění. z her, při zachování nezbytných TSR přítomných, se stala černá magie. Mnoho hráčů mělo několik zaváděcích disků s různými konfiguracemi pro různé hry. V novějších verzích systému MS-DOS umožňovaly skripty „zaváděcí nabídky“ vybrat různé konfigurace pomocí jediného „zaváděcího disku“. V polovině devadesátých let, zatímco mnoho her bylo stále psáno pro DOS, byl limit 640 kB nakonec překonán umístěním částí dat nebo kódu hry nad první 1 MB paměti a použitím kódu pod 640 KB pro přístup k rozšířená paměť (pomocí metod rozšíření DOS ), přičemž kód se jako překrytí prohodí do nejnižší 1 MB RAM . Protože programování s mnoha překryvy je samo o sobě výzvou, jakmile byl program příliš velký na to, aby se vešel do přibližně 512 kB, bylo použití rozšířené paměti téměř vždy prováděno pomocí extenderu DOS jiného výrobce implementujícího VCPI nebo DPMI , protože se stal mnohem jednodušší a rychlejší přístup k paměti nad hranicí 1 MB a možnost spuštění kódu v této oblasti, když je procesor x86 přepnut z reálného režimu do chráněného režimu . Protože však DOS a většina programů DOS běží v reálném režimu (VCPI nebo DPMI způsobí, že program v chráněném režimu bude vypadat jako program v reálném režimu pro DOS a zbytek systému přepínáním tam a zpět mezi těmito dvěma režimy), DOS TSR a zařízení ovladače také běží v reálném režimu, a tak kdykoli se někdo dostane k ovládání, musí se extender DOS přepnout zpět do reálného režimu, dokud se nevzdá řízení, což mu způsobí časovou penalizaci (pokud nepoužívají techniky jako DPMS nebo CLOAKING ).

Vrátit se

S příchodem desek s rozšířenou pamětí a zejména procesorů Intel 80386 ve druhé polovině 80. let 20. století bylo možné využívat paměť nad 640 KB k načítání TSR. To vyžadovalo komplexní softwarová řešení s názvem správci rozšířené paměti . Někteří správci paměti jsou QRAM a QEMM od Quarterdeck , 386 MAX od Qualitas , CEMM od Compaq a později EMM386 od Microsoftu . Paměťové oblasti použitelné pro načítání TSR nad 640 KB se nazývají „ bloky horní paměti “ (UMB) a načítání programů do nich se nazývá načítání vysoko . Později začali správci paměti zahrnovat programy jako Quarterdeck's Optimize nebo Microsoft MEMMAKER, které se snaží maximalizovat dostupné místo v prvních 640 KB určením, jak nejlépe rozdělit TSR mezi nízkou a vysokou pamětí.

Pokles

S vývojem her využívajících rozšiřovače DOS (raným příkladem byl Doom ), který obešel bariéru 640 kB, mnoho problémů souvisejících s TSR zmizelo a s rozšířeným přijetím Microsoft Windows a zejména Windows 95 (následovaný Windows 98 ) - což způsobilo, že většina TSR byla zbytečná a některé TSR nekompatibilní-TSR vybledl do zastarání, ačkoli aplikace Win16 mohou dělat triky podobné TSR, jako je záplatování tabulky deskriptoru přerušení (IDT), protože to systém Windows umožňoval.

Windows Me a Windows NT (ten druhý včetně spotřebitelských operačních systémů od Windows XP ) běží neustále v chráněném nebo dlouhém režimu, čímž znemožňují přepnutí do reálného režimu, který je nezbytný pro fungování TSR. Místo toho mají tyto operační systémy moderní rámce ovladačů a služeb s ochranou paměti a preventivním multitaskingem , což umožňuje současný běh více programů a ovladačů zařízení bez potřeby speciálních programovacích triků; jádro a jeho moduly byly vyrobeny výhradně zodpovědný za úpravu tabulky přerušení.

Viz také

Reference

externí odkazy