[MIT6.828] LAB3总结

本文详细介绍了MIT6.828实验3的内容,包括异常和中断处理机制、用户环境的内存管理、异常处理函数的定义和IDT初始化、用户空间的数据检查以及单步调试功能的实现。讨论了如何通过中断处理程序、页错误处理、调试工具等提高系统的可靠性和调试效率。

LAB3:
Q1.What is the purpose of having an individual handler function for each exception/interrupt? (i.e., if all exceptions/interrupts were delivered to the same handler, what feature that exists in the current implementation could not be provided?)
A1.因为目前的中断机制不能给出足够的信息来在一个函数里面识别不同的中断,除非CPU可以自动保存中断向量这样可以分辨中断的数据给函数使用。

Q2.Did you have to do anything to make the user/softint program behave correctly? The grade script expects it to produce a general protection fault (trap 13), but softint's code says int $14. Why should this produce interrupt vector 13? What happens if the kernel actually allows softint's int $14 instruction to invoke the kernel's page fault handler (which is interrupt vector 14)?
A2.int 14 Page Fault并非一个用户可以直接调用的中断,在实现的时候是给与其内核级别DPL,所以用户直接访问的时候会产生保护错误,从而转到int 13 General Protection。如果内核允许用户直接调用int 14,用户调用时不会压入错误码,会导致栈错位。

Q3.The break point test case will either generate a break point exception or a general protection fault depending on how you initialized the break point entry in the IDT (i.e., your call to SETGATE from idt_init). Why? How did you need to set it in order to get the breakpoint exception to work as specified above?
A3.设置断点IDT的DPL为3即可让用户直接调用。

Q4.What do you think is the point of these mechanisms, particularly in light of what the user/softint test program does?
A4.我没看懂这问题问的什么意思,难道是让解释intel 中断权限机制?查手册就好了

E1.修改kern/pmap.c,分配并映射envs数组。
1、在i386_vm_init()内为envs分配空间,参考源文件内pages的分配方式,需要页对齐。


2、在page_init()内设置envs所在页状态为被占用。


3、在i386_vm_init()内映射envs到UENVS虚拟地址。


E2.在kern/env.c文件中,完成以下函数。
1、env_init():初始化env空闲链表env_free_list,并把envs数组全部元素都插入到链表,注意反向插入,使得第一次从链表取内容时返回envs[0]


2、env_setup_vm():初始化一个用户环境的虚拟内存空间。首先要要分配一页内存作为用户空间的页目录,其内容复制内核页目录,然后把VPT和UVPT映射这个页目录,注意要增加某些页的计数,使得这些页面可以正常回收。


3、segment_alloc():给用户空间分配指定大小的内存并映射到指定虚拟地址上,注意处理页对齐这样的操作,出错则panic。


4、load_icode():从指定内存中复制ELF程序到用户空间,并给用户分配栈。需要注意当前函数操作的是用户空间,所以需要使用用户的页目录,进行复制操作。不直接映射到用户空间而是复制的原因在于,这些程序处于内核空间,直接映射可能会让用户有机会操作内核其他数据,不安全。还需要注意的就是有些段的内存大小大于于ELF文件中的大小,多余的部分需要清零。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值