系统的启动和初始化includelab

系统的启动和初始化includelab

ID:27762442

大小:337.34 KB

页数:17页

时间:2018-12-05

系统的启动和初始化includelab_第1页
系统的启动和初始化includelab_第2页
系统的启动和初始化includelab_第3页
系统的启动和初始化includelab_第4页
系统的启动和初始化includelab_第5页
资源描述:

《系统的启动和初始化includelab》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第三章系统的启动和初始化(includelab1)提纲系统的启动显示输出JOS操作系统的结构系统的启动物理内存的分布物理内存的0x000A0000-0x00100000为VGA显示存储、BIOSROM以及扩展ROM物理内存的高端0xefffffff-0xffffffff往往被PCI设备的外设I/O所占据。系统的启动(续)BIOS的加载80386在设计的时候必须考虑向下兼容性,所以80386以及其后的机器在启动后,仍然是处于实模式;在PC启动的时候,首先会在实模式下运行BIOS;PC启动的Bochs模拟演示系统的启动(续)BIOS加载完成后……BIOS主

2、要完成系统自检、以及启动前的准备工作(如让各个设备做好准备工作)BIOS的工作完成后,BIOS将会读取硬盘的MBR(MasterBootRecord,硬盘的第0柱面、0磁道、0扇区。512字节)到内存的0x7c00到0x7dff的位置(被装入的程序又被称为BootLoader),紧接着再执行一个跳转指令将CS设置为0x0000,IP设置为0x7c00,即刚被装入的BootLoader找到JOS中Bootloader的程序系统的启动(续)JOS中的BootLoaderBootLoader的源程序是由一个叫做的boot.S的AT&T汇编程序与一个叫做mai

3、n.c的C程序组成的。boot.S主要是将处理器从实模式转换到32位的保护模式,这是因为只有在保护模式中我们才能访问到物理内存高于1MB的空间;main.c的主要作用是将内核的可执行代码从硬盘镜像中读入到内存中。理解boot.S,和main.c系统的启动(续)链接地址和加载地址/boot/Makefrag$(V)$(LD)$(LDFLAGS)-N-estart-Ttext0x7C00-o$@.out$^系统演示系统的启动(续)ELF文件头.text节:可执行指令的部分.rodata节:只读全局变量部分.stab节:符号表部分.stabstr节:符号表字

4、符串部分.data节:可读可写的全局变量部分.bss节:未初始化的全局变量部分,这一部分不会在磁盘有存储空间,因为这些变量并没有被初始化,因此全部默认为0,于是在将这节装入到内存的时候程序需要为其分配相应大小的初始值为0的内存空间.comment节:注释部分,这一部分不会被加载到内存系统的启动(续)ELF文件头的数据结构e_entry是可执行程序的入口地址e_phoff和e_phnum可以用来找到所有的程序头表项e_phoff是程序头表的第一项相对于ELF文件的开始位置的偏移e_phnum则是表项的个数e_shoff和e_shnum可以用来找到所有的节

5、头表项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

6、_phentsize;//程序头部长度uint16_te_phnum;//程序头部个数uint16_te_shentsize;//节头部长度uint16_te_shnum;//节头部个数uint16_te_shstrndx;//节头部字符索引};系统的启动(续)CodewalkELF文件的装入显示输出在JOS中实现字符显示的过程Codewalk8进制数据的显示JOS操作系统的结构分为boot和kern两个部分kernel部分的程序链接地址和加载地址的分析程序执行时,如何从链接地址转化到加载地址?为什么要这样设计?JOS操作系统的结构(续)Kernel部

7、分在voidi386_init(void)函数中,有以下定义:externcharedata[],end[];然而,我们发现edata和end并没有在某个.h或者.c文件定义kern.ld:PROVIDE(edata=.);.bss:{*(.bss)}PROVIDE(end=.);说明这两个变量都是在链接(生成ELF文件时)产生的地址,GCC会在生成二进制文件的时候将这两个符号置换成地址GCC这一特性非常强大,在后面的实验中也会用到这一特性JOS操作系统的结构(续)栈的原理(A)出栈操作(B)入栈操作JOS操作系统的结构(续)简单Shell的实现Cod

8、ewalkJOS操作系统的结构(续)Kern栈(stack)初始化stack,stack的大小

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。