Multithreading — Änderungen 5783 → 5784

Zeile 3: Zeile 3:
  
 
== Softwaremultithreading ==
 
== Softwaremultithreading ==
−
Durch softwareseitiges Multithreading ist es möglich neben dem "Hauptthread", der z.B. in C die main() Funktion ausführt, weitere Threads, die eine andere Befehlssequenz innerhalb eines Prozesses gleichzeitig zum bzw. unabhängig vom Hauptthread auszuführen, zu erstellen. Alle Ressourcen (Dateihandles, Speicher, etc.) können von allen Threads benutzt werden, wodurch es zu [[Race Condition|Race Conditions]] und anderen Problemen (TODO: Wo linken wir hier am besten hin?) kommen kann.
+
Durch Softwaremultithreading ist es möglich innerhalb eines Prozesses neben dem "Hauptthread", der z.B. in C die main() Funktion ausführt, weitere Threads, die eine andere Befehlssequenz innerhalb eines Prozesses gleichzeitig zum bzw. unabhängig vom Hauptthread auszuführen, zu erstellen. Um dies effizient auch auf Systemen mit mehr als einem Prozessorkern und mit wenig Aufwand im Userspace zu gestalten, werden durch das Betriebssystem spezielle Syscalls zum Erstellen und Zerstören von Threads bereitgestellt. Diese können dann explizit durch den Programmierer aufgerufen werden oder implizit durch (spezielle) Programmiersprachen bzw. Erweiterungen von Programmiersprachen, wie z.B. [http://openmp.org/wp/ OpenMP] für C/C++.
−
Meist wird Softwaremultithreading durch das Betriebssystem durch spezielle Syscalls zum Erstellen und Zerstören von Threads unterstützt. Es ist auch möglich Threads im Userspace zu emulieren.
+
 
 +
Alle Ressourcen (Dateihandles, Speicher, etc.) können von allen Threads benutzt werden, wodurch es zu [[Race Condition|Race Conditions]] (zwischen den einzelnen Threads) kommen kann.
  
 
== Hardwaremultithreading ==
 
== Hardwaremultithreading ==
−
Hardwaremultithreading macht es möglich, auch auf einem Prozessorkern mehrere Prozesse gleichzeitig auszuführen. Dies wird durch das Duplizieren der Allzweckregister, des Stackpointers sowie des Instructionpointers erreicht. Intel nennt diese Technik bei ihren Prozessoren Hyper-Threading und wendet dies z.B. beim recht leistungsschwachen Intel Atom an, der durch Hyper-Threading dem Betriebssystem zwei Prozessorkerne zur Verfügung stellt, wobei der zweite ein rein virtueller Kern ist.
+
Hardwaremultithreading macht es möglich, auch auf einem Prozessorkern mehrere Tasks gleichzeitig auszuführen. Dadurch soll die [[Pipeline]] eines superskalaren Prozessors besser ausgelastet werden. Dazu werden die Register dupliziert, Befehle von allen Tasks gelesen, dekodiert und anschließend in die Pipeline gefüttert. Nach der Ausführung werden die Ergebnisse wieder in die Register des passenden Tasks geschrieben.
 +
 
 +
Intel nennt diese Technik bei ihren Prozessoren Hyper-Threading und wendet dies z.B. beim recht leistungsschwachen Intel Atom an, der durch Hyper-Threading dem Betriebssystem zwei Prozessorkerne zur Verfügung stellt, wobei der zweite ein rein virtueller Kern ist.
  
−
== Hyper-Threading ==
+
=== Hyper-Threading ===