Linux内核深度解析
linuxweiyh
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
内存管理之内存映射——概述
内存映射是在进程的虚拟地址空间中创建一个映射,分为以下两种:文件映射:文件支持的内存映射,把文件的一个区间映射到进程的虚拟地址空间,数据源是存储设备上的文件。 匿名映射:没有文件支持的内存映射,把物理内存映射到进程的虚拟地址空间,没有数据源。通常把文件映射的物理页称为文件页,把匿名映射的物理页称为匿名页。根据修改是否对其他进程可见和是否传递到底层文件,内存映射分为共享映射和私有映射:共享映射:修改数据时映射相同区域的其他进程可以看见,如果是文件支持的映射,修改会传递到底层文件。 私有.原创 2021-02-18 16:45:06 · 1666 阅读 · 0 评论 -
内存管理之物理地址空间
物理地址是处理器在系统总线上看到的地址。使用精简指令集(Reduced Instruction Set Computer,RISC)的处理器通常只实现一个物理地址空间,外围设备和物理内存使用统一的物理地址空间。程序只能通过虚拟地址访问外设寄存器,内核提供了以下函数来把外设寄存器的物理地址映射到虚拟地址空间:函数ioremap()把外设寄存器的物理地址映射到内核虚拟地址空间void *__ioremap(phys_addr_t offset, size_t size, unsigned lo.原创 2021-02-18 16:01:45 · 1176 阅读 · 0 评论 -
内存管理之虚拟地址空间布局——用户虚拟地址空间布局
进程的用户虚拟地址空间的起始地址是0,长度是TASK_SIZE,由每种处理器架构自定义实现。ARM64架构定义的宏如下:32位用户空间程序:TASK_SIZE的值是TASK_SIZE_32,即0x100000000,等于4GB; 64位用户空间程序:TASK_SIZE的值是TASK_SIZE_64,即2的VA_BITS次幂字节(VA_BITS是编译内核时选择的虚拟地址位数)。arch/arm64/include/asm/memory.h#define VA_BITS (CONFIG_ARM6原创 2021-02-16 18:33:17 · 459 阅读 · 0 评论 -
内存管理之虚拟地址空间布局——虚拟地址空间划分
因为目前应用程序没有那么大的内存需求,所以ARM64处理器不支持完全的64位虚拟地址,实际支持情况如下:虚拟地址的最大宽度是48位:内核虚拟地址在64位地址空间的顶部,高16位是全1,范围是[0xFFFF_0000_0000_0000, 0xFFFF_FFFF_FFFF_FFFF]; 用户虚拟地址在64位地址空间的底部,高16位全是0,范围是[0x0000_0000_0000_0000, 0x0000_FFFF_FFFF_FFFF];高16位是全1或全0的地址称为规范的地址,两者之间是不规范的地原创 2021-02-16 18:02:42 · 1682 阅读 · 0 评论
分享