项目组成与执行流
项目组成
用户进程内存管理
kern/mm/pmm.[ch]
:添加了用于进程退出(do_exit
)的内存资源回收的page_remove_pte
、unmap_range
、exit_range
函数和用于创建子进程(do_fork
)中拷贝父进程内存空间的copy_range
函数,修改了pgdir_alloc_page
函数
kern/mm/vmm.[ch]
:修改:扩展了mm_struct
数据结构,增加了一系列函数
mm_map
/dup_mmap
/exit_mmap
:设定/取消/复制/删除用户进程的合法内存空间copy_from_user
/copy_to_user
:用户内存空间内容与内核内存空间内容的相互拷贝的实现user_mem_check
:搜索vma链表,检查是否是一个合法的用户空间范围
用户进程管理
kern/process/proc.[ch]
:扩展了proc_struct
数据结构。增加或修改了一系列函数
setup_pgdir/put_pgdir
:创建并设置/释放页目录表copy_mm
:复制用户进程的内存空间和设置相关内存管理(如页表等)信息do_exit
:释放进程自身所占内存空间和相关内存管理(如页表等)信息所占空间,唤醒父进程,好让父进程收了自己,让调度器切换到其他进程load_icode
:被do_execve
调用,完成加载放在内存中的执行程序到进程空间,这涉及到对页表等的修改,分配用户栈do_execve
:先回收自身所占用户空间,然后调用load_icode
,用新的程序覆盖内存空间,形成一个执行新程序的新进程do_yield
:让调度器执行一次选择新进程的过程do_wait
:父进程等待子进程,并在得到子进程的退出消息后,彻底回收子进程所占的资源(比如子进程的内核栈和进程控制块)do_kill
:给一个进程设置PF_EXITING
标志(“kill”信息,即要它死掉),这样在trap函数中,将根据此标志,让进程退出KERNEL_EXECVE/__KERNEL_EXECVE/__KERNEL_EXECVE2
:被user_main调用,执行一用户进程
执行流
结合前面所述自行理解、总结。
最后更新于