linux memory manage unit ,linux内存管理。

------------恢复内容开始------------
linux device drivers --- chpater 15:
1 Physical Addresses and Pages:
Physical memory is divided into discrete units called pages。物理内存是由基本单位page组成的,在不同的系统上,page有的是4k,有的是8k.
当我们看到一个内存地址,比如0x0000aaff时,可以通过这个这个地址定位到物理内存中的一个具体位置,假设目前的page是4k,即4096个bytes,首先通过0x0000aaff的低12位,计算出此地址在第多少个page中,
然后通过其余的位计算出此地址是在这个page的第多少个字节上(即相对于page地始地址的offet).这样就把0x0000aaff定位到物理内存的一个具体位置上了。

2 high memory, low memory.
比如系统是32位的,那么操作系统最多可以寻址4GB内存。即使放一个8G的内存,那么超过4G的部分已经没有办法和低4G内存同时使用了。
一般就把超出的这部分叫做high memory, 下面的这部分叫做low memory.
它俩的区别是high memory无法直接使用,要使用的话,必须先给它分配一个逻辑地址,这样才能访问到。而low memory始终占用固定的逻辑地址(kernel的很多数据都放在这里,所以不能没有逻辑地址,否则无法使用。)。
我们使用void *kmap(struct page *page),为high memory分配内存地址(kernel会保存一小段地址空间,专门为high memory使用的),这个地址使用完后,要用kumap将其释放掉,否则别的high memory无法kmap成功,也就无法访问。
参数page:there is one struct page for each physical page on the system。计算机上的物理内存,每一个page都对应有一个struct page来表示它。

3 内核编程操作内存时,可以直接申请N个page大小的内存。也可以申请固定大小的内存,这种方式申请的单位是字节,kernel会通过字节换算出来应该是多少个page。

------------恢复内容结束------------

linux memory manage unit ,linux内存管理。

上一篇:ubuntu 升级 16.04 to 20.04 实记


下一篇:linux 测试机器端口连通性方法