Daemon
In der Informatik ist ein Daemon ein Programm, das kontinuierlich als Hintergrundprozess läuft und anläuft, um regelmäßige Dienstanforderungen zu bearbeiten, die oft von entfernten Prozessen kommen. Das Daemon-Programm wird vom Betriebssystem auf die Anfrage aufmerksam gemacht und beantwortet diese entweder selbst oder leitet sie an ein anderes Programm oder einen anderen Prozess weiter.
Zu den üblichen Daemon-Prozessen gehören Druck-Spooler, E-Mail-Manager und andere Programme, die Verwaltungsaufgaben erledigen. Viele Unix- oder Linux-Dienstprogramme laufen als Daemons. Unter Linux wird zum Beispiel der NTP-Daemon (Network Time Protocol) verwendet, um Zeitunterschiede zwischen der Uhr des Computers, auf dem er läuft, und der aller anderen Computer im Netzwerk zu messen. Auf jedem der Host-Computer läuft ein Zeit-Daemon, wobei einer als primär und alle anderen als sekundär bezeichnet werden. Sekundäre Daemons setzen die Netzwerkzeit auf ihrem Host-Computer zurück, indem sie zunächst eine Anfrage an den primären Zeit-Daemon senden, um die korrekte Netzwerkzeit zu ermitteln.
Ein Daemon spielt die Rolle eines Servers in einem Client-Server-Modell.
Welche Rolle spielen Daemons in Webdiensten?
Eines der offensichtlichsten Beispiele für einen Daemon ist der Hypertext-Transfer-Protocol-Daemon (HTTPd), der auf jedem Webserver läuft und ständig im Ruhezustand wartet, bis Anfragen von Web-Clients und deren Benutzern eingehen. Frühere Versionen von HTTP-Daemons haben für jede Anfrage einen neuen Prozess gestartet. Der neue Prozess, eine Kopie des Daemons, holte den angeforderten Inhalt und gab ihn an den anfragenden Client zurück. Danach würde der neue Prozess eliminiert.
Durch das Erzeugen (Spawning) eines neuen Prozesses konnte der ursprüngliche Prozess wieder in den Ruhezustand übergehen, um auf weitere Anfragen zu warten. Mit diesem Ansatz sollte verhindert werden, dass der ursprüngliche Prozess zu sehr ausgelastet ist, um neue Anfragen zu bearbeiten, da ein Daemon, der alle Anfragen selbst bearbeitet, ein System anfälliger für Hacker machen würde. Denial-of-Service-Angriffe basieren häufig auf der Strategie, einen Daemon zu sehr zu beschäftigen, um eingehende Anfragen zu bearbeiten.
Modernere HTTP-Daemons, wie zum Beispiel Apache, bearbeiten Anfragen mit Hilfe von Threads, anstatt neue Prozesse zu erzeugen. Threads, die erst nach der Implementierung und dem Einsatz der ersten Generation von HTTP-Daemons zum Einsatz kamen, ermöglichen es, dass verschiedene Teile desselben Prozesses parallel laufen können. Der Hauptteil eines Daemons kann auf neue Anfragen warten, während andere Threads ältere Anfragen bearbeiten. Threads erfordern weniger Overhead als das Erzeugen eines neuen Prozesses, was Zeit in Anspruch nimmt, und der neue Prozess benötigt Speicherplatz, um zu laufen.
Ein dritter Ansatz wird durch den Nginx-HTTP-Daemon veranschaulicht, der auf einer ereignisgesteuerten Architektur basiert und in einem einzigen Thread arbeitet. Anfragen werden an Arbeitsprozesse weitergegeben, die ständig im Hintergrund laufen, das heißt sie werden nicht nur zur Bearbeitung einer Anfrage gestartet, um danach sofort wieder zu verschwinden. Der Administrator bestimmt, wie viele Worker-Prozesse erstellt werden sollen.
Welche Art von Betriebssystemen benötigen Daemons?
Da Daemons spezielle Dienste des Betriebssystems benötigen, verhalten sie sich von Betriebssystem zu Betriebssystem leicht unterschiedlich. Die ersten Daemons wurden auf dem Unix-Betriebssystem ausgeführt und waren auf die Funktionen von Unix zugeschnitten.
Daemons werden über die Unix-Befehlszeile oder in einer Startdatei gestartet; diese Dateien enthalten Skripte, die beim Hochfahren des Systems oder bei einem anderen Ereignis ausgeführt werden, zum Beispiel bei der Anmeldung eines Benutzers oder wenn ein neues Shell-Skript gestartet wird. Sie laufen dann im Hintergrund und warten auf ein Signal des Betriebssystems, um aufzuwachen und in Aktion zu treten.
Daemons können nur auf Multitasking-Betriebssystemen ausgeführt werden. Sie wurden in Microsoft Windows, beginnend mit der NT-Version, implementiert und werden oft als Windows-Dienste anstelle von Daemons bezeichnet.
Beispiele für Daemons
Daemons reagieren auf Warnungen des Betriebssystems, wenn ein externes Ereignis eintritt, beispielsweise das Eintreffen einer Nachricht im Netz. Bei Nachrichten, die aus dem Netz kommen, sucht das TCP/IP-Modul auf dem Host-Computer nach der Anschlussnummer der Nachricht und sendet eine Warnung an den Daemon, der dieser Anschlussnummer zugewiesen ist. Wenn also eine Nachricht mit dieser Portnummer empfangen wird, sendet der im Betriebssystem integrierte TCP/IP-Stack ein Signal an den HTTPd.
Auf jedem System, das auf Unix oder einer Variante von Unix basiert, laufen mehrere Daemons, deren Namen typischerweise mit dem Buchstaben d enden:
- Dies ist der erste Daemon, der beim Booten von Unix startet und alle anderen Prozesse in Gang setzt.
- Dieser Super-Daemon lauscht auf Internet-Anfragen an einer bestimmten Portnummer und startet das entsprechende Serverprogramm, um sie zu bearbeiten. Zu den von inetd bearbeiteten Diensten gehören rlogin, telnet, ftp, talk und finger.
- Dieser Daemon führt geplante Befehle aus.
- Dieser Daemon bietet Dynamic-Host-Configuration-Protocol-Dienste an.
- Dieser Daemon wird oft von inetd gestartet, um auf den Befehl finger zu reagieren.
- Dieser Daemon wird oft von inetd gestartet, um File-Transfer-Protocol-Anfragen zu bearbeiten.
- Dieser Daemon fungiert als Webserver.
- Dieser Daemon stellt Line-Printer-Protocol-Anfragen bereit.
- Dieser Daemon stellt Domain-Name-Protocol-Dienste bereit.
- Dieser Daemon stellt Network-File-System-Dienste bereit.
- Dieser Daemon stellt NTP-Dienste bereit, entweder als primärer oder sekundärer Dienst.
- portmap/rpcbind. Dieser Daemon konvertiert Remote-Procedure-Call-Programmnummern in Internet-Portnummern.
- Dieser Daemon bietet Secure-Shell-Dienste an.
- Dieser Simple-Main-Transfer-Protocol- oder Mailer-Daemon bearbeitet eingehende E-Mail-Nachrichten.
- Dieser Kernel-Daemon verschiebt ganze Prozesse zwischen Hauptspeicher und Sekundärspeicher als Teil der virtuellen Speicherverwaltung.
- Dieser Daemon bearbeitet Protokollierungsanfragen des Betriebssystemkerns, anderer Prozesse auf demselben Rechner und anderer Prozesse auf entfernten Rechnern.
- Dieser Daemon synchronisiert Dateien auf verschiedenen Servern.
- Dieser Daemon ersetzt init auf Linux-Systemen.
- Dieser Daemon wählt Seiten aus, die noch nicht referenziert wurden und die bei Bedarf aus dem Hauptspeicher in den Sekundärspeicher ausgelagert werden können.
- Dieser Daemon bindet Prozesse auf einem Network Information Service-Client an Dienste auf einem NIS-Server.
Geschichte der Daemons
Der Begriff Daemon wurde 1963 von Programmierern des Projekts MAC (Mathematics and Computation) des Massachusetts Institute of Technology (MIT) geprägt, inspiriert von Maxwells Dämon, einem imaginären Agenten in Physik und Thermodynamik. In einem Gedankenexperiment von James Clerk Maxwell aus dem Jahr 1867 kontrollierte ein Dämon eine kleine masselose Tür zwischen zwei Gaskammern und zwang die sich schnell bewegenden Moleküle in die eine Richtung und die sich langsam bewegenden Moleküle in die andere Richtung. In der griechischen Mythologie galt ein Dämon als ein übernatürliches Wesen oder eine übernatürliche Macht.
Die MIT-Programmierer dachten, dass Daemon ein angemessener Name für einen Hintergrundprozess wäre, der unermüdlich an der Ausführung von Systemaufgaben arbeitet. Doch statt des Begriffs Dämon verwendeten sie Daemon, was eine ältere Form des Wortes ist.
Als das Konzept allgemein bekannt wurde, wurde ein Akronym daraus gemacht. So steht Daemon in manchen Kreisen für Disk and Execution Monitor.