カーネル全体をリアルタイムでパッチできないのはなぜですか?

カーネル全体をリアルタイムでパッチできないのはなぜですか?

ここ数年間ライブカーネルパッチこの技術は、可能な限り最高のシステム稼働時間を確保するために努力するシステム管理者の間で人気がありました。

このプロセスを可能にするためにカスタムパッチを準備し、しばしば有料の顧客に配布し、時には自宅のユーザーに無料で配布します。

実行中のカーネルバージョンと利用可能な最新のソースコードの違いを利用してこれらのパッチを自動的に生成できないのはなぜですか?私が理解したのは、最も多くの利点を得ることができるサーバーコアは、一般的に数年に一度の大きな変更だけを受け取り、それ以外には主なバグ修正とセキュリティ更新のみを受け取るため、これが簡単になるようです。同様に、安定性が問題である場合は、比較的重要度の低いマシンを実行しているボランティアが最初にパッチを構築し、パッチがどれだけうまく機能しているかを自動的に報告するシステムを設定するのが簡単に見えます。

しかし、このうち何も起こりませんでした。私が何を逃してこのようなことが起こったのですか?

ベストアンサー1

私たちは、プログラムの実行をプログラムを生成する静的ソースコードと考えたいと思います。しかし、彼らは変化し続けています。同様に、メモリのカーネルはディスクのカーネルとは異なります。

ディクストラの手紙を引用しようとしたら」gotoは有害と見なされます。「…

私が最初に指摘したのは、正しいプログラムを構築するとプログラマーの活動が終わるのですが、プログラムの制御下で発生するプロセスが彼の活動の実際の主題であるということです。なぜなら、望む効果を達成しなければならないのがまさにこのプロセスだからです。必須仕様を満たす必要があるこのプロセスの動的動作。しかし、一度プログラムが作成されると、そのプロセスの「作成」はマシンに任されます。

2番目のステートメントは、私たちの知能は静的関係を把握するのに適していますが、時間の経過とともに進化するプロセスを視覚化する能力は比較的適切に開発されていないということです。したがって、私たちは(私たちの限界を知っている賢明なプログラマーが)最善を尽くすべきです。静的プログラムと動的プロセス間の概念的なギャップの解消、プログラム(テキストスペースに拡張)とプロセス(時間に拡張)の間の対応をできるだけ単純にします。

これから私はディスクからカーネルをロードしないプログラムやカーネルをメモリに入れることは悪い考えだと推論しました。他のことを知りたくない場合は、できる再起動すると、現在実行中のカーネルと同じカーネルが生成されます。

システム管理者として、あなたは実際のカーネルがパッチしたカーネルと微妙に異なるので、フランケンシュタインのモンスターではなく実際の一般的なカーネルで終わっていることを知りたいです。


リアルタイムパッチが本当に難しいですね。ライブパッチを自動的に作成することは技術的に不可能です。

プログラムコードが効果的に独自に書き換えられることを理解することが重要です。

int X = 10;
void run(){
    X=5;
}

このコード例では、X=10数値はコードとして実行されません。コンパイラは10数値を「X」位置に配置します。行3が実行時に実行されると、「X」位置の値が置き換えられます。実際に値を上書きします。これは、10 実行中のプログラムコードから数字が完全に消えることを意味します。

次に、次のコマンドを使用してこの問題をライブにパッチしようとしています。

int X = 20;
void run(){
    X=15;
}

Xは何を20または15にパッチする必要がありますか?パッチする必要がありますか、それともそれを置くべきですか?ここでは、コードだけを変更するのではなく、動的に生成された値を変更します。動的に生成されるので、変更する必要はないと思いますが、変更しない場合は、新しいコードで5または10がまだ有効な値であることを知っていますか?これは自動的には実行できません!

簡単に言えば、ライブパッチを作成する技術と関連ツールがありますが、それを使用して結果をテストするには専門家が必要です。これらのツールをリリースし、一般ユーザーがそのツールを使用する方法を理解することを期待するのは、多くの一般ユーザーがシステムを台無しにするのに最適な方法です。

おすすめ記事