8000 GitHub - JanSky520/MikuOS: 自制简单的操作系统
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

JanSky520/MikuOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MBR 主引导记录


计算机的启动过程


  1. 程序必须载入内存中运行。
    • 硬件设计的约束。CPU 的指令执行单元只能访问内存,无法从硬盘等存储设备读取;内存随机访问速度快,满足 CPU 实时执行的需求。
    • 统一管理简化设计。若 CPU 可以访问外存,会增加硬件复杂性;操作系统只需管理内存分配即可。
    • 由加载器将程序代码从外存复制到内存的特定区域,程序中的逻辑地址映射到物理内存地址。
    • 将 CS:IP 指向程序的入口地址
  2. 按下主机上的开机键后,第一个运行的软件是BIOS。
    • CPU 加电后,CS:IP 被初始化为 0xF000:0xFFF0(物理地址为 0xFFFF0),此处存放一条跳转指令,跳转到 BIOS 的启动代码。
      jmp far f000:e05b    ; 0xF000:0xFFF0 存放的跳转指令
              
    • BIOS 代码固定在主板的 ROM 内存中,无需外部加载器。

BIOS 的详细介绍


  • 实模式中只能访问 1MB 的内存。
    区域地址
    :–::–:
    系统 BIOS0xF0000~0xFFFFF
    扩展 ROM0xC0000~0xEFFFF
    adadadaa
  1. 开机的那一刻,设置 CS:IP 的初值为 F000:FFF0,实际地址为 0xFFFF0,执行该代码段代码。0xFFFF0~0xFFFFF 为 BIOS 的入口地址。 “`asm jmp far f000:e05b ;跳向 0xE05B 处,这是 BIOS 代码真正开始的地方。这条指令占5字节,剩余11字节可能填充为 NOP 或厂商信息。 “`
  2. 将段寄存器 CS 设置为 0xF000,用于计算 BIOS 代码的物理地址。
  3. 接下来 BIOS 检测内存显卡等外设信息。
  4. 在内存 0x000~0x3FF建立数据结构,中断向量表 IVT 并填写中断例程。256个中断向量,每个4字节,总共 1KB。

## 硬盘操作

  • 0X1F0:16位端口,用于读写数据
  • 0X1F1:检测前一个指令的错误(基本用不到)
  • 0X1F2:读写扇区的数量,最大256
  • 0X1F3:起始扇区的 0~7 位
  • 0X1F4:起始扇区的 8~15 位
  • 0X1F5:起始扇区的 16~23 位
  • 0X1F6:device 寄存器
      5388
    • 0~3:起始扇区的 24~27 位
    • 4:0 表示主盘,1 表示从盘
    • 6:0 表示 CHS,1 表示 LBA
    • 5 与 7:固定是 1
  • 0X1F7:out 操作
    • 0XEC:识别硬盘
    • 0X20:读硬盘
    • 0X30:写硬盘
  • 0X1F7:in 操作
    • 0:ERR,此位为 1 表示有错误发生
    • 3:DRQ,此位为 1 表示硬盘已经准备好数据,随时可以输出
    • 6:DRDY,此位为 1 表示设备就绪,等待指令
    • 7:BSY,此位为 1 表示硬盘正忙,勿扰

About

自制简单的操作系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0