虚拟内存

明确几点:

  • 用户编程面对的始终是虚拟内存
  • 通过各种函数调用操作内存时,系统返回的地址也都是虚拟地址;
  • 虚拟地址到物理地址的映射和管理由系统管理,用户不需操心,这也体现了操作系统屏蔽底层细节,方便用户使用的特性。

例题:映射匿名虚存区实现共享内存
※ 源代码:
在这里插入图片描述
※ 运行及结果

[flora@localhost ~]$ gedit mmap.c
[flora@localhost ~]$ gcc mmap.c 
[flora@localhost ~]$ ./a.out
child 18397 write: result =45,sum=45
we’re going to sleep 20 seconds,see us in /proc 
farther 18396 : result =45,sum=0
we’re going to sleep 20 seconds,see us in /proc 

分析:该例子相当于子进程写内容,父进程读内容。result变量为共享的虚存区,父子进程都指向该区。而sum变量是双方都有的副本。所以可以看到父子进程中的result结果相同,而sum变量的值不同,父进程中sum变量的值未进行任何操作,为初始值。

※ 在程序执行后父子进程都会睡眠20秒,到proc的相应pid目录下可以观察maps文件,查看新建的匿名虚存区:
在这里插入图片描述
两进程共享内存区域
(1)特点:共享内存和访问它的所有进程都处于用户空间,进程通过地址映射的方式直接读写内存,从而获得非常高的通信效率。
(2)注意点:共享内存需要搭配同步机制才能保证对共享存储区的读、写操作的逻辑秩序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值