- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JOS实验三实验记录作者卓达城指导老师邵志远单位华中科技大学.PDF
JOS 实验三实验记录
作者:卓达城
指导老师:邵志远
单位:华中科技大学集群网络与服务计算实验室
首先为envs 分配内存空间,然后映射到物理地址上。
具体实现如下:
kmap.c vm_init() 分配空间
kmap.c vm_init() 映射地址
这两个函数以后,内存的布局如下图所示。
线性地址:
0 KSTACKTOP-KSTKSIZE
4M 4M 4M 4M 4M
UTOP UPAGES UVPT ULIM KSTACKTOP KERNBASE
UENVS
envs pages- bootstack- 0-256m
然后现在初始化环境空闲链表,我们想要修改 env_init 函数,这里有一点要注意,应该把
envs[0]放在链表的头部,方便下面调用。具体代码如下:
按照实验的要求,现在开始补充env_setup_vm 函数:
这个函数的主要作用是为新的环境设置页目录,请注意,这里每个新的环境都有一个属于自
己的页目录,当设置好页目录之后,把内核的页目录(UTOP 上面的线性地址)映射到新环
境的页目录,以便新环境可以通过某些形式访问内核。
然后是segment_alloc()函数
这个函数的主要作用是从地址va 开始分配len 字节的空间
具体实现代码如下:
load_icode()函数
这个函数是第一部分最难的一个函数,它的主要任务是把程序加载到新环境的虚
拟地址上,参数提供了要加载的程序的首地址。由于要在新环境(进程)中加载
所以必须把cr3 换成新环境的cr3,加载完之后回到原来的cr3。
然后要明白函数里面循环部分的意义必须明白elf 的结构,每个应用程序都有自
己的elf 结构,包括内核,所有应用程序都为操作系统提供elf 结构,然后操作
系统根据这个结构把程序加载到合适的地方,elf 的结构如下图:
程序头表把程序分成好几个段,然后段的信息放在 proghdr 中,通过 proghdr
就可以把程序加载到指定的虚拟内存地址上。
具体信息可参照 第三章的书稿 《系统的启动和初始化》
具体实现代码如下:
方框部分注意了,这样写比较安全,这个上课听说是bss 段有可能不全部为零,
所以有了这样的写法,具体原因我暂时还不是很清楚。
如果把方框里的前两句调换位置,这个程序就有问题了。+
写完这个函数之后,第一部分就差不多了。
然后进入env_create 函数
这个函数里面调用了env_alloc 这个函数我们不用改,但是最好理解。
现在先解释这个函数:
从空闲链表拿出一个新的env,然后初始化。
这几句是用来生成env_id 的,低10位势根据e - envs 定的,NENV 等于1024,
刚好是10 位,这样就确保每一个env_id 都不重复。如果前面把env_id 初始化
成零的话,那么(1)env 就会根据e - envs 来定,具体就是0-1024,(2)而且在
init.c 里面还有一个就是env_run(env[0]),这就是上面的env_init 为什么要
把第零项放第一的原因,其实更重要的是后一个原因,但是第一个原因也是有的
(个人认为)。
这几句是设置好段寄存器,并把他们的特权级设置为3,至于gdt 表在上面时候
设置,请看下面(i386_vm_init):
gdt 表项在:
这里的段基地址都是一样,至于JOS 是怎样使用段保护的,我暂时也不是很清楚。
到后面应该会明白。
然后回到env_create 函数:
它把应用程序放到指定的虚拟内存上去。然后就完了。具体代码如下:
我们再来看这个宏
我们一定想知道user_hello 到底在哪里。这个也是暂时不知道,我这几个文件
中都找不到它的信息。补充信息:后来我在 kernel.sym 中找到了 user_hello
的信息。
然后就是 env_run,这个函数很简单,但是它调用的函数env_pop_tf 比较有意
思,先看看env_run 的具体实现,很简单:
现在进入env_pop_tf 函数,在看代码之前要先看看Trapframe 的结构:
我们可以看到 Trapframe 的前面部分按照一定的顺序,就是pushal 的顺把 32
为的寄存器排好,然后后面就是段寄存器,tf_padding1
您可能关注的文档
- 2013年安徽省职业院校技能大赛(高职组)英语导游服务比赛规程.doc
- 2013年度先进集体、先进工作者及会议代表名额分配表(单位个).doc
- 2013年度各系列高级专业技术职务任职资格水平测试、材料受理、.doc
- 2013年度固定资产投资决算报表主要指标解释.doc
- 2013年度市总工会工作目标责任制暨五型机关创建考核职责分工.doc
- 2013年河北工程大学硕士研究生入学考试CC++语言程序设计CC++.PDF
- 2013年第二届中国·云台山九九国际登山挑战赛竞赛规程.doc
- 2013年菜篮子产品生产项目实施方案.doc
- 2013年高校家庭经济困难新生入学及资助热线电话开通情况统计表.doc
- 2014—2015学年两区人才支持计划教师专项选派教师任务表.doc
- JOS实验六实验记录作者卓达城指导老师邵志远单位华中科技大学.PDF
- KM轨道交通用电缆和6000KM船用电缆生产项目环境影响评价文件公示.doc
- MH600系列交流伺服驱动器产品说明书.PDF
- Molex企业布线网络部技术资料和系统应用指南.PDF
- NDF市场挑战与应对.PDF
- O2O本地生活服务系统功能列表.PDF
- OracleSiebel媒体行业CRM解决方案概述.PDF
- PPT内容设计原则_图片文字技巧_PPT制作技巧_实用文档.doc
- PPT文件带圈数字添加方法1_图片文字技巧_PPT制作技巧_实用文档.doc
- PPT标题栏只能大学不能小写_图片文字技巧_PPT制作技巧_PPT专区.doc
最近下载
- 2025重庆长江师范学院科研助理招聘13人笔试参考题库附答案解析.docx VIP
- 国际医学研究报告清单及规范:5-CARE Checklist 案例报告.docx
- 软件概要设计说明书.doc VIP
- 武汉理工大学855信号与系统2022考研真题试卷.pdf VIP
- 爆破行业风险评价方法、爆破作业风险分级管控指南、风险分级管控清单、隐患排查清单、台账.pdf VIP
- 2025年财政部高层次财会人才选拔考试综合试题及答案.docx VIP
- 国际贸易学_金泽虎主编_电子教案.ppt
- 2025年财政部高层次财会人才选拔考试测试题及答案.docx VIP
- 医学三基考试试题及答案.doc VIP
- 2025年职场 性格25PF测试题 .pdf VIP
文档评论(0)