实验3环境初始化
Makefile里的gdb和之前不一样了!要添加$(QEMUOPTS),不然会导致没有挂载交换分区。
This commit is contained in:
parent
11043d4656
commit
4c81247971
2
.vscode/c_cpp_properties.json
vendored
2
.vscode/c_cpp_properties.json
vendored
@ -6,7 +6,7 @@
|
||||
"${workspaceFolder}/**",
|
||||
// "${workspaceFolder}/labcodes_answer/**/",
|
||||
// 由于按顺序搜索,所以如果这样的话搜索到lab1_result中的同名头文件就不会引用到lab2_result中的同名头文件导致错误
|
||||
"${workspaceFolder}/labcodes_answer/lab2_result/kern/mm/"
|
||||
"${workspaceFolder}/labcodes_answer/lab3_result/**/"
|
||||
],
|
||||
"defines": [],
|
||||
"compilerPath": "/usr/bin/gcc",
|
||||
|
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
@ -11,7 +11,7 @@
|
||||
"program": "bin/kernel",
|
||||
"args": [],
|
||||
"stopAtEntry": false,
|
||||
"cwd": "${workspaceFolder}/labcodes_answer/lab2_result",
|
||||
"cwd": "${workspaceFolder}/labcodes_answer/lab3_result",
|
||||
"environment": [],
|
||||
"externalConsole": false,
|
||||
"MIMode": "gdb",
|
||||
|
2
.vscode/tasks.json
vendored
2
.vscode/tasks.json
vendored
@ -9,7 +9,7 @@
|
||||
"env": {
|
||||
"DISPLAY": ":0",
|
||||
},
|
||||
"cwd": "${workspaceFolder}/labcodes_answer/lab2_result"
|
||||
"cwd": "${workspaceFolder}/labcodes_answer/lab3_result"
|
||||
},
|
||||
|
||||
"problemMatcher": [
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user