Zusammenfassung

  • In 9P2000 bindet Twalk den zuvor unbenutzten newfid nur dann an das Ziel, wenn alle Namenselemente durchlaufen wurden. Ein partieller Rwalk kann qids des erfolgreichen Präfixes melden, verändert aber keinen fid.
  • Topen ist eine eigene Anfrage. Sie verlangt einen Zugriffsmodus, löst die Berechtigungsprüfung aus und bereitet den fid auf spätere Lese- oder Schreiboperationen vor. Ropen belegt noch keinen Datentransfer.
  • Rob Pikes Anteil gehört in eine gemeinsame Geschichte: Ken Thompson begann das Protokoll, Pike integrierte das Namenssystem, Dave Presotto baute das Netzwerk; Aufsätze und spätere Dialekte haben eigene Mitautoren.

Ein Gateway protokolliert zuerst „Pfad gefunden“ und danach „Öffnen verweigert“. Wer beide Zeilen für dieselbe Zustandsaussage hält, sieht einen Widerspruch. 9P sieht zwei getrennte Prüfstellen.

Twalk beginnt bei einem gültigen fid, nennt einen newfid und überträgt eine geordnete Folge von Namen. Der neue Bezeichner muss frei sein, außer der Client wählt bewusst denselben Wert wie beim Ausgangs-fid. Der Server geht Element für Element vor und benötigt Suchberechtigung für jedes durchquerte Verzeichnis. Gelingt die gesamte Folge, enthält Rwalk zu jedem Element einen qid und newfid repräsentiert das Ergebnis.

Der Beleg ist konkret: Auf diesem Server, in dieser Verbindung und von diesem Ausgangspunkt wurden die Namen in dieser Reihenfolge aufgelöst. Geöffnet wurde damit nichts. Die Protokolleinführung beschreibt fids als vom Client gewählte 32-Bit-Bezeichner für aktuelle Dateien, unabhängig davon, ob sie geöffnet sind. Der Namensraum der fids gehört zur Verbindung. Eine erneute Versionsaushandlung initialisiert die Sitzung neu und bricht offene Arbeit ab. Der fid ist somit kein dauerhaftes, sitzungsübergreifendes Objektkennzeichen.

Bei Fehlern bleibt diese Grenze sichtbar. Scheitert das erste Element, folgt ein Fehler. Scheitert ein späteres, darf Rwalk die qids des aufgelösten Präfixes enthalten. In 9P2000 werden dennoch weder der alte fid noch newfid geändert, solange nicht alle Elemente erfolgreich waren. Ein Auswertungssystem, das „vier von sechs“ als benutzbaren neuen Handle speichert, erfindet Zustand.

Auch ein Twalk ohne Namenselement hat eine definierte Bedeutung: Er klont den Ausgangs-fid nach newfid, ohne einen Namen zu durchlaufen. MAXWELEM begrenzt eine Nachricht auf sechzehn Elemente, nicht den logischen Pfad; weitere Walks können folgen. Paketanalysen müssen daher Auflösung, Klon und Aufteilung unterscheiden.

Topen beantwortet erst anschließend die Zugriffsfrage. Die Anfrage verlangt Lesen, Schreiben, Lesen/Schreiben oder Ausführen für die bereits durch den fid bezeichnete Datei und kann 9P2000-Optionen tragen. Der Server prüft die Berechtigung und bereitet den fid auf I/O vor. Ropen liefert qid und iounit. Erst ein späteres Tread oder Twrite samt Antwort kann einen konkreten Datentransfer belegen.

Die Zeitachse ist Teil der Semantik. Laut Open-Handbuch erfolgt die Berechtigungsprüfung beim Öffnen; spätere Änderungen nehmen einer bereits geöffneten Datei nicht die Zugriffsmöglichkeit. Suchrechte während des Walks garantieren daher nicht den später angeforderten Open-Modus. Ein vollständiger Walk mit anschließender Ablehnung kann völlig konsistent sein. Umgekehrt kann ein zuvor geöffneter fid nach einer Richtlinienänderung weiter funktionieren. Ein einziges Feld „berechtigt“ löscht den entscheidenden Zeitpunkt.

Ein qid hat ebenfalls Grenzen. Er identifiziert eine Datei innerhalb derselben Serverhierarchie; beim Löschen und Neuerstellen soll sich sein path-Anteil ändern. Das ist aussagekräftiger als ein sichtbarer Pfadname, aber weder eine globale Kennung über Server hinweg noch ein Inhalts-Hash.

Plan 9 will diese Lokalität. The Use of Name Spaces in Plan 9 von Rob Pike, Dave Presotto, Ken Thompson, Howard Trickey und Phil Winterbottom beschreibt prozessbezogene Namensräume. Plan 9 from Bell Labs von Pike, Presotto, Sean Dorward, Bob Flandrena, Thompson, Trickey und Winterbottom betont, dass der Client seine Namensraum-Komposition hält. Die Fähigkeit zur lokalen Zusammenstellung ersetzt bewusst einen angeblich universellen Baum.

Auch die historische Zuschreibung darf keinen globalen Alleinanspruch erzeugen. Das Vorwort der zweiten Ausgabe hält fest, dass Thompson das Protokoll begann, Pike die Namensgebung integrierte und Presotto das Netzwerk baute, und würdigt Winterbottom sowie viele weitere. Pikes Integrationsleistung wird präziser, nicht kleiner, wenn die Gemeinschaft sichtbar bleibt.

Die Dialekte brauchen eigene Belege. Das Vorwort der vierten Ausgabe verbindet die neue 9P-Version vor allem mit der Überwindung der alten 27-Byte-Grenze je Namenselement sowie besserer Effizienz, Flexibilität und Kapselung. Linux v9fs unterstützt 9p2000, 9p2000.u und 9p2000.L. Die UNIX-Erweiterung und der Linux-Dialekt besitzen eigene Dokumente; 9P2000.L behält die Walk-Form, verwendet beim Öffnen aber Tlopen/Rlopen und Linux-Flags. Die Trennung der Schritte lässt sich vergleichen, die Felder nicht pauschal gleichsetzen.

Caching schafft eine weitere Beobachtungsgrenze. Die v9fs-Modi bestimmen, wie eng die Clientansicht dem aktuellen Serverzustand folgt. Ein belastbarer Nachweis speichert daher Dialekt, Sitzung, Server/Export, Attach-Kontext, Ausgangs-fid/qid, Namen, alle qids, vollständigen oder partiellen Status, newfid, Open-Modus und Flags, Ropen-qid/iounit, spätere I/O, Cachemodus und Sitzungsende.

Damit bleibt „Walk erfolgreich“ eine starke Aussage: Die Namen wurden in ihrem festgelegten Kontext aufgelöst. Sie muss keine geöffnete Datei vortäuschen.

Sources