!!!本文暂时停更,等学习完普通的操作系统再来此课程进阶学习

说明:本课程为哈尔滨工业大学李治军老师所开公开课,本文仅作笔记,供复习学习使用
代码部分采用Linux 0.11部分内核代码,实验部分采用实验楼的实验

揭开钢琴的盖子

初始化

打开电源后发生了什么?
关注ip指针指向的内容,这部分显然由硬件的设计者来决定

x86PC

  • 刚开机的时候cpu处于实模式,按照实模式来寻址,cs左移四位+ip
  • 开机时,CS = 0xFFFF IP = 0x0000
  • 寻址到0xFFFF0,为ROM BIOS映射区(BIOS = basic input output system)
  • 检查RAM,键盘,显示器和软硬磁盘等
  • 将0磁道0扇区读入0x7c00处
  • 设置CS = 0x07c0 IP=0x0000

0x7c00处存放的代码就是从引导扇区读入的那512个字节

bootsec.s

第一部分:将自身,即bootsec由段0x07c0移动到段0x9000,共计256个字,然后跳转到go标号处,即下一条指令继续执行

第二部分:利用BIOS中断INT 0x13将setup模块从磁盘第二个扇区开始读到0x90200处,共读四个扇区

第三部分:setup模块读入后
显示字符信息

操作系统启动

setup.s

第一部分:移动system模块

第二部分:启动保护模式

gdt:global description table
保护模式下的寻址模式:根据cs查表+ip

将system移动到0x0000处

第三部分:跳转到system去执行