操作系统内存管理机制和Python垃圾回收机制
什么是分页机制
逻辑地址和物理地址分离的内存分配管理方案
- 程序的逻辑地址划分固定大小的页
- 物理地址划分为同样大小的帧
- 通过页表和对应逻辑地址和物理地址
什么是分段机制
分段是为了满足代码的一些逻辑需求
- 数据共享、数据保护、动态链接
- 通过短标来对应逻辑地址和物理地址
- 每个段内部是连续的内存分配,段和段之间是离散分配的
分段和分页的区别
- 页是出于内存利用率的角度提出的离散分配机制
- 段是出于用户的角度,用于数据保护,数据隔离等用途的管理机制
- 页的大小是固定的,操作系统决定;段大小不确定,用户程序确定
什么是虚拟内存
通过把一部分暂时不用的内存信息放到硬盘上
- 局部性原理,程序运行时只有部分必要的信息装入内存
- 内存中暂时不需要的内容放到硬盘上
- 系统似乎提供了比实际内存大得多的容量,称之为虚拟内存
虚拟地址和物理地址转换
答:32位的虚拟地址被分成3个域,目录(10位),页表(10位),偏移(12位)
- 从CR3找到我们的页目录地址
- 根据目录的10位,找到页目录
- 根据页表10位,找到目的页表,页的起始的地址
- 加上偏移的12位,找到目的地址
什么是内存抖动
本质上是频繁的页调度行为
- 频繁的页调度,进程不断产生缺页中断
- 置换了一个页,又不断再次需要这个页
- 运行的程序太多;页面替换策略不好,终止进程或增加物理内存
Python垃圾回收机制原理
python无需我们手动回收内存
- 引用计数为主(缺点:循环引用无法解决)
- 引用标记清除和分带回收解决引用计数的问题
- 引用计数为主+引用标记清除和分带回收为辅
算法原理