197. 00_6.828Preparation
工具下载安装
下载
- gmp
- https://www.mpfr.org/mpfr-3.1.2/mpfr-3.1.2.tar.bz2
- http://www.multiprecision.org/downloads/mpc-0.9.tar.gz
- http://ftpmirror.gnu.org/binutils/binutils-2.21.1.tar.bz2
- http://ftpmirror.gnu.org/gcc/gcc-4.6.4/gcc-core-4.6.4.tar.bz2
- http://ftpmirror.gnu.org/gdb/gdb-7.3.1.tar.bz2
- https://github.com/mit-pdos/6.828-qemu.git
1
2
3
4
5
6
7$ git clone https://github.com/mit-pdos/6.828-qemu.git qemu
$ cd qemu
$ ./configure --disable-kvm --disable-werror --prefix=/usr/local --target-list="i386-softmmu x86-64-softmmu"
$ sudo apt-get install autoconf automake libtool
$ sudo apt-get install libffi-dev
$ make
$ sudo make install
安装
安装的一般命令
- 解压:
tar -xvf xxx.tar.bz
cd xxx
- 配置:
./configure --prefix=/usr/local
(这里的配置命令可能各不相同, 可以参见官网或者这里) - 编译:
make
- 安装:
sudo make install
安装全部命令
1 | tar xjf gmp-5.0.2.tar.bz2 |
安装过程中出现的问题
库找不到问题
- 手动添加库的路径到环境变量里:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
- 手动添加库的路径到环境变量里:
实验用的源码
1 | $ git clone https://pdos.csail.mit.edu/6.828/2018/jos.git lab |
基础知识
基本概念
CPU
16位CPU: 意味着它内部的寄存器都是16位的
寄存器
概念
CPU可以直接使用的小、快速的存储空间, 在执行命令时, 寄存器是直接参与运算的
分类
段寄存器
- CS
- DS
- ES
- SS
通用寄存器
- AX
- BX
- CX
- DX
其他寄存器
- IP
- SP
- BP
- SI
- DI
- FLAG
使用
为什么不把立即数直接赋值给数据段寄存器?
由于8086CPU不允许我们这样做
可能防止由于轻易改变DS而造成一些混乱
内存
CPU外部的存储空间, 他跟CPU通过地址总线, 数据总线和控制总线相连. 若使用内存中的数据, 必须通过这些总线与内存取得联系, 而且CPU直接使用的都是寄存器中的数据, 内存中的数据必须先装载在到寄存器中才能参与运算.
布局
BIOS ROM
地址空间范围
- 8086:
0xF0000 -> 0xFFFFF
- 8086:
作用
是系统上电时最先执行的代码, 比操作系统还要早, 是计算机厂商在出厂时固化的一段代码. 负责上电自检(开机自检), 加载磁盘的活动分区
上电自检(Power On self Test): 检查各个硬件是否正常
加载磁盘的第一个可引导扇区
一个扇区512Byte, 如果最后两个字节是
0xaa55
, 则BIOS判定该扇区可引导, 并将该扇区加载到0x0000:0x7c00
的内存簇, 然后使用跳转指令跳到该簇(CS=0x0000, IP=0x7c00)执行, 将执行流交给了0x0000:0x7c00
处的代码
我们能做什么
就是在磁盘的第一个扇区存放我们的代码