2016-10-12 26 views
3

ベアボーンOSからデータをエクスポートする最も簡単な方法は何ですか?ベアボーンからデータをエクスポートする最も簡単な方法OS

私は自分のコンピューターアーキテクチャーコースの課題をいくつか開発しています。これらのコースでは、さまざまなコードセグメントを可能な限り正確に時間計測する必要があります。私の考えは、OSDevウィキ(http://wiki.osdev.org/Bare_Bones)の "Bare Bones"/"Hello World"チュートリアルにタイミングを合わせるコードを挿入することです。これは最小限のOSカーネル内でテスト対象のコードを効果的に実行します。

このテクニックはうまくいきます。しかし、現時点では、私の唯一の出力オプションはVGAテキストモードです。実験結果を保存して、生徒がデータを分析/グラフ化できるようにしたいと考えています。

私は現在、USBフラッシュドライブに「ミニOS」をインストールし、フラッシュドライブから起動しています。私の元の考えはBIOSを使って実験データをUSBドライブに戻すことでした。しかし、プロテクトモードからBIOSルーチンを呼び出すことは簡単ではない(すなわち、リアルモードまたはV86モードに切り替える必要がある)。

私がする必要があるのは、生のバイナリデータを別のマシンが読むことができる場所にダンプすることだけです。私はファイルシステムやそのような何かを必要としません。 USBフラッシュドライブ(または他の外部デバイス)にアクセスする比較的簡単な方法はありますか、または完全なUSBドライバまたはネットワークドライバスタックを見つけて書き込む必要がありますか?または、より単純なソリューションがありますか?

この投稿(Real mode BIOS routine and Protected Mode)にはPwnOSが記載されています。コードへのリンクが壊れています。

+1

x86を使用しているので、実際のハードウェアのタイミングは、パワーマネージメント(Turboを含む)のため実際には困難です。 RDTSC(リオーダリング防止のためのシリアライズ命令付き)を使用してリファレンスサイクルをカウントするか、ハードウェアパフォーマンスカウンタを使用して実際のコアクロックサイクルをカウントすることができます。 IIRCでは、[x86タグwiki](http://stackoverflow.com/tags/x86/info)にこれに関するいくつかのリンクがあります。ハイパースレッディングとターボを無効にして通常のOSで良好な結果を得ることができ、CPUアフィニティを設定してプロセスを同じコアに保つことができます。しかし、タイマー割り込みは依然として要因になります。 –

+0

perf-counterを使用してユーザー空間サイクルのみをカウントするにはhttp://stackoverflow.com/questions/39864416/perf-overcounting-simple-cpu-bound-loop-mysterious-kernel-workも参照してください。 –

答えて

2

USBドライバは非常に難しいです。しかし、ネットワークドライバについて言及したように、シリアルポートを調べることもできます。 USBよりもはるかに簡単にプログラムすることができます。

osdev wikiには、このトピックに関する十分な情報が必要です。

+0

これは、データを受信するシリアルケーブルのもう一方の端に2台目のマシンがあることを意味しますか? – Zack

+0

はい、別のマシンが必要です。 – glauxosdever

+0

私はエミュレータの中からあなたの裸の骨のOSを走らせることができることを忘れていました。このようにして、ホストOSのベアボーンOSからシリアル出力を読み取ることができます。 – glauxosdever

関連する問題