三、操作系统导论——内存基础(知识点总结)

/ 操作系统导论 / 没有评论 / 577浏览

抽象:地址空间

1、操作系统需要提供一个易用(easy to use)的物理内存抽象。这个抽象叫作地址空间(address space),是运行的程序看到 的系统中的内存。

2、虚拟内存:虚拟内存系统负责为程序提供一个巨大的、稀疏的、私有的地址空间的假象,其中保存了程序的所有指令和数据。

3、栈和堆:

栈(stack)来保存当前的函数调用信息,分配空间给局部变量,传递参数和函数返回值。 堆(heap)用于管理动态分配的、用户管理的内存。

4、隔离是建立可靠系统的关键原则。

5、虚拟内存系统的主要目标:

内存操作API

1、内存两种类型:

2、malloc()调用:

基本用法:malloc 函数非常简单:传入要申请的堆空间的大小,它成功就返回一个指向新申请空间的指针,失败就返回NULL。

比如:

//size_t 类型参数,该参数表示你需要多少个字节
void *malloc(size_t size);
或者
double *d = (double *) malloc(sizeof(double));
再或者
int *x = malloc(10 * sizeof(int));

3、free()调用:
要释放不再使用的堆内存,程序员只需调用free()。

int *x = malloc(10 * sizeof(int));
...
free(x);

4、值得注意的是:malloc()调用和free()调用。都不是系统调用,而是库调用。

地址转换

1、回顾:
在实现CPU 虚拟化时,我们遵循的一般准则被称为受限直接访问(Limited Direct Execution,LDE)。
LDE 背后的想法很简单:让程序运行的大部分指令直接访问硬件,只在一些关键点(如进程发起系统调用或发生时钟中断)由操作系统介入来确保“在正确时间,正确的地点,做正确的事”。

2、地址转换(address translation):
可以看成是受限直接执行这种一般方法的补充。
作用:将指令中的虚拟(virtual)地址转换为数据实际存储的物理(physical)地址。

3、动态(基于硬件)重定位:称为基址加界限机制(base and bound),有时又称为动态重定位。
具体实现:每个CPU 需要两个硬件寄存器:基址(base)寄存器和界限(bound)寄存器,有时称为限制(limit)寄存器。

physical address = virtual address + base

4、操作系统所做的事儿(针对地址转换功能):

空闲空间管理

1、外部碎片和内部碎片:

2、底层机制:

3、基本策略:

4、其他方式: