私は286を持っておらず、それからLinuxを実行する予定もありません。しかし、286には保護モードがありますが、なぜLinuxには386以上のCPUが必要だと言うのですか?
~からhttp://tuxmobil.org/286_mobile.htmlELKSバージョンのLinuxは286で実行できるようです。これは正しいですか?カーネルが286 CPUで実行できるように、どのような修正が行われましたか?
今、私は386用にコンパイルされたカーネルが16ビット286 CPUで実行できないことを明らかに理解しています。だから私の質問は、標準のLinuxカーネルを286用にコンパイルしてから286で実行できないのはなぜですか? LinuxにはハードウェアVM86のサポートが必要ですか?
答え1
286保護モード(PM)は、386が提供する機能とは根本的に異なります。 286 PMをプロトタイプとして考えてみてください。欠点が多すぎるため、ほとんど誰も使用しておらず、システム全体が386に収まるように完全に再設計されました。
フラットメモリモデルを使用する代わりに、リアルモードなどのセグメントモデルを使用します。つまり、一度に64kBブロックにわたってメモリにアクセスする必要があることを意味します。
当時利用可能なすべての(MS-DOS)プログラムと完全に互換性がなかったため、PMに入ると、おなじみのプログラムは利用できませんでした。
また、PCを再起動しないと保護モードを再び終了することができないため、メーカーはRAMにフラグを置き、キーボードコントローラに魔法値を書き込むなどの創造的なソリューションを考案しました。これによりCPUのキーがリセットされます。コンピュータを再起動します。マシン。 BIOSが最初に行うことは、以前に設定されたフラグを検出してPOSTルーチンを実行するのではなく、元のプログラムにジャンプし、PMを「終了」した後も元のプログラムを実行し続けることです。
つまり、286 PMでは、多くのトリックがなければ、通常のDOSプログラムを実行することはできません。 DOSプログラムしかなかった頃は、PMを使うことはまったく価値がありませんでした。
したがって、286 PMを使用することは、それを使用せずにEMSとXMSを使用して追加のメモリにアクセスするよりも複雑です。多くの286マザーボードはEMS用のチップセットをサポートしているため、PMなしで追加のシステムメモリをすべて使用できます。
Intelはこれらの欠点を認識し、386でまったく異なる新しい、まったく異なるPMを作成しました。フラットメモリモデルを使用すると、最大4 GBのメモリブロックに簡単にアクセスできます。 CPUはいくつかの命令でPMに入って出ることができるので、不器用な再起動プロトコルは必要ありません。 VM86は、ほとんどの場合PMを終了する必要はなく、PMでDOSプログラムを実行できることを意味します。
これらの改善はすべて、386 PMがより強力であるだけでなく、はるかに互換性が高いことを意味します。
つまり、286と386の保護モードの唯一の共通点は名前です。これがPMオペレーティングシステムが通常バージョン386以降である理由です。 286 PMのサポートを追加することは、まったく別の386 PMと共有されるコードがほとんどまたはまったくない完全に別々の努力です。
これに比べて、386 PMは最後の32ビットCPUまでほぼ同じように動作し、64ビットCPUで32ビットソフトウェアを実行する場合も同様でした。
答え2
カーネルの一部はアセンブリ言語で書かれており、286をサポートするために再構築する必要がありました。
ELKSに関してFAQはこれがLinuxカーネルのサブセットであることを指摘しているので、必要な部分だけを移植したかもしれません。
答え3
私の質問に対する実際の答えは次のとおりです。
Cコードに加えて、すべての主要なCPUアーキテクチャ(または主要なリビジョン)にはいくつかのアセンブリサポートコードが必要です。
GCCがLinuxカーネルを16ビット286マシンコードにコンパイルすることを許可していても、必要な16ビット286互換アセンブリコードはまだありません。
つまり、カーネルはせいぜい部品だけを作ることができます。アーキテクチャ固有のアセンブリコードは、単にそのアーキテクチャ用に作成されていないため、組み立てられません。
これに基づいて、私はこれがまさにELKSと同様のプロジェクトが286または他のアーキテクチャでLinuxを実装するときに何をするのかを想定しています。これらは不足しているアセンブリサポートコードを実装しています。