linux缺页异常处理三步骤

269次

问题描述:

缺页异常处理过程

推荐答案

2023-10-24 18:41:47

在程序的执行过程中,因为遇到某种障碍而使 CPU 无法最终访问到相应的物理内存单元,即无法完成从虚拟地址到物理地址映射的时候,CPU 会产生一次缺页异常,从而进行相应的缺页异常处理。基于 CPU 的这一特性,Linux 采用了请求调页(Demand Paging)和写时复制(Copy On Write)的技术

1. 请求调页是一种动态内存分配技术,它把页框的分配推迟到不能再推迟为止。这种技术的动机是:进程开始运行的时候并不访问地址空间中的全部内容。事实上,有一部分地址也许永远也不会被进程所使用。程序的局部性原理也保证了在程序执行的每个阶段,真正使用的进程页只有一小部分,对于临时用不到的页,其所在的页框可以由其它进程使用。因此,请求分页技术增加了系统中的空闲页框的平均数,使内存得到了很好的利用。从另外一个角度来看,在不改变内存大小的情况下,请求分页能够提高系统的吞吐量。当进程要访问的页不在内存中的时候,就通过缺页异常处理将所需页调入内存中。

2. 写时复制主要应用于系统调用fork,父子进程以只读方式共享页框,当其中之一要修改页框时,内核才通过缺页异常处理程序分配一个新的页框,并将页框标记为可写。这种处理方式能够较大的提高系统的性能,这和Linux创建进程的操作过程有一定的关系。在一般情况下,子进程被创建以后会马上通过系统调用execve将一个可执行程序的映象装载进内存中,此时会重新分配子进程的页框。那么,如果fork的时候就对页框进行复制的话,显然是很不合适的。

在上述的两种情况下出现缺页异常,进程运行于用户态,异常处理程序可以让进程从出现异常的指令处恢复执行,使用户感觉不到异常的发生。当然,也会有异常无法正常恢复的情况,这时,异常处理程序会进行一些善后的工作,并结束该进程。也就是说,运行在用户态的进程如果出现缺页异常,不会对操作系统核心的稳定性造成影响。 那么对于运行在核心态的进程如果发生了无法正常恢复的缺页异常,应该如何处理呢?是否会导致系统的崩溃呢?是否能够解决好内核态缺页异常对于操作系统核心的稳定性来说会产生很大的影响,如果一个误操作就会造成系统的Oops,这对于用户来说显然是不能容忍的。本文正是针对这个问题,介绍了一种Linux内核中所采取的解决方法。

在读者继续往下阅读之前,有一点需要先说明一下,本文示例中所选的代码取自于Linux-2.4.0,编译环境

其他答案

2023-10-24 18:41:47

对应的虚拟页面映射到物理页面上。然后,内核会重新执行被中断的指令,使程序继续运行。

总的来说,缺页异常处理的三个步骤是:中断处理、页面分配和更新页表。这些步骤能够确保进程能够访问所需的页面,并保证程序的正确执行。

其他答案

2023-10-24 18:41:47

在Linux中,当程序请求访问内存页面时,如果出现缺页异常,操作系统会采取以下三个步骤来处理:

1. 页面缺失处理(Page Fault Handling):当程序请求访问内存页面时,操作系统会检查该页面是否已经存在于内存中。如果该页面不存在,操作系统会向磁盘或其他存储设备发出请求,将该页面加载到内存中。这个过程被称为页面缺失处理。

2. 内存映射文件(Memory Mapping):在Linux中,可以使用内存映射文件来将文件映射到内存中。当程序需要访问文件时,可以通过内存映射文件来直接访问文件内容,而不需要进行文件读写操作。这样可以提高文件访问效率,并且可以避免缺页异常的发生。

3. 虚拟内存管理(Virtual Memory Management):在Linux中,使用虚拟内存管理技术来管理内存。通过虚拟内存管理,可以将进程的地址空间映射到物理内存中,从而实现进程之间的隔离和保护。在缺页异常处理过程中,操作系统可以使用虚拟内存管理技术来将页面从磁盘或其他存储设备加载到内存中,并且可以保证进程的地址空间不会发生冲突。

知道问答相关问答

(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6