Memory Management

为什么要有逻辑地址的概念?
程序是给定的,硬件可用的地址是变化的。
所以需要引入逻辑地址的概念,做逻辑地址与物理地址的映射。

如何映射?

固定偏移量映射
缺陷:

  1. 一个进程使用的最大内存量是变化的。
  2. 分配的内存的利用效率不高,内碎片
  3. 外碎片

分页
程序逻辑内存分为多个页(page)
物理内存分为多个帧(page frame)
一个内存地址处存储的内容 为一个字节, 1B
利用页表(Page Table) 存储二者的对应关系
页号,帧号,当前这一条目是否可用,读写权限,脏….
1ef6d065ab4c851654903930af5fadc2.png
页表每个进程都需要维护

内存的一个地址里面是一个字节(Byte)的数据
32位操作系统物理地址有2^32个,因而只能使用4GB的内存。
任何一个32位的内存可操作的逻辑地址是2^32个即4GB。
上条势必会造成多个程序使用的总内存和大于物理内存,此时会借助磁盘,将不着急用的内存先放进磁盘,页表中显示的是磁盘。

内存映射的过程。

32位系统,256MB内存,页大小为4KB(有四千条地址)
32位程序
4KB = 2^12 bit

也就是说,1个页中提供12位偏移
逻辑地址 32bit = 20bit页号(32-12)bit + 12bit偏移
物理地址 28bit = 16(28-16)bit,即16bit帧号 + 12bit偏移

分页过程中,需要两次读内存时间上有待优化,页表占用空间较大空间上也有待优化(先读内存中的页表,再去拿到对应的地址)

分页中的时间与空间优化。
TLB快标,将最长访问的8-128个页表项存到访问速度更快的硬件中,一般是在MMU中(集成在CPU中)

内存管理-分段 segment 段号+页号
段仅仅保留了逻辑上的意义。
进程间通信-共享内存方式

Cpu的cache如何起作用:

CPU接收到指令后,它会最先向CPU中的一级缓存(L1 Cache)去寻找相关的数据,然一级缓存是与CPU同频运行的,但是由于容量较小,所以不可能每次都命中。这时CPU会继续向下一级的二级缓存(L2 Cache)寻找,同样的道理,当所需要的数据在二级缓存中也没有的话,会继续转向L3 Cache、内存(主存)和硬盘.

984a1ab88c7ba5734a4106cb080a49d6.png