◆ kern/debug/

    kdebug.c:修改:解析用户进程的符号信息表示(可不用理会)

    ◆ kern/mm/ (与本次实验有较大关系)

    memlayout.h:修改:增加了用户虚存地址空间的图形表示和宏定义 (需仔细理解)。

    pmm.[ch]:修改:添加了用于进程退出(do_exit)的内存资源回收的page_remove_pte、unmap_range、exit_range函数和用于创建子进程(do_fork)中拷贝父进程内存空间的copy_range函数,修改了pgdir_alloc_page函数

    vmm.[ch]:修改:扩展了mm_struct数据结构,增加了一系列函数

    • mm_map/dup_mmap/exit_mmap:设定/取消/复制/删除用户进程的合法内存空间

    • user_mem_check:搜索vma链表,检查是否是一个合法的用户空间范围

    ◆ kern/process/ (与本次实验有较大关系)

    proc.[ch]:修改:扩展了proc_struct数据结构。增加或修改了一系列函数

    • copy_mm:复制用户进程的内存空间和设置相关内存管理(如页表等)信息

    • do_exit:释放进程自身所占内存空间和相关内存管理(如页表等)信息所占空间,唤醒父进程,好让父进程收了自己,让调度器切换到其他进程

    • load_icode:被do_execve调用,完成加载放在内存中的执行程序到进程空间,这涉及到对页表等的修改,分配用户栈

    • do_yield:让调度器执行一次选择新进程的过程

    • do_wait:父进程等待子进程,并在得到子进程的退出消息后,彻底回收子进程所占的资源(比如子进程的内核栈和进程控制块)

    • do_kill:给一个进程设置PF_EXITING标志(“kill”信息,即要它死掉),这样在trap函数中,将根据此标志,让进程退出

    ◆ kern/trap/

    trap.c:修改:在idt_init函数中,对IDT初始化时,设置好了用于系统调用的中断门(idt[T_SYSCALL])信息。这主要与syscall的实现相关

    ◆ user/*