浅谈虚拟地址空间

                                                                          浅谈虚拟地址空间

1.由来

        为什么会出现虚拟地址空间呢?

        对于现在常用的编译软件都在32位的平台下,在之前有16位的平台(8060系统)。

        对于16位的平台,它是实模式。进程的地址就是实际的物理地址,如下图所示:

                   浅谈虚拟地址空间_第1张图片

       在物理内存当中,每一个程序的地址是连续的,假如我们的A程序中,地址加了偏移走到了另外的一个程序中了,那么我们是不是在A程序中,就改掉了B程序中的数据。在之前的木马病毒,就是如此的工作原理。   

除此之外还有如下的几种问题:

1.地址空间不隔离(如上)。

2.内存使用效率低。

3.程序运行的地址不确定。

       怎样解决这些问题呢,我们就可以加一个中间层。“计算机科学领域的任何问题都可以通过一个间接的中间层来解决”应用于“程序员的自我修养”这本书,那么我们的这个中间层就是虚拟地址空间。

2.分布

          那么我们的虚拟地址空间有多大呢?

         虚拟地址空间是受计算机硬件操作平台决定的,也就是CPU的位数决定的。就比如说32位的,那么它的虚拟地址空间地址就是0~2^32-1,也就是4G的虚拟空间大小;64位,那么它的虚拟地址空间地址就是0~2^64-1,也就是17179869184G的虚拟空间大小。在这里我们可以说一下,对于c语言,在32位下指针4个字节,在64位下指针8个字节。

      对于32位下,有4G的虚拟地址空间是怎样去分配的呢?

      在windows下,内核和用户空间是2:2;

     在linux下,内核和用户空间是1:3;

                            浅谈虚拟地址空间_第2张图片

 

 

3.思考

这3G的空间“原则上”是可以给进程使用的,但是遗憾的是,有一部分我们要用在其他 的地方。

在window上只有2G的空间,更加的不够用,我们可以根据下面的办法改成3G。

浅谈虚拟地址空间_第3张图片

现在的好多程序是大于3G,我们的虚拟地址空间不够是怎样的呢。我们参考“程序员自我修养”这本书。

浅谈虚拟地址空间_第4张图片

浅谈虚拟地址空间_第5张图片

            

你可能感兴趣的:(操作系统+网络)