Přeskočit na obsah

Terminate and Stay Resident

Z Wikipedie, otevřené encyklopedie

Terminate and Stay Resident (TSR) česky ukončit a ponechat v paměti je v operačním systému DOS označení pro techniku umožňující vytvářet rezidentní programy, které po svém spuštění provedou určitou inicializační činnost, pak předají řízení operačnímu systému, ale zůstanou v paměti RAM počítače a mohou vykonávat různé funkce. Tyto programy často plní stejnou úlohu jako instalovatelné ovladače zařízení – zpřístupňují zařízení, které standardní DOS nepodporuje – myši, CD mechaniky, síťové a zvukové karty a další hardware. Dalšími skupinami byly programy pro tisk na pozadí, síťové ovladače (např. pro přístup k síti NetWare nebo jádro pro komunikaci protokoly TCP/IP), programy pro podporu národního prostředí (např. česká mapa klávesnice a zavaděč národních fontů), a programy, které přímo komunikovaly s uživatelem, od programu pro zadávání semigrafických znaků, přes program pro interaktivní správu rezidentních programů po programy typu Personal Information Manager jako Borland Sidekick, které v jednoúlohovém systému DOS vyvolávaly zdání funkčního multitaskingu. Mechanismus TSR využívalo i množství počítačových virů, aby mohly ovlivňovat činnost počítače kdykoli, nejen v okamžiku spuštění infikovaného programu.

Popis funkce

[editovat | editovat zdroj]

Operačním systém DOS je na rozdíl od pokročilejších systémů Microsoft Windows nebo Linux pouze jednoúlohový, takže v každém okamžiku je možné spustit nejvýše jeden počítačový program. Tato vlastnost umožnila snadné naprogramování jádra DOSu (též MS-DOS, FreeDOS atd.), které nemuselo být reentrantní a nemuselo obsahovat subsystém pro plánování procesů (tzv anglicky scheduler). Absence systémové podpory více programů zároveň ze strany jádra DOSu byla pro uživatele omezující, a proto programátoři často využívali mechanizmu TSR, který mohl vyvolat zdání současného běhu více úloh (tzv. multitasking), který podporují až pokročilejší operační systémy (Microsoft Windows, Linux, Mac OS X a další).

Systém DOS využívá pro komunikaci s uživatelem příkazový řádek (se shellem COMMAND.COM). Po spuštění programu je výzva shellu (anglicky prompt) deaktivována a řízení je předáno spuštěnému programu. Teprve po ukončení programu je po návratu do DOSu (resp. do interpretu COMMAND.COM) výzva znovu aktivována. Systémové volání TSR spuštěný program ukončí, ale ponechá ho v paměti a zároveň je operační paměť alokovaná programem označena jako obsazená. Program fakticky dále nepokračuje, ale zůstává v RAM (označujeme ho jako rezidentní program).

Rezidentní program (též TSR program) musí sám zajistit, že bude vhodným způsobem aktivován (typicky modifikací tabulky přerušení), a zároveň že neporuší omezení samotného jádra DOSu. Rezidentní program nesmí volat systémové služby jádra DOSu, pokud tuto službu volá jiný program. Zároveň musí sám ošetřit své případné výstupy na obrazovku a zajistit, aby jimi nezpůsobil havárii (například zaseknutí grafické karty tím, že do ní bude nesprávně zapisovat, protože není v grafickém, ale textovém režimu).

Rezidentní programy se používaly velmi často jako ovladače počítačové myši, kdy byly aktivovány přerušením přicházejícím od myši přes sériový port. Také se využívaly jako podpora české mapy klávesnice (umožňovaly psaní českých znaků), které byly aktivovány přerušením od klávesnice a vystupovaly jako rozšíření její obsluhy (tzv. obsluha přerušení, též ISR). Stejný princip zneužívaly i počítačové viry, které například „rozšířily“ schopnosti systémových volání pro zápis na pevný disk nebo disketu, čímž si zajistily schopnost vlastního šíření.

Použití TSR

[editovat | editovat zdroj]

Původní volání, INT 27h, se nazývá terminate but stay resident, proto jméno TSR. Použitím tohoto volání, může program vytvořit 64KB jeho rezidentní paměti. MS-DOS verze 2.0 představil vylepšené volání INT 31H 21H - function 'Keep Process', které odstranilo omezení předchozí verze a nechá program vrátit návratový kód. Před provedením tohoto volání, může program nainstalovat do sebe jeden nebo více přerušovacích manipulátorů, takže může být znovu zavoláno. Instalace hardwarového vektoru přerušení umožňuje tomuto programu reagovat na hardwarové události. Instalace softwarového vektoru přerušení umožňuje zavolání v současné době běžícím programem. Instalace obsluhy přerušení časovače umožňuje TSR pravidelné spouštění (viz ISA) programovatelného intervalového časovače, a to zejména v sekci "IBM PC compatible").

Typický způsob využití vektoru přerušení zahrnuje čtení jeho současné hodnoty (adresu), ukládání do paměťového prostoru TSR, a instalaci ukazatele na svůj vlastní kód. Uložené adresy se volají po tom, co TSR obdržel přerušení a dokončil jeho zpracování. Ve skutečnosti tvoří jednotlivě spojený seznam manipulátorů přerušení, také nazývaný 'interrupt service routines', nebo ISR. Tento postup instalace ISR se nazývá řetězení, hákování přerušení nebo vektor přerušení.

Řetězením vektorů přerušení TSR mohou programy získat úplnou kontrolu nad počítačem. TSR může mít jeden ze dvou módů:

  • Získat úplnou kontrolu přerušení volání do ostatních TSR, které byly předtím změněny stejným vektorem přerušení.
  • Kaskády s ostatními TSR se volají starým vektorem přerušení. To může být provedeno před nebo po provedení jejich skutečného kódu. Tímto způsobem vznikne TSR řetěz programů, kde každý z nich volá ten příští.

'Terminate and stay resident' metoda byla použita ve většině MS-DOS virů, které mohou buď převzít kontrolu nad počítačem nebo zůstat v pozadí. Viry mohou reagovat na I/O disku nebo nakazit spustitelné soubory (.EXE nebo .COM), které jsou spuštěny a datové soubory, které jsou otevřeny.

Části DOS, a to zejména ve verzích DOS 5.0 a novější, které používají tuto stejnou techniku u vykonávání užitečných funkcí, jako je například DOSKEY editor příkazové řádky a různé další instalovatelné pomůcky, lze nainstalovat a provozovat je na příkazovém řádku (ručně nebo z AUTOEXEC.BAT), a nikoli jako drivery přes CONFIG.SYS.

Program TSR lze nahrát kdykoliv. Někdy je načten okamžitě poté, co se operační systém nabootuje, tím, že je doslova uložený v AUTOEXEC.BAT dávkovém programu, případně na žádost uživatele (například Borland SideKick a Turbo Debugger nebo Quicken). Tyto programy budou, jak 'TSR' znamená, zůstávat v paměti, zatímco ostatní programy jsou spuštěné. Většina z nich nemá možnost vytažení sebe z paměti, takže volání TSR znamená, že program zůstane v paměti, do restartu. Nicméně vytažení z paměti je možné externě, za použití pomůcek jako MARK.EXE / RELEASE.EXE kombinovaných s TurboPower Software nebo softwarového restartu TSR. Tyto pomůcky chytí specifické kombinace kláves a propustil všechny TSR uložené po nich. Tak jako je řetězec ISR jednotlivě spojen, neexistuje žádné ustanovení jak objevit předchozí manipulátor adresy, nebo informovat své předchůdce, že je třeba aktualizovat jeho "další adresu, na kterou skočit", aby neodkazovaly na TSR, jenž si přejeme odstranit. Toto dalo vzniknout TSR spolupracujícím rámcům, například TesSeRact a AMIS.

Sdílení přerušení

[editovat | editovat zdroj]

K řešení problému s mnoha TSR programy, které mají stejné přerušení, byla Ralfem Brownem navržena metoda tzv. Alternate Multiplex Interrupt Specification (AMIS) zlepšující dříve používané služby, nabízené prostřednictvím INT 2Fh. AMIS poskytuje způsoby, jak sdílet softwarové přerušení kontrolovaným způsobem. Byla vytvořena podle IBM Interrupt Sharing Protocol, původně vyvinutý pro sdílení hardwarového přerušení na procesoru x86.

AMIS služby jsou k dispozici prostřednictvím Int 2Dh.

Návrh ve své době nikdy nezískal širokou podporu mezi programátory. Existoval zároveň s několika jinými konkurenčními specifikacemi různé složitosti.

Přes svoji užitečnost způsobovaly TSR programy problémy. Každý rezidentní program zabírá paměť, a kvůli vlastnostem systému DOS musí být i na počítačích s velkým množstvím fyzické paměti RAM uložen do prvních 640 KB RAM (konvenční paměti), čímž ubírá místo aplikačním programům. Proto bylo vyváření TSR výzvou k minimalizaci obsazené paměti, což byl kvůli požadavkům kompatibility s mnoha softwarovými produkty od různých dodavatelů často velmi frustrující úkol. Vzájemné interakce programů, které využívaly služby operačního systému nedokumentovaným nebo nebezpečným způsobem, mohly způsobovat zaseknutí počítače nebo zhroucení systému. Mechanismus TSR využívaly počítačové viry, které jsou záměrně rušivé.

Okolo roku 1990 přesahovaly paměťové nároky mnoha aplikací, především her, na platformě PC 500 KB, takže při obsazení paměti několika TSR – i těmi základními, jako je ovladač CD-ROM – nebylo možné tyto aplikace spustit, a uspořádání programů tak, aby byl dostatek volné RAM, připomínalo černou magii. Mnoho hráčů používalo několik zaváděcích disků, každý s jinou konfigurací pro jinou hru. Pozdější verze MS-DOSu dovolovaly výběr konfigurace pomocí "boot menu", což umožňovalo použití jediného "boot disku". Ke konci devadesátých letech, když mnoho her bylo ještě psáno pro DOS, byl limit 640 kB nakonec překonán díky používání procesorů Intel 80286 nebo lepších ukládáním částí dat nebo i programového kódu nad prvním 1 MB paměti, čímž se snížil tlak na obsazení prvních 640K paměti. Pro úsporu paměti byl kód organizován jako překryvné moduly. Protože programování s mnoha překryvy je výzva sama o sobě, jakmile byl program příliš velký, aby se úplně vešel do 512 KB, využití rozšířené paměti bylo téměř vždy provedeno pomocí třídílného DOS extenderu podle standardu VCPI nebo DPMI. Pro zpřístupnění paměti nad hranicí 1 MB musí být procesor přepnut z reálného režimu do chráněného režimu. Protože však DOS, TSR, ovladače zařízení a většina programů pro DOS běží v reálném režimu, musí DPMI nebo VCPI přepínat mezi chráněným režimem a reálným režimem, což přináší časové ztráty.

S nástupem desek rozšířené paměti a zejména procesorů Intel 80386 v druhé polovině osmdesátých let, přichází možné použití paměti nad 640 kB k načtení TSR. To vyžadovalo komplexní softwarové řešení s názvem Expanded memory managers, což zajistilo nějaký další volný prostor na několik let. K nejznámějším správcům paměti patřily QRAM a QEMM firmy Quarterdeck, 386Max firmy Qualitas, CEMM firmy Compaq a později EMM386 firmy Microsoft. Oblasti paměti nad adresou 640 kB využitelné pro načítání TSR, se nazývají "upper memory blocks" (UMB) a načítání programů do nich se anglicky nazývá loading high. Programy pro správu paměti začaly později používat programy, které se pokoušely automaticky zjistit, jak nejlépe rozdělit TSR mezi low a high hodnotou paměti (Optimize firmy Quarterdeck nebo MemMaker firmy Microsoft) s cílem maximalizovat dostupný prostor v prvních 640 KB paměti.

S vývojem her a programů využívajících DOS extendery (např. Doom), které obcházely 640 KB bariéru, mnoho problémů s TSR zmizelo, s rozšířením Microsoft Windows, a zejména Windows 95 (následuje Windows 98) - který měl mnoho TSR zbytečných a některé TRS neslučitelné - TSR zastaralé, ale aplikace Win16 mohly dělat triky TSR - jako jsou úpravy tabulky vektorů přerušení, protože reálný režim Windows to dovoloval. TSR nyní zmizely téměř úplně, multitasking operačních systémů jako Windows XP, Windows Vista, Windows 95, Mac OS X, Linux slouží jako zázemí pro více programů a driverů zařízení,které se mohou provozovat současně bez potřeby speciálních programovacích triků, a moderní pojetí chráněné paměti činí jádro a jeho moduly výhradně odpovědné za změnu přerušovací tabulky.

Externí odkazy

[editovat | editovat zdroj]