Linux中的分段和分页
在早期的计算机中,程序是直接运行在物理内存上,换言之就是直接操作物理地址。此时如果系统只有一个程序运行,那么只要这个程序所需的内存不超过物理内存就不会出现问题,也就不需要考虑内存管理。但是当前的计算机系统都是支持多任务、多进程的,这样CPU及其它硬件的利用率会更高,因此我们就需要考虑如何将有限的物理内存及时有效的分配给多个程序,这个过程就称为内存管理。
早期计算机系统内存管理存在的问题
1、进程地址空间不能隔离
由于程序直接访问的是物理内存,这时程序所使用的内存空间不是隔离的(每个程序都可以访问整个系统的地址空间)。这样一旦一个程序访问其它程序的地址空间,就可能导致其它程序的崩溃(很多恶意程序或者木马程序可以轻而易举的破坏其它程序),系统的安全性就得不到保障了,这对用户来说是不能容忍的。
2、内存使用的效率低
由于物理内存是有限的,当内存资源不足时,又启动一个程序,就需要使用虚拟内存技术将一些程序暂时不用的数据写到磁盘上,也就是将内存中某个程序的数据全部交换到磁盘上,以此来释放内存空间,然后在该程序再次运行时,将数据从磁盘读取到内存,由于磁盘的I/O操作是比较耗时,所以这个过程的效率将会十分低下。
3、程序运行的地址不能确定
程序每次需要运行时,都需要在内存中分配一块足够大的空闲区域,而问题就是这个空闲区域的位置不能确定的,这会带来一些重定位的问题(重定位指的是将程序的逻辑地址空间转换为物理