Threads sind so ne Art "Unterprozesse", Funktionen die ähnlich wie ein Prozess parallel ausgeführt werden können. Wenn du also von nem Programm aus einen Thread startest, läuft dieser parallel zu deinem anderen Code mit.
Syscalls == Systemaufrufe
Mithilfe von Syscalls können User Module auf Kernel Funktionen zugreifen. Dass geschieht bei der PSP mithilfe von Stubs. Jede PSP-ELF (ELF ist das Dateiformat für ausführbare Dateien, dass die PSP benutzt) hat eine Stub Sektion und eine .lib.stub Sektion. In der .lib.stub Sektion stehen die NIDs (Idendifizierer für Funktionen in einer Bibleotek) der importieren Funktionen, die Stub Sektion ist ne Art Platzhalter für die Sprünge/Syscalls die dann vom Betriebsystem gelinkt werden (ich sag Betriebssystem, weil es bei OSs wie UNIX Systemen ähnlich funktioniert). Jeder Stub ist 64bit, also 8bytes groß, und sieht anfangs so aus:
, springt also direkt zum Caller zurück.
Das Betriebssystem ändert den Stub mithilfe des NIDs dann, um entweder auf eine Funktion zu springen (user -> user, oder kernel -> kernel)
oder einen Syscall aufzurufen (z.B. user -> kernel)
Wenn eine Funktion aufgerufen wird springt die ELF dann direkt auf den Stub, und die Funktion wird gestartet.