- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第三章系统的启动和初始化
(includelab1)提纲系统的启动显示输出JOS操作系统的结构物理内存的分布物理内存的0x000A0000-0VGA显示存储、BIOSROM以及扩展ROM物理内存的高端0xefffffff-0xffffffff往往被PCI设备的外设I/O所占据。系统的启动BIOS的加载在PC启动的时候,首先会在实模式下运行BIOS;80386在设计的时候必须考虑向下兼容性,所以80386以及其后的机器在启动后,仍然是处于实模式;PC启动的Bochs模拟演示系统的启动(续)BIOS加载完成后……1BIOS主要完成系统自检、以及启动前的准备工作(如让各个设备做好准备工作)2BIOS的工作完成后,BIOS将会读取硬盘的MBR(MasterBootRecord,硬盘的第0柱面、0磁道、0扇区。512字节)到内存的0x7c00到0x7dff的位置(被装入的程序又被称为BootLoader),紧接着再执行一个跳转指令将CS设置为0x0000,IP设置为0x7c00,即刚被装入的BootLoader3找到JOS中Bootloader的程序4系统的启动(续)main.c的主要作用是将内核的可执行代码从硬盘镜像中读入到内存中。JOS中的BootLoaderboot.S主要是将处理器从实模式转换到32位的保护模式,这是因为只有在保护模式中我们才能访问到物理内存高于1MB的空间;BootLoader的源程序是由一个叫做的boot.S的ATT汇编程序与一个叫做main.c的C程序组成的。理解boot.S,和main.c系统的启动(续)链接地址和加载地址01/boot/Makefrag02$(V)$(LD)$(LDFLAGS)-N-estart-Ttext0x7C00-o$@.out$^03系统演示04系统的启动(续)系统的启动(续)ELF文件头.text节:可执行指令的部分.rodata节:只读全局变量部分.stab节:符号表部分.stabstr节:符号表字符串部分.data节:可读可写的全局变量部分.bss节:未初始化的全局变量部分,这一部分不会在磁盘有存储空间,因为这些变量并没有被初始化,因此全部默认为0,于是在将这节装入到内存的时候程序需要为其分配相应大小的初始值为0的内存空间.comment节:注释部分,这一部分不会被加载到内存系统的启动(续)ELF文件头的数据结构e_entry是可执行程序的入口地址e_phoff和e_phnum可以用来找到所有的程序头表项e_phoff是程序头表的第一项相对于ELF文件的开始位置的偏移e_phnum则是表项的个数e_shoff和e_shnum可以用来找到所有的节头表项structElf{ uint32_te_magic;//标识文件是否ELF文件 uint8_te_elf[12];//魔数和相关信息 uint16_te_type;//文件类型 uint16_te_machine;//针对体系结构 uint32_te_version;//版本信息 uint32_te_entry;//Entrypoint程序入口点 uint32_te_phoff;//程序头表偏移量 uint32_te_shoff;//节头表偏移量 uint32_te_flags;//处理器特定标志 uint16_te_ehsize;//文件头长度 uint16_te_phentsize;//程序头部长度 uint16_te_phnum;//程序头部个数 uint16_te_shentsize;//节头部长度 uint16_te_shnum;//节头部个数 uint16_te_shstrndx;//节头部字符索引};系统的启动(续)CodewalkELF文件的装入在JOS中实现字符显示的过程Codewalk8进制数据的显示显示输出分为boot和kern两个部分01kernel部分的程序链接地址和加载地址的分析02程序执行时,如何从链接地址转化到加载地址?03为什么要这样设计?04JOS操作系统的结构JOS操作系统的结构(续)Kernel部分在voidi386_init(void)函数中,有以下定义:externcharedata[],end[];然而,我们发现edata和end并没有在某个.h或者.c文件定义kern.ld:PROVID
文档评论(0)