• MIT Operating System Engineering#0 Booting a PC


    最近在学MIT的OS课程,lab绝对业界良心。
    XJTU的操作系统课就是写一个系统调用,改下进程软中断通信的代码,代码量不足500。。。
    MIT上课用xv6来教学,lab是做一个完整的小型操作系统JOS。


    配置环境

    虽然没什么技术含量,但是这真的是令人头疼的事。附:图文教程
    需要一台x86机器,一般的Linux发行版应该都可以,可以使用unabenlme -a查看,如果显示xxx GNU/Linux就行,MIT的学生可以使用配置好的远程Server。
    本来打算白嫖下Harvard的服务器,但是没有root权限,只能可怜巴巴地在Win环境用虚拟机。
    平台:Vmware Player15,Ubuntu-14.04.5-desktop-i386.iso

    • 检验编译链
      objdump -i:第二行显示elf32-i386;
      gcc -m32 -print-libgcc-file-name:打印出/usr/lib/gcc/i686-linux-gnu/4.8/libgcc.a
    • 安装git:sudo apt-get install git
    • 下载qemu
      建议不要作死,安装MIT Patch过的版本:git clone https://github.com/mit-pdos/6.828-qemu.git qemu
    • 安装依赖库
      官方说要装5个库,但其实libtool-bin好像找不到,不过不影响后续:
    sudo apt-get install libsdl1.2-dev
    sudo apt-get install libglib2.0-dev
    sudo apt-get install libz-dev
    sudo apt-get install libpixman-1-dev
    
    • 配置qemu
      切到qemu目录,./configure --disable-kvm --disable-werror --target-list="i386-softmmu x86_64-softmmu"
      [--prefix=PFX]可选参数是选择安装路径,这里就默认在/usr/local
    • 安装qemu:sudo make && sudo make install
    • 下载实验代码
      根目录下新建6.828目录,切到该目录,git clone https://pdos.csail.mit.edu/6.828/2018/jos.git lab,切到lab目录,make就可以了。

    PC Bootstrap

    物理地址空间:
    在这里插入图片描述
    以前的PC内存只有1MB,Low Memory是PC唯一能用的RAM。VGA Display是VGA缓冲区和固件,BIOS以前都在ROM中,不过现今都在闪存中,做完系统初始化(PCI总线等重要设备),寻找bootable设备(硬盘),读取boot loader加载OS,将控制权转OS。后来内存远远超过1MB,可用的也就有Extended Memory,不过为了后向兼容,还是保留了Low Memory,这样可用的RAM就被分为了两部分。如果64位系统,那么内存更大,这样为了兼容,32-bit memory mapped devices还是要保留,就又被割裂了。

    The Boot Loader

    硬盘的第一个分区存放启动程序,包括一个汇编文件boot/boot.S和一个C文件boot/main.c,启动程序将CPU从实模式转为32位保护模式,通过特殊的I/O指令读取内核。

    The Kernel

  • 相关阅读:
    (floyd+DP) zoj 3027
    (树形DP) acdream 1028
    acdream 1032
    (BFS) acdream 1191
    (树形DP) bzoj 1060
    (状态压缩DP) poj 2978
    (DP) codeforces 358D
    (DP+二分) hdu 3433
    (最大生成树) hdu 3367
    hdoj 3501
  • 原文地址:https://www.cnblogs.com/EIMadrigal/p/13603079.html
Copyright © 2020-2023  润新知