Zakończ i pozostań w programie rezydenta - Terminate and stay resident program

Program terminate-and-stay-resident (powszechnie TSR ) to program komputerowy działa pod DOS , który wykorzystuje połączenie systemu do kontroli powrotnego do DOS, jakby to się zakończy, ale pozostaje w pamięci komputera, dzięki czemu można go reaktywować później. Ta technika częściowo pokonała ograniczenia DOS-u dotyczące wykonywania tylko jednego programu lub zadania na raz. TSR są używane tylko w DOS, nie w Windows .

Niektóre programy TSR to programy narzędziowe, które użytkownik komputera może wywołać kilka razy dziennie podczas pracy w innym programie za pomocą skrótu klawiszowego . Borland Sidekick był wczesnym i popularnym przykładem tego typu. Inne służą jako sterowniki urządzeń dla sprzętu , którego system operacyjny nie obsługuje bezpośrednio.

Posługiwać się

Normalnie DOS może uruchomić tylko jeden program na raz. Gdy program się kończy, zwraca sterowanie do DOS za pomocą wywołania systemowego INT 21h/4Ch . Wykorzystana pamięć i zasoby systemowe są następnie oznaczane jako nieużywane. Uniemożliwia to ponowne uruchomienie części programu bez konieczności ponownego załadowania całości. Jeśli jednak program kończy się wywołaniem systemowym INT 27h lub INT 21h/31h , system operacyjny nie wykorzystuje ponownie określonej części swojej pamięci.

Pierwotne połączenie, INT 27h , nazywa się „zakończ, ale pozostań rezydentem”, stąd nazwa „TSR”. Korzystając z tego wywołania, program może zapełnić do 64 KB swojej pamięci rezydentnej. MS-DOS w wersji 2.0 wprowadził ulepszone wywołanie, INT 21h/31h ('Keep Process'), które usunęło to ograniczenie i pozwoliło programowi zwrócić kod wyjścia . Przed wykonaniem tego wywołania, program może zainstalować jeden lub kilka programów obsługi przerwań wskazujących na siebie, aby można było je wywołać ponownie. Zainstalowanie wektora przerwań sprzętowych umożliwia takiemu programowi reagowanie na zdarzenia sprzętowe. Zainstalowanie wektorów przerwań programowych umożliwia wywoływanie go przez aktualnie uruchomiony program. Zainstalowanie procedury obsługi przerwań zegarowych pozwala na okresowe uruchamianie TSR (patrz ISA i programowalny zegar interwałowy , szczególnie rozdział " Kompatybilny z IBM PC ").

Typowa metoda użycia wektora przerwań polega na odczytaniu jego bieżącej wartości (adresu), zapisaniu jej w przestrzeni pamięci TSR i zastąpieniu jej adresem we własnym kodzie. Przechowywany adres jest wywoływany z TSR, w efekcie tworząc pojedynczo powiązaną listę obsługi przerwań , zwanych również procedurami obsługi przerwań lub ISR-ami. Ta procedura instalowania ISR jest nazywana łączeniem lub przechwytywaniem przerwania lub wektora przerwań.

Łącząc wektory przerwań, TSR mogą przejąć pełną kontrolę nad komputerem. TSR może mieć jedno z dwóch zachowań:

  • Przejmij pełną kontrolę nad przerwaniem, nie wywołując innych TSR, które wcześniej zmieniły ten sam wektor przerwań.
  • Kaskaduj z innymi TSR-ami, wywołując stary wektor przerwań. Można to zrobić przed lub po wykonaniu rzeczywistego kodu. W ten sposób TSR mogą utworzyć łańcuch, w którym każdy wywołuje następny.

Metoda „zakończ i pozostań rezydentem” jest używana przez większość wirusów DOS i innego złośliwego oprogramowania, które może przejąć kontrolę nad komputerem lub pozostać w tle. To złośliwe oprogramowanie będzie reagować na zdarzenia wejścia/wyjścia dysku lub zdarzenia wykonania, infekując pliki wykonywalne (.EXE lub .COM) po uruchomieniu oraz pliki danych po ich otwarciu.

TSR można załadować w dowolnym momencie; albo podczas sekwencji DOS Startup (na przykład z AUTOEXEC.BAT ), lub na życzenie użytkownika (na przykład Borland „s Sidekick i Turbo Debugger, Quicken za QuickPay lub osobisty kalendarz FunStuff Software). Części samego DOSu używają tej techniki, szczególnie w wersjach DOS 5.0 i późniejszych. Na przykład, edytor wiersza poleceń DOSKEY i różne inne narzędzia są instalowane przez uruchomienie ich w wierszu poleceń (ręcznie lub z AUTOEXEC.BAT lub INSTALLz poziomu CONFIG.SYS ) zamiast ładowania ich jako sterowników urządzeń za pomocą DEVICEinstrukcji w CONFIG. SYS.

Niektóre TSRy nie mają możliwości wyładowania się, więc pozostaną w pamięci aż do ponownego uruchomienia. Jednak rozładowanie jest możliwe zewnętrznie, przy użyciu narzędzi takich jak kombinacja MARK.EXE / RELEASE.EXE przez oprogramowanie TurboPower lub miękkiego restartu TSR, które przechwycą określoną kombinację klawiszy i zwolni wszystkie ładowane po nich TSRy. Ponieważ łańcuch ISR jest połączony pojedynczo, a TSR może przechowywać link do swojego poprzednika w dowolnym miejscu, nie ma ogólnego sposobu na usunięcie się TSR z łańcucha. Tak więc zwykle kod pośredniczący musi pozostać w pamięci podczas rozładowywania TSR, powodując fragmentację pamięci. Ten problem dał początek ramom współpracy TSR, takim jak TesSeRact i AMIS.

Przerwij udostępnianie

Aby poradzić sobie z problemami z wieloma TSR-ami współdzielącymi to samo przerwanie, Ralf D. Brown zaproponował metodę zwaną Alternate Multiplex Interrupt Specification (AMIS) jako ulepszenie w stosunku do wcześniej używanych usług oferowanych przez INT 2Fh. AMIS zapewnia sposoby współdzielenia przerwań programowych w kontrolowany sposób. Jest wzorowany na IBM Interrupt Sharing Protocol , pierwotnie wynaleziony do współdzielenia przerwań sprzętowych procesora x86. Usługi AMIS są dostępne za pośrednictwem Int 2Dh.

W swoich czasach propozycja nigdy nie zyskała szerokiej popularności wśród programistów. Istniał obok kilku innych konkurencyjnych specyfikacji o różnym stopniu zaawansowania.

Błędy

Choć bardzo przydatne, a nawet niezbędne do przezwyciężenia ograniczeń DOS -a, TSR mają reputację osób sprawiających problemy. Wiele z nich przechwytuje system operacyjny na różne udokumentowane lub nieudokumentowane sposoby, często powodując awarie systemów podczas ich aktywacji lub dezaktywacji, gdy są używane z określonymi aplikacjami lub innymi TSR-ami. Jak wyjaśniono powyżej, niektóre wirusy i inne złośliwe oprogramowanie zostały zakodowane jako TSR i celowo sprawiają kłopoty. Dodatkowo w systemie DOS wszystkie programy, nawet te z dużą ilością fizycznej pamięci RAM , muszą być załadowane do pierwszych 640  KB pamięci RAM ( pamięć konwencjonalna ). TSR nie są wyjątkiem i pobierają fragmenty z tego 640 KB, które są w ten sposób niedostępne dla innych aplikacji. Oznaczało to, że napisanie TSR było wyzwaniem polegającym na osiągnięciu dla niego jak najmniejszego rozmiaru i sprawdzeniu zgodności z wieloma produktami oprogramowania różnych dostawców — często bardzo frustrującym zadaniem.

Pod koniec lat 80. i na początku lat 90. wiele gier wideo na platformę PC przekraczało ten limit i pozostawiało coraz mniej miejsca na sterowniki TSR — nawet te niezbędne, takie jak sterowniki CD-ROM — oraz takie rozmieszczenie rzeczy, aby było wystarczająco dużo wolnej pamięci RAM do uruchomienia gry, przy jednoczesnym zachowaniu niezbędnych TSR-ów, stały się czarną sztuką. Wielu graczy miało kilka dysków rozruchowych z różnymi konfiguracjami dla różnych gier. W późniejszych wersjach MS-DOS skrypty "menu startowego" pozwalały na wybór różnych konfiguracji za pomocą jednego "dysku startowego". Od połowy do późniejszych lat dziewięćdziesiątych, podczas gdy wiele gier było wciąż pisanych dla DOS, limit 640 KB został ostatecznie pokonany przez umieszczenie części danych lub kodu gry powyżej pierwszego 1 MB pamięci i użycie kodu poniżej 640 KB w celu uzyskania dostępu do rozszerzona pamięć (przy użyciu metod rozszerzeń DOS ), z kodem zamienianym na najniższy 1 MB pamięci RAM jako nakładki . Ponieważ programowanie z wieloma nakładkami jest wyzwaniem samym w sobie, gdy program był zbyt duży, aby zmieścić się w całości w około 512 KB, użycie pamięci rozszerzonej prawie zawsze odbywało się za pomocą ekstendera DOS innej firmy implementującego VCPI lub DPMI , ponieważ staje się znacznie łatwiej i szybciej uzyskać dostęp do pamięci powyżej granicy 1 MB i możliwe jest uruchomienie kodu w tym obszarze, gdy procesor x86 jest przełączany z trybu rzeczywistego do trybu chronionego . Jednakże, ponieważ DOS i większość programów DOS działa w trybie rzeczywistym (VCPI lub DPMI sprawia, że ​​program w trybie chronionym wygląda jak program trybu rzeczywistego dla DOS i reszty systemu poprzez przełączanie się między tymi dwoma trybami), TSR DOS i urządzenie sterowniki również działają w trybie rzeczywistym, więc za każdym razem, gdy ktoś przejmie kontrolę, przedłużacz DOS musi przełączyć się z powrotem do trybu rzeczywistego, dopóki nie zrzeknie się kontroli, ponosząc karę czasową (chyba że wykorzystują techniki takie jak DPMS lub CLOAKING ).

Powrót

Wraz z pojawieniem się płyt z rozszerzoną pamięcią, a zwłaszcza procesorów Intel 80386 w drugiej połowie lat 80., stało się możliwe wykorzystanie pamięci powyżej 640 KB do ładowania TSR. Wymagało to złożonych rozwiązań programowych, zwanych menedżerami rozszerzonej pamięci . Niektórzy menedżerowie pamięci są QRAM i QEMM przez Quarterdeck , 386 MAX przez Qualitas , CEMM przez Compaq i później EMM386 przez Microsoft . Obszary pamięci nadające się do ładowania TSR powyżej 640 KB są nazywane „ górnymi blokami pamięci ” (UMB), a ładowanie programów do nich nazywa się ładowaniem wysokim . Później menedżerowie pamięci zaczęli włączać programy takie jak Quarterdeck's Optimize lub Microsoft's MEMMAKER, które próbują zmaksymalizować dostępną przestrzeń w pierwszych 640 KB poprzez określenie, jak najlepiej alokować TSR pomiędzy małą i dużą ilością pamięci.

Spadek

Wraz z rozwojem gier wykorzystujących rozszerzenia DOS (wczesnym przykładem był Doom ), który ominął barierę 640 KB, wiele problemów związanych z TSR-ami zniknęło, a wraz z powszechnym przyjęciem systemu Microsoft Windows, a zwłaszcza Windows 95 (a następnie Windows 98 ) – co sprawiło, że większość TSR-ów była niepotrzebna, a niektóre TSR-y niekompatybilne – TSR stał się przestarzały, chociaż aplikacje Win16 mogą wykonywać sztuczki podobne do TSR, takie jak łatanie tablicy deskryptorów przerwań (IDT), ponieważ Windows na to pozwolił.

Windows Me i Windows NT (ten ostatni włącznie z konsumenckimi systemami operacyjnymi od Windows XP ) działają cały czas w trybie chronionym lub długim , uniemożliwiając przełączenie się w tryb rzeczywisty, który jest potrzebny do działania TSR-ów. Zamiast tego te systemy operacyjne mają nowoczesne struktury sterowników i usług z ochroną pamięci i wielozadaniowością z wywłaszczaniem , co pozwala na jednoczesne działanie wielu programów i sterowników urządzeń bez potrzeby stosowania specjalnych sztuczek programistycznych; jądra i jego moduły zostały dokonane wyłącznie odpowiedzialny za modyfikację przerwania tabeli.

Zobacz też

Bibliografia

Zewnętrzne linki