内存分区于分页
编译时进行分段,在内存中如何找到空闲的分区,找到之后入读,初始化TDL表
一.内存分区
固定分区,但由于需要不同所以这种方法不太合适
可变分区,需要两个表,一个记录已经分配的表,一个表记录空闲区
有请求分配,有空闲区,就添加进已分配表,修改空闲区表
释放内存,释放完之后将空的内存添加到空闲区表,修改已分配表
操作系统很多算法没有对错,只有优缺点,首先适配,查表更快,最佳适配会出现特别多细小的内存碎片,最差适配会得到比较均与的空间,有各自不同的特点
A.最佳适配
二.分页
实际物理内存要通过分页来进行分配,而不用内存分区来进行,内存碎片,段不连续,内存紧缩,花费时间,内存改变了,需要修改LDT,CPU无法执行上层用户的操作
能否将请求的内存打散分配?
将段分成一页一页的,物理内存也分成一页一页的,内存不需要紧缩,最多浪费一页一页4K
分页如何重定位,和前面的一样分段有段表,分页有页表,cr3页表寄存器指向页表初始地址,每个页表大小为4K,4K=2^12,重定位需要先找到页号,假设逻辑地址是0x2240向右移动12位,剩下的2就是页号,页框3对应的物理地址3x4K,形成物理地址0x3240