praesi c-mesh
DESCRIPTION
German presentation on a school project on parallel C programs. For details see https://github.com/elHornair/meshTRANSCRIPT
C-MeshRouting-Simulation in C
( ), 01. Juli 2013Alain Horner @elHornair
Intro
Lösungskonzept
Funktionsweise der KnotenBoss-Worker ModellBoss: Auf Paket wartenBoss: Paket an Worker weitergebenWorker: Paket verarbeiten
Funktionsweise der KnotenVerteilung der Pakete
Funktionsweise der KnotenBoss-Worker: Implementierung mit Pthreads
while (1) { // wait for next package newsockfd = wait_for_connection(sockfd);
// let worker handle package pthread_create(&workers[thread_counter], NULL, worker_init, (void *)newsockfd);
// alternate workers thread_counter += 1; if (thread_counter >= NUM_WORKERS) { thread_counter = 0; }}
Details: Siehe Github
Verbindungen zu NachbarenNachbar: Knoten, dessen IP-Adresse und Port bekannt istNachbaren-ListeBidirektionale Verbindungen -> Handshake
Verbindungen zu NachbarenHandshake
RoutingZ.B. “In welcher Richtung liegt das Ziel?”Tabelle mit zwei EinträgenPro Eintrag: Nachbar (IP-Adresse und Port)
RoutingEigenheit von Aufgabenstellung ausgenutzt:
Routingtabelle möglichst früh anpassenEinträge werden nie überschrieben
“Pakete werden immer von der Quelle zum Zieloder vom Ziel zur Quelle gesendet”
Paket-ForwardingKnoten: Paket weiterleiten, falls nicht für michRoutingtabelle verwendenFallback: Flooding
Paket-ForwardingFlooding
Paket-ForwardingProblem mit ringförmig verbundenen Knoten
Erreichen des ZielsNur bei Quell- und Zielknoten möglichAusgabe der NachrichtUmwandlung des Nachrichtenpakets in OK-PaketRouting sehr einfachSchwarze Liste wird ignoriertOK-Paket: Zurück bis zu ursprünglichem Sender
Demo
DemoPython-Testprogramm1 Startknoten1 Zielknoten10 Verbindungsknoten3 Pakete
Outro
Lessons learnedGeteilte Ressourcen immer lockenDebugging: Gnu Debugger (GDB)
Weiterführende LinksSourcecodeDokumentationPthreads
Fragen?
Danke!