是什么

进程页表是用于管理进程虚拟地址空间和物理内存之间映射关系的数据结构。它记录了进程中每个虚拟页对应的物理页的信息。

什么作用

进程使用进程页表的方式是通过虚拟地址访问内存。当进程访问一个虚拟地址时,操作系统会根据进程页表中的映射关系,将虚拟地址转换为物理地址,然后进行内存访问操作。

谁维护

内核。进程页表的创建、更新和销毁等操作都由内核负责。

什么结构

通常是一个多级页表,由多个页表项组成。每个页表项记录了虚拟页和物理页的映射关系,包括虚拟页号、物理页号、权限位等信息。多级页表的结构可以有效地管理大型的虚拟地址空间。

什么时间创建

进程页表在进程创建时被创建。当一个新的进程被创建时,操作系统会为该进程分配一个独立的虚拟地址空间,并为其创建一个新的页表。页表的创建过程包括分配页表所需的内存空间,并建立虚拟页和物理页的映射关系。

CPU切换进程时

操作系统会切换进程的页表。具体操作包括将新进程的页表加载到MMU(内存管理单元)中,以更新虚拟地址空间和物理内存的映射关系。这样,当新进程执行时,它的虚拟地址访问将会映射到正确的物理内存位置。

进程从用户态切换内核态时

会发生一次上下文切换;在这个过程中,进程的页表也会发生切换:当进程发起系统调用或触发异常时,CPU会自动切换到内核态,并将当前进程的页表切换为内核页表。内核页表是内核专用的页表,用于管理内核地址空间和物理内存之间的映射关系。

与内核页表的区别

进程页表和内核页表是两个独立的数据结构,用于管理不同的地址空间。进程页表用于管理进程的用户态地址空间,而内核页表用于管理内核的地址空间。进程页表和内核页表之间没有直接的映射关系,它们是独立的。

当进程从用户态进入到内核态时,内核页表会被加载到MMU中,以便进程可以访问内核地址空间中的代码和数据。当进程从内核态返回到用户态时,内核页表会被切换回进程页表,以恢复进程的用户态地址空间。

什么是缺页异常

指当进程访问一个尚未映射到物理内存的虚拟页时,操作系统会产生一个缺页异常。这种设计是为了实现虚拟内存的概念,即将进程的虚拟地址空间扩展到比物理内存更大的范围。当发生缺页异常时,操作系统会根据页表的映射关系,将相应的物理页加载到内存中,并更新页表的映射关系,以便进程继续访问该虚拟页。

附录

Linux系统文件页表目录和页表结构(图文详解)

参考:Linux系统文件页表目录和页表结构(图文详解)

linux查看某一进程详细信息

cat /proc/进程号/status

VmSize(KB) 任务虚拟地址空间的大小 (total_vm-reserved_vm),其中total_vm为进程的地址空间的大小,reserved_vm:进程在预留或特殊的内存间的物理页
VmLck(KB) 任务已经锁住的物理内存的大小。锁住的物理内存不能交换到硬盘 (locked_vm)
VmRSS(KB) 应用程序正在使用的物理内存的大小,就是用ps命令的参数rss的值 (rss)
VmData(KB) 程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据; (total_vm-shared_vm-stack_vm)
VmStk(KB) 任务在用户态的栈的大小 (stack_vm)
VmExe(KB) 程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 (end_code-start_code)
VmLib(KB) 被映像到任务的虚拟内存空间的库的大小 (exec_lib)
VmPTE 该进程的所有页表的大小,单位:kb
Threads 共享使用该信号描述符的任务的个数,在POSIX多线程序应用程序中,线程组中的所有线程使用同一个信号描述符

进程个各个数据段的虚拟地址是在什么时候确定的

在Linux中,进程的各个数据段的虚拟地址是在进程创建时确定的。具体来说,当进程被创建时,内核会为其分配一块虚拟地址空间,其中包括代码段、数据段、堆和栈等。这些虚拟地址是由内核根据进程的需求和系统的配置来确定的。

进程各个数据段的作用

进程的虚拟地址空间中,代码段用于存放可执行代码,数据段用于存放全局变量和静态变量,堆用于存放动态分配的内存,栈用于存放函数调用的局部变量和函数调用的上下文信息。

哪些数据段会一直驻留内存

在Linux中,代码段和数据段通常会一直驻留在内存中,因为它们是进程的静态数据。而堆和栈是动态分配的,它们的大小和位置会随着进程的运行而变化。当堆和栈的空间不足时,进程会触发内存分配和释放操作,这时才会将相应的内存页写入或从内存中释放。

swap的作用

当系统的物理内存不足时,操作系统会将一些不常用的内存页换出到swap分区中,以释放物理内存供其他进程使用。具体来说,当发生缺页中断时,如果内存中没有空闲的物理页,操作系统会选择一个不常用的内存页,将其写入swap分区,并更新进程页表中的映射关系。这样,物理内存就可以为新的内存页腾出空间。当进程再次访问被换出的内存页时,会触发缺页中断,操作系统会将其从swap分区中读入内存,并更新进程页表中的映射关系。

Linux中的进程页表的更多相关文章

  1. 1.1 Linux中的进程 --fork、孤儿进程、僵尸进程、文件共享分析

    操作系统经典的三态如下: 1.就绪态 2.等待(阻塞) 3.运行态 其转换状态如下图所示: 操作系统内核中会维护多个队列,将不同状态的进程加入到不同的队列中,其中撤销是进程运行结束后,由内核收回. 以 ...

  2. Linux中查看进程的多线程pstree, ps -L

    Linux中查看进程的多线程 在SMP系统中,我们的应用程序经常使用多线程的技术,那么在Linux中如何查看某个进程的多个线程呢? 本文介绍3种命令来查看Linux系统中的线程(LWP)的情况:在我的 ...

  3. 如何在 Linux 中查看进程占用的端口号【转】

    对于 Linux 系统管理员来说,清楚某个服务是否正确地绑定或监听某个端口,是至关重要的.如果你需要处理端口相关的问题,这篇文章可能会对你有用. 端口是 Linux 系统上特定进程之间逻辑连接的标识, ...

  4. [转帖]Linux教程(8)-Linux中的进程和日志㐇、

    Linux教程(8)-Linux中的进程和日志 2018-08-20 23:42:23 钱婷婷 阅读数 3554更多 分类专栏: Linux教程与操作 Linux教程与使用   版权声明:本文为博主原 ...

  5. Linux中查看进程与日志

    转至:https://www.cnblogs.com/dengxiaoning/p/13336778.html Linux尽管使用频繁,仍然每次都还是需要到处去找相关的命令,如进程,日志之类的,既然这 ...

  6. Linux中查看进程占用内存的情况【转】

    转自:http://hutaow.com/blog/2014/08/28/display-process-memory-in-linux/ Linux中查看某个进程占用内存的情况,执行如下命令即可,将 ...

  7. <实训|第十一天>学习一下linux中的进程,文件查找,文件压缩与IO重定向

    [root@localhost~]#序言 在今后的工作中,运维工程师每天的例行事务就是使用free -m,top,uptime,df -h...每天都要检查一下服务器,看看是否出现异常.那么今天我们就 ...

  8. Linux中查看进程的多线程

    在SMP系统中,我们的应用程序经常使用多线程的技术,那么在Linux中如何查看某个进程的多个线程呢? 本文介绍3种命令来查看Linux系统中的线程(LWP)的情况: 在我的系统中,用qemu-syst ...

  9. Linux中查看进程及杀死进程命令

    Linux中想杀死fcitx进程,然后再重启它. root@www.linuxidc.com:/home/zhangbin# ps -e | grep 'fcitx' 3405 ?        00 ...

  10. Linux 中查看进程及资源使用情况

    top 自带的 top 命令类似于平时我们使用的任务管理器,能够列出当前系统中的进程及资源的使用情况. $ man top top - display Linux tasks 使用起来很简单,不加任何 ...

随机推荐

  1. Nuxt3环境变量配置

    Nuxt3 正式发布还不到半年,在投入生产环境使用后,遇到了不少问题,很难找到合适的解决方案,其中环境变量配置就是其中一个,之前一直未能解决,最近要上持续集成,无法绕过这个问题,所以花了点时间研究了一 ...

  2. flink HelloWorld 之词频统计

    最近也在跟着学习flink,也是费了一点功夫才把开发环境都搭建了起来,做了一个简单的词频统计的demo- 准备工作 首先我们需要搭建需要的flink开发环境,我这里使用的是IDEA作为我的开发工具,所 ...

  3. 痞子衡嵌入式:聊聊i.MXRT1xxx上第三级启动保障 - SDMMC manufacture模式

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx上第三级启动保障 - SDMMC manufacture模式. 如果你在 i.MXRT1xxx 板卡上尝试过从 SD ...

  4. 解析草稿-造价管理-工程经济-P190-例4.2.3

    原题 计算步骤 需要记忆的概念 excel计算文件 [腾讯文档]例题

  5. 今日分享:目前目标责任成本明细单价已设置,机构参数设置-物资合同单价超目标责任成本明细单价Y%时不能保存,该参数已设置但未生效是为什么?

    在编制的时候-"材料类别设置"中,不勾选"管控".

  6. 2022-03-29:整个二维平面算是一张地图,给定[x,y],表示你站在x行y列, 你可以选择面朝的任何方向, 给定一个正数值angle,表示你视野的角度为, 这个角度内你可以看无穷远,这个角度外你

    2022-03-29:整个二维平面算是一张地图,给定[x,y],表示你站在x行y列, 你可以选择面朝的任何方向, 给定一个正数值angle,表示你视野的角度为, 这个角度内你可以看无穷远,这个角度外你 ...

  7. 2022-02-20:设计内存文件系统。 设计一个内存文件系统,模拟以下功能: ls: 以字符串的格式输入一个路径。如果它是一个文件的路径,那么函数返回一个列表,仅包含这个文件的名字。如果它是一个文件

    2022-02-20:设计内存文件系统. 设计一个内存文件系统,模拟以下功能: ls: 以字符串的格式输入一个路径.如果它是一个文件的路径,那么函数返回一个列表,仅包含这个文件的名字.如果它是一个文件 ...

  8. 2021-11-15:四数相加 II。给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= i,

    2021-11-15:四数相加 II.给你四个整数数组 nums1.nums2.nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= ...

  9. 2021-08-03:完美洗牌问题。给定一个长度为偶数的数组arr,假设长度为N*2,左部分:arr[L1……Ln],右部分: arr[R1……Rn],请把arr调整成arr[L1,R1,L2,R2,

    2021-08-03:完美洗牌问题.给定一个长度为偶数的数组arr,假设长度为N*2,左部分:arr[L1--Ln],右部分: arr[R1--Rn],请把arr调整成arr[L1,R1,L2,R2, ...

  10. vue全家桶进阶之路2:JavaScript

    JavaScript(简称"JS")是当前最流行.应用最广泛的客户端脚本语言,用来在网页中添加一些动态效果与交互功能,在 Web 开发领域有着举足轻重的地位.JavaScript ...