私はOpenGLゲームを開発していますが、似たような機能を持つコードの一部をコピーし、新機能でコードを部分的に修正しましたが、まだバグがあります。このコードは、無効なデータとパラメータを使用してOpenGLレンダリング関数を呼び出します。
無効なデータ/パラメータでOpenGL関数を呼び出した後、システム全体が停止し、コンソールに切り替えることもできませんCtrlAltF1。
Linuxは安定したソフトウェア/オペレーティングシステムと見なされるので、残念です。次に、欠陥のあるOpenGLプログラムがシステム全体にクラッシュするのはなぜですか?
ベストアンサー1
Linuxカーネルの「モノリシック」特性を考慮すると、CPUの最高の特権レベルで実行されるコードで発生するバグ(しばしば「カーネルモード」と呼ばれる)できるシステム全体をひざまずきます。
3つの理由があります:
- これらのコードは他のコードのメモリ空間に直接アクセスできます。したがって、これらのコードはカーネル自体を破壊し、ドライバなどを実行する可能性があります。
- これらのコードはI / Oデバイスに直接アクセスできます。 I / Oデバイスを誤って設定したり、間違った時間に誤ったビットを設定したりすると、システム全体がロックされる可能性があります。バグのないデバイスドライバは、ユーザーコードがハードウェアにシステムの不安定性を引き起こす可能性がある操作を実行することを許可しませんが、バグがある、ベータイ、または誤って書かれた(またはバグがある)ドライバはそうすることができます。
- 処理できない問題や例外が発生したコードには、より高いレベルの「スロー」はありません。その結果、カーネル例外がシステムクラッシュを引き起こす可能性があります。
それで、カーネルやグラフィックドライバでOpenGLがどのようにうまくいくのかわかりませんが、これが役に立つことを願っています。