Hallo,
kann mir einer von euch sagen wo der Unterschied
zwischen einem Kernel-Thread und einem Prozess liegt?
danke,
Maik
Hallo,
kann mir einer von euch sagen wo der Unterschied
zwischen einem Kernel-Thread und einem Prozess liegt?
danke,
Maik
Hallo Maik,
auf welches System sich die Frage auch immer bezieht, ein von einem User gestarteter Prozess läuft eben nicht in der logischen Umgebung des Kernels und hat nicht dessen Privilegien, darf z.B. nicht auf I/O direkt zugreifen. Daher muss ein Hardwaretreiber als Kernel-Thread konzipiert sein und darf natürlich nicht von jedem gestartet werden.
Ein Prozess hat seinen eigenen abgeschlossenen Adressraum, den er nicht verlassen kann, dabei kann er auch aus mehreren Threads bestehen.
Gruss Reinhard
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Richard,
danke für deine Antwort, bin aber leider noch nicht schlauer.
Ich hab mich wahrscheinlich, schlecht/falsch ausgedrückt.
Es ging mir eigentlich um Kernel-Level-Threads, also Threads die ich in irgendeinem user-level-prozess erzeuge,welche aber vom Kernel in einer Threadtabelle verwaltet werden.
=>Also wie ein Prozess, welcher allerdings in einer Prozesstabelle verwaltet wird.
Mir stellte sich nun die Frage was dann noch der Unterschied ist zwischen einem neuen Prozess und dem Kernel-level-Thread.
Unterschiede zw.
kernel-mode und user-mode
bzw.
Prozess und Thread(user-Level)
sind mir klar, aber mit Kernel-Level-threads hab ich
Verständnis-Probleme
Hat ein Kernel-level-Thread eingentlich immer Zugriff auf die Variablen des Prozesses von dem er gestartet wird, auch wenn dieser z.B. durch einen Systemcall blockiert wurde?
Maik
Der Thread hat den grossen Vorteil, dass
man transparent in der benutzten Programiersprache
stets auf Variablen des Unserprozesses zugreifen kann,
und auch auf die eines Threads, der wiederum
einen anderen aufgerufen hat.
Vorsicht ist angesagt bei gleichzeitigem Lese und
Schreibzugriff.
Der Nachteil des Threads ist, das der ganze
Prozess abstürzt, wenn es ein Thread abstürtzt.
Man kriegt das so ohne weiteres nicht hin,
dass der Prozess ungestört weiterläuft
und man einfach einen neuen Thread startet.
Thread stürzen sehr gerne ab, wenn der aufrufende Prozess
oder Thread die vom Tochterthread behandelten Variablen
wieder freigegeben hat, das ist dann aber ein Irrtum des Programmierers.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Maik,
Zitat:
The use of kernel threads brings simplicity; the program doesn’t need to know how to manage threads, as the kernel handles all aspects of thread management. There are no blocking issues since if a thread blocks, the kernel can reschedule another thread from within the process or from another, nor are extra system calls needed.
Weiss nicht, ob das hilft, der ganze Artikel ist zu finden:
http://en.wikipedia.org/wiki/Multithreading
und ist nicht so übel.
Gruss Reinhard
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]