Windows User-Mode Scheduling entfernt

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 wie strtok() 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:

[ Youtube Video Link ]