




免费预览已结束,剩余7页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
我的系统版本Ubuntu 12.04 AMD64的gcc 4.6.3的。装了pintos 和bochs pintos project1 已经通过。27个test已经通过现在的问题:进入project2 后出现了用户文件加载失败。照网上的一个改法,改了后又出现page fault at c0000008.下面先看一下是怎么遇到问题的。我是照那个英文的官方文档做的:1. 编译example里的文件,这是我们用的用户文件。 wygwyg-pc:$ cd OSstep/pintos8/src/examples/wygwyg-pc:/OSstep/pintos8/src/examples$ make完成后如下:我们要用的是里的echo可执行文件2. 进入src/userprog 文件夹3. 然后make 编译好后在当前目录下出现了build 文件夹4. 进入build文件夹: cd build5. 制作大小为2M的虚拟硬盘:pintos-mkdisk filesys.dsk -filesys-size=2 此时多了一个filesys.dsk,这就是虚拟硬盘了。6. 格式化虚拟硬盘 pintos -f -q出现上图说明成功。7. 复制echo文件到 pintos 的虚拟硬盘filesys.dskpintos -p ././example/echo -a echo - -q执行后出现:说明成功。8. 接下来运行用户文件 pintos run echo为什么不是pintos run echo x呢?因为我们还未实现参数分离功能,这样会把”echo x”当成一个文件名,显然不存在”echo x”这个文件,加载,必然失败。看似成功了,其实不然,当然也有可能成功了,如果你已经成功,那就不必做任何修改。如何验证成功与否,后面会提到。我就在这种失败的情况下写了好久,最后发现,根本没有加载echo文件。9. 打开src/userprog/process.c找到start_process (void *file_name_)函数如下图修改:选中的是要新加的然后make再pintos run echo我是很不幸,出现 load user program failed-_-!唉,program 打错了。只是个输出提示而已。但已经证明的是用户程序echo根本没有加载。 10.于是我百度了下,原来是elf文件有问题。这个echo 是个elf文件,但是其中的入口地址是0x0000000. 而pintos 去不映射0x1000以下的内存,所以失败了。11.找到load函数,经过调试发现是下图中的 if(validate_segment(&phdr, file)失败了,12.所以进入validate_segment(&phdr, file)这个函数,找到问题所在了。原来是if(phdr-p_vaddrPGSIZE)失败了于是我照网上据说,把if(phdr-p_vaddrp_offsetp_vaddr p_offset echo.txt用vi编辑器打开生成的echo.txt文件vim echo.txt仔细观察发现问题了:在08048130:中,开始两行就有问题sub $0x1c,%espmov 0x24(%esp),%eax我也不知道这是干什么。但是0x24-0x1c=8不就是c0000008?现在我们须要知道pintos的用户栈的范围PHYS_BASE=0xC0000000 也就是3G再看看pintos 源代码中设置用户栈的函数在load()函数中有调用,如下图找到setup_stack()函数的实现代码:看这个函数发现,esp被设置成了PHYS_BASE (*esp=PHYS_BASE)也就是说,用户的栈指针esp=0xc0000000当然栈是向下扩展的,把数据压入栈只会让esp减小,不会越界访问大小PHYS_BASE的内存,可是sub $0x1c,%esp /esp=esp-0x1cmov 0x24(%esp),%eax /把内存(esp+0x24)这个地址里的内容装入eax这两句,先把esp 减小0x1c,又要访问esp+0x24内存位置的数据。那esp不就是0xc0000000-0x1c+0x24=0xc0000008了,这就是在用户程序中访问了核心内存,引发了page fault at c0000008.解决方案:既然是这样,那我们在setup_stack()函数中把esp减小8不就OK了?看下图:我减了0x20,只要大于8就行。这样做会不会引发什么问题呢?我也不清楚,在此时:2013年8月25日17:26分我还不清楚,但是后续写代码中如果遇到问题再补充。我的思考:当代码从高优先级ring0到低优先级ring3切换时要切换栈,要复制ring0 的栈里的一部分东西到ring3的栈,此时我们这样做,可能会找不到ring0代码传给ring3代码的参数。16再次make pintos run echo出现了system call! 这里是由于我们没有实现系统调用,而printf函数要调用 write.这个我们要后来实现。17.当然,经过几天的纠结,你可能还是不相信现在就OK了,我这里有一个证明方法:虽然目前在echo中不能使用printf函数;我已经想办法证明了echo这个用户程序已经被运行了。证明方法:我在echo.c中加入了int*t=0xC0000008;*t=3;编译.弄好,运行后:出现了pagefaultat0xC0000008,无权访问这个位置。我又改了*t=0xC0000009,运行后出现pagefaultat0xC0000009;这说明了*t=3;这句运行了,也就是说运行到了echo.c中的代码。我还在调试的时候在syscall_handler()printf(systemcall);/在这句设了断点在gdb中用bt指令看了调用栈,发现,如果在echo.c中有printf函数,的确是在write这个函数中执行了int0x30.而删除了echo.c中所有printf函数,当然echo.c中其实那个main函数已经是空的了,此时在tell这个函数中执行了int0x30;原因尚未搞清楚。不过,每个用户程序结束时都要调用exit这个函数,里面也有int0x30.总之现在可以确定的是,用户程序(echo)已经可以被加载并且执行了。接下来应该可以进入任务了,完成那些系统调用。18.这样的用户程序和main线程是同一优先线,将被交替执行可能出现了用户程序还没运行完而main线程先结束,这就是为什么上而的system call! 会出现在Execution echo complete之后。当然这是要通过实现process_wait()函数来解决父子进程同步问题。现在我们只要把用户进程优先级改高一些,做个测试。看到,用户进程的优先级被设为了PRI_DEFAULT+1,而main线程的优先级为PRI_DEFAULT还是makepintos run echo看到systmep call!已经在Executing echo和 Execution of echo complete.之间了。-2013年8月25日 今日阅读英文文档,猛然发现3.2 Suggested Order of ImplementationWe suggest first implementing the following, which can happen in parallel: Argument passing (see Section 3.3.3 Argument Passing, page 29). Every user programwill page fault immediately until
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 发展新质生产力的时代价值
- 医患关系论文精要2000字
- 青年在新质生产力发展中的行动路径
- 劳模工匠讲新质生产力
- 2025年输血学ABO血型配型技术应用模拟测试卷答案及解析
- 2025年耳鼻喉科常见耳疾诊治知识竞赛试卷答案及解析
- 2025年眼科常见疾病的诊断与治疗综合测试卷答案及解析
- 2025年康复医学评估工具运用考试答案及解析
- 乏燃料后处理新质生产力
- 关于感恩节的幼儿园主题活动方案
- 房屋归属权协议书范本(标准版)
- 鼻腔冲洗护理技术团体标准解读
- GB/T 41130-2021展览场馆安全管理基本要求
- 湘美版美术一年级上册全册课件
- 环境经济学(张)课件
- 人才管理-人才选用育留课件
- 成功八步课件
- 玉石床垫讲稿课件
- 初中音乐七年级上册第一单元 红岩魂走进歌乐山
- 栈桥修复方案(全文)
- 某五星级酒店单项工程经济指标
评论
0/150
提交评论