实验3环境初始化
Makefile里的gdb和之前不一样了!要添加$(QEMUOPTS),不然会导致没有挂载交换分区。
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user