


Der Vater von Linux konnte endlich überzeugt werden: Die 30 Jahre alte C-Sprache des Linux-Kernels wird auf C11 aktualisiert
Es gibt kürzlich Neuigkeiten, dass die verwendete Version des C-Sprach-Linux-Kernels von 1989 endlich ein großes Upgrade erhalten hat. Das Tempo der modernen Technologie ist unaufhaltsam. Heute hat die Linux-Open-Source-Community einen überzeugenden Plan angekündigt, die C-Sprachversion des Kernels auf den C11-Standard zu aktualisieren. Es wird erwartet, dass diese große Reform nach der Linux-Version 5.18, also im kommenden Mai, in Kraft treten wird. Dieser wichtige Schritt wird dem Linux-Kernel unbegrenzte potenzielle Möglichkeiten eröffnen und ihm helfen, sich besser an die Anforderungen moderner Technologien anzupassen.
Diese Entscheidung kam plötzlich. Es dauerte nur eine Woche von der Einleitung der Frage bis zur offiziellen Stellungnahme. Es ist nicht einfach, Linus Torvalds, den hartnäckigen Vater von Linux, zu überzeugen. Der Grund dafür scheint ein wenig zufällig zu sein.
Das Problem entstand letzte Woche in einer Linux-Community-Diskussion.
Ein Doktorand namens Jakob Koschel entdeckte ein solches Problem, als er sich mit der Verhinderung spekulativer Ausführungsschwachstellen im Zusammenhang mit Kernel-Linked-List-Primitiven befasste.
Der Linux-Kernel nutzt in großem Umfang doppelt verknüpfte Listen, die durch struct list_head: definiert sind
struct list_head {
struct list_head *next, *prev;
};
Darüber hinaus bietet der Kernel auch eine große Anzahl von Funktionen und Makros, mit denen verknüpfte Listen durchlaufen und betrieben werden können. list_for_each_entry() ist eines davon, ein als Kontrollstruktur getarntes Makro. Das Problem liegt in diesem Makro. Gehen Sie davon aus, dass der Kernel die folgende Struktur enthält:
struct foo { int fooness; struct list_head list; };
list können verwendet werden, um eine doppelt verknüpfte Liste der foo-Struktur zu erstellen. Angenommen, es gibt eine Struktur namens foo_list, die als Kopf einer solchen verknüpften Liste deklariert ist. Diese verknüpfte Liste kann mit dem folgenden Code durchlaufen werden:
struct foo *iterator; list_for_each_entry(iterator, &foo_list, list) { do_something_with(iterator); } /* Should not use iterator here */
Das Listenargument teilt dem Makro den Namen der list_head-Struktur innerhalb der foo-Struktur mit. Diese Schleife wird einmal für jedes Element in der Liste ausgeführt, wobei der Iterator auf dieses Element zeigt. Dies führte zu einem Fehler im USB-Subsystem: Der an das Makro übergebene Iterator konnte nach dem Beenden des Makros weiterhin verwendet werden.
Das ist eine gefährliche Sache, deshalb hat Koschel einen Fix eingereicht, der den Fehler behebt, indem er die Verwendung des Iterators nach der Schleife stoppt.

Aber Linus Torvalds selbst gefällt dieser Patch nicht besonders und sieht keinen Zusammenhang mit der Sicherheitslücke bei der spekulativen Ausführung. Nachdem Koschel es ausführlich erklärt hatte, gab Linus zu, dass es sich lediglich um einen häufigen Fehler handele.
Allerdings waren die Dinge nicht so einfach und Linus erkannte bald die wahre Ursache: Der Iterator, der an das Durchlaufmakro für verknüpfte Listen übergeben wird, muss in einem Bereich außerhalb der Schleife selbst deklariert werden. Dieser nicht prädiktive Fehler tritt auf, weil es in C89 keine Funktion zum Deklarieren von Variablen in Schleifen gibt.
Makros wie list_for_each_entry() lassen im Grunde immer den letzten HEAD-Eintrag außerhalb der Schleife verloren, einfach weil wir keine Iteratorvariablen in der Schleife selbst deklarieren können.
Wenn Sie ein Iteratorlisten-Traversal-Makro schreiben könnten, das sich selbst deklarieren könnte, wäre der Iterator außerhalb der Schleife nicht sichtbar und es würden keine derartigen Probleme auftreten. Da der Kernel jedoch am C89-Standard festhält, können Variablen nicht innerhalb einer Schleife deklariert werden.
Linus hat beschlossen, lasst uns ein Upgrade durchführen. Vielleicht ist es an der Zeit, auf den C99-Standard umzusteigen. Es ist zwar ebenfalls über 20 Jahre alt, aber mindestens neuer als C89 und ermöglicht die Deklaration von Variablen innerhalb einer Schleife.
Da C89 so alt ist, warum hat es sich nach so vielen Jahren nicht geändert? Linus sagte, das liege daran, dass wir in einigen alten GCC-Compiler-Versionen auf einige seltsame Probleme gestoßen seien und nicht beiläufig aktualisiert werden könnten.
Jetzt hat der Linux-Kernel jedoch die Mindestanforderung für gcc auf Version 5.1 angehoben, sodass diese seltsamen Fehler in der Vergangenheit verschwunden sein sollten.
Arnd Bergmann, ein weiterer Kernentwickler, glaubt, dass wir definitiv auf C11 oder sogar höher upgraden können. Durch ein Upgrade auf C17 oder C2x wird jedoch die Unterstützung für gcc-5/6/7 unterbrochen, sodass ein Upgrade auf C11 einfacher zu erreichen ist.
Am Ende war Torvalds mit der Idee einverstanden: „Okay, erinnern Sie mich, versuchen wir es früh im 5.18-Merge-Fenster.“ Der Wechsel zu C11 könnte zu unerwarteten Fehlern führen, aber wenn alles gut geht, wird das nächste Linux The Die Kernel-Version wird offiziell auf C11 umgestellt.
Das obige ist der detaillierte Inhalt vonDer Vater von Linux konnte endlich überzeugt werden: Die 30 Jahre alte C-Sprache des Linux-Kernels wird auf C11 aktualisiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die wichtigsten Unterschiede zwischen CentOS und Ubuntu sind: Ursprung (CentOS stammt von Red Hat, für Unternehmen; Ubuntu stammt aus Debian, für Einzelpersonen), Packungsmanagement (CentOS verwendet yum, konzentriert sich auf Stabilität; Ubuntu verwendet apt, für hohe Aktualisierungsfrequenz), Support Cycle (Centos) (CENTOS bieten 10 Jahre. Tutorials und Dokumente), Verwendungen (CentOS ist auf Server voreingenommen, Ubuntu ist für Server und Desktops geeignet). Weitere Unterschiede sind die Einfachheit der Installation (CentOS ist dünn)

CentOS wird 2024 geschlossen, da seine stromaufwärts gelegene Verteilung RHEL 8 geschlossen wurde. Diese Abschaltung wirkt sich auf das CentOS 8 -System aus und verhindert, dass es weiterhin Aktualisierungen erhalten. Benutzer sollten eine Migration planen, und empfohlene Optionen umfassen CentOS Stream, Almalinux und Rocky Linux, um das System sicher und stabil zu halten.

Docker verwendet Linux -Kernel -Funktionen, um eine effiziente und isolierte Anwendungsumgebung zu bieten. Sein Arbeitsprinzip lautet wie folgt: 1. Der Spiegel wird als schreibgeschützte Vorlage verwendet, die alles enthält, was Sie für die Ausführung der Anwendung benötigen. 2. Das Union File System (UnionFS) stapelt mehrere Dateisysteme, speichert nur die Unterschiede, speichert Platz und beschleunigt. 3. Der Daemon verwaltet die Spiegel und Container, und der Kunde verwendet sie für die Interaktion. 4. Namespaces und CGroups implementieren Container -Isolation und Ressourcenbeschränkungen; 5. Mehrere Netzwerkmodi unterstützen die Containerverbindung. Nur wenn Sie diese Kernkonzepte verstehen, können Sie Docker besser nutzen.

Wie benutze ich Docker Desktop? Docker Desktop ist ein Werkzeug zum Ausführen von Docker -Containern auf lokalen Maschinen. Zu den zu verwendenden Schritten gehören: 1.. Docker Desktop installieren; 2. Start Docker Desktop; 3.. Erstellen Sie das Docker -Bild (mit Dockerfile); 4. Build Docker Image (mit Docker Build); 5. Docker -Container ausführen (mit Docker Run).

CentOS -Installationsschritte: Laden Sie das ISO -Bild herunter und verbrennen Sie bootfähige Medien. Starten und wählen Sie die Installationsquelle; Wählen Sie das Layout der Sprache und Tastatur aus. Konfigurieren Sie das Netzwerk; Partition die Festplatte; Setzen Sie die Systemuhr; Erstellen Sie den Root -Benutzer; Wählen Sie das Softwarepaket aus; Starten Sie die Installation; Starten Sie nach Abschluss der Installation von der Festplatte neu und starten Sie von der Festplatte.

Backup- und Wiederherstellungsrichtlinie von GitLab im Rahmen von CentOS -System Um die Datensicherheit und Wiederherstellung der Daten zu gewährleisten, bietet GitLab on CentOS eine Vielzahl von Sicherungsmethoden. In diesem Artikel werden mehrere gängige Sicherungsmethoden, Konfigurationsparameter und Wiederherstellungsprozesse im Detail eingeführt, um eine vollständige GitLab -Sicherungs- und Wiederherstellungsstrategie aufzubauen. 1. Manuell Backup Verwenden Sie den GitLab-RakegitLab: Backup: Befehl erstellen, um die manuelle Sicherung auszuführen. Dieser Befehl unterstützt wichtige Informationen wie GitLab Repository, Datenbank, Benutzer, Benutzergruppen, Schlüssel und Berechtigungen. Die Standardsicherungsdatei wird im Verzeichnis/var/opt/gitlab/backups gespeichert. Sie können /etc /gitlab ändern

CentOS -Festplattenhalterung ist in die folgenden Schritte unterteilt: Bestimmen Sie den Namen der Festplattengeräte (/dev/sdx); Erstellen Sie einen Mountspunkt (es wird empfohlen, /mnt /newDisk zu verwenden). Führen Sie den Befehl montage (mont /dev /sdx1 /mnt /newdisk) aus; Bearbeiten Sie die Datei /etc /fstab, um eine permanente Konfiguration des Montings hinzuzufügen. Verwenden Sie den Befehl uMount, um das Gerät zu deinstallieren, um sicherzustellen, dass kein Prozess das Gerät verwendet.

Nachdem CentOS gestoppt wurde, können Benutzer die folgenden Maßnahmen ergreifen, um sich damit zu befassen: Wählen Sie eine kompatible Verteilung aus: wie Almalinux, Rocky Linux und CentOS Stream. Migrieren Sie auf kommerzielle Verteilungen: wie Red Hat Enterprise Linux, Oracle Linux. Upgrade auf CentOS 9 Stream: Rolling Distribution und bietet die neueste Technologie. Wählen Sie andere Linux -Verteilungen aus: wie Ubuntu, Debian. Bewerten Sie andere Optionen wie Container, virtuelle Maschinen oder Cloud -Plattformen.
