教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

ucore - LAB1实验报告(4)

来源:网络收集 时间:2026-09-10
导读: if (tf->tf_cs != KERNEL_CS) { tf->tf_cs = KERNEL_CS; tf->tf_ds = tf->tf_es = KERNEL_DS; tf->tf_eflags //定位临时栈的栈顶 switchu2k = (struct trapframe *)(tf->tf_esp - (sizeof(struct trapframe) - 8));

if (tf->tf_cs != KERNEL_CS) { tf->tf_cs = KERNEL_CS;

tf->tf_ds = tf->tf_es = KERNEL_DS; tf->tf_eflags &= ~FL_IOPL_MASK;

//定位临时栈的栈顶

switchu2k = (struct trapframe *)(tf->tf_esp - (sizeof(struct trapframe) - 8));

//复制

memmove(switchu2k, tf, sizeof(struct trapframe) - 8);

//在执行int120前系统在核心态,int会引起栈的切换,iret不会引起 //栈的切换

*((uint32_t *)tf - 1) = (uint32_t)switchu2k;

/*设置临时栈,指向switchu2k,这样iret返回时,CPU会从switchu2k恢复数据, 而不是从现有栈恢复数据。*/

} break;

最后iret返回三个值

二.源码分析

此次实验的代码部分主要由bootloader和ucore操作系统部分组成。 bootloader部分:

boot/bootasm.S:定义并实现了bootloader最先执行的函数start,此函数进行了一定的初始化,完成了从实模式到保护模式的转换,并调用bootmain.c中的bootmain函数; boot/bootmain.c:定义并实现了bootmain函数实现了通过屏幕、串口和并口显示字符串。bootmain函数加载ucore操作系统到内存,然后跳转到ucore的入口处执行。 boot/asm.h:是bootasm.S汇编文件所需要的头文件,主要是一些与X86保护模式的段访问方式相关的宏定义。

Ucore操作系统部分主要包含系统初始化部分、内存管理部分、外设驱动部分、中断处理部分、内核调试部分。

初始化部分:kern/init 内存管理部分:kern/mm 外设驱动部分:kern/driver 中断处理部分:kern/debug

公共库部分和工具部分:libs、tools

Bootloader启动过程: 1.

将通过读取硬盘主引导扇区到内存,并转跳到对应内存中的位置执行

2.将通过读取硬盘主引导扇区到内存,并转跳到对应内存中的位置执行bootloader。 读ELF文件:

跳转到入口:

实验总结:

通过这次实验我收获了关于C语言编程与理解,汇编语言理解,linux基本命令应用的相关知识,了解了操作系统是如何搭建起来的,结合书本上的理论知识对操作系统有了更深一步的理解,但是在做实验的过程中由于自己水平有限,还是遇到了很多困难,但是最终还是在同学的帮助以及查资料解决了它们。

ucore - LAB1实验报告(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/604851.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)