MIT 6.828 Lab1 exercise3

本文详细解析了处理器从16位模式转为32位模式的关键代码段,介绍了bootloader最后执行的指令及kernel加载执行的第一条指令,同时阐述了bootloader如何根据elf头文件信息确定内核加载所需扇区数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

exercise 1.3

Q1:

在哪一点处理器开始转为32位模式?什么导致了从16位转为32位?

A1:

boot.s中的下面这段代码。当cr0 register写入1时,就转为了32位。

  lgdt    gdtdesc
  movl    %cr0, %eax
  orl     $CR0_PE_ON, %eax
  movl    %eax, %cr0

Q2:

boot loader最后执行的是哪一条指令?kernel刚刚加载时执行的是哪一条指令?

A2:

boot loader最后执行的是

	((void (*)(void)) (ELFHDR->e_entry))();

kernel开头执行的是

f010000c:	66 c7 05 72 04 00 00 	movw   $0x1234,0x472

Q3:

为了将整个内核从磁盘加载到内存,boot loader如何决定要加载多少个扇区?它从哪里找到这些信息?

A3:

在一开始读入的elf头文件中,包括了kernel在磁盘中的位置,长度等信息,根据这些信息设置参数,调用for循环和文件接口,就能知道要调入多少扇区。

实验目标: 本实验的目标是完成一个可以在QEMU仿真器上运行的x86操作系统。具体地说,我们将编写引导扇区代码和内核代码,并将它们组合成一个可引导的磁盘映像。最后,我们将使用QEMU仿真器启动我们的操作系统。 实验步骤: 1. 准备工作 准备工作包括安装必要的软件和工具、下载实验代码和文档等。 2. 编写引导扇区代码 引导扇区是操作系统的第一个扇区,它需要被放置在磁盘的第一个扇区。引导扇区必须包含一个512字节的主引导记录(MBR),其中包括一个引导程序和分区表。我们需要编写一个能够在引导扇区中运行的汇编代码,它将加载内核并将控制权转交给内核。 3. 编写内核代码 内核是操作系统的核心部分,它负责管理计算机的硬件资源、提供系统调用接口等。我们需要编写一个简单的内核,该内核将输出“Hello, world!”并进入无限循环。我们可以使用C语言编写内核代码,并使用GCC编译器将其编译成汇编代码。 4. 构建磁盘映像 我们需要将引导扇区和内核代码组合成一个可引导的磁盘映像。为此,我们可以使用dd命令将引导扇区和内核代码写入一个空白磁盘映像中。 5. 启动操作系统 最后,我们需要使用QEMU仿真器启动我们的操作系统。我们可以使用以下命令启动QEMU并加载磁盘映像: ``` qemu-system-i386 -hda os.img ``` 实验结果: 经过以上步骤,我们成功地编写了一个简单的操作系统,并使用QEMU仿真器进行了测试。当我们启动操作系统时,它将输出“Hello, world!”并进入无限循环。 实验总结: 本实验让我了解了操作系统的基本概念和架构,并学会了如何编写一个简单的操作系统。通过实验,我更深入地理解了计算机系统的底层原理,对操作系统的工作原理有了更深入的了解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值