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

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

ID:35231642

大小:497.89 KB

页数:14页

时间:2019-03-22

清华大学操作系统实验lab1实验报告_第1页
清华大学操作系统实验lab1实验报告_第2页
清华大学操作系统实验lab1实验报告_第3页
清华大学操作系统实验lab1实验报告_第4页
清华大学操作系统实验lab1实验报告_第5页
资源描述:

《清华大学操作系统实验lab1实验报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、练习1、理解通过make生成执行文件的过程。[练习1.1]操作系统镜像文件ucore.img是如何一步一步生成的?在proj1执行命令makeV=可以得到make指令执行的过程makeV=+ccboot/bootasm.Sgcc-Iboot/-fno-builtin-Wall-ggdb-m32-nostdinc-fno-stack-protector-Ilibs/-Os-nostdinc-cboot/bootasm.S-oobj/boot/bootasm.o+ccboot/bootmain.cgcc-Iboot/-fno-builtin-Wall-ggdb-m32-n

2、ostdinc-fno-stack-protector-Ilibs/-Os-nostdinc-cboot/bootmain.c-oobj/boot/bootmain.o+cctools/sign.cgcc-Itools/-g-Wall-O2-ctools/sign.c-oobj/sign/tools/sign.ogcc-g-Wall-O2obj/sign/tools/sign.o-obin/sign+ldbin/bootblockld-melf_i386-N-estart-Ttext0x7C00obj/boot/bootasm.oobj/boot/bootmain.o

3、-oobj/bootblock.o'obj/bootblock.out'size:440bytesbuild512bytesbootsector:'bin/bootblock'success!ddif=/dev/zeroof=bin/ucore.imgcount=10000记录了10000+0的读入记录了10000+0的写出5120000字节(5.1MB)已复制,0.0227439秒,225MB/秒ddif=bin/bootblockof=bin/ucore.imgconv=notrunc记录了1+0的读入记录了1+0的写出512字节(512B)已复制,0.00021

4、4966秒,2.4MB/秒从这几条指令中可以看出需要生成ucore.img首先需要生成bootblock,而生成bootblock需要先生成bootmain.o和bootasm.o还有sign,这三个文件又分别由bootmain.c、bootasm.S、sigh.c来生成。ld-melf_i386-N-estart-Ttext0x7C00obj/boot/bootasm.oobj/boot/bootmain.o–oobj/bootblock.o这句话用于生成bootblock,elf_i386表示生成elf头,0x7C00为程序的入口。'obj/bootblock.o

5、ut'size:440bytes这句话表示生成的bootblock的文件大小,因为大小不到512字节,所以需要给blootblock填充,填充的功能在sign.c中有所体现,最后两字节设置为了0x55,0xAAbuf[510]=0x55;buf[511]=0xAA;FILE*ofp=fopen(argv[2],"wb+");size=fwrite(buf,1,512,ofp);[练习1.2]一个被系统认为是符合规范的硬盘主引导扇区的特征是什么?前面已经提到过:引导扇区的大小为512字节,最后两个字节为标志性结束字节0x55,0xAA,做完这样的检查才能认为是符合规范的

6、磁盘主引导扇区。Sign.c文件中有作检查:if(size!=512){fprintf(stderr,"write'%s'error,sizeis%d.",argv[2],size);return-1;}练习2:使用qemu执行并调试lab1中的软件。[练习2.1]从CPU加电后执行的第一条指令开始,单步跟踪BIOS的执行。[练习2.2]在初始化位置0x7c00设置实地址断点,测试断点正常。[练习2.3]在调用qemu时增加-din_asm-Dq.log参数,便可以将运行的汇编指令保存在q.log中。将执行的汇编代码与bootasm.S和bootblock.asm

7、进行比较,看看二者是否一致。实验是基于老lab1/proj1做的,练习开始时是打算用命令行一句一句执行得到结果的,后来发现直接修改makefile和gdbinit可以大大提高调试效率。于是在makefile中增加以下代码fileobj/bootblock.otargetremote:1234setarchitecturei8086b*0x7c00continuex/10i$pclab1-mon:$(UCOREIMG)$(V)$(TERMINAL)-e"$(QEMU)-S-s-din_asm-D$(BINDIR)/q.log-monitorstdio-

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。