首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Linux上,为什么我们的页面大小如此之大(60 so )。每个进程都有一个副本吗?

在Linux上,页面大小的大小通常是由操作系统内核决定的,它是内存管理的基本单位。页面大小的常见值是4KB、8KB或者更大,具体取决于硬件和操作系统的配置。

页面大小的设置对于系统性能和内存管理非常重要。较小的页面大小可以提高内存的利用率,但会增加内存管理的开销。较大的页面大小可以减少内存管理的开销,但会导致内存碎片化和浪费。

在Linux中,每个进程都有自己的虚拟地址空间,其中包含了代码、数据和堆栈等区域。虚拟地址空间被划分为固定大小的页面,每个页面都有一个唯一的虚拟地址。当进程访问一个虚拟地址时,操作系统会将其映射到物理内存中的实际地址。

每个进程的虚拟地址空间中的页面是共享的,即多个进程可以共享同一个页面。这种共享可以减少内存的使用量,提高系统的性能。当多个进程共享同一个页面时,它们可以同时访问该页面的内容,而无需每个进程都有一个副本。

然而,并非所有的页面都是共享的。一些页面包含了进程的私有数据,例如堆和栈,这些页面是不共享的,每个进程都有自己的副本。

总结起来,在Linux上,页面大小的设置由操作系统内核决定,每个进程都有自己的虚拟地址空间,其中的页面可以是共享的或者私有的,具体取决于页面的内容。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux缓存机制bufferscached

为了方便查找文件,linux引入目录项(dentry)描述目录与文件关系树,Linux为每一个目录建立一个目录项,也为每个文件建立一个目录项。...Linux系统中数据可分为两大类,数据和元数据,数据泛指普通文件中实际数据,元数据是用来描述一个文件特征系统数据。...当一个进程需要内存空闲页时,内核将检查是否有任何页缓存中,相应地内核将通过将文件从缓存同步到本地磁盘来回收空闲页,并为新进程释放内存。 为什么缓存会占用这么多内存?...根据Linux虚拟内存管理机制,这种行为是正常。要理解为什么缓存会变得如此之高,以及为什么这不是一个问题,就必须了解I/OLinux是如何工作。...当用户进程读取或写入文件时,它实际修改主内存中该文件副本。内核从磁盘创建该副本,并在必要时将更改写回磁盘。这些副本占用内存称为缓存内存。 每当用户进程启动读或写操作时,都会消耗缓存内存。

4.8K10

含大量图文解析及例程 | LinuxELF文件、链接、加载与库(中)

总体来说,程序加载过程中,磁盘上可执行文件,进程虚拟地址空间,还有机器物理内存映射关系如下: Linux装载过程 接下来我们进一步探究一下Linux是怎么识别和装载ELF文件我们需要深入...动态链接 什么是动态链接以及为什么需要动态链接 实际,链接程序链接时一般是优先链接动态库,除非我们显式地使用-static参数指定链接静态库,像这样: gcc -static hello.c 静态链接和动态链接可执行文件大小差距还是很显著...libc.so中有300K 条指令,2 MiB 大小每个程序如果都静态链接,浪费空间很大,最好是整个系统里只有一个 libc 副本,而每个用到 libc 程序在运行时都可以用到 libc 中代码...Linux环境下动态链接对象都是以.so为扩展名共享对象(Shared Object)。 真的是动态链接?...可以看到动态链接器路径.interp这个段中体现,并且通常它是个软链接,最终链接在像ld-2.27.so这样共享库

3K21
  • 深入理解 Page Cache

    file 与打开文件进程相关联,如果多个进程打开同一个文件,那么每个进程都有自己 file ,但这些 file 指向同一个 inode。...由于每个进程都有独立地址空间,为了完成虚拟地址到物理地址映射,每个进程都要有独立进程页表。一个实际进程里面,虚拟内存占用地址空间,通常是两段连续空间,而不是完全散落随机内存地址。..._64-linux-gnu/libc.so.6 RES 是文件内容被加载进物理内存占用内存空间大小。...如果文件是只读的话,那这个文件物理页层面上其实是共享。也就是进程 A 和进程 B 都有一页虚拟内存被映射到了相同物理页。...私有文件映射只读页是多进程间共享,可写页是每个进程都有一个独立副本,创建副本时机仍然是写时复制。

    1.4K21

    Linux进程优先级

    进程优先级真的只能在[60,99]这个范围呢移动?...Linux调度与切换   Linux调度切换是学习Linux系统编程重要知识,我们提前了解一下:   我们之前说过,CPU并不会把一个进程全部执行完才切换下一个进程,而是 基于时间片进行轮转执行。...进程独立性是学习Linux系统编程特别重要一个知识,多个进程系统里同时运行,但是他们互不干扰,一个进程挂了不会影响另外进程,就算是父子进程也是如此。...并发与并行不同,我们大部分人电脑其实只有一个CPU,而进程通常会有多个,为了考虑资源分配等问题,每个进程都有自己时间片,时间片用完就切换下一个进程,自己则重新排队,等待再次调度。   ...进程优先级是可调整,调整范围为:[60, 99],实际我们调整进程nice值,nice值范围是[-20, 19]。

    12910

    一文读懂 | Linux各种栈:进程栈 线程栈 内核栈 中断栈

    每个处理器模式都有一个不同寄存器组。编组寄存器为处理处理器异常和特权操作提供了快速上下文切换。...可见每个任务都有自己栈空间,正是有了独立栈空间,为了代码重用,不同任务甚至可以混用任务函数体本身,例如可以一个main函数有两个任务实例。...),函数使用 __alloc_pages 低端内存区分配 2个物理页面,也就是8KB大小空间。...有趣是,这个函数还会为 softirq 分配一个同样大小独立堆栈。如此说来,softirq 将不会在 hardirq 中断栈执行,而是自己上下文中执行。...Linux 为什么需要区分这些栈? 为什么需要区分这些栈,其实都是设计问题。这里就我看到过一些观点进行汇总,供大家讨论: 1. 为什么需要单独进程内核栈?

    1.8K20

    MIT 6.858 计算机系统安全讲义 2014 秋季(一)

    利用运行在 Linux Xorg 服务器中大内存管理漏洞 一个字节错误写入可能导致受损。...特别是 32 位机器,没有太多随机位(例如,1 位属于内核/用户模式划分,12 位不能被随机化,因为内存映射页面需要与页面边界对齐等)。...每个进程都有一个用户 ID(uid)和一组组 ID(gid + grouplist)。 出于大多是历史原因,一个进程一个 gid +额外组列表。...表 1:为什么所有服务和okld都在同一个 chroot 中? 这是一个问题我们如何决定? 那里有哪些可读写文件? 可读性:包含服务代码共享库。...防止进程读取/写入其他文件: 整个文件系统更改权限?繁琐,不切实际,需要 root 权限。 即使如此,新程序也可以创建重要可全球写入文件。

    15410

    十问 Linux 虚拟内存管理 ( 一 )

    Linux 虚拟内存管理有几个关键概念: 每个进程有独立虚拟地址空间,进程访问虚拟地址并不是真正物理地址 虚拟地址可通过每个进程上页表与物理地址进行映射,获得真正物理地址 如果虚拟地址对应物理地址不在物理内存中...程序代码中 malloc 内存都有相应 free ,就不会出现内存泄露了吗? 既然堆内内存不能直接释放,为什么不全部使用 mmap 来分配? 如何查看进程缺页中断信息?...,与上图划分保持一致,并且栈顶指针 mallloc 和 free 一个 127K 存储空间时都发生了变化(增大和缩小)。...我们知道, malloc 分配内存是虚拟地址空间,而虚拟地址空间和物理地址空间使用进程页表进行映射,那么分配了空间就是占用物理内存空间了吗?...由于每个物理内存页面大小是 4k ,不管 memset 其中 1k 还是 5k 、 7k ,实际占用物理内存总是 4k 倍数。所以 RSS 增量总是 4k 倍数。

    11.3K23

    Redis配置文件详解

    同时需要注意是 如果注释掉bind后面的内容,运行Redis计算机将直接暴露于internet,绑定到所有接口是危险,并且会暴露向互联网上每个人提供实例。...Linux,指定值(以秒为单位)是用于发送ACK时间段。请注意,要关闭连接,需要两倍时间。 在其他内核,周期取决于内核配置。...默认数据库是DB 0 ,可以每个连接上使用select命令选择一个不同数据库,dbid是一个介于0到databases - 1 之间数值。...因此外部用户每秒可以一个现代机器尝试最多100万个密码。...cluster-config-file:集群配置文件名称,每个节点都有一个集群相关配置文件,持久化保存集群信息。

    1.9K40

    地址无关码

    Q&A Q:如果一个共享对象 lib.so中定义了一个全局变量G,而进程A和进程B都使用了lib.so,那么当进程A改变这个全局变量G值时,进程B中G会受到影响? A:不会。...因为当 lib.so被两个进程加载时,它数据段部分在每个进程都有独立副本,从这个角度看,共享对象中全局变量实际和定义程序内部全局变量没什么区别。...任何一个进程访问只是自己那个副本,而不会影响其他进程。那么,如果我们把这个问题条件改成同一个进程线程A和线程B,它们是否看得到对方对lib.so全局变量G修改呢?...对于同一个进程两个线程来说,它们访问是同个进程地址空间,也就是同一个lib.so副本,所以它们对G修改,对方都是看得到。 那么我们可不可以做到跟前面答案相反情况呢?...对于数据段来说,它在每个进程都有一份独立副本,所以并不担心被进程改变。从这 点来看,我们可以选择装载时重定位方法来解决数据段中绝对地址引用问题。

    99520

    ELF文件及android hook原理

    符号值(st_value) 每个符号都有一个对应值。...Linux下,可以通过查看”/proc”来查看进程虚拟空间分布: ? 我们可以看到进程中有5个VMA,只有前两个是映射到可执行文件中两个Segment。...上图中ld-2.6.so实际Linux动态链接器,它与普通共享对象一样被映射到了进程地址空间,系统开始运行program1之前,首先会把控制权交给动态链接器,由它完成所有的动态链接工作以后再把控制权交给...其实我们目的很简单,希望程序模块中共享指令部分在装载时不需要因为装载地址改变而改变,所以实现基本思想就是把指令中那些需要被修改部分分离出来,跟数据部分放在一起,这样指令部分就可以保持不变,而数据部分可以每个进程中拥有一个副本...由于GOT本身是放在数据段,所以它可以模块装载时被修改,并且每个进程都可以有独立副本,相互不受影响。

    3.8K81

    使用procrank分析内存利用及分析源代码

    为了使用方便,作者github做了一份拷贝,并写了一个简单Makefile,方便安装使用。特此声明。...maps中描述了进程虚拟内存空间分布情况,即一段一段连续地址区间,所有区间大小和就是VSS。这就是传说中“虚拟内存空间”。...a,既然要分析所有的进程内存使用情况,那么就需要遍历/proc目录下所有的数字目录,数字就是系统所有的进程pid(top,ps等命令,都如此)。...例如/lib/x86_64-linux-gnu/libc-2.23.so一个页面60进程使用过,那么自己还是要算上4K。 PSS:页面被多个进程映射过,那么把使用量平均到大家头上。...那么libc这个页面就只能算在自己头上4k / 60 = 68Bytes。 USS:页面只有被自己使用过,才算到自己头上。USS统计意义在于,如果这个进程被杀掉了,那么实际只能释放这么多内存。

    4K70

    Linux 是如何管理内存

    但是实际,并没有两个相同地址空间,因为每个进程维护打开文件和信号不同。 Linux 内存管理系统调用 下面我们探讨一下关于内存管理系统调用方式。...例如几个进程同时 shell 中运行,这会涉及到 IPC 进程间通信问题,这个时候你需要是共享内存来进行信息传递而不是通过拷贝每个进程副本独立运行。...Alpha AXP系统 Linux 使用 8 KB 页面,而 Intel x86 系统 Linux 使用 4 KB 页面每个页面都有一个唯一编号,即页面框架号(PFN)。 ?...每个都有自己物理地址。通常块大小 512 - 65536 之间。所有传输信息都会以连续块为单位。块设备基本特征是每个块都较为对立,能够独立进行读写。...free_area 每个元素都有大小已分配页面和空闲页面映射。 分配算法会搜索请求大小页面块。

    2.3K20

    别被谭浩强《C程序设计》带偏了!

    虚拟内存 众所周知,现代操作系统采用虚拟内存方式管理内存,虽然计算机上内存条只有几个G,但却为每个进程营造出了一个完整地址空间,加起来远超内存条容量大小。...这个地址空间,32位操作系统是4GB大小,这是32位CPU正常模式下能寻址最大范围,Linux和Windows均是如此。 至于64位系统情况则变得更加复杂,寻址范围更大。...内核空间部分一般位于进程地址空间中高地址区域,至于大小Windows 32位系统是2GB,Linux是1GB。...第一个非常重要区域就是可执行文件所在区域。 我们编写程序,最终是转换成对应操作系统可执行文件在运行,Linux是ELF格式,Windows是PE格式,比如exe。...动态链接库 程序需要运行,光靠自己可执行文件是不够,还需要依赖一些动态链接库。Windows是DLL文件,Linuxso文件。

    11610

    文件读写理论

    所谓缓冲,就是操作系统为近期刚读写文件内容在内核保留一份副本,以便当再次须要已经缓冲存储副本内容时就不必再暂时从设备读入,而须要写时候则能够先写到副本中,待系统较为空暇时候再从副本写入设备...进程系统中,因为同一个文件可能为多个进程所共享,缓冲作用就更为显著。 然而,怎么样实现缓冲,在哪一个层次实现缓冲,确实一个值得考虑问题。...一个file结构代表着目标文件一个上下文,不但不同进程能够一个文件建立不同上下文(每一个进程都有自己file结构体),就是同一个进程也能够通过打开同一个文件多次而建立起多个上下文。...再说,一个文件里内容是不能由其它文件共享同一时间里,设备每个记录都仅仅能属于至多一个文件,将载有同一个文件内容缓冲区都放在其所属文件inode结构中是非常自然事。...成为缓冲区头,文件中定义,它包括了内核操作缓冲区所有信息。 事实这个buffer_head存在于linux2.4版本号中。

    29200

    Go和Java性能对比,真的如此

    解密开始 仔细观察两段代码,其实是有一些细微区别的,有时候一点点细微区别导致结果千差万别,甚至让你得出一个错误结论从而误导你,看下面Go代码,这个代码片段是Sort方法中出现我们看到有一个arr...那么为什么就改了一行代码,差距如此之大。 1. Java结果:3263111300ns=3263ms=3.2s 2....对应于进程地址空间堆, 栈:不涉及 GC 操作。每个 goroutine 都有自己栈,初始时被分配在进程地址空间,扩容时被分配在进程地址空间堆上。...func bubbleSort(arr *[]int) { } 写在最后 抛开应用场景去谈性能都是耍流氓,每个语言都有自己应用场景,有编译时,运行时优化等,单单靠一个排序函数结果探讨Java和Go...网上也有很多实验来说明Go性能是Java好几倍,希望你见到时好好思考一下,这个测试是客观为什么会出现这个我意料之外结果?

    1.3K20

    Linux 了解内存使用

    用户进程内存结构 ---- top 命令了解进程信息,其中包括内存方面的信息。 正在运行程序,叫进程每个进程都有完全属于自己,独立,不被干扰内存空间。...命令top输出VIRT值告诉了我们各个进程内存空间大小进程内存空间随着程序执行会增大或者缩小)。...事实这个过程对程序是完全透明,程序完全不用理会自己哪一部分、什么时候被交换进内存,一切都有内核虚拟内存管理来完成。...每次Swapping,都有可能不只是一页数据,不管是si,还是so。Swapping意味着磁盘操作,更新页表等操作,这些操作开销都不小,会阻塞用户态进程。...每秒写入交换区内存大小 Linux内核 2.6.16中引入了一个系统内存接口特性,这个接口位于/proc/$pid/目录下smaps文件中 ,一看内容发现是进程内存映像信息,比同一目录下maps

    3.6K30

    来自非科班面经回忆!(大厂,国企,银行)

    除了按字节拷贝还有没有性能更好方法。 Linux运行进程CPU有什么组成部分,整体CPU占用和每一块CPU占用。怎么用top去看一个进程CPU占用组成部分。...提到了读商品和写商品(然后发现场景错误) CAS为了实现锁原语,Linux系统是怎么去实现?...,用LSTM LSTM为什么可以缓解梯度消失 什么是梯度消失和梯度爆炸 为什么要提取时序信息 说一下RNN和CNN 你说一下虚指针 写一下单例模式 别的进程可以访问这个进程创建单例模式实例 你说一下内存泄漏...每个进程都有自己内存,为什么可以访问共享内存 你知道希尔排序,比直接插入排序快为什么,时间复杂度平均多少 单链表快排 写一下反转单链表 7 总结 如果尝试国企,研究所,银行等,可以通过提前参加他们培养生计划...当然,如果你是985,进入这些企业几率确实会更大,谁让人家是985对吧,我们不得不为自己曾经不努力买单。但是机会一定是给时刻准备着小伙伴,so,冲吧!

    97500

    UIUC CS241 讲义:众包系统编程书

    我们不是存储一个显式指针列表,而是存储关于块大小信息作为块一部分。因此,概念,有一个空闲块列表,但它是隐式,即以每个大小信息形式存储。...同一个线程必须解锁它。 我可以使用两个或更多互斥锁? 是的!事实,通常每个需要更新数据结构都有一个锁。 如果你只有一个锁,那么两个线程之间可能会对锁有显著争用,这是不必要。...Linux 操作系统典型块大小为 4KB(即 2^12 个地址),尽管您可以找到更大块示例。 因此,我们不再谈论单个字节,而是谈论 4KB 块,每个块称为一个页面。...这种策略要求备份存储页面分页到内存后保留页面副本。当不使用脏位时,备份存储只需与任何时刻分页出所有页面的瞬时总大小一样大。...每个进程(包括 shell)都有一个当前 umask 值。分叉时,子进程继承父进程 umask 值。

    77010

    Linux内存描述之高端内存--Linux内存管理(五)

    ~3G,一个介于3-4G) 通过MMU映射到同一块物理内存 1.2 linux为什么把内核映射到3G-4G这个地址呢 假如linux把内核映射到0-1G空间,其他进程共享1-4G空间不可以?...对于32位Linux,其每一个进程都有4G寻址空间,但当一个进程访问其虚拟内存空间中某个地址时又是怎样实现不与其它进程虚拟空间混淆 呢?...每个进程都有其自身页面目录PGD,Linux将该目录指针存放在与进程对应内存结构task_struct.(struct mm_struct)mm->pgd中。...读者会问,系 统启动时,内核代码和数据不是被装入到物理内存?它们为什么也处于虚拟内存中呢?这和编译程序有关,后面我们通过具体讨论就会明白这一点。...VMALLOC_RESERVE大小与体系结构相关,X86,VMALLOC_RESERVE定义为128M,这就是为什么ZONE_NORMAL大小通常是16M到896M原因。

    12.5K23
    领券