下载此文档

Linux 内存管理系统.doc


文档分类:IT计算机 | 页数:约37页 举报非法文档有奖
1/37
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/37 下载此文档
文档列表 文档介绍
Linux 内存管理系统:初始化
 
Linux 内存管理系统:初始化
作者:Joe Knapka
臭翻:colyli
内存管理系统的初始化处理流程分为三个基本阶段:
激活页内存管理
l 在swapper_pg_dir中初始化内核的页表
初始化一系列和内存管理相关的内核数据l
Turning On Pagingl (i386)
启动分页机制(i386)
Kernel 代码被加载到物理地址0x100000(1MB),在分页机制打开后被重新映射到
PAGE_OFFSET + 0x100000的位置(PAGE_OFFSET在IA32上为3GB,即进程虚拟地址中用户
空间与内核空间的分界处)。这是通过将物理地址映射到编译进来的页表(在
arch/i386/kernel/)的0-8MB以及PAGE_OFFSET-PAGE_OFFSET+8MB实现的。然后
我们跳转到init/,这个函数被定位到PAGE_OFFSET+某一个地址。
这看起来有些狡猾。
址空间不再有效的方式来实现这一点的;因此0-4MB被映射(不明白:hence the 0-4MB
identity mapping.)。在分页机制没有启动之前,start_kernel是不会被调用的,我们假
定他运行在PAGE_OFFSET+某一个地方的位置。
所使用的地址,这样后继才能跳转到staert_kernel处;因此PAGE_OF
FSET被映射(不明
白:hence the PAGE_OFFSET mapping.)。
:
/*
* Enable paging
*/
3:
movl $swapper_pg_dir-__PAGE_OFFSET,%eax
movl %eax,%cr3 /* set the page table pointer.. */
movl %cr0,%eax
orl $0x80000000,%eax
movl %eax,%cr0 /* ..and set paging (PG) bit */
jmp 1f /* flush the prefetch-queue */
1:
movl $1f,%eax
jmp *%eax /* make sure eip is relocated */
1:
在两个1的label之间的代码将第二个label 1的地址加载到EAX中,然后跳转到那里。这
时,指令指针寄存器EIP指向1MB+某个数值的物理地址。而label都在内核的虚拟地址空
间(PAGE_OFFSET+某个位置),所以这段代码将EIP有效的从物理地址空间重新定位到了虚
拟地址空间。
Start_kernel函数初始化了所有的内核数据,然后启动了init内核线程。Start_kernel中
最初的几件事情之一就是调用setup_arch函数,这是一个和具体的体系结构相关的设置函
数, 调用了更底层的初始化细节。对于x86 平台而言, 这些函数在
arch/i386/kernel/。
在setup_arch 中和内存相关的第一件事就是计算低端内存(low-memory) 和高端内存
(high-memory)的有效页的数目;每种内存类型(each memory
type)最高端的页的数目分别
保存在全局变量highstart_pfn和highend_pfn中。高端内存并不是直接映射到内核的虚拟
内存(VM)中;这是后面要讨论的。
接下来,setup_arch 调用init_bootmem 函数以初始化启动时的内存分配器(boot-time
memory allocator)。Bootmem内存分配器仅仅在系统boot的过程中使用,为永久的内核数
据分配页。因此我们不会对它涉及太多。需要记住的就是bootmem 分配器(bootmem
allocator)在内核初始化时提供页,这些页为内核专门预留,就好像他们是从内核景象文
件中载入的一样,他们在系统启动以后不参与任何的内存管理活动。
初始化内核页表
之后,setup_arch调用在arch/i386/mm/。这个函数做了一些
事情。首先它调用pagetable_init函数去映射整个的物理内存,或者在PAGE_OFFSET到4GB
之间的尽可能多的物理内存,这是从PAGE_OFFSET处开始。
在pagetable_init函数

Linux 内存管理系统 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数37
  • 收藏数0 收藏
  • 顶次数0
  • 上传人rjmy2261
  • 文件大小162 KB
  • 时间2018-04-29