23、深入理解计算机系统笔记,虚拟存储器,存储器映射

简介: 1、Linux通过将一个虚拟存储器区域与一个磁盘上的对象(object)关联起来,以初始化这个虚拟存储器区域的内容,这个过程称为存储器映射(memory mapping)。虚拟存储器区域可以映射到两种类型的对象: 1)unix文件系统中的普通文件:一个区域可以映射到一个普通磁盘文件的连续部分。

1、Linux通过将一个虚拟存储器区域与一个磁盘上的对象(object)关联起来,以初始化这个虚拟存储器区域的内容,这个过程称为存储器映射(memory mapping)。虚拟存储器区域可以映射到两种类型的对象:

1)unix文件系统中的普通文件:一个区域可以映射到一个普通磁盘文件的连续部分。

2)匿名文件:一个区域也可以映射到一个匿名文件,匿名文件是由内核创建的,包含的全是二进制零。

    一旦一个虚拟页面被初始化了,它就在一个由内核维护的专门的交换文件(swap file)间换来换去。

2、共享对象

    一个对象可以被映射到虚拟存储器的一个区域,要么作为共享对象,或作为私有对象。If a process maps a shared object into an area of its virtual address space, then any writes that the process makes to that area are visible to any other processes that have also mapped the shared object into their virtual memory. Further, the changes are also reflected in the original object on disk.

Changes made to an area mapped to a private object, on the other hand, are not visible to other processes, and any writes that the process makes to the area are not reflected back to the object on disk. A virtual memory area that a shared object is mapped into is often called a shared area. Similarly for a private area.

wps_clip_image-8344[4]

A shared object. (a) After process 1 maps the shared object. (b) After process 2 maps the same shared object. (Note that the physical pages are not necessarily contiguous.)

3、私有对象,写时拷贝(copy-on-write)

    私有对象是使用一种叫做写时拷贝的技术被映射到虚拟存储器中的。如图中所示:two processes have mapped a private object into different areas of their virtual memories, but share the same physical copy of the object. For each process that maps the private object, the page table entries for the corresponding private area are flagged as read-only, and the area struct (vm_area_struct) is flagged as private copy-on-write.只要有一个进程试图写私有区域内的某个页面,那么这个写操作就会触发一个保护策略。它就会在物理存储器中创建这个页面的一个新拷贝,更新页面条目指向这个新的拷贝,然后恢复这个页面的可写权限。

wps_clip_image-28980[4]

process 2 writes to a page in the private area

4、unix进程可以使用mmap函数来创建新的虚拟存储器区域,并将对象映射到这些区域中。

目录
相关文章
|
消息中间件 Java Kafka
docker-compose快速搭建kafka集群
docker-compose快速搭建kafka集群
docker-compose快速搭建kafka集群
socks5 搭建代理服务
socks5 搭建代理服务
838 0
|
8月前
|
人工智能 搜索推荐 数据挖掘
企业CRM选型指南:销售易、悟空、超兔的全面对比
在数字化转型中,CRM系统成为企业提升销售效率和竞争力的关键工具。本文对比了销售易CRM、悟空CRM与超兔CRM三个品牌: - **销售易CRM**:提供从线索到现金的全流程管理,拥有强大的数据分析、定制化服务及本土化优势,适合大型企业和跨国公司。 - **悟空CRM**:内置智能数据分析、移动办公支持和360度客户视图,灵活性高,适合中大型及快速发展的企业。 - **超兔CRM**:界面简洁直观,高度定制化,集成第三方应用,支持移动办公,主要面向中小企业。 企业应根据自身需求和预算选择合适的CRM系统,以实现最佳的客户关系管理和销售自动化。
|
10月前
|
JavaScript 前端开发 测试技术
Postman 如何进行性能测试?
Postman 如何进行性能测试?
1067 57
|
12月前
|
监控 Ubuntu Linux
Linux时间改错了,我想让他恢复正确时间
Linux时间改错了,我想让他恢复正确时间
|
存储 运维 安全
Java中的数据备份与灾难恢复方案设计
Java中的数据备份与灾难恢复方案设计
|
监控 安全 区块链
MEV攻击科普:揭秘、危害与防护策略
MEV攻击是加密货币中的现象,攻击者利用信息不对称和交易特权获取超额利润。这种攻击影响用户体验,破坏市场公平,威胁系统稳定并浪费资源。常见形式包括抢先交易、三明治攻击等。避免MEV攻击需采取隐私保护、交易延时、动态 Gas 费调整等策略,同时加强社区协作和使用抗MEV协议。提高用户意识和创新解决方案是应对MEV的关键。
2834 2
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的酒店管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的酒店管理系统附带文章源码部署视频讲解等
144 1
node node-sass sass-loader版本对应问题,对于npm编译大家经常遇到这个问题
node node-sass sass-loader版本对应问题,对于npm编译大家经常遇到这个问题
1913 2
|
NoSQL MongoDB Docker
docker搭建mongodb集群
docker搭建mongodb集群
287 0