summaryrefslogtreecommitdiff
path: root/docs/brainstorm.txt
blob: 5c333384f07d04933e580e7a73b573ee07eb92f7 (plain)
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