26

私は、Fabrice BellardによるJavascriptでのx86仮想マシンの実装に触発されました。そして、Linuxカーネルを実行できる最も単純な仮想マシンを書いてみたいと思います。これは純粋に教育的な取り組みであり、これを可能にするコードを理解して共有する以外の目的はありません。

x86の仕様を一瞥したところ、完全なx86命令セットをエミュレートできる仮想マシンを作成しようとして、自分自身を最深部に投げ込んでいるのではないかと思います。代わりに、エミュレートできるより単純なアーキテクチャを探しています。

x86アーキテクチャをエミュレートする方法を尋ねるこの質問を読みました。答えは、ARMアーキテクチャなどのより単純なものから始めることを示唆しています。私の質問はより具体的です:Linuxカーネルを実行できるようになるエミュレートを試みることができる最も単純なアーキテクチャは何ですか?

単に命令をホストマシンに返すのではなく、マシン全体を完全にエミュレートすることに興味があります(たとえば、x86エミュレーターを作成している場合は可能です)。私はかなりの量の16ビットアセンブリの知識といくつかのオペレーティングシステム理論のバックグラウンドを持っているので、これは十分な作業で十分に手の届くところにあるはずです。

4

4 に答える 4

6

可能な最も単純なアーキテクチャは、実装の容易さの観点からです。マシンを完全にエミュレートするエミュレーターを構築しているので、最も単純な命令セットの設計/アーキテクチャーのいずれかが適しています。RISCアーキテクチャの方が優れていることは間違いありません。しかし、広く使用されていないアーキテクチャを選択することも良くありません。サポートが必要な場合は、ほとんど役に立たないでしょう。シミュレーターを書くのは簡単なことではありません。ARMまたはMIPSのどちらかを選択すると、どちらも人気があります。

また、Fabrice Bellardのjavascript仮想マシンは32ビットx86互換のCPUを使用していることを知っておく必要があります。これは、Linuxでネイティブにサポートされています。ARMまたはMIPS用にLinuxカーネルを移植する(ツールチェーンを使用する)必要があります。Linuxカーネルの使用方法に関するリンクを参照してください

MIPSの場合:

ARMの場合:

于 2013-02-28T19:01:00.187 に答える
4

Linuxカーネルでサポートされているアーキテクチャのリスト:

http://en.wikipedia.org/wiki/List_of_Linux_supported_architectures

「可能な限り単純な」というのは主観的なものですが、そのリストからはそれほど複雑ではないと私が思うものは次のとおりです。

  • MIPS
  • H8(μClinux)
  • 68k / Coldfire(μClinux)
于 2013-02-26T13:40:59.690 に答える
2

コメントで述べたように、私は3つの側面のバランスを取ります。

  • 単純な命令セット(いくつかの命令フォーマット、いくつかのオペコード:x86のようなものではないもの)
  • ドキュメント:広く利用可能。これは、広くサポートされているアーキテクチャに集中するために、いくつかの単純なアーキテクチャを破棄する可能性があることを意味します(たとえば、ここではx86が勝ちますが、RISC、特に学界のMIPSに関する資料もたくさんあります)。または、OpenRiscのようなオープンなものを探しましょう
  • 「カーネルモード」での使いやすさ。特権カーネルモードでは、考慮すべきレジスタ、命令、および内部のまったく新しい世界があります。また、プロセッサにはバスも付属していることを忘れないでください。単純なプロセッサには非常に複雑なバスが含まれている場合があります。そして、それもエミュレートする必要があります。または、満足している場合は、ユーザーモードLinuxを使用することもできます。

最後に、私は「古い」何かを提案します。特に特権モードでは、かなり単純で、十分に研究され、文書化されています。たとえば、元のMIPS、Motorola 68kファミリ、または元のRISC(http://en.wikipedia.org/wiki/Berkeley_RISC)に近いもの(Linuxバリアントがある場合)。

于 2013-03-05T14:11:55.270 に答える
0

FPGAに効率的に実装するために設計されたプロセッサであるmicroBlazeをご覧ください。2つの命令フォーマットと32のプライマリオペコード値しかありません。

これは、ザイリンクスによって定義され、FPGAのラインでサポートされています。リファレンスドキュメントは次のとおりです 。http ://www.xilinx.com/support/documentation/sw_manuals/mb_ref_guide.pdf

于 2013-02-26T18:53:19.460 に答える