!!!本文暂时停更,等学习完普通的操作系统再来此课程进阶学习
说明:本课程为哈尔滨工业大学李治军老师所开公开课,本文仅作笔记,供复习学习使用
代码部分采用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去执行