- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linu设备驱动归纳总结(五)1在内核空间分配内存.doc
一般的,用户空间使用函数malloc在堆上分配内存空间,同样的,在内核空间 同样有一套类似的函数来分配空间。下面的知识会涉及页式管理的内存机制,如 果不懂的要先复习一下,在S3C2440数据手册的MMU部分有介绍。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXX
一、内核空间和用户空间有什么不同
学C语言的时候应该学过,从用户空间看,每个进程都傻乎乎的以为自己有4G 的内存空间,其中位于高地址(3G-4G)的1G空间给内核用,另外的3G (0-3G) 都是它一个人独占的。所以用户空间很慷慨的把3G的空间分了好几个区域,如 堆、栈、代码段等。其中,mallocO分配的空间位于堆,而程序中的自动变量, 如你在函数内定义的“inti”,它是放在栈上,同时。用户空间的栈是可变栈,即 随着数据的增多,对应函数的栈空间也会增多。
跟每个用户空间的进程不一样,内核只有1G的空间,同时,除了自己本身有进 程运行外,内核还要允许用户空间进程调用系统调用进入内核空间去执行。所以, 内核对此相当吝啬,它规定在内核中的每个进程都只有4KB或8KB (32位下) 的定长栈。出于这样的原因,大的数据结构就不能在栈中分配,只能请求内核分 配新的空间来存放数据,如函数kmalloc()。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXX
二、内存的基本单位是字节吗?
在介绍分配内存空间的函数前,我们还要了解一下内存是怎么被划分的。
内核不仅知道用户空间中看到的1G内核空间是假的,它还知道实际的物理内存 是多少(我的开发板是64M)。所以,内核的其中一个任务就是,当这段虚假 内存中的数据需要调用时,内核把这段虚拟内存与实际的物理内存对应上,运行 完后又把两段内存的对应关系撤销掉给男外的虚拟内存用。
既然知道虚拟内存与物理内存的关系,那它们是怎么对应的,难道是一个一个字 节?如果这样子做的话内核肯定觉得崩溃。
页是内存管理的基木单位。内存管理器(MMU,用于虚拟地址与物理地址之间 的转换)通常以页为单位进行出来。页是内存管理的最小单位。在32位的系统 中,一页的大小为4KB。所以,64M的物理内存将被分为16384个页。每一个 物理页对皮地用一个struct page来维护,注意,该结构体是用来维护物理页,而 不是虚拟也,结构体记录该页是否被使用,对应的虚拟地址是多少等信息。
由于内存访问的限制,内核乂把内存分成了3个区。
如有些硬件的访问只能在24位的地址空间寻址,出于这总访问限制,lirwx把前 16MB划分为ZONE_DMA——用于直接内存访问(MDA)。
在x86体系里,高于896M的内存空间称为高端内存,这段内存区域的页和普通 的内存页操作后有差异,这段区域划分为ZONE_HIGHMEM。
剩下的,加载这两段区域之间的就是我们平时用的普通内存区域
——ZONE_NORMALo
这这里要注意一下:
1) 这些分区是指linux自己分的,当然,如果普通分区不够用,当然也可以占用 其他区的空间。
2) 分区的大小是根据体系结构而定的,一般的ARM下,ZONE_NORMAL就是 所有的可用内存区域。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXX
三、分配内存时使用的标记gfp_mask
在讲如何分配内存之前,先讲一下分配内存时将会用到的gfp_mask。简单地讲, 这个标记指定了分配内存时的要求。具体分三类:
行为修饰符:表示内核应当如何分配内存,如指定不能休眠等。
区修饰符:指定内存将耍分配到上面讲的三个区中的哪一个。
类型标记:这含了上面两种修饰符(或运算),这些标记是为了让用户更好地 去使用。
标记有很多,我这里不一一介绍,需要的可以自己查阅《linux内核设计与实现 (第三版)》P238页。这里我讲两个常用的类型标记:
GFP_KERNEL:最常用的标记,用于可睡眠的进程上下文。
GFP.ATOMIC:使用了这个标记,内存分配函数不会引起随眠。
GFP_USER:当需要给用户空间分配内存空间时使用该标记。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXX
四、分配内存的第一种方法——按页分配
这是内核提供的一种请求内存的底层机制,都是以页为单位分配内存
您可能关注的文档
- K4、K13在喉咽鳞癌中的表达及临床意义.doc
- K56、p63、10在乳腺良恶性病变中的表达及意义.doc
- K82451箱涵施工方案.doc
- KBBI指标解析.doc
- Kenpaullne对A认知功能障碍改善的研究进展.doc
- KEu(M4)2荧光材料的熔盐法合成及表征.doc
- Keystne变换实现方法研究.doc
- KIBS员工需求驱动下行为决策的模拟..doc
- KMeans算法实验报告.doc
- kpmg求职笔试题目速记 .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
最近下载
- 小学三年级英语第一单元预习设计及限时作业.doc VIP
- ABB 变频器ACS530-01 快速安装和启动指导手册,外形尺寸B0-B2.pdf
- 柔性光伏支架资料1209.docx
- 哈长城市群冰雪体育旅游资源空间布局及其优化研究.pdf
- 国开电大领导科学与艺术(河北)形考任务1-4参考答案.doc
- 《长方形娃娃找家》幼儿园中班数学PPT课件.pptx VIP
- 湖北省孝感市八校联谊2023-2024学年七年级上学期12月联考语文试题.pdf VIP
- 执行力主题培训——赢在执行.ppt
- 2023年安庆师范大学公共课《马克思主义基本原理概论》期末试卷A(有答案).docx VIP
- 读书学习《心流》PPT.pptx VIP
文档评论(0)