目录
1--非连续内存分配
在连续内存分配中,一个程序的内存空间是连续的,其内存利用率较低,且容易形成内碎片和外碎片的问题;
在非连续内存分配中,一个程序的内存空间是非连续的,可以进行更好的内存管理和利用,支持代码共享和数据共享;
2--分段
在非连续内存分配中,分段表示操作系统根据程序的段性质,将一个程序分离成不同部分(如运行栈、程序数据等),存储在不同的物理地址空间当中;
这里需要明确一点,在分段中逻辑地址空间是连续的,而物理地址空间是不连续的;在逻辑地址空间中,一个程序的各个部分是连续存储的;而在物理地址空间当中,一个程序的各个部分是不连续存储的;
上面的逻辑地址空间和物理地址空间会延伸出两者的映射问题,一般来说逻辑地址由段号和偏移地址组成,逻辑地址的段号通过段表来寻找其在物理地址的映射(即段在物理地址的起始地址和长度等);
通过操作系统事先建立的段表可以有效完成逻辑地址空间与物理地址空间的映射;
3--分页
在分页管理中,物理空间会被划分为大小固定的帧(Frame),而逻辑空间会被划分为与帧大小相同的页(Page);
分段和分页的不同在于:分段管理中每一个段的长度是不确定的(长度可变),而在分页管理中每一个页的长度是确定的(长度不可变);
在物理空间中,一个内存物理地址由帧号(f)和帧内偏移(o)组成:
物理地址 = 2^S × f + o,S表示每一个帧共有 2^S 个字节,即由 S 位表示;
在逻辑空间中,一个内存逻辑地址由页号(p)和页内偏移(o)组成:
逻辑地址 = 2^S × p + o,S表示每一个页共有 2^S 个字节,即由 S 位表示;
页号可通过操作系统建立的页表来映射到帧号,在分页中页号不一定与帧号相等,但页内偏移和帧内偏移一定相等;通过页表将页号映射到帧号,可以有效完成逻辑地址到物理地址的映射;
4--页表
未完待续!