MIT_6.828_LAB1

本文详细介绍了MIT 6.828操作系统课程实验1的内容,包括环境搭建、预备知识和实验内容。实验涉及X86汇编语言、Linux VIM编辑器和GDB调试命令。实验内容涵盖了PC的启动过程、引导加载器的工作原理以及内核加载机制。读者将学习到如何从实模式切换到保护模式,理解启动扇区加载和内核加载的步骤,以及如何使用GDB进行调试。
摘要由CSDN通过智能技术生成

一、环境搭建

首先我们需要搭建好环境,主要包括以下步骤:
1.安装VMware15并安装虚拟机Ubuntu
2.安装git 和python
3.根据MIT课本测试/安装工具链
4.克隆并安装qemu及相关依赖包
4.克隆编译jos系统并加载
具体操作步骤可以参考

MIT6.828课程实验环境搭建
MIT 6.828 环境配置

二、预备知识

在开始实验前,建议积累下列知识,有助于顺利地进行后续练习.
1.对X86(AT&T语法)汇编语言的初步了解
参考资料: 6.828_X86参考资料或者 X86汇编程序基础(AT&T语法)
参考书籍: <<X86汇编语言:从实模式到保护模式>>
2.Linux下VIM编辑器的基本操作
参考资料: Linux环境下vi/vim编辑器常用命令
3.gdb调试命令
参考资料:6.828 GDB相关命令

三、实验内容

Part1:PC BootStrap

1.PC的物理地址空间

1.早期pc
(1).早期的PC基于intel8088 16位处理器,只有1MB的寻址范围,从0x00000000-0x000FFFFF,低地址的640KB由RAM组成,高地址的384KB由ROM组成。
(2)最重要的是存放在1MB空间最顶端64KB中的BIOS(基本输入输出系统),BIOS的主要功能为初始化及自检,从软盘/磁盘/光盘装载操作系统,并在之后将控制权移交给操作系统,早期BIOS存储在ROM中,现在的BIOS存储在闪存之中。
(3)虽然现代处理器早已突破1MB的寻址范围,但为了向下兼容,仍然保留了这1MB的物理地址的布局,计算机刚刚启动时处于实模式(寻址范围为1MB,这1MB称为常规内存),在操作系统运行起来后就切换到保护模式(此时32位地址线全部有效,寻址范围为4GB,1MB以上的存储空间称为扩展内存)

Part 2: The Boot Loader

概述:软盘和硬盘都被分为一个个大小为512字节的区域,称为扇区,扇区是磁盘交换数据的最小单位,
每次至少交换一个扇区,启动磁盘的第一个扇区称为启动扇区,the boot loader正是存放在启动扇区内,当BIOS找到启动磁盘时,会将512字节大小的启动扇区装入物理地址为0x7c00-0x7dff的内存.之后会执行跳转指令设置CS:IP寄存器为0000:7c00,并将控制权移交给boot loader。

1.The Boot Loader的组成:boot.S,main.c
1.1 boot loader的主要功能
(1) 转模式: 将处理器从实模式转换到32位保护模式,这样才能访问超过1MB的存储空间(实模式下的物理地址
转换:段基址<<4(存于CS)+段内偏移量(存于IP) -> 20位地址,而保护模式下的地址转换有所不同)。
(2)读内核: 使用X86特定的I/O指令直接访问IDE磁盘设备寄存器,并从磁盘中读取内核。
main.c的作用: 读取并启动来自第一个IDE硬盘的ELF内核映像

1.2 boot.S主要做了几部分工作?
(1).关中断(BIOS运行过程中可能开了中断,这也意味着boot loader是一个一气呵成不可被打断的过程)
(2).清空数据段寄存器(BIOS运行过程中,可能对这些寄存器有所操作,在进行boot loader前必须清零)
(3).将实模式转换到保护模式(这个阶段涉及到对外部设备的操作和GDT表的操作等,具体细节还没弄清楚)
(4).转到main.c中调用bootMain()函数

1.3 bootMain()函数做了什么工作?
将内核映像从磁盘读入内存,并跳转到内核的第一条指令开始执行

2.磁盘布局:the boot loader(boot.S,main.c)放在第一个扇区,第二个扇区开始存放内核映像

3.启动步骤:
3.1.BIOS在做完一系列自检(如检查已安装的内存量)和初始化工作(设置中断,初始化外设等)后,从启动磁盘中取出第一个扇区(即启动扇区)加载到内存中,并跳转到指定位置,将控制权交给the boot loader并开始执行。
3.2.程序从boot.S文件开始,从实模式转换到保护模式,之后运行.c,调用bootmain()函数
3.3.bootmain()函数将读取内核程序,然后跳转到内核程序开始运行操作系统内核.

练习3:
在0x7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值