- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux 内存管理系统
Linux 内存管理系统:初始化
?
Linux 内存管理系统:初始化作者:Joe Knapka臭翻:colyli内存管理系统的初始化处理流程分为三个基本阶段:激活页内存管理( 在swapper_pg_dir中初始化内核的页表 初始化一系列和内存管理相关的内核数据( Turning On Paging( (i386)启动分页机制(i386)Kernel 代码被加载到物理地址0x100000(1MB),在分页机制打开后被重新映射到PAGE_OFFSET + 0x100000的位置(PAGE_OFFSET在IA32上为3GB,即进程虚拟地址中用户空间与内核空间的分界处)。这是通过将物理地址映射到编译进来的页表 (在arch/i386/kernel/head.S中)的0-8MB以及PAGE_OFFSET-PAGE_OFFSET+8MB实现的。然后我们跳转到init/main.c中的start_kernel,这个函数被定位到PAGE_OFFSET+某一个地址。这看起来有些狡猾。要注意到在head.S中启动分页机制的代码是通过让它自己所执行的地址空间不再有效的方式来实现这一点的;因此0-4MB被映射(不明白:hence the 0-4MBidentity mapping.)。在分页机制没有启动之前,start_kernel是不会被调用的,我们假定他运行在PAGE_OFFSET+某一个地方的位置。因此head.S中的页表必须同样映射内核代码所使用的地址,这样后继才能跳转到staert_kernel处;因此PAGE_OFFSET被映射(不明白:hence the PAGE_OFFSET mapping.)。下面在head.S中分页机制启动时的一些神奇的代码:/** Enable paging*/3:movl $swapper_pg_dir-__PAGE_OFFSET,%eaxmovl %eax,%cr3 /* set the page table pointer.. */movl %cr0,%eaxorl $0%eaxmovl %eax,%cr0 /* ..and set paging (PG) bit */jmp 1f /* flush the prefetch-queue */1:movl $1f,%eaxjmp *%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.c中。在setup_arch 中和内存相关的第一件事就是计算低端内存(low-memory) 和高端内存(high-memory)的有效页的数目;每种内存类型(each memory type)最高端的页的数目分别保存在全局变量highstart_pfn和highend_pfn中。高端内存并不是直接映射到内核的虚拟内存(VM)中;这是后面要讨论的。接下来,setup_arch 调用init_bootmem 函数以初始化启动时的内存分配器(boot-timememory allocator)。Bootmem内存分配器仅仅在系统boot的过程中使用,为永久的内核数据分配页。因此我们不会对它涉及太多。需要记住的就是bootmem 分配器(bootmemallocator)在内核初始化时提供页,这些页为内核专门预留,就好像他们是从内核景象文件中载入的一样,他们在系统启动以后不参与任何的内存管理活动。初始化内核页表之后,setup_arch调用在arch/i386/mm/init.c中的paging_init函数。这个函数做了一些事情。首先它调用pagetable_init函数去映射整个的物理内存,或者在PAGE_OFFSET到4GB之间的尽可能多的物理内存,这是从PAGE_OFFSET处开始。在pagetable_init函数中,我们在swapper_pg_dir中精确的建立了内核的页表,映射到截至PAGE_OFFSET的整个物理内
您可能关注的文档
- C语言教程第2次实验内容(数据类型与表达式).ppt
- C语言教学 第11章.ppt
- C语言教程三种基本结构程序设计小结.ppt
- C语言教程第3次实验内容(顺序结构).ppt
- C语言教程第1次实验熟悉C语言开发环境.ppt
- C语言模拟题11-用户标识符的作用域和存储类.doc
- C语言教程第5周实验内容(顺序结构).ppt
- C语言模拟题15-文件.doc
- C语言教程ch1初识C程序.ppt
- C语言模拟题16-字符串.doc
- 专题06 经济体制(我国的社会主义市场经济体制)-五年(2020-2024)高考政治真题分类汇编(解析版).docx
- 专题11 世界多极化与经济全球化-5年(2020-2024)高考1年模拟政治真题分类汇编(解析版).docx
- 专题03 经济发展与社会进步-5年(2020-2024)高考1年模拟政治真题分类汇编(浙江专用)(解析版).docx
- 专题09 文化传承与文化创新-5年(2020-2024)高考1年模拟政治真题分类汇编(北京专用)(原卷版).docx
- 5年(2020-2024)高考政治真题分类汇编专题08 社会进步(我国的个人收入分配与社会保障)(原卷版).docx
- 专题07 探索世界与把握规律-5年(2020-2024)高考1年模拟政治真题分类汇编(解析版).docx
- 5年(2020-2024)高考政治真题分类汇编专题06 经济体制(我国的社会主义市场经济体制)(原卷版).docx
- 专题11 全面依法治国(治国理政的基本方式、法治中国建设、全面推进依法治国的基本要求)-五年(2020-2024)高考政治真题分类汇编(解析版).docx
- 专题17 区域联系与区域协调发展-【好题汇编】十年(2015-2024)高考地理真题分类汇编(解析版).docx
- 专题01 中国特色社会主义-5年(2020-2024)高考1年模拟政治真题分类汇编(原卷版).docx
最近下载
- 高同型半胱氨酸血症的诊断、治疗与预防专家共识.docx VIP
- 人教版高中英语必修第二册《UNIT 3 THE INTERNET》大单元整体教学设计.pdf
- 微型消防站工作职责(标准版).docx VIP
- 呼唤-快车上玩家地图1 plmap演示版.pdf
- 德邦零担业务诊断及新产品开发项目建议书-2014.pptx VIP
- 人教版高中英语必修第二册《UNIT 4 HISTORY AND TRADITIONS》大单元整体教学设计.docx
- 高同型半胱氨酸血症的诊断、治疗与预防.pptx VIP
- 附件2:汽车专访.pdf VIP
- 2024年食品安全生产经营大比武理论考试题库资料-下(多选、判断题汇总).pdf
- 快车上的恐怖旅行手册.pdf
文档评论(0)