网站大量收购独家精品文档,联系QQ:2885784924

软件系统分析与设计LINUX引导与初始化.pptVIP

软件系统分析与设计LINUX引导与初始化.ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件系统分析与设计LINUX引导与初始化

LINUX引导与初始化 武汉大学计算机学院 郑鹏 Email:pzheng51@163.com LINUX引导1 1.当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码(只用于实模式高地址位忽略),也就是ROM-BIOS起始位置的代码。BIOS先进行一系列的系统自检,然后初始化位于地址0的中断向量表。最后BIOS将启动盘的第一个扇区,也就是bootsect.S(bootsect.S存放于磁盘的主引导扇区 ),装入到0x7C00 (31K;0111,1100,0000,0000)处,并开始执行此处的代码。 LINUX引导2 2.当bootsect.S开始运行时,将自己装入到绝对地址0x90000 (576K;1001,0000,0000,0000,0000)处,再将其后的2k字节代码(boot/setup.s)装入到地址0x90200 (576.5k;1001,0000,0010,0000,0000)处,最后将核心的其余部分(system 模块)装入到0x10000(64k;1,0000,0000,0000,0000)。当系统装入时,会显示Loading...信息。 装入完成后,控制转向另一个实模式下的汇编语言代码boot/setup.S。 因为当时system 模块的长度不会超过0x80000 字节大小(即512KB),所以它不会覆盖在0x90000处开始的bootsect 和setup 模块。 LINUX引导3 3.Setup部分首先设置一些系统的硬件设备,然后关掉所有中断,把系统下移到0x0000(0k;0000,0000,0000,0000,0000)处,改变到保护模式,然后开始系统的运行。系统必须重新在保护模式下初始化自己的系统表格,并且打开所需的中断。 LINUX引导4 4.接下来是内核的解压缩。0x0000处的代码来自于文件Boot/head.S,它用来初始化寄存器和调用decompress_kernel()程序。decompress_kernel()程序由Boot/inflate.c, Boot/unzip.c 和Boot/misc.c组成。解压缩后的数据被装入到了0x100000处,这也是Linux不能在内存小于2M的环境下运行的主要原因。 5.解压后的代码在0x1010000处开始执行,紧接着所有的32位的设置都将完成: IDT、GDT和LDT将被装入,处理器初始化完毕,设置好内存页面,最终调用start_kernel过程。 LINUX引导5 6.start_kernel()程序用于初始化系统内核的各个部分,包括: 设置内存边界,调用paging_init()初始化内存页面。 初始化陷阱,中断通道和调度。 对命令行进行语法分析。 初始化设备驱动程序和磁盘缓冲区。 校对延迟循环。 7.最后,系统核心转向move_to_user_mode(),以便创建初始化进程(init)。此后,进程0开始进入无限循环。 LINUX引导6 启动引导时内核在内存中的位置和移动后的位置情况 bootsect.s 程序 功能描述 bootsect.s 代码是磁盘引导块程序,驻留在磁盘的第一个扇区中(引导扇区,0 磁道(柱面),0 磁头,第1 个扇区)。在PC 机加电ROM BIOS 自检后,引导扇区由BIOS 加载到内存0x7C00 处,然后将自己移动到内存0x90000 处。该程序的主要作用是首先将setup 模块(由setup.s 编译成)从磁盘加载到内存,紧接着bootsect 的后面位置(0x90200),然后利用BIOS 中断0x13取磁盘参数表中当前启动引导盘的参数,接着在屏幕上显示“Loading system...”字符串。再者将system 模块从磁盘上加载到内存0x10000 开始的地方。随后确定根文件系统的设备号,若没有指定,则根据所保存的引导盘的每磁道扇区数判别出盘的类型和种类并保存其设备号于root_dev(引导块的0x508 地址处),最后长跳转到setup 程序的开始处(0x90200)执行setup 程序。 setup.s 程序 功能描述 setup 程序的作用主要是利用ROM BIOS 中断读取机器系统数据,并将这些数据保存到0x90000 开始的位置(覆盖掉了bootsect 程序所在的地方)。内核相关程序使用这些参数。 然后setup 程序将system 模块从0x10000-0x8ffff(当时认为内核系统模块system 的长度不会超过此值:512KB)整块向下移动到内存绝对地址0x00000 处。接下来加载中断描述符表寄存器(idtr)和全局描述符表寄存器(gdtr),开启A20 地址线,重新设置两个中断控制芯片8259A,将硬

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档