-
HINTERGRUND
-
In einem Betriebssystem, das einen Unix/Linux-Kernel verwendet, läuft eine große Menge von Systemdiensten im User-Space als Daemon. Daher wird ein besserer Dienst durch ein Upgrade eines Prozesses anstelle eines Maschinenneustarts bereitgestellt.
-
Ein Prozess kann mit einem anderen Prozess oder einem Kernel auf verschiedene Weise kommunizieren. Zum Beispiel können Prozesse in der gleichen Maschine miteinander über eine Inter Prozess Communication(IPC)-Technik kommunizieren. Prozesse in verschiedenen Maschinen können miteinander über das Transmission Control Protocol(TCP)/User Datagram Protocol (UDP) kommunizieren. Zusätzlich kann ein Prozess mit einem Kernel über ein Netlink-Socket kommunizieren. In einem Unix/Linux-Kernel können diese Kommunikationseinheiten als Dateideskriptoren (FD) interpretiert werden.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Die Merkmale der vorliegenden Offenbarung werden beispielhaft und nicht einschränkend in den folgenden Figur(en) dargestellt, in denen gleiche Bezugsziffern gleiche Elemente angeben, in denen:
-
1 ist ein Flussdiagramm, das ein Verfahren zum Starten eines Prozesses gemäß einem Beispiel der vorliegenden Offenbarung zeigt.
-
2 ist ein Flussdiagramm, das ein Verfahren zum Upgraden eines Prozesses gemäß einem Beispiel der vorliegenden Offenbarung zeigt.
-
3-1 ist ein schematisches Diagramm, das einen Zustand eines alten Prozesses und einen Kernel, bevor der alte Prozess beendet wird, gemäß einem Beispiel der vorliegenden Offenbarung zeigt.
-
3-2 ist ein schematisches Diagramm, das einen Zustand des alten Prozesses und den Kernel, nachdem der alte Prozess beendet wird, gemäß einem Beispiel der vorliegenden Offenbarung zeigt.
-
3-3 ist ein schematisches Diagramm, das einen Zustand eines neuen Prozesses und den Kernel, wenn der neue Prozess beginnt, gemäß einem Beispiel der vorliegenden Offenbarung zeigt.
-
3-4 ist ein schematisches Diagramm, das einen Zustand des neuen Prozesses und den Kernel, nachdem der Prozess erfolgreich geupgradet wird, gemäß einem Beispiel der vorliegenden Offenbarung zeigt.
-
4 ist ein schematisches Diagramm, das eine Struktur eines Kernels gemäß einem Beispiel der vorliegenden Offenbarung zeigt.
-
5 ist ein schematisches Diagramm, das eine Struktur eines maschinenlesbaren Speichermediums gemäß einem Beispiel der vorliegenden Offenbarung zeigt.
-
DETAILLIERTE BESCHREIBUNG
-
Nachstehend wird die vorliegende Offenbarung in weiteren Einzelheiten unter Bezugnahme auf die beigefügten Zeichnungen und Beispiele beschrieben, um die technische Lösung und die Vorteile darin deutlicher zu machen.
-
Für Vereinfachungs- und Erläuterungszwecke ist die vorliegende Offenbarung durch Bezugnahme hauptsächlich auf ein Beispiel davon beschrieben. In der folgenden Beschreibung werden zahlreiche spezifische Details dargelegt, um ein gründliches Verständnis der vorliegenden Offenbarung bereitzustellen. Es wird jedoch ohne Weiteres ersichtlich sein, dass die vorliegende Offenbarung ohne eine Beschränkung auf diese spezifischen Details ausgeführt werden kann. In anderen Fällen wurden einige Verfahren und Strukturen nicht im Detail beschrieben, um nicht unnötigerweise die vorliegende Offenbarung unverständlich zu machen. Wie hierin verwendet, bedeutet der Ausdruck ”umfasst” umfasst ohne Einschränkung, wobei der Ausdruck ”umfasst” ohne Einschränkung umfasst bedeutet. Der Ausdruck ”basierend auf” bedeutet zumindest teilweise basierend auf. Darüber hinaus sollen die Ausdrücke ”ein, eine” mindestens eines aus einem bestimmten Element bedeuten.
-
Während des Upgradens eines Prozesses wird der Prozess neu gestartet und ein FD durch einen Kernel geschlossen. Somit wird ein Kommunikationsendknoten eine Verbindungsunterbrechung erkennen und dann eine entsprechende Verarbeitung auslösen. Andererseits können Datenänderungen des Kommunikationsendknotens diesem Ende nicht bekannt sein. Nachdem der Prozess neu gestartet wird, muss daher der Kommunikationsendknoten alle Daten erneut senden.
-
Ein Border Gateway Protocol(BGP)-Prozess auf einem Router wird als Beispiel genommen. Wenn ein BGP-Prozess auf einer lokalen Maschine geupgradet wird, wird ein Nachbar die Verbindungsunterbrechung erkennen. Wenn Graceful Restart (GR) nicht aktiviert ist, wird der Nachbar alle BGP-Routen von der lokalen Maschine löschen. Wenn GR aktiviert ist, löscht der Nachbar die BGP-Routen nicht. Nachdem der BGP-Prozess neu gestartet wird, müssen jedoch alle Nachbarn die BGP-Routen zur lokalen Maschine erneut senden.
-
Das konventionelle Upgraden eines Prozesses hat einen großen Einfluss und kann Turbulenzen verursachen.
-
In einer praktischen Anwendung kann das BGP eine Non-Stopping Routing(NSR)-Technik anwenden, um das Upgraden eines Prozesses ohne Unterbrechung einer TCP-Verbindung zu implementieren. Jedoch ist die TOP-NSR-Technik kompliziert und muss eine große Datenmenge sichern, die die Systemleistung zu einem gewissen Grad beeinträchtigt. Zusätzlich, außer TOP, stellt das NSR nicht ausreichend Schemata für andere Kommunikationsprotokolle, wie UDP, IPC, Netlink usw., bereit. Daher kann die NSR-Technik nicht allgemein verwendet werden.
-
Im Gegensatz zu oben stellen Beispiele der vorliegenden Offenbarung ein Verfahren und ein Gerät zum Starten eines Prozesses bereit, um die Komplexität beim Starten des Prozesses ohne Verbindungsunterbrechung zu reduzieren.
-
1 ist ein Flussdiagramm, das ein Verfahren zum Starten eines Prozesses gemäß einem Beispiel der vorliegenden Offenbarung zeigt. Wie in 1 gezeigt ist, weist das Verfahren die folgenden Vorgänge auf.
-
Block 101, bevor ein erster Prozess beendet wird, empfängt ein Kernel eine Verbindungshalteanfrage, die einen vom ersten Prozess gesendeten Dateideskriptor (FD) trägt. Für den von der Verbindungshalteanfrage getragenen FD erhöht der Kernel eine Referenzzählung eines Dateiobjekts, das dem FD entspricht, setzt das Dateiobjekt in einen Cache und sendet eine Cachepositionsinformation zum ersten Prozess zurück, so dass der erste Prozess eine entsprechende Beziehung zwischen der Cachepositionsinformation und Kennungsinformation einer Kommunikationsverbindung, auf die durch den FD hingezeigt wird, in einen vordefinierten Speicherbereich setzt.
-
Block 102, wenn ein zweiter Prozess gestartet wird, empfängt der Kernel eine FD-Erhaltungsanfrage, die die vom zweiten Prozess gesendete Cachepositionsinformation trägt, liest das Dateiobjekt aus dem Cache, weist einen neuen FD für das Dateiobjekt zu und sendet den neuen FD zum zweiten Prozess zurück.
-
Für das Upgraden des Prozesses ist der erste Prozess ein Prozess einer alten Version und der zweite Prozess ist ein Prozess einer neuen Version.
-
Für das Neustarten des Prozesses ist der erste Prozess und der zweite Prozess der gleiche Prozess.
-
Im Vergleich zu den herkömmlichen Systemen implementiert die durch das Beispiel der vorliegenden Offenbarung bereitgestellte technische Lösung das Upgraden oder Neustarten eines Prozesses ohne Kommunikationsunterbrechung. Die Prozedur ist einfach und hat geringe Auswirkungen auf die Systemleistung. Die Lösung ist für durch einen FD beschriebene Kommunikationsverbindungen passend und kann breit angewendet werden.
-
Nachfolgend wird das durch die vorliegende Offenbarung bereitgestellte Verfahren zum Starten eines Prozesses detaillierter beschrieben, indem das Upgraden eines Prozesses als Beispiel genommen wird.
-
2 ist ein Flussdiagramm, das ein Verfahren zum Upgraden eines Prozesses gemäß einem Beispiel der vorliegenden Offenbarung zeigt. Wie in 2 gezeigt ist, umfasst das Verfahren die folgenden Vorgänge.
-
Block 201, drei Systemrufschnittstellen mit einer Verbindungshalteschnittstelle, einer FD-Erhaltungsschnittstelle und einer Freigabeschnittstelle sind in einem Kernel im Voraus hinzugefügt.
-
Beispielsweise kann die Verbindungshalteschnittstelle int holdFd(int fd), die FD-Erhaltungsschnittstelle int getFd(int key) und die Freigabeschnittstelle int putFd(int key) sein.
-
Block 202, bevor ein alter Prozess beendet wird, ruft der alte Prozess die Verbindungshalteschnittstelle auf und sendet zum Kernel einen FD, der jeder Kommunikationsverbindung entspricht, die gehalten werden soll. Für jeden FD erhöht der Kernel eine Referenzzählung eines Dateiobjekts, das dem FD entspricht, weist für den FD einen eindeutigen Index zu, führt eine Hash-Berechnung am Index durch, wählt einen Cachebereich gemäß einem Hash-berechneten Ergebnis, setzt das Dateiobjekt in den Cachebereich und sendet den Index zum alten Prozess zurück. Der alte Prozess setzt eine entsprechende Beziehung zwischen dem Index und Kennungsinformation einer Kommunikationsverbindung, auf die durch den FD hingezeigt wird, in einer vorbestimmten Datei. Dann wird der alte Prozess beendet.
-
Da der Kernel die Referenzzählung des Dateiobjekts, das dem FD entspricht, erhöht, wenn der alte Prozess zerstört wird, wird die durch den Kernel gehaltene Kommunikationsverbindung, auf die durch den FD hingezeigt wird, nicht geschlossen, da die Referenzzählung nicht 0 ist.
-
Block 203, ein neuer Prozess wird gestartet. Der neue Prozess liest die entsprechende Beziehung zwischen dem Index und der Kennungsinformation der Kommunikationsverbindung, auf die durch den FD hingezeigt wird. Für jeden Index ruft der neue Prozess die FD-Erhaltungsschnittstelle auf und sendet den Index zum Kernel. Der Kernel führt eine Hash-Berechnung am Index durch, liest das Dateiobjekt aus dem entsprechenden Cachebereich gemäß dem Hash-berechneten Ergebnis und weist einen neuen FD für das Dateiobjekt zu und sendet den neuen FD zum neuen Prozess zurück.
-
Wenn das Upgraden des Prozesses fehlgeschlagen ist, wird der Prozess in der alten Version wiederhergestellt. Zu diesem Zeitpunkt kann der Prozess der alten Version den neuen FD jeder Kommunikationsverbindung vom Kernel über eine ähnliche Weise wie der neue Prozess in Block 203 erhalten.
-
Das Dateiobjekt ist für den Prozess unsichtbar, aber die Kommunikationsverbindung ist für den Prozess sichtbar.
-
Block 204, der Prozess wird erfolgreich geupgradet. Für jeden Index, der aus der vordefinierten Datei gelesen wurde, ruft der neue Prozess die Freigabeschnittstelle auf und sendet den Index zum Kernel. Der Kernel führt eine Hash-Berechnung am Index durch, liest das Dateiobjekt aus dem entsprechenden Cachebereich gemäß dem Hash-berechneten Ergebnis, führt einen Wiederherstellungsvorgang bei der Referenzzählung jedes Dateiobjekts durch, löscht jedes Dateiobjekt im Cache und gibt jeden Index frei.
-
Hier ist für jedes Dateiobjekt in Block 204 das Ziel der Durchführung eines Wiederherstellungsvorgangs bei der Referenzzählung des Dateiobjekts, die Referenzzählung des Dateiobjekts auf einen Wert wiederherzustellen, bevor der alte Prozess beendet wird.
-
Es sei darauf hingewiesen, dass die Beispiele der vorliegenden Offenbarung auch für eine Neustartprozedur eines Prozesses anwendbar sind. Diesmal ist der Unterschied zwischen der Neustartprozedur eines Prozesses und dem in 1 gezeigten Beispiel, dass der alte Prozess und der neue Prozess nicht mehr zu unterscheiden sind. Blöcke 201 bis 204 sind auf den gleichen Prozess gerichtet und Block 204 ist auf einen Prozess gerichtet, nachdem der Prozess erfolgreich gestartet wird.
-
Nachstehend wird ein anderes Beispiel gegeben, um die Prozedur des Upgradens eines Prozesses der vorliegenden Offenbarung weiter zu beschreiben.
-
3-1 ist ein schematisches Diagramm, das einen Zustand eines alten Prozesses und einen Kernel, bevor der alte Prozess beendet wird, gemäß einem Beispiel der vorliegenden Offenbarung zeigt. Wie in 3-1 gezeigt ist, wird angenommen, dass es zwei wichtige Kommunikationsverbindungen gibt: Kommunikationsverbindungen 1 und 2 müssen vor dem Upgraden eines Prozesses gehalten werden, wobei ein FD, der der Kommunikationsverbindung 1 entspricht, fd1 ist, ein FD, der der Kommunikationsverbindung 2 entspricht, fd2 ist, ein Dateiobjekt im Kernel, das fd1 entspricht, Datei 1 ist, und ein Dateiobjekt im Kernel, das fd2 entspricht, Datei 2 ist. Die Prozedur des Upgradens eines Prozesses ist wie folgt.
-
01: Bevor der Prozess geupgradet wird, ruft der alte Prozess eine Verbindungshalteschnittstelle auf, sendet fd1 und fd2 zum Kernel. Der Kernel addiert 1 zur Referenzzählung der Datei 1, die fd1 entspricht, addiert 1 zur Referenzzählung der Datei 2, die fd2 entspricht, weist einen Indexschlüssel 1 für fd1 zu, weist einen Indexschlüssel 2 für fd2 zu, führt eine Hash-Berechnung am Schlüssel 1 durch, wählt einen Cachebereich 1 gemäß einem berechneten Ergebnis 1 aus, setzt Datei 1 in den Cachebereich 1, führt eine Hash-Berechnung am Schlüssel 2 durch, wählt einen Cachebereich 2 gemäß einem berechneten Ergebnis 2 aus, setzt Datei 2 in den Cachebereich 2 und sendet Schlüssel 1 und Schlüssel 2 zum alten Prozess zurück. Der alte Prozess setzt eine entsprechende Beziehung zwischen Schlüssel 1 und Kommunikationsverbindung 1 und eine entsprechende Beziehung zwischen Schlüssel 2 und Kommunikationsverbindung 2 in eine vordefinierte Datei. Der alte Prozess wird beendet.
-
3-2 ist ein schematisches Diagramm, das einen Zustand des alten Prozesses und den Kernel, nachdem der alte Prozess beendet wird, gemäß einem Beispiel der vorliegenden Offenbarung zeigt. Wie in 3-2 gezeigt ist, werden, nachdem der alte Prozess beendet wird, fd1 und fd2 geschlossen.
-
02: Ein neuer Prozess wird gestartet. Der neue Prozess liest die entsprechende Beziehung zwischen Schlüssel 1 und Kommunikationsverbindung 1 und die entsprechende Beziehung zwischen Schlüssel 2 und Kommunikation 2 aus der vordefinierten Datei, ruft die FD-Erhaltungsschnittstelle auf und sendet Schlüssel 1 und Schlüssel 2 zum Kernel. Der Kernel führt eine Hash-Berechnung am Schlüssel 1 durch, liest Datei 1 aus dem Cachebereich 1 gemäß dem berechneten Ergebnis 1, weist fd1' für Datei 1 zu, führt eine Hash-Berechnung am Schlüssel 2 durch, liest Datei 2 aus dem Cachebereich 2 gemäß dem berechneten Ergebnis 2, weist fd2' für Datei 2 zu und sendet fd1' und fd2' zum neuen Prozess zurück.
-
3-3 ist ein schematisches Diagramm, das einen Zustand des neuen Prozesses und den Kernel, nachdem der neue Prozess gestartet wird, gemäß einem Beispiel der vorliegenden Offenbarung zeigt. Wie in 3-3 gezeigt ist, erhält, wenn der neue Prozess gestartet wird, der neue Prozess fd1' der Kommunikationsverbindung 1 und fd2' der Kommunikationsverbindung 2.
-
03: Der Prozess wird erfolgreich geupgradet. Der neue Prozess ruft die Freigabeschnittstelle auf und sendet Schlüssel 1 und Schlüssel 2 zum Kernel. Der Kernel führt eine Hash-Berechnung am Schlüssel 1 durch, erhält Datei 1 aus dem Cachebereich 1 gemäß dem berechneten Ergebnis 1, führt eine Hash-Berechnung am Schlüssel 2 durch, erhält Datei 2 aus dem Cachebereich 2 gemäß dem berechneten Ergebnis 2, subtrahiert 1 von den Referenzzählungen von Datei 1 und Datei 2, löscht Datei 1 aus dem Cachebereich 1, löscht Datei 2 aus dem Cachebereich 2 und gibt Schlüssel 1 und Schlüssel 2 frei.
-
3-4 ist ein schematisches Diagramm, das einen Zustand des neuen Prozesses und den Kernel, nachdem der Prozess erfolgreich geupgradet wurde, gemäß einem Beispiel der vorliegenden Offenbarung zeigt. Wie in 3-4 gezeigt ist, werden, nachdem der Prozess erfolgreich geupgradet wurde, Schlüssel 1 und Schlüssel 2 freigegeben.
-
4 ist ein schematisches Diagramm, das eine Struktur eines Kernels gemäß einem Beispiel der vorliegenden Offenbarung zeigt. Wie in 4 gezeigt ist, enthält der Kernel hauptsächlich: ein Verbindungshalteverarbeitungsmodul 41, ein FD-Erhaltungsmodul 42. Das Verbindungshalteverarbeitungsmodul 41 ist zum Empfangen, bevor ein erster Prozess beendet wird, einer Verbindungshalteanfrage, die einen FD trägt, der einer Kommunikationsverbindung entspricht, die gehalten werden soll, die vom ersten Prozess gesendet wurde, für den in der Verbindungshalteanfrage getragenen FD, Erhöhen einer Referenzzählung eines Dateiobjekts, das dem FD entspricht, und Setzen des Dateiobjekts in einen Cache und Zurücksenden einer Cachepositionsinformation zum ersten Prozess, so dass der erste Prozess eine entsprechende Beziehung zwischen der Cachepositionsinformation und Kennungsinformation einer Kommunikationsverbindung, auf die durch den FD hingezeigt wird, in einen vordefinierten Speicherbereich setzt.
-
Das FD-Erhaltungsmodul 42 ist zum Empfangen, wenn ein zweiter Prozess gestartet wird, einer FD-Erhaltungsanfrage, die die vom zweiten Prozess gesendete Cachepositionsinformation des Dateiobjekts trägt, und Lesen des Dateiobjekts aus dem Cache, Zuweisen eines neuen FD für das Dateiobjekt und Zurücksenden des neuen FD zum zweiten Prozess.
-
Für das Upgraden eines Prozesses ist der erste Prozess ein Prozess einer alten Version und der zweite Prozess ist ein Prozess einer neuen Version. Für das Neustarten eines Prozesses ist der erste Prozess und der zweite Prozess der gleiche Prozess.
-
Das Verbindungshalteverarbeitungsmodul 41 ist ferner zum, für den in der Verbindungshalteanfrage getragenen FD, Zuweisen eines Index für den FD, Durchführen einer Hash-Berechnung am Index, Auswählen eines Cachebereichs gemäß dem berechneten Ergebnis und Setzen des Dateiobjekts, das dem FD entspricht, in den Cachebereich, und wenn ein Index in der vom zweiten Prozess gesendeten FD-Erhaltungsanfrage empfangen wurde, betreffend den Index, Durchführen einer Hash-Berechnung am Index, Auswählen eines Cachebereichs gemäß dem berechneten Ergebnis und Lesen des Dateiobjekts aus dem Cachebereich.
-
Der Kernel beinhaltet ferner ein Freigabemodul 43 zum Empfangen, nachdem der zweite Prozess erfolgreich gestartet wurde, einer die Cachepositionsinformation tragenden Freigabeanfrage, die vom zweiten Prozess gesendet wurde, und Lesen des Dateiobjekts aus dem Cache, Wiederherstellen der Referenzzählung des Dateiobjekts und Löschen des Dateiobjekts im Cache und Freigeben von jedem Index.
-
Ein Beispiel der vorliegenden Offenbarung umfasst ferner ein maschinenlesbares Speichermedium, wie in 5 gezeigt ist. Das maschinenlesbare Speichermedium ist mit einem Prozessor verbunden und speichert maschinenlesbare Anweisungen, umfassend Beendigungsanweisungen 51 für einen ersten Prozess, die durch den Prozessor ausführbar sind, zum Senden, bevor der erste Prozess beendet wird, eines FD, der einer Kommunikationsverbindung entspricht, die gehalten werden soll, in einer Verbindungshalteanfrage und Senden der Verbindungshalteanfrage zu einem Kernel und Empfangen einer Cachepositionsinformation eines Dateiobjekts, das der Kommunikationsverbindung entspricht, die vom Kernel gesendet wurde, und Setzen einer entsprechenden Beziehung zwischen der Cachepositionsinformation und Kennungsinformation einer Kommunikationsverbindung, auf die durch den FD hingezeigt wird, in einen vordefinierten Speicherbereich. Die maschinenlesbaren Anweisungen umfassen Startanweisungen 52 für einen zweiten Prozess, die durch den Prozessor ausführbar sind, zum Lesen, wenn der zweite Prozess gestartet wurde, der entsprechenden Beziehung zwischen der Cachepositionsinformation und Kennungsinformation der Kommunikationsverbindung, auf die durch den FD hingezeigt wird, aus dem vordefinierten Speicherbereich und Senden der Cachepositionsinformation zum Kernel, um einen neuen FD für die Kommunikationsverbindung zu erhalten.
-
Was hierin beschrieben und veranschaulicht wurde, ist ein Beispiel der Offenbarung zusammen mit einigen Variationen davon. Die Begriffe, Beschreibungen und Figuren, die hierin verwendet wurden, sind nur zur Veranschaulichung dargelegt und sind nicht als Einschränkungen gemeint. Viele Variationen sind im Wesen und Umfang der Offenbarung möglich, die durch die folgenden Ansprüche – und ihre Äquivalente – definiert werden soll, in denen alle Begriffe in ihrem breitesten vernünftigen Sinn gemeint sind, sofern nicht anders angegeben.
-
Die obigen Beispiele können durch Hardware, Software oder Firmware oder eine Kombination davon implementiert werden. Zum Beispiel können die verschiedenen Verfahren, Prozesse und Funktionsmodule, die hierin beschrieben sind, durch einen Prozessor implementiert werden (der Begriff Prozessor ist breit zu interpretieren, so dass eine CPU, Verarbeitungseinheit, ASIC, Logikeinheit, ein programmierbares Gate Array usw. umfasst wird). Die Prozesse, Verfahren und Funktionsmodule können alle von einem einzigen Prozessor ausgeführt werden oder zwischen mehreren Prozessoren aufgeteilt sein; eine Bezugnahme in dieser Offenbarung oder den Ansprüchen auf einen 'Prozessor' sollte somit als 'einen oder mehrere Prozessoren' bedeutend interpretiert werden. Die Prozesse, Verfahren und Funktionsmodule können als maschinenlesbare Anweisungen implementiert werden, die von einem oder mehreren Prozessoren, Hardware-Logikschaltkreis von einem oder mehreren Prozessoren oder einer Kombination davon ausführbar sind. Ferner kann die hierin enthaltene Offenbarung in Form eines Computersoftwareprodukts implementiert werden. Das Computersoftwareprodukt ist in einem nicht flüchtigen Speichermedium gespeichert und umfasst eine Vielzahl von Anweisungen, um zu bewirken, dass ein Computergerät (das ein Personalcomputer, ein Server oder ein Netzwerkgerät, wie ein Router, Switch, Zugangspunkt usw. sein kann) das in den Beispielen der vorliegenden Offenbarung rezitierte Verfahren implementiert.
-
Die Figuren sind nur Darstellungen eines Beispiels, wobei die in den Figuren gezeigten Module oder Prozeduren für die Implementierung der vorliegenden Offenbarung nicht notwendigerweise wesentlich sind. Die Module in den zuvor genannten Beispielen können zu einem Modul kombiniert oder weiter auf eine Vielzahl von Untermodulen aufgeteilt werden.