<?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=Logische_Uhr</id>
	<title>Logische Uhr - 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=Logische_Uhr"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Logische_Uhr&amp;action=history"/>
	<updated>2026-06-12T10:27:13Z</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=Logische_Uhr&amp;diff=163397&amp;oldid=prev</id>
		<title>imported&gt;TaxonKatBot: Bot: Kategorie:Uhr umbenannt in Kategorie:Uhren: laut Diskussion</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Logische_Uhr&amp;diff=163397&amp;oldid=prev"/>
		<updated>2023-03-07T14:03:33Z</updated>

		<summary type="html">&lt;p&gt;Bot: &lt;a href=&quot;/index.php/Kategorie:Uhr&quot; title=&quot;Kategorie:Uhr&quot;&gt;Kategorie:Uhr&lt;/a&gt; umbenannt in &lt;a href=&quot;/index.php/Kategorie:Uhren&quot; title=&quot;Kategorie:Uhren&quot;&gt;Kategorie:Uhren&lt;/a&gt;: laut &lt;a href=&quot;/index.php?title=Wikipedia:WikiProjekt_Kategorien/Diskussionen/2023/Februar/28&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Wikipedia:WikiProjekt Kategorien/Diskussionen/2023/Februar/28 (Seite nicht vorhanden)&quot;&gt;Diskussion&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Eine &amp;#039;&amp;#039;&amp;#039;Logische Uhr&amp;#039;&amp;#039;&amp;#039; ist eine Komponente eines [[Computer]]systems, die dafür verwendet wird, [[Ereignis]]sen einen eindeutigen [[Zeitstempel]] zu geben. Anders als bei einer „normalen“ [[Echtzeituhr]], die die physikalische [[Zeit]] misst, ist der einzige Anspruch an eine logische Uhr, dass sie &amp;#039;&amp;#039;[[reelle monotone Funktion|streng monoton]]&amp;#039;&amp;#039; steigende Werte abgibt, so dass die [[Kausalordnung]] der Ereignisse erkennbar ist.&lt;br /&gt;
&lt;br /&gt;
Der Zweck einer solchen Uhr ist es, Ereignisse über ihren Zeitstempel in eine [[Kausalordnung|Finalordnung]] bringen zu können. In einem System mit nur einem [[Prozess (Computer)|Prozess]] ist das trivial: man braucht nur einen Zähler. Interessant wird das Problem, wenn man versucht, die logischen Uhren mehrerer Prozesse ([[Verteilte Systeme]]) so zu [[Synchronisation|synchronisieren]], dass man eine Kausalordnung für das Gesamtsystem angeben kann. Dafür ist es vor allem notwendig, das [[Absender|Senden]] und [[Empfänger (Information)|Empfangen]] von [[Nachricht]]en als Ereignisse zu betrachten und mit einem Zeitstempel zu versehen.&lt;br /&gt;
&lt;br /&gt;
Dass hierfür der Begriff &amp;#039;&amp;#039;[[Synchronisation|synchronisieren]]&amp;#039;&amp;#039; verwendet wird, hat historische Gründe: Zunächst wurde versucht, die Kausalordnung über [[Echtzeituhr]]en zu bestimmen, die zu diesem Zweck möglichst synchron gehalten werden müssen. Später erkannte man, dass es ausreichend und viel einfacher ist, mit einem abstrakten Zeitbegriff zu arbeiten, der sich auf die Bestimmung der Kausalität beschränkt.&lt;br /&gt;
&lt;br /&gt;
== Uhrenbedingung und Kausalordnung ==&lt;br /&gt;
Die &amp;#039;&amp;#039;[[Happened-Before-Relation]]&amp;#039;&amp;#039; &amp;lt;math&amp;gt;\rightarrow&amp;lt;/math&amp;gt; gibt an, dass ein Ereignis &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; vor einem Ereignis &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; stattfindet (&amp;lt;math&amp;gt;a \rightarrow b&amp;lt;/math&amp;gt;)&amp;lt;ref&amp;gt;Lamport, Leslie (1978). [https://amturing.acm.org/p558-lamport.pdf &amp;quot;Time, Clocks and the Ordering of Events in a Distributed System&amp;quot;], &amp;#039;&amp;#039;Communications of the ACM&amp;#039;&amp;#039;, 21(7), 558–565.&amp;lt;/ref&amp;gt;. Entweder sind hierbei a und b Ereignisse auf demselben Prozess oder a ist der Versand und b der Empfang einer Nachricht. Diese Relation lässt sich auch so lesen, dass &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; eine [[Kausalität|Ursache]] von &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; sein könnte. Ein tatsächlicher kausaler Zusammenhang ist nicht erforderlich. Wenn &amp;lt;math&amp;gt;a \rightarrow b&amp;lt;/math&amp;gt;, dann gilt außerdem, dass &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; nicht vor &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; stattgefunden haben kann (und entsprechend keine Ursache für &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; sein kann).&lt;br /&gt;
&lt;br /&gt;
Die Menge aller Uhren im System sei repräsentiert durch die Funktion &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;, welche jedem Ereignis eine Zahl (Zeitstempel) zuweist. Damit man nun aus den Zeitstempeln eine [[Kausalität|kausale]] ([[Halbordnung|Halb]]-)[[Ordnungsrelation|Ordnung]] ableiten kann, muss das (schwache) &amp;#039;&amp;#039;&amp;#039;Konsistenzkriterium für Uhren&amp;#039;&amp;#039;&amp;#039; (bzw. die &amp;#039;&amp;#039;&amp;#039;schwache Uhrenbedingung&amp;#039;&amp;#039;&amp;#039;) erfüllt sein.&lt;br /&gt;
&lt;br /&gt;
* Wenn das Ereignis &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; vor Ereignis &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; stattfindet (im Sinne der Happened-Before-Relation), dann ist der Zeitstempel von &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; kleiner als der von &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;. In Zeichen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a \rightarrow b  \Rightarrow  C(a) &amp;lt; C(b) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aus diesen Relationen ergibt sich im Allgemeinen nur eine [[Halbordnung]]. Nicht von jedem Paar von zwei Ereignissen kann gesagt werden, dass das eine die Ursache des anderen war. Wir schreiben dann:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;a \nrightarrow b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn keines der beiden Ereignisse Ursache des anderen ist, sind sie &amp;#039;&amp;#039;unabhängig&amp;#039;&amp;#039;. Man spricht dann von &amp;#039;&amp;#039;[[Nebenläufigkeit]]&amp;#039;&amp;#039; (oder sogar &amp;#039;&amp;#039;[[Synchronismus|Gleichzeitigkeit]]&amp;#039;&amp;#039; – wobei dieser Begriff an sich nicht exakt ist: Siehe [[Relativität der Gleichzeitigkeit]]). In Zeichen:&lt;br /&gt;
:&amp;lt;math&amp;gt;a \nrightarrow b \land \ b \nrightarrow a  \Leftrightarrow  a \| b \Leftrightarrow  b \| a&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei ist ein Ereignis immer nebenläufig zu sich selbst: &amp;lt;math&amp;gt;\forall a: a \| a&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Nebenläufigkeit ist [[Symmetrische Relation|symmetrisch]], aber &amp;#039;&amp;#039;nicht&amp;#039;&amp;#039; [[Transitive Relation|transitiv]]: &amp;lt;math&amp;gt; a \| b \Leftrightarrow b \| a &amp;lt;/math&amp;gt;, aber &amp;lt;math&amp;gt; a \| b \land b \| c \  \not \Rightarrow \  a \| c&amp;lt;/math&amp;gt;: Stellen wir uns vor, die Ereignisse &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; finden am selben Ort statt, so dass &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; Ursache von &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; ist, also &amp;lt;math&amp;gt;a \rightarrow c&amp;lt;/math&amp;gt;. Irgendwo anders findet völlig unabhängig das Ereignis b statt, es gilt also &amp;lt;math&amp;gt;b \| a&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt; b \| c &amp;lt;/math&amp;gt; bzw. &amp;lt;math&amp;gt;a \| b&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt; c \| b &amp;lt;/math&amp;gt;. Aus der Transitivität würde nun folgen, dass auch &amp;lt;math&amp;gt;a \| c&amp;lt;/math&amp;gt; gilt – tut es aber nicht, da ja laut Annahme &amp;lt;math&amp;gt;a \rightarrow c&amp;lt;/math&amp;gt; gilt, also &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; Ursache von &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; ist.&lt;br /&gt;
&lt;br /&gt;
Das&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;starke&amp;#039;&amp;#039; Konsistenzkriterium für Uhren&amp;#039;&amp;#039;&amp;#039; (oder &amp;#039;&amp;#039;&amp;#039;starke Uhrenbedingung&amp;#039;&amp;#039;&amp;#039;) verlangt außerdem, dass auch die Umkehrung gelten muss:&lt;br /&gt;
&lt;br /&gt;
* Wenn der Zeitstempel von &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; kleiner als der von &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;, dann fand das Ereignis &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; vor Ereignis &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; statt. In Zeichen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;C(a) &amp;lt; C(b)  \Rightarrow  a \rightarrow b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn die starke Uhrenbedingung erfüllt ist, kann man an der Uhr auch ablesen, welche Ereignisse &amp;#039;&amp;#039;[[Nebenläufigkeit|nebenläufig]]&amp;#039;&amp;#039; sind.&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
Logische Uhren finden ihre Anwendung vor allem in Bereichen, in denen Kausalität und Verlässlichkeit eine große Rolle spielen. Dies ist vor allem in [[Transaktionssystem]]en der Fall. Sie dienen dazu, eingehende Nachrichten und Befehle in der richtigen Reihenfolge zu bearbeiten. Insbesondere ist es unter Verwendung von logischen Uhren möglich, ein &amp;#039;&amp;#039;verlässliches, wohlgeordnetes [[Multicast]]-Protokoll&amp;#039;&amp;#039; zu entwerfen.&lt;br /&gt;
&lt;br /&gt;
Allerdings sind die Verfahren zur Synchronisation von logischen Uhren in großen Systemen im Allgemeinen recht [[Effizienz (Informatik)|ineffizient]]. Deshalb wird bei den „populären“ Protokollen, die im Internet Verbreitung gefunden haben, entweder mit der „physischen“ Zeit gearbeitet – man hofft einfach, dass die Uhren der verschiedenen Rechner nicht zu unterschiedlich gehen (ein Beispiel hierfür ist [[HTTP]]). Oder man beschränkt sich auf die Synchronisation von nur zwei Systemen ([[Client-Server]]-Modell) unter Verwendung von [[Sequenznummer]]n (wie bei [[Transmission Control Protocol|TCP]]).&lt;br /&gt;
&lt;br /&gt;
== Verfahren ==&lt;br /&gt;
Es gibt verschiedene Verfahren, um konsistente logische Uhren in verteilten Systemen zu realisieren. Die bekanntesten sind vermutlich:&lt;br /&gt;
&lt;br /&gt;
* die [[Lamport-Uhr]] – sie genügt mit relativ wenig Aufwand dem (schwachen) Konsistenzkriterum.&lt;br /&gt;
* [[Vektoruhr]]en sind etwas aufwendiger, genügen dafür aber dem starken Konsistenzkriterum.&lt;br /&gt;
&lt;br /&gt;
Daneben gibt es noch diverse Verfahren, um [[Echtzeituhr]]en über ein [[Rechnernetz|Netzwerk]] zu [[Synchronisation|synchronisieren]]. Siehe dazu u. a. den [[Algorithmus von Cristian]] und das [[Network Time Protocol]].&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=4629531-8}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Theoretische Informatik]]&lt;br /&gt;
[[Kategorie:Verteiltes System]]&lt;br /&gt;
[[Kategorie:Datenbanktheorie]]&lt;br /&gt;
[[Kategorie:Uhren]]&lt;/div&gt;</summary>
		<author><name>imported&gt;TaxonKatBot</name></author>
	</entry>
</feed>