- // 将内核占据的页设为已占用
- size_t pg_count = (uintptr_t)(&__kernel_end - &__kernel_start) >> PG_SIZE_BITS;
- pmm_mark_chunk_occupied(V2P(&__kernel_start) >> PG_SIZE_BITS, pg_count);
- printf("[MM] Allocated %d pages for kernel.\n", pg_count);
-
-
- size_t vga_buf_pgs = VGA_BUFFER_SIZE >> PG_SIZE_BITS;
-
- // 首先,标记VGA部分为已占用
- pmm_mark_chunk_occupied(VGA_BUFFER_PADDR >> PG_SIZE_BITS, vga_buf_pgs);
-
- // 重映射VGA文本缓冲区(以后会变成显存,i.e., framebuffer)
- for (size_t i = 0; i < vga_buf_pgs; i++)
- {
- vmm_map_page(
- (void*)(VGA_BUFFER_VADDR + (i << PG_SIZE_BITS)),
- (void*)(VGA_BUFFER_PADDR + (i << PG_SIZE_BITS)),
- PG_PREM_RW
- );
- }
-
- // 更新VGA缓冲区位置至虚拟地址
- tty_set_buffer((void*)VGA_BUFFER_VADDR);
-
- printf("[MM] Mapped VGA to %p.\n", VGA_BUFFER_VADDR);
-}
+ // 将内核占据的页,包括前1MB,hhk_init 设为已占用
+ size_t pg_count = V2P(&__kernel_end) >> PG_SIZE_BITS;
+ pmm_mark_chunk_occupied(KERNEL_PID, 0, pg_count, PP_FGLOCKED);