操作系统笔记:(一)物理内存分配1:连续内存分配
2018-03-27 15:37
295 查看
remark: 这是我准备考研期间看学堂在线清华大学的OS MOOC的笔记,由于博主不是科班出身,所写错误可能很大,望大家指正.
本文结构如下:
计算机内存管理概述
连续内存分配
碎片整理
e.g: 伙伴系统(Buddy System)
MMU 工作原理介绍
Where exactly L1, L2 and L3 Caches located in computer?
上面是关于MMU和L1,L2 Cache 的介绍,先留坑,有兴趣可以看看
分段(Segmentation)
分页(paging)
段页式
分段分页和段页是都会在非连续内存分配中介绍,重定位先留坑待补
逻辑地址空间 CPU看运行进程看到的地址,也称虚拟地址
* 编译时 编译时写死,生成绝对地址代码
* 加载时 编译时生成可重定位代码,加载时进行地址绑定
* 执行时 执行时进行地址绑定,这种方式更加灵活,执行时可以从一个内存段移到另一个内存段
两个问题
1. 外碎片 (相邻两块之间不能用的)
2. 内碎片 (分配的内存中用不完的)
特点
1. 加载时分配
2. 地址连续
最佳(best-fit): 找到足够大的中最小的 M=minMi≥Mneed{Mi}M=minMi≥Mneed{Mi}
最差(worst-fit): 分配最大的
交换 这种策略是OS在进程空闲时将所占用的数据段换出到硬盘中去,也可以抢占。
每一块内存都是2的幂次,需要注意的是由于分配是连续的,所以依然存在外部碎片
本文结构如下:
计算机内存管理概述
连续内存分配
碎片整理
e.g: 伙伴系统(Buddy System)
计算机内存管理概述
首先我们知道计算机的内存是分很多层次的,不同层次之间访存速度相差很大,(甚至达到几个数量级)MMU 工作原理介绍
Where exactly L1, L2 and L3 Caches located in computer?
上面是关于MMU和L1,L2 Cache 的介绍,先留坑,有兴趣可以看看
内存管理方式
重定位 (relocation)分段(Segmentation)
分页(paging)
段页式
分段分页和段页是都会在非连续内存分配中介绍,重定位先留坑待补
地址空间
物理地址空间 就是真实的计算机内存(e.g.: 4G ,0-4G-1)逻辑地址空间 CPU看运行进程看到的地址,也称虚拟地址
地址生成
将指令与数据绑定到内存地址有如下几种情况:* 编译时 编译时写死,生成绝对地址代码
* 加载时 编译时生成可重定位代码,加载时进行地址绑定
* 执行时 执行时进行地址绑定,这种方式更加灵活,执行时可以从一个内存段移到另一个内存段
地址检查
连续内存分配
顾名思义,操作系统为每个进程分配一块连续的内存区域,操作系统需要维护一个表,记录哪些内存块被占用了,哪些没有。这样做很明显会产生两个问题
1. 外碎片 (相邻两块之间不能用的)
2. 内碎片 (分配的内存中用不完的)
特点
1. 加载时分配
2. 地址连续
分配策略
最先(first-fit) : 找到第一块足够大的,最佳(best-fit): 找到足够大的中最小的 M=minMi≥Mneed{Mi}M=minMi≥Mneed{Mi}
最差(worst-fit): 分配最大的
碎片整理
一种解决外部碎片的方法是 紧缩(compaction) ,就是移动内存,最暴力的就是将所有占用内存移到一边。but 紧缩并不是总是可以的必须是在地址绑定时是执行时生成才行。另外一种策略就是下一节要讲的非连续内存分配交换 这种策略是OS在进程空闲时将所占用的数据段换出到硬盘中去,也可以抢占。
Buddy System
它的直观表现是这样的每一块内存都是2的幂次,需要注意的是由于分配是连续的,所以依然存在外部碎片
相关文章推荐
- 操作系统笔记:(二)物理内存分配2:非连续内存分配
- 操作系统的学习(3)——物理内存管理:非连续内存分配
- 操作系统 笔记(三)计算机体系结构,地址空间、连续内存分配(四)非连续内存分配:分段,分页
- 物理内存连续内存分配
- 连续内存分配 读操作系统概念第六版
- 操作系统学习-17. 内存的连续分配方式
- 操作系统-内存管理-内存空间的连续分配方式
- 操作系统内存分配原理(帖子中转载)
- 深入理解Java虚拟机笔记---内存分配与回收策略
- 操作系统: 最佳适配算法和邻近适配算法的模拟实现(内存分配算法)
- 习题 8.19(1) 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- 深入理解Java虚拟机笔记---内存分配与回收策略
- 【c++笔记五】内存分配new与delete
- 《C专家编程》笔记(二)---测试一下你的进程中可以分配多大的内存
- Java学习笔记1:基本内存的分配
- C++ 内存分配学习笔记
- JVM笔记7-内存分配与回收策略
- 《深入理解java虚拟机》笔记(6)内存分配与回收策略
- 操作系统实验3:内存分配与回收
- 《深入理解Java虚拟机》笔记 第三章 内存分配与回收策略