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

linux内核缺页中断处理

linux内核对缺页异常的处理流程很复杂,但是基本思想和上述流程差不多。...缺页异常分类:1.内核态缺页异常,2.用户态缺页异常。其中内核态异常分为1.vmalloc区异常,因为非vmalloc的内核区是直接对等映射的,只有vmalloc区是动态映射的。...内核态缺页异常频率很低,因为内核态的数据不会换出到磁盘的。所以用户态才会经常出现缺页异常,因为用户态的数据经常写到交换区和文件。并且在进程刚创建运行时也会伴随着大量的缺页异常。...下面看linux的基本处理流程: 内核处理缺页异常的主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器的值 * error_code,由硬件产生:...), "=r" (x) : "m"(__m(addr)), "i"(errret), "0"(err)) //"m"(__m(addr)), "i"(4), "0"(4)) 经过以上分析,对linux

10.6K21

linux缺页异常处理--内核空间

缺页异常被触发通常有两种情况—— 程序设计的不当导致访问了非法的地址 访问的地址是合法的,但是该地址还未分配物理页框. 下面解释一下第二种情况,这是虚拟内存管理的一个特性。...由于程序的局部性原理,程序在一定时间内所访问的内存往往是有限的,因此内核只会在进程确确实实需要访问物理内存时才会将相应的虚拟内存区域与物理内存进行关联(为相应的地址分配页表项,并将页表项映射到物理内存),也就是说这种缺页异常是正常的...,而第一种缺页异常是不正常的,内核要采取各种可行的手段将这种异常带来的破坏减到最小。...缺页异常的处理函数为do_page_fault(),该函数是和体系结构相关的一个函数,缺页异常的来源可分为两种,一种是内核空间(访问了线性地址空间的第4个GB),一种是用户空间(访问了线性地址空间的0~

1.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

linux缺页中断源码分析(基于linux0.11)

缺页中断发生在系统对虚拟地址转换成物理地址的过程中。如果对应的页目录或者页表项没有对应有效的物理内存,则会发生缺页中断。 系统在初始化的时候注册了缺页中断的处理函数。中断号是14。...// 缺页和写保护异常处理函数 set_trap_gate(14,&page_fault); page_fault是汇编实现的。...,cr2保存了引起缺页的线性地址 movl %cr2,%edx // 线性地址(有的话)和错误码入参 pushl %edx pushl %eax // 1和eax...do_no_page // 缺页处理,进程的内容还没有加载到内存,访问的时候导致缺页异常 void do_no_page(unsigned long error_code,unsigned long address...最后重新执行触发缺页中断的地址。这时候可以找到对应的内容了。

1.8K10

Linux虚拟内存和缺页中断

Linux虚拟内存地址空间 为了防止不同进程同一时刻在物理内存中运行而对物理内存的争夺和践踏,采用了虚拟内存。 虚拟内存技术使得不同进程在运行过程中,它所看到的是自己独自占有了当前系统的4G内存。...,只需要在虚拟内存空间分配连续空间,而不需要实际物理内存的连续空间,可以利用碎片 虚拟内存的代价: 虚存的管理需要建立很多数据结构,这些数据结构要占用额外的内存 虚拟地址到物理地址的转换,增加了指令的执行时间...当进程访问这些没有建立映射关系的虚拟内存时,处理器自动触发一个缺页异常。 缺页中断:在请求分页系统中,可以通过查询页表中的状态位来确定所要访问的页面是否存在于内存中。...缺页本身是一种中断,与一般的中断一样,需要经过4个处理步骤: 1、保护CPU现场 2、分析中断原因 3、转入缺页中断处理程序进行处理 4、恢复CPU现场,继续执行 但是缺页中断是由于所要访问的页面不存在于内存时...,由硬件所产生的一种特殊的中断,因此,与一般的中断存在区别: 1、在指令执行期间产生和处理缺页中断信号 2、一条指令在执行期间,可能产生多次缺页中断 3、缺页中断返回是,执行产生中断的一条指令,而一般的中断返回是

6K10

Linux进程的内存管理之缺页异常

通过《Linux进程的内存管理之malloc和mmap》我们知道,这两个函数只是建立了进程的vma,但还没有建立虚拟地址和物理地址的映射关系。...如果是写访问,用alloc_zeroed_user_highpage_movable分配新的物理页,并用0填充,然后映射到虚拟页上去 如果是先读后写访问,则会发生两次缺页异常:第一次是匿名页缺页异常的读的处理...(虚拟页到0页的映射),第二次是写时复制缺页异常处理。...读之后写匿名页 见 do_wp_page do_fault 文件页缺页异常 ?...由于内存和磁盘的读写性能差异较大,Linux会在内存充裕时将空闲内存当作swap cache,用来缓存磁盘数据,以提高I/O性能。相对的在内存紧张时Linux会将这些缓存回收,将脏页回写到磁盘中。

2.4K31

Linux内核虚拟内存管理之匿名映射缺页异常分析

作者简介 韩传华,就职于南京大鱼半导体有限公司,主要从事linux相关系统软件开发工作,负责Soc芯片BringUp及系统软件开发,乐于分享喜欢学习,喜欢专研Linux内核源代码。...前面讲到过写时复制缺页异常(COW),一般用于父子进程之间共享页,而我们会常见一种缺页异常是匿名映射缺页异常,今天我们就来讨论下这种缺页异常,让大家彻底理解它。...注:本文使用linux-5.0内核源代码。文章分为以下几节内容: 1.匿名映射缺页异常的触发情况 2.0页是什么?为什么使用0页?...一,匿名映射缺页异常的触发情况 前面我们讲解了什么是匿名页,那么思考一下什么情况下会触发匿名映射缺页异常呢?...而如果是先读访问一页然后写访问这一页,则会发生两次缺页异常:第一次是匿名页缺页异常的读的处理,第二次是写时复制缺页异常处理。 (END)

2.8K32

一文聊透 Linux 缺页异常的处理 —— 图解 Page Faults

但实际上,Linux 内核是用 TASK_SIZE_MAX 来定义用户空间的末尾的,也就是说 Linux 内核是使用 TASK_SIZE_MAX 来分割用户虚拟地址空间与内核虚拟地址空间的。...上图中展示的页目录项比特位布局笔者是按照 36 位物理内存地址所画,事实上 Linux 内核最大可支持 52 位的物理内存地址。...笔者曾在 《深入理解 Linux 物理内存管理》一文中为大家介绍了 Linux 内核在 NUMA 架构下物理内存管理的相关内容。...笔者在之前文章《一步一图带你构建 Linux 页表体系》 中的第 4.2.1 小节中详细介绍了 64 位页表项 pte 的比特位布局,以及各个比特位的含义。...swap 预读在 Linux 内核中由 swapin_readahead 函数负责,它有两种实现方式: 第一种是根据缺页地址 address 周围的虚拟内存地址进行预读,但前提是它们必须属于同一个 vma

82722

操作系统知识梳理共9次缺页

附录1 FIFO 与LRU FIFO 先进先出 ---- 刚开始内存为空 null, null, null 使用2,缺页读入 2, null, null 使用3,缺页读入 2, 3, null...使用2,直接使用 2, 3, null 使用1,缺页读入 2, 3, 1 使用5,缺页读入 3, 1, 5 因为2是最先读入的,所以就把它删掉 使用2,缺页读入 1, 5, 2 使用4,缺页读入...5, 2, 4 使用5,直接使用 5, 2, 4 使用3,缺页读入 2, 4, 3 使用2,直接使用 2, 4, 3 使用5,缺页读入 4, 3, 5 使用2,缺页读入 3, 5, 2 共9...次缺页 LRU 会删除最不常访问的 刚开始内存为空 null, null, null 使用2,缺页读入 2, null, null 使用3,缺页读入 3, 2, null 使用2,直接使用 2,...3, null 使用1,缺页读入 1, 2, 3 使用5,缺页读入 5, 1, 2 因为最近1和2都访问过而3是很早之前用过的,所以就把它删掉 使用2,直接使用 2, 5, 1 使用4,缺页读入

83950

为什么mmap之后访问地址仍然发生了缺页异常?

作者简介: viho he,ARM64专家,现供职于某芯片公司,专注于Linux内核、BSP、ARM64虚拟化以及与ARM64 SoC相关的各种底软技术 问题简述 在笔者的开发平台上,应用程序使用ION...分析remap_pfn_range行为发现应该不是这里的问题,那么,或许这个page fault不是缺页异常,而是别的page fault?想到这一层后,继续对比4.19与5.10内核行为。...答: 5.10对PTE_RDONLY引入,是ARM官方maintainer的刻意行为,源于commit: https://github.com/torvalds/linux/commit/aa57157be69fb599bd4c38a4b75c5aad74a60ec0...因为笔者先入为主的观念,把所有page fault都当成了缺页异常,而没有第一时间想到permission fault的可能,导致浪费了大量时间来分析remap_pfn_range的行为,虽然代码逻辑整理了不少

1.3K30

OS酱:“哎呀内存太小了,人家又缺页了!”

虽然,被置换页面的可以随机选择,但是不同的选择,所导致后续系统访存开销是不一样,甚至会出现很极端的情况,每次访存都发生缺页中断,极大的增加系统额外的访存开销。...算法流程: 在缺页中断发生时,首先从 主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。...举例如下: 缺页9次,总访问次数12次缺页率:6/12 = 50% FIFO算法(先进先出置换算法) Belady异常: 采用FIFO算法时,如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象...举例如下: 缺页9次,总访问次数12次缺页率:9/12 = 75% LRU算法 (最近最久未使用算法) 利用局部性原理,根据一个作业在执行过程中过去的页面访问==历史来推测未来==的行为。...举例如下: 缺页7次,总访问次数12次缺页率:7/12 = 58.3% 实际上,LRU算法根据各页以前的情况,是“向前看”的,而最佳置换算法则根据各页以后的使用情况,是“向后看”的。

1.1K20

怎么在 Linux 中查找一个命令或进程的执行时间

使用 time 程序,我们可以轻松地测量 Linux 操作系统中命令或程序的总执行时间。 time 命令在大多数 Linux 发行版中都有预装,所以你不必去安装它。...在 Linux 中查找一个命令或进程的执行时间 要测量一个命令或程序的执行时间,运行: $ /usr/bin/time -p ls 或者, $ time ls 输出样例: dir1 dir2 file1...你可以将 ls 替换为任何命令或进程,以查找总的执行时间。...对于那些我们不了解的 Linux 命令,type 命令用于查找相关命令的信息。 更多详细信息,请参阅本指南。...$ man time 想要了解有关 Bash 内建 time 关键字的更多信息,请运行: $ help time 总结 以上所述是小编给大家介绍的在 Linux 中查找一个命令或进程的执行时间,希望对大家有所帮助

1.6K20

如何在 Linux 中查找一个命令或进程的执行时间

使用 time 程序,我们可以轻松地测量 Linux 操作系统中命令或程序的总执行时间。 time 命令在大多数 Linux 发行版中都有预装,所以你不必去安装它。...在 Linux 中查找一个命令或进程的执行时间 要测量一个命令或程序的执行时间,运行: $ /usr/bin/time -p ls 或者, $ time ls 输出样例: dir1 dir2 file1...你可以将 ls 替换为任何命令或进程,以查找总的执行时间。...对于那些我们不了解的 Linux 命令,type 命令用于查找相关命令的信息。 更多详细信息,请参阅本指南。...$ man time 想要了解有关 Bash 内建 time 关键字的更多信息,请运行: $ help time 总结 以上所述是小编给大家介绍的在 Linux 中查找一个命令或进程的执行时间,希望对大家有所帮助

1.7K21
领券