„Speicherresidenz“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
[gesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
K →‎Orte der Infektionen: Grammatik; Auflösung einer geschachtelten Klammerung
Komplette Überarbeitung, Redundanz mit TSR-Programm ist somit nicht mehr gegeben.
Markierung: 2017-Quelltext-Bearbeitung
Zeile 1: Zeile 1:
{{Redundanztext
|3=Speicherresidenz
|4=TSR-Programm
|12=f|2=Juli 2019|1=[[User:Filzstift|Filzstift]] ([[BD:Filzstift|Diskussion]]) 08:46, 30. Jul. 2019 (CEST)}}
{{Belege fehlen}}
{{Belege fehlen}}
'''Speicherresidenz''' bezeichnet allgemein das Vorhalten von Software im primären/physischen [[Arbeitsspeicher]] eines Computers.
Unter '''Speicherresidenz''' versteht man die Fähigkeit von [[Computerprogramm]]en, Programmteile im flüchtigen [[Hauptspeicher]] eines Rechners zurückzulassen und wiederstartbar zu verankern<!-- ohne dass der Benutzer eine Möglichkeit hat, dies mit einfachen Mitteln zu beeinflussen oder zu unterbinden // gilt nur für Viren u.ä. Malware --> oder als [[Betriebssystem]]-Komponenten einzubinden. Neben nützlichen Programmen sowie dem Betriebssystem selbst sind es häufig [[Computervirus|Viren]] und [[Computerwurm|Würmer]], die diese Technik benutzen.
Von Speicherresidenz wird im Allgemeinen nur gesprochen, wenn das zugehörige Programm zumindest formal nach dem Sich-Verankern ''endet''. Für [[Prozess (Informatik)|Prozesse]], die aktiv bleiben, ist die Speicherresidenz unvermeidlich und wird im Allgemeinen nicht gesondert erwähnt.


== Technik ==
Diese zurückgelassenen Programmteile können aktiviert werden
Bei Betriebssystemen mit [[Virtuelle Speicherverwaltung|virtueller Speicherverwaltung]] wird der gesamte verfügbare Arbeitsspeicher in [[Speicherseite]]n unterteilt. Der Arbeitsspeicher wiederum besteht aus dem realen, physisch verfügbaren [[Random-Access Memory|RAM]], sowie aus Sekundärspeicher. Das Auslagern von Speicherseiten in den Sekundärspeicher nennt man [[Swapping]].

Mit residentem Speicher bezeichnet wird jener Teil einer Software, der sich im primären Arbeitsspeicher, also im RAM, befindet, und somit nicht ausgelagert ist. Das können Teile eines [[Computerprogramm]]s genauso sein wie z.&nbsp;B. Datenstrukturen des [[Kernel (Betriebssystem)|Kernels]] oder [[Gerätetreiber]] eines Betriebssystems.

Unterschieden wird auch zwischen den residenten Teilen einer Software, die sich prinzipiell gerade (zufällig) im RAM befinden, und Software, die sich immer dort befinden muss, denn Daten im RAM können für das Auslagern ''gesperrt'' werden. Dieser Teil des primären Arbeitsspeichers wird als {{enS|locked memory}} bezeichnet, die jeweiligen Speicherseiten als ''{{lang|en|locked pages}}''.<ref>{{Literatur |Autor=John Fusco |Titel=The Linux Programmer's Toolbox |Verlag=Pearson Education |Datum=2007 |Sprache=en |Kapitel=6.5.3 Resident and Locked Memory |ISBN=978-0-13-270304-8 |Online={{Google Buch |BuchID=5fgn7Tg4Lt8C |SeitenID=356 |Hervorhebung=resident}} |Zitat=A subset of the resident memory is ''locked memory'', which refers to any virtual memory that has been explicitly locked into RAM by the process. A locked page cannot be swapped and is always resident in RAM.}}</ref>

=== Geschichte ===
Betriebssysteme ohne virtuellen Speicher haben prinzipiell nur residenten Speicher. Virtueller Speicher selbst bedingt, um effizient zu sein, eine ''[[Memory Management Unit]]'' im [[Prozessor]]. Betriebssysteme, die auf Hardware ohne MMU liefen, haben daher meist nur den physischen Arbeitsspeicher zur Verfügung und konnen keinen virtuellen Speicher zur Verfügung stellen. Ist der Speicher aufgebraucht, gibt das System eine {{enS|Out-of-memory}}-Fehlermeldung aus, die aussagt, dass dem Computersystem der Arbeitsspeicher ausgegangen ist. Ein Beispiel für ein solches System ist der [[Macintosh]] von Apple mit dem [[Mac OS (Classic)|klassischen Mac&nbsp;OS]] bis [[System 7|Version&nbsp;6]]. Komplizierter wird es allerdings, wenn ein System zwischen unterschiedlichen Speicherarten unterscheidet, was beispielsweise auf [[IBM-PC-kompatibler Computer|IBM-PC-kompatiblen]] Systemen der Fall ist. Aufgrund der Kompatibilität zum originalen [[IBM Personal Computer|IBM&nbsp;PC]] und dessen [[PC-kompatibles DOS|DOS]] waren nur der [[Konventioneller Speicher|konventionelle Speicher]] von Programmen direkt nutzbar&nbsp;– war er verbraucht, kam es ebenfalls zu einer Fehlermeldung, auch dann, wenn noch genügend erweiterter Speicher ([[Upper Memory Block|UMB]], [[High Memory Area|HMA]], [[Expanded Memory Specification|EMS]]) zur Verfügung stand. Erst mit [[Extended Memory Specification|XMS]] war es unter [[MS-DOS]] (und kompatiblen DOS) möglich, mehr als die ersten 640&nbsp;kB RAM zu nutzen.

Aber auch Betriebssysteme mit virtueller Speicherverwaltung waren anfangs stets resident im RAM. Beispielsweise war der Kernel von [[Unix]] noch Mitte der 1980er Jahre ([[Berkeley Software Distribution|4.3BSD]]) stets zur Gänze im primären Arbeitsspeicher. Erst mit der Weiterentwicklung eines modernen Unix-Kernels Ende der 1980er, Anfang der 1990er Jahre, genannt [[Mach (Kernel)|Mach]], waren auch Teile des Kernels auslagerbar.<ref>{{Literatur |Autor=Peter A. Gloor |Titel=Synchronisation in verteilten Systemen: Problemstellung und Lösungsansätze unter Verwendung von objektorientierten Konzepten |Auflage= |Verlag=B.&nbsp;G. Teubner |Datum=1989 |Kapitel=1.2.3 Mach |Seiten=15 |ISBN=978-3-519-02494-1 |Online={{Google Buch |BuchID=Lml9BwAAQBAJ |Seite=15 |Hervorhebung=resident}} |Zitat=Ein konventionelle UNIX-Kernel ist ein grosses Binärfile, das sich resident im Hauptspeicher befindet. Im Gegensatz dazu lassen sich einzelne Teile des Mach-Kernels genauso auf Sekundärspeicher zwischenlagern (paging) wie gewöhnliche Anwendungsprogramme.}}</ref>

In einem Betriebssystem müssen die Entwickler sehr genau abwägen, welche Software resident im RAM vorgehalten werden soll und welche ausgelagert werden kann. Da es mehr Zeit kostet, ausgelagerte Software bei Bedarf wieder in den RAM zu laden, würde ein [[Benutzer|Anwender]] eine Verzögerung wahrnehmen, was bei bestimmten Betriebssystemfunktionen nicht erwünscht ist. Besonders bei einer [[Grafische Benutzeroberfläche|Grafischen Benutzeroberfläche]] soll sich die Bedienung unmittelbar und verzögerungsfrei anfühlen, sodass deren Grundfunktionen resident im RAM vorgehalten werden müssen. Die Speicherverwaltung muss diesbezüglich jedoch eine Abwägung (''{{lang|en|trade-off}}'') ermöglichen wenn der RAM knapp wird, damit auch [[Anwendungssoftware|Anwendungsprogramme]] noch geladen und benutzt werden können.

== Hintergrunddienste ==
[[Prozess (Informatik)|Prozesse]], die aktiv bleiben, sind [[Hintergrundprozess]]e. Bei Programmen, die als Hintergrundprozesse konzipiert sind, spricht man auch von [[Dienst (Informatik)|Diensten]] oder, hauptsächlich bei [[Unixoides System|Unix-artigen Systemen]], von [[Daemon]]s. Unter dem am weitesten verbreiteten PC-Betriebssystem [[Microsoft Windows|Windows]] ist der grundlegende Hintergrunddienst der [[Windows-Systemdienst]].

Teile von Hintergunddiensten müssen oft resident im RAM geladen verbleiben, da sie immer wieder aufgerufen werden.

== TSR-Programme ==
{{Hauptartikel|TSR-Programm}}
Ein Spezialfall von Speicherresidenz sind TSR-Programme unter DOS. Da DOS kein [[Multitasking]]-Betriebssystem ist, kann immer nur ein einziges Programm zu einem gewissen Zeitpunkt laufen. Ein TSR-Programm lädt entsprechende Teile in den Speicher und beendet sich anschließend wieder. Diese zurückgelassenen Programmteile können aktiviert werden:
* wenn das gerade laufende Anwendungsprogramm einen bestimmten Service des Betriebssystems aufruft, in den sich das speicherresidente Programm zuvor eingeklinkt hat (mitunter ''ist'' das speicherresidente Programm der entsprechende Betriebssystemteil);
* wenn das gerade laufende Anwendungsprogramm einen bestimmten Service des Betriebssystems aufruft, in den sich das speicherresidente Programm zuvor eingeklinkt hat (mitunter ''ist'' das speicherresidente Programm der entsprechende Betriebssystemteil);
* wenn ein [[Hardware]]-[[Interrupt]] das aktuell laufende Anwendungsprogramm unterbricht, und das speicherresidente Programm sich zuvor in den [[Unterbrechungsroutine|Interrupt-Service-Handler]] eingeklinkt hat (siehe auch [[Scheduler]]).
* wenn ein [[Hardware]]-[[Interrupt]] das aktuell laufende Anwendungsprogramm unterbricht, und das speicherresidente Programm sich zuvor in den [[Unterbrechungsroutine|Interrupt-Service-Handler]] eingeklinkt hat (siehe auch [[Scheduler]]).
Über letzte Variante kann das speicherresidente Programm zum Beispiel über eine Tastenkombination oder über (Hardware-)Systemuhr-Interrupt wieder aktiviert werden. Dies erzeugt einen Eindruck von Gleichzeitigkeit, obwohl stets nur ein Programm aktiv ist (siehe [[Multitasking]]).
Über letzte Variante kann das speicherresidente Programm zum Beispiel über eine Tastenkombination oder über (Hardware-)Systemuhr-Interrupt wieder aktiviert werden. Dies erzeugt einen Eindruck von Gleichzeitigkeit, obwohl stets nur ein Programm aktiv ist.

Bestimmte Teile eines Betriebssystems sind zwingend speicherresident (dürfen nicht auf die [[Festplattenlaufwerk|Festplatte]] [[Swapping|ausgelagert]] werden), dies sind v. a. [[Kernel (Betriebssystem)|Kernel]] und Festplatten[[Gerätetreiber|treiber]].


Teile von DOS selbst arbeiten nach demselben Prinzip, etwa die Systemuhr, der Bildschirm- und der Tastaturtreiber.
== Geschichte ==
In den Anfangsjahren der Computertechnik war es schwierig bis unmöglich, mehrere Prozesse [[Multitasking|parallel ablaufen]] zu lassen. Man behalf sich bei [[MS-DOS]] damit, dass man Programme nicht „normal“ über [[Interrupt]] 21h beendete, was sie aus dem Speicher entfernte, sondern über Interrupt 27h, was Programmreste im Hauptspeicher beließ (→ [[TSR-Programm]]). Erste Anwendungen für derartige Programme waren Systemuhr, Bildschirm- und Tastaturtreiber.


== Betriebssysteme ==
== Multitasking ==
{{Hauptartikel|Multitasking}}
Teile des Betriebssystems sind speicherresident.
Bei vielen Betriebssystemen selbst werden einige Programme automatisch und gleichzeitig ausgeführt, die sich z.&nbsp;B. über einen [[Taskmanager]] anzeigen lassen. Hierzu zählen etwa Drucker- oder Scannertreiber, aber auch Software für die Benutzung der Braillzeile oder diverse kleine [[Dienstprogramm|Hilfsprogramme]]. Derlei Programme halten in den meisten Fällen Funktionen bereit, die zu einem unbestimmten Zeitpunkt auf Wunsch benötigt werden. Speicherresident sind diese jedoch meist nur in dem Sinn, als dass sie im virtuellen Speicher geladen sind. Ob Teile dabei auch resident im RAM gehalten werden, hängt einerseits vom Programm selbst ab, andererseits von der Virtuellen Speicherverwaltung.


Ein Benutzer kümmert sich in den meisten Fällen jedoch nicht um solche Programme, da sie entweder Teil des Betriebssystems, oder Teil von Treibersoftware oder anderen Dienstprogrammen sind und vom Installationsprogramm dieser Software automatisch eingerichtet werden. Manche solcher Programme sind z.&nbsp;B. über das [[Benachrichtigungsfeld]] der [[Taskleiste]] aufrufbar.
Bereits die Betriebssysteme selbst installieren viele derartige Programme, einen Teil davon kann man über einen [[Taskmanager]] anzeigen lassen. Hierzu zählen etwa Drucker- oder Scannertreiber, aber auch Software für die Benutzung der Braillzeile oder diverse kleine Hilfsprogramme. Speicherresidente Programme halten in den meisten Fällen Funktionen bereit, die zu einem unbestimmten Zeitpunkt auf Wunsch benötigt werden. Der Benutzer kümmert sich in den meisten Fällen nicht um diese Programme.


== Viren ==
== Viren ==
Zeile 38: Zeile 52:
Speicherresidente Viren können sich nur verbreiten, wenn man infizierte Dateien benutzt. Hat bereits eine Infektion stattgefunden, kann mit der Entfernung ein beträchtlicher Datenverlust einhergehen. Moderne und aktuelle Antivirensoftware schützt weitgehend automatisch vor bösartigen speicherresidenten Programmen.
Speicherresidente Viren können sich nur verbreiten, wenn man infizierte Dateien benutzt. Hat bereits eine Infektion stattgefunden, kann mit der Entfernung ein beträchtlicher Datenverlust einhergehen. Moderne und aktuelle Antivirensoftware schützt weitgehend automatisch vor bösartigen speicherresidenten Programmen.


== Siehe auch ==
== Einzelnachweise ==
<references />
* [[Windows-Systemdienst]]
* [[Daemon]]
* [[TSR-Programm]]


[[Kategorie:Softwarearchitektur]]
[[Kategorie:Softwarearchitektur]]

Version vom 26. November 2021, 02:53 Uhr

Speicherresidenz bezeichnet allgemein das Vorhalten von Software im primären/physischen Arbeitsspeicher eines Computers.

Technik

Bei Betriebssystemen mit virtueller Speicherverwaltung wird der gesamte verfügbare Arbeitsspeicher in Speicherseiten unterteilt. Der Arbeitsspeicher wiederum besteht aus dem realen, physisch verfügbaren RAM, sowie aus Sekundärspeicher. Das Auslagern von Speicherseiten in den Sekundärspeicher nennt man Swapping.

Mit residentem Speicher bezeichnet wird jener Teil einer Software, der sich im primären Arbeitsspeicher, also im RAM, befindet, und somit nicht ausgelagert ist. Das können Teile eines Computerprogramms genauso sein wie z. B. Datenstrukturen des Kernels oder Gerätetreiber eines Betriebssystems.

Unterschieden wird auch zwischen den residenten Teilen einer Software, die sich prinzipiell gerade (zufällig) im RAM befinden, und Software, die sich immer dort befinden muss, denn Daten im RAM können für das Auslagern gesperrt werden. Dieser Teil des primären Arbeitsspeichers wird als englisch locked memory bezeichnet, die jeweiligen Speicherseiten als locked pages.[1]

Geschichte

Betriebssysteme ohne virtuellen Speicher haben prinzipiell nur residenten Speicher. Virtueller Speicher selbst bedingt, um effizient zu sein, eine Memory Management Unit im Prozessor. Betriebssysteme, die auf Hardware ohne MMU liefen, haben daher meist nur den physischen Arbeitsspeicher zur Verfügung und konnen keinen virtuellen Speicher zur Verfügung stellen. Ist der Speicher aufgebraucht, gibt das System eine englisch Out-of-memory-Fehlermeldung aus, die aussagt, dass dem Computersystem der Arbeitsspeicher ausgegangen ist. Ein Beispiel für ein solches System ist der Macintosh von Apple mit dem klassischen Mac OS bis Version 6. Komplizierter wird es allerdings, wenn ein System zwischen unterschiedlichen Speicherarten unterscheidet, was beispielsweise auf IBM-PC-kompatiblen Systemen der Fall ist. Aufgrund der Kompatibilität zum originalen IBM PC und dessen DOS waren nur der konventionelle Speicher von Programmen direkt nutzbar – war er verbraucht, kam es ebenfalls zu einer Fehlermeldung, auch dann, wenn noch genügend erweiterter Speicher (UMB, HMA, EMS) zur Verfügung stand. Erst mit XMS war es unter MS-DOS (und kompatiblen DOS) möglich, mehr als die ersten 640 kB RAM zu nutzen.

Aber auch Betriebssysteme mit virtueller Speicherverwaltung waren anfangs stets resident im RAM. Beispielsweise war der Kernel von Unix noch Mitte der 1980er Jahre (4.3BSD) stets zur Gänze im primären Arbeitsspeicher. Erst mit der Weiterentwicklung eines modernen Unix-Kernels Ende der 1980er, Anfang der 1990er Jahre, genannt Mach, waren auch Teile des Kernels auslagerbar.[2]

In einem Betriebssystem müssen die Entwickler sehr genau abwägen, welche Software resident im RAM vorgehalten werden soll und welche ausgelagert werden kann. Da es mehr Zeit kostet, ausgelagerte Software bei Bedarf wieder in den RAM zu laden, würde ein Anwender eine Verzögerung wahrnehmen, was bei bestimmten Betriebssystemfunktionen nicht erwünscht ist. Besonders bei einer Grafischen Benutzeroberfläche soll sich die Bedienung unmittelbar und verzögerungsfrei anfühlen, sodass deren Grundfunktionen resident im RAM vorgehalten werden müssen. Die Speicherverwaltung muss diesbezüglich jedoch eine Abwägung (trade-off) ermöglichen wenn der RAM knapp wird, damit auch Anwendungsprogramme noch geladen und benutzt werden können.

Hintergrunddienste

Prozesse, die aktiv bleiben, sind Hintergrundprozesse. Bei Programmen, die als Hintergrundprozesse konzipiert sind, spricht man auch von Diensten oder, hauptsächlich bei Unix-artigen Systemen, von Daemons. Unter dem am weitesten verbreiteten PC-Betriebssystem Windows ist der grundlegende Hintergrunddienst der Windows-Systemdienst.

Teile von Hintergunddiensten müssen oft resident im RAM geladen verbleiben, da sie immer wieder aufgerufen werden.

TSR-Programme

Ein Spezialfall von Speicherresidenz sind TSR-Programme unter DOS. Da DOS kein Multitasking-Betriebssystem ist, kann immer nur ein einziges Programm zu einem gewissen Zeitpunkt laufen. Ein TSR-Programm lädt entsprechende Teile in den Speicher und beendet sich anschließend wieder. Diese zurückgelassenen Programmteile können aktiviert werden:

  • wenn das gerade laufende Anwendungsprogramm einen bestimmten Service des Betriebssystems aufruft, in den sich das speicherresidente Programm zuvor eingeklinkt hat (mitunter ist das speicherresidente Programm der entsprechende Betriebssystemteil);
  • wenn ein Hardware-Interrupt das aktuell laufende Anwendungsprogramm unterbricht, und das speicherresidente Programm sich zuvor in den Interrupt-Service-Handler eingeklinkt hat (siehe auch Scheduler).

Über letzte Variante kann das speicherresidente Programm zum Beispiel über eine Tastenkombination oder über (Hardware-)Systemuhr-Interrupt wieder aktiviert werden. Dies erzeugt einen Eindruck von Gleichzeitigkeit, obwohl stets nur ein Programm aktiv ist.

Teile von DOS selbst arbeiten nach demselben Prinzip, etwa die Systemuhr, der Bildschirm- und der Tastaturtreiber.

Multitasking

Bei vielen Betriebssystemen selbst werden einige Programme automatisch und gleichzeitig ausgeführt, die sich z. B. über einen Taskmanager anzeigen lassen. Hierzu zählen etwa Drucker- oder Scannertreiber, aber auch Software für die Benutzung der Braillzeile oder diverse kleine Hilfsprogramme. Derlei Programme halten in den meisten Fällen Funktionen bereit, die zu einem unbestimmten Zeitpunkt auf Wunsch benötigt werden. Speicherresident sind diese jedoch meist nur in dem Sinn, als dass sie im virtuellen Speicher geladen sind. Ob Teile dabei auch resident im RAM gehalten werden, hängt einerseits vom Programm selbst ab, andererseits von der Virtuellen Speicherverwaltung.

Ein Benutzer kümmert sich in den meisten Fällen jedoch nicht um solche Programme, da sie entweder Teil des Betriebssystems, oder Teil von Treibersoftware oder anderen Dienstprogrammen sind und vom Installationsprogramm dieser Software automatisch eingerichtet werden. Manche solcher Programme sind z. B. über das Benachrichtigungsfeld der Taskleiste aufrufbar.

Viren

Vorgehensweise von Viren

In den meisten Fällen geschieht die Infektion unbemerkt. Ist der Virus einmal im Speicher, benötigt er das Infektionsprogramm nicht mehr, es genügt ihm ein einziger Aufruf. Die weitere Verbreitung geschieht durch den Virus selbst.

Auslöser einer Infektion ist das Starten einer infizierten Datei, die mittels Datenträger oder Netz auf den Rechner gelangt ist. Der Virus kopiert sich selbst meist zuerst an möglichst viele Stellen auf allen Laufwerken des Rechners oder Netzwerkes. Dabei wird kein Schadcode ausgeführt, dieses Vermehren soll möglichst unbemerkt geschehen. Die infizierten Wirtsprogramme laufen weitgehend unverändert weiter, wenn der Virus korrekt programmiert ist. Durch diese Verbreitung versucht der Virus, die Wahrscheinlichkeit möglichst groß zu halten, dass er beim nächsten Start des Rechners wieder aktiv ist.

Stealthviren sind eine Weiterentwicklung der speicherresidenten Viren, sie versuchen, ihre Identität aktiv zu verstecken.

Orte der Infektionen

CPUs segmentieren den Hauptspeicher hierarchisch in Ringen. Die Stärke der Residenz eines Virus hängt davon ab, in welchem Ring er sich befindet. Je höher die Hierarchiestufe seines Speicherbereiches, umso schwieriger wird es, den Virus zu entfernen.

Auch wurden bereits Viren-Angriffe auf die Cache-Speicher von Chipsätzen getätigt. Dort ist es extrem schwierig, den Virus zu entfernen, da Betriebssysteme dem Anwender i.a. keinerlei Verfügungsgewalt über den Cache eines Chipsatzes bieten.

Schutz vor speicherresidenten Viren

Speicherresidente Viren können sich nur verbreiten, wenn man infizierte Dateien benutzt. Hat bereits eine Infektion stattgefunden, kann mit der Entfernung ein beträchtlicher Datenverlust einhergehen. Moderne und aktuelle Antivirensoftware schützt weitgehend automatisch vor bösartigen speicherresidenten Programmen.

Einzelnachweise

  1. John Fusco: The Linux Programmer's Toolbox. Pearson Education, 2007, ISBN 978-0-13-270304-8, 6.5.3 Resident and Locked Memory (englisch, eingeschränkte Vorschau in der Google-Buchsuche): “A subset of the resident memory is locked memory, which refers to any virtual memory that has been explicitly locked into RAM by the process. A locked page cannot be swapped and is always resident in RAM.”
  2. Peter A. Gloor: Synchronisation in verteilten Systemen: Problemstellung und Lösungsansätze unter Verwendung von objektorientierten Konzepten. B. G. Teubner, 1989, ISBN 978-3-519-02494-1, 1.2.3 Mach, S. 15 (eingeschränkte Vorschau in der Google-Buchsuche): „Ein konventionelle UNIX-Kernel ist ein grosses Binärfile, das sich resident im Hauptspeicher befindet. Im Gegensatz dazu lassen sich einzelne Teile des Mach-Kernels genauso auf Sekundärspeicher zwischenlagern (paging) wie gewöhnliche Anwendungsprogramme.“