内存:
内存是计算机的主存储器,内存为进程开辟出进程空间,保存进程的数据,简单的说,内存就是一个数据货架,内存有最小的存储单位,大多数都是一个字节,内存用内存地址来为每隔字节的数据顺序编号。因此,内存地址说明了数据在内存中的位置。内存从0开始,每次增加1,这种线性的增加存储器被叫做线性地址,为了方便我们一般都用十六进制来表示内存。
内存的存储单元采用了随机读取存储器,所谓的随机存储读取是指存储器的读取时间和数据所在的位置没有关系,由于进程需要调取内存中不同位置的数据,所以如果不是随机读取的话,会导致计算机很难把控进程的运行时间。
内存的缺点是不同持久的保存数据,一旦断电,内存上的数据就会丢失,因此就算计算机有一个内存,还需要硬盘这样的外部存储器来提供持久的存储空间。
虚拟内存
尽管进程和内存有这紧密的关系,但是进程不能直接的访问内存,进程访问到地址也只能是虚拟地址。操作系统会把虚拟地址翻译成真是的内存地址,这种内存的管理方式我们称为虚拟地址。每个进程都有自己的一套虚拟的内存地址,用来给自己的进程空间编号。进程空间的数据同样以字节为单位,依次增加。从功能上来说,物理内存和虚拟内存都是一样的,都是为数据提供索引。进程的虚拟地址是相互独立的,因此两个进程可以有同样的虚拟地址,应用程序对物理地址是一无所知的,它只能通过虚拟地址来写数据,读数据,程序中表达的地址也都是虚拟地址,进程对虚拟地址的操作会被操作系统翻译成对物理地址的操作。
借助虚拟地址,操作系统可以把两个进程的进程空间对应到不同的内存区域去,另一方面,有了虚拟地址,内存共享也变得简单,操作系统会把同意物理地址上的数据映射到多个进程空间上,这样不同的进程就能同时访问同一块数据。进程间通信中的共享内存也就是采用了这种方式。
总结:
虚拟内存和物理内存实现了分离,从而让内核深度参与了监督内存分配,应用进程的安全性和稳定性因此大大提高。