-
1. GEBIET
-
Diese
Offenbarung betrifft im Allgemeinen Rechnernetzsysteme und genauer,
jedoch nicht ausschließlich,
Technologien zur Erhöhung
der Effizienz der Interrupt-Lieferung zur Laufzeit in einem Netzwerksystem.
-
2. BESCHREIBUNG
-
In
einem Rechnernetzsystem kann einer Anwendung oder einem Thread der
Anwendung durch das Betriebssystem („BS") zur Laufzeit Zeit auf irgendeinem
Prozessor oder Verarbeitungskern (im Folgenden wird der Ausdruck „Prozessor" verwendet, um auf
einen Prozessor oder einen Verarbeitungskern zu verweisen) zugewiesen
werden, was in Abhängigkeit
von der Nutzung unterschiedlicher Prozessoren in dem System zu jenem
Zeitpunkt und von der BS-Scheduling-Verfahrensweise geschieht. Typischerweise
bevorzugt die BS-Laufzeit-Thread-Scheduling-Verfahrensweise einen
Prozessor von einem Sockel, der mehr als einen Prozessor für das Thread-Rescheduling
zur Verfügung
hat. Jedoch wird ein Gerät-Interrupt
typischerweise an einen Prozessor, der durch eine statische Konfiguration
gebunden ist, oder an alle Prozessoren in dem System unter Verwendung
einer Round-Robin-Anordnung
geliefert. Das heißt,
dass ein Gerät-Interrupt
möglicherweise
nicht an einen Prozessor, auf dem die Anwendung/der Thread, auf
die bzw. den der Interrupt abzielt („Zielanwendung/Zielthread"), läuft, oder
an einen Sockel, auf dem sich der Prozessor befindet, geliefert
wird. Wenn das eintritt, passen ein Interrupt und ein Prozessor,
an den der Interrupt geliefert wird, nicht zusammen. Solche Fehlanpassungen
setzen, wenn sie mit entsprechender Häufigkeit auftreten, infolge
von Cache-Thrashing zwischen der Interrupt-Verarbeitung und der Zielanwendung/dem
Zielthread, Kosten der gegenseitigen Blockierung der Prozessoren,
Interrupts zwischen den Prozessoren, anderer System-Software-Overheads
usw. die Systemleistung in hohem Maße herab. Bei einigen Anwendungen
(zum Beispiel UDP-Anwendungen (UDP = User Datagram Protocol)), bei
denen die Interrupt-Rate hoch ist, ist die Rate solcher Fehlanpassungen
ebenfalls hoch, was zu einer weiteren Herabsetzung der Leistung
führt.
Daher ist es wünschenswert,
die Effizienz der Interrupt-Lieferung zur Laufzeit in einem Netzwerksystem
zu erhöhen.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Die
Merkmale und Vorteile des offenbarten Gegenstandes werden aus der
folgenden ausführlichen
Beschreibung des Gegenstandes ersichtlich. Es zeigt:
-
1 ein
Rechnersystem, in dem eine Ausführungsform
des in der vorliegenden Anmeldung offenbarten Gegenstandes implementiert
werden kann;
-
2 ein
Netzwerk, in dem Ausführungsformen
des in der vorliegenden Anmeldung offenbarten Gegenstandes funktionieren
können;
-
3 ein
System gemäß mindestens
einer der Ausführungsformen
des in der vorliegenden Anmeldung offenbarten Gegenstandes;
-
4 ein
beispielhaftes Netzwerksystem, in dem Interrupts, die durch eine
Netzschnittstelle generiert werden, zu einem Zielprozessor gelenkt
werden, gemäß einer
Ausführungsform
des in der vorliegenden Anmeldung offenbarten Gegenstandes;
-
5 ein
Ablaufdiagramm eines beispielhaften Prozesses zur Erhöhung der
Effizienz der Interrupt-Lieferung zur Laufzeit in einem Netzwerksystem gemäß einer
Ausführungsform
des in der vorliegenden Anmeldung offenbarten Gegenstandes;
-
6 eine
Tabelle, die die Verknüpfungsbeziehung
zwischen dem Tx-Warteschlangenindex und dem MSI-Vektorindex veranschaulicht;
-
7 ein
Ablaufdiagramm eines anderen beispielhaften Prozesses zur Erhöhung der
Effizienz der Interrupt-Lieferung zur Laufzeit in einem Netzwerksystem
gemäß einer
Ausführungsform
des in der vorliegenden Anmeldung offenbarten Gegenstandes; und
-
8 eine
Tabelle, die eine experimentelle Leistungserhöhung eines Netzwerksystems,
erreicht durch das Lenken eines Interrupts direkt zu dem Zielprozessor
oder einem gleichrangigen Prozessor (Peer processor), der sich in
demselben Sockel wie der Zielprozessor befindet, gemäß einer
Ausführungsform
des in der vorliegenden Anmeldung offenbarten Gegenstandes veranschaulicht.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Gemäß Ausführungsformen
des in dieser Anmeldung offenbarten Gegenstandes kann die Prozessoraffinität einer
Anwendung/eines Threads dazu verwendet werden, einen Interrupt an
den geeignetsten Prozessor zur Laufzeit zu liefern. Der Prozessor, an
den der Interrupt geliefert wird, kann entweder die Zielanwendung/den
Zielthread laufen lassen oder sich in demselben Sockel wie der Prozessor,
der die Zielanwendung/den Zielthread laufen lässt, befinden. In einer der
Ausführungsformen
kann die Prozessoraffinität
der Anwendung/des Threads zur Laufzeit an ein Netzwerkgerät übertragen
werden, und das Netzwerkgerät
liefert einen Interrupt unter Verwendung dieser Affinitätsinformationen.
In einer anderen Ausführungsform
kann die Prozessoraffinität
der Anwendung/des Threads an einen Chipsatz, einen Speichersteuerungshub
(„MCH") oder einen Ein-/Ausgabe-Hub
(„IOH") übertragen
werden, die die Affinitätsinformationen
dazu verwenden, einen Interrupt an den geeignetsten Prozessor zu
liefern. Es kann andere Ausführungsformen
im Sinne des in dieser Anmeldung offenbarten Gegenstandes geben.
-
Wenn
in der Beschreibung auf „eine
(1) Ausführungsform" oder „eine Ausführungsform” des offenbarten
Gegenstandes Bezug genommen wird, so bedeutet das, dass ein besonderes
Merkmal, eine besondere Struktur oder eine besondere Eigenschaft,
das bzw. die im Zusammenhang mit der Ausführungsform beschrieben wird,
in mindestens einer der Ausführungsformen
des offenbarten Gegenstandes eingeschlossen ist. Somit bezieht sich
die Wendung „in
einer (1) Ausführungsform", die an verschiedenen
Stellen der Beschreibung vorkommt, nicht notwendigerweise jedes
Mal auf dieselbe Ausführungsform.
-
1 veranschaulicht
ein Rechnersystem 100, in dem eine Ausführungsform des in der vorliegenden
Anmeldung offenbarten Gegenstandes implementiert werden kann. Das
System 100 kann einen oder mehr Prozessoren 102A, 102B,
..., 102N umfassen. Ein hierin erörterter „Prozessor" bezieht sich auf eine Kombination aus
Hardware- und Software-Ressourcen zur Erfüllung von Rechenaufgaben. Ein
Prozessor kann zum Beispiel einen Systemspeicher und Verarbeitungsschaltungen
(zum Beispiel eine Zentraleinheit (CPU) oder einen Mikrokontroller)
umfassen, um maschinell lesbare Befehle zur Verarbeitung von Daten
gemäß einem
vordefinierten Befehlsvorrat auszuführen. Als Alternative dazu
kann ein Prozessor nur die Verarbeitungsschaltung (zum Beispiel CPU)
umfassen. Ein anderes Beispiel für
einen Prozessor ist eine Rechenmaschine, die zum Beispiel in einem
Mehrkernprozessor eingeschlossen sein kann, wobei das Betriebssystem
die Rechenmaschine als einen diskreten Prozessor mit einem vollständigen Ausführungsressourcensatz wahrnehmen kann.
Dies sind jedoch lediglich Beispiele für einen Prozessor, und Ausführungsformen
der vorliegenden Erfindung sind in dieser Hinsicht nicht beschränkt.
-
Jeder
Prozessor 102A, 102B, ..., 102N kann ein
Coprozessor sein. In einer Ausführungsform
können
ein oder mehr Prozessoren 102A, 102B, ..., 102N im
Wesentlichen die gleichen Funktionen ausführen. Jeder Prozessor kann
durch einen Sockel elektronisch an eine Systemplatine 118 gekoppelt sein.
Zwei oder mehr Prozessoren können
einen Sockel gemeinsam benutzen. So können zum Beispiel die Prozessoren 102A und 102B einen
Sockel 156 gemeinsam benutzen, während der Prozessor 102N seinen
eigenen Sockel 158 haben kann. Wenn zwei oder mehr Prozessoren
einen Sockel gemeinsam benutzen, können sie auch einen gemeinsamen
Cache benutzen.
-
Das
System 100 kann zusätzlich
Speicher 104 umfassen. Der Speicher 104 kann maschinell ausführbare Befehle 132 speichern,
die geeignet sind, ausgeführt
zu werden, und/oder Daten speichern, die dazu geeignet sind, dass
auf sie zugegriffen und mit ihnen operiert wird und/oder geeignet sind,
manipuliert zu werden. Wenn hierin auf „maschinell ausführbare" Befehle verwiesen
wird, dann beziehen sich diese auf Ausdrücke, die durch eine oder mehr
Maschinen verstanden werden können, um
eine oder mehr logische Operationen auszuführen. Maschinell ausführbare Befehle
können
zum Beispiel Befehle umfassen, die durch einen Prozessor-Compiler
interpretierbar sind, um eine oder mehr Operationen an einem oder
mehr Datenobjekten auszuführen.
Dies ist jedoch lediglich ein Beispiel für maschinell ausführbare Befehle,
und Ausführungsformen
der vorliegenden Erfindung sind in dieser Hinsicht nicht beschränkt. Der
Speicher 104 kann zum Beispiel einen Nur-Lese-Speicher,
einen Massenspeicher, einen Direktzugriffsspeicher, auf den ein Rechner
zugreifen kann, und/oder einen oder mehr andere Typen von Speichern,
auf die maschinell zugegriffen werden kann, umfassen.
-
Der
Chipsatz 108 kann einen oder mehr integrierte Schaltungschips
umfassen, zum Beispiel jene, die aus integrierten Schaltungschipsätzen ausgewählt sind,
die im Handel von Intel® Corporation erhältlich sind
(zum Beispiel Grafik-, Speicher- und E/A-Controller-Hub-Chipsätze), auch
wenn ein oder mehr andere integrierte Schaltungschips ebenfalls oder
als Alternative dazu verwendet werden können. Gemäß einer Ausführungsform
kann der Chipsatz 108 einen Ein-/Ausgabe-Steuerungshub
(ICH) und einen Speichersteuerungshub (MCH) umfassen, auch wenn
Ausführungsformen
der Erfindung dadurch nicht beschränkt sind. Der Chipsatz 108 kann eine/n
Host-Brücke/Host-Hub 154 umfassen,
die bzw. der den Prozessor 102A, 102B, ..., 102N und den
Host-Speicher 104 aneinander und an den lokalen Bus 106 koppeln
kann. Der Chipsatz 108 kann über den Speicherbus 112 mit
dem Speicher 104 und über
den Systembus 110 mit dem Host-Prozessor 102 kommunizieren.
In alternativen Ausführungsformen
können
der Host-Prozessor 102 und der Host-Speicher 104 direkt,
und nicht über
den Chipsatz 108, an den Bus 106 gekoppelt sein.
-
Der
lokale Bus 106 kann an einen Steckkarten-Slot 120 gekoppelt
sein, der einen Busverbinder (nicht gezeigt) hat. Der lokale Bus 106 kann
einen Bus umfassen, der der Pertpheral Component Interconnect (PCI)
Local Bus Specification, Revision 3.0, 3. Februar 2004, erhältlich von
der PCI Special Interest Group, Portland, Oregon, USA, (im Folgenden als „PCI-Bus" bezeichnet) entspricht.
Als Alternative dazu kann der Bus 106 zum Beispiel einen
Bus umfassen, der der PCI ExpressTM Base
Specification, Revision 1.1, 28. März 2005, ebenfalls erhältlich von der
PCI Special Interest Group, (im Folgenden als „PCI-Express-Bus" bezeichnet) entspricht.
Der Bus 106 kann andere Bussystemtypen und -konfigurationen
umfassen. Der Systembus 110 kann einen Front-Side-Bus („FSB"), ein Link-basiertes Punkt-zu-Punkt-Verbindungssystem
oder andere Typen von Zusammenschaltungssystemen umfassen.
-
Das
System 100 kann zusätzlich
eine oder mehr Netzschnittstellen 126 (nur eine gezeigt)
umfassen. Wenn hierin auf eine „Netzschnittstelle" verwiesen wird,
dann bezieht sich diese auf ein Gerät, das an ein Kommunikationsmedium
gekoppelt sein kann, um Daten an andere Geräte, die an das Kommunikationsmedium
gekoppelt sind, zu übertragen und/oder
Daten von solchen Geräten
zu empfangen, das heißt,
um Netzverkehr zu senden und zu empfangen. Eine Netzschnittstelle
kann zum Beispiel Pakete 140 an Geräte, die an ein Netzwerk (zum Beispiel
ein lokales Netzwerk) gekoppelt sind, übertragen und/oder Pakete 140 von
solchen Geräten
empfangen. Wenn hierin der Ausdruck „Paket" verwendet wird, dann bezieht sich dieser
auf eine Folge von einem oder mehr Symbolen und/oder Werten, die durch
ein oder mehr Signale, die von mindestens einem Sender an mindestens
einen Empfänger übertragen
werden, codiert sein können.
Eine solche Netzschnittstelle 126 kann mit anderen Geräten gemäß irgendeinem
von mehreren Datenkommunikationsformaten kommunizieren, zum Beispiel
Kommunikationsformate gemäß Versionen
von IEEE (Institute of Electrical and Electronics Engineers) Standard 802.3
(CSMA/CD Access Method, Ausgabe 2002), IEEE-Standard 802.11 (LAN/MAN Wireless LANS, Ausgabe
1999), IEEE-Standard 802.16 (Ausgaben 2003 und 2004, LAN/MAN Broadband
Wireless LANS) oder der Standards Universal Serial Bus, Firewire,
Asynchronous Transfer Mode (ATM), Synchronous Optical Network (SONST)
oder Synchronous Digital Hierarchy (SDH).
-
In
einer Ausführungsform
kann sich die Netzschnittstelle 126 auf der Systemplatine 118 befinden. In
einer anderen Ausführungsform
kann die Netzschnittstelle 126 in den Chipsatz 108 integriert
sein. In noch einer anderen Ausführungsform
kann die Netzschnittstelle 126 stattdessen in einer Steckkarte 128 (zum
Beispiel Netzwerkkarte (NIC)) eingeschlossen sein, die in den Steckkarten-Slot 120 gesteckt werden
kann. Der Steckkarten-Slot 120 kann zum Beispiel einen
PCI-Erweiterungssteckplatz umfassen, der einen PCI-Busverbinder
(nicht gezeigt) umfasst. Der PCI-Busverbinder (nicht gezeigt) kann elektrisch
und mechanisch an einen PCI-Busverbinder (nicht gezeigt) angepasst
sein, der in der Steckkarte 128 eingeschlossen ist. Der
Steckkarten-Slot 120 und die Steckkarte 128 können so
konstruiert sein, dass sich die Steckkarte 128 in den Steckkarten-Slot 120 stecken
lässt.
Wenn die Steckkarte 128 in den Steckkarten-Slot 120 gesteckt
wird, können die
PCI-Busverbinder (nicht gezeigt) elektrisch und mechanisch aneinander
gekoppelt werden. Wenn die PCI-Busverbinder
(nicht gezeigt) auf diese Weise aneinander gekoppelt werden, kann
die Logik 130 in der Steckkarte 128 elektrisch
an den Systembus 110 gekoppelt werden.
-
Das
System kann Logik 130 umfassen. Die Logik 130 kann
Hardware, Software oder eine Kombination aus Hardware und Software
(zum Beispiel Firmware) umfassen. Die Logik 130 kann zum
Beispiel Schaltungen (das heißt,
einen oder mehr Schaltkreise) umfassen, um hierin beschriebene Operationen
auszuführen.
Die Logik 130 kann zum Beispiel eine oder mehr Digitalschaltungen,
eine oder mehr Analogschaltungen, einen oder mehr Zustandsautomaten,
programmierbare Logik und/oder eine oder mehr anwendungsspezifische
integrierte Schaltungen (ASIC) umfassen. Die Logik 130 kann fest
verdrahtet sein, um die eine oder die mehreren Operationen auszuführen. Als
Alternative dazu oder zusätzlich
kann die Logik 130 als maschinell ausführbare Befehle 132,
die in einem Speicher (zum Beispiel Speicher 104) gespeichert
sind, ausgeführt sein,
um diese Operationen auszuführen.
Als Alternative dazu oder zusätzlich
kann die Logik 130 als Firmware ausgeführt sein. Die Logik kann in
verschiedenen Bauelementen des Systems 100, einschließlich Netzschnittstelle 126,
Chipsatz 108, ein oder mehr Prozessoren 102A, 102B,
..., 102N und/oder Systemplatine 118, eingeschlossen
sein. Die Logik 130 kann verwendet werden, um verschiedene
Funktionen durch verschiedene Bauelemente gemäß Ausführungsformen des in der vorliegenden Anmeldung
offenbarten Gegenstandes auszuführen.
-
Das
System 100 kann mehr als eine/n und auch andere Typen von
Speichern, Bussen, Prozessoren und Netzschnittstellen umfassen.
Das System 100 kann zum Beispiel einen Server mit mehreren Prozessoren 102A, 102B,
..., 102N und mehreren Netzschnittstellen 126 umfassen.
Die Prozessoren 102A, 102B, ..., 102N,
der Speicher 104 und die Busse 106, 110, 112 können in
einer einzigen Platine (zum Beispiel eine Systemplatine 118)
eingeschlossen sein, aber Ausführungsformen
der Erfindung sind in dieser Hinsicht nicht beschränkt.
-
2 veranschaulicht
ein Netzwerk 200, in dem Ausführungsformen des in der vorliegenden
Anmeldung offenbarten Gegenstandes funktionieren können. Das
Netzwerk 200 kann eine Mehrzahl von Knoten 202A ... 202N umfassen,
wobei alle Knoten 202A ... 202N über ein
Kommunikationsmedium 204 kommunikativ aneinander gekoppelt
sein können. Die
Knoten 202A ... 202N können über das Medium 204 Mengen
von einem oder mehr Signalen, die ein oder mehr Pakete codieren
können, übertragen
und empfangen. Das Kommunikationsmedium 204 kann zum Beispiel
ein oder mehr optische Kabel und/oder Stromkabel umfassen, obwohl
viele Alternativen möglich
sind. Das Kommunikationsmedium 204 kann zum Beispiel Luft und/oder
Vakuum umfassen, durch die bzw. das die Knoten 202A ... 202N Mengen
von einem oder mehr Signalen drahtlos übertragen und/oder empfangen
können.
-
In
dem Netzwerk 200 können
ein oder mehr Knoten 202A ... 202N eine oder mehr
Zwischenstationen umfassen, zum Beispiel eine/n oder mehr Hubs,
Weichen und/oder Router. Zusätzlich
oder als Alternative dazu können
ein oder mehr Knoten 202A ... 202N eine oder mehr
Endstationen umfassen. Ebenfalls zusätzlich oder als Alternative
dazu kann das Netzwerk 200 eine oder mehr nicht gezeigte
Zwischenstationen umfassen, und das Medium 204 kann mindestens
einige der Knoten 202A ... 202N und eine oder
mehrere dieser Zwischenstationen kommunikativ aneinander koppeln.
Es sind natürlich viele
Alternativen möglich.
-
3 veranschaulicht
ein System 300 gemäß mindestens
einer Ausführungsform
der Erfindung. Wie 3 veranschaulicht, kann der
Speicher 104 die Paketpuffer 320, die Empfangswarteschlangen 330,
den Gerätetreiber 308,
das Betriebssystem (BS) 304, den Zwischentreiber 340,
die Sendewarteschlangen (Tx-Warteschlangen) 310A–310N und
die Anwendungen 302 aufnehmen.
-
Der
Paketpuffer 320 kann mehrere Puffer einschließen und
jeder Puffer kann mindestens ein aus einem Netzwerk empfangenes
Eingangspaket speichern. Der Paketpuffer 320 kann Pakete,
die die Netzschnittstelle 126 empfangen hat, speichern,
die in eine Warteschlange für
die Verarbeitung durch mindestens den Gerätetreiber 308, das
Betriebssystem 304, den Zwischentreiber 340, die
Sendewarteschlangen (Tx-Warteschlangen) 310A–310N und/oder
die Anwendungen 302 eingereiht werden.
-
Die
Empfangswarteschlangen 330 können Eingabewarteschlangen
und Ausgabewarteschlangen einschließen. Die Eingabewarteschlangen
können
dazu verwendet werden, Deskriptoren von einem Prozessor (zum Beispiel 102A),
einem Speicher (zum Beispiel 104) oder einem anderen an
den Prozessor gekoppelten Speicher (zum Beispiel ein Cache des Prozessors)
an eine oder mehr Netzschnittstellen (zum Beispiel Netzschnittstelle 126)
zu übertragen.
Ein Deskriptor kann an eine einzige Netzschnittstelle übertragen
werden. Ein Deskriptor kann eine Stelle in einem Puffer und die
Länge des
Puffers, der für
die Speicherung eines Eingangspaketes zur Verfügung steht, beschreiben. Ausgabewarteschlangen
können
dazu verwendet werden, Rückgabedeskriptoren
von irgendeiner der Netzschnittstellen an einen Prozessor, einen
Speicher oder einen anderen an den Prozessor gekoppelten Speicher
zu übertragen.
Ein Rückgabedeskriptor
kann den Puffer beschreiben, in dem ein spezielles Eingangspaket
innerhalb der Paketpuffer 320 gespeichert ist, und Merkmale
des Paketes, zum Beispiel die Länge
des Eingangspaketes, Hash-Werte und Pakettypen und Prüfsumme pass/fail,
kennzeichnen. In einer Ausführungsform
können
die Empfangswarteschlangen 330 mehrere Eingabe- und mehrere
Ausgabewarteschlangen einschließen.
In einer Ausführungsform,
in der es mehrere Netzschnittstellen gibt, kann der Zwischentreiber 340 die
Empfangswarteschlangen, die mit jeder der Netzschnittstellen verknüpft sind,
für die Verwendung
durch irgendeine der Netzschnittstellen zuweisen.
-
Der
Gerätetreiber 308 kann
Gerätetreiber
für jede
der Netzschnittstellen (zum Beispiel Netzschnittstelle 126)
darstellen. In einer der Ausführungsformen
kann es einen separaten Gerätetreiber
für jede der
mehreren Netzschnittstellen geben, auch wenn das nicht dargestellt
ist. Der Gerätetreiber 308 kann eine
Schnittstelle zwischen dem BS 304 und Netzschnittstellen
(zum Beispiel Netzschnittstelle 126) bereitstellen. Der
Gerätetreiber 308 kann
Deskriptoren erzeugen und kann die Verwendung und Zuweisung von
Deskriptoren in der Empfangswarteschlange 330 verwalten.
Der Gerätetreiber 308 kann
die Übertragung
von Deskriptoren an Netzschnittstellen unter Verwendung von einer
oder mehr Eingabewarteschlangen anfordern. Der Gerätetreiber 308 kann einer
der Netzschnittstellen signalisieren, dass ein Deskriptor in einer
Eingabewarteschlange zur Verfügung
steht. Der Gerätetreiber 308 kann
die Stelle des Eingangspaketes in dem Paketpuffer 320 auf
der Grundlage eines Rückgabedeskriptors,
der ein solches Eingangspaket beschreibt, bestimmen, und der Gerätetreiber 308 kann
das Betriebssystem 304 (sowie andere Routinen und Tasks) über die
Verfügbarkeit
und die Stelle eines solchen gespeicherten Eingangspaketes informieren.
-
Das
Betriebssystem 304 kann Systemressourcen und Steuer-Tasks
verwalten, die auf dem System 100 laufen. Das BS 304 kann
zum Beispiel unter Verwendung von Microsoft Windows, HP-UX, Linux
oder UNIX implementiert werden, auch wenn andere Betriebssysteme
verwendet werden können. In
einer Ausführungsform
kann das BS 304 durch jeden der Prozessoren 110-0
bis 110-N ausgeführt werden.
In einer Ausführungsform,
in der ein Microsoft-Windows-Betriebssystem verwendet wird, kann der
NDIS.sys-Treiber zumindest durch den Gerätetreiber 308 und
den Zwischentreiber 340 verwendet werden. Der NDIS.sys-Treiber
kann zum Beispiel dazu verwendet werden, Anwendungsprogramm-Schnittstellen (API)
zu definieren, die für
die Übertragung
von Paketen zwischen Schichten verwendbar sind. In einer Ausführungsform
kann das in 3 gezeigte BS 304 durch
eine virtuelle Maschine ersetzt werden, die verschiedenen Betriebssystemen,
die auf einem oder mehr Prozessoren laufen, eine Abstraktionsschicht
für zugrunde
liegende Hardware bereitstellen kann.
-
Das
Betriebssystem 304 kann einen oder mehr Protokollstapel 306 (nur
einer gezeigt) implementieren. Der Protokollstapel 306 kann
ein oder mehr Programme ausführen,
um die Pakete 140 zu verarbeiten. Ein Beispiel für einen
Protokollstapel ist ein TCP/IP-Protokollstapel
(TCP/IP = Transport Control Protocol/Internet Protocol), der ein
oder mehr Programme zur Handhabung (zum Beispiel Verarbeitung oder
Generierung) der Pakete 140 zum Senden und/oder Empfangen über ein
Netzwerk umfasst. Der Protokollstapel 306 kann aber auch
in einem dedizierten Teilsystem, zum Beispiel eine TCP-Offload-Engine,
eingeschlossen sein.
-
In
einer der Ausführungsformen
kann der Zwischentreiber 340 die Empfangswarteschlangen, die
mit jeder der Netzschnittstellen verknüpft sind, für die Verwendung durch irgendeine
der Netzschnittstellen zuweisen, so dass die Netzschnittstellen
als eine einzige virtuelle Netzschnittstelle mit mehreren Empfangswarteschlangen
zu Schichten oberhalb des Zwischentreibers 340 (zum Beispiel
BS 304, ohne auf dieses beschränkt zu sein) erscheinen. So kann
der Zwischentreiber 340 zum Beispiel bei zwei Netzschnittstellen
mit jeweils zwei Empfangswarteschlangen eine einzige virtuelle Netzschnittstelle
mit vier Empfangswarteschlangen (zum Beispiel vier Eingabe- und
vier Ausgabe-Empfangswarteschlangen)
bereitstellen. Wenn mehrere Netzschnittstellen verwendet werden,
gestattet der Zwischentreiber 340 das Ausnutzen von Merkmalen
des BS 304 hinsichtlich des Lenkens von Paketen zum Zwecke
der Verarbeitung durch einen spezifischen Prozessor, selbst wenn
der Gerätetreiber
einer oder irgendeiner der Netzschnittstellen die Verwendung von
mehreren Empfangswarteschlangen nicht unterstützt.
-
Zusätzlich zu
oder als Alternative zu der Bereitstellung eines Ausgleiches der
Last der Paketverarbeitung durch Prozessoren kann der Zwischentreiber 340 einen
Ausgleich der Last des Verkehrs, der über Netzschnittstellen aus
einem Netzwerk empfangen wird, bereitstellen. In einer Ausführungsform kann
der Zwischentreiber 340 einen Ausgleich der Last des Verkehrs,
der aus einem Netzwerk empfangen wird, unter den Netzschnittstellen
bereitstellen. In einer Ausführungsform
kann der Zwischentreiber 340 zum Beispiel die Fähigkeit
zur Änderung
von „ARP-Antworten" (beschrieben in
Ethernet-Standards) einschließen,
um anzufordern, dass Verkehr aus einem Quellengerät danach
an eine spezielle Netzschnittstelle unter den Netzschnittstellen
adressiert wird, um die Last der empfangenen Pakete unter den Netzschnittstellen
auszugleichen. Demgemäß können Pakete
danach von einem Quellenknoten an die ausgewählte Netzschnittstelle unter
den Netzschnittstellen gesendet werden, so dass ein Ausgleich der
Last unter den Netzschnittstellen erfolgen kann. Der Zwischentreiber 340 kann
zum Beispiel ARP-Antworten dazu verwenden, eine erste Verbindung
für den
Empfang an einer ersten Netzschnittstelle und eine zweite Verbindung
für den
Empfang an einer zweiten Netzschnittstelle zuzuweisen.
-
Die
Tx-Warteschlangen 310A–310N können Daten
Puffern, die von einem Ausgabe-Port (zum Beispiel ein Ein-/Ausgabe-Port
oder -ausgang) eines Knotens (zum Beispiel Knoten 202A)
an einen anderen Knoten zu senden sind. Wenn ein Netzwerkgerätetreiber
nur eine Tx-Warteschlange
unterstützt,
kann es erforderlich sein, dass der Netzwerkgerätetreiber ein Spin-Lock auf der einzigen
Tx-Warteschlange erlangt und wartet, bis andere Prozessoren ihre
Sperren auf der Tx-Warteschlange aufgehoben haben. Der Spin-Lock
kann zu einer Sperrenkonkurrenz führen, die die Leistung zum
Beispiel dadurch herabsetzen kann, dass Threads auf einem Prozessor „aktiv warten" müssen und
die Prozessornutzung unnötigerweise
verstärkt
wird. Somit unterstützen
viele moderne Netzwerkgerätetreiber
mehrere Tx-Warteschlangen. Die Verteilung eines Paketes auf mehrere Tx-Warteschlangen
kann darauf, welcher Prozessor das Paket generiert, auf der Art,
der Klasse oder Qualität
des mit dem Paket verknüpften
Dienstes oder den Daten in dem Paket beruhen. Manchmal können sogar
auf der Grundlage der Art, der Klasse oder Qualität des mit
Rahmen (frames) verknüpften Dienstes
unterschiedliche Rahmen innerhalb eines Paketes auf unterschiedliche
Tx-Warteschlangen verteilt werden. In jedem Fall beginnt bzw. beginnen die
Tx-Warteschlange/n,
sich mit Rahmen zu füllen, wenn
Rahmen/Pakete von Daten an einem Knoten schneller empfangen werden,
als dass es möglich
ist, die Rahmen an einen anderen Knoten zu senden. Im Allgemeinen
warten später
empfangene Rahmen in der Warteschlange, während Rahmen, die vor ihnen in
der Warteschlange empfangen wurden, zuerst gesendet werden.
-
Der
Speicher 104 kann zusätzlich
eine oder mehr Anwendungen 302 (nur eine gezeigt) umfassen.
Die Anwendungen 302 können
ein oder mehr maschinell ausführbare
Programme darstellen, die von einem Host-System (zum Beispiel 100)
oder einem Netzwerk aus auf Daten zugreifen. Die Anwendung 302 kann
zum Beispiel einen Web-Browser, eine E-Mail-Serving-Anwendung, eine File-Serving-Anwendung
oder eine Datenbankanwendung einschließen.
-
Der
Speicher 104 kann ferner mindestens einige Bauelemente
der Logik 130 umfassen. Einige Bauelemente der Logik 130 können in
der Netzschnittstelle 126 eingeschlossen sein. Die Bauelemente
der Logik 130 in dem Speicher 104 und der Netzschnittstelle 126 können zusammen
die Effizienz der Interrupt-Lieferung zur Laufzeit in dem Netzwerksystem,
in dem sich der Speicher 104 befindet, erhöhen. Die
Logik 130 kann zum Beispiel einen Interrupt von der Netzschnittstelle 126,
der an einen Prozessor, auf dem die Zielanwendung läuft, zu
liefern ist, erleichtern, wie in 4 veranschaulicht
ist.
-
4 veranschaulicht
ein beispielhaftes Netzwerksystem 400, in dem Interrupts,
die durch eine Netzschnittstelle generiert werden, zu einem Zielprozessor
gelenkt werden, gemäß einer
Ausführungsform
des in der vorliegenden Anmeldung offenbarten Gegenstandes. Das
beispielhafte System 400 umfasst zwei Sockel: Sockel 0
(410) und Sockel 1 (420). In dem Sockel 0 (410)
befinden sich zwei Prozessoren: Prozessor 0 (412) und Prozessor
1 (414). In dem Sockel 1 (420) befinden sich zwei
Prozessoren: Prozessor 2 (422) und Prozessor 3 (424).
Zwar werden in der Figur zwei Sockel gezeigt und schließt jeder
Sockel zwei Prozessoren ein, doch kann in anderen Ausführungsformen
ein Netzwerksystem einen oder mehr als zwei Sockel umfassen und
kann ein einzelner Sockel einen oder mehr als zwei Prozessoren einschließen. Die
Prozessoren sowohl in dem Sockel 0 (410) als auch in dem
Sockel 1 (420) sind über
einen Systembus 430 an einen Ein-/Ausgabe-Hub („IOH") 440 gekoppelt.
Ein/e Netzwerk-Controller/-schnittstelle 460 ist an den
IOH 440 gekoppelt. Jeder durch den/die Netzwerk-Controller/-schnittstelle 460 generierte
Interrupt kann an den Sockel 0 (410) über eine statische Konfiguration
oder an einen Prozessor auf der Grundlage einer Round-Robin-Anordnung geliefert
werden.
-
Das
beispielhafte System 400 schließt auch eine Anwendung 470 ein,
die in dem System zur Zeit (oder Zeitraum) X läuft. Auf der Grundlage der
Nutzung aller Prozessoren in dem System zur Zeit (oder Zeitraum)
X und der BS-Scheduling-Verfahrensweise läuft die Anwendung 470 auf
dem Prozessor 2 (422) zur Zeit (oder Zeitraum) X. Wenn
der/die Netzwerk-Controller/-schnittstelle 460 einen Interrupt
generiert, der auf die Anwendung 470 abzielt, wird der Interrupt
in einem herkömmlichen
Netzwerksystem möglicherweise
nicht an den Prozessor 2 (422) geliefert. Der Interrupt
kann zum Beispiel an den Prozessor 0 (412) in dem Sockel
0 (410) über
eine statische Konfiguration geliefert werden; oder der Interrupt kann
nach dem Zufallsprinzip an irgendeinen der vier Prozessoren unter
Verwendung einer Round-Robin-Anordnung geliefert werden. Gemäß einer
Ausführungsform
des in der vorliegenden Anmeldung offenbarten Gegenstandes können der/die
Netzwerk-Controller/-schnittstelle 460 sowie
ein Gerätetreiber
in dem Netzwerksystem so konfiguriert sein, dass ein Interrupt,
der auf eine Anwendung oder einen Thread einer Anwendung abzielt,
an den Prozessor, auf dem die Anwendung/der Thread läuft, geliefert
wird. In dem in 4 gezeigten Beispiel wird der Interrupt,
der auf die Anwendung 470 abzielt, an den Prozessor 2 (422)
geliefert.
-
Da
das BS während
der Laufzeit jederzeit ein Rescheduling einer Anwendung/eines Threads
vornehmen kann, kann sich die Prozessoraffinität der Anwendung/des Threads
(das heißt,
die Identifizierung eines Prozessors, auf dem die Anwendung/der Thread
läuft)
während
der Laufzeit ändern.
In einer der Ausführungsformen
kann ein Netzwerkgerätetreiber
(zum Beispiel 308 oder 340 in 3)
zur Laufzeit die Prozessoraffinität der Anwendung/des Threads an
das Netzwerkgerät
(zum Beispiel Netzschnittstelle 126 in 3) übertragen.
Das Netzwerkgerät
generiert dann den Interrupt mit der gleichen Prozessoraffinität.
-
5 zeigt
ein Ablaufdiagramm eines beispielhaften Prozesses 500 zur
Erhöhung
der Effizienz der Interrupt-Lieferung zur Laufzeit in einem Netzwerksystem.
In Block 510 kann eine Anwendung/ein Thread eine Nachricht
oder andere Daten an andere Benutzer in dem Netzwerk senden. In Block 520 kann
der BS-Kernel die Nachricht an einen Gerätetreiber (zum Beispiel 308 oder 340 in 3) weiterleiten.
In Block 530 kann der Gerätetreiber die Nummer des aktuellen
Prozessors, auf dem die Anwendung/der Thread läuft, identifizieren, das heißt, der
Gerätetreiber
ermittelt die Prozessoraffinität
der Anwendung/des Threads. In Block 540 kann der Gerätetreiber
eine Tx-Warteschlange auswählen,
die mit einem passenden MSI-X-Vektor verknüpft ist. MSI steht für Message
Signaled Interrupt. Das ist ein erforderliches Merkmal von PCI-Express-Geräten. MSI
kann, verglichen mit dem Pin-Assertion-Interrupt,
als eine fortgeschrittene Interrupt-Anordnung betrachtet werden.
Eine MSI-Fähigkeitsstruktur schließt ein Nachrichtensteuerregister,
ein Nachrichtenadressregister und ein Nachrichtendatenregister ein.
Diese Register stellen die Steuerung des MSI durch den Bustreiber
bereit. Das Nachrichtensteuerregister gibt die durch das Gerät unterstützte MSI-Fähigkeit an. Das Nachrichtenadressregister
spezifiziert die Zieladresse und das Nachrichtendatenegister spezifiziert
die Eigenschaften der Nachricht. Eine MSI-Fähigkeitsstruktur
kann als ein Interrupt-Vektor betrachtet werden, der mehrere Elemente,
zum Beispiel die Zieladresse einer Nachricht, Eigenschaften der
Nachricht usw., einschließt. MSI-X
ist eine Erweiterung von MSI und schließt mehr als einen solchen Interrupt-Vektor
ein.
-
Wenn
das Netzwerksystem die MSI-X-basierte Interrupt-Anordnung unterstützt, kann
jeder Interrupt-Vektor der MSI-X-Anordnung mit einer Tx-Warteschlangennummer
verknüpft
werden. 6 zeigt eine Tabelle 600, die
solche Verknüpfungen zwischen
dem Tx-Warteschlangenindex
und dem MSI-Vektorindex veranschaulicht. Die Tabelle 600 schließt zwei
Spalten ein: Spalte 610 (Tx-Warteschlangenindex) und Spalte 620 (MSI-Vektorindex). Zum
Beispiel kann die Tx-Warteschlange 0 mit dem MSI-Vektor 1 verknüpft sein,
kann die Tx-Warteschlange 1 mit dem MSI-Vektor 3 verknüpft sein, kann
die Tx-Warteschlange 2 mit dem MSI-Vektor 2 verknüpft sein
usw. Die Tabelle 600 wird zum Zwecke der Veranschaulichung
verwendet. In der Praxis kann es mehr oder weniger als vier Tx-Warteschlangen oder
MSI-Vektoren geben, und die Gesamtzahl der Tx-Warteschlangen entspricht
nicht notwendigerweise der Gesamtzahl der MSI-Vektoren. Die Verknüpfungsinformationen
zwischen den Tx-Warteschlangen und den MSI-Vektoren können in
einem Netzwerkgerät
(zum Beispiel Netzschnittstelle 126, gezeigt in 3)
gespeichert sein.
-
Nun
soll erneut auf 5 Bezug genommen werden. Jeder
MSI-Interrupt-Vektor kann Prozessor-Identifikationsinformationen
eines Prozessors, auf den der Interrupt abzielt, einschließen. In
Block 540 kann eine Tx-Warteschlange ausgewählt werden,
die mit einem MSI-Interrupt-Vektor verknüpft ist, dessen Prozessor-Identifikationsinformationen
zu der in Block 530 identifizierten Prozessoraffinität der Anwendung/des
Threads passen. Wenn es keinen MSI-Interrupt-Vektor gibt, dessen
Prozessor-Identifikationsinformationen zu der identifizierten Prozessoraffinität der Anwendung/des
Threads passen, kann ein alternativer MSI-Interrupt-Vektor verwendet
werden, dessen Prozessor-Identifikationsinformationen zu irgendeinem
der Prozessoren in demselben Sockel wie der identifizierte Prozessor,
der die Anwendung/den Thread laufen lässt, passen. Demgemäß kann eine
Tx-Warteschlange ausgewählt
werden, die mit einem solchen alternativen MSI-Interrupt-Vektor verknüpft ist.
-
In
Block 550 kann die Nachricht durch die in Block 540 ausgewählte Tx-Warteschlange
gesendet werden. In Block 560 kann das Netzwerkgerät Pakete
in der Nachricht durch direkten Speicherzugriff (DMA) aus der ausgewählten Tx-Warteschlange
erlangen. Sobald sich die Nachricht in dem Gerätepuffer befindet oder ausgesendet
worden ist, generiert das Netzwerkgerät einen Interrupt unter Verwendung des
Interrupt-Vektors, der mit der in Block 540 ausgewählten Tx-Warteschlange
verknüpft
ist. In Block 570 kann der Interrupt an den Zielprozessor,
der zu der Prozessoraffinität
der Anwendung/des Threads passt, oder an einen gleichrangigen Prozessor
(Peer prozessor) in demselben Sockel wie der Prozessor, der die
Anwendung/den Thread laufen lässt,
geliefert werden. In Block 580 kann der Gerätetreiber
die Tx-Fertigstellung abarbeiten und den Paketpuffer an der ausgewählten Tx-Warteschlange
freigeben. Die Anwendung/der Thread kann dann aufwachen und weiterlaufen.
-
Der
in 5 gezeigte Prozess 500 setzt voraus,
dass das Netzwerksystem mehrere Tx-Warteschlangen unterstützt und
mehrere Interrupt-Vektoren für
die Verwendung zur Verfügung
stehen. Diese Annahme trifft typischerweise auf moderne Netzwerksysteme
zu. Wenn das Netzwerksystem nur eine Tx-Warteschlange unterstützt, aber
mehrere MSI-X-Vektoren
zur Verfügung
stehen, kann der Gerätetreiber
das Netzwerkgerät
informieren der nächste
Interrupt-Vektor, der zu verwenden ist, die identifizierte Prozessoraffinität zur Laufzeit,
so dass der Gerät-Interrupt
direkt an den Zielprozessor lieferbar ist.
-
In
einer anderen Ausführungsform,
in der ein Zwischengerätetreiber
(zum Beispiel 340 in 3) verwendet
wird, kann der oben offenbarte Gegenstand so abgeändert werden,
dass er an den Zwischengerätetreiber
angepasst ist. Der Zwischengerätetreiber
kann das Paket zum Beispiel einer Miniport-Instanz zuteilen, deren
Gerät einen
Interrupt-Vektor hat, dessen Prozessor-Identifikationsinformationen
zu der Prozessoraffinität
der/des aktuellen laufenden Anwendung/Threads passen.
-
In
noch einer anderen Ausführungsform kann
der Gerätetreiber
die Prozessoraffinität
der Anwendung an den Chipsatz, zum Beispiel Speichersteuerungshub
(MCH) oder IOH, übertragen.
Wenn der Chipsatz den Interrupt von dem Gerät empfangt, liefert er den
Interrupt an die richtige CPU. Dieses Verfahren mag bei einem Gerät, das nur
einen Interrupt-Vektor, zum Beispiel einen PCI-Legacy-Interrupt oder
einen MSI mit einer einzigen Nachricht, unterstützt, gut funktionieren.
-
7 zeigt
ein Ablaufdiagramm eines anderen beispielhaften Prozesses 700 zur
Erhöhung
der Effizienz der Interrupt-Lieferung zur Laufzeit in einem Netzwerksystem.
In Block 710 kann eine Anwendung/ein Thread Daten aussenden.
In Block 720 kann der BS-Kernel die Daten an einen Gerätetreiber weiterleiten.
In Block 730 kann der Gerätetreiber die Prozessoraffinität der Anwendung/des
Threads identifizieren. In Block 740 kann der Gerätetreiber
die identifizierte Prozessoraffinität an den Chipsatz oder das
Netzwerkgerät
(zum Beispiel Netzschnittstelle 126 in 3) übertragen.
In Block 750 können
die Daten ausgesendet werden (zum Beispiel entweder an den Puffer
des Netzwerkgerätes übertragen
werden oder drahtgebunden oder drahtlos ausgesendet werden). In
Block 760 kann durch das Gerät ein Interrupt generiert werden
und auf der Grundlage der übertragenen
identifizierten Affinität
der Anwendung/des Threads direkt an den richtigen Prozessor geliefert
werden.
-
8 zeigt
eine Tabelle 800, die eine experimentelle Leistungserhöhung eines
Netzwerksystems, erreicht durch das Lenken eines Interrupts direkt
zu dem Zielprozessor oder einem gleichrangigen Prozessor (Peer processor),
der sich in demselben Sockel wie der Zielprozessor befindet, gemäß einer Ausführungsform
des hierin offenbarten Gegenstandes veranschaulicht. Die Tabelle 800 hat
vier Spalten: Spalte 810 zeigt einen Prozessor, an den
ein Interrupt geliefert wird, Spalte 820 zeigt einen Prozessor,
der eine Anwendung/einen Thread laufen lässt, die bzw. der den Interrupt
verursacht, Spalte 830 zeigt die Prozessornutzung und Spalte 840 zeigt
den Netzwerkdurchsatz, angegeben in Nachrichten pro Sekunde. Das
Netzwerksystem, das in dem Experiment verwendet wurde, das die in
der Tabelle 800 gezeigten Daten ergab, ist so konfiguriert,
dass es zwei Sockel einschließt:
Sockel 0 und Sockel 1. Jeder Sockel hat zwei Prozessoren: Der Sockel
0 schließt
die CPU 0 und die CPU 2 ein und der Sockel 1 schließt die CPU
1 und die CPU 3 ein. Es werden ESB2-basierte PRO1000-Netzwerkkarten verwendet,
die einen MSI/MSI-X-nachrichtenbasierten Interrupt unterstützen. In
dem Experiment wird ein Windows®-Longhorn-Server
verwendet. Durch eine CPU, die die Anwendung/den Thread laufen lässt, werden UDP-Nachrichten
versendet.
-
Aus
den Daten in der Tabelle 800 geht hervor, dass dann, wenn
die Prozessoraffinität
des Interrupts (das heißt,
der Prozessor, an den der Interrupt geliefert wird) und die Prozessoraffinität der Anwendung
gleich sind oder sich in demselben Sockel befinden, der Durchsatz
am höchsten
ist, während
die Gesamt-CPU-Nutzung am geringsten ist (siehe Zeile 850 und
Zeile 865). In anderen Situationen (zum Beispiel Zeilen 855, 860, 870 und 875 in
Tabelle 800), in denen die Prozessoraffinität des Interrupts
und die Prozessoraffinität
der Anwendung nicht gleich sind oder sich nicht in demselben Sockel
befinden, nimmt der Durchsatz ab und nimmt die Gesamt-CPU-Nutzung
zu.
-
Zwar
wird unter Bezugnahme auf Zeichnungen in den 1 bis 8 eine
beispielhafte Ausführungsform
des offenbarten Gegenstandes beschrieben, doch werden Fachleute
ohne weiteres erkennen, dass auch viele andere Verfahren zur Implementierung
des offenbarten Gegenstandes verwendet werden können. Zum Beispiel kann die
Reihenfolge der Ausführung
der Blöcke
in Ablaufdiagrammen geändert
werden und/oder können
einige der Blöcke in
beschriebenen Block-/Ablaufdiagrammen geändert, entfernt oder kombiniert
werden.
-
In
der vorangehenden Beschreibung sind verschiedene Aspekte des offenbarten
Gegenstandes beschrieben worden. Zum Zwecke der Erläuterung
wurden spezifische Zahlen, Systeme und Konfigurationen dargelegt,
um ein umfassendes Verständnis
für den
Gegenstand zu schaffen. Einem Fachmann, dem Einsicht in diese Offenbarung
gewährt
ist, leuchtet jedoch ein, dass der Gegenstand ohne die spezifischen
Einzelheiten ausgeführt
werden kann. In anderen Fällen
wurden wohl bekannte Merkmale, Bauelemente oder Module ausgelassen,
vereinfacht, kombiniert oder aufgespaltet, um den offenbarten Gegenstand
nicht unverständlich
zu machen.
-
Verschiedene
Ausführungsformen
des offenbarten Gegenstandes können
in Hardware, Firmware, Software oder als eine Kombination davon
implementiert werden und können
unter Bezugnahme auf oder im Zusammenhang mit einem Programmcode,
zum Beispiel Befehle, Funktionen, Prozeduren, Datenstrukturen, Logik,
Anwendungsprogramme, Entwurfsdarstellungen oder Formate für die Simulation,
die Emulation und die Herstellung eines Entwurfes, beschrieben werden,
der, wenn durch eine Maschine auf ihn zugegriffen wird, dazu führt, dass
die Maschine Tasks ausführt,
abstrakte Datentypen oder Low-Level-Hardware-Kontexte definiert oder ein
Ergebnis herbeiführt.
-
Für Simulationen
kann ein Programmcode Hardware darstellen, wobei eine Hardware-Beschreibungssprache
oder eine andere funktionelle Beschreibungssprache verwendet wird,
die im Wesentlichen ein Modell des erwarteten Funktionierens einer
entworfenen Hardware bereitstellt. Der Programmcode kann eine Assembler-
oder Maschinensprache sein oder Daten darstellen, die kompiliert und/oder
interpretiert werden können.
Außerdem
ist es auf diesem Fachgebiet üblich,
in der einen oder anderen Form von Software als Durchführung einer Aktion
oder Herbeiführung
eines Ergebnisses zu sprechen. Solche Ausdrücke sind lediglich eine kurz gefasste
Form der Feststellung der Ausführung
eines Programmcodes durch ein Verarbeitungssystem, was bewirkt,
dass ein Prozessor eine Aktion durchführt oder ein Ergebnis herbeiführt.
-
Der
Programmcode kann zum Beispiel in einem flüchtigen und/oder nichtflüchtigen
Speicher gespeichert werden, zum Beispiel Speichergeräte und/oder
ein zugehöriger
maschinell lesbarer Datenträger
oder Datenträger,
auf den eine Maschine zugreifen kann, die integrierte Speicherbausteine,
Festplatten, Disketten, optische Speicher, Bänder, Flash-Speicher, Speichersticks,
digitale Bildplatten, mehrseitige Digitalplatten (DVD) usw. sowie
außergewöhnlichere
Datenträger
wie biologische zustandserhaltende Speicher, auf die eine Maschine
zugreifen kann, einschließen.
Ein maschinell lesbarer Datenträger
kann einen beliebigen Mechanismus zum Speichern, Senden oder Empfangen
von Informationen in einer maschinell lesbaren Form einschließen, und
der Datenträger
kann ein greifbares Mittel einschließen, durch das elektrische,
optische, akustische oder andere Formen von fortgepflanzten Signalen
oder Trägerwellen,
die den Programmcode codieren, gelangen können, zum Beispiel Antennen,
Glasfasern, Datenübertragungsschnittstellen
usw. Der Programmcode kann in Form von Paketen, seriellen Daten,
parallelen Daten, fortgepflanzten Signalen usw. gesendet und in
einem komprimierten oder verschlüsselten
Format verwendet werden.
-
Der
Programmcode kann in Programmen implementiert werden, die auf programmierbaren
Maschinen ablaufen, zum Beispiel mobile oder stationäre Rechner,
persönliche
digitale Assistenten (Personal Digital Assistants), Set-Top-Boxen,
Mobiltelefone und Funkrufempfänger
und andere elektronische Geräte,
die jeweils einen Prozessor, einen flüchtigen und/oder nichtflüchtigen
Speicher, der durch den Prozessor lesbar ist, mindestens ein Eingabegerät und/oder
ein oder mehr Ausgabegeräte
einschließen.
Der Programmcode kann auf die unter Verwendung des Eingabegerätes eingegebenen
Daten angewendet werden, um die beschriebenen Ausführungsformen
auszuführen
und Ausgabeinformationen zu generieren. Die Ausgabeinformationen
können
einem oder mehr Ausgabegeräten
zugeführt werden.
Ein Fachmann mag erkennen, dass Ausführungsformen des offenbarten
Gegenstandes mit verschiedenen Rechnersystemkonfigurationen ausführbar sind,
einschließlich
Mehrprozessor- oder Mehrkernprozessor-Systeme, Minirechner, Großrechner sowie überall vorhandene
oder Miniaturrechner oder Prozessoren, die in praktisch jedes Gerät integriert werden
können.
Ausführungsformen
des offenbarten Gegenstandes sind auch in verteilten Datenverarbeitungsumgebungen
ausführbar,
in denen Tasks durch entfernte Verarbeitungsgeräte, die durch ein Kommunikationsnetz
verbunden sind, ausgeführt
werden können.
-
Zwar
können
Operationen als ein sequentieller Prozess beschrieben werden, doch
können
einige der Operationen tatsächlich
parallel, gleichzeitig und/oder in einer verteilten Umgebung und
mit einem für
den Zugriff durch Einzel- oder Mehrprozessormaschinen lokal und/oder
entfernt gespeicherten Programmcode ausgeführt werden. Außerdem kann
in einigen Ausführungsformen
die Reihenfolge der Operationen geändert werden, ohne dabei vom
Sinn des offenbarten Gegenstandes abzuweichen. Der Programmcode
kann durch oder zusammen mit integrierten Controllern verwendet
werden.
-
Zwar
ist der offenbarte Gegenstand hinsichtlich veranschaulichender Ausführungsformen
beschrieben worden, doch soll diese Beschreibung nicht als einschränkend aufgefasst
werden. Verschiedene Modifizierungen der veranschaulichenden Ausführungsformen
sowie andere Ausführungsformen
des Gegenstandes, die für
Fachleute auf dem Gebiet, auf das sich der offenbarte Gegenstand
bezieht, offensichtlich sind, werden als innerhalb des Schutzbereiches
des offenbarten Gegenstandes liegend betrachtet.