手写操作系统 - 4.加载内核

109 阅读1分钟

B站视频链接 - 【205.读取磁盘代码】

加载内核

把内核代码加载到内存中的哪个位置?

x86实模式内存布局

起始结束大小用途
FFFF0FFFFF16BBIOS系统入口地址
F0000FFFEF64KB-16BBIOS系统源代码
C8000EFFFF160KB映射硬件适配器的ROM或内存映射I/O
C0000C7FFF32KB显示适配器BIOS
B8000BFFFF32KB文本模式显示适配器
B0000B7FFF32KB黑白显示适配器
A0000AFFFF64KB彩色显示适配器
9FC009FFFF1KBEBDA扩展BIOS数据区
7E009FBFF622080B约608KB用做存储内核代码
7C007DFF512BMBR
5007BFF30464B约30KB
4004FF256BBIOS数据区
0003FF1KB中断向量表

内存规划

起始结束大小(扇区)用途
7C007DFF1BOOT
7E008FFF9BOOT LOADER
90009FBFF*KERNEL

内核加载过程

graph LR;
A("Boot")
B("Boot Loader(Kernelx16)")
C("Kernelx32")
A-->B-->C
Boot职责
  • 从硬盘中读取kernelx16代码到内存中
  • 跳转到kernelx16_start位置开始执行
BootLoader(Kernelx16)职责
  • 内存检测
  • 全局描述符
  • 从实模式进入保护模式
Kernelx32职责
  • 内存管理
  • 任务调度
  • 文件系统
  • ...