欢迎来到天天文库
浏览记录
ID:38188147
大小:107.40 KB
页数:4页
时间:2019-05-25
《Lab4补充讲义》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Lab4补充讲义Lab4各文件注释:User目录下文件包含了运行在用户态下的程序,其中需要注意的文件如下:a.printf.c运行在用户下,即在用户程序中的printf函数通过执行该文件实现。代码无须修改,大家在lab2已经阅读过。其中值得注意的是,最终的输出通过sys_cputs系统调用;b.pingpong1.c用于PartC的调试,其中关于fork的实现值得我们借鉴以实现自己的fork;c.lib.h文件主要包含了用户程序需要调用的函数声明,其中sys_env_alloc系统调用的用户部分在该文件实现;
2、d.bintoc文件主要协助用户进程的装载,感兴趣的同学可以阅读bintocbintoc.c文件;e.entry.S定义了用户进程的入口以及页错误处理函数的入口的数据段、代码段;f.pgfault.c实现了用户程序可调用的页错误处理函数的设置函数,包含用户异常栈的初始化和页错误处理函数的设置;g.libos.c被entry.S调用,用户程序在该文件被调用;h.ipc.c包含用户程序下执行的进程通信函数(发送和接受),注意其中体现出的通信协议;i.fork.c该文件是实现自己fork函数的关键,其中的pgfa
3、ult是用户下的页错误的中断处理函数;j.syscall.c实现了系统调用的用户部分,syscall函数通过内联汇编实现,通过该函数传递参数,陷入内核,且汇总了其他的系统调用;k.其他.c文件类似于我们程序设计课中编写的c语言小程序,其中umain函数是程序的入口点,被g所述文件调用。注:标记星号的文件,需要修改,添加代码Kern目录下文件包含了运行在内核态下的程序,其中需要注意的文件如下:a.locore.S内核代码的入口点,调用kern/init.c中的i386_init函数;定义中断handler函数;
4、b.init.c初始化,创建用户进程,调度;c.env.c与lab3相似,主要是进程创建、销毁、切换的相关函数;d.pmap.c与lab2相似,主要是页式管理的相关函数;e.sched.c进程调度函数,注意在lab4中,schedule实现确保在无其他进程运行时,运行idle;否则轮转运行非idle进程。idle进程,首先被创建,所以进程号为0;f.syscall.c系统调用的内核部分实现g.trap.c中断处理,尤其是handler的dispatch,其中页错误处理函数是关键。以上文件均需要修改Lab4内容
5、概述:一.objdump参数.o文件;一般情况将结果输出到文件,使用“>”;常用参数-t,输出符号表,-d反汇编;更多参看可以man帮助或者自己找资料二.整合代码手动整合,仔细阅读提示。确保出现pdf中说明的结果。注:第一次make的时候,可能会出现user/bintoc文件权限的错误,解决方案chmod+x文件,增加该文件的执行权限三.系统调用设置方法,如lab3中断handler设置,注意权限为用户权限3syscall在内核和用户下都有实现(见kern/syscall.c与user/syscall.c)。
6、用户下主要传递参数,产生中断进入内核;内核下具体实现系统调用的操作;四.用户模式用户进程的总入口定义在user/entry.S,注意里面的_start标号开始的部分;参数通过用户栈传递用户进程的创建与运行:ENV_CREATE宏与schedule/sys-schedule用户下printf和内核的printf的区别用户下访问env结构和pagetable的方法:envs,pages,vpt,vpd(定义见entry.S)。lab2中ENV、UPAGES、VPT权限设为用户只读权限,为用户访问env结构,页,页
7、表,页目录提供接口。envs、pages的定义较简单,这里不做说明;vpt,vpd较复杂,大家注意理解,在编写用户程序,尤其是fork时要用到;摘自mmu.h:externvolatilePtevpt[];//VAof"virtualpagetable"externvolatilePdevpd[];//VAofcurrentpagedirectory摘自pmap.c:RecursivelyinsertPDinitselfasapagetable,toformavirtualpagetableatvirtual
8、addressVPT.(Fornow,youdon'thaveunderstoodthegreaterpurpose^_^ofthefollowingtwolines.)//Permissions:kernelRW,userNONEpgdir[PDX(VPT)]=PADDR(pgdir)PTE_WPTE_P;//sameforUVPT//Permissions:kernelR,userRpgdir[
此文档下载收益归作者所有