Linux内核缺页
分类:关于计算机

全体缺页至极的管理进度极度复杂,大家那边只简介一下缺页涉及到的内核函数。

当CPU产生贰个格外时,将会跳转到万分管理的任何拍卖流程中。对于缺页异常,CPU将跳转到page_fault非常管理程序中,该极其管理程序会调用do_page_fault()函数,该函数通过读取CWrangler2存放器得到引起缺页的线性地址,通过各类标准判别以便鲜明二个极度的方案来拍卖这么些那叁个。

do_page_fault()该函数通过种种标准来检验当前时有发生特别的情况,但起码do_page_fault()会有别于出引发缺页的二种意况:由编制程序错误引发那么些,以及由进度地址空间中还未分配物理内部存款和储蓄器的线性地址引发。对于后一种情状,经常还分为客户空间所掀起的缺页格外和水源空间引发的缺页非常。内核引发的十二分是由vmalloc()发生的,它只用于基础空间内部存款和储蓄器的分配。大家那边供给关注的是顾客空间所掀起的至极景况。这一部分办事从do_page_fault()中的good_area标号处初步推行,主要通过handle_mm_fault()完成。

handle_mm_fault()该函数的重中之重成效是为抓住缺页的历程分配贰个大要页框,它先分明与诱惑缺页的线性地址对应的各级页目录项是或不是留存,怎样不设有则分实行分红。具体如何分配这么些页框是经过调用handle_pte_fault()完成的。

handle_pte_fault()该函数依照页表项pte所描述的情理页框是还是不是在物理内存中,分为两大类:诉求调页:被访问的页框不再主存中,那么此时必需分配一个页框。写时复制:被访问的页存在,然则该页是只读的,内核须求对该页实行写操作,此时基础将那么些已存在的只读页中的数据复制到三个新的页框中。客商进度访谈由malloc()分配的内存空间属于第一种意况。对于央求调页,handle_pte_fault()依旧将其细分为三种状态:

1.假诺页表项确实为空(pte_none(entry)),那么必得分配页框。尽管当前进程完毕了vma操作函数集结中的fault钩子函数,那么这种场所属于基于文件的内部存款和储蓄器映射,它调用do_linear_fault()进行分配物理页框。不然,内核将调用针对无名映射分配物理页框的函数do_anonymous_page()。

2.万一检查实验出该页表项为非线性映射(pte_file(entry)),则调用do_nonlinear_fault()分配物理页。

3.假诺页框事先被分配,可是此时一度由主存换出到了外部存款和储蓄器,则调用do_swap_page()完结页框分配。

在以上四个函数中缺页格外管理函数通过alloc_zeroed_user_highpage_movable()来完结物理页的分配进程。alloc_zeroed_user_highpage_movable()函数最后调用了alloc_pages()。  经过那样贰个错落有致的历程,客户进度所采访的线性地址终于对应到了一块物理内部存款和储蓄器。

参考:

1.《深刻驾驭Linux内核》 PDF 下载 http://www.linuxidc.com/Linux/2011-08/41228.htm

2.《深刻Linux内核架构》​ PDF 下载见 http://www.linuxidc.com/Linux/2012-06/62984.htm

本文永恒更新链接地址:http://www.linuxidc.com/Linux/2016-04/130380.htm

图片 1

本文由正版必中一肖图发布于关于计算机,转载请注明出处:Linux内核缺页

上一篇:java的图形界面初学惯用 下一篇:没有了
猜你喜欢
热门排行
精彩图文