Кіріспе

Терминалдан шығу және тұрақты резиденттік бағдарлама (әдетте TSR) – DOS жүйесінде жұмыс істейтін, жүйелік шақыру арқылы бақылауды DOS-қа қайтаратын, бірақ аяқталғандай көрініп, компьютер жадында қалатын компьютерлік бағдарлама. Бұл, оны кейіннен қайта қосуға мүмкіндік береді. Бұл техника DOS-тың бір уақытта тек бір бағдарламаны немесе міндетті орындау шектеуін ішінара жеңілдетті. TSR тек DOS-та қолданылады, Windows-та емес. Кейбір TSR-лер – компьютер пайдаланушысы басқа бағдарламада жұмыс істеп жатқанда, ыстық перне арқылы күніне бірнеше рет шақыра алатын қосымша бағдарламалық құралдар. Borland Sidekick – осы типтің ерте және танымал мысалы. Ал басқалары операциялық жүйе тікелей қолдамайтын аппараттық құрылғылар үшін драйверлер ретінде қызмет етеді.

Қолдану

Әдетте DOS бір мезгілде тек бір бағдарламаны іске қоса алады. Бағдарлама аяқталған кезде ол DOS API-нің жүйелік шақыруын пайдаланып, DOS-қа басқаруды қайтарады. Пайдаланылған жад және жүйелік ресурстар бос деп белгіленеді. Бұл бағдарламаның бөліктерін толығымен қайта жүктеместен қайта іске қосуды мүмкін емес етеді. Дегенмен, егер бағдарлама жүйелік шақыру арқылы немесе , опералық жүйе оның жадының белгілі бір бөлігін қайта пайдаланбайды. Алғашқы шақыру «терминалдау, бірақ резиденттік сақтау» деп аталады, сондықтан «TSR» атауы. Осы шақыруды пайдаланып, бағдарлама 64 КБ-қа дейін жадын резиденттік ете алады. MS DOS 2.0 нұсқасы осы шектеуді жойған және бағдарламаға шығу кодын қайтаруға мүмкіндік беретін жақсартылған шақыруды («Процесті сақтау») енгізді. Бұл шақыруды жасамас бұрын, бағдарлама бір немесе бірнеше үзіліс иегерлерін орната алады, олар қайта шақырылуы мүмкін. Аппараттық үзіліс векторын орнату мұндай бағдарламаның аппараттық оқиғаларға жауап беруіне мүмкіндік береді. Бағдарламалық үзіліс векторын орнату оны қазіргі уақытта іске қосылып жатқан бағдарламамен шақыруға мүмкіндік береді. Таймерлік үзіліс иегерін орнату TSR-ді мерзімді түрде іске қосуға мүмкіндік береді (ISA және бағдарламаланатын интервалдық таймерді, әсіресе «IBM PC-мен үйлесімді» бөлімін қараңыз). Үзіліс векторын пайдалану әдісі оның қазіргі мәнін (адресті) оқуды, оны TSR-дің жад кеңістігінде сақтауды және оны өзінің кодындағы мекенжаймен алмастыруды қамтиды. Сақталған мекенжай TSR-ден шақырылады, нәтижесінде үзіліс иегерлерінің тізбегі құрылады, сондай-ақ үзіліс қызметтік процедуралары немесе ISR дейді. ISR-ді орнату процедурасы үзілісті тізбектеу немесе үзіліс векторын бұғаттау деп аталады. Үзіліс векторларын тізбектеу арқылы TSR компьютерді толық бақылауға ала алады. TSR екі түрлі мінез-құлықты көрсетуі мүмкін: Бұрынғыда сол үзіліс векторын өзгертетін басқа TSR-ді шақырмау арқылы үзілісті толық бақылауға алу. Ескі үзіліс векторына шақыру арқылы басқа TSR-мен каскадтасу. Бұл олардың нақты кодын орындағаннан бұрын немесе кейін орындалуы мүмкін. Осылайша TSR-лер тізбек құрады, әрқайсысы келесісіне шақыру жасайды. Терминалдау және резиденттік сақтау әдісін көптеген DOS вирустары және басқа да зиянды бағдарламалар қолданады, олар ПК-ны бақылауға алуы немесе фондық режимде жұмыс істеуі мүмкін. Бұл зиянды бағдарламалар дискіге кіріп-шығу немесе орындалу оқиғаларына жауап ретінде орындалатын (.EXE немесе COM) файлдарды жұқтырады және олар ашылғанда деректер файлдарын бұзады. TSR кез келген уақытта жүктелуі мүмкін: DOS жүктелу тізбегі кезінде (мысалы, AUTOEXEC.BAT-тан) немесе пайдаланушының сұрауы бойынша (мысалы, Borland-тың Sidekick және Turbo Debugger, Quicken-нің QuickPay немесе FunStuff Software-тің Жеке күнтізбесі). DOS-тың өзінің кейбір бөліктері осы техниканы қолданады, әсіресе DOS 5.0 және одан кейінгі нұсқаларында. Мысалы, DOSKEY командалық жол редакторы және басқа да түрлі утилиталар құрылғы драйверлері ретінде CONFIG.SYS-тағы DEVICE операторлары арқылы емес, командалық жолдан (қолмен немесе AUTOEXEC.BAT-тан немесе CONFIG.SYS-тағы INSTALL арқылы) іске қосылып орнатылады. Кейбір TSR-лерді өздігінен жою мүмкін болмайды, сондықтан олар қайта жүктеуге дейін жадыда қалады. Дегенмен, MARK.EXE/RELEASE.EXE комбинациясы сияқты құралдарды пайдаланып, оларды сырттан жоюға болады немесе TSR-ді қайта жүктеуге болады, ол белгілі бір пернелер комбинациясын ұстап, содан кейін жүктелген барлық TSR-лерді босатады. ISR тізбегі жеке тізбектелген болғандықтан және TSR өзінің алдыңғысына сілтемені қалаған жеріне сақтай алатындықтан, TSR-ді тізбектен жоюдың жалпы жолы жоқ. Сондықтан әдетте TSR-ді жою кезінде жадыда қалдық қалдырылуы керек, бұл жадтың фрагментациясына әкеледі. Бұл мәселе TesSeRact және AMIS сияқты TSR ынтымақтастық шеңберлерін тудырды.

Ортақ пайдалануды тоқтату

Бірдей үзілісті бөлісетін көптеген TSR-мен туындаған мәселелерді шешу үшін Ralf D. Brown INT 2Fh арқылы ұсынылған бұрынғы қызметтерге қарағанда жақсарту ретінде Alternate Multiplex Interrupt Specification (AMIS) әдісін ұсынды. AMIS бағдарламалық үзілістерді бақыланатын түрде бөлісуге мүмкіндік береді. Ол бастапқыда x86 процессорының аппараттық үзілістерін бөлісу үшін IBM компаниясы жасаған Interrupt Sharing Protocol-інен үлгі алды. AMIS қызметтері Int 2Dh арқылы қолжетімді. Алайда, бұл ұсыныс сол кезде бағдарламашылардың арасында кеңінен қолдануға ие болған жоқ. Ол басқа да бірнеше бәсекелес сипаттамалармен бірге пайда болды, олардың күрделілігі әртүрлі болды.

Қателіктер

DOS-тың шектеулерін жеңу үшін өте пайдалы, тіпті қажетті болса да, TSR-лер проблема тудырушылар ретінде танымал. Көптегендер операциялық жүйені әртүрлі, құжатталған немесе құжатталмаған жолдармен иеленеді, көбінесе белгілі бір қосымшалармен немесе басқа TSR-лермен қолданғанда олардың қосылуы немесе ажыратылуы кезінде жүйелердің құлауына себеп болады. Жоғарыда айтылғандай, кейбір вирустар мен басқа да қауіпті бағдарламалар TSR ретінде жазылған және қасақана проблема тудырады. Сонымен қатар, DOS-тағы барлық бағдарламалар, тіпті үлкен көлемдегі физикалық жады барлар да, RAM-ның алғашқы 640 КБ-на (қолдану жадына) жүктелуі тиіс. TSR-лер де осы талаптан тыс қалмайды және басқа қолданбаларға қолжетімсіз 640 КБ-тан бөліктерді алып қояды. Бұл TSR-ді жазуды мүмкіндігінше кішкентай өлшемге жеткізу және оның әртүрлі өндірушілердің көптеген бағдарламалық өнімдерімен үйлесімділігін тексеруді қиын міндетке айналдырды – көбінесе өте көнерген жұмысқа. 1980-жылдардың соңы мен 1990-жылдардың басында PC платформасындағы көптеген бейне ойындар осы шекке дейін жетіп, TSR үшін аз ғана орын қалдырды – тіпті CD-ROM драйверлері сияқты маңыздылары да. Ойындарды іске қосу үшін жеткілікті RAM-ды ұйымдастыру және қажетті TSR-лерді сақтап тұру – қиын өнерге айналды. Көптеген ойыншылар әртүрлі ойындар үшін әртүрлі конфигурациялармен бірнеше жүктеу дискілеріне ие болды. MS DOS-тың кейінгі нұсқаларында "жүктеу мәзірі" сценарийлері әртүрлі конфигурацияларды бір мәзірден таңдауға мүмкіндік берді. 1990-жылдардың ортасынан соңына дейін көптеген ойындар әлі де DOS үшін жазылған кезде, 640 КБ шегі ойын деректерінің бөліктерін бірінші 1 МБ-тан жоғары орналастыру арқылы еңсерілді және кеңейтілген жадды пайдалану арқылы кеңейтілген жадқа қол жеткізу үшін 640 КБ-тан төмен кодты қолдану арқылы еңсерілді. Баламалы тәсіл – DOS кеңейтушілерін пайдалану арқылы процессорды қорғалған режимге ауыстыру және бағдарламаны қорғалған режимде іске қосу. Соңғысы кеңейтілген жад аймағында код пен деректерді сақтауға мүмкіндік берді. Көптеген жапсырмалармен бағдарламалау өзі қиындық тудыратындықтан, бағдарлама шамамен 512 КБ-қа толығымен сыймағанда, кеңейтілген жадты пайдалану көбінесе VCPI немесе DPMI-ді жүзеге асыратын үшінші тарап DOS кеңейтушісін пайдалану арқылы жасалатын, өйткені 1 МБ-тан жоғары жадқа қол жеткізу әлдеқайда оңай және жылдам болды және x86 процессоры нақты режимнен қорғалған режимге ауысқанда сол аймақта кодты іске қосу мүмкін болды. Алайда, DOS және көптеген DOS бағдарламалары нақты режимде жұмыс істейді (VCPI немесе DPMI қорғалған режимдегі бағдарламаны DOS-қа және жүйенің қалған бөлігіне екі режим арасында ауысып, нақты режимдегі бағдарлама сияқты көрінеді), сондықтан DOS TSR және құрылғы драйверлері де нақты режимде жұмыс істейді. Сондықтан, кез келген уақытта біреу бақылауға ие болғанда, DOS кеңейтуші бақылауды қайтаруға дейін уақытты жоғалтуға ұшырайды (егер олар DPMS немесе CLOAKING сияқты техникаларды қолданбаса).

Қайту

1980-ші жылдардың екінші жартысында кеңейтілген жад тақталарының және әсіресе Intel 80386 процессорларының пайда болуымен TSR-лерді жүктеу үшін 640 КБ-тан астам жадты пайдалану мүмкін болды. Бұл үшін кеңейтілген жад менеджерлері деп аталатын күрделі бағдарламалық шешімдер қажет болды. Кейбір жад менеджерлері – Quarterdeck компаниясының QRAM және QEMM, Qualitas компаниясының 386MAX, Compaq компаниясының CEMM және кейіннен Microsoft компаниясының EMM386. 640 КБ-тан жоғары TSR-лерді жүктеуге қолданылатын жад аймақтары "жоғарғы жад блоктары" (UMB) деп аталады, ал оларға бағдарламаларды жүктеу "жоғары жүктеу" деп аталады. Кейіннен жад менеджерлері Quarterdeck-тің Optimize немесе Microsoft-тың MEMMAKER сияқты бағдарламаларды қоса бастады, олар TSR-лерді төменгі және жоғарғы жад арасында қалай бөлу керектігін анықтап, алғашқы 640 КБ-тағы қолжетімді кеңістікті барынша арттыруға тырысады.

Құлдырау

DOS кеңейтушілерін қолданатын ойындардың (Doom мысалы) дамуымен 640 КБ шегінен асып түсуге мүмкіндік болды, көптеген TSR-ге қатысты мәселелер жойылды. Microsoft Windows, әсіресе Windows 95 (кейін Windows 98) кеңінен қолданылғанда, көптеген TSR қажетсіз болып, ал кейбіреулері үйлесімсіздік тудырды. Windows рұқсат бергендіктен, Win16 қолданбалары үзіліс сипаттамалық кестесін (IDT) түзету сияқты TSR-ге ұқсас амалдар жасауға болатын. Windows Me Windows Me-ді өшіру арқылы DOS ядросына жүктеуге мүмкіндік бермейді, сондықтан TSR-лер Windows Me үшін ешқандай пайдалы болмады. Windows NT сериясы (Windows 2000, Windows XP және одан кейінгілерді қоса алғанда) DOS-ты толықтай алмастырды және әрқашан қорғалған немесе ұзақ режимде (кейінірек 64 биттік нұсқаларда ғана) жұмыс істеді, TSR-лердің жұмыс істеуі үшін қажетті нақты режимге ауысу мүмкіндігін жойды. Оның орнына, бұл операциялық жүйелерде жадты қорғау және алдын ала көп тапсырмалылықпен жаңа драйверлер мен қызметтер аясы бар, бұл бірнеше бағдарламалар мен құрылғы драйверлерін ешқандай арнайы бағдарламалау амалдарына жүгінбестен бір уақытта іске қосуға мүмкіндік береді; ядро мен оның модульдері үзіліс кестесін өзгертуге толық жауапкершілікті алды.