xv6内存布局详解

来源:互联网 发布:富兰克林罗斯福知乎 编辑:程序博客网 时间:2024/06/05 14:27

欲了解xv6操作系统源码,那么内存布局就是其中的不二法门

 

Makefile中涉及到代码链接地址的地方如下:

---------------------------------------------------------------------------------------------------------

bootblock: bootasm.S bootmain.c

 $(LD) $(LDFLAGS) -N -e start -Ttext 0x7c00 -o bootblock.o bootasm.o bootmain.o

作用:引导代码放在第0扇区,链接到0x7c00。BIOS自检后会跳转到这个地址执行,并将控制权交给操作系统

bootother: bootother.S

   $(LD) $(LDFLAGS) -N -e start -Ttext 0x7000 -o bootother.out bootother.o

作用:多核操作系统的AP (application processor) 的引导代码,链接后放到0x7000


initcode: initcode.S

   $(LD) $(LDFLAGS) -N -e start -Ttext 0 -o initcode.out initcode.o

作用:第一个用户进程,链接到0。BSP (bootstrap processor) 引导及初始化完成后会回到用户态,开始执行这个用户进程


kernel: $(OBJS) bootother initcode

 $(LD) $(LDFLAGS) -Ttext 0x100000 -e main -o kernel $(OBJS) -b binary initcode bootother

作用:内核,编译后生成ELF文件,放在第1扇区。SP初始化的过程中会将其加载内核中的640K,之后解析ELF格式将代码段、数据段等链接到相应的地址,即bootother.S、initcode.S以及kernel就可以链接到正确的地址了

----------------------------------------------------------------------------------------------------------

整个内存布局示意图如下:

 

 

 

原创粉丝点击