6.828 lab1 bootload

这篇博客详细介绍了MIT6.828实验1的内容,涉及PC的引导加载流程、BIOS的初始化步骤以及从实模式到保护模式的转换。通过qemu和gdb调试,作者解析了启动过程中地址计算、段寄存器设置和内核加载机制。最后讨论了内核启动后的保护模式下虚拟内存的运作和栈的初始化。
摘要由CSDN通过智能技术生成

MIT6.828 lab1地址:http://pdos.csail.mit.edu/6.828/2014/labs/lab1/




第一个练习,主要是让我们熟悉汇编,嗯,没什么好说的。


Part 1: PC Bootstrap

首先,整个实验使用qemu这款模拟软件来,来对代码进行调试,相当于我们在qemu这个模拟的计算机平台上,运行自己的程序。可以再qemu这个软件上进行gdb的调试,比较方便。

首先看下整个内核在qemu上的模拟的结果:



整个内核现在能实现的就两个功能,一个kerninfo,显示内核的一些简单信息,还有个help,暂时什么都没有。这里先来看下kerninfo里面的东西,主要是内核的一些入口地址,数据,程序地址什么的。这里可以看到,虚拟内存和物理内存的映射就是简单的线性映射,比较直观。

接下来看一下系统的具体的启动过程是怎么样的:



这张图是整个系统的物理内存的分布。主要看一下地址在0x100000(1MB)以下的内存分布情况,系统启动的时候主要是在1M以下的地方活动。对于很多PC来说,1M一下的存储布局都是差不多的,这个主要是因为最开始的Intel的的8088一开始内存只有1M,所以后面的计算机为了向下兼容,在1M一下的内存布局都是这样的。

这里主要是看下BIOS,BIOS是Basic Input/Output System,主要的工作是做各种初始化,比如检查一下内存的大小,还有显卡等一些外设的初始化,然后会载入OS,运行内核。

接下来看一下BIOS的具体的引导步骤:

首先,打开两个终端,分别输入命令:make qemu-gdb和gdb

打开gdb,就可以看到下面的内容:


程序是从地址0xffff0开始的,而且一开始就来一个长跳转。开始地址是0xffff0的原因是,以前的PC因为只有1M的内存,采用的是实地址模式,为了在开机和重启的时候能够保证跳到BIOS里面,就把开始的地址设定为0xffff0,因为那个地址已经非常的接近1M地址的顶部,在那里不会有其他程序。

可以看到,在左边,有一个[f000:fff0],程序地址就是通过这个来计算的。这两个分别是寄存器cs和eip的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值