标签:
一个操作系统是怎么实现的呢?让我们慢慢来学习,本文章将带大家来了解操作系统各种功能的实现以及保护模式。同时告诉大家中国自主开源操作系统UdoOS,UdoOS项目成立于2016年2月,是一款由中国人自主开发的基于自主开发的Udo内核的自主操作系统,在UdoOS中没有任何其他系统的代码,UdoOS官网:xh.14eowi.com
一、引导扇区
1.1 电脑的启动过程
CPU初始化
↓
BIOS自检
↓
读取有效启动扇区
↓
载入0c700h内存
↓
跳到0c700h开始运行
1.2 什么是引导扇区
所谓扇区,就是硬盘(存储设备)的划分单位,一个扇区就是512个字节。引导扇区就是硬盘中的第一个扇区,所以引导扇区必须是512个字节,不能多也不能少
1.3 运行地址
前面说过bios会把引导扇区载入0c700h内存开始运行,那么必须让编译器从0c700h开始编译,所以第一句应该写 org 0c700。
1.4 Loader
引导扇区只有512个字节,所以不能装下整个操作系统,所以要在引导扇区中写一个内核加载器(Loader),它的任务就是把找出内核在那个扇区开始在那个扇区结束,并读取内核到内存,然后跳到这段内核开始运行。
1.5 读硬盘扇区
mov ax,开始地址
mov es,ax
mov bp,0x00
mov ah,0x02
mov al,扇区数
mov ch,柱面号
mov cl,扇区号
mov dh,磁头数
mov dl,0x80 ;0x80为硬盘,0x00为软盘
int 0x10
以上为汇编代码
代码详解:
该代码通过bios中断读取硬盘并载入内存。
1.4 跳入内核开始运行
jmp 开始地址:0000
注意:这里的地址必须与读硬盘时的地址一致
二、内核结构与保护模式
2.1 运行地址
org 运行地址
注意:这里的运行地址必须与引导扇区的开始地址一致
2.2 进入保护模式
mov ax,0x00
mov ds,ax
lgdt [ds:GDT]
lidt [ds:IDT]
;载入GDT,IDT
in al,0x92
or al,00000010B
out 0x92,al
;打开21号总线
cli
mov eax,cr0
or eax,1
mov cr0,eax
;正式进入保护模式
jmp 运行地址:标号名
标签:
原文地址:http://www.cnblogs.com/xhsw/p/5470873.html