Linu的x虚拟内存管理进阶4.pdf

  1. 1、本文档共77页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linu的x虚拟内存管理进阶4

Linux虚拟内存管理 进阶篇 主要内容 1. 虚拟内存管理的基本原理和基本过程。 2. CPU对虚拟内存管理的支持。(ULK Ch.2) 3. Linux如何管理页表。(ULK Ch.2) 4. Linux如何管理物理内存(ULK Ch.8) 5. Linux如何管理虚拟空间的内核地址空间部 (ULK Ch.8) 6. Linux如何管理虚拟空间的进程地址空间部 (ULK Ch.9) 7. Linux如何在物理内存和外出之间同步数据(ULK Ch.15) 8. Linux如何主动回收物理内存(ULK Ch.17) 注:无法全部讲 骚瑞 2 一些术语 1. 页:page ,虚拟内存空间中的一页 2. 页框:page frame ,物理内存空间中的一页 3. 页目录项:页目录表中的一行,4个字节 4. 页表项:页表中的一行,4个字节 5. Linux 内核一般用void *或unsigned long表示一个虚拟 地址或物理地址 3 Linux如何管理页表 1. Linux为了提高内核的可移植性,定义了一套与具体CPU架构 无关的:类型、宏常量、宏函数和内联函数,来表示、建立 和修改页表。 2. 无论哪种CPU ,Linux都定义了4级页表结构: • 页全局目录(Page Global Directory) • 页上级目录(Page Upper Directory) • 页中间目录(Page Middle Directory) • 页表(Page Table) 3. Linux只是在初始化和修改页表时用到这些平台无关的类型、 宏常量、宏函数和内联函数。 4. 查表过程肯定是平台相关的! 4 Linux 的4级页表结构 1. 在针对特定CPU体系结构移植,编译器会将4级页表中的某些 级别自动去掉。 5 与页表相关的宏常量 1. PAGE_SHIFT 、PMD_SHIFT 、PUD_SHIFT 、PGDIR_SHIFT 2. PTRS_PER_PTE, PTRS_PER_PMD, PTRS_PER_PUD, PTRS_PER_PGD 6 与页表相关的宏常量 7 表示页表项的数据类型 8 管理页表的函数 1. 太多了,见ULK Ch.2 的表2-6、表2-7、表2-8、表2-9 2. 很多函数调用在运行时都已经被C的预处理器删掉了。 9 Linux 的页表存放在了什么位置 1. 每个进程对应自己 “独立”的一组页表,对应的页全局目录 的起始地址被存放在了 “current→mm→pgd”指针指向的页 2. 内核拥有一组自己使用的页表,驻留在主内核页全局目录。 3. 主内核页全局目录的首地址 (虚拟地址)被存放在 swapper_pg_dir变量中 4. 主内核页全局目录的最高1/4 目录项部分作为参考模板,会被 复制到每个普通进程的页全局目录项的对应部 。 5. 在内核启动时,没有任何进程,只有主内核页全局目录有效 movl $swapper_pg_dir-0xc0000000,%eax movl %eax,%cr3 /* set the page table pointer.. */ movl %cr0,%eax orl $0%eax movl %eax,%cr0 /* ..and set paging (PG) bit */ 10 进程描述符(task_struct) struct task_struct { /* these are hardcoded - dont touch */ volatile long state; /* -1 unrunnable, 0 runnable, 0 stopped */ long counter; long

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档