Linuxの父がついに説得:30年前のLinuxカーネルC言語はC11にアップグレードされる
最近嬉しいニュースがありましたが、これまで使用されてきた C 言語 Linux カーネルの 1989 年版がついにメジャーアップグレードされたということです。現代テクノロジーのペースは止まらず、本日、Linux オープンソース コミュニティは、カーネルの C 言語バージョンを C11 標準にアップグレードするという驚くべき計画を発表しました。この大規模な改革は、来る 5 月の Linux バージョン 5.18 以降に施行される予定です。この重要な動きは、Linux カーネルに無限の潜在的な機会をもたらし、Linux カーネルが最新のテクノロジーのニーズによりよく適応できるようにするでしょう。
この決定は突然でした。質問を開始してから公式声明が発表されるまで、わずか 1 週間しかかかりませんでした。Linux の頑固な父である Linus Torvalds を説得するのは簡単ではありません。事の原因はちょっとした偶然のようだ。
問題の原因は、先週の Linux コミュニティのディスカッションにあります。
Jakob Koschel という博士課程の学生は、カーネルのリンク リスト プリミティブに関連する予測実行の脆弱性の防止を研究しているときに、このような問題を発見しました。
Linux カーネルは、struct list_head で定義された二重リンク リストを広範囲に使用します: リーリー この構造は通常、他の構造内に埋め込まれます。このようにして、関連する構造タイプを使用してリンク リストを作成できます。
さらに、カーネルは、リンク リストの走査と操作に使用できる多数の関数とマクロも提供します。 list_for_each_entry () はその 1 つで、制御構造を装ったマクロです。問題はこのマクロにあります。カーネルに次の構造が含まれていると仮定します:
リーリーlist の要素を使用して、foo 構造体の二重リンクリストを作成できます。このようなリンク リストの先頭として宣言された foo_list という構造体があるとします。このリンク リストは次のコードを使用して走査できます:
リーリーlist 引数は、foo 構造内の list_head 構造の名前をマクロに伝えます。このループは、リスト内の要素ごとに 1 回実行され、反復子はその要素を指します。これにより、USB サブシステムにバグが発生しました。マクロに渡されたイテレータは、マクロの終了後も使用できる可能性がありました。
これは危険なことなので、Koschel はループ後の反復子の使用を停止することでバグを修正する修正を提出しました。

しかし、Linus Torvalds 自身はこのパッチをあまり気に入っておらず、予測される実行の脆弱性との関係を理解していません。 Koschel 氏が詳細に説明した後、Linus 氏はそれが単なる一般的なバグであることを認めました。
しかし、物事はそれほど単純ではありませんでした。Linus はすぐに真の根本原因に気づきました。リンク リスト トラバーサル マクロに渡されるイテレータは、ループ自体の外側のスコープで宣言する必要があるということです。この予測不能なバグは、C89 には「ループ内の変数の宣言」がないために発生します。
list_for_each_entry () のようなマクロは、基本的に常に最後の HEAD エントリをループの外にリークします。これは単純に、ループ自体でイテレータ変数を宣言できないためです。
自分自身を宣言できるイテレータ リスト トラバーサル マクロを作成できれば、イテレータはループの外側には表示されず、そのような問題は発生しません。ただし、カーネルは C89 標準に準拠しているため、ループ内で変数を宣言できません。
Linus は決断したので、アップグレードしましょう。C99 標準に移行する時期が来たのかもしれません。これも 20 年以上前のものですが、少なくとも C89 よりは新しく、ループ内で変数を宣言できます。
C89 は非常に古いものですが、なぜ何年も経っても変わらないのでしょうか? Linus 氏は、古い gcc コンパイラーのバージョンの一部で奇妙な問題が発生し、気軽にアップグレードできないためだと述べました。
ただし、現在、Linux カーネルは gcc の最小要件をバージョン 5.1 に引き上げているため、過去の奇妙なバグはもう存在しないはずです。
もう 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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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