![清华大学操作系统lab1-实验报告_第1页](http://file4.renrendoc.com/view/b5bbb43b2d78f05f0b2bb30a4f796b86/b5bbb43b2d78f05f0b2bb30a4f796b861.gif)
![清华大学操作系统lab1-实验报告_第2页](http://file4.renrendoc.com/view/b5bbb43b2d78f05f0b2bb30a4f796b86/b5bbb43b2d78f05f0b2bb30a4f796b862.gif)
![清华大学操作系统lab1-实验报告_第3页](http://file4.renrendoc.com/view/b5bbb43b2d78f05f0b2bb30a4f796b86/b5bbb43b2d78f05f0b2bb30a4f796b863.gif)
![清华大学操作系统lab1-实验报告_第4页](http://file4.renrendoc.com/view/b5bbb43b2d78f05f0b2bb30a4f796b86/b5bbb43b2d78f05f0b2bb30a4f796b864.gif)
![清华大学操作系统lab1-实验报告_第5页](http://file4.renrendoc.com/view/b5bbb43b2d78f05f0b2bb30a4f796b86/b5bbb43b2d78f05f0b2bb30a4f796b865.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
千里之行,始于足下让知识带有温度。第第2页/共2页精品文档推荐清华大学操作系统lab1_实验报告试验1:系统软件启动过程
练习1:
(1)操作系统镜像文件ucore.img是如何一步一步生成的?
在命令行中输入“makeV=”
1、首先把C的源代码举行编译成为.o文件,也就是目标文件(红色方框内)
2、ld命令将这些目标文件改变成可执行文件,比如此处的bootblock.out(绿色方框内)
3、dd命令把bootloder放到ucore.imgcount的虚拟硬盘之中
4、还生成了两个软件,一个是Bootloader,另一个是kernel。
(2)一个被系统认为是符合规范的硬盘主引导扇区的特征:
在/lab1/tools/sign.c中我们可以了解到
规范的硬盘引导扇区的大小为512字节,硬盘结束标志位55AA
练习2:
(1)从CPU加电后执行的第一条指令开头,单步跟踪BIOS的执行
改写Makefile文件
lab1-mon:$(UCOREIMG)
$(V)$(TERMINAL)-e"$(QEMU)-S-s-din_asm-D$(BINDIR)/q.log-monitorstdio-hda$DS:DataSegment
movw%ax,%es#->ES:ExtraSegment
movw%ax,%fs#->FS
movw%ax,%gs#->GS
movw%ax,%ss#->SS:StackSegment
#设置堆栈
movl$0x0,%ebp
movl$start,%esp#栈顶为0x7c00
#进入bootmain,不再返回
callbootmain
spin:
jmpspin
练习4:分析bootloader加载ELF格式的OS的过程
读一个扇区的流程可参看bootmain.c中的readsect函数实现。大致如下:
1.读I/O地址0x1f7,等待磁盘预备好;
2.写I/O地址0x1f2~0x1f5,0x1f7,发出读取第offseet个扇区处的磁盘数据的命令;
3.读I/O地址0x1f7,等待磁盘预备好;
4.延续读I/O地址0x1f0,把磁盘扇区数据读到指定内存。
staticvoid
readsect(void*dst,uint32_tsecno){
//waitfordisktobeready
waitdisk();
outb(0x1F2,1);//count=1
outb(0x1F3,secno
outb(0x1F4,(secno>>8)
outb(0x1F5,(secno>>16)
outb(0x1F6,((secno>>24)
outb(0x1F7,0x20);//cmd0x20-readsectors
//waitfordisktobeready
waitdisk();
//readasector
insl(0x1F0,dst,SECTSIZE/4);
}
该函数封装在readseg函数中,该函数完成读取随意的长度。
Notice:uint32_tsecno=(offset/SECTSIZE)+1;#0号扇区已被引导占用。
最后在bootmain函数中完成加载ELF格式os的操作:
1:读取ELF的头部
2:推断ELF文件是否是合法
3:将描述表的头地址存在ph
4:根据描述表将ELF文件中数据载入内存
5:按照ELF头部储存的入口信息,找到内核的入口(不再返回)
Notice:可能会浮现内存长度>文件长度的现象
多读入部分包含bss节,需要清0
练习5:实现函数调用堆栈跟踪函数
print_stackframe(void){
uint32_tebp=read_ebp(),eip=read_eip();
inti,j;
for(i=0;ebp!=0i++){
cprintf("ebp:0x%08xeip:0x%08xargs:",ebp,eip);
uint32_t*args=(uint32_t*)ebp+2;
//(uint32_t)callingarguments[0..4]=thecontentsinaddress(unit32_t)ebp+2[0..4]
for(j=0;jtf_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(structtrapframe)-8;
//在执行int120前系统在核心态,int不会引起栈的切换
switchk2u.tf_eflags|=FL_IOPL_MASK;
*((uint32_t*)tf-1)=(uint32_t)
}
break;
最后iret时返回5个值。
(2)用户态切换到内核态:
lab1_switch_to_kernel(void){
asmvolatile(
"int%0\n"
"movl%%ebp,%%esp\n"
:
:"i"(T_SWITCH_TOK)
);
}
caseT_SWITCH_TOK:
if(tf->tf_cs!=KERNEL_CS){
tf->tf_cs=KERNEL_CS;
tf->tf_ds=tf->tf_es=KERNEL_DS;
tf->tf_eflags
//定位暂时栈的栈顶
switchu2k=(structtrapframe*)(tf->tf_esp-(sizeof(structtrapframe)-8));
//复制
memmove(switchu2k,tf,sizeof(structtrapframe)-8);
//在执行int120前系统在核心态,int会引起栈的切换,iret不会引起
//栈的切换
*((uint32_t*)tf-1)=(uint32_t)switchu2k;
/*设置暂时栈,指向switchu2k,这样iret
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 现代交通枢纽的铁路货运效率优化
- 深度解读如何用云计算构建高效智能制造平台
- 国庆节巡航摩旅活动方案
- 小学趣味运动会活动方案策划
- 2024年春七年级地理下册 第九章 第二节 巴西说课稿 (新版)新人教版
- 23 梅兰芳蓄须说课稿-2024-2025学年四年级上册语文统编版001
- 8 千年梦圆在今朝(说课稿)2023-2024学年部编版语文四年级下册
- 5 协商决定班级事务 说课稿-2024-2025学年道德与法治五年级上册统编版
- 2023八年级英语上册 Module 9 Population Unit 3 Language in use说课稿(新版)外研版
- 《10天然材料和人造材料》说课稿-2023-2024学年科学三年级下册青岛版
- 四年级上册简便计算专项练习(已排版可直接下载打印)
- 煤场用车辆倒运煤的方案
- 《预防犯罪》课件
- 【企业作业成本在上海汽车集团中的应用研究案例7300字(论文)】
- 《民航服务沟通技巧》教案第6课巧妙化解冲突
- 化学用语专项训练
- 《了凡四训》课件
- 医院住院病人健康教育表
- 风险矩阵法(详细)
- 实验室供应商评价的5个基本步骤
- 电力公司工程勘察设计管理办法
评论
0/150
提交评论