实验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}/**",
|
||||||
// "${workspaceFolder}/labcodes_answer/**/",
|
// "${workspaceFolder}/labcodes_answer/**/",
|
||||||
// 由于按顺序搜索,所以如果这样的话搜索到lab1_result中的同名头文件就不会引用到lab2_result中的同名头文件导致错误
|
// 由于按顺序搜索,所以如果这样的话搜索到lab1_result中的同名头文件就不会引用到lab2_result中的同名头文件导致错误
|
||||||
"${workspaceFolder}/labcodes_answer/lab2_result/kern/mm/"
|
"${workspaceFolder}/labcodes_answer/lab3_result/**/"
|
||||||
],
|
],
|
||||||
"defines": [],
|
"defines": [],
|
||||||
"compilerPath": "/usr/bin/gcc",
|
"compilerPath": "/usr/bin/gcc",
|
||||||
|
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
@ -11,7 +11,7 @@
|
|||||||
"program": "bin/kernel",
|
"program": "bin/kernel",
|
||||||
"args": [],
|
"args": [],
|
||||||
"stopAtEntry": false,
|
"stopAtEntry": false,
|
||||||
"cwd": "${workspaceFolder}/labcodes_answer/lab2_result",
|
"cwd": "${workspaceFolder}/labcodes_answer/lab3_result",
|
||||||
"environment": [],
|
"environment": [],
|
||||||
"externalConsole": false,
|
"externalConsole": false,
|
||||||
"MIMode": "gdb",
|
"MIMode": "gdb",
|
||||||
|
2
.vscode/tasks.json
vendored
2
.vscode/tasks.json
vendored
@ -9,7 +9,7 @@
|
|||||||
"env": {
|
"env": {
|
||||||
"DISPLAY": ":0",
|
"DISPLAY": ":0",
|
||||||
},
|
},
|
||||||
"cwd": "${workspaceFolder}/labcodes_answer/lab2_result"
|
"cwd": "${workspaceFolder}/labcodes_answer/lab3_result"
|
||||||
},
|
},
|
||||||
|
|
||||||
"problemMatcher": [
|
"problemMatcher": [
|
||||||
|
@ -210,7 +210,8 @@ endif
|
|||||||
# files for grade script
|
# files for grade script
|
||||||
|
|
||||||
TARGETS: $(TARGETS)
|
TARGETS: $(TARGETS)
|
||||||
|
targets: $(TARGETS)
|
||||||
|
all: $(TARGETS)
|
||||||
.DEFAULT_GOAL := TARGETS
|
.DEFAULT_GOAL := TARGETS
|
||||||
|
|
||||||
QEMUOPTS = -hda $(UCOREIMG) -drive file=$(SWAPIMG),media=disk,cache=writeback
|
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
|
$(V)$(QEMU) -serial mon:stdio $(QEMUOPTS) -nographic
|
||||||
|
|
||||||
TERMINAL := gnome-terminal
|
TERMINAL := gnome-terminal
|
||||||
|
gdb: $(UCOREIMG) $(SWAPIMG)
|
||||||
|
$(V)$(QEMU) -S -s -parallel stdio $(QEMUOPTS) -serial null
|
||||||
debug: $(UCOREIMG) $(SWAPIMG)
|
debug: $(UCOREIMG) $(SWAPIMG)
|
||||||
$(V)$(QEMU) -S -s -parallel stdio $(QEMUOPTS) -serial null &
|
$(V)$(QEMU) -S -s -parallel stdio $(QEMUOPTS) -serial null &
|
||||||
$(V)sleep 2
|
$(V)sleep 2
|
||||||
|
@ -260,13 +260,32 @@ check_pgfault(void) {
|
|||||||
*(char *)(addr + i) = i;
|
*(char *)(addr + i) = i;
|
||||||
sum += 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 ++) {
|
for (i = 0; i < 100; i ++) {
|
||||||
sum -= *(char *)(addr + i);
|
sum -= *(char *)(addr + i);
|
||||||
}
|
}
|
||||||
assert(sum == 0);
|
assert(sum == 0);
|
||||||
|
|
||||||
page_remove(pgdir, ROUNDDOWN(addr, PGSIZE));
|
page_remove(pgdir, ROUNDDOWN(addr, PGSIZE));
|
||||||
free_page(pde2page(pgdir[0]));
|
free_page(pa2page(pgdir[0]));
|
||||||
pgdir[0] = 0;
|
pgdir[0] = 0;
|
||||||
|
|
||||||
mm->pgdir = NULL;
|
mm->pgdir = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user