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   

  Swap

Betriebssysteme lagern Datensegmente, die kurz- bis mittelfristig nicht gebraucht werden, vom Arbeitsspeicher auf die Festplatte (oder ein anderes Medium) aus. Diesen Vorgang nennt man Swap (engl. to swap dt.: austauschen) oder Swapping.  Dadurch erhöht sich der zur Verfügung stehende Arbeitsspeicher. Diese Form der Speicherverwaltung eines Betriebssystemes ist Teil einer Segmentierung von Daten. Manche Betriebssysteme führen einen Swap immer dann aus, wenn der Scheduler einen neuen  Prozess aufruft. Dann wird das Datensegment des alten Prozesses auf das Hintergrundmedium (meist die Festplatte) geschrieben und der neue Prozess in den Arbeitsspeicher geladen. Im Gegensatz zum Paging, bei dem nur einzelne Speicherseiten ausgelagert  werden, werden beim Swapping immer die Daten eines ganzen Prozesses ausgelagert. Beim Swapping stellen die ausgelagerten Speichersegmente im Ganzen die Auslagerungsdatei dar.                                                   
Siehe auch:    Hot-Swap   Auslagerungsdatei   Swap-File   windows   

  Swap-File

Betriebssysteme lagern Datensegmente von Prozessen in einem Swap File oder einer Auslagerungsdatei ab. Dadurch wird der Arbeitspeicher entlastet.  Das Swap File liegt meistens auf der Festplatte und dient als Quasi-Erweiterung des Arbeitsspeichers. Man kann einzelnen Prozessen  mit Hilfe eines Swap Files einen grösseren Adressraum zur Verfügung stellen, als es durch den physikalischen Arbeitsspeicher möglich wäre. Es wird unterschieden zwischen temporärer und permanenter Auslagerungsdatei. Die permanente Variante  arbeitet meist schneller als die temporäre. Der Arbeitsspeicher bildet zusammen mit dem Swap File den virtuellen Speicher. Bei dem Betriebssystem Windows von Microsoft findet aus Sicht der Anwendungen keine Unterscheidung zwischen dem physikalischen  Arbeitsspeicher und der Auslagerungsdatei statt. Nur die Zugriffszeiten auf das Swap File auf der Festplatte sind um den Faktor 10 ^ 6 langsamer, es werden statt Nanosekunden Millisekunden benötigt. Linux verwendet statt einer Auslagerungsdatei eine  sog. Swap-Partition oder sogar eine weitere Festplatte zur Auslagerung.                                               
Siehe auch:    Swap   Hot-Swap   Auslagerungsdatei   windows   linux   Festplatte   

  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:    halbleiter   Integrated-Circuit   Halbleiterspeicher   Mooresches-Gesetz   High-k-Dielektrikum   Strukturbreite   Chipsatz   Die   Packaging   Bridgman-Stockbarger-Verfahren

  Deadlock

Ein Deadlock ist in der Informatik ein Zustand, in dem sich mehrere Prozesse gegenseitig blockieren, weil der eine Prozess auf die Freigabe von Ressourcen wartet, die der andere Prozess belegt und vice versa. Dabei kann es sich auch um einen sich  blockierenden Kreislauf mehrerer Prozesse handeln.

Deadlock bei Datenbanken 
Dies können beispielsweise zwei oder mehrere Transaktionen bei einer Datenbank sein oder Prozesse bei einem Betriebssystem. Im Falle der Datenbank muss das Datenbankmanagementsystem (DBMS)  solche Deadlocks verhindern oder erkennen und auflösen.  Um Deadlocks zu verhindern muss das DBMS seine Prozesse sequentialisieren. Diese Deadlock-Lösungsstrategie kann nachteilig sein, da das DBMS auf parallele, sich gegenseitig triggernde Prozesse verzichten muss.  Um bereits bestehende Deadlocks zu erkennen und aufzulösen verbraucht das DBMS sehr viele Ressourcen.  Deswegen ist es eine gute Strategie, Prozesse erst nach einer Überprüfung freizugeben. Ausserdem sollte das DBMS auf verdächtige Prozesse, die in Wartestellung sind achten, z.B. i.V.m. einem Leerlauf des Prozessors.                                             
Siehe auch:    datenbank   betriebssysteme   Transaktion   ACID   Normalform   Rollback   Referentielle-Integrität   Konsistenz   Multiversion-Concurrency-Control   MySQL

  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   datenbank   Repository   Normalform   Ablaufdiagramm   

  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 Threads darf nicht abhängig sein vom Ergebnis eines anderen Threads.
Siehe auch:    Multithreading   Simultaneous-Multithreading   NetBurst   Mehrkernprozessor   Pipeline-Architektur   Superskalar   Thread   Register   ALU   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   windows   linux   Kernel   Mac-OS-X   Solaris