- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LINUX内核开发(二).ppt
LINUX内核开发-2 内存管理子系统 内存是Linux内核所管理的最重要的资源之一,内存管理子系统是操作系统中最重要的部分之一。 地址类型 物理地址 线性地址(虚拟地址) 逻辑地址 他们之间的关系? 地址转换 CPU要将一个逻辑地址转换为物理地址,需要两步:首先CPU利用段式内存管理单元,将逻辑地址转换成线程地址,再利用页式内存管理单元,把线性地址最终转换为物理地址。 Linux内存管理 Linux内核的设计并没有全部采用Intel所提供的段机制,仅仅是有限度地使用了分段机制。这不仅简化了Linux内核的设计,而且为把Linux移植到其他平台创造了条件,因为很多RISC处理器并不支持段机制。 Linux内存管理 所有段的基地址均为0 由此可以得出,每个段的逻辑地址空间范围为0- 4GB。因为每个段的基地址为0,因此,逻辑地址与 线性地址保持一致(即逻辑地址的偏移量字段的值 与线性地址的值总是相同的),在Linux中所提到 的逻辑地址和线性地址(虚拟地址),可以认为是 一致的。看来,Linux巧妙地把段机制给绕过去 了,而完全利用了分页机制。 Linux页式管理 前面介绍了i386的二级页管理架构,不过有些CPU(Alpha 64位)使用三级,甚至四级架构,Linux 2.6.29内核为每种CPU提供统一的界面,采用了四级页管理架构,来兼容二级、三级、四级管理架构的CPU。 Linux页式管理 这四级分别为: 页全局目录 (Page Global Directory):即 pgd,是多级页表的抽象最高层。 页上级目录(Page Upper Directory):即pud。 页中间目录(Page Middle Directory):即 pmd,是页表的中间层。 页表(Page Table Entry):即 pte。 Linux 虚拟内存 Linux将4G的虚拟地址空间划分为两个部分——用户空间与内核空间。用户空间从0到0xbfffffff,内核空间从3G到4G。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间。例外情况是用户进程通过系统调用访问内核空间。 虚拟内存 Linux操作系统采用虚拟内存管理技术,使得每个进程都有独立的进程地址空间,该空间是大小为3G,用户看到和接触的都是虚拟地址,无法看到实际的物理地址。利用这种虚拟地址不但能起到保护操作系统的作用,而且更重要的是用户程序可使用比实际物理内存更大的地址空间。 进程空间 用户空间对应进程,所以每当进程切换,用户空间就会跟着变化。 进程空间 每个进程的用户空间都是完全独立、互不相干的。把同一个程序同时运行10次(为了能同时运行,让它们在返回前睡眠100秒),会看到10个进程使用的线性地址一模一样。 (cat /proc/pid/maps ) 进程空间 创建进程fork()、程序载入execve()、动态内存分配malloc()等进程相关操作都需要分配内存给进程。这时进程申请和获得的不是物理地址,仅仅是虚拟地址。 进程空间 实际的物理内存只有当进程真的去访问新获 取的虚拟地址时,才会由“请页机制”产生“缺 页”异常,从而进入分配实际页框的程序。该 异常是虚拟内存机制赖以存在的基本保证— —它会告诉内核去为进程分配物理页,并建 立对应的页表,这之后虚拟地址才实实在在地映射 到了物理地址上。 内核内存分配 在应用程序中,常使用malloc函数进行动态内存分配,而在Linux内核中,通常使用kmalloc来动态分配内存。kmalloc 原型是: #include linux/slab.h void *kmalloc(size_t size, int flags) 参数: size:要分配的内存大小。 flags:分配标志, 它控制 kmalloc 的行为。 分配标志 最常用的标志是GFP_KERNEL,它的意思是该内存分配是由运行在内核态的进程调用的。也就是说,调用它的函数属于某个进程的,当空闲内存太少时,kmalloc函数会使当前进程进入睡眠,等待空闲页的出现。 分配标志 如果kmalloc是在进程上下文之外调用,比如在中断处理,任务队列处理和内核定时器处理中。这些情况属于中断上下文,不能进入睡眠,这时应该使用优先权GFP_ATOMIC。 分配标志 GFP_ATOMIC 用来在进程上下文之外的代码(包括中断处理)中分配内存,从不睡眠。 GFP_KERNEL 进程上下文中的分配。可能睡眠。(16M-896M) __GFP_DMA 这个标志要求分配能够 DMA 的内存区(物理地址在16M以下的页帧 ) __GFP_HIGHMEM 这个标志表示分配的内存位于高端内存。(896M以上) 按页分配 如果模块需要分配大
您可能关注的文档
- 2010中考湘教专题第25课时平行四边形.ppt
- 2010中考湘教专题第27课时梯形.ppt
- 2010中考湘教专题第28课时对称、平移与旋转.ppt
- 2010中考湘教专题第31课时锐角三角函数.ppt
- 2010中考物理模拟试题分类汇编压强与浮力.doc
- 2010年中考思想品德真题分类汇编(120套)-做学法守法用法的人.doc
- 2010年中考思想品德真题分类汇编(120套)-实现我们的共同理想.doc
- 2010年中考思想品德真题分类汇编(120套)-权利义务伴我行.doc
- 2010年中考思想品德真题分类汇编(120套)-爱在屋檐下我与父母.doc
- 2010年中考思想品德真题分类汇编(120套)-生命健康权与我同在.doc
- m5-u2 word power (牛津译林版)PPT课件.ppt
- m5-u3 Science versus nature -grammar(牛津译林版)PPT课件.ppt
- Manugistics配送规划解决方案介绍PPT.ppt
- marie curie PPT课件.ppt
- Martin PPT课件.ppt
- Module 1 Unit1 Look !(沪教牛津版四年级下册)PPT课件.ppt
- Module 12 Unit3 Language in use 2 PPT课件.ppt
- Module 2 Cities Unit4 I Know This City !(广州版)六年级上册PPT课件.ppt
- Module 2 People Unit4 Friends(广州版)上册PPT课件.ppt
- Module 2 Unit2 I went to a library yesterday PPT课件.ppt
最近下载
- 孟加拉海外工程重油发电机组安装施工组织设计(热控部分)-中英文版汇.doc VIP
- 2025年中考历史复习专项训练:中国古代史选择题100题(原卷版).pdf VIP
- 学堂在线《走进心理学》作业单元考核答案.docx VIP
- 环境影响评价报告公示:嘉兴市中华化工有限责任新建香兰素仓库嘉兴市南区大桥镇中环评报告.doc VIP
- 小学英语小学英语语法课件-一般现在时 (共29张PPT) 全国通用.ppt VIP
- 《大学物理A(一)》课程教学大纲(本科).pdf VIP
- 孟加拉海外工程重油发电机组安装施工组织方案设计书(建筑部分)-中英文版.doc VIP
- 企业数字化转型的动因和理念.pptx VIP
- 国开电大《企业文化》自测1-10答案.pdf VIP
- 竞聘维修班组长演讲稿.pptx
文档评论(0)