In den späten neunziger Jahren, als ich in der Graduiertenschule war, die Zeitung
JH Saltzer; DP Reed; DD Clark: End-to-End-Argumente im Systemdesign . ACM Trans. Comput. Syst. 2 (4): 277-288, 1984. DOI = 10.1145 / 357401.357402
Es war ziemlich wichtig, in jeder Betriebssystemklasse an jeder Universität zu lesen, und es scheint immer noch eines der wichtigsten Leitprinzipien zu sein, die dem Design des Internets zugrunde liegen. (Siehe zum Beispiel: J Kempf, R Austein (Hrsg.) Und das IAB, " Der Aufstieg der Mitte und die Zukunft von Ende zu Ende: Reflexionen über die Entwicklung der Internetarchitektur ", RFC 3724, März 2004. )
Das End-to-End-Prinzip besagt (Saltzer et al., 1984):
[Wenn] die betreffende Funktion nur mit dem Wissen und der Hilfe der Anwendung, die an den Endpunkten des Kommunikationssystems steht, vollständig und korrekt implementiert werden kann, ... sofern diese fragliche Funktion als Merkmal des Kommunikationssystems selbst nicht vorhanden ist möglich. [Obwohl] manchmal eine unvollständige Version der vom Kommunikationssystem bereitgestellten Funktion als Leistungssteigerung nützlich sein kann.
Oder kurz (aus der Zusammenfassung):
Das End-to-End-Argument legt nahe, dass Funktionen, die auf niedrigen Ebenen eines Systems platziert werden, redundant oder von geringem Wert sein können, verglichen mit den Kosten für deren Bereitstellung auf dieser niedrigen Ebene.
Aber ich hatte wenig Erfolg damit, das End-to-End-Prinzip aus eigener Erfahrung anzuwenden (in der Computerarchitektur, nicht in der Internetarchitektur). Da das Prinzip als "Gedicht" bezeichnet wird (dh in der englischen Prosa mit einer Reihe von Begriffen, die nicht mathematisch definiert sind), ist es ziemlich einfach, sich zu täuschen, dass "die fragliche Funktion nur mit vollständig und korrekt implementiert werden kann das Wissen und die Hilfe der Anwendung. " Aber was ist "die fragliche Funktion", geschweige denn "das Wissen und die Hilfe" einer Anwendung?
Beispiel: On-Chip-Netzwerke (im Gegensatz zum Internet) dürfen keine Pakete verwerfen, haben jedoch eine recht begrenzte Pufferung. Sie müssen also eine Möglichkeit haben, Deadlocks zu vermeiden oder zu beheben. Andererseits muss sich die Anwendung auch frei von Deadlocks machen, oder? Daher könnte ich argumentieren, dass ich den allgemeinen Fall (kein Deadlock) schnell lösen und die Vermeidung von Deadlocks in der App deaktivieren sollte. Dies ist in der Tat das, was wir bei Alewife und Fugu versucht haben (Mackenzie et al., Exploiting Two-Case Delivery für schnelles geschütztes Messaging , Int'l Symp High-Perf Comp Arch, (HPCA-4): 231-242, 1998. Oder John Kubiatowicz 'Dissertation.) Es "funktionierte" (indem die Verbindung den Prozessor unterbrach, als die Puffer gefüllt wurden, und das Betriebssystem mit Software-Pufferung erweitert wurde), aber ich habe niemanden in der Wissenschaft oder Industrie gesehen (einschließlich eines von uns, der Autoren dafür war HPCA-Papier) rast herum und versucht, die Idee zu wiederholen. Offensichtlich ist die Vermeidung von Deadlocks in einem Netzwerk nicht dieselbe "fragliche Funktion" wie die Vermeidung von Deadlocks auf Anwendungsebene, oder das End-to-End-Prinzip ist falsch.
Ist es möglich, das End-to-End-Prinzip von einem "Gedicht" in einen Satz zu verwandeln? Oder kann es zumindest in Begriffen angegeben werden, die für einen Computerarchitekten verständlich sind?