1、2014 级本科操作系统实验报告(实验 1)学生姓名 曾帅 学号 1143710412 院系 软件学院任课教师 范国祥 实验 TA XXX实验地点 软件学院三楼实验室 实验时间 2016 年 05 月 19 日 星期四实验题目 系统初始化 实验学时 1 学时实验目的: 熟悉hit-oslab实验环境; 建立对操作系统引导过程的深入认识; 掌握操作系统的基本开发过程; 能对操作系统代码进行简单的控制,揭开操作系统的神秘面纱。实验内容及要求:(1)阅读Linux 内核完全注释的第 6 章,对计算机和 Linux 0.11 的引导过程进行初步的了解;(2)尝试改写 Linux0.11 的引导程序 b
2、ootsect.s,使其主要完成功能:bootsect.s 能在屏幕上打印一段提示信息“XXX is booting. ”,其中 XXX 是你给自己的操作系统起的名字;(3)修改 build.c,以便可以使用 make BootImage 命令。实验过程描述、结果及思考:简要描述实验过程(含操作步骤及看到的结果) 。(1) 修改bootsect.s中的提示信息及相关代码,这里改动mov cx,#29/要显示的字符串长度和msg1:.byte 13,10/换行+回车.ascii “ZengShuai is booting.“/屏幕输出内容.byte 13,10,13,10/(换行+回车)*2(2
3、) 在目录linux-0.11boot下,分别用命令as86 -0 -a -o bootsect.o bootsect.s和ld86 -0 -s -o bootsect bootsect.o编译和链接 bootsect.s,生成bootsect文件;(3) 用命令dd bs=1 if=bootsect of=Image skip=32去掉 bootsect的文件头生成Image 文件,并复制Image到linux-0.11 目录下;(4) 运行run 命令验证运行结果 ,屏幕显示“ZengShuai is booting.”,实验前部分成功;(5) 重新编写一个setup.s ,然后将其中的显
4、示的信息改为:“Now we are in SETUP”。再次编译,重新用make 命令生成 BootImage,结合提示信息和makefile文修改build.c,具体将setup.s改动如下:mov cx,#27mov bx,#0x0007 ! page 0, attribute 7 (normal)mov bp,#msg1mov ax,#0x1301 ! write string, move cursorint 0x10dieLoop:j dieLoopmsg1:.byte 13,10,13,10.ascii “Now we are in SETUP“.byte 13,10,13,10将
5、build.c改动如下:if(strcmp(“none“,argv3) = 0)/添加判断return 0;if (id=open(argv3,O_RDONLY,0)0 ; i+=c )if (write(1,buf,c)!=c)die(“Write call failed“);close(id);fprintf(stderr,“System is %d bytes.n“,i);if (i SYS_SIZE*16)die(“System is too big“);return(0);(6) 验证:用make是否能成功生成BootImage,运行run命令验证运行结果。屏幕显示“Now we a
6、re in SETUP”,实验成功。问题回答:操作系统的引导程序都完成哪些功能?你知道几个操作系统引导程序?分别是什么?操作系统的引导程序都完成哪些功能:(1)确保内核正确加载(2)加载内核到内存(3)将系统控制权交给内核(4)识别主机的某些特性(5)确定根文件的设备号(6)将CPU由实模式切换为保护模式(7)通知内核所需要的根文件系统的位置等功能;你知道几个操作系统引导程序:(1)NTLDR,它是Windows nt 4.0/Windows 2000/Windows xp/Windows server 2003的引导文件(2)GNU GRUB,它是是一个来自GNU 项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。