前几天看了下内存管理
程序员都需要有无限的内存可以使用,看现实总是与愿违,现在的产品,特别是成熟产品,对成本的要求太高,在嵌入式这个行业内,内存,flash等都压到极限,充分利用空间。
内存管理两种机制,分段,分页
1.分段
用所谓的段寄存器去区分不用的内存地址。这个起初的目的是为了让CPU的地址线少于内存的地址线,来增加内存寻址能力的一种解决方法。但是当cpu的地址宽度越来越大,可以和内存的地址宽度一致时,为了向前兼容,intel不得不保留这个方式(也许要有其他原因),并增加一些寄存器来完成这个方案。
2.分页
让所有的线程都有4G的虚拟内存,在不用的线程运行时,在页寄存器写入不同的页地址。分页把物理内存分成4K到4M大小的内存页,使用一些寄存器(书不在边上,忘了是什么寄存器了),使操作系统在切换线程时,切换内存页(这个中间有请页机制等等,还没搞明白,以后来更新)。
内存管理很复杂,总的是,一个程序地址(虚拟地址)-->(分段)--> 线性地址-->(分页) -->物理地址;
linux的内存管理简化了分段机制,主要在分页机制里实现内存管理。