<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=TSR-Programm</id>
	<title>TSR-Programm - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=TSR-Programm"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=TSR-Programm&amp;action=history"/>
	<updated>2026-05-19T20:48:29Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=TSR-Programm&amp;diff=21229&amp;oldid=prev</id>
		<title>~2026-13100-76: hauptsächlich weil das schneller ist; der Haupt- oder auch Arbeitsspeicher ist [auch in der Gegenwart, noch immer] üblicherweise schneller als Festspeicher</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=TSR-Programm&amp;diff=21229&amp;oldid=prev"/>
		<updated>2026-02-28T08:59:38Z</updated>

		<summary type="html">&lt;p&gt;hauptsächlich weil das schneller ist; der Haupt- oder auch &lt;a href=&quot;/index.php/Arbeitsspeicher&quot; title=&quot;Arbeitsspeicher&quot;&gt;Arbeitsspeicher&lt;/a&gt; ist [auch in der Gegenwart, noch immer] üblicherweise schneller als &lt;a href=&quot;/index.php/Festspeicher&quot; class=&quot;mw-redirect&quot; title=&quot;Festspeicher&quot;&gt;Festspeicher&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Ein &amp;#039;&amp;#039;&amp;#039;TSR-Programm&amp;#039;&amp;#039;&amp;#039; (aus englisch &amp;#039;&amp;#039;{{lang|en|terminate-and-stay-resident program}}&amp;#039;&amp;#039;; im deutschsprachigen Raum oft &amp;#039;&amp;#039;&amp;#039;speicherresidentes Programm&amp;#039;&amp;#039;&amp;#039; genannt) ist ein [[PC-kompatibles DOS|DOS]]-Programm, das nach Ausführung weiterhin im [[Hauptspeicher]] verbleibt und so bei Bedarf schneller wieder aufgerufen werden kann.&amp;lt;ref&amp;gt;{{Internetquelle |url=https://www.pcmag.com/encyclopedia/term/tsr |titel=Definition of TSR |werk=[[PC Magazine]] |hrsg=[[Ziff Davis]] |sprache=en |abruf=2024-06-01}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Abkürzung &amp;#039;&amp;#039;TSR&amp;#039;&amp;#039; stammt aus dem [[Disk Operating System|DOS]]-Umfeld und steht für „&amp;#039;&amp;#039;{{lang|en|Terminate and Stay Resident}}&amp;#039;&amp;#039;“. Das Konzept der [[Speicherresidenz]] wurde als Vorläufer zu späteren [[Multitasking]]-Anwendungen entwickelt, damit bestimmte Aufgaben (Uhr, Treiber, Systemdienste) permanent als [[Hintergrundprozess]] ablaufen können, oder schlicht, um die Funktionalität des Betriebssystems zu erweitern oder zu ersetzen.&lt;br /&gt;
&lt;br /&gt;
== Entwicklungskonzepte für Hintergrundprozesse ==&lt;br /&gt;
Möglich und effektiv wurde dies Ende der 1970er Jahre hauptsächlich durch die Entwicklung leistungsfähiger [[16-Bit-Prozessor]]en und der [[Interrupt]]-Architektur, mit deren Hilfe eine Vielzahl von Geräten eines Rechners im regelmäßigen Takt relativ unabhängig vom Betriebssystem angesprochen werden können. Da eine Kommunikation zwischen diesen Geräten und dem Prozessor nicht ohne geeignete „Verwaltungsprogramme“ ([[Gerätetreiber]]) erfolgen kann, bot sich damit eine neue Möglichkeit, auch unabhängig von Hardwarekomponenten Programme zu schreiben, die im Speicher verbleiben und von den Interrupts immer wieder im Hintergrund aufgerufen werden.&lt;br /&gt;
&lt;br /&gt;
== Vorläufer bei Homecomputern ==&lt;br /&gt;
Zwingend notwendig ist die Interrupt-Steuerung nicht. Bereits zuvor waren die meisten Betriebssysteme auf [[8-Bit-Prozessor]]en wie dem [[Zilog Z80]] mit modularen Prozessen z.&amp;amp;nbsp;B. zur Speicher- und Bildverwaltung ausgestattet. Da diese über [[Sprunganweisung|Sprungadressen]] in regelmäßigem Rhythmus abgearbeitet werden, bieten sich für weitere Anwendungen grundsätzlich zwei Möglichkeiten, an diesem Konzept teilzunehmen (vereinfachte Beschreibung):&lt;br /&gt;
&lt;br /&gt;
* Bei Betriebssystemen mit änderbaren Sprungadressen im [[Random-Access Memory|RAM]]-Speicher (damals noch keine Selbstverständlichkeit) lenken residente Programme diese auf sich selbst um, erst danach erfolgt der Sprung zum Systemprozess, dessen Adresse aus der im RAM vor dem Umlenken gespeicherten Sprungadresse bekannt ist, welche sich das residente Programm merkt. Sie schalten sich also zwischen ein Anwendungsprogramm und den Systemprozess.&lt;br /&gt;
* Dieselbe Möglichkeit kann auch bei einigen Homecomputern genutzt werden, deren gesamtes Betriebssystem, wie damals durchaus üblich, im Festspeicher ([[Festwertspeicher|ROM]]) untergebracht ist (so wie heute noch die [[Firmware]] des Systems). Sofern das Betriebssystem beim Systemstart Sprungvariablen in den RAM-Speicher schreibt, können diese Sprungadressen, wie zuvor beschrieben, geändert werden.&lt;br /&gt;
* Wenn diese Sprungadressen direkt aus dem ROM aufgerufen werden, muss die Anwendung beim Start das eigentliche Betriebssystem vollständig ersetzen und die systemrelevanten Hintergrundprozesse im ROM selbst aufrufen, um sich selbst und das System lebensfähig zu halten. Ein anschauliches Beispiel dafür ist eine Stoppuhr im [[Schachprogramm]] des [[Sinclair ZX Spectrum]]. Wenn der Spieler während eines Zuges den [[Assembler (Informatik)|Assemblerteil]] stoppt, um den [[Zwischenstand|Spielstand]] unter einem [[BASIC]]-Programm zwischenzuspeichern, gibt der Interpreter regelmäßig die Kontrolle an die [[Schachuhr]] zurück, die dadurch weiter läuft.&lt;br /&gt;
&lt;br /&gt;
== Die TSR-Programme unter DOS ==&lt;br /&gt;
Wird ein TSR-Programm geladen, so läuft es vorerst wie jedes DOS-Programm im Vordergrund und wird in gleicher Weise abgearbeitet. DOS-Programme beenden sich normalerweise über einen Aufruf der entsprechenden Betriebssystemfunktion von DOS per [[Softwareinterrupt|Software]]-[[Interrupt]] 21[[Hexadezimalsystem|h]]. Ein TSR-Programm nutzt denselben Funktionsaufruf, spezifisch Funktion 4C[[Hexadezimalsystem|h]] des Interrupt 21[[Hexadezimalsystem|h]] mit [[Return Code|Rückgabewert]] (ab MS-DOS 2.0), oder ohne Rückgabewert Interrupt 20[[Hexadezimalsystem|h]] (ab [[86-DOS]] bzw. [[CP/M]]-kompatibel).&amp;lt;ref&amp;gt;{{Internetquelle |url=https://stanislavs.org/helppc/int_21-4c.html |titel=INT 21,4C – Terminate Process With Return Code |werk=stanislavs.org |sprache=en |abruf=2026-02-27}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Internetquelle |url=https://stanislavs.org/helppc/int_20.html |titel=INT 20 – Program Terminate |werk=stanislavs.org |sprache=en |abruf=2026-02-27}}&amp;lt;/ref&amp;gt; DOS gibt daraufhin den vom Programm benutzten Speicher und andere Ressourcen frei. Bei TSR-Programmen wird der „normale“ (transiente) Ausführungsteil zwar ebenfalls im Speicher beendet (manchmal sogar der Speicher freigegeben), hierzu wird aber eine andere DOS-Funktion aufgerufen; diese ist entweder Interrupt 27[[Hexadezimalsystem|h]] oder Interrupt 21[[Hexadezimalsystem|h]], Funktion 31[[Hexadezimalsystem|h]]. Der „besondere“ (residente) TSR-Teil, ein kleines Kontrollzentrum, bleibt dann auch weiterhin im Speicher aktiv, um bei Bedarf erneut aufgerufen zu werden.&amp;lt;ref name=&amp;quot;Norton89&amp;quot;&amp;gt;{{Literatur |Autor=Peter Norton, Richard Wilton |Titel=Peter Nortons Neues Programmierhandbuch für IBM PC &amp;amp; PS/2 |Verlag=Vieweg+Teubner |Ort=Wiesbaden |Datum=1989 |Sprache=de |ISBN=3322938522 |Kapitel=Kapitel 15: DOS-Interrupts |Seiten=294f |Fundstelle=Interrupt 27H (dezimal 39): Beenden und im Speicher bleiben |Originaltitel=The New Peter Norton Programmer’s Guide to the IBM PC &amp;amp; PS/2 |Originaljahr=1988 |Originalort=Redmond |Originalsprache=en |Übersetzer=Bert Gillert}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit dieser TSR-Dienst aktiv bleiben kann, erfolgt die so genannte Interruptverbiegung. Dabei wird aus der Interruptvektor-Tabelle des Systems (bei DOS immer im ersten [[Byte|KiB]] des Speichers) die Sprungadresse zum ursprünglichen Code besorgt, im neuen [[Interruptvektor]] gespeichert, und zum Schluss der Tabellen-Eintrag des Interrupt auf den eigenen Vektor umgeschrieben. Beim Aufruf des Interrupts (möglicherweise ein [[Software-Interrupt]]) wird aus der Interruptvektor-Tabelle die Adresse zum resident gebliebenen Teil des TSRs gelesen und dieser ausgeführt. Je nach Art des TSRs (und, bei Software-Interrupts, je nach aufgerufener Funktion) kann der residente Teil dann auch den vorigen Interruptvektor ausführen.&lt;br /&gt;
&lt;br /&gt;
Ein sehr beliebtes Beispiel ist der [[Timer]]-Interrupt (Interrupt 1C[[Hexadezimalsystem|h]] Timer) für eine residente Uhr. Dies geschieht fast genauso wie oben für Homecomputer beschrieben, aber mit Hilfe von Interrupts hardwaregesteuert und damit unabhängiger von Softwareschwächen. Damit laufen TSR-Programme wesentlich stabiler. Der unter DOS wahrscheinlich am häufigsten „verbogene“ Software-Interrupt ist der DOS-Funktions-Interrupt (21[[Hexadezimalsystem|h]]), der die meisten Betriebssystemfunktionen von DOS für andere Programme enthält. TSR-Programme können beispielsweise bestimmte Funktionen überwachen, aufzeichnen, verbieten oder auch im geladenen DOS eigentlich nicht vorhandene Funktionen hinzufügen.&lt;br /&gt;
&lt;br /&gt;
Gerätetreiber sind ein weiteres Anwendungsbeispiel für TSR-Programme. Einfache Beispiele hierfür sind DOS-Maustreiber (Hardware-Interrupt 14[[Hexadezimalsystem|h]] – [[serielle Schnittstelle]], sowie Software-Interrupt 33[[Hexadezimalsystem|h]] – Mausfunktionen für DOS-Programme), sowie Tastatur- und [[Enhanced Graphics Adapter|EGA]]-Treiber, Treiber für den Erweiterungsspeicher usw.&lt;br /&gt;
&amp;lt;!-- hilft so aber nicht immer [[Benutzer:Danimilkasahne|DMS]] 22:01, 29. Jul 2003 (CEST)//--&amp;gt;&lt;br /&gt;
Beim Einrichten eines Computers sollte man aufgrund der besonderen Verhaltensweise von TSR-Programmen, die nur in den [[konventioneller Speicher|konventionellen Speicher]] geladen werden können, grundsätzlich größere TSR-Programme &amp;#039;&amp;#039;vor&amp;#039;&amp;#039; kleineren laden, da die Lücken, die ihre transienten Teile hinterlassen, möglicherweise von den kleineren TSR-Programmen ausgefüllt werden können – umgekehrt kann es passieren, dass die größeren nicht mehr in den Speicher passen, da die „Lücken“, die die transienten Teile der kleineren hinterlassen, nicht mehr für die größeren ausreichen. Manche TSRs vermeiden das Entstehen von Speicherlücken auch durch geschicktes Verschieben der zu installierenden Interruptvektoren.&lt;br /&gt;
&lt;br /&gt;
Ein weit verbreitetes Hilfsprogramm, das nach dem TSR-Prinzip arbeitete, war [[SideKick (Software)|SideKick]], mit dem es möglich wurde, Ausdrucke im Querformat auf das Papier zu bringen, auch wenn weder das jeweilige [[Anwendungsprogramm]] noch sein Druckertreiber diese Option anboten.&amp;lt;ref name=&amp;quot;Norton89&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Internetquelle |autor=Gerhard Roehrl |url=http://ece.wpi.edu/~wrm/Courses/EE3803/Labs/roehrl.html |titel=8086/8088 Interrupts and DOS system programming |sprache=en |archiv-url=https://web.archive.org/web/20170107002933/http://ece.wpi.edu/~wrm/Courses/EE3803/Labs/roehrl.html |archiv-datum=2017-01-07 |abruf=2024-06-01 |abruf-verborgen=ja}}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Normdaten |TYP=s |GND=4233836-0}}&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Tsr-Programm}}&lt;br /&gt;
[[Kategorie:Softwarearchitektur]]&lt;br /&gt;
[[Kategorie:DOS-Betriebssystemkomponente]]&lt;/div&gt;</summary>
		<author><name>~2026-13100-76</name></author>
	</entry>
</feed>