linux 高端内存
2015-08-12 10:55
405 查看
最近又温习了一下linux内存分配,自己逻辑地址与物理地址的映射,特别针对高端内存的理解
首先说32bit 和64 bit针对空间的划分
1 32bit 虚拟空间划分内核空间1g和用户空间4g(其实可以调整变成内核空间2g和用户空间2g)
这点要注意的是虚拟的概念和物理内存无关,只是操作系统便于管理的一种抽象,我以前总是和物理内存去做对比的理解,最后纠缠不清,精神崩溃了
2 32bit物理内存咱就4g物理内存举例子
根据分配策略,物理内存前1g和虚拟空间的内核空间相对应,offset是PAGE_OFFSET(3g)为偏移量
这就是规定,没有商量的余地,也就是内核空间和物理内存是有对应关系的,而用户空间和物理内存暂时没有对应关系,
这就引出一个问题4g物理空间,只有1g是对应起来的,那剩下的3g呢,这又引出了一个高端内存的概念,(如果物理内存只有256m,那内核内存1g空间可以完全包括这256m物理空间,所以不需要高端内存的存在,内核空间完全包含了物理内存大小)
首先无论什么时候内核空间针对物理内存的使用时必须有一个虚拟的线性地址的(内核空间也有自己的页表为了mmu统一查询,swapper_pg_dir就是页表目录,虽然位移是固定的page_offset,但是还是必须利用页表去查询),这样大于物理内存1g的空间是没法进行线性对应关系的,因为规定好了内核空间就1g,线性关系对应也只有1g空间,除非虚拟内核空间大于4g,利用page_offset可以做偏移量,但是内核空间需要用剩下的3g怎么办,必须提供一个线性地址,那就利用高端内存去做映射,也就是1g中后128m,需要注意的是也就是能映射128m物理内存,因为牵扯到内核分配,分多了也没必要,128m大家轮换使用没什么问题。但是当时我有这么个因为,虚拟用户空间的3g怎么对应内存,根据分页分段,最后pte指向的是任何范围的物理空间的物理地址,不需要线性地址的对应关系,所以多大都可以分配。
之前我一直纠结是不是虚拟的用户内存只有分配到后3g空间,其实不然,物理空间是没有1g和3g的界限的,他只有zone_DMA,ZONE_NORMAL等物理块的概念,所以不要在乎1g还是3g,只有有free的块就可以给用户空间来用
3 64bit因为逻辑内核空间和用户空间能够达到128t的空间,物理内存不可能达到这么多,所以一定会做到page_offet的线性映射,所以不需要高端内存这种东西存在。
4 物理内存分配是利用zone块去查看free_area列表去分配,可以通过 cat /proc/zoneinfo去看相应块的分布,留意start_prk_page的开始物理页的分配如4096就是16m
首先说32bit 和64 bit针对空间的划分
1 32bit 虚拟空间划分内核空间1g和用户空间4g(其实可以调整变成内核空间2g和用户空间2g)
这点要注意的是虚拟的概念和物理内存无关,只是操作系统便于管理的一种抽象,我以前总是和物理内存去做对比的理解,最后纠缠不清,精神崩溃了
2 32bit物理内存咱就4g物理内存举例子
根据分配策略,物理内存前1g和虚拟空间的内核空间相对应,offset是PAGE_OFFSET(3g)为偏移量
这就是规定,没有商量的余地,也就是内核空间和物理内存是有对应关系的,而用户空间和物理内存暂时没有对应关系,
这就引出一个问题4g物理空间,只有1g是对应起来的,那剩下的3g呢,这又引出了一个高端内存的概念,(如果物理内存只有256m,那内核内存1g空间可以完全包括这256m物理空间,所以不需要高端内存的存在,内核空间完全包含了物理内存大小)
首先无论什么时候内核空间针对物理内存的使用时必须有一个虚拟的线性地址的(内核空间也有自己的页表为了mmu统一查询,swapper_pg_dir就是页表目录,虽然位移是固定的page_offset,但是还是必须利用页表去查询),这样大于物理内存1g的空间是没法进行线性对应关系的,因为规定好了内核空间就1g,线性关系对应也只有1g空间,除非虚拟内核空间大于4g,利用page_offset可以做偏移量,但是内核空间需要用剩下的3g怎么办,必须提供一个线性地址,那就利用高端内存去做映射,也就是1g中后128m,需要注意的是也就是能映射128m物理内存,因为牵扯到内核分配,分多了也没必要,128m大家轮换使用没什么问题。但是当时我有这么个因为,虚拟用户空间的3g怎么对应内存,根据分页分段,最后pte指向的是任何范围的物理空间的物理地址,不需要线性地址的对应关系,所以多大都可以分配。
之前我一直纠结是不是虚拟的用户内存只有分配到后3g空间,其实不然,物理空间是没有1g和3g的界限的,他只有zone_DMA,ZONE_NORMAL等物理块的概念,所以不要在乎1g还是3g,只有有free的块就可以给用户空间来用
3 64bit因为逻辑内核空间和用户空间能够达到128t的空间,物理内存不可能达到这么多,所以一定会做到page_offet的线性映射,所以不需要高端内存这种东西存在。
4 物理内存分配是利用zone块去查看free_area列表去分配,可以通过 cat /proc/zoneinfo去看相应块的分布,留意start_prk_page的开始物理页的分配如4096就是16m
相关文章推荐
- Linux 学习笔记------目录处理命令:ls
- Linux framebuffer显示bmp图片
- linux模糊查询文件并删除
- 共享内存
- linux下select,poll,epoll的使用与重点分析
- CentOS7给终端配置快捷键
- Linux内存管理机制中buffer和cache的区别
- 解决linux环境机器 系统时间不对
- linux通用makefile模板
- 【system】VMware Workstation安装CentOS7.0 详解图文版
- Linux下echo命令
- Linux下echo命令
- Linux内存管理Swap和Buffer Cache机制
- CentOS 6.3/6.4 Minimal 源码安装 MySQL 5.6.10/5.6.11
- 位图文件(BMP)格式以及Linux下C程序实现(转)
- 查看centos服务器硬盘状态信息
- Linux 下 c 多线程学习
- 在 Linux 下用 mkdir 命令来创建目录和子目录
- Linux学习笔记------服务器注意事项
- 在 Linux 下用 mkdir 命令来创建目录和子目录