码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 内存管理

时间:2015-09-08 00:14:47      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

版本 时间
0.1 2015_09_07

 

 

------------------------------------------------------why--------------------------------------------------------------------------------------

 

    每个进程都需要内存。为了提高效率和减少错误。提出了虚拟内存的概念。
 
 
    早期的PC都是直接访问物理地址的的。就是说CPU直接是直接通过内存的物理地址来获取数据。
如图
技术分享技术分享
 
现代的PC都采用虚拟内存。
如图:
技术分享技术分享
 
CPU通过MMU将虚拟地址转换为物理地址,那么就可以通过物理地址来访问内存获取数据了。
MMU: memory management unit
 
归根到底最后还是通过物理地址来获取数据的。
 
只不过现代计算机中间加了一层虚拟地址,带来了诸多好处,有哪些好处呢?
 
virtual memory (VM)
Virtual memory is an elegant interaction of hardware exceptions, hardware address translation, main memory, disk files, and kernel software that provides each
process with a large, uniform, and private address space.
virtual memory provides three important capabilities
(1) It uses main
memory efficiently by treating it as a cache for an address space stored on disk,
keeping only the active areas in main memory, and transferring data back and
forth between disk and memory as needed.
 
(2) It simplifies memory management
by providing each process with a uniform address space.
Simplifying linking Simplifying loading
Simplifying sharing Simplifying memory allocation
 
 
(3) It protects the address
space of each process from corruption by other processes.
 
                                                                   -----<深入理解计算机系统>
 
 ------------------------------------------------------------------------what:------------------------------------------------------------------

首先我们来了解一些概念。

physical memory,
that is, memory that is actually present in the machine, 
物理地址:内存的实际地址
 其实我们最终都是通过物理地址来获取数据,只不过如果采用虚拟内存的话就是先要把虚拟内存地址转换为物理地址
 
 

virtual memory,

that is, address space, so call linear addresses

虚拟地址和address space以及和linear address是同一个概念

virtual memory is much larger than the physical memory

Life is complicated by the fact that there are various caches around, so that different ways to access the same physical address need

not give the same result.

 

bus addresses
顾名思义,也是传到总线的地址,不过是DMA设备[非CPU]通过该地址再转换成物理地址,最终还是通过物理地址来获取地址。
DMA:Directional Memory Access,就是直接内存访问,就是说没有经过cpu,设备自己访问内存。
通常来说bus address和phycal address是一致的,一致的话,果断的肯定是不用经过转换成真正的物理地址啦。否则还是需要转换成物理地址的。
归根到底,还是通过物理地址来来获取数据的。
那为毛还有bus addresses这个概念,上面说了嘛,有些计算机bus address和physical address还是不一致的。
不一致肯定是有各种各样其他的用途了【参考虚拟地址和物理地址】这里不详述啦。
 

The basic unit of memory is the page.

 

 ---------------------------------------------------------------how--------------------------------------------------------------

 

The basic unit of memory is the page.
对于cpu来说,内存的基本单元是页就是page啦。
别问我page有多大。没有人规定说page一定是多大的,根据每个计算机的体系不一样而不一致的。
但是我们可以通过宏定义PAGE_SHIFT可以知道page size的大小
请看;
#if defined(CONFIG_PARISC_PAGE_SIZE_4KB)
# define PAGE_SHIFT     12
#elif defined(CONFIG_PARISC_PAGE_SIZE_16KB)
# define PAGE_SHIFT     14
#elif defined(CONFIG_PARISC_PAGE_SIZE_64KB)
# define PAGE_SHIFT     16
#else
# error "unknown default kernel page size"
#endif
 
一般来说32位计算机的分页大小是4KB,那么如果该计算机的内存是1GB,
1GB = 1024MB = 1024*1024KB, 1024*1024/4 = 262144
就是说该计算机的内存在cpu看来就有262144个页,每个页的大小就是4KB
这时候PAGE_SHIFT == 12   就是1左移12,1<<12 = 4KB

Linux 内存管理

标签:

原文地址:http://www.cnblogs.com/liao123abc/p/4751401.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!