Yerleşik programı sonlandır ve kal - Terminate and stay resident program

Bir sonlandır ve yerleşik kal programı (genellikle TSR ), DOS altında çalışan ve denetimi tamamlanmış gibi DOS'a geri döndürmek için bir sistem çağrısını kullanan , ancak daha sonra yeniden etkinleştirilebilmesi için bilgisayar belleğinde kalan bir bilgisayar programıdır . Bu teknik, DOS'un aynı anda yalnızca bir program veya görev yürütme sınırlamasının kısmen üstesinden geldi . TSR'ler yalnızca DOS'ta kullanılır, Windows'ta kullanılmaz .

Bazı TSR'ler, bir bilgisayar kullanıcısının bir kısayol tuşu kullanarak başka bir programda çalışırken günde birkaç kez çağırabileceği yardımcı yazılımlardır . Borland Sidekick bu türün erken ve popüler bir örneğiydi. Diğerleri , işletim sisteminin doğrudan desteklemediği donanımlar için aygıt sürücüleri görevi görür .

Kullanmak

Normalde DOS aynı anda yalnızca bir program çalıştırabilir. Bir program bittiğinde, INT 21h/4Ch sistem çağrısını kullanarak kontrolü DOS'a döndürür . Kullanılan bellek ve sistem kaynakları daha sonra kullanılmayan olarak işaretlenir. Bu, programın bölümlerini tamamını yeniden yüklemek zorunda kalmadan yeniden başlatmayı imkansız hale getirir. Ancak, bir program INT 27h veya INT 21h/31h sistem çağrısıyla sona ererse , işletim sistemi belleğinin belirli bir bölümünü yeniden kullanmaz.

Orijinal çağrı, INT 27h , "sonlandır ancak yerleşik kal" olarak adlandırılır, dolayısıyla "TSR" adı verilir. Bu çağrıyı kullanarak, bir program hafızasında 64 KB'a kadar yer kaplayabilir. MS-DOS sürüm 2.0 , bu sınırlamayı kaldıran ve programın bir çıkış kodu döndürmesine izin veren INT 21h/31h ('İşlemi Tut') adlı geliştirilmiş bir çağrıyı tanıttı . Bu çağrıyı yapmadan önce, program tekrar çağrılabilmesi için kendisine işaret eden bir veya birkaç kesme işleyicisi kurabilir. Bir donanım kesme vektörü kurmak, böyle bir programın donanım olaylarına tepki vermesine izin verir. Bir yazılım kesme vektörü yüklemek, o anda çalışan program tarafından çağrılmasına izin verir. Bir zamanlayıcı kesme işleyicisi kurmak, bir TSR'nin periyodik olarak çalışmasına izin verir (bkz. ISA ve programlanabilir aralık zamanlayıcı , özellikle " IBM PC uyumlu " bölümü ).

Bir kesme vektörü kullanmanın tipik yöntemi, mevcut değerini (adres) okumayı, onu TSR'nin bellek alanı içinde saklamayı ve onu kendi kodundaki bir adresle değiştirmeyi içerir. Depolanan adres, TSR'den çağrılır ve aslında , kesme hizmeti rutinleri veya ISR'ler olarak da adlandırılan, tek başına bağlantılı bir kesme işleyicileri listesi oluşturur . ISR'leri yükleme prosedürüne bir kesme veya kesme vektörü zincirleme veya kancalama denir .

Kesinti vektörlerini zincirleyerek TSR'ler bilgisayarın tam kontrolünü alabilir. Bir TSR iki davranıştan birine sahip olabilir:

  • Daha önce aynı kesme vektörünü değiştirmiş olan diğer TSR'leri çağırmayarak bir kesmenin tam kontrolünü elinize alın.
  • Eski kesme vektörünü çağırarak diğer TSR'lerle basamaklandırın. Bu, gerçek kodlarını çalıştırmadan önce veya sonra yapılabilir. Bu şekilde TSR'ler, her birinin bir sonrakini aradığı bir zincir oluşturabilir.

Sonlandır ve yerleşik kal yöntemi, çoğu DOS virüsü ve bilgisayarın kontrolünü ele geçirebilen veya arka planda kalabilen diğer kötü amaçlı yazılımlar tarafından kullanılır . Bu kötü amaçlı yazılım, çalıştırıldığında yürütülebilir (.EXE veya .COM) dosyalara ve açıldıklarında veri dosyalarına bulaşarak disk G/Ç veya yürütme olaylarına tepki verir .

TSR'ler herhangi bir zamanda yüklenebilir; Ya DOS başlatma sırasında (örneğin, gelen AUTOEXEC.BAT ) veya kullanıcının isteği üzerine (örneğin, Borland 'ın Sidekick ve Turbo Debugger, hızlandırmak en QuickPay veya FunStuff Software'in Kişisel Takvim). DOS'un bazı bölümleri, özellikle DOS 5.0 ve sonraki sürümlerinde bu tekniği kullanır. Örneğin, DOSKEY komut satırı düzenleyicisi ve çeşitli diğer yardımcı programlar, bunları CONFIG'deki ifadeler aracılığıyla aygıt sürücüleri olarak yüklemek yerine komut satırında (elle veya AUTOEXEC.BAT içinden veya INSTALLCONFIG.SYS içinden ) çalıştırarak yüklenir DEVICE. SYS.

Bazı TSR'lerin kendilerini boşaltma yolu yoktur, bu nedenle yeniden başlatılıncaya kadar bellekte kalırlar. Ancak boşaltma gibi araçları kullanarak, dıştan mümkündür MARK.EXE / RELEASE.EXE tarafından açılan TurboPower Yazılım veya yazılımdan önyükleme belirli tuş kombinasyonunu yakalamak ve onlardan sonra yüklenen tüm TSR yayınlayacak TSR. ISR'lerin zinciri tek başına bağlantılı olduğundan ve bir TSR, selefinin bağlantısını seçtiği herhangi bir yerde depolayabildiğinden, bir TSR'nin kendisini zincirden çıkarması için genel bir yol yoktur. Bu nedenle, genellikle bir TSR'yi boşaltırken bellekte bir saplama bırakılmalıdır, bu da bellek parçalanmasına neden olur. Bu sorun, TesSeRact ve AMIS gibi TSR işbirliği çerçevelerinin ortaya çıkmasına neden oldu .

Paylaşımı kes

Aynı kesmeyi paylaşan birçok TSR ile ilgili sorunları yönetmek için, INT 2Fh aracılığıyla sunulan daha önce kullanılan hizmetlere göre bir iyileştirme olarak Ralf D. Brown tarafından Alternatif Çoklamalı Kesme Belirtimi (AMIS) adı verilen bir yöntem önerildi . AMIS, yazılım kesintilerini kontrollü bir şekilde paylaşmanın yollarını sunar . Başlangıçta bir x86 işlemcinin donanım kesintilerini paylaşmak için icat edilen IBM'in Kesinti Paylaşım Protokolü'nden sonra modellenmiştir . AMIS hizmetleri, Int 2Dh aracılığıyla kullanılabilir.

Teklif, o günlerde programcılar arasında hiçbir zaman yaygın bir ilgi görmedi. Değişen karmaşıklıktaki diğer birkaç rakip spesifikasyonun yanında mevcuttu.

Arızalar

DOS'un sınırlamalarının üstesinden gelmek için çok yararlı ve hatta gerekli olsa da , TSR'ler sorun çıkaran olarak bir üne sahiptir. Birçoğu, işletim sistemini belgelenmiş veya belgelenmemiş çeşitli şekillerde ele geçirir ve genellikle belirli uygulamalar veya diğer TSR'ler ile kullanıldığında sistemlerin etkinleştirilmeleri veya devre dışı bırakılmaları sırasında çökmesine neden olur. Yukarıda açıklandığı gibi, bazı virüsler ve diğer kötü amaçlı yazılımlar TSR'ler olarak kodlanmıştır ve kasıtlı olarak zahmetlidir. Ek olarak, DOS'ta tüm programlar, büyük miktarda fiziksel RAM'e sahip olanlar bile , ilk 640 KB RAM'e ( geleneksel bellek ) yüklenmelidir  . TSR'ler istisna değildir ve bu 640 KB'den diğer uygulamalar tarafından kullanılamayan parçalar alır. Bu, bir TSR yazmanın, bunun için mümkün olan en küçük boyutu elde etmenin ve farklı satıcılardan birçok yazılım ürünüyle uyumluluğunu kontrol etmenin bir zorluğu olduğu anlamına geliyordu - genellikle çok sinir bozucu bir görevdi.

1980'lerin sonlarında ve 1990'ların başlarında , PC platformundaki birçok video oyunu bu sınırı zorladı ve TSR'ler için - hatta CD-ROM sürücüleri gibi temel olanlar için bile - giderek daha az yer bıraktı ve işleri çalıştırmak için yeterli boş RAM olacak şekilde düzenledi. oyunlar, gerekli TSR'leri mevcut tutarken siyah bir sanat haline geldi. Birçok oyuncunun, farklı oyunlar için farklı konfigürasyonlara sahip birkaç önyükleme diski vardı . MS-DOS'un sonraki sürümlerinde, "önyükleme menüsü" komut dosyaları, çeşitli yapılandırmaların tek bir "önyükleme diski" aracılığıyla seçilebilmesine izin verdi. 1990'ların ortalarından sonralarına, birçok oyun hala DOS için yazılırken, oyunun verilerinin veya kodunun bir kısmını ilk 1 MB belleğin üzerine koyarak ve 640 KB'nin altındaki kodu kullanarak 640 KB sınırı aşıldı. genişletilmiş bellek ( DOS uzatma yöntemlerini kullanarak ), kod bindirmeler olarak en düşük 1 MB RAM'e değiştirilir . Birçok bindirmeleri ile programlama ve kendisini bir meydan okuma olduğu için, program genişletilmiş bellek kullanımı hemen hemen her zaman uygulayan bir üçüncü taraf DOS extender kullanılarak yapıldı 512 hakkında KB içine tamamen sığmayacak kadar büyük bir zamanlar VCPI veya DPMI o olur çünkü, x86 işlemci geçirildiği zaman çok daha kolay ve daha hızlı erişim 1 MB sınırının üstündeki bellek ve olası için, o bölgede kod çalıştırmasına gerçek mod için korumalı mod . Ancak, DOS ve çoğu DOS programı gerçek modda çalıştığından (VCPI veya DPMI, korumalı mod programını DOS'a ve sistemin geri kalanına iki mod arasında geçiş yaparak gerçek mod programı gibi gösterir), DOS TSR'leri ve cihaz sürücüler de gerçek modda çalışır ve bu nedenle, herhangi biri kontrolü ele geçirdiğinde, DOS genişleticinin kontrolü bırakana kadar gerçek moda geri dönmesi gerekir, bu da bir zaman cezasına neden olur ( DPMS veya CLOAKING gibi teknikleri kullanmadıkları sürece ).

Dönüş

Gelmesiyle genişletilmiş bellek panoları ve özellikle 80.386 Intel 1980'lerin ikinci yarısında işlemciler, bu yük TSR 640 KB yukarıdaki bellek kullanmak mümkün hale geldi. Bu, genişletilmiş bellek yöneticileri olarak adlandırılan karmaşık yazılım çözümlerini gerektiriyordu . Bazı bellek yöneticileri QRAM ve QEMM tarafından Quarterdeck , 386 MAX tarafından Qualitas , CEMM tarafından Compaq ve daha sonra EMM386 tarafından Microsoft . 640 KB üzerindeki TSR'leri yüklemek için kullanılabilen bellek alanlarına " üst bellek blokları " (UMB'ler) denir ve bunlara program yüklemeye yüksek yükleme denir . Daha sonra bellek yöneticileri, TSR'lerin düşük ve yüksek bellek arasında en iyi nasıl tahsis edileceğini belirleyerek ilk 640 KB'lık kullanılabilir alanı en üst düzeye çıkarmaya çalışan Quarterdeck'in Optimize veya Microsoft'un MEMMAKER gibi programları dahil etmeye başladı .

Reddetmek

640 KB engelini atlayan DOS genişleticileri kullanan oyunların geliştirilmesiyle (erken bir örnek Doom idi ), TSR'lerle ilgili sorunların çoğu ortadan kalktı ve Microsoft Windows'un ve özellikle Windows 95'in (ardından Windows 98'in ) yaygın olarak benimsenmesiyle – bu, çoğu TSR'yi gereksiz ve bazı TSR'leri uyumsuz hale getirdi - Windows izin verdiği için Win16 uygulamaları, kesinti tanımlayıcı tablosunu (IDT) yamalamak gibi TSR benzeri hileler yapabilse de, TSR eskimeye başladı.

Windows Me ve Windows NT ( Windows XP'den itibaren tüketici işletim sistemleri dahil ) her zaman korumalı modda veya uzun modda çalışarak TSR'lerin çalışması için gerekli olan gerçek moda geçme özelliğini devre dışı bırakır. Bunun yerine, bu işletim sistemleri, bellek korumalı ve önleyici çoklu görev özelliğine sahip modern sürücü ve hizmet çerçevelerine sahiptir ve bu , birden çok programın ve aygıt sürücüsünün özel programlama hilelerine gerek kalmadan aynı anda çalışmasına olanak tanır; çekirdek ve modülleri kesme tablo değiştirmek için münhasıran sorumlu yapılmıştır.

Ayrıca bakınız

Referanslar

Dış bağlantılar