OSが起動したとき、メモリ管理のタイプ、ページングまたはページングなしは何ですか?つまり、ページングのオン/オフを制御するcr0レジスタの値は何ですか。カーネルの初期化の開始時にページングはオフになっていると思います。そうしないと、すべてのメモリアクセスが無効になります。ページングはカーネルの初期化中に設定され、カーネル空間のすべてのマップが有効になるように設定する必要があります。私は正しいですか?
2 に答える
「OSが起動したとき」とは、「プロセッサの電源が入ったとき」を意味すると思います。その場合、それは明らかにプロセッサのアーキテクチャに依存します。
x86の場合、ページングはCR0レジスタのビット31によって制御されます(このビットが設定されている場合、ページングが有効になります)。インテルのソフトウェア開発者マニュアル、第3巻、セクション8.1.1から。「リセット後のプロセッサの状態」では、リセット後のCR0の値が0x60000010であることがわかります。これは、ページングが無効になっていることを意味します。
カーネルが開始される直前にページングが有効になっているかどうかを知りたい場合は、ブートローダーの動作によって異なります。マルチブート仕様(たとえば、GRUBによって実装される)では、ページングを無効にする必要があります。
'CR0' </ p>
ビット31(PG)をクリアする必要があります。ビット0(PE)を設定する必要があります。他のビットはすべて未定義です。
x86 CPUは、リセット後にリアルアドレスモードで実行を開始します。OSは、最初にCPUをプロテクトモードに切り替えてから、ページ変換を有効にする必要があります。リアルモードからプロテクトモードに切り替えること(#GPを取得)と一緒に有効にすることも、リアルモードで有効にすることもできません。そのため、x86では、OSは最初にページ変換を無効にして実行し(OSブートローダーによって以前に有効にされている場合を除きます。これはまれです)、準備ができたときに有効にします(つまり、ページテーブルを作成してCR3をロードします)。