[LINUX-02]linux内存管理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[LINUX-02]linux内存管理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1952字,纯文字阅读大概需要3分钟。
内容图文
![[LINUX-02]linux内存管理](/upload/InfoBanner/zyjiaocheng/940/f00c42cde8e64409a394b30ee5d9e918.jpg)
1 内存划分
对于 32位linux,进程:0~3G,内核:3G~4G,所有进程的内核空间(3G~4G)都是共享的。
线性区映射的物理内存成为低端内存,剩下的内存被称为高端内存。
2 内存管理
2.1 物理内存管理
Linux内存最小管理单位为页(page),通常一页为4K。初始化时,linux会为每个物理内存也建立一个page的管理结构(切记是linux系统不是uboot,也就是物理内存的管理肯定是在linux系统上的),操作物理内存时实际上就是操作page页。某些设备会映射在物理内存地址外,这些地址会在使用时建立page结构。
2.2 进程内存管理:
Linux进程通过vma进行管理,每个进程都有一个task_struct结构体进行维护,其中的mm_struct结构体管理这进程的所有内存。Mm_struct中维护者一个vma链表,其中的每一个vma节点对应着一段连续的进程内存。这里的连续是指在进程空间中连续,物理空间中不一定连续。如果使用malloc等申请一段内存,则内核会给进程增加vma节点。
3 内存分配与映射
3.1 分配
3.1.1 进程空间内存分配
malloc/free:最常用的内存分配函数
valloc/free:分配的内存按页对齐
3.1.2 内核空间内存分配
__get_free_pages/free_pages:分配制定页数的低端内存,不能分配在高端
Alloc_pages/__free_pages:分配izhiding页数的内存,可以是高端内存
Kmalloc/kfree:分配的内存物理上连续,只能在低端分配
Vmalloc/vfree:分配的内存在内核空间中连续,物理上无需连续。Vmalloc由于不需要屋里也连续,会造成TLB抖动,所以性能很差,一般只有在必须申请大块内存时才使用,如动态插入模块时。
3.2 映射
3.2.1 用户空间与物理地址
仅mmap函数(其内部也是靠内核中使用remap_pfn_range实现的。所有地址空间转换都在内核中实现);
3.2.2 内核空间与物理地址
3.2.2.1 kmap
实现物理内存到内核地址空间的映射,物理内存地址可以是低端内存区,也可以是高端内存区,如果是低端,作用与page_address相同。
3.2.2.2 ioremap
实现物理地址到内核空间的映射,所谓的物理地址一般是指非物理内存的地址空间,也就是不在linux管理下的物理地址空间。它可以把这一段映射到内核空间中的非线性空间。
3.2.2.3 page_address
只适用于线性区,实现page到内核地址空间的转换。
phy_to_virt:物理转虚拟
virt_to_page:从一个内核虚地址得到该页的描述结构 struct page *
virt_to_phy:虚拟转物理
只适用于线性区。
--
内容总结
以上是互联网集市为您收集整理的[LINUX-02]linux内存管理全部内容,希望文章能够帮你解决[LINUX-02]linux内存管理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。