| Wafer | |||||
|
Wafer sind runde Scheiben aus vordotiertem Material mit Halbleitereigenschaften wie monokristallines Silicium, Siliciumcarbid, Gallium-Arsenid oder Indium-Phosphit. Wafer werden mittels verschiedener Verfahren (Zonenschmelz-Verfahren, Czochralski-Verfahren (Liquid-Encapsulated-Czochralski-Verfahren (LEC)), Bridgman-Stockbarger-Verfahren, Vertical Gradient Freeze, Pedestalverfahren, Blockgussverfahren) hergestellt. Die resultierenden runden Scheiben sind monokristallin und teilweise polykristallin. Die Oberfläche darf nur Unebenheiten von wenigen Nanometern aufweisen und muss spiegelnd poliert sein. Auf der Oberfläche dieser Wafer werden mittels anspruchsvoller Verfahren die Strukturen mehrerer gleicher Chips (integrierte Schaltkreise, ICs) erzeugt. Diese Chips werden anschliessend ausgeschnitten. Je grösser der Wafer, desto geringer ist der geometrische Verschnitt. Deswegen ist die Grösse dieser Scheiben bedeutend für die Wirtschaftlichkeit des Prozesses. Heute arbeitet man mit 200 bis 300 mm Wafern bei Silicium (geplant sind 450 mm) und bei Gallium-Arsenid mit 50 bis 150 mm Wafern (geplant: 200 mm). Früher waren solche Wafer wesentlich kleiner. Die Strukturbreiten der Chips befinden sich derzeit bei 45 Nanometer, 32 Nanometer oder 25 Nanometer bei NAND-Flash Bausteinen bzw. 22 Nanometer. Nanoröhren-Transistoren werden bereits mit einer Strukturbreite von 18 Nanometer gefertigt. Physikalische Grenzen, Y-Transistoren, Optische Transistoren mit Photonischen Kristallen Die Grenze des EUV-Lithografie-Verfahrens wird bei 22 Nanometer-Prozessen und darunter erreicht werden (ca. 2015). Dann steht entweder ein grundsätzlicher Technologiewechsel in der Herstellung noch feinerer Strukturen (Strukturbreite) an, oder man erreicht eine höhere Packungsdichte von Transistoren auf diesen Chips mit anderen Materialien oder Prozessen. Die derzeit diskutierten Möglichkeiten reichen von Y-Transistoren (Senkung der Leckströme) über optische Transistoren mit photonischen Kristallen bis Quantencomputer oder Gencomputer. Optische Transistoren könnten mit photonischen Kristallen mit Bandlücke gesteuert werden, die sich für Lichtwellen verhalten wie Halbleiter. Eine Lichtwelle kann sich nicht in dem Kristall fortbewegen, wenn deren Frequenz in die Bandlücke fällt. |
|||||
| Siehe auch: EUV-Lithografie Integrated-Circuit Halbleiterspeicher Mooresches-Gesetz High-k-Dielektrikum Strukturbreite Chipsatz Die Packaging Bridgman-Stockbarger-Verfahren | |||||
| Strukturierte-Analyse | |||||
|
Die Methode der Strukturierten Analyse (SA) von Tom DeMarco unterstützt die Analysephase im Softwareentwicklungsprozess. Die SA gibt eine formale Systembeschreibung durch grafische Elemente die mit der Top-Down Methode Prozesse, Programmelemente und den Datenfluss modelliert. Dabei werden statische Elemente verwendet die um dynamische Komponenten erweitert werden können. Elemente der Strukturierten Analyse sind: Kontextdiagramm, Datenflussdiagramm, Minispezifikation (formale Darstellung von atomaren Elementarprozessen mit Einsatz von Pseudocodes, Entscheidungstabellen und Entscheidungsbäumen) und ein Data Dictionary (Datenverzeichnis welches einen Katalog von Metadaten (Datendefinitionen, Datenelemente) enthält). Das Ergebnis der SA wird durch die Methode des Strukturierten Designs (SD) soweit verfeinert, dass es in die Praxis umgesetzt werden kann. SD von Yourdan und Constantine wendet modulares Design an, welches die Wechselwirkungen von übergeordneten Modulen beschreibt. |
|||||
| Siehe auch: CASE UML Ablaufdiagramm Repository Normalform | |||||
| Hyper-Threading | |||||
|
Hyper-Threading wurde von Intel entwickelt. Die Abarbeitung von Multithreaded Anwendungen werden optimiert indem die Ressourcen der CPU besser ausgenutzt werden. Die Threads werden auf 2 logische Prozessoren aufgeteilt und vom Betriebssystem mit Hilfe von (S)MP-Verfahren (Symmetrisches Multiprozessorsystem) abgearbeitet. Hintergrund für die Einführung der Hyper-Threading-Technology Verschiedene Möglichkeiten die Performance des Prozessors zu erhöhen wurden ausprobiert: Steigerung der Taktzyklen, Prefetching oder erweiterte L1- bzw. L2- oder L3-Caches. Jedoch ergaben sich daraus einige Probleme: die mögliche Leistungssteigerung durch schnellere Taktzyklen erfolgt nicht linear zur Taktzahl sondern unterproportional und bedingt auch einen höheren Stromverbrauch und Abwärme. Die Abwärmeproblematik bewog Intel dann auch zur Aufgabe der NetBurst-Architektur. Die 20 Pipeline-Stufen des Pentium 4 bewirken zudem eine wachsende Anzahl von Cache Misses (Cache Hit: Daten sind bei der Anfrage im Cache vorhanden, Cache Miss: Daten sind bei der Anfrage nicht im Cache vorhanden) sowie Interrupts und fehlerhafte Sprung-Voraussagen. Eine Vergrösserung der Caches ist nicht wirklich effizient: neben Kostensteigerungen in der Produktion wachsen mit grösseren L1- oder L2-Caches die Anforderungen zur Aufrechterhaltung höherer Taktzyklen oder geringerer Antwortzeiten. Es wurde versucht, die Anzahl der Instruktionen pro Taktzyklus durch Instruction-Level-Parallelism (ILP) zu erhöhen. Massnahmen dazu waren: Instruction Pipelining, Superskalarität, Out-of-Order-Execution, Registerumbenennung, Sprungvorhersagen und Speculative Execution. Die parallele Ausführung mehrerer Threads wird durch replizierte Ressourcen bei modernen Prozessoren unterstützt, ist jedoch nicht immer sehr effektiv. Die Strategie der Out-of-Order Execution beispielsweise ermöglicht bei superskalaren Prozessoren zwar Befehle ausserhalb der seriellen Reihenfolge auszuführen und damit die Pipelines besser auszulasten, bedingt jedoch, dass immer genügend Befehle zur Verfügung stehen, um die Prozessor-Ressourcen optimal auszulasten. Die Tendenz, Errungenschaften aus dem Serverbereich auf den Desktopbereich zu übertragen, trägt auch beim Hyper-Threading Rechnung: im Serverbereich wird schon länger mit zwei vollständigen Prozessoren (2-Prozessor-Systeme) gearbeitet, die in der Lage sind, 2 Threads parallel abzuarbeiten. Hyper-Threading-Technologie Hyper-Threading wurde bei den Intel Prozessoren mit NetBurst Architektur eingeführt und ist eine Variante des hardwareseitigen Multithreading. Die Hyper-Threading-Technology (HTT) funktioniert nur bei Multithreaded-Prozessoren (Mehrfädige Prozessoren). Dazu besitzt der Prozessorkern mehrere Registersätze und Programmzähler. Aus einem physischen Prozessor werden 2 logische Prozessoren, die sich als solche auch beim Betriebssystem ausgeben. Beim Intel Pentium 4 Prozessor mit Northwood Kern wurden Hyper-Threading Ressourcen aktiviert (die auch schon beim Willamette-Kern vorhanden waren). Dabei handelt es sich um einen Trace Cache Next IP, Instruction Streaming Buffers, ein Return Stack Predictor, Register Alias Tables, einen Next Instruction Pointer, ein Instruction TLB (Translation Lookaside Buffer) sowie Trace Cache Fill Buffers. Zudem verfügt jeder virtuelle Prozessorkern über einen eigenen Interrupt Controller (Advanced Programmable Interrupt Controller). Der Trace Cache, die L1- und L2-Caches sowie die Instruction Queues, Memory Operation Queues und der Key Buffer werden aufgeteilt (Ressourcen-Sharing). Ein Prozessorkern ist damit in der Lage, Threads simultan zu verarbeiten. Threads werden in mehrere Teilaufgaben zerlegt und durch parallel arbeitende Pipeline-Stufen abgearbeitet. Dazu sind mehrere Registersätze und ein angepasstes Steuerwerk vorhanden. Ein Thread besitzt dazu einen eigenen Registersatz mit Stackpointer und Programcounter. Damit Hyper-Threading funktioniert, sollte das Betriebssystem SMP-Architekturen unterstützen. Denn die CPU bzw. die Prozessorkerne sind beim Hyper-Threading softwaretechnisch ähnlich gesteuert wie ein SMP-System. Weiterhin sollte das Betriebssystem Multitasking-fähig sein und Kernel-Level-Threads unterstützen. Hyper-Threading Ressourcen werden unterteilt in: 1. Replicated Ressources: Replicated Ressources sind nachgebildete Ressourcen, bei denen die beiden virtuellen Prozessorkerne (Siblings - Geschwister) über einige der Ressourcen als eigene Kopie verfügen. Dazu gehören ein vollständiger Registersatz mit Stackpointer und Programcounter (Befehlszählregister, Befehlszähler, Programmzähler, Instruction Pointer). 2. Partitioned Ressources (unterteilte Ressourcen): die Ressourcen werden unter den Siblings aufgeteilt. Dazu gehören der Record Buffer, die Load/Store Buffer und die Instruction Queues. 3. Shared Ressources (geteilte Ressourcen): die Siblings müssen sich Ressourcen mit anderen Siblings aufteilen. Oftmals können sie nur von einem Sibling gleichzeitig verwendet werden. Dazu zählen u.a. die ALU und die FPUs (Floating Point Unit). Wenn das Betriebssystem die notwendigen Voraussetzungen erfüllt, können Standard-Anwendungen um bis zu 20% beschleunigt werden und entsprechend optimierte Anwendungen um bis zu 33%. Hyper-Threading Unterstützung durch Prozessoren und Betriebssysteme Zu den Prozessoren, welche Hyper-Threading unterstützen gehören: Pentium 4 (ab Northwood mit 3066 MHz, Prescott, Prescott 2M und Cedar Mill), Pentium Extreme Edition (Dual Core Prozessor Pentium D mit freigeschaltetem Hyper-Threading: Smithfield und Presler, Pentium EE) und die XEON 603/604. Bei AMD: Athlon 64 X2, Opteron Dual Core Prozessoren und der Phenom. Betriebssysteme, welche Hyper-Threading unterstützen, sind: Windows XP, Windows Vista, Windows Server 2003, FreeBSD und Linux ab Kernel-Version 2.4.17. Windows 2000 unterstützt zwar Hyper-Threading, kann es aber nicht effizient ausnutzen, da Windows 2000 nicht über eine Unterscheidung zwischen physikalischen und logischen Prozessoren verfügt. Compiler, welche Hyper-Threading-fähigen Code erzeugen sind: die Intel-Compiler und die GNU Compiler Collection (GCC). Voraussetzung ist jedoch, dass die Anwendungen parallelisierbar sind: die Abarbeitung eines Thread darf nicht abhängig sein vom Ergebnis eines anderen Thread. |
|||||
| Siehe auch: Multithreading Simultaneous-Multithreading NetBurst Mehrkernprozessor Pipeline-Architektur Superskalar Thread Register ALU SMP | |||||
| Task | |||||
|
Unter Task versteht man ein Auftrag, der von einem Computer erledigt wird. Dabei kann es sich auch um Aufgaben für Peripheriegeräte wie Drucker oder Scanner handeln. Ist ein Computer bzw. das Betriebssystem in der Lage mehrere Tasks parallel auszuführen, so spricht man von Multitasking. Dies ist beispielsweise bei allen neueren Windows-Betriebssystemen der Fall. Durch das Task-Management werden den einzelnen Programmen die benötigten Ressourcen zugeteilt. Eine Task (auch: Prozess) kann in mehrere Teilaufgaben zerlegt werden, die sequentiell abgearbeitet werden (Thread). |
|||||
| Siehe auch: Thread Multitasking Multithreading Hyper-Threading Simultaneous-Multithreading SMP | |||||
| Multitasking | |||||
|
Ein multitaskingfähiges Betriebssystem (wie Windows) ist in der Lage, mehrere Aufgaben (Tasks, Prozesse) gleichzeitig zu bearbeiten. So können Wartezeiten für ein bestimmtes Programm dazu genutzt werden um andere Prozesse zu bearbeiten. Es handelt sich dabei nicht um echte Parallelverarbeitung, da eine CPU bisher nur einen Befehl auf einmal abarbeiten kann. Die Prozesse werden jedoch effizienter (in sog. Zeitscheiben) durch die Bearbeitung geschleust. Die Reihenfolge der Bearbeitung wird durch den Scheduler festgelegt, der den Prozessen Prioritäten zuordnet. Dabei unterscheidet man die kooperative und die präemptive Methode: Kooperatives Multitasking und Präemptives Multitasking. Vorläufer des Multitasking war die Multiprogrammierung, bei der Kontextwechsel der Anwendungen bei Peripheriezugriffen stattfanden um die dabei entstehenden Wartezeiten zu nutzen. Durch den Einsatz der Interruptsteuerung wurde TSR-Programmierung (Terminate and Stay Resident) möglich. Der allgemeine Ablauf zeichnet sich dadurch aus, dass ein Prozess, der für einen anderen Prozess in die Warteposition versetzt wird, keine Informationen über diesen oder andere Prozesse benötigt. Dadurch kann diesem Prozess, wenn die Ausführung fortgesetzt wird, ein definierter Prozesskontext zur Verfügung gestellt werden, unabhängig davon, ob sich dieser in der Zwischenzeit für andere Prozesse verändert hat. Dazu wird der gesamte Prozesszustand vor der Unterbrechung auf einem Stack gespeichert. Bei Fortsetzung der Ausführung wird dieser gespeicherte Prozesszustand wieder geladen - dieser Vorgang wird Taskwechsel genannt. Kooperatives Multitasking Das kooperative Multitasking funktioniert ähnlich wie der Aufruf von Prozeduren bei der prozeduralen Programmierung. Es handelt sich um eine weiterentwickelte Form der TSR-Programmierung nach dem Konzept der synchronen Interrupts. Das Multitasking wird im Betriebssystemkernel als zentrale Prozessverwaltung gesteuert. Das Betriebssystem weist jeder Anwendung eine Priorität zu, jedoch bestimmen die Prozesse selber, wann sie die Kontrolle an den Kern zurückgeben. Die Anwendung mit der höchsten Priorität kann für sich die gesamte Rechenleistung bestimmen. Präemptives Multitasking Auch beim präemptiven Multitasking werden vom Betriebssystem Prioritäten für die Programme vergeben, jedoch teilen sich die Prozesse die Rechenleistung, gegliedert nach Priorität. Ein einzelner Prozess kann somit nicht die gesamte Rechenleistung beanspruchen. Das Betriebssystem steuert die Abarbeitungsfolge der Prozesse und weist ihnen Zeitscheiben (oder Zeitschlitze) zu. Ist die zugewiesene Zeit vergangen, so wird ein Prozess angehalten um einen anderen zu starten. Die angehaltenen Prozesse werden inaktiv und dann wieder gestartet, sobald sich ein neuer Zeitschlitz für sie öffnet. Beim Scheduling der Prozesse können verschiedene Strategien angewendet werden. Eine populäre Strategie ist die Anwendung von Vorrangwarteschlangen in Kombination mit der Round-Robin-Scheduling-Strategie. Die Auslastung des Systems ist besser verteilt und damit effektiver. Multitaskingfähige Betriebssysteme Multitaskingfähige Betriebssysteme sind Windows, Unix, Linux, OS/2 oder Mac OS X und alle auf UNIX basierenden Betriebssysteme wie Solaris oder HP-UX. |
|||||
| Siehe auch: Task Thread Multithreading Multiuser Hyper-Threading Solaris Kernel Mac-OS-X | |||||
| Thread | |||||
|
Ein Thread ist die kleinste ausführbare Einheit einer Task (Prozess). Ein Task wird dazu in Teilaufgaben unterteilt. Threads werden auch als Faden bezeichnet, und Prozessoren, die mehrere Threads parallel verarbeiten können, als Multithreaded Prozessoren (die Multithreaded Anwendungen bearbeiten können). Das Betriebssystem verwaltet die Threads, deswegen wird auch von Kernel-Thread gesprochen (vgl. User Thread). Ein Prozess wird durch eine sequentielle Abarbeitung von Kernel-Threads ausgeführt. Beim Multithreading teilen sich die Threads der entsprechenden Prozesse einige Ressourcen, wie das Codesegment, das Datensegment und die Dateideskriptoren. Jeder Thread verwendet jedoch seinen eigenen Befehlszähler und Stack. Threads verwenden denselben Adressraum und können deswegen Interprozesskommunikation betreiben. Manche Ressourcen können nur von dem erzeugenden Thread verwendet werden, wie z. B. das Windows-Handle. Threads innerhalb einer Task teilen sich Speicherressourcen sowie OS-abhängige Betriebsmittel wie Dateien und Netzwerkverbindungen. Daher erzeugen Threads weniger administrativen Aufwand als Prozesse, insbesondere ist bei einem Thread-Wechsel kein vollständiger Wechsel des Prozesskontextes notwendig, da alle Threads einen Teil davon bereits nutzen. Thread-Wechsel sind beim hardwareseitigen Multithreading Performance-steigernd, da Konflikte in den Pipelines der Prozessoren (Pipeline-Hazards) reduziert werden. Beim softwareseitigen Multithreading erzeugen viele Thread-Wechsel zusätzlichen Overhead, so dass sogar eine Leistungsminderung entstehen könnte. |
|||||
| Siehe auch: Task Multithreading Hyper-Threading Simultaneous-Multithreading SMP Pentium-4 Pipeline-Architektur Kernel | |||||
| Multithreading | |||||
|
Beim Multithreading werden die einzelnen Tasks (Aufträge) in kleinere eigenständige Prozesse (= Threads) aufgeteilt. Ein multithreading-fähiger Prozessor ist somit in der Lage, mehrere Threads auf einmal zu bearbeiten. Echte Parallel-Verarbeitung ist nur bei mehreren Prozessoren gegeben. Aber auch ein einzelner Prozessor, der multithreading-fähig ist, kann damit schneller arbeiten, wenn die Threads intelligent abgearbeitet werden, beispielsweise durch Verkürzung von Wartezeiten, optimale Auslastung bzw. Einlastung (Scheduling) von Threads. Im Unterschied zum Multitasking bezieht sich die Nebenläufigkeit nicht nur auf Prozesse sondern auch auf Bearbeitungsstränge (Threads) innerhalb der Prozesse. Intel leitet seine Hyper-Threading-Technologie vom Multithreading ab. Es handelt sich um Simultaneous Multithreading (SMT) beim Pentium 4 und XEON Prozessor. Diese Technologie erhöht die Leistung von multi-threaded Anwendungen, indem sie die Auslastung der On-Chip-Ressourcen (welche in der Intel NetBurst Architektur verfügbar sind) erhöht. Die NetBurst-Ressourcen sind im Normalfall nur zu 30% + X ausgelastet. Hyper-Threading erhöht diese Auslastung durch entsprechende Logik und erzeugt einen zweiten logischen Prozessor. Weitere Beispiele für Prozessoren mit Multithreading sind der UltraSPARC T1 (Niagara), UltraSPARC T2 (Niagara II) oder der Rock Prozessor von Sun Microsystems. Man unterscheidet softwareseitiges Multithreading und hardwareseitiges Multithreading. Softwareseitiges Multithreading Beim softwareseitigen Multithreading steht meist nur ein Prozessor zur Verfügung. Die einzelnen Threads werden effizient auf die zur Verfügung stehenden Ressourcen aufgeteilt. Die Anzahl der Threadwechsel sollte jedoch möglichst gering sein um den dadurch entstehenden Verwaltungsaufwand möglichst gering zu halten. Hardwareseitiges Multithreading Beim hardwareseitigen Multithreading wird das Multithreading von der Hardware unterstützt, indem z. B. mehrere Prozessorkerne die Thread-Abarbeitung parallelisieren oder indem ein Multithreaded Prozessor vorliegt. Ein Multithreaded Prozessor kann mehrere Threads gleichzeitig abarbeiten. Dazu besitzt ein Thread einen eigenen Registersatz mit Stackpointer und Befehlszähler (Programcounter, Befehlszählregister). Häufige Thread-Wechsel bewirken beim hardwareseitigen Multithreading sogar eine Steigerung der Performance, da Konflikte in den Pipelines der Prozessoren (Pipeline Hazards) reduziert werden können. Multithreading-Prozessoren können unterschiedliche Strategien für die Aufteilung und Einlastung der Threads bzw. deren paralleler Verarbeitung anwenden: 1. Switch-By-Event: Ereignisse welchen einen Thread-Wechsel auslösen. 2. Time-Slices: jedem Thread wird eine bestimmte Zeitspanne zugewiesen. 3. Simultaneous Multithreading (SMT). Thread Grundsätzlich ist zu unterscheiden zwischen Prozess, Kernel-Thread und User-Thread. Ab ca. 1995 unterstützen die meisten Betriebssysteme alle 3 Kategorien. Moderne Prozessoren sind i.d.R. mehrfädig, d.h. sie unterstützen hardwareseitiges Multithreading. |
|||||
| Siehe auch: Multitasking Pipeline-Architektur Simultaneous-Multithreading Hyper-Threading SMP Superskalar Thread Pentium-4 Dual-Core NetBurst | |||||