ucore - LAB1实验报告(3)
} }
输出与原表大致一致。
ss:ebp指向的堆栈位置储存着caller的ebp,以此为线索可以得到所有使用堆栈的函数ebp。 ss:ebp+4指向caller调用时的eip,ss:ebp+8等是(可能的)参数。
输出中,堆栈最深一层为 ebp:0x00007bf8 eip:0x00007d64 args:0xc031fcfa 0xc08ed88e0x64e4d08e 0xfa7502a8
其对应的是第一个使用堆栈的函数,bootmain.c中的bootmain。
bootloader设置的堆栈从0x7c00开始,使用\转入bootmain函数。
call指令压栈,所以bootmain中ebp为0x7bf8。返回地址eip为0x0000d64,之后四个是参数args:0xc031fcfa 0xc08ed88e0x64e4d08e 0xfa7502a8.
练习6:中断初始化和处理
1. (保护模式中)中断向量表中一个表项占多少字节?其中哪几位代表中断处理代码的入口?
答:中断向量表中一个表项占8个字节,其中第0~15,48~63位代表中断处理代码的入口。
2. 完成trap.c中对中断向量表进行初始化的函数idt_init。在idt_init函数中,依次对所有中断入口进行初始化。使用mmu.h中的SETGATE宏,填充idt数组内容。注意除了系统调用中断(T_SYSCALL)以外,其它中断均使用中断门描述符,权限为内核态权限;而系统调用中断使用异常,权限为陷阱门描述符。每个中断的入口由tools/vectors.c生成,使用trap.c中声明的vectors数组即可。 答:idt_init(void) {
extern uintptr_t __vectors[]; int i;
for (i = 0; i < sizeof(idt) / sizeof(struct gatedesc); i ++) {
SETGATE(idt[i], 0, GD_KTEXT, __vectors[i], DPL_KERNEL); }//初始化每一条IDT项 // 设置内核态到用户态的转换
SETGATE(idt[T_SWITCH_TOK], 0, GD_KTEXT, __vectors[T_SWITCH_TOK], DPL_USER); // 载入IDT lidt(&idt_pd); }
3. 完成trap.c中的中断处理函数trap对时钟中断进行处理的部分填写trap函数中处理时钟中断的部分,使操作系统每遇到100次时钟中断后,调用print_ticks子程序,向屏幕上打印一行文字”100 ticks”。
答:case IRQ_OFFSET + IRQ_TIMER: ticks ++;
if (ticks % TICK_NUM == 0) { print_ticks();
}//当有100次时钟中断输出一次 break;
拓展练习:增加syscall功能,即增加一用户态函数(可执行一特定系统调用:获得时钟计数值),当内核初始完毕后,可从内核态返回到用户态的函数,而用户态的函数又通过系统调用得到内核态的服务。 答:⑴内核态切换到用户态:
lab1_switch_to_user(void) {
asm volatile (
\
// esp-8 为下一步复制的栈帧留好 tf_ss和tf_esp的位置 \
\ :
: \ );
}
case T_SWITCH_TOU:
if (tf->tf_cs != USER_CS) { switchk2u = *tf;
switchk2u.tf_cs = USER_CS;
switchk2u.tf_ds = switchk2u.tf_es = switchk2u.tf_ss = USER_DS; switchk2u.tf_esp = (uint32_t)tf + sizeof(struct trapframe) - 8; //在执行int120前系统在核心态,int不会引起栈的切换
switchk2u.tf_eflags |= FL_IOPL_MASK;
*((uint32_t *)tf - 1) = (uint32_t)&switchk2u; }
break;
最后iret时返回5个值。 ⑵用户态切换到内核态:
lab1_switch_to_kernel(void) { asm volatile ( \
\ :
: \ ); }
case T_SWITCH_TOK:
相关推荐:
- [高等教育]公司协助某村精准扶贫工作总结.doc
- [高等教育]高二生物知识点总结(全)
- [高等教育]苏教版数学三年级下册《解决问题的策略
- [高等教育]仪器分析课程学习心得
- [高等教育]2017年五邑大学数学与计算科学学院333
- [高等教育]人教版七年级下册语文第四单元测试题(
- [高等教育]2018年秋七年级英语上册Unit7Howmuchar
- [高等教育]2017年八年级下数学教学工作小结
- [高等教育]湖南省怀化市2019届高三统一模拟考试(
- [高等教育]四年级下册科学_基础训练及答案教材
- [高等教育]城郊煤矿西风井管路伸缩器更换施工安全
- [高等教育]昆八中20182019学年度上学期期末考试
- [高等教育]项目部各类人员任命书
- [高等教育]上市公司经营水务产业的模式
- [高等教育]人教版高二化学第一学期第三章水溶液中
- [高等教育]【中考物理第一轮复习资料】四.压强与
- [高等教育]金坑水电站报废改建工程机电设备更新改
- [高等教育]高中生物教学工作计划简易版
- [高等教育]2017年西华大学攀枝花学院(联合办学)44
- [高等教育]最新整理超短爆笑英文小笑话大全
- 优秀教师继续教育学习心得体会
- 阳历到阴历的转换
- 留守儿童教育案例分析
- 华师17春秋学期《玩教具制作与环境布置
- 测速传感器新型安装装置的现场应用
- 人教版小学数学三年级下册第四单元
- 创业个人意向书
- 山东省潍坊市2012年高考仿真试题(三)
- [恒心][好卷速递]四川省成都外国语学校
- 多少人错把好转反应当成了病情加重处理
- 中外广播电视史复习资料整理
- 江苏省扬州市江都区宜陵镇中学2014-201
- 工程造价专业毕业实习报告
- 广西师范学院心理与教育统计
- aympkrq基于 - asp的博客网站设计与开
- 建筑业外出经营相关流程操作(营改增后
- 人治 德治 法治
- [精华篇]常识判断专项训练题库
- 中国共产党为什么要实行民主集中
- 小学数学第三册第一单元试卷(A、B、C




