Windows User-Mode Scheduling entfernt
« | 22 May 2022 | »Tja, einen offenen Punkt auf meiner Liste kann ich jetzt unerledigt abhaken:
nämlich die Ums
-APIs, die mit Windows 7
eingeführt wurden.
Denn mit der Einführung von Windows 11 sind diese Funktionen beinhart entfernt
worden, bzw. zu ERROR_NOT_SUPPORTED
degradiert worden.
Ich bin es von Microsoft eigentlich gewohnt, dass APIs - egal wie nutzlos
sie sind - für alle Ewigkeiten im Betriebssystem verbleiben.
Natürlich gibt es da auch ein paar “High-Level”-Ausnahmen, wenn z.B.: der
Microsoft-Agent
(ein Comic-Assistent zum Vorlesen von Texten) samt seiner
COM API verschwindet,
weil ihn nach 2003 ohnehin keiner mehr nutzte.
Doch Kernfunktionen rund um Prozess- und Thread-Verwaltung sind seit spätestens
Windows 2000 “fix” im kernel32
und wachsten mit jeder neuen OS-Version an,
entfernt wird aber nichts mehr.
User Mode Scheduling
Letztes Jahr (zu Beginn meiner Koroutinen
Analyse) erinnerte ich mich wieder an ein paar Vorträge zu einer “neuen”
Threading API, abgekürzt UMS
, die einige Probleme mit Microsofts
Fibers Ansatz lösen sollte.
Allgemeiner Code weiß oft nichts von Fibers
, glaubt aber zu wissen, in
einem Thread zu laufen und nutzt daher explizit oder implizit
Thread-local-storage
(TLS
).
Genau das kann mit Fibers dann Probleme erzeugen, wenn zwei Fibers Code
ausführen, der TLS
nutzt und schon kommen States durcheinander.
Randnotiz: Die MS CRT Implementierung nutzt übrigens
FLS
(Fiber-Local-Storage) für Funktionen wiestrtok()
und ist damit sowohl Thread- als auch Fiber-sicher.
Doch Anwenderprogramme sind nicht immer so flexibel ausprogrammiert.
UMS
sollte mit einer neuen API eine neue Art Thread einführen, dessen
Scheduling vom Usermode-Prozess aus verwaltet werden kann.
Bisher hatte ich noch nie einen Grund mich mit dieser Technik auseinander
zu setzen und wollte das im Zuge des GATE Projektes nachholen,
doch mit dieser neuesten Wendung wird daraus wohl nichts.
Schließlich bringt es nichts, eine API zu implementieren, die selbst
Microsoft als “unnötig” eingeschätzt hat und auch keinen “historischen”
Bezug hat.
Fazit
Hmm … ich kann also nichts weiter zum UMS sagen, habe leider keine Erfahrung damit und werde es vermutlich auch in Zukunft nicht nutzen. Ich weiß nur, dass von 2009 bis 2021 existiert hat.
Ein Detail habe ich dennoch aus der UMS
API entnommen:
Koroutinen sind im GATE Framework ähnlich aufgebaut, denn dort wird auch
ein “normaler” Thread als Scheduler eingesetzt um zwischen Koroutinen
hin und her zu springen.
Und im UMS
hätte es auch so einen Scheduler-Thread gegeben.
Ein altes Video aus der frühen Channel-9 Zeit gibt (damals wie heute) einen kleinen Überblick über diese Schnittstelle: