版权声明:如有需要转载,请声明出处 https://blog.csdn.net/hehuang139/article/details/86686957
WHY
- 增加内存的利用率
- 内存超载
- 实际需要的内存比实际内存大
- 内存碎片
- 保护和重定向
- 不能相互干扰
- 重定向,内存分配
- 内存超载
- 方便编程
- 内存共享
- 动态链接实现
HOW
段页式内存管理
虚拟内存地址空间
- 原理
- 内存使用的局部性特征
地址空间
- WHAT
- 每个进程用于寻址内存的一套地址集合
- 每个进程拥有自己的地址空间(可以共享)
- HOW 实现方案
- 基址寄存器和界限寄存器
- 基址寄存器保存进程的物理内存起始地址
- 界限寄存器保存进程的最大内存长度
- 优缺点
- 加法操作和比较操作耗时
- 内存扩展性差
- 分页/分段技术
- 基址寄存器和界限寄存器
交换技术
- how
- 对于不活跃的进程,将空闲的内存交换到磁盘上,需要使用时在交换内存中
- 优缺点
- 监控
- 查看swap内存的使用情况
管理内存(使用、空闲)
位图法
- 优缺点
- 简单
- 分配内存需要查找连续的0,效率低
链表法
- how
- 每个节点管理一个内存快
- H 空闲, P 进程占用
- 开始地址
- 空间大小
- 分配方案
- 最佳适配,充分利用内存块,但是会产生大量内存碎片,反而浪费内存
- 最差适配
- 首次适配 效率最高
- 下次适配 效率不是太高
- 改进
- 两个链表管理空闲快,一个空闲,一个进程
- 但是释放会比较消耗时间
- 每个节点管理一个内存快
分页
WHAT
连续内存分配->离散的内存分配
- 将虚拟内存空间(页)和物理内存空间(页框)分成固定大小的内存块,即一个页,一般是4k大小,
HOW
- 组成
- 页表 页和页框的映射关系
- 缺页中断 如果页没在物理内存中则发生缺页中断
- 页面置换
- 优化点
- 快表
- 多级页表
分段
大致类似
代码的虚拟内存空间
如果是32位系统,虚拟内存空间位4G(3G用户空间,1G内核空间),如果是64位系统则为(48,没用到64,不需要)
- 代码端
- 堆
- stack
- mmap
linux api
- alloc 从栈中分配内存
- malloc 从堆中分配内存
- 只是移动brk位置,并没做实际的内存分配,所以此时并不会发生页面分配
- < 128k, 直接在堆上分配 系统调用brk
-
128k, 在mmap上分配 do_mmap
- calloc 分配内存,并初始化,