连续存储空间和非连续存储空间 |
---|
DOS时代的内存管理是粗放的,同时其基本特点是:连续存储空间分配。物理上的空间连续性是内存定位所必须的。 详细的说,内存空间有所谓的逻辑空间和物理空间之分。
(1)当编写一段程序的时候,程序员所面对的是逻辑空间; 当把程序所对应的最终的可执行代码调入内存后,程序(进程)所面对的是物理空间。 (2)在C语言课程中,变量被称为“一段连续存储空间”,但是,这些变量空间不是物理上的,而是代码角度的,逻辑角度上的空间。 逻辑空间在软件(程序)调入内存(变成进程)后,会在内存的某个位置开始的地方占用连续的存储空间,此时,就需要将逻辑空间转换成物理空间。 转换的方法简单地说:用那个起始地址,加上,逻辑地址(偏移量),就可以映射到真实的物理空间中。
这种连续存储空间的分配与回收操作,存在一个问题:会产生所谓的“内存碎片” 为了避免上述情况,现代计算机系统(主要指OS)通常采用“页式存储系统”来实现内存申请与回收。
一个类似的例子:扑克发牌算法。每13张牌是一页,共四页 扑克发牌算法:https://blog.csdn.net/weixin_42072280/article/details/83214758
对于上述页式管理,需要得到的结论:虽然在内存物理层面,内存的空间分配是不连续的,但,OS可以保证在逻辑(程序)层面是连续的。 |