This repository was archived by the owner on Jan 14, 2026. It is now read-only.
File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ この章では、メモリの仮想/物理変換(vmemレイヤ)に関する実装について記述します
2+
3+ ## 概要
4+ このモジュールはカーネル内部で仮想アドレスと物理アドレスの相互変換を抽象化します。
5+ 実装は` mem/vmem.c ` です
6+
7+ ## 機能
8+
9+ ## API
10+ ### 定義されている型/定数
11+ - ` vmem_mode_t ` : 動作モード(` VMEM_MODE_IDENTITY ` , ` VMEM_MODE_OFFSET ` , ` VMEM_MODE_WALK ` )
12+
13+ ### 関数
14+ - ** ` vmem_virt_to_phys ` ** -> uint32_t
15+ - ** 引数** : (uint32_t) ` virt ` - 変換する仮想アドレス
16+ - 仮想アドレスを物理アドレスへ変換します。現在のモードに従って動作します。
17+ - 失敗時は ` 0 ` を返します(注: 物理アドレス ` 0 ` を有効に使う場合は注意が必要です)
18+
19+ - ** ` vmem_phys_to_virt ` ** -> uint32_t
20+ - ** 引数** : (uint32_t) ` phys ` - 変換する物理アドレス
21+ - 物理アドレスを仮想アドレスへ変換します。WALK モードの際にはページテーブルを参照するためにこの関数が使われます。
22+
23+ - ** ` vmem_set_offset ` ** / ** ` vmem_reset ` **
24+ - OFFSET モード用のオフセットを設定 / リセットします。
25+
26+ - ** ` vmem_set_mode ` **
27+ - 動作モードを設定します(IDENTITY / OFFSET / WALK)。
28+
29+ - ** ` vmem_set_phys2virt ` **
30+ - 物理→仮想変換関数を登録します(ページテーブル読み取り時に使用)。NULL を渡すとデフォルトの offset 翻訳が使われます。
Original file line number Diff line number Diff line change 11KERNEL_OFFSET EQU 0x10000 ; カーネルをロードするアドレス
2- SECTOR_COUNT EQU 43 ; 読み込むセクタの数
2+ SECTOR_COUNT EQU 38 ; 読み込むセクタの数
33START_SECTOR EQU 2 ; 開始するセクタ番号
44CYLINDER_NUM EQU 0 ; シリンダ番号
55HEAD_NUM EQU 0 ; ヘッド番号
Original file line number Diff line number Diff line change 66
77#ifdef TEST_TRUE
88// メモリマップとメモリのテスト
9- #define MEM_TEST
9+ // #define MEM_TEST
1010// 割り込みのテスト
11- #define INTERRUPT_TEST
11+ // #define INTERRUPT_TEST
1212// 割り込みベクタのテスト
13- #define INTERRUPT_VECTOR_TEST
13+ // #define INTERRUPT_VECTOR_TEST
1414// 割り込みハンドラでメモリのテスト
15- #define ALLOC_IRQ_TEST
15+ // #define ALLOC_IRQ_TEST
1616// GDT(セグメント)再構築テスト
17- #define GDT_TEST
17+ // #define GDT_TEST
1818// ページングのテスト
19- #define PAGING_TEST
19+ // #define PAGING_TEST
2020// 仮想メモリのテスト
2121#define VMEM_TEST
2222
You can’t perform that action at this time.
0 commit comments