实验3环境初始化

Makefile里的gdb和之前不一样了!要添加$(QEMUOPTS),不然会导致没有挂载交换分区。
This commit is contained in:
2024-04-28 22:00:55 +08:00
parent 11043d4656
commit 4c81247971
5 changed files with 27 additions and 6 deletions

View File

@@ -210,7 +210,8 @@ endif
# files for grade script
TARGETS: $(TARGETS)
targets: $(TARGETS)
all: $(TARGETS)
.DEFAULT_GOAL := TARGETS
QEMUOPTS = -hda $(UCOREIMG) -drive file=$(SWAPIMG),media=disk,cache=writeback
@@ -225,7 +226,8 @@ qemu-nox: $(UCOREIMG) $(SWAPIMG)
$(V)$(QEMU) -serial mon:stdio $(QEMUOPTS) -nographic
TERMINAL := gnome-terminal
gdb: $(UCOREIMG) $(SWAPIMG)
$(V)$(QEMU) -S -s -parallel stdio $(QEMUOPTS) -serial null
debug: $(UCOREIMG) $(SWAPIMG)
$(V)$(QEMU) -S -s -parallel stdio $(QEMUOPTS) -serial null &
$(V)sleep 2

View File

@@ -260,13 +260,32 @@ check_pgfault(void) {
*(char *)(addr + i) = i;
sum += i;
}
for (i = 0; i < 100; i ++) {
// 获取页目录项和页表项
pte_t *pte = get_pte(pgdir, addr + i, 0);
if (pte != NULL && (*pte & PTE_P)) {
// 检查访问位
if (*pte & PTE_A) {
// A 位已置位
cprintf("Access bit is set.\n");
} else {
// A 位未置位
cprintf("Access bit is not set.\n");
}
} else {
// 页表项不存在或未呈现
cprintf("PTE not present.\n");
}
}
for (i = 0; i < 100; i ++) {
sum -= *(char *)(addr + i);
}
assert(sum == 0);
page_remove(pgdir, ROUNDDOWN(addr, PGSIZE));
free_page(pde2page(pgdir[0]));
free_page(pa2page(pgdir[0]));
pgdir[0] = 0;
mm->pgdir = NULL;