因此为了避免这种现象的发生引入了虚拟地址的概念。
原理:
如x86(32bit的CPU),物理内存4G,每个进程都假设自己有4G内存可用。操作系统启动,进程是运行在内核之上的,所以虚拟内存当中虽然是4G,其实要划分最低端的1G给内核用,上面的3G给进程使用,这个是虚拟的并不存在,真正的数据是放在物理内存当中。大部分虚拟地址是分页的即页宽(page frame),在物理内存当中,把自己的存储空间分成一个个页宽,每4k为一个页宽,可以存储4k的数据,而每个进程在运行的时候真正使用的数据会被映射到物理内存页宽当中,不联系的,交替映射,如图:

如此而来,每个进程都认为有4G内存可用,事实上物理内存一共才2G,当现有进程已经占满物理内存时,新进程在虚拟内存里是还有剩下的内存,当它生成一个页宽时,该映射到物理内存中哪个地址?可以在硬盘上找一块分区或者存储空间将它模拟成物理内存一样,划分成一个个页宽,将最少用,很久没使用的页宽数据挪到硬盘中模拟的页宽中,此时内核已经记录并消除了进程所映射的内存地址指向关系(内核内部有一张表记录去向),这样一来物理内存就腾出了新的空间出来。当挪出去的页宽对应的进程醒来时,内核会新分配一段内存地址给这个醒来的进程用,再将它挪回来即可。这个过程就是换进换出,而硬盘那段空间就叫交换空间。交换空间的存在允许内存过载使用(overcommit)。建议交换空间作为应急使用,在这个换进换出的过程是影响系统性能。
在Linux系统中这段交换空间必须是单独的一个分区,所以叫swap分区。内存中的数据放到磁盘上,有个术语叫page out,取回来叫page in。作为存储空间来讲,CPU的寄存器是最快的,对于访问数据时间1纳秒就完成了;如果是缓存的话,如一级、二级缓存大概是10纳秒;如果是内存的话是10毫秒;如果是磁盘的话就是秒级别的,所以非得用磁盘当交换分区的话,建议把交换分区建到靠外的柱面上。
扩展知识
1B就是1个字节(Byte)。
1B=8 Bit
地址总线:负责寻址,如16根地址总线。一根地址对应(或者指向)一块内存空间,同样一根地址线传输一个bit(位或0,1)。若只有一根地址总线,那么可以索引地址0、地址1的两个内存地址,16根地址则2^16次方等于65536,掌握着65536块内存空间,一块内存空间的大小就是1B,所以你能掌握的内存空间是65536*1B = 65536B = 64KB
注意:
1、数据存储是以Byte(字节)为单位
数据传输是以bit(位/比特)为单位
2、地址总线是指向内存空间,如:2根线指向内存空间,即以内存空间为单位,2根线能访问的最大内存为2^2=4B(4个字节)
一、交互分区(swap)
1、查看交换分区
[root@localhost ~]# free -m

Mem对应的是物理内存
Swap对应的是交换内存
buffers(缓冲):加速数据写入硬盘的,避免慢的设备遭到快设备的冲击(主要存放元数据metadata)
cached(缓存):加速从硬盘中读取数据(主要存放数据)
buffers和cached这两段空间能不能清空?会不会影响磁盘数据的完整性?
答:能清空,不会影响。这两段空间只是为了加速操作系统的执行过程以及性能,不是真正物理内存所需要的空间。如上图显示的used:463是包含了buffers:96和cached:164,所以-/+ buffers/cache这一行显示的才是真正使用的空间已经空闲的空间
2、添加交换分区
[root@localhost ~]# fdisk /dev/sda
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shouji/article-62080-8.html
我们该怎么办呀
苏丹红