


Le père de Linux a finalement été convaincu : le langage C du noyau Linux, vieux de 30 ans, sera mis à niveau vers C11
Il y a eu des nouvelles récemment. Il est passionnant que la version 1989 du noyau Linux en langage C qui a été utilisée ait enfin reçu une mise à niveau majeure. Le rythme de la technologie contemporaine est imparable. Aujourd'hui, la communauté open source Linux a annoncé un plan ambitieux visant à mettre à niveau la version en langage C du noyau vers la norme C11. On s'attend à ce que cette réforme majeure entre en vigueur après la version Linux 5.18, soit en mai prochain. Cette évolution importante apportera des opportunités potentielles illimitées au noyau Linux et l'aidera à mieux s'adapter aux besoins des technologies modernes.
Cette décision a été soudaine. Il n'a fallu qu'une semaine entre le lancement de la question et la déclaration officielle. Il n'est pas facile de convaincre Linus Torvalds, le père obstiné de Linux. La raison semble être un peu accidentelle.
Le problème provient d'une discussion de la communauté Linux la semaine dernière.
Un doctorant nommé Jakob Koschel a découvert un tel problème lors de recherches sur la prévention des vulnérabilités d'exécution spéculative liées aux primitives de liste chaînée du noyau.
Le noyau Linux utilise largement les listes doublement chaînées définies par la structure list_head :
struct list_head {
struct list_head *next, *prev;
};
De plus, le noyau fournit également un grand nombre de fonctions et de macros qui peuvent être utilisées pour parcourir et exploiter des listes chaînées. list_for_each_entry() en fait partie, une macro déguisée en structure de contrôle. Le problème réside dans cette macro. Supposons que le noyau contient la structure suivante :
struct foo { int fooness; struct list_head list; };
list peuvent être utilisés pour créer une liste doublement chaînée de la structure foo. Supposons qu'il existe une structure appelée foo_list déclarée comme tête d'une telle liste chaînée. Cette liste chaînée peut être parcourue en utilisant le code suivant :
struct foo *iterator; list_for_each_entry(iterator, &foo_list, list) { do_something_with(iterator); } /* Should not use iterator here */
L'argument list indique à la macro le nom de la structure list_head dans la structure foo. Cette boucle sera exécutée une fois pour chaque élément de la liste, l'itérateur pointant vers cet élément. Cela entraînait un bug dans le sous-système USB : l'itérateur passé à la macro pouvait toujours être utilisé après avoir quitté la macro.
C'est une chose dangereuse, alors Koschel a soumis un correctif qui corrige le bug en arrêtant d'utiliser l'itérateur après la boucle.

Mais Linus Torvalds lui-même n'aime pas beaucoup ce patch et ne voit pas sa relation avec la vulnérabilité d'exécution spéculative. Après que Koschel l'ait expliqué en détail, Linus a admis qu'il ne s'agissait que d'un bug courant.
Cependant, les choses n'étaient pas si simples, et Linus a vite compris la véritable cause profonde : l'itérateur passé à la macro de parcours de liste chaînée doit être déclaré dans une portée en dehors de la boucle elle-même. Ce bug non prédictif se produit car il n'y a pas de "déclaration de variables dans des boucles" dans C89.
Les macros comme list_for_each_entry () fuient essentiellement toujours la dernière entrée HEAD en dehors de la boucle, simplement parce que nous ne pouvons pas déclarer de variables d'itérateur dans la boucle elle-même.
Si vous pouviez écrire une macro de parcours de liste d'itérateurs qui pourrait se déclarer, alors l'itérateur ne serait pas visible en dehors de la boucle et aucun problème de ce type ne surviendrait. Cependant, le noyau étant bloqué sur le standard C89, les variables ne peuvent pas être déclarées à l'intérieur d'une boucle.
Linus a décidé, passons à la mise à niveau, il est peut-être temps de passer à la norme C99. Bien qu'il ait également plus de 20 ans, il est au moins plus récent que C89 et vous permet de déclarer des variables dans une boucle.
Puisque le C89 est si vieux, pourquoi n’a-t-il pas changé après tant d’années ? Linus a dit que c'était parce que nous avions rencontré des problèmes étranges dans certaines anciennes versions du compilateur gcc et que nous ne pouvions pas les mettre à niveau avec désinvolture.
Cependant, le noyau Linux a désormais augmenté la configuration minimale requise pour gcc à la version 5.1, donc ces bugs étranges du passé devraient disparaître.
Arnd Bergmann, un autre développeur principal, estime que nous pouvons certainement passer à C11 ou même supérieur. Cependant, la mise à niveau vers C17 ou C2x interrompra la prise en charge de gcc-5/6/7, la mise à niveau vers C11 est donc plus facile à réaliser.
En fin de compte, Torvalds était d'accord avec l'idée : "D'accord, rappelez-moi, essayons-le au début de la fenêtre de fusion 5.18." Le passage à C11 pourrait entraîner des bugs inattendus, mais si tout se passe bien, le prochain Linux. la version du noyau passera officiellement à C11.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Les principales différences entre Centos et Ubuntu sont: l'origine (Centos provient de Red Hat, pour les entreprises; Ubuntu provient de Debian, pour les particuliers), la gestion des packages (Centos utilise Yum, se concentrant sur la stabilité; Ubuntu utilise APT, pour une fréquence de mise à jour élevée), le cycle de support (CentOS fournit 10 ans de soutien, Ubuntu fournit un large soutien de LT tutoriels et documents), utilisations (Centos est biaisé vers les serveurs, Ubuntu convient aux serveurs et aux ordinateurs de bureau), d'autres différences incluent la simplicité de l'installation (Centos est mince)

Étapes d'installation de CentOS: Téléchargez l'image ISO et Burn Bootable Media; démarrer et sélectionner la source d'installation; sélectionnez la langue et la disposition du clavier; configurer le réseau; partitionner le disque dur; définir l'horloge système; créer l'utilisateur racine; sélectionnez le progiciel; démarrer l'installation; Redémarrez et démarrez à partir du disque dur une fois l'installation terminée.

Centos sera fermé en 2024 parce que sa distribution en amont, Rhel 8, a été fermée. Cette fermeture affectera le système CentOS 8, l'empêchant de continuer à recevoir des mises à jour. Les utilisateurs doivent planifier la migration et les options recommandées incluent CentOS Stream, Almalinux et Rocky Linux pour garder le système en sécurité et stable.

Docker utilise les fonctionnalités du noyau Linux pour fournir un environnement de fonctionnement d'application efficace et isolé. Son principe de travail est le suivant: 1. Le miroir est utilisé comme modèle en lecture seule, qui contient tout ce dont vous avez besoin pour exécuter l'application; 2. Le Système de fichiers Union (UnionFS) empile plusieurs systèmes de fichiers, ne stockant que les différences, l'économie d'espace et l'accélération; 3. Le démon gère les miroirs et les conteneurs, et le client les utilise pour l'interaction; 4. Les espaces de noms et les CGROUP implémentent l'isolement des conteneurs et les limitations de ressources; 5. Modes de réseau multiples prennent en charge l'interconnexion du conteneur. Ce n'est qu'en comprenant ces concepts principaux que vous pouvez mieux utiliser Docker.

CentOS a été interrompu, les alternatives comprennent: 1. Rocky Linux (meilleure compatibilité); 2. Almalinux (compatible avec CentOS); 3. Serveur Ubuntu (configuration requise); 4. Red Hat Enterprise Linux (version commerciale, licence payante); 5. Oracle Linux (compatible avec Centos et Rhel). Lors de la migration, les considérations sont: la compatibilité, la disponibilité, le soutien, le coût et le soutien communautaire.

Une fois CentOS arrêté, les utilisateurs peuvent prendre les mesures suivantes pour y faire face: sélectionnez une distribution compatible: comme Almalinux, Rocky Linux et CentOS Stream. Migrez vers les distributions commerciales: telles que Red Hat Enterprise Linux, Oracle Linux. Passez à Centos 9 Stream: Rolling Distribution, fournissant les dernières technologies. Sélectionnez d'autres distributions Linux: comme Ubuntu, Debian. Évaluez d'autres options telles que les conteneurs, les machines virtuelles ou les plates-formes cloud.

Comment utiliser Docker Desktop? Docker Desktop est un outil pour exécuter des conteneurs Docker sur les machines locales. Les étapes à utiliser incluent: 1. Installer Docker Desktop; 2. Démarrer Docker Desktop; 3. Créer une image Docker (à l'aide de DockerFile); 4. Build Docker Image (en utilisant Docker Build); 5. Exécuter Docker Container (à l'aide de Docker Run).

Vs Code Système Exigences: Système d'exploitation: Windows 10 et supérieur, MacOS 10.12 et supérieur, processeur de distribution Linux: minimum 1,6 GHz, recommandé 2,0 GHz et au-dessus de la mémoire: minimum 512 Mo, recommandée 4 Go et plus d'espace de stockage: Minimum 250 Mo, recommandée 1 Go et plus d'autres exigences: connexion du réseau stable, xorg / wayland (Linux) recommandé et recommandée et plus
