AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 447104
Accepted
sys463
sys463
Asked: 2018-06-01 04:11:13 +0800 CST2018-06-01 04:11:13 +0800 CST 2018-06-01 04:11:13 +0800 CST

Linux 内存映射文件

  • 772

我的 RHEL7 上的输出lsof显示一个带有文件描述符的文件mem被 40 个进程使用。这是否意味着该文件在内存中映射了 40 次或什么?有人可以解释一下内存映射文件是什么意思吗?这是否意味着它在我的记忆中出现了 40 次?

# lsof /usr/lib/locale/locale-archive
命令 PID 用户 FD 类型 设备尺寸/关闭节点名称
vmtoolsd 605 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
agetty 656 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
调谐 963 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
iostat 1199 adm mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
chkMtaMem 1205 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
snmpd 4704 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
睡眠 5461 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
cmsubagt 6487 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
睡眠 6649 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc1 6803 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc2 6835 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc3 6836 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc4 6856 root mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc5 6884 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc6 6889 usr mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc7 6893 usr1 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
cmfpagt 7704 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc8 7943 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
crond 8001 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
sh 8005 adm mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
iostat 8014 adm mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
crond 20427 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc9 20648 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc10 20649 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc10 20760 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc9 20777 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc11 21353 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc12 21354 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc13 21355 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc14 21356 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc15 21357 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc16 21358 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc17 21554 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc18 21569 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc19 21590 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc20 21647 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc21 22016 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc22 22017 根内存 REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc23 22104 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
proc24 22122 usr2 mem REG 8,5 106070960 50808629 /usr/lib/locale/locale-archive
linux rhel
  • 2 2 个回答
  • 1616 Views

2 个回答

  • Voted
  1. skyking
    2018-06-01T05:52:10+08:002018-06-01T05:52:10+08:00

    是的,通过以下手册lsof:

       FD         is the File Descriptor number of the file or:
    
                       cwd  current working directory;
                       Lnn  library references (AIX);
                       err  FD information error (see NAME column);
                       jld  jail directory (FreeBSD);
                       ltx  shared library text (code and data);
                       Mxx  hex memory-mapped type number xx.
                       m86  DOS Merge mapped file;
                       mem  memory-mapped file;
                       mmap memory-mapped device;
                       pd   parent directory;
                       rtd  root directory;
                       tr   kernel trace file (OpenBSD);
                       txt  program text (code and data);
                       v86  VP/ix mapped file;
    

    只有当它以非共享模式映射并且任何进程写入虚拟内存时,才会需要物理内存中的多个文件副本。否则,如果没有写入发生(我不认为),数据甚至不必在任何进程读取内存之前占用物理内存。

    • 2
  2. Best Answer
    ctrl-alt-delor
    2018-06-01T06:38:28+08:002018-06-01T06:38:28+08:00

    看看虚拟内存和物理内存之间的区别。

    许多进程可以映射相同的物理内存。如果 10 个进程映射同一个文件,那么 RAM 中最多会缓存一份副本。

    如果内存不是共享的,那么如果一个进程更改了它,那么这一页(有更改)在提交写入之前被复制。(因此并非所有内存都被复制。这称为写时复制或 COW)。

    内存映射文件是当您要求操作系统将文件映射到内存时。在您开始读/写之前,它不会加载文件,然后只加载需要的文件。内存映射只是读取/写入/查找/等的不同接口。您还可以通过读/写/查找来访问内存。

    那么这是怎么做到的呢?

    它是通过意识到有些事情是相同的来完成的:即交换和文件是相同的;并且ram和文件缓存是一样的。所以当你打开一个文件时,它被映射为交换(不用担心它不会被用来交换其他东西)。当您开始读取生成的 seg-fault 并且操作系统将其从文件中交换时(异常(seg-fault)由操作系统处理,因此不会传递给进程)(实际上它不是分段错误,这是一个页面错误)。使用内存或文件的接口无关紧要。它们只是相同功能的接口。

    • 2

相关问题

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

  • 在 Gnome3 中禁用窗口的自动最大化

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve