内存管理

144 阅读2分钟

多个程序并发时可能会操作同一内存地址,后面的程序会将前面程序的内存地址擦除,这样会导致程序的崩溃。造成这个问题的原因是多个程序操作同一物理地址,为了避免出现这样的问题就引入的虚拟地址,让每个进程仅操纵自身的虚拟地址,再完成从虚拟地址到物理地址的映射。完成从虚拟地址到物理地址的映射使用的是段式内存管理,利用段号根据段表找到对应的物理地址,段式内存管理存在的问题是会存在内存碎片和内存交换效率低,内存碎片的产生是因为每个段的大小并不固定,内存交换效率低是因为为了解决外部碎片问题必须使用swap区域,频繁的换入换出会让机器卡顿。为了解决内存碎片和内存交换效率低的问题就引入了页式内存,页的大小固定的且远远小于段,由于其小的特性解决了内存交换效率低,由于其大小固定的特性就不会产生碎片。分页虽然会解决上述两个问题,但同时将一个逻辑段分割成逻辑上没有关联的页。同时页表会占用过大的内存,为了解决页表占用过多的内存就引入了多级页表根据局部性原理,只为使用到的一级页表创建内存。但引入多级页表会造成查询的时间降低,因为会多次查表,这样的话就建立一个专门存放页表项的Cache也就是TLB,人们俗称的快表

mp.weixin.qq.com/s/oexktPKDU…