码迷,mamicode.com
首页 > 其他好文 > 详细

《第三讲 操作系统启动》

时间:2015-03-10 16:47:53      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:

     先回顾下上节课内容。上电后,计算机首先将操作系统从磁盘中载入到内存里,由引导程序bootsect.s完成。bootsect.s将操作系统的代码分段读入,首先读setup,打出logo,

把操作系统中的system部分也读进来,bootsect完成使命,接下来交给setup执行。

     操作系统通过setup对计算机的硬件建立认知,对其进行管理。

    技术分享

       int 0x15:15号中断,获取物理内存的大小。

       mov [2],ax:扩展内存。

       接下来的程序把操作系统从90000处移到了0处,以后内存从0处开始为操作系统,之上为应用程序。这也解释了为什么上节课中要对setup进行向上移动。

       setup退出之前,进入保护模式。

       技术分享

     

     jmpi 0,8 跳到80处,会发生错误,正确应该跳到0处,所以,寻址方式应该发生改变。原因是,对于16位机,只能寻址1M的内存空间,

要想扩大寻址空间,改为32位寻址方式,也叫保护模式。两种方式的本质区别在于,cpu对程序的解释不同。通过两条红色指令,改变PE的值

就可切换。

   gdt(global describation table):表用硬件完成,目的是速度更快。

    技术分享

   CS:不再是左移四位的基址,而是选择子,对应的是查表的下标索引,表中存放基址。所以jmpi 0,8中CS=8是查表,根据表项产生基址。

   在setup中对表进行初始化

   技术分享

    总结下setup的作用:读硬件参数(为以后建立参作系统打下基础),挪动system到00地址处(操作系统的核心代码将一直停在此处),然后启动保护模式,

最后应用一条高级指令(32位)跳到0地址处执行。

    接着执行system处的代码。

    makefile:操作系统通过makefile产生一个Image(镜像,符合bootsect-setup-system)并放入0磁道0扇区,然后操作系统被顺利读入,产生桌面。

    技术分享

   head.s是system的第一段代码,通过树状结构完成Image。

   由head.s调用main.c,借助堆栈完成,L6永远不会被执行。

   技术分享

  进入main.c函数,主要完成对硬件的初始化

  技术分享

   以对内存初始化为例:

   技术分享

   以数组的形式对内存进行初始化。

  

  总结下这节课,实际上完成了两件事:把操作系统读入内存,完成初始化。

《第三讲 操作系统启动》

标签:

原文地址:http://www.cnblogs.com/573177885qq/p/4326183.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!