应用程序被读入内存后,为了保证系统的统一性,所有的程序都有同样的一套寻址规范。这个寻址就是虚拟地址。这个虚拟地址是系统提供转换的,不是程序的工作。
如果系统不提供这个功能,那么应用程序就需要自己去寻找没有被使用的内存,以及还要自己去处理内存容量的问题,而且如果程序调用外部的一些函数库,这些函数库也需要分配内存,这会导致应用程序的设计难度非常大,每个应用程序实际上就是一个 *** 作系统了。多个程序共同运行导致内存使用混乱也很容易出现。
应用程序申请内存,使用的是 *** 作系统的内存分配功能。这样 *** 作系统可以根据实际情况给应用程序内存,程序不需要考虑因为内存位置不同而必须不同编写的难度。而且 *** 作系统还可以提供虚拟内存等等各种方式来扩充内存,这样的内存对于应用程序来说是不需要考虑的,一切都有系统打理。
使用虚拟地址后,对于应用程序来说,他的内存使用不需要考虑其他的程序占用,也不需要考虑内存容量的问题,也不需要考虑内存块位置,函数库的调用也都扔给 *** 作系统打理。这使得应用程序不需要考虑具体如何管理内存,只需要考虑作为应用程序的应用部分。
而且,因为内存是虚拟的,应用程序一些函数调用, *** 作系统可以把多个应用程序的调用都用同一套数据来处理,这样,既可以节约内存使用(就是启动100个应用程序,也只需要内存里有一套函数库而已),也可以做到外部函数库和应用程序没有直接关联,纯粹是由系统做虚拟地址过渡。
至于为什么 4G ,这是传统+一些兼容的考虑。
以前没有这个技术时,每个程序都可以完全使用整个系统,整个空间是连续的。到了这种虚拟地址的方式后,每个程序还是有自己“独立”的一整套内存地址。但每个程序内存使用量肯定不一样。那么多少内存空间才完全够用呢?当时因为正好使用了 32 位系统。那么就把整个 32 位环境支持的 4G 内存容量作为这个极限。
不过因为内存地址是虚拟的。实际应用程序要用内存,是需要先申请的,所以只有程序申请后,真实内存才会被占用。这个 4G 只是在算法上作为极限。
不过因为 4G 也是硬件极限。所以 4G 以外的地址都是不能使用的,这就导致另一个问题,一些硬件有存储器,有些硬件需要存储空间做交互(比如 PCI ,比如各种硬件,比如 AGP 显卡)。这些存储区域怎么处理?
所以,Windows Vista 的 32 位版在 4G 内存的机器上曾经报出只有 3.5G (有的机器甚至只有 3.25G 可以用)。就是这个问题的解决办法导致的:把硬件的内存用虚拟地址的方式,放到虚拟地址的最后面。这样应用程序调用硬件存储时,可以直接按照内存的方式读写。这样应用程序就很好的统一了存储界面:只有 4G 的内存范围,不存在其他方式的存储调用方式(硬盘需要用读写功能读取到内存后才能处理,而不是直接进行处理)。这样应用程序的开发就很简单,而且整个内存的使用每个程序都一样。不存在各种硬件的原因而不同导致的需要重新设计内存管理算法。 *** 作系统也能根据实际应用程序的需要随时分配数据,也可以根据每个程序的运行情况,区别的提供物理内存或者虚拟的内存。
这么设计最大的一个好处是,硬件环境和应用程序是无关的,中间由 *** 作系统做转换。而且应用程序互相之间也没有影响,就好象整个内存都由他自己一个程序使用一样。
PS:说了半天,我发现我自己也说不清楚其中的缘由……
您好,方法1、依次打开之前拷贝的三个虚拟机,查看当前的IP;
2、进入虚拟机配置IP的配置文件目录;
cd /etc/sysconfig/network-scripts/
3、进入目录后,查看当前目录下的文件,输入命令ls;
4、切换root权限,并输入密码;
5、开始修改配置文件,输入命令:vim ifcfg-eth0,进入配置文件;
6、修改IP为11节点、DNS信息;
7、保存配置文件信息;
8、重启网络服务,输入命令: /etc/init.d/network restart;
9、服务重启成功;
10、查看当前虚拟机的IP地址,输入命令:ifconfig;
由于Slave1虚拟机是从Master中复制来的,则其对应的物理网卡是一样的;
接下来将修改Slave1的网卡信息;
11、点击Slave1虚拟机右下角的小电脑,即网络适配器,点击网络适配器--移除,进行移除网络配置;
12、点击添加--下一步--下一步,完成,开始添加网络适配器;
13、查看物理网络地址:ifconfig,可以看出现在的物理网卡地址与Master节点不同;
14、用同等方法进行配置Slave2。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)