瀏覽代碼

init HW10

Michael Mächtel 7 年之前
父節點
當前提交
e487e0f1e5
共有 2 個檔案被更改,包括 158 行新增0 行删除
  1. 28
    0
      hw10/README.md
  2. 130
    0
      hw10/task1/README.md

+ 28
- 0
hw10/README.md 查看文件

@@ -0,0 +1,28 @@
1
+# hw10
2
+
3
+## Tasks
4
+
5
+To fulfill **hw10** you have to solve:
6
+
7
+- task1
8
+
9
+## Files
10
+
11
+You find already or reuse some files for rust tasks. Please remember to
12
+use cargo to create a new project for each task and copy the given files
13
+into their dedicated directories.
14
+
15
+## Pull-Request
16
+
17
+Please merge any accepted reviews into your branch. If you are ready
18
+with the homework, all tests run, please create a pull request named
19
+
20
+**hw10**.
21
+
22
+## hw10 credits
23
+
24
+| Task     | max. Credits | Comment |
25
+| :------- | :----------- | :------ |
26
+| task1    | 4            |         |
27
+| Deadline | -            |         |
28
+| =        | 4            |         |

+ 130
- 0
hw10/task1/README.md 查看文件

@@ -0,0 +1,130 @@
1
+# Homework hw10 task1
2
+
3
+- [Ziel](#ziel)
4
+- [Aufbau der Nachricht](#aufbau-der-nachricht)
5
+- [Aufgaben](#aufgaben)
6
+    - [Synchronisierung der Queue](#synchronisierung-der-queue)
7
+    - [Einbindung Proof-of-Work Mechanismus mit mehreren Threads](#einbindung-proof-of-work-mechanismus-mit-mehreren-threads)
8
+    - [Kommandos des Servers](#kommandos-des-servers)
9
+    - [Datenverlust vermeiden](#datenverlust-vermeiden)
10
+- [Fehlerbehandlung](#fehlerbehandlung)
11
+- [Dokumentation](#dokumentation)
12
+- [Bibliothek](#bibliothek)
13
+- [Testabdeckung](#testabdeckung)
14
+      Threads](#einbindung-proof-of-work-mechanismus-mit-mehreren-threads)
15
+    - [Kommandos des Servers](#kommandos-des-servers)
16
+    - [Datenverlust vermeiden](#datenverlust-vermeiden)
17
+- [Fehlerbehandlung](#fehlerbehandlung)
18
+- [Dokumentation](#dokumentation)
19
+- [Bibliothek](#bibliothek)
20
+- [Testabdeckung](#testabdeckung)
21
+
22
+## Ziel
23
+
24
+Ziel dieser Aufgabe ist es, einen Server für den Proof-of-Work Mechanismus zu
25
+erstellen. Dazu soll auf Basis der vorherigen Aufgaben ein Server erstellt
26
+werden, der folgende Funktionalität aufweist:
27
+
28
+-   unbegrenzter paralleler Zugriff von Clients, um das Suchen von Hashwerten
29
+    anzufordern und gefundene Hashes abzufragen. Die Clients (z.B. **nc**)
30
+    übertragen dazu jeweils Nachrichten mit den Informationen:
31
+    -   Muster,
32
+    -   \<Zahlenraum\>
33
+    -   \<Port\>
34
+-   Multi-Threaded Implementierung für das Suchen der Hashes
35
+    -   wird kein Zahlenraum angegeben, dann wird ein Hash gesucht, der das
36
+        Muster enthält.
37
+-   Interaktion mit dem Server über Kommandos, um den Server zu parametrisieren
38
+    und zu steuern
39
+-   Beenden und späteres Starten des Servers ohne Datenverluste.
40
+
41
+Der Code muss modular erstellt werden. Wie Sie eigene Crates in Ihrem Projekt
42
+benutzen, haben Sie bereits in hw9 Task2 kennen gelernt.
43
+
44
+Die einzelnen Aufgabenteile sind grob beschrieben. Wie Sie im Detail die Aufgabe
45
+umsetzen, ist Ihnen überlassen.
46
+
47
+## Aufbau der Nachricht
48
+
49
+Die Nachricht besteht aus einem String mit "Muster,\<Zahlenraum>,\<Port>":
50
+
51
+-   Muster muss immer angegeben werden
52
+-   Zahlenraum ist optional. Enthält die Nachricht diesen Wert, so werden ALLE
53
+    Hashes im Zahlenraum gesucht, die dieses Muster enthalten.
54
+-   Port ist optional. Enthält die Nachricht diesen Eintrag, so wird das
55
+    Ergebnis in einer Ergebnis-Queue abgelegt, die der Client über die
56
+    Portnummer erreicht.
57
+
58
+## Aufgaben
59
+
60
+### Synchronisierung der Queue
61
+
62
+Um einen parallelen Zugriff auf den Server zu ermöglichen, muss die bisherige
63
+Datenstruktur des Servers aus HW9 für einen parallelen Zugriff entsprechend
64
+erweitert werden
65
+
66
+### Einbindung Proof-of-Work Mechanismus mit mehreren Threads
67
+
68
+Aufträge für Server werden in die Auftrags-Queue geschrieben und die Einträge in
69
+dieser Queue vom Server nacheinander ausgeführt. Zunächst wird das gefundene
70
+Ergebnis auf der Konsole ausgegeben. Implementieren Sie das Verhalten des
71
+Servers entsprechend der Nachricht in der Auftrags-Queue:
72
+
73
+-   Wird nur ein "Muster" angegeben, so sucht der Server mit mehreren Threads
74
+    nach EINEM Hashwert, der dieses Muster enthält.
75
+-   Wird "Muster,Zahlenraum" angegeben, so werden alle Hashes mit diesem Muster
76
+    im Zahlenraum gesucht.
77
+-   Wird "Muster,Zahlenraum,Portnummer" angegeben, so werden alle gefundenen
78
+    Hashes im Zahlenraum in einer extra Queue (Ergebnis-Queue) gespeichert und
79
+    können dort vom Client (z.B. **nc**) ausgelesen werden.
80
+
81
+### Kommandos des Servers
82
+
83
+-   `exit`: kontrolliertes Beenden des Servers.
84
+-   `halt`: sofortiges Anhalten der Aufträge, so dass keine CPU Last mehr vom
85
+    Server ausgeht. Der Status des gerade bearbeiteten Auftrags muss nicht
86
+    gesichert werden.
87
+-   `continue`: Fortfahren mit den Aufträgen, ein evtl. zuvor abgebrochener
88
+    Auftrag wird wiederholt
89
+-   `threads`: Ändern der Anzahl der Threads, die zum Suchen verwendet werden.
90
+    Dies wirkt sich erst beim nächsten zu bearbeitenden Auftrag aus, sofern
91
+    dieses Kommando während der Ausführung eines Auftrags auftritt. 
92
+
93
+### Datenverlust vermeiden
94
+
95
+Beim obigen `exit` Kommando gehen bisher alle Daten in der Auftrags-Queue, sowie
96
+verschiedener möglicher Ergebnis-Queues verloren. Um dies zu vermeiden werden
97
+vor dem Beenden des Servers mögliche Einträge in den Queues auf der Festplatte
98
+gespeichert und beim Starten des Servers wieder eingelesen. Zum Serialisieren
99
+der Queue-Einträge dürfen Sie externe Crates benutzen.
100
+
101
+Wird der Server gestartet überprüft er somit, ob evtl. alte Zustände auf der
102
+Festplatte vorhanden sind und falls nicht, initialisiert er eine leere
103
+Auftrags-Queue und erstellt zunächst auch keine Ergebnis-Queue(s).
104
+
105
+## Fehlerbehandlung
106
+
107
+Implementieren Sie eine hierarchische Fehlerbehandlung, bei der mögliche Fehler
108
+über generische Fehlertypen der jeweiligen Crates an den Server übergeben und
109
+dort ausgewertet und behandelt werden. Dazu stellt jede Crate einen(!) eigenen
110
+Fehlertypen zu Verfügung.
111
+
112
+## Dokumentation
113
+
114
+Erstellen Sie ausführliche Dokumentationen Ihrer Library (Sub-Crates)
115
+Funktionen, die exportiert werden, sodass beim Aufruf von **cargo doc** eine
116
+aussagekräftige Doku Ihrer API existiert. Schreiben Sie eine eigene 'DESIGN.md'
117
+Datei in Markdown Syntax, in welcher Sie das Design Ihres Servers beschreiben
118
+(Umfang 1-2 Seiten).
119
+
120
+## Bibliothek
121
+
122
+Für den letzten Aufgabenteil dürfen Sie externe Crates benutzen. Ansonsten sind
123
+alle bisher in den Laboraufgaben genannten Crates erlaubt. Zum Logging Ihrer
124
+Applikation (kann zur Fehlersuche bei komplexeren Programmen hilfreich sein)
125
+sind ebenfalls externe Crates erlaubt.
126
+
127
+## Testabdeckung
128
+
129
+Achten Sie auf eine ausreichende Testabdeckung, um innerhalb Ihrer Crates alle
130
+verwendeten Funktionen zu testen.

Loading…
取消
儲存