热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Linux查看内存中的二进制数据:程序终止后二进制文件是否会驻留内存?

当程序首次启动时,由于代码尚未加载到内存中,会触发大量的页面错误,从而需要从磁盘读取代码。那么,当程序终止后,这些二进制文件是否会继续驻留在内存中呢?本文将探讨程序退出后的内存状态及其对系统性能的影响。

我知道程序首次启动时,由于代码不在内存中,因此在开始时会出现大量页面错误,因此需要从磁盘加载代码.

程序退出后会发生什么?二进制文件是否留在内存中?该程序的后续调用是否会发现代码已经在内存中,因此没有页面错误(假设两者之间没有任何运行,并且页面填充到磁盘)?

在我的Linux机器上运行一些实验似乎没有答案.我一遍又一遍地运行一些程序,每次都观察到相同数量的页面错误.这是一个相对安静的机器,所以我怀疑东西是在调用之间被调出来的.那么,为什么呢?为什么可执行文件不能保留在内存中?

解决方法:

这里有两件事需要考虑:

1)可执行文件的内容可能保存在OS缓存(磁盘缓存)中.虽然该数据仍在操作系统缓存中,但该数据的每次读取都将到达缓存,操作系统将遵循该请求,而无需从磁盘重新读取该文件

2)当进程退出时,操作系统取消映射到文件的每个内存页面,释放任何内存(通常,释放进程分配的每个资源,包括其他资源,如套接字等).严格来说,物理内存可能已归零,但并不十分必需(仍然,操作系统的安全级别可能需要将不再使用的页面归零 – 可能是Windows NT,2K,XP等,请执行此操作 – 请参阅此Does Windows clear memory pages?).对同一个可执行文件的另一个调用将创建一个全新的进程,它将在内存中映射相同的文件,但是对这些页面的第一次访问仍然会触发页面错误,因为最终它是一个新进程,一个不同的内存映射.所以,是的,页面错误发生,但与第一个相比,它们相同的可执行文件的第二个实例便宜得多.

当然,这仅仅是可执行文件的只读部分(包含代码和只读数据的段/模块).

可以考虑另一种情况:分叉.在这种情况下,每个页面都标记为写时复制.当在每个存储器页面上发生第一次写入时,OS内存管理器触发并拦截硬件异常.操作系统确定是否允许写入相关页面(例如:如果它是堆栈,堆或任何可写页面),如果是,则在允许进程修改页面之前分配内存并复制原始内容 – 为了保留其他过程中的原始数据.是的,还有另一种情况 – 共享内存,其中确切的物理内存映射到两个或多个进程.在这种情况下,写时复制标志当然不在存储页面上设置.

希望这能澄清内存页面的内容.

标签:memory-management,linux,virtual-memory,paging

来源: https://codeday.me/bug/20190702/1360634.html



推荐阅读
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • Linux 基础命令详解
    本文介绍了在 Linux 系统中常见的命令及其用法。当用户登录系统后,默认提示符会显示为 [root@localhost ~]# 或 [user@localhost ~]$,其中 # 表示当前用户为 root,$ 表示普通用户。我们将深入探讨一些常用的 Linux 命令,帮助初学者更好地理解和使用这些工具。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
author-avatar
wangtao
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有