User-Level-POSIX-Threads und User-Level-Linux-Threads



  • Hallo,
    unser Prof. will von uns wissen, wie man User-Level-POSIX-Threads und User-Level-Linux-Threads erstellen kann.
    Ich kenne leider nur die Kernel-Thread-Variante pthread_create() bei POSIX und clone() bei Linux. Aber wie macht man beide Variante im User-Level-Bereich?
    Ich konnte leider nur fremde Libs in Netz finden...

    Danke im Voraus.

    L. G.
    Steffo



  • pthread_create erzeugt einen Thread im Userspace.



  • Sind das reine User-Threads oder Hybride? Wie kommt es, dass meine parallele Matrizenmultiplikation alle Cores auslastet? Reine User-Space-Threads könnten das nicht, weil der Kernel nichts von ihnen weiß.

    Wie kann man dann über Linux einen User-Level-Thread erzeugen?



  • Du hast wahrscheinlich eine ander Vorstellung von User-level-threads als ich. Bitte gib doch mal deine definition von User-Level-threads!

    Wie kommt es, dass meine parallele Matrizenmultiplikation alle Cores auslastet?

    Weil sonst nichts weiter anliegt.

    Reine User-Space-Threads könnten das nicht, weil der Kernel nichts von ihnen weiß.

    100% sind auch nur gerundet. Und warum sollte der Kernel nichts von ihnen wissen?



  • User-Level-Threads werden vom Prozess selbst erstellt und durch einen eigenen Scheduler gemanaged. Blockiert z. B. ein Thread, wird der komplette Prozess blockiert, da der Kernel nichts von ihnen weiß (da er sie ja nicht erstellt hat).



  • Das nennt sich kooperatives Multitasking.

    Wo soll denn bitte der der eigene Scheduler herkommen? Und was hat das dann noch mit Linux oder POSIX zu tun?



  • knivil schrieb:

    Wo soll denn bitte der der eigene Scheduler herkommen?

    http://de.wikipedia.org/wiki/User_Thread

    Und was hat das dann noch mit Linux oder POSIX zu tun?

    Eben!!!



  • Jetzt ist nur noch die Frage zu klaeren,, ob dein Prof. auch diese Definition zugrunde legt. Einfach mal nachfragen. Ansonsten bietet der engliche Wikipedia-Artikel die Antwort.



  • Englische Wikipedia schreibt genau das gleiche:

    Threads are sometimes implemented in userspace libraries, thus called user threads. The kernel is not aware of them, so they are managed and scheduled in userspace...

    http://en.wikipedia.org/wiki/Thread_(computing)#Processes.2C_kernel_threads.2C_user_threads.2C_and_fibers

    Unser Prof. hat das ebenfalls genauso gesagt. Ich frage mich, ob das nicht ein Tippfehler von ihm ist oder er uns in die Irre führen will...



  • Es gibt im POSIX-Standard ein paar als veraltet gekennzeichnete Funktionen, die kooperatives Multitasking ermöglichen. Als veraltet sind sie deshalb markiert, weil sie ein Feature von C89 benutzen, das in C99 für veraltet erklärt wurde.

    Allerdings ist die Position der POSIX-Overlords...naja, ich zitier einfach mal:

    It was felt inventing new ISO C standard-compatible interfaces that describe what can be done with the XSH, Issue 5 functions and then converting applications to use them would cause more difficulty than just converting applications that use them to use threads instead.

    Kooperatives Multitasking hat man in der UNIX-Welt nie wirklich ernsthaft betrieben - zur Prozessverwaltung hatte man von Anfang an präemptives Multitasking (UNIX war als Mehrbenutzersystem ausgelegt; kooperatives Multitasking wäre da dem blanken Wahnsinn gleichgekommen), und als in den Neunzigern die Idee der Parallelität innerhalb eines Prozesses an Popularität gewann, konnte man die vorhandene Technik recht zügig dazu umbiegen, echte Threads zur Verfügung zu stellen (auch wenn es bis zur Standardisierung seine Zeit brauchte). Inzwischen hat das präemptive Multitasking das kooperative in einem solchen Ausmaß verdrängt, dass Fibers auch in der Windows-Welt nahezu in Vergessenheit geraten sind. Wirklich benutzt wird dieser Kram heute von fast niemandem mehr.


Anmelden zum Antworten