1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
pstricks
"Himmelobjekt"
1.12 Methoden zur Synchronisation:
2.12.1 Interne Synchronisation in einem synchronen System
t_min und t_max, sowie t_max - t_min = "Die Unsicherheit"
t_2 = t + 1/2(t_max + t_min) -> Synchronisationsfehler < U/2
2.12.2 Christians Methode zur externen Synchronisation
Nutzt die Roundtrip-Time
Features:
Lokale Zeit
Globale Zeit
Software Uhr vs. Hardware Uhr
Abweichungsgeschwindigkeit der Uhren
Externe Synchronisierung von Uhren
Interne Synchronisierung von Uhren
=== Szenario Konfiguration === in [] bedeutet, wird spaeter implementiert
Anzahl der Prozesse
1 - n (z.b. 3, wenn ein Prozess der Zeitserver, und 2 Prozesse Clients darstellen sollen)
Szenario
Interne Synchronisation der Zeit
t_min -> Einstellen
t_max -> Einstellen
Externe Synchronisation der Zeit nach Christians Methode
Voreingestellte Prozessausfallwahrscheinlichkeit (z.B. Prozessabsturz)
0% - 100%
Voreingestellte Prozessverzoegerungswahrscheinlichkeit (z.B. wg. Scheduling des Betriebssystems)
0% - 100%
Voreingestellte Nachrichtenausfallwahrscheinlichkeit (z.B. Paket geht im Netzwerk verloren)
0% - 100%
Voreingestellte Nachrichtenverzoegerungswahrscheinlichkeit (z.B. wg. Netzwerkstau)
0% - 100%
Voreingestellte Gangabweichungsgeschwindigkeit der Hardwareuhr (Keine Hardwareuhr geht 100% richtig)
0 - n
=== Main classes ===
class Process
processNumber (einzigartig, num@ipnummer)
time (lokale Hardwareuhr)
outageProbability (wahrscheinlichkeit, dass der prozess abstuerzt)
delayProbability (wahrscheinlichkeit, dass der prozess sich verzoegert)
programmingVector (gibt an, wann [welche zeit] der prozess eine anfrage startet)
=== Message classes ===
class Message (Wird als Javaobjekt an die anderen Prozesse uebergeben)
receivers (all [standard] oder liste aller prozesse [nummern])
isRequest (true = request, false = answer)
sendTime (zeit vom sender)
recvTime (zeit vom empfaenger)
messageComment (irgendein string)
messageType (von welchem typ, evtl weglassen und instanceof operator nutzen)
internSync
externSync
etc..
outageProbability (wahscheinlichkeit, dass das nachrichtenpaket verloren geht)
delayProbability (wahrscheinlichkeit, dass der nachrichtenversand sich verzoegert)
class InternalSynchronizationMessage extends Message
time
class ExternalSynchronizationMessage extends Message /* Christians Methode */
time
requestTime
=== Implementation classes ===
abstract class Implementation
abstract sendRequestMessage(...)
receivedMessage(Message message)
if (!isForMe(message.receivers))
return
if (message.isRequest)
receivedRequestMessage(message)
else
receivedResponseMessage(message)
abstract receivedRequestMessage(Message message)
abstract receivedResponseMessage(Message message)
class InternalSynchronizationImplementation extends Implementation
sendRequestMessage
message.isRequest = true
sendOverNetwork(message)
receivedRequestMessage
process.time = message.time
sendOverNetwork(message)
receivedResponseMessage(Message message)
message.time = process.time + 1/2 * (t_max + t_min)
class ExternalSynchronizationImplementation extends Implementation
sendRequestMessage
message.isRequest = true
message.requestTime = process.time
sendOverNetwork(message)
receivedRequestMessage
message.time = time
sendOverNetwork(message)
receivedResponseMessage(Message message)
rtt = process.time - message.requestTime
process.time = message.time + rtt / 2
|