Files
ViperOS/VKernel
TermiNexus 07f4dbbb78 feat(vkernel/paging): 1GB 大页拆分(1GB->PD),MapPage/MapLargePage/UnMapPage 不再把大页当 PD 写坏内存
- 新增 _split_1gb_to_pd:PDPTE.PS=1 时新建 PD 并把 1GB 拆成 512 个 2MB 条目(继承 PCD/PWT/USER/NX;新 PDPTE 是**非叶条目**,只带 PRESENT|WRITABLE|USER,绝不带 bit63(NX),否则 & ~0xFFF 派生出的表指针非规范 = 刚修的 #GP 根因);条目不存在/已是 PD 时直接返回 1,建 PD 仍由调用方既有逻辑负责

- MapPage:取到 PDPT 后先拆分,再走既有 2MB/4KB 逻辑(否则 pd.entries 会写进大页内存,读到随机“表项”)

- MapLargePage:同样先拆分,再写入 2MB 条目

- UnMapPage:先拆分再撤除命中的条目(此前会把大页内存内容当表项 → 往派生出的随机地址写 0,即“fb/pitch/w/h 被清零”那类隐性写坏)
2026-10-14 18:14:47 +08:00
..