Blog
Implementierungshinweise zum PID-Lookup
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 einennext
-Zeiger als Attribut anfügt. Und dieser eine Zeiger würde dann gleichzeitig von derready
-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
undnew
)!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).