1

最小限のカーネルを作成する方法について、このチュートリアルを行っていました。私はこれを間に読んだ:

ランタイム ライブラリ

OS 用のコードを作成する際の主要な部分は、libc とも呼ばれるランタイム ライブラリを書き直すことです。これは、RTL がコンパイラ パッケージの中で最も OS に依存する部分であるためです。C RTL は移植可能なプログラムを作成するのに十分な機能を提供しますが、RTL の内部動作は使用中の OS に依存します。実際、コンパイラ ベンダーは、同じ OS に対して異なる RTL を使用することがよくあります。Microsoft Visual C++ は、デバッグ/マルチスレッド/DLL のさまざまな組み合わせに対して異なるライブラリを提供し、古い MS-DOS コンパイラは、最大 6 つの異なるランタイム ライブラリを提供していました。メモリーモデル。

私はこの部分にちょっと混乱しています。カーネルを C コードで記述し、アドバイスに反して組み込みの printf() 関数を使用して何かを出力するとします。最後に、私のコードはマシンコードに変換されます。実行されると、プロセッサはそれを直接実行します。なぜ著者は言うのですか:

RTL の内部動作は、使用中の OS に依存していますか?

4

2 に答える 2

1

Printf() は、OS に依存しない高レベル関数です。ただし、これはパズルの一部にすぎず、依存関係自体があります。stdout に書き込める必要があります。その結果、標準出力ストリームを開く create() や、そこに printf 出力を送信する write() など、OS に依存する低レベルのシステム コールが発生します。OS が異なればシステム コールも異なるため、常に適応層が存在します。

確かに、カーネルで printf() を機能させることができます。実際にprintf () への呼び出しの出力を確認することが、解決すべき本当の問題になるでしょう。カーネル モードのターミナル ウィンドウのようなものはありません。

于 2013-10-13T15:27:32.520 に答える