12

起動時に、BIOS がメモリ 0x7c00 の定義済みデバイス ドライブの最初のセクター (512 バイト) をロードし、そのアドレスにジャンプすることを知っています。

つまり、0x7c00 から 0x7dff までのメモリが占​​有されています。占有されている RAM の他のセクションはありますか?

オペレーティング システムをプログラミングしている場合、自分の目的のために 0x7c00 から ox7dff を除くすべての RAM を使用できますか? または、上書きしてはならない、ブート時に「貴重な」情報で満たされた他のセクションがありますか?

特定の瞬間に、メモリにロードされた MBR (チェーンローディング) を上書きできることを知っています。私の質問は、オペレーティング システムで使用できるメモリの部分はどれですか?

私の悪い英語でごめんなさい。回答ありがとうございます!!

4

3 に答える 3

9

x86 リアル モードのメモリ マップは次のとおりです。

 - 0x00000000 - 0x000003FF - Real Mode Interrupt Vector Table
 - 0x00000400 - 0x000004FF - BIOS Data Area
 - 0x00000500 - 0x00007BFF - Unused
 - 0x00007C00 - 0x00007DFF - Our Bootloader
 - 0x00007E00 - 0x0009FFFF - Unused
 - 0x000A0000 - 0x000BFFFF - Video RAM (VRAM) Memory
 - 0x000B0000 - 0x000B7777 - Monochrome Video Memory
 - 0x000B8000 - 0x000BFFFF - Color Video Memory
 - 0x000C0000 - 0x000C7FFF - Video ROM BIOS
 - 0x000C8000 - 0x000EFFFF - BIOS Shadow Area
 - 0x000F0000 - 0x000FFFFF - System BIOS

私のリアル モード プログラミングでは、通常 0x00007E00 から 0x0009FFFF に固執します (すべてではない)。メモリを使用するためにセグメント: オフセット アドレッシングを使用します。 :

; bootloader.s

BITS  16
ORG   0x7C00

  CLI
  JMP 0xE000      ; Can also be JMP 0x7C00:200
  HLT

TIMES 510 - ($-$$) DB 0
DW 0xAA55

--

; Something.s

BITS  16
ORG   0x7E00      ; Can also be ORG   0x7C00:200

; Code goes here for your purposes.. whether it be a 2nd stage
; bootloader or your 16bit kernel..

CLI
HLT

プロテクト モードに移行する場合は、上記のようにスタブが必要です。Something.s では、プロテクト モード ルーチン (GDT、A20、ビデオ モードの設定など) をプログラムできます。

0x7C00 (ブートローダー エントリ ポイント) のメモリ位置について説明すると、0x7C00 - 0x7DFF はブートローダー (上記の bootloader.s) を配置する場所です。BIOS はそのルーチンを実行した後にその場所にジャンプするため、そこに配置します。ブートローダーのサイズは正確に 512 バイトでなければなりません (TIMES ディレクティブに注意してください)。そこから、コードは (メモリ マップに収まる限り) 任意のサイズにすることができ、OS で完全に作業できるようになります。

32Bit Protected Mode に入ると、1MiB マークについて何でも使用できるようになります。

于 2011-09-04T18:26:47.093 に答える
8

リモートで最新の BIOS を使用すると、BIOS Int 15/AX=E820h callを使用してメモリ マップ情報を取得できます。これにより、OS で使用できるメモリがわかります。

利用可能なメモリを検出する方法とBIOS メモリ マップの内容に関する詳細な説明は、OSDevにあります。

于 2009-06-27T03:04:46.113 に答える
0

OS を作成した場合、プロテクト モードに入るとすぐに BIOS を忘れて (不良デバイスを使用していない限り)、持っているものをすべて使用します。

それとも、ブートローダーを書いていますか?

于 2009-06-27T01:56:19.700 に答える