gem-universe / blog

0 stars 0 forks source link

[操作系统]3. 硬件视角的操作系统 #3

Open supergem3000 opened 7 months ago

supergem3000 commented 7 months ago

计算机硬件的状态机模型

状态:内存和寄存器数值 初始状态:手册规定(CPU Reset) 状态迁移

各种平台规定自己的CPU Reset状态,主板Firmware根据约定状态加载,并加载操作系统。

Legacy BIOS:约定

把第一个可引导设备的第一个512字节加载到物理内存的7c00位置。此时处理器处于16-bit模式。

#define SECT_SIZE  512

.code16  // 16-bit assembly

// Entry of the code
.globl _start
_start:
  lea   (msg), %si   // R[si] = &msg;

again:
  movb  (%si), %al   // R[al] = *R[si]; <--+
  incw  %si          // R[si]++;           |
  orb   %al, %al     // if (!R[al])        |
  jz    done         //   goto done; --+   |
  movb  $0x0e, %ah   // R[ah] = 0x0e;  |   |
  movb  $0x00, %bh   // R[bh] = 0x00;  |   |
  int   $0x10        // bios_call();   |   |
  jmp   again        // goto again; ---+---+
                     //                |
done:                //                |
  jmp   .            // goto done; <---+

// Data: const char msg[] = "...";
msg:
  .asciz "This is a baby step towards operating systems!\r\n"

// Magic number for bootable device
.org SECT_SIZE - 2
.byte 0x55, 0xAA

UEFI上的操作系统加载

磁盘必须按GPT方式格式化,预留一个FAT分区,Firmware能够加载任意大小的PE可执行文件.efi。

实现最小操作系统

用510字节指令完成磁盘->内存的加载,初始化C程序的执行环境,操作系统就开始运行了。