日常学习记录9:虚拟内存、共享内存、内存映射

虚拟内存也是必会必掌握概念,盘一下

1 虚拟内存

1.1 虚拟内存是什么

虚拟内存是一种内存管理方式,它通过把程序切成小块,只把目前需要的部分放入物理内存中,其他的部分暂存在磁盘上,也被称为虚拟存储器。

物理存储器虚拟存储器都被分割为许多大小相同的块,分别称为物理页虚拟页,二者之间的映射关系用页表记录。

1.2 虚拟内存的好处

(1)扩大地址空间:例如虚拟地址空间32位,物理地址空间24位。

(2)公平内存分配:每个进程都相当于有同样大小的虚存空间。

(3)内存保护:每个进程运行在各自的虚拟内存地址空间,互相不能干扰对方。

(4)节省内存:当不同的进程使用同样的代码时(比如库文件中的代码),物理内存中可以只存储一份代码,不同的进程把自己的虚拟内存映射到同一物理内存上。

(5)利用碎片:在程序需要分配连续的内存空间的时候,只需要在虚拟内存空间分配连续空间,而不需要实际物理内存的连续空间,可以利用物理空间的碎片。


2 共享内存

2.1 共享内存是什么

共享内存是一种进程间通信方式,允许不同进程将自己的虚拟地址映射到同一块物理地址上,从而共享同一段物理内存。

2.2 共享内存注意事项

(1)共享内存并未提供同步机制,需要用信号量来进行同步
e.g. 在第一个进程结束对共享内存的写操作之前,并无自动机制可以阻止第二个进程开始对它进行读取。

(2)可以使用shmget也可以使用mmap(mmap内存映射)实现。


3 内存映射

3.1 内存映射是什么

内存映射主要是mmap系统调用,是指将一个文件或者其它对象映射到进程地址空间的方法。

3.2 内存映射的好处

(1)读文件比普通磁盘I/O要快普通磁盘I/O读写文件要先把内容拷贝到页缓存(内核空间)中,然后再拷贝到用户空间中供使用,有2次拷贝
mmap读写文件是利用缺页异常把文件内容从磁盘换到用户空间中,只有1次拷贝,因此效率较高。

(2)实现共享内存:不同进程使用mmap将自身用户空间映射到同一文件同一匿名区域,实现高效的进程间通信。


参考文献:

0.进程间通信——共享内存(Shared Memory)
1.认真分析mmap:是什么 为什么 怎么用
2.内存映射机制(mmap)
3.内存映射文件原理探索

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值