Detaillierte Erklärung von Cgroup, dem Kernprinzip von Docker

Detaillierte Erklärung von Cgroup, dem Kernprinzip von Docker

Das leistungsstarke Tool cgroup im Kernel kann nicht nur die durch NameSpace isolierten Ressourcen begrenzen, sondern auch Gewichte für Ressourcen festlegen, die Nutzung berechnen usw.

Was ist cgroup

Der vollständige Name der Kontrollgruppe lautet Kontrollgruppen

Kontrollgruppen: Kontrollgruppen sind in den Linux-Kernel integriert. Sie fassen Prozesse (Aufgaben) in Gruppen zusammen, legen Berechtigungen für Gruppen fest und steuern Prozesse. Es kann als das Konzept von Benutzern und Gruppen verstanden werden. Ein Benutzer erbt die Berechtigungen der Gruppe, zu der er gehört.

cgroups ist ein Mechanismus im Linux-Kernel. Dieser Mechanismus kann eine Reihe von Aufgaben und Unteraufgaben entsprechend bestimmten Verhaltensweisen integrieren oder trennen und ein Framework für eine einheitliche Ressourcensteuerung entsprechend den verschiedenen Ebenen der Ressourcenaufteilung implementieren. cgroup kann die vom Prozess benötigten physischen Ressourcen, einschließlich CPU, Speicher und IO, steuern, begrenzen und isolieren und bietet so die grundlegendste Garantie für die Containervirtualisierung. Es ist ein Verwaltungstool zum Erstellen einer Reihe von Docker-Virtualisierungen

Merkmale der Entwicklung von Cgroups

API: Implementierungsmanagement

Cgroup-Management kann Threads verwalten

Alle Thread-Funktionen werden einheitlich vom Subsystem verwaltet

Der untergeordnete Prozess und der übergeordnete Prozess befinden sich in derselben Kontrollgruppe, Sie müssen daher nur den übergeordneten Prozess steuern.

Die Rolle der cgroup

Der cgroup-Kernel verwaltet Prozessressourcen über Hooks und bietet eine einheitliche Schnittstelle für den Übergang von der Ressourcensteuerung eines einzelnen Prozesses zu virtuellen Karten auf Betriebssystemebene.

Cgroup bietet vier Funktionen:

  1. Ressourcenkontrolle: cgroup begrenzt die Gesamtmenge der Ressourcen durch Prozessgruppen. Wenn ein Programm beispielsweise Speicher verwendet, müssen Sie eine Grenze dafür festlegen, wie viel Speicher das Programm auf dem Host verwenden kann.
  2. Prioritätszuweisung: Verwenden Sie den Hardware-Gewichtswert. Wenn zwei Programme den Prozess zum Lesen der CPU benötigen, welches zuerst und welches später kommt, wird die Priorität verwendet, um zu steuern
  3. Ressourcenstatistiken: Sie können die Nutzung von Hardwareressourcen wie CPU, Speicher usw. und deren Nutzungsdauer zählen.
  4. Prozesskontrolle: Sie können die Prozessgruppe anhalten/fortsetzen.

Glossar

  • Aufgabe: stellt einen Prozess im System dar – PID
  • cgroup: Die Ressourcensteuerung wird in Einheiten von Kontrollgruppen (cgroups) implementiert. Jede cgroup enthält Aufgaben. Es kann mehrere cgroups geben, die unterschiedliche Inhalte einschränken können. Die Gruppennamen dürfen nicht identisch sein.
  • Subsystem: Subsystem. Ressourcenplanungs-Controller. Spezifische Kontrollinhalte. Beispielsweise steuert das CPU-Subsystem die CPU-Zeitzuweisung, das Speichersubsystem kann die Speichernutzung innerhalb einer Kontrollgruppe steuern, das Festplattensubsystem kann das Lesen und Schreiben der Festplatte steuern und so weiter.
  • Hierarchie: Ein hierarchischer Baum besteht aus einer Reihe von Kontrollgruppen. Ein Hierarchiebaum enthält mehrere Kontrollgruppen. Jede Hierarchie plant Ressourcen über gebundene Subsysteme. Sie kann 0 oder mehr untergeordnete Knoten enthalten. Untergeordnete Knoten erben die Eigenschaften ihrer übergeordneten Knoten. Das gesamte System kann mehrere Hierarchien haben. Es ist ein logisches Konzept.

Beziehung: Eine Kontrollgruppe kann mehrere Aufgaben haben, ein Subsystem entspricht der Art der Steuerung von Kontrollgruppenbeschränkungen, es können mehrere Kontrollgruppen in einer Hierarchie vorhanden sein und ein System kann mehrere Hierarchien haben.

Vier Regeln des Hierarchiebaums

Der herkömmliche Prozessstart verwendet init als Stammknoten, auch übergeordneter Prozess genannt, der untergeordnete Prozesse als untergeordnete Knoten erstellt, und jeder untergeordnete Knoten kann auch neue untergeordnete Knoten erstellen, wodurch eine Baumstruktur entsteht. Die Struktur der cgroup ist ähnlich. Untergeordnete Knoten erben die Eigenschaften ihrer übergeordneten Knoten. Der größte Unterschied zwischen ihnen besteht darin, dass der hierarchische Baum, der aus der Cgroup des Systems besteht, mehrere Existenzen zulässt. Wenn das Prozessmodell ein Baum ist, der mit init als Stammknoten gebildet wird, besteht das Cgroup-Modell aus mehreren hierarchischen Bäumen.

Wenn nur ein hierarchischer Baum vorhanden ist, unterliegen alle Aufgaben denselben Beschränkungen eines Subsystems. Dies führt zu Problemen bei Aufgaben, die solche Beschränkungen nicht benötigen.

1. Ein oder mehrere Subsysteme können an dieselbe Hierarchie angehängt werden

Sie können sehen, dass es in einem hierarchischen Baum eine Cgroup-Gruppe namens cpu_mem_cg und zwei untergeordnete Knoten cg1 und cg2 gibt. Wie in der Abbildung gezeigt, bedeutet dies, dass in der Gruppe cpu_mem_cg zwei Subsysteme, CPU und Mem-Speicher, angeschlossen sind, um die Hardwareressourcennutzung von CPU und Speicher von cg1 und cg2 gleichzeitig zu steuern.

2. Ein Subsystem kann an mehrere Hierarchien angehängt werden, jedoch nur an Hierarchien, die keine Subsysteme haben.

Wie in der Abbildung gezeigt, wird das CPU-Subsystem zuerst an den Hierarchiebaum A angehängt und kann nicht gleichzeitig an den Hierarchiebaum B angehängt werden, da B bereits ein Mem-Subsystem hat. Wenn weder B noch A über Subsysteme verfügen, kann das CPU-Subsystem gleichzeitig an die Hierarchiebäume A und B angehängt werden.

Das bedeutet, dass, wenn in mehreren hierarchischen Bäumen keine Subsysteme vorhanden sind, diesen hierarchischen Bäumen nacheinander ein CPU-Subsystem hinzugefügt werden kann.

3. Ein Prozess (Task) kann nicht zu verschiedenen Kontrollgruppen in derselben Hierarchie gehören

Jedes Mal, wenn das System eine neue Hierarchie erstellt, wird die Standard-Cgroup, die die Initialisierung der neuen Hierarchie darstellt, als Stamm-Cgroup bezeichnet. Für Ihre eigene erfolgreiche Hierarchie kann eine Aufgabe nur in einer Cgroup dieser Hierarchie vorhanden sein, was bedeutet, dass es in einer Hierarchie nicht zwei identische Aufgaben geben kann, sie jedoch in anderen Cgroups in verschiedenen Hierarchien vorhanden sein können.

Wenn Sie eine Aufgabe in einer Kontrollgruppe mit hierarchischem Baum zu einer anderen Kontrollgruppe im hierarchischen Baum hinzufügen möchten, wird sie aus der Kontrollgruppe entfernt, in der sich die vorherige Aufgabe befindet.

Wie im obigen Beispiel gezeigt:

httpd wurde zu cg1 in Hierarchie A hinzugefügt und seine PID ist 58950. Zu diesem Zeitpunkt kann dieser httpd-Prozess nicht in cg2 eingefügt werden, da sonst der httpd-Prozess in cg1 gelöscht wird. Er kann jedoch in die Kontrollgruppe cg3 in Hierarchie B eingefügt werden.

Tatsächlich dient es dazu, Prozesskonflikte zu vermeiden. Beispielsweise gibt es in cg1 im hierarchischen Baum A einen httpd-Prozess. Zu diesem Zeitpunkt beträgt die CPU-Auslastungsgrenze für cg1 30 % und die CPU-Auslastungsgrenze für cg2 50 %. Wenn der httpd-Prozess zu cg2 hinzugefügt wird, tritt ein Konflikt bei der CPU-Auslastungsgrenze von httpd auf.

4. Der neu gegabelte untergeordnete Prozess befindet sich im Anfangszustand in derselben Kontrollgruppe wie der übergeordnete Prozess

Ein neuer untergeordneter Prozess (child_task), der von der Prozessaufgabe geöffnet wird, befindet sich standardmäßig in derselben Kontrollgruppe wie die ursprüngliche Aufgabe, die child_task kann jedoch in andere Kontrollgruppen im Hierarchiebaum verschoben werden.

Wenn die Fork gerade abgeschlossen ist, sind der übergeordnete Prozess und der untergeordnete Prozess völlig unabhängig

Wie in der Abbildung gezeigt, wird beim Aufrufen des Prozesses httpd58950 ein weiterer untergeordneter Prozess httpd58951 ausgegeben. Zu diesem Zeitpunkt befinden sich httpd58951 und httpd58950 standardmäßig beide in cg1, und ihre Beziehung ist ebenfalls ein übergeordneter/untergeordneter Prozess. httpd58951 kann zu cg2 verschoben werden, und ihre Beziehung wird zu diesem Zeitpunkt geändert, und sie werden beide zu unabhängigen Prozessen.

Teilsystem

Was genau kann ein Subsystem steuern?

Überprüfen Sie dies wie folgt

[root@localhost ~]# yum -y installiere libcgroup-tools
Nach der Installation dieses Tools können Sie es mit dem Befehl cgroup anzeigen

Listen Sie alle Cgroup-Kontrollgruppen im System auf

[root@localhost ~]# lscgroup
net_cls,net_prio:/
Gefrierschrank:/
riesigeslb:/
CPU, CPU-Zugriff:/
cpu,cpuacct:/Maschine.Slice
cpu,cpuacct:/Benutzer.slice
cpu,cpuacct:/system.slice
cpu,cpuacct:/system.slice/netzwerk.dienst
cpu,cpuacct:/system.slice/docker.service
...

Zeigen Sie die Hardware an, die das Subsystem steuern kann

[root@localhost ~]# lssubsys -a
CPU-Satz
CPU, CPU-Zugriff
Erinnerung
Geräte
Gefrierschrank
net_cls,net_prio
Abonnieren
Leistungsereignis
thomas_s
pids

Wie oben zu sehen ist, gibt es ein entsprechendes Verzeichnis, /sys/fs/cgroup

[root@localhost ~]# ll /sys/fs/cgroup/
gesamt 0
drwxr-xr-x. 5 root root 0 25. März 04:50 blkio
lrwxrwxrwx. 1 root root 11. März 25 04:50 cpu -> cpu,cpuacct
lrwxrwxrwx. 1 root root 11. März 25 04:50 cpuacct -> cpu,cpuacct
drwxr-xr-x. 5 root root 0 25. März 04:50 cpu,cpuacct
drwxr-xr-x. 2 root root 0 25. März 04:50 cpuset
drwxr-xr-x. 5 root root 0 25. März 04:50 Geräte
drwxr-xr-x. 2 root root 0 25. März 04:50 Gefrierschrank
drwxr-xr-x. 2 root root 0 25. März 04:50 hugetlb
drwxr-xr-x. 5 root root 0 25. März 04:50 Speicher
lrwxrwxrwx. 1 root root 16. März 25 04:50 net_cls -> net_cls,net_prio
drwxr-xr-x. 2 root root 0 25. März 04:50 net_cls,net_prio
lrwxrwxrwx. 1 root root 16. März 25 04:50 net_prio -> net_cls,net_prio
drwxr-xr-x. 2 root root 0 25. März 04:50 perf_event
drwxr-xr-x. 5 root root 0 25. März 04:50 pids
drwxr-xr-x. 5 root root 0 25. März 04:50 systemd

Sie können sehen, dass der Inhalt des Verzeichnisses mehr ist als das, was der Befehl anzeigt, da es mehrere Softlink-Dateien gibt

# Die folgenden drei gehören alle zu cpu,cpuacct
CPU -> CPU, CPU-Zugriff
cpuacct -> CPU, cpuacct
CPU, CPU-Zugriff
# Die folgenden drei gehören alle zu net_cls, net_prio
net_cls -> net_cls,net_prio
net_prio -> net_cls,net_prio
net_cls,net_prio

Was stellen die Inhalte dar, die das Subsystem steuern kann?

Seriennummer Eingeschränkter Inhalt Bedeutung
1 blkio (Einschränkungen bei der Eingabe und Ausgabe von Blockgeräten) Optische Datenträger, Solid-State-Datenträger, USB …
2 CPU Sie können die CPU-Nutzung der Aufgabe regeln.
3 CPU-Zugriff Erstellen Sie automatisch einen Bericht über die CPU-Ressourcennutzung jeder Aufgabe.
4 CPU-Set (für physische Maschinen mit mehreren Prozessoren) Weisen Sie der Aufgabe eine separate CPU zu.
5 Gerät (Gerät bezieht sich auf Tastatur, Maus ...) Deaktivieren und aktivieren Sie den Zugriff der Aufgabe auf das Gerät.
6 Gefrierschrank Steuern Sie die Unterbrechung und Wiederaufnahme von Aufgaben. Wenn Sie einer Aufgabe beispielsweise nicht erlauben, die CPU zu verwenden, wird dies als Unterbrechung bezeichnet.
7 Erinnerung Kontrollieren Sie das Speichernutzungslimit von Aufgaben und erstellen Sie automatisch Berichte zur Speicherressourcennutzung
8 Leistungsereignis Für die Aufgabe kann ein einheitlicher Leistungstest durchgeführt werden, beispielsweise die Ermittlung der CPU-Leistung von Linux und der Lese- und Schreibeffizienz der Festplatte.
9 net_cls Es wird in Docker nicht direkt verwendet, ermöglicht dem Linux-Verkehrscontroller aber, Pakete zu identifizieren, die aus einer bestimmten Kontrollgruppe stammen, indem Netzwerkpakete mit einer Klassenkennung (Classid) markiert werden.

Hinweis: Bisher gibt es kein Tool, mit dem man die Größe der Containerfestplatte begrenzen kann. Man kann lediglich die Lese- und Schreibfrequenz der Festplatte begrenzen.

So funktionieren Kontrollgruppen

Überprüfen Sie die Aufgabendatei in der CPU-Steuerung der Kontrollgruppe, in der die Steuerung der CPU der Prozesse in der Datei gespeichert ist. Wenn Sie einen Prozess zur Steuerung der CPU hinzufügen möchten, fügen Sie einfach die PID des Prozesses zur Aufgabendatei hinzu, einschließlich anderer Steuerungen für Hardwareressourcen.

[root@localhost ~]# cat /sys/fs/cgroup/cpu/tasks 
1
2
4
5
6
7
8
9
...
68469
68508
68526
68567

In einer Produktionsumgebung wird es automatisch erhöht, da es sich im Kernel befindet.

Das eigentliche Funktionsprinzip von cgroup ist Hook. Die Implementierung von cgroup besteht im Wesentlichen darin, den Systemprozess anzuhängen. Wenn der Task-Prozess ausgeführt wird und eine bestimmte Ressource entworfen wird, wird das an den Hook angeschlossene Subsystem ausgelöst, um eine Ressourcenerkennung durchzuführen. Schließlich wird die entsprechende Technologie verwendet, um Ressourcen zu begrenzen und Prioritäten entsprechend unterschiedlicher Ressourcenkategorien zuzuweisen.

Wie ist der Hook implementiert?

Einfach ausgedrückt legt die Datenstruktur zum Verwalten von Task-Prozessen in Linux für jede Aufgabe in der Cgroup ein Schlüsselwort fest und verweist mit dem Schlüsselwort auf den Hook, der als Zeiger bezeichnet wird.

Wenn einer Aufgabe nur eine Zeigerstruktur entspricht, kann eine Zeigerstruktur von mehreren Aufgaben verwendet werden.

Sobald ein Zeiger den Inhalt der eindeutigen Zeigerdaten liest, wird die Aufgabe ausgelöst und die Ressourcensteuerung kann durchgeführt werden.

Bei der tatsächlichen Verwendung müssen Benutzer mount verwenden, um die cgroup-Kontrollgruppe zu mounten

Im Verzeichnis können Sie sehen, dass beispielsweise das httpd-Programm eine PID-Nummer von 69060 hat

[root@localhost ~]# yum -y installiere httpd^C
[root@localhost ~]# systemctl start httpd^C
[root@localhost ~]# netstat -anput | grep 80
tcp6 0 0 :::80 :::* LISTEN 69060/httpd

Überprüfen Sie die Mounts-Datei in ihrem PID-Verzeichnis, das eine große Anzahl von Cgroup-Mounts enthält.

Sie können das Verzeichnis hinter jeder C-Gruppe sehen, z. B. /sys/fs/cgroup/cpu,cpuacct , was bedeutet, dass der httpd-Prozess durch die CPU-Auslastung eingeschränkt ist. In der Datei gibt es viele ähnliche Mount-Elemente, einschließlich Hardware-Ressourcensteuerung wie blkio/perf_event/memory .

[root@localhost ~]# cat /proc/69060/mounts
rootfs / rootfs rw 0 0
/dev/mapper/centos-root / xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0
devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=914476k,nr_inodes=228619,mode=755 0 0
tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0
devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
mqueue /dev/mqueue mqueue rw,seclabel,relatime 0 0
hugetlbfs /dev/hugepages hugetlbfs rw,seclabel,relatime 0 0
...
cgroup /sys/fs/cgroup/systemd cgroup rw,seclabel,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,seclabel,nosuid,nodev,noexec,relatime,net_prio,net_cls 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,seclabel,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,seclabel,nosuid,nodev,noexec,relatime,hugetlb 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,seclabel,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,seclabel,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/Geräte cgroup rw,seclabel,nosuid,nodev,noexec,relatime,Geräte 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,seclabel,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,seclabel,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/pids cgroup rw,seclabel,nosuid,nodev,noexec,relatime,pids 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,seclabel,nosuid,nodev,noexec,relatime,perf_event 0 0
...

So wird cgroup durch Mount gesteuert. Alle Programme sind so. Nachdem alle Systeme auf dem Subsystem die Dateien gemountet haben, können sie cgroup und Hierarchiebaum zur Verwaltung wie das Betriebssystem betreiben, einschließlich Berechtigungsverwaltung und Unterdateisysteme. Außer dem cgroup-Dateisystem bietet der Kernel keine weiteren Operationen für den cgroup-Zugriff. Wenn Sie cgroup betreiben möchten, müssen Sie mount verwenden, um an einer cgroup-Kontrollgruppe festzuhalten.

Ressourcenkontrollvorgänge

Wir müssen wissen, wie wir jede Hardwareressource steuern.

wie:

Die spezifische Bedeutung jedes Elements im CPU-Verzeichnis der Cgroup-Gruppe sind die Details der spezifischen Steuerung der CPU

[root@localhost ~]# cd /sys/fs/cgroup/cpu
[root@localhost cpu]# ls
cgroup.clone_children cpuacct.stat cpu.cfs_quota_us cpu.stat system.slice
cgroup.event_control cpuacct.usage cpu.rt_period_us machine.slice Aufgaben
cgroup.procs cpuacct.usage_percpu cpu.rt_runtime_us Benachrichtigung bei Freigabe Benutzer.slice
cgroup.sane_behavior cpu.cfs_perioden_us cpu.shares release_agent

Diese spezifischen Verwendungsmethoden werden im nächsten Artikel einzeln erläutert

Einschränkungen der Docker-Befehlszeile

-c/--cpu-shares: CPU-Priorität begrenzen -m/--memory: Speichernutzung begrenzen --memory-swap: Größe von Speicher + Swap begrenzen --blkil-weight
Bit/s/IOP
--device-read-bps
--device-write-bps
--device-read-iops
--device-write-iops

Spezifische Verwendung: CPU, Speicher, blkio

Die cgroup-Verzeichnisstruktur ist wie folgt

/sys/fs/cgroup speichert die Hardware-Ressourcensteuerung aller Prozesse

Die standardmäßigen Nicht-Docker-Prozesssteuerungen für bestimmte Hardwareressourcen werden im Verzeichnis /sys/fs/cgroup/{cpu,memory,blkio...}/ gespeichert. Die Docker-Prozess-ID befindet sich nicht in diesen Verzeichnissen

/sys/fs/cgroup/cpu/docker/ speichert die Docker-Prozesssteuerung im Host.

Die Steuerung des von Docker generierten Containers wird im Verzeichnis /sys/fs/cgroup/cpu/docker/容器id/ gespeichert

Dies ist das Ende dieses Artikels mit der detaillierten Erklärung von Cgroup, dem Kernprinzip von Docker. Weitere Informationen zum Kernprinzip von Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Anwendung der Docker-Basistechnologie Namespace Cgroup
  • Detaillierte Erläuterung der Docker-Cgroup-Ressourcenüberwachung
  • Detaillierte Erklärung zur Verwendung von cgroups zur Begrenzung der Ressourcennutzung in Docker-Containern
  • Dieser Artikel hilft Ihnen, die spezifische Verwendung von cgroup in Docker gründlich zu verstehen

<<:  Beispiel für die Verwendung von UserMap in IMG

>>:  So verwenden Sie CSS, um mehrere Bilder horizontal in der Mitte anzuzeigen

Artikel empfehlen

JavaScript implementiert Konstellationsabfragefunktion mit detailliertem Code

Inhaltsverzeichnis 1. Titel 2. Code 3. Ergebnisse...

React tsx generiert einen zufälligen Bestätigungscode

React tsx generiert einen zufälligen Bestätigungs...

Ein zeitaufwändiger Fehlerbehebungsprozess für einen Docker-Fehler

Inhaltsverzeichnis Herkunft Umweltinformationen F...

Analyse des Quellcodes des Nginx-Speicherpools

Inhaltsverzeichnis Speicherpoolübersicht 1. Nginx...

Lassen Sie uns im Detail darüber sprechen, wie Browser Abschlüsse betrachten

Inhaltsverzeichnis Vorwort Einführung in Closures...

Mysql-Optimierungstechniken zum Abfragen von Daten basierend auf der Zeit

Um beispielsweise die gestern neu registrierten B...

N Möglichkeiten, adaptive Teiler geschickt mit CSS zu implementieren

Trennlinien sind eine gängige Gestaltungsart auf ...

Einführung in den Prozess zum Erstellen einer TCP-Verbindung im Linux-System

Inhaltsverzeichnis Schritte zum Erstellen von TCP...

So bedienen Sie das Kontrollkästchen auf einer HTML-Seite

Kontrollkästchen sind auf Webseiten sehr verbreit...

Natives JS-objektorientiertes Tippspiel

In diesem Artikel wird der spezifische Code des o...