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

linux内核缺页中断处理

linux内核对缺页异常的处理流程很复杂,但是基本思想和上述流程差不多。...内核态缺页异常频率很低,因为内核态的数据不会换出到磁盘的。所以用户态才会经常出现缺页异常,因为用户态的数据经常写到交换区和文件。并且在进程刚创建运行时也会伴随着大量的缺页异常。...下面看linux的基本处理流程: 内核处理缺页异常的主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器的值 * error_code,由硬件产生:...,就需要调用handle_mm_fault处理页表,在获取到缺页地址所对应的页表项指针后,会进入到handle_pte_fault,会根据条件分别调用不同的页框交换函数,具体看代码: int __handle_mm_fault...下面看在内核调用copy_from_user时发生缺页异常的处理过程: /* 异常表项结构体 */ struct exception_table_entry { unsigned long insn;

10.8K22

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

缺页中断发生在系统对虚拟地址转换成物理地址的过程中。如果对应的页目录或者页表项没有对应有效的物理内存,则会发生缺页中断。 系统在初始化的时候注册了缺页中断的处理函数。中断号是14。...// 缺页和写保护异常处理函数 set_trap_gate(14,&page_fault); page_fault是汇编实现的。..._page_fault: // 交换两个寄存器的值,esp指向的位置保存了错误码 xchgl %eax,(%esp) // 压栈寄存器 pushl %ecx pushl...do_no_page // 缺页处理,进程的内容还没有加载到内存,访问的时候导致缺页异常 void do_no_page(unsigned long error_code,unsigned long address...最后重新执行触发缺页中断的地址。这时候可以找到对应的内容了。

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

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

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

    1.9K20

    Linux虚拟内存和缺页中断

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

    6.2K10

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

    通过《Linux进程的内存管理之malloc和mmap》我们知道,这两个函数只是建立了进程的vma,但还没有建立虚拟地址和物理地址的映射关系。...(虚拟页到0页的映射),第二次是写时复制缺页异常处理。...由于内存和磁盘的读写性能差异较大,Linux会在内存充裕时将空闲内存当作swap cache,用来缓存磁盘数据,以提高I/O性能。相对的在内存紧张时Linux会将这些缓存回收,将脏页回写到磁盘中。...换入的过程如下: 查找swap cache中是否存在所查找的页面,如果存在,则根据swap cache引用的内存页,重新映射并更新页表;如果不存在,则分配新的内存页,并添加到swap cache的引用中...//anonpage数加1,匿名页从swap空间交换出来,所以加1 //swap page个数减1,由page和VMA属性创建一个新的pte inc_mm_counter_fast(vma->vm_mm

    2.7K42

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

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

    3K32

    数据交换过程详解

    前言: 本文主要介绍数据交换过程中常用的数据交换方法和方式以及数据交换在新技术下所面对的“挑战”,方便大家深入理解数据交换过程。...数据交换平台中采用了数字签名、时间戳、报文加密的方式对传输的消息进行完整性验证,防止消息在传输过程中被篡改。...在新的交换模式下通过对节点的管理和注册,结合了文件传输高效、安全、稳定的特性,在进行跨区域数据同步时只需要配置源和目标的数据库信息按照既定的业务逻辑就能够完成跨节点的数据交换,文件传输的过程自动交由数据交换平台完成...4.5.2 对各个运行环节的监控 在数据交换过程中,监控管理系统负责监控作业的运行和调度情况,统计交换的过程和数据,形成图形化的报表进行统计的数据展现。能够清晰地体现数据交换过程的各种状态和数据量。...可统计作业交换过程中的调度日志、作业执行日志、历史日志、交换的数据量以及统计数据交换的成功失败次数,可以保证在第一时间发现系统存在的问题,并且及时排除,保证系统的正常运行。

    2K30

    电路交换和分组交换的异同_电路交换的三个过程

    从交换技术的发展历史看,数据交换经历了电路交换、报文交换、分组交换和综合业务数字交换的发展过程。 电路交换   电路交换就是计算机终端之间通信时,一方发起呼叫,独占一条物理线路。...当交换机完成接续,对方收到发起端的信号,双方即可进行通信。在整个通信过程中双方一直占用该电路。它的特点是实时性强,时延小,交换设备成本较低。...分组交换   分组交换也称包交换,它是将用户要传送的数据划分成固定长度的小片,每个小片叫做一个分组。...等到达接收端,再去掉分组头将各数据字段按顺序重新装配成完整的报文,整个这一过程称为分组交换。分组交换实质上也是一种“存储——转发”机制。它兼有电路交换和报文交换的优点。...分组交换在物理线路上采用动态复用技术传送分组,因此在同一时间内同一物理线路上能够同时传送多个分组。分组交换比电路交换的电路利用率高,比报文交换的传输时延小,交互性好。

    65910

    Https之秘钥交换过程分析

    如何保证数据在传输过程中是否有被篡改过?...上面是狭义上的数字签名(摘要被私钥签出来的加密后的信息叫做数字签名) 广义上的数字签名指的是非对称加密的一种实际使用用途,即利用非对称加密和哈希算法来保证数据在传输过程中不被篡改。...Https秘钥交换过程 客户端要访问一个网站,向支持https的服务器发起请求。 客户端向服务器发送自己支持的秘钥交换算法列表。 服务器选取一种秘钥交换算法加上CA证书返回给客户端。...服务器收到后用自己的私钥解密(中间人没有服务器的私钥,所以没有办法看到传输的数据,另外确认秘钥交换算法是在第一步,中间人是不知道秘钥交换算法(中间人是无法在第一步做手脚的,那等同于它自己就是一个真实客户端发起了一个新的请求...Https有可能会有中间人攻击,当然浏览器自身会对CA证书做校验,但是如果自己开发的过程中,尤其是在安卓客户端,只是验证证书是否是由CA签出来的,这个时候如果中间人也有一个从CA签出来的证书,而恰好客户端又没有做校验

    52720

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

    ,返回值 fault 是一个位图,用于描述缺页处理过程中发生的状况信息。...这个过程和前面介绍的定位页目录项的过程一模一样。...首先我们通过 alloc_zeroed_user_highpage_movable 来分配一个物理内存页出来,关于物理内存详细的分配过程,感兴趣的读者可以看下笔者的这篇文章——《深入理解 Linux 物理内存分配全链路实现...Linux 系统中可以允许多个这样的 swap 交换区存在,我们可以同时使用多个交换区,也可以为这些交换区指定优先级,优先级高的会被内核优先使用。这些交换区都可以被灵活地添加,删除,而不需要重启系统。...= -ENOMEM); return found_page; } 前面我们提到,Linux 系统中同时允许多个交换区存在,内核将这些交换区组织在 swap_info 数组中。

    3.7K22

    linux减交换分区详解

    Linux交换分区(Swap Space)详解在Linux系统中,交换分区(Swap Space)是一个特殊的文件系统分区,它用于当物理内存(RAM)不足时,将一部分内存中的数据暂时转移到硬盘中,以便释放内存空间供系统继续使用...交换分区在Linux中起到了“虚拟内存”的作用,对于保障系统稳定运行至关重要。交换分区的作用交换分区的主要作用是在物理内存不足时,为系统提供额外的内存空间。...如何设置交换分区在Linux系统中,可以通过多种方式设置交换分区。以下是一些常用的方法:使用专门的交换分区在安装Linux系统时,可以指定一个专门的分区作为交换分区。...交换分区的使用策略Linux内核提供了一些参数来控制交换分区的使用策略。这些参数包括vm.swappiness、vm.vfs_cache_pressure等。...总结交换分区是Linux系统中不可或缺的一部分,它对于保障系统的稳定运行具有重要意义。在配置交换分区时,需要考虑其大小、位置和使用策略等因素,并根据系统的实际需求进行调整。

    19600

    Linux的内存回收和交换

    前言 Linux的swap相关部分代码从2.6早期版本到现在的4.6版本在细节之处已经有不少变化。本文讨论的swap基于Linux 4.4内核代码。...Linux内存管理是一套非常复杂的系统,而swap只是其中一个很小的处理逻辑。希望本文能让读者了解Linux对swap的使用大概是什么样子。...在Linux上可以使用swapon -s命令查看当前系统上正在使用的交换空间有哪些,以及相关信息: [zorro@zorrozou-pc0 linux-4.4]$ swapon -s Filename...回收的过程中什么时候会进行交换呢? 具体怎么交换? 下面我们就从这些问题出发,一个一个进行分析。...关于活跃(active)还是不活跃(inactive)的判断内核会使用lru算法进行处理并进行标记,我们这里不详细解释这个过程。 整个扫描的过程分几个循环,首先扫描每个zone上的cgroup组。

    4.7K52

    4.虚存管理

    其过程是: ① 系统首先选择处于阻塞状态且优先级最低的进程作为换出进程,将该进程的程序和数据传送到磁盘的交换区上。...过程调用将会使程序的执行轨迹由一部分区域转至另一部分区域,但经研究看出,过程调用的深度在大多数情况下都不超过5。这就是说,程序将会在一段时间内都局限在这些过程的范围内运行。...五、虚存的实现机制(重要) 1.缺页中断 中断是指计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回现行程序的间断处,...③ Linux方式: Linux使用请求调页把可执行映像装入进程虚拟内存中。每当一个命令被执行时,包含该命令的文件被打开,它的内容被映射到进程虚拟空间。...随着进程的执行,它会产生页故障, Linux使用进程内存映射以决定映像的哪一部分被装入内存去执行。

    97810
    领券