操作系统的启动
来源:互联网 发布:淘宝买家喜好度 编辑:程序博客网 时间:2024/06/07 03:25
bootsect.s
x86(inter)结构电脑刚开机时CPU处于实模式状态;cs<<4+ip
内存中有一段固化的代码(ROM bios)//基本输入输出,位于0xFFFF0
cs=0xFFFF//段寄存器 ip=0X0000//偏移
先检查硬件,如果不合格操作系统无法执行
start:
如果硬件通过则将磁盘中的0磁道的0扇区(操作系统的引导扇区)的内容读到0x07c00,紧接着cs=0x07c0,ip=0x0000
将bios读入的bootsect.s从0x7c00移到0x90000//留下这段空间留给操作系统使用
load_setup:
从磁盘的第二个扇区开始读四个扇区(setup)读入到内存0x90200处
ok_load_setup:
打印开机logo
read_it:
读入system模块 然后将控制权转交给setup去执行
setup.s
start:
完成OS启动前的设置
int 0x15(获得物理内存的大小)并保存//便于以后操作系统管理内存;
将得到的硬件设备的信息放到0x90000处;
do_move:
将system模块移到内存中的0地址处,跳到system的第一个模块开始执行(通过makefile来控制)
所有的源码通过MakeFile生成Image
setup最后:进入保护模式,临时建立一个GDT表并初始化
保护模式下的地址翻译:GDT(Global Describe Table),inter结构通过硬件产生32位地址cs(选择子)cs放的是查表的索引,利用下标查表得到基址+ip;
保护模式下的中段处理:IDT,找到中断处理函数的入口地址
System
head.s->main.c
课后疑问:
mem_init就是初始化一个数组,下面哪个论述不对?()
- A.
数组中的每个项表示固定大小的一段内存
- B.
初始化时将所有数组项中的内容都设置为0
- C.
mem_init调用之前可以不获得物理内存的大小
- D.C为何正确????
如果某个数组项中的内容为0,则表示对应的那一段内存空闲
- 操作系统的启动
- 嵌入式操作系统的启动
- 启动操作系统的Bootloader
- 操作系统的启动详解
- Linux操作系统的启动
- 操作系统的启动
- 操作系统的启动流程
- 操作系统的启动
- 操作系统的启动过程
- 操作系统的启动过程
- Linux操作系统的启动过程
- 操作系统启动的伯乐---BIOS
- 【操作系统】计算机的启动过程
- 【GRUB2】通过操作系统的ISO文件 启动或安装操作系统
- 关于linux操作系统启动的过程
- Windows操作系统的启动过程截图
- 删除grub恢复windows操作系统的启动
- 修改ubuntu的操作系统启动菜单
- chrome插件开发之:一键购物助手功能开发总结
- JAVA WEB 学习之旅
- 生成带logo图像的二维码
- Java内存模型(JMM)以及 垃圾回收机制 小结
- 常见内存错误大全
- 操作系统的启动
- UVA 1169 Robotruck(dp+单调队列滑动窗口)
- 【一步步学OpenGL 15】 -《相机控制2(鼠标事件)》
- http://blog.csdn.net/lmj623565791/article/details/37620057
- 【9月英语——与猪小妹为伴】
- java中的数组
- http://blog.csdn.net/lmj623565791/article/details/37657225
- 开源库记载
- C++ 操作MySql数据库实例讲解