snaka; 第8章 メモリ管理 - uchan-nos/os-from-zero GitHub Wiki

home

メモリマップの表示 (osbook_day08a 実行結果)

  • IsAvailable() が未使用と判定しないメモリ領域
    • 二重否定でわかりにくい
    • 言い換えると IsAvailable() が使用可能と判定するメモリ領域
  • メモリ割当の前に UEFI 管理領域から OS 管理領域へ移動するべきデータ構造
    • スタック領域
      • RSP レジスタの値が指し示すアドレス
    • GDT (Global Descriptor Table)
      • セグメンテーションによって CPU の動作権限を決める
    • ページテーブル

(「ゼロからのOS自作入門」内田公太著、マイナビ出版 P.xxx から引用)

  • セグメントレジスタ
    • GDTのインデックス番号を保持する
    • メモリの読み書きの際のその番号のディづくりプタの属性にもとづいてメモリ保護を行う
    • x86-64 の 64 ビットモードでは利用されない
  • スタックセグメントレジスタ(SS)
    • 本書では実質的に利用されない
  • コードセグメントレジスタ
    • すべての命令は CS が指すディスクリプタの設定内容に従ってアクセス権の検査が行われる

(「ゼロからのOS自作入門」内田公太著、マイナビ出版 P.xxx から引用)

  • CR3 レジスタ

    • CPU がアドレス変換をする際に使用する PML4 (Page Map Level 4) テーブルの物理アドレスを設定する
  • size_t

    size_tは、オブジェクトのバイト数を表現できる程度に十分に大きい符号なし整数型である。

    cpprefjp - C++日本語リファレンス より引用

osbook_day08c の実行結果(勝手に再起動を繰り返すが、なにか問題あるんだろうか... 🤔 )

↑ブートローダのコンパイルし直しが必要だったっぽい

⚠️ **GitHub.com Fallback** ⚠️