From 9c6ad3d9f98af485131181af47a8f41f7b917f3f Mon Sep 17 00:00:00 2001 From: leavan Date: Sun, 11 Mar 2018 04:09:29 +0800 Subject: [PATCH 1/7] Update lab1_5_appendix.md --- lab1/lab1_5_appendix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab1/lab1_5_appendix.md b/lab1/lab1_5_appendix.md index 65565cf..3568740 100644 --- a/lab1/lab1_5_appendix.md +++ b/lab1/lab1_5_appendix.md @@ -37,7 +37,7 @@ si si ... ``` -4 此时的`CS=0xf, IP=fff0`,如果想看BIOS的代码 +4 此时的`CS=0xf000, EIP=0xfff0`,如果想看BIOS的代码 ``` x /2i 0xffff0 ``` From 854a64642310651af5a2b5243b43a2babd8b69e6 Mon Sep 17 00:00:00 2001 From: Ben Pig Chu Date: Mon, 12 Mar 2018 22:57:12 +0800 Subject: [PATCH 2/7] =?UTF-8?q?Fix=20typos:=20pag=20director=20->=20page?= =?UTF-8?q?=20directory=20=E7=89=A9=E7=90=86=E5=9C=B0=E5=9D=80=E5=9C=A80~4?= =?UTF-8?q?MB=E4=B9=8B=E5=86=85/=E5=A4=96=E7=9A=84=E4=B8=89=E8=80=85?= =?UTF-8?q?=E6=98=A0=E5=B0=84=E5=85=B3=E7=B3=BB=20->=20=E7=BA=BF=E6=80=A7?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E5=9C=A80~4MB=E4=B9=8B=E5=86=85/=E5=A4=96?= =?UTF-8?q?=E7=9A=84=E4=B8=89=E8=80=85=E6=98=A0=E5=B0=84=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab2/lab2_3_2_1_phymemlab_exercise.md | 2 +- lab2/lab2_3_3_5_4_maping_relations.md | 4 ++-- lab3/lab3_2_1_exercises.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lab2/lab2_3_2_1_phymemlab_exercise.md b/lab2/lab2_3_2_1_phymemlab_exercise.md index 85a07fd..1b2f002 100644 --- a/lab2/lab2_3_2_1_phymemlab_exercise.md +++ b/lab2/lab2_3_2_1_phymemlab_exercise.md @@ -32,7 +32,7 @@ kern/mm/pmm.c,实现其功能。请仔细查看和理解get\_pte函数中的 图1 get\_pte函数的调用关系图 请在实验报告中简要说明你的设计实现过程。请回答如下问题: - - 请描述页目录项(Pag Director Entry)和页表(Page Table Entry)中每个组成部分的含义和以及对ucore而言的潜在用处。 + - 请描述页目录项(Page Directory Entry)和页表(Page Table Entry)中每个组成部分的含义和以及对ucore而言的潜在用处。 - 如果ucore执行过程中访问内存,出现了页访问异常,请问硬件要做哪些事情? **练习3:释放某虚地址所在的页并取消对应二级页表项的映射(需要编程)** diff --git a/lab2/lab2_3_3_5_4_maping_relations.md b/lab2/lab2_3_3_5_4_maping_relations.md index 3f7adf9..d510fd0 100644 --- a/lab2/lab2_3_3_5_4_maping_relations.md +++ b/lab2/lab2_3_3_5_4_maping_relations.md @@ -48,8 +48,8 @@ SECTIONS { **第三个阶段**从enable_page函数开始,到执行gdt_init函数(在kern/mm/pmm.c中)之前,启动了页映射机制,但没有第三次更新段映射。这时的虚拟地址,线性地址以及物理地址之间的映射关系比较微妙: ``` - lab2 stage 3: virt addr - 0xC0000000 = linear addr = phy addr + 0xC0000000 # 物理地址在0~4MB之外的三者映射关系 - virt addr - 0xC0000000 = linear addr = phy addr # 物理地址在0~4MB之内的三者映射关系 + lab2 stage 3: virt addr - 0xC0000000 = linear addr = phy addr + 0xC0000000 # 线性地址在0~4MB之外的三者映射关系 + virt addr - 0xC0000000 = linear addr = phy addr # 线性地址在0~4MB之内的三者映射关系 ``` 请注意`pmm_init`函数中的一条语句: ``` diff --git a/lab3/lab3_2_1_exercises.md b/lab3/lab3_2_1_exercises.md index 2383ff1..3372baf 100644 --- a/lab3/lab3_2_1_exercises.md +++ b/lab3/lab3_2_1_exercises.md @@ -26,7 +26,7 @@ succeeded!”的输出,表示练习1基本正确。 请在实验报告中简要说明你的设计实现过程。请回答如下问题: - - 请描述页目录项(Pag Director Entry)和页表(Page Table Entry)中组成部分对ucore实现页替换算法的潜在用处。 + - 请描述页目录项(Page Directory Entry)和页表(Page Table Entry)中组成部分对ucore实现页替换算法的潜在用处。 - 如果ucore的缺页服务例程在执行过程中访问内存,出现了页访问异常,请问硬件要做哪些事情? #### 练习2:补充完成基于FIFO的页面替换算法(需要编程) From 2df5f906a38e1421783606228683d1bef7e6fc2c Mon Sep 17 00:00:00 2001 From: Ben Pig Chu Date: Mon, 19 Mar 2018 22:11:44 +0800 Subject: [PATCH 3/7] =?UTF-8?q?fix=20typos:=20=E9=A1=B5=E8=A1=A8=EF=BC=88P?= =?UTF-8?q?age=20Table=20Entry=EF=BC=89->=20=E9=A1=B5=E8=A1=A8=E9=A1=B9?= =?UTF-8?q?=EF=BC=88Page=20Table=20Entry=EF=BC=89=20=E5=92=8C=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=20->=20=E4=BB=A5=E5=8F=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab2/lab2_3_2_1_phymemlab_exercise.md | 2 +- lab3/lab3_2_1_exercises.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lab2/lab2_3_2_1_phymemlab_exercise.md b/lab2/lab2_3_2_1_phymemlab_exercise.md index 1b2f002..bdeef07 100644 --- a/lab2/lab2_3_2_1_phymemlab_exercise.md +++ b/lab2/lab2_3_2_1_phymemlab_exercise.md @@ -32,7 +32,7 @@ kern/mm/pmm.c,实现其功能。请仔细查看和理解get\_pte函数中的 图1 get\_pte函数的调用关系图 请在实验报告中简要说明你的设计实现过程。请回答如下问题: - - 请描述页目录项(Page Directory Entry)和页表(Page Table Entry)中每个组成部分的含义和以及对ucore而言的潜在用处。 + - 请描述页目录项(Page Directory Entry)和页表项(Page Table Entry)中每个组成部分的含义以及对ucore而言的潜在用处。 - 如果ucore执行过程中访问内存,出现了页访问异常,请问硬件要做哪些事情? **练习3:释放某虚地址所在的页并取消对应二级页表项的映射(需要编程)** diff --git a/lab3/lab3_2_1_exercises.md b/lab3/lab3_2_1_exercises.md index 3372baf..326a3d9 100644 --- a/lab3/lab3_2_1_exercises.md +++ b/lab3/lab3_2_1_exercises.md @@ -26,7 +26,7 @@ succeeded!”的输出,表示练习1基本正确。 请在实验报告中简要说明你的设计实现过程。请回答如下问题: - - 请描述页目录项(Page Directory Entry)和页表(Page Table Entry)中组成部分对ucore实现页替换算法的潜在用处。 + - 请描述页目录项(Page Directory Entry)和页表项(Page Table Entry)中组成部分对ucore实现页替换算法的潜在用处。 - 如果ucore的缺页服务例程在执行过程中访问内存,出现了页访问异常,请问硬件要做哪些事情? #### 练习2:补充完成基于FIFO的页面替换算法(需要编程) From be60745a5f97fe9be2c97a6a77554bab2f850897 Mon Sep 17 00:00:00 2001 From: LuChengTHU Date: Thu, 22 Mar 2018 19:52:42 +0800 Subject: [PATCH 4/7] Modify Lab2 ucore docs --- lab2/lab2_3_3_5_3_setup_paging_map.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab2/lab2_3_3_5_3_setup_paging_map.md b/lab2/lab2_3_3_5_3_setup_paging_map.md index 883da6b..5b9ad82 100644 --- a/lab2/lab2_3_3_5_3_setup_paging_map.md +++ b/lab2/lab2_3_3_5_3_setup_paging_map.md @@ -15,7 +15,7 @@ virt addr = phy addr + 0xC0000000 ``` 设一个32bit线性地址la有一个对应的32bit物理地址pa,如果在以la的高10位为索引值的页目录项中的存在位(PTE\_P)为0,表示缺少对应的页表空间,则可通过alloc\_page获得一个空闲物理页给页表,页表起始物理地址是按4096字节对齐的,这样填写页目录项的内容为 ``` - 页目录项内容 = (页表起始物理地址 &0x0FFF) | PTE_U | PTE_W | PTE_P + 页目录项内容 = (页表起始物理地址 & ~0x0FFF) | PTE_U | PTE_W | PTE_P ``` 进一步对于页表中以线性地址la的中10位为索引值对应页表项的内容为 ``` From b856489941085d96ad68cbe54e59cc9bcf4abbe8 Mon Sep 17 00:00:00 2001 From: LuChengTHU Date: Sun, 25 Mar 2018 12:14:57 +0800 Subject: [PATCH 5/7] Fix a code bug --- lab5/lab5_3_4_syscall.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab5/lab5_3_4_syscall.md b/lab5/lab5_3_4_syscall.md index 3acb8f4..46dc1a2 100644 --- a/lab5/lab5_3_4_syscall.md +++ b/lab5/lab5_3_4_syscall.md @@ -17,7 +17,7 @@ idt_init(void) { extern uintptr_t __vectors[]; int i; for (i = 0; i < sizeof(idt) / sizeof(struct gatedesc); i ++) { - SETGATE(idt[i], 1, GD_KTEXT, __vectors[i], DPL_KERNEL); + SETGATE(idt[i], 0, GD_KTEXT, __vectors[i], DPL_KERNEL); } SETGATE(idt[T_SYSCALL], 1, GD_KTEXT, __vectors[T_SYSCALL], DPL_USER); lidt(&idt_pd); From d1626f33bccaf70f1de2b5c71bcf7d6b5027a9a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=9D=BF=E7=87=AE?= Date: Mon, 26 Mar 2018 17:30:41 +0800 Subject: [PATCH 6/7] Fix typo in lab2 sizeof(struct Page) * npage) -> sizeof(struct Page) * npage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李睿燮 --- lab2/lab2_3_3_3_phymem_pagelevel.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lab2/lab2_3_3_3_phymem_pagelevel.md b/lab2/lab2_3_3_3_phymem_pagelevel.md index 14c335c..0c737f1 100644 --- a/lab2/lab2_3_3_3_phymem_pagelevel.md +++ b/lab2/lab2_3_3_3_phymem_pagelevel.md @@ -52,7 +52,7 @@ npage = maxpa / PGSIZE ``` 这样,我们就可以预估出管理页级物理内存空间所需的Page结构的内存空间所需的内存大小为: ``` -sizeof(struct Page) * npage) +sizeof(struct Page) * npage ``` 由于bootloader加载ucore的结束地址(用全局指针变量end记录)以上的空间没有被使用,所以我们可以把end按页大小为边界去整后,作为管理页级物理内存空间所需的Page结构的内存空间,记为: ``` From 77bff26f89863ba2e731a7cf52e606f2416265bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=98=8E=E5=8D=8E?= Date: Tue, 27 Mar 2018 12:46:14 +0800 Subject: [PATCH 7/7] fix lab2 self_mapping.md --- lab2/lab2_3_3_6_self_mapping.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lab2/lab2_3_3_6_self_mapping.md b/lab2/lab2_3_3_6_self_mapping.md index 9cad48b..73e9b6b 100644 --- a/lab2/lab2_3_3_6_self_mapping.md +++ b/lab2/lab2_3_3_6_self_mapping.md @@ -45,12 +45,12 @@ boot\_pgdir[PDX(VPT)] = PADDR(boot\_pgdir) | PTE\_P | PTE\_W; 所以最大内核虚地址KERNTOP的页目录项虚地址为 ``` -vpd+0xF8000000/0x400000=0xFAFEB000+0x3E0=0xFAFEB3E0 +vpd+0xF8000000/0x400000*4=0xFAFEB000+0x3E0*4=0xFAFEBF80 ``` 最大内核虚地址KERNTOP的页表项虚地址为: ``` -vpt+0xF8000000/0x1000=0xFAC00000+0xF8000=0xFACF8000 +vpt+0xF8000000/0x1000*4=0xFAC00000+0xF8000*4=0xFAFE0000 ``` > 需要注意,页目录项和页表项是4字节对齐的。从上面的设置可以看出KERNTOP/4M后的值是4字节对齐的,所以这样算出来的页目录项和页表项地址的最后两位一定是0。