merge updates

This commit is contained in:
chyyuu 2018-04-15 18:57:28 +08:00
commit 61d5284699
8 changed files with 10 additions and 10 deletions

View File

@ -37,7 +37,7 @@ si
si
...
```
4 此时的`CS=0xf, IP=fff0`如果想看BIOS的代码
4 此时的`CS=0xf000, EIP=0xfff0`如果想看BIOS的代码
```
x /2i 0xffff0
```

View File

@ -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释放某虚地址所在的页并取消对应二级页表项的映射需要编程**

View File

@ -52,7 +52,7 @@ npage = maxpa / PGSIZE
```
这样我们就可以预估出管理页级物理内存空间所需的Page结构的内存空间所需的内存大小为
```
sizeof(struct Page) * npage)
sizeof(struct Page) * npage
```
由于bootloader加载ucore的结束地址用全局指针变量end记录以上的空间没有被使用所以我们可以把end按页大小为边界去整后作为管理页级物理内存空间所需的Page结构的内存空间记为
```

View File

@ -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位为索引值对应页表项的内容为
```

View File

@ -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`函数中的一条语句:
```

View File

@ -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。

View File

@ -26,7 +26,7 @@ succeeded!”的输出表示练习1基本正确。
请在实验报告中简要说明你的设计实现过程。请回答如下问题:
- 请描述页目录项Pag Director Entry和页表Page Table Entry中组成部分对ucore实现页替换算法的潜在用处。
- 请描述页目录项Page Directory Entry和页表Page Table Entry中组成部分对ucore实现页替换算法的潜在用处。
- 如果ucore的缺页服务例程在执行过程中访问内存出现了页访问异常请问硬件要做哪些事情
#### 练习2补充完成基于FIFO的页面替换算法需要编程

View File

@ -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);