- 1、本文档共51页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章内存管理-Read.ppt
第4章 内存管理 第4章 内存管理 本章介绍Linux内存管理子系统的整体概念,讨论存储层次结构、x86存储管理硬件和Linux虚存系统及相关系统工具。 4.1存储层次结构和x86存储管理硬件 4.1.1内存管理基本框架 Linux内核的设计要考虑到在各种不同的微处理器上的实现,所以不能仅仅针对i386结构来设计它的映射机制,而要以虚拟的微处理器和内存管理单元MMU(Memory Management Unit)为基础,设计出一种通用的模式,再将其分别落实到具体的微处理器上。Linux在内存管理的软件实现方面,提供了不同的接口,可以用于各种各样不同地址线宽度的CPU。 假如当要执行某个函数的第一个句子时,CPU会通过32位地址线寻址(2的32次方,可以寻址4G的线性地址空间)。通过MMU执行以上的影射过程,就会在计算机的内存中找到这个句子的物理地址,如果要找的那一句不在物理页中,就会发生一次异常中断,使硬盘和内存发生交互。 在Linux原码的 include/asm-i386/gptable.h 定义了能够包容不同CPU的接口: # if CONFIG_X86_PAE //假如在PAE模式下,用三层影射结构 #include asm/pgtable-3level.h #else #includeasm/pgtable-2level.h //否则用两层 #endif 在pgtable-2level.h中定义了PGD,PMD的结构。 #define PGDIR_SHIFT 22 //页目录是线性地址的31~22位 #define PTRS_PER_PGD 1024 //总共有1024个页目录 #define PMDIR_SHIFT 22 //中间目录不用了 #define PTRS_PER_PMD 1 #define PTRS_PER_PTE1024 //每个页表有1023页 在32位线性地址中的4G虚拟空间中,其中有1G做为内核空间,从0XC0000000到0XFFFFFFFF。每个进程都有自己的3G用户空间,它们共享1G的内核空间。当一个进程从用户空间进入内核空间时,它就不在有自己的进程空间了。 在物理空间中,内核总是从0地址开始的,而在虚拟空间中是丛0XC0000000开始的。内核中的影射是很简单的线性影射,所以0XC0000000就是两者的偏移量。 在page.h中: #define__PAGE_OFFSET (0xc0000000) #definePAGE_OFFSET ((unsigned long ) __PAGE_OFFSET ) #defne __pa(x) ( (unsigned lonsg) (x) – PAGE_OFFSET) // 内核虚拟地址转换到物理地址 #define __va(x) ((void *) ((unsigned long) (x) + PAGE_OFFSET)) // 内核从物理地址到虚拟地址的转换 ?对i386微处理器来说,CPU实际上不是按3层而是按两层的模型来进行地址映射,这就需要将虚拟的3层映射落实到具体的两层的映射,跳过中间的PMD层次。 4.1.2地址映射的全过程 80386有实方式和保护方式两种工作方式。尽管实方式下80386的功能较Intel先前的微处理器有很大的提高,但只有在保护方式下,80386才能真正发挥作用。在保护方式下,全部32根地址线有效,可寻址达4G字节的物理空间。扩充的存储器分段管理机制和可选的存储器分页管理机制,不仅为存储器共享和保护提供了硬件支持,而且为实现虚拟存储器提供了硬件支持;支持多任务,能快速的进行任务切换和任务保护环境;4个特权级和完善的特权检查机制,既能实现资源共享又能保证代码及数据的安全和必威体育官网网址及任务的隔离;支持虚拟8086方式,便于执行8086代码。 页的寿命信息保存在 mem_map_t 结构中。最初分配某个页时,页的寿命为 3,每次该页被访问,其寿命增加 3,直到 20 为至;而当内核的交换进程运行时,页寿命减 1。如果某个页的寿命为 0,则该页可作为交换候选页。如果是“脏”页(该信息保存在页表项中),则可将该页交换出物理内存。但是,进程的虚拟内存区域可具有自己的交换操作例程(定义在虚拟内存操作集中),这时,将利用该例程执行交换操作,否则,交换守护进程在交换文件中分配页,并将该页写入交换文件。 当某物理页交换到交换文件之后,该页对应的页表项被标志为无效,同时包换该页在交换文件中的位置信息;而被释放出的物理页则被收回到 free_area 数据结构中。 根据被释放的页数目,kswaped 会自动调节交换定时器的间隔,以便能够有足够的时间释放
文档评论(0)