内存系统为什么要分段

来源:互联网 发布:win7端口在哪里打开 编辑:程序博客网 时间:2024/05/23 14:06

内存按访问的方式来看,就像长方形的带子,地址依次升高。内存是一个随机读写设备,即可以访问内部任何一处,不需要从头开始找,只要直接给出地址即可,如访问内存0xc00,只要将该地址写入地址总线便可,而分段是内存访问的机制,是给CPU用的访问内存的方式,只有CPU才会关注段,那为什么CPU要关注段呢,原因如下:
编译器在编译程序时,肯定要根据CPU访问内存的规则将代码编译成机器指令,这样编译出来的程序才能在该CPU上运行,所以说,在直接以绝对物理地址访问内存的CPU上运行程序,该程序中指令也必须得是物理地址,若加载程序运行,不管是内核程序还是用户程序,程序中地址若是绝对物理地址,那么该程序必须放在内存中的固定地方,于是两个编译出来地址相同的用户程序肯定没法同时运行,于是伟大的计算机前辈们就想出了这样一个方式,让CPU采用“段基址+段内偏移地址”的方式来访问任意内存,这样的好处就是程序可以重定位了,尽管程序中指令给的是绝对物理地址,但可以运行多个程序了。
重定位就是将程序中的指令的地址改写成另外一个地址,但该地址处的内容还是原地址处的内容。
CPU采用“段基址+段内偏移地址”的形式访问内存,就需要专门提供段基址寄存器,这些是cs,ds,es等,程序中需要哪块内存,只需要先加载合适的段到段基址寄存器中,再给出相应的偏移地址即可,CPU会将这两个地址相加后的结果用于内存访问,送上地址总线。