Heim System-Tutorial LINUX Der Vater von Linux konnte endlich überzeugt werden: Die 30 Jahre alte C-Sprache des Linux-Kernels wird auf C11 aktualisiert

Der Vater von Linux konnte endlich überzeugt werden: Die 30 Jahre alte C-Sprache des Linux-Kernels wird auf C11 aktualisiert

Feb 14, 2024 pm 09:36 PM
linux linux教程 linux系统 linux命令 shell脚本 Erste Schritte mit Linux Linux-Lernen

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. Linux 之父终于被劝动:用了 30 年的 Linux 内核 C 语言将升级至 C11

Die Kettenreaktion eines Käfers

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;
    };
Nach dem Login kopieren
Diese Struktur ist oft in andere Strukturen eingebettet. Auf diese Weise können verknüpfte Listen mit jedem relevanten Strukturtyp erstellt werden.

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;
    };
Nach dem Login kopieren
Die Elemente in

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 */
Nach dem Login kopieren

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.

Linux 之父终于被劝动:用了 30 年的 Linux 内核 C 语言将升级至 C11Überzeuge Linus

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. Linux 之父终于被劝动:用了 30 年的 Linux 内核 C 语言将升级至 C11

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Unterschied zwischen CentOS und Ubuntu Unterschied zwischen CentOS und Ubuntu Apr 14, 2025 pm 09:09 PM

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 stoppt die Wartung 2024 CentOS stoppt die Wartung 2024 Apr 14, 2025 pm 08:39 PM

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.

Detaillierte Erklärung des Docker -Prinzips Detaillierte Erklärung des Docker -Prinzips Apr 14, 2025 pm 11:57 PM

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.

So verwenden Sie Docker Desktop So verwenden Sie Docker Desktop Apr 15, 2025 am 11:45 AM

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).

So installieren Sie CentOs So installieren Sie CentOs Apr 14, 2025 pm 09:03 PM

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.

Was sind die Backup -Methoden für Gitlab auf CentOS? Was sind die Backup -Methoden für Gitlab auf CentOS? Apr 14, 2025 pm 05:33 PM

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

Wie man in CentOS fester Festplatten montiert Wie man in CentOS fester Festplatten montiert Apr 14, 2025 pm 08:15 PM

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.

Was zu tun ist, nachdem CentOS die Wartung gestoppt hat Was zu tun ist, nachdem CentOS die Wartung gestoppt hat Apr 14, 2025 pm 08:48 PM

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.

See all articles