Praesi C-Mesh

Post on 08-Jul-2015

65 views 0 download

description

German presentation on a school project on parallel C programs. For details see https://github.com/elHornair/mesh

Transcript of Praesi C-Mesh

C-MeshRouting-Simulation in C

( ), 01. Juli 2013Alain Horner @elHornair

Intro

AufgabenstellungOffizielle Kennen wir alle

Aufgabenstellung

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)

Fragen?

Danke!