Blog

Implementierungshinweise zum PID-Lookup

Bernhard Heinloth/Phillip Raffeck

2023-06-29

PID-Lookup

Für IPC muss irgendwie die PID zum Prozess (Thread-Pointer) aufgelöst werden. Es ist in unserem Fall vollkommen in Ordnung, da einfach eine Liste zu verwenden und die durchzulaufen.

Aber Achtung:

  • die ready-Queue des Schedulers ist nicht ausreichend – denn nicht jeder Thread ist da drin, sondern könnte ja gerade in einem Waitingroom sein (sogar ziemlich wahrscheinlich, wenn ihr euch die IPC-Implementierung anschaut)

  • ein Queue<Thread> processlist könnt ihr nicht verwenden – denn Thread erbt von Queue::Node, was lediglich einen next-Zeiger als Attribut anfügt. Und dieser eine Zeiger würde dann gleichzeitig von der ready-Queue UND der processlist-Queue verwendet werden, was natürlich zu Fehlern führt.

    Siehe dazu auch die Warnung in der Dokumentation:

    One instance of a class inheriting from Queue::Node can be at most in one Queue

  • kommt besser nicht auf die Idee, die PID gleich der Threadadresse zu setzen (und wild zu casten). Da kann viel schief gehen, u.a. nicht vertrauenswürdige Zeiger aus dem Userspace und sehr schnelle erneute PID Belegung (bei delete und new)!

  • man kann vector verwenden, aber schaut euch dazu vorher die Implementierung an, da sie nur von der STL inspiriert ist und sehr stark vereinfacht (z.B. bzgl Iteratoren).

Zurück zur Übersicht