ホームページ システムチュートリアル Linux Linuxの父がついに説得:30年前のLinuxカーネルC言語はC11にアップグレードされる

Linuxの父がついに説得:30年前のLinuxカーネルC言語はC11にアップグレードされる

Feb 14, 2024 pm 09:36 PM
linux Linuxチュートリアル Linuxシステム Linuxコマンド シェルスクリプト Linux を始める Linux学習

最近嬉しいニュースがありましたが、これまで使用されてきた C 言語 Linux カーネルの 1989 年版がついにメジャーアップグレードされたということです。現代テクノロジーのペースは止まらず、本日、Linux オープンソース コミュニティは、カーネルの C 言語バージョンを C11 標準にアップグレードするという驚くべき計画を発表しました。この大規模な改革は、来る 5 月の Linux バージョン 5.18 以降に施行される予定です。この重要な動きは、Linux カーネルに無限の潜在的な機会をもたらし、Linux カーネルが最新のテクノロジーのニーズによりよく適応できるようにするでしょう。

この決定は突然でした。質問を開始してから公式声明が発表されるまで、わずか 1 週間しかかかりませんでした。Linux の頑固な父である Linus Torvalds を説得するのは簡単ではありません。事の原因はちょっとした偶然のようだ。 Linux 之父终于被劝动:用了 30 年的 Linux 内核 C 语言将升级至 C11

バグの連鎖反応

問題の原因は、先週の Linux コミュニティのディスカッションにあります。

Jakob Koschel という博士課程の学生は、カーネルのリンク リスト プリミティブに関連する予測実行の脆弱性の防止を研究しているときに、このような問題を発見しました。

Linux カーネルは、struct list_head で定義された二重リンク リストを広範囲に使用します

: リーリー この構造は通常、他の構造内に埋め込まれます。このようにして、関連する構造タイプを使用してリンク リストを作成できます。

さらに、カーネルは、リンク リストの走査と操作に使用できる多数の関数とマクロも提供します。 list_for_each_entry () はその 1 つで、制御構造を装ったマクロです。問題はこのマクロにあります。カーネルに次の構造が含まれていると仮定します:

リーリー

list の要素を使用して、foo 構造体の二重リンクリストを作成できます。このようなリンク リストの先頭として宣言された foo_list という構造体があるとします。このリンク リストは次のコードを使用して走査できます:

リーリー

list 引数は、foo 構造内の list_head 構造の名前をマクロに伝えます。このループは、リスト内の要素ごとに 1 回実行され、反復子はその要素を指します。これにより、USB サブシステムにバグが発生しました。マクロに渡されたイテレータは、マクロの終了後も使用できる可能性がありました。

これは危険なことなので、Koschel はループ後の反復子の使用を停止することでバグを修正する修正を提出しました。

Linux 之父终于被劝动:用了 30 年的 Linux 内核 C 语言将升级至 C11ライナスを説得する

しかし、Linus Torvalds 自身はこのパッチをあまり気に入っておらず、予測される実行の脆弱性との関係を理解し​​ていません。 Koschel 氏が詳細に説明した後、Linus 氏はそれが単なる一般的なバグであることを認めました。

しかし、物事はそれほど単純ではありませんでした。Linus はすぐに真の根本原因に気づきました。リンク リスト トラバーサル マクロに渡されるイテレータは、ループ自体の外側のスコープで宣言する必要があるということです。この予測不能なバグは、C89 には「ループ内の変数の宣言」がないために発生します。

list_for_each_entry () のようなマクロは、基本的に常に最後の HEAD エントリをループの外にリークします。これは単純に、ループ自体でイテレータ変数を宣言できないためです。

自分自身を宣言できるイテレータ リスト トラバーサル マクロを作成できれば、イテレータはループの外側には表示されず、そのような問題は発生しません。ただし、カーネルは C89 標準に準拠しているため、ループ内で変数を宣言できません。

Linus は決断したので、アップグレードしましょう。C99 標準に移行する時期が来たのかもしれません。これも 20 年以上前のものですが、少なくとも C89 よりは新しく、ループ内で変数を宣言できます。

C89 は非常に古いものですが、なぜ何年も経っても変わらないのでしょうか? Linus 氏は、古い gcc コンパイラーのバージョンの一部で奇妙な問題が発生し、気軽にアップグレードできないためだと述べました。

ただし、現在、Linux カーネルは gcc の最小要件をバージョン 5.1 に引き上げているため、過去の奇妙なバグはもう存在しないはずです。 Linux 之父终于被劝动:用了 30 年的 Linux 内核 C 语言将升级至 C11

もう 1 人のコア開発者である Arnd Bergmann は、C11 以上に確実にアップグレードできると信じています。ただし、C17 または C2x にアップグレードすると gcc-5/6/7 のサポートが終了するため、C11 にアップグレードする方が簡単です。

最終的に、Torvalds 氏はこのアイデアに同意しました:「わかりました、思い出してください。5.18 マージ ウィンドウの早い段階で試してみましょう。」次の C11 への移行はいくつかの予期せぬバグを引き起こす可能性がありますが、すべてがうまくいけば、次は A Linux カーネルのバージョンは正式に C11 に移行します。

以上がLinuxの父がついに説得:30年前のLinuxカーネルC言語はC11にアップグレードされるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Linuxは実際に何に適していますか? Linuxは実際に何に適していますか? Apr 12, 2025 am 12:20 AM

Linuxは、サーバー、開発環境、埋め込みシステムに適しています。 1.サーバーオペレーティングシステムとして、Linuxは安定して効率的であり、多くの場合、高電流アプリケーションの展開に使用されます。 2。開発環境として、Linuxは効率的なコマンドラインツールとパッケージ管理システムを提供して、開発効率を向上させます。 3.埋め込まれたシステムでは、Linuxは軽量でカスタマイズ可能で、リソースが限られている環境に適しています。

LinuxでDockerを使用:包括的なガイド LinuxでDockerを使用:包括的なガイド Apr 12, 2025 am 12:07 AM

LinuxでDockerを使用すると、開発と展開の効率が向上する可能性があります。 1。Dockerのインストール:スクリプトを使用して、ubuntuにDockerをインストールします。 2.インストールの確認:sudodockerrunhello-worldを実行します。 3。基本的な使用法:NginxコンテナDockerrun-Namemy-Nginx-P8080を作成します:80-Dnginx。 4。高度な使用法:カスタム画像を作成し、DockerFileを使用してビルドして実行します。 5。最適化とベストプラクティス:マルチステージビルドとドッケルコンポスを使用して、DockerFilesを作成するためのベストプラクティスに従ってください。

Apacheを始める方法 Apacheを始める方法 Apr 13, 2025 pm 01:06 PM

Apacheを開始する手順は次のとおりです。Apache(コマンド:sudo apt-get install apache2または公式Webサイトからダウンロード)をインストールします(linux:linux:sudo systemctl start apache2; windows:apache2.4 "serviceを右クリックして「開始」を右クリック) (オプション、Linux:Sudo SystemCtl

Apache80ポートが占有されている場合はどうすればよいですか Apache80ポートが占有されている場合はどうすればよいですか Apr 13, 2025 pm 01:24 PM

Apache 80ポートが占有されている場合、ソリューションは次のとおりです。ポートを占有するプロセスを見つけて閉じます。ファイアウォールの設定を確認して、Apacheがブロックされていないことを確認してください。上記の方法が機能しない場合は、Apacheを再構成して別のポートを使用してください。 Apacheサービスを再起動します。

Oracleの監視を開始する方法 Oracleの監視を開始する方法 Apr 12, 2025 am 06:00 AM

Oracleリスナーを開始する手順は次のとおりです。Windowsのリスナーステータス(LSNRCTLステータスコマンドを使用)を確認し、LinuxとUNIXのOracle Services Managerで「TNSリスナー」サービスを開始し、LSNRCTL Startコマンドを使用してリスナーを起動してLSNRCTLステータスコマンドを実行してリスナーを確認します。

DebianのNginx SSLパフォーマンスを監視する方法 DebianのNginx SSLパフォーマンスを監視する方法 Apr 12, 2025 pm 10:18 PM

この記事では、Debianシステム上のNginxサーバーのSSLパフォーマンスを効果的に監視する方法について説明します。 Nginxexporterを使用して、NginxステータスデータをPrometheusにエクスポートし、Grafanaを介して視覚的に表示します。ステップ1:NGINXの構成最初に、NGINX構成ファイルのSTUB_STATUSモジュールを有効にして、NGINXのステータス情報を取得する必要があります。 NGINX構成ファイルに次のスニペットを追加します(通常は/etc/nginx/nginx.confにあるか、そのインクルードファイルにあります):location/nginx_status {stub_status

Debianシステムでリサイクルビンをセットアップする方法 Debianシステムでリサイクルビンをセットアップする方法 Apr 12, 2025 pm 10:51 PM

この記事では、デビアンシステムでリサイクルビンを構成する2つの方法を紹介します:グラフィカルインターフェイスとコマンドライン。方法1:Nautilusグラフィカルインターフェイスを使用して、ファイルマネージャーを開きます。デスクトップまたはアプリケーションメニューでNautilusファイルマネージャー(通常は「ファイル」と呼ばれる)を見つけて起動します。リサイクルビンを見つけてください:左ナビゲーションバーのリサイクルビンフォルダーを探してください。見つからない場合は、「他の場所」または「コンピューター」をクリックして検索してみてください。リサイクルビンプロパティの構成:「リサイクルビン」を右クリックし、「プロパティ」を選択します。プロパティウィンドウで、次の設定を調整できます。最大サイズ:リサイクルビンで使用可能なディスクスペースを制限します。保持時間:リサイクルビンでファイルが自動的に削除される前に保存を設定します

Apacheサーバーを再起動する方法 Apacheサーバーを再起動する方法 Apr 13, 2025 pm 01:12 PM

Apacheサーバーを再起動するには、次の手順に従ってください。Linux/MacOS:sudo systemctl restart apache2を実行します。 Windows:Net Stop apache2.4を実行し、ネット開始apache2.4を実行します。 Netstat -A |を実行しますサーバーのステータスを確認するには、STR 80を見つけます。

See all articles