清华大学操作系统lab1-实验报告.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验1:系统软件启动过程练习1:操作系统镜像文件 ucore.img 是如何一步一步生成的?在命令行中输入“make V=”1、首先把C的源代码进行编译成为.o文件,也就是目标文件(红色方框内)2、 ld命令将这些目标文件转变成可执行文件,比如此处的bootblock.out(绿色方框内)3、dd命令把bootloder放到ucore.img count的虚拟硬盘之中4、还生成了两个软件,一个是Bootloader,另一个是kernel。(2)一个被系统认为是符合规范的硬盘主引导扇区的特征: 在/lab1/tools/sign.c中我们可以了解到 规范的硬盘引导扇区的大小为512字节,硬盘结束标志位55AA练习2:从 CPU 加电后执行的第一条指令开始,单步跟踪 BIOS 的执行改写Makefile文件lab1-mon: $(UCOREIMG)$(V)$(TERMINAL) -e $(QEMU) -S -s -d in_asm -D $(BINDIR)/q.log -monitor stdio -hda $ -serial null$(V)sleep 2$(V)$(TERMINAL) -e gdb -q -x tools/lab1init在调用qemu时增加-d in_asm -D q.log参数,便可以将运行的汇编指令保存在q.log中。在初始化位置0x7c00 设置实地址断点,测试断点正常。在tools/gdbinit结尾加上set architecture i8086b *0x7c00//在0x7c00处设置断点。continue x /2i $pc //显示当前eip处的汇编指令将执行的汇编代码与bootasm.S 和 bootblock.asm 进行比较,看看二者是否一致。Notice:在q.log中进入BIOS之后的跳转地址与实际应跳转地址不相符,汇编代码也与bootasm.S 和 bootblock.asm不相同。这是由于在gdb之中调试的原因,可以直接输入make debug,在生成的qemu虚拟机之中进行调试可以看到在虚拟机中运行的汇编代码,之后再与bootasm.S 和 bootblock.asm 进行比较。与bootasm.S和bootblock.asm中的代码相同。练习3:分析bootlloader进入保护模式的过程(/lab1/boot/bootasm.S).globl startstart:.code16# 关中断,并清除方向标志,即将 DF 置“0”,这样(E)SI 及(E)DI 的修改为增量 cli cld # 清零各数据段寄存器:DS、ES、FS xorw %ax, %ax movw %ax, %ds movw %ax, %es movw %ax, %ss # 使能 A20 地址线,这样 80386 就可以突破 1MB 访存现在,而可访问 4GB 的 32 位地址空间seta20.1: inb $0x64, %al # 等待8042键盘控制器不忙 testb $0x2, %al jnz seta20.1movb $0xd1, %al outb %al, $0x64seta20.2: inb $0x64, %al# 等待8042键盘控制器不忙 testb $0x2, %al jnz seta20.2movb $0xdf, %al # 打开A20 outb %al, $0x60 # 初始化gdtlgdt gdtdesc# 进入保护模式 movl %cr0, %eax orl $CR0_PE_ON, %eax movl %eax, %cr0 # 长跳转 ljmp $PROT_MODE_CSEG, $protcseg.code32protcseg:# 设置段寄存器,并建立堆栈 movw $PROT_MODE_DSEG, %ax movw %ax, %ds # - DS: Data Segment movw %ax, %es # - ES: Extra Segment movw %ax, %fs # - FS movw %ax, %gs # - GS movw %ax, %ss # - SS: Stack Segment # 设置堆栈 movl $0x0, %ebpmovl $start, %esp # 栈顶为0x7c00# 进入bootmain,不再返回 call bootmainspin:jmp spin练习4:分析bootl

文档评论(0)

新起点 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档