- 1、本文档共65页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
lab2 介绍
Lab2 introduction
2010-04-30
Lab2任务清单
实现物理页面管理
掌握段页式地址映射机制
掌握内核虚拟内存布局
建立二级页表
掌握bochs针对不同类地址的调
试命令
Lab2准备
将Lab1的解答放入Lab2
取得Lab1修改内容
diff -u -r Lab1 Lab1-change Lab1-changes.patch
将Lab1的修改patch到Lab2
cd Lab2
patch -p1 -u ../Lab1-changes.patch
将*.rej中未加入的更改手动加入相应文件
outline(1)
Lab2代码树
Introduction
符号表结构
Part 1 Physical Page Management
struct Page数据结构
queue.h 中实现的双向链表
过渡阶段的页目录
outline(2)
Part 2 Virtual Memory
段页式映射机制
逻辑地址、线性地址、物理地址
重要数据结构和函数
Part 3: Kernel Address Space
段页映射中的权限检查
自映射
过渡阶段的页目录
Lab2 代码树
lab2
boot: 引导扇区代码
CODING: 代码规范说明;
Conf, GNUmakefile, mergedep.pl: 编译相关文件;
grade.sh : 代码测试脚本;
inc: 头文件定义***
kern: 内核代码***
lib: 代码库;
user: 用户态程序; 了解
Lab2 代码树:inc
inc
memlayout.h***:内存管理相关的宏定义;
其中注释中的虚拟内存表是重中之重
mmu.h**:MMU相关的宏定义;
Lab2 代码树:kern
kern
pmap.h***: 一定要在读pmap.c前通读一遍
pmap.c***: 内存管理
kclock.h
kclock.c:PC时钟控制
kdebug.h*
kdebug.c**: debug信息
outline
Introduction
符号表结构
Introduction—Ex1
Exercise1:
扩展Lab1中的Stack Backtrace功能,通过调用
stab_binsearch 与read_eip()实现debuginfo_eip()
函数,使原先显示eip的位置变为所在的函数名称
和偏移量
实现原理
JOS 内核中有若干段
.stab段是内核符号表,其中存有文件、函数、
行数等的信息;.stabstr段中存有相应的文件
和函数名等
实现原理
backtrace需要从.stab段和.stabstr段中获取所
需的信息:
文件名
函数名
行号
调用点在函数中的偏移量等
由debuginfo_eip()实现这些功能
backtrace通过调用debuginfo_eip()来获得所需
信息
实现原理:Stab结构
struct Stab
n_strx:指向stabstr表的索引,stabstr表中存有该符号项的
名字
n_type:该符号项的类型
n_other:杂项信息(通常为空)
n_desc:描述信息
n_value:该符号项的值
实现原理
n_type说明:
N_SO:表示文件
N_SOL:被包含的文件
N_FUN:表示函数
N_SLINE:表示在文件中的行号
文件和函数项的n_value字段表示该文件或函
数装载后的虚拟地址
n_strx是指向.stabstr段的索引
实现过程
通过objdump命令,观察内核中不同的段。
objdump -h obj/kern/kernel
文档评论(0)