当前位置: 首页 > news >正文

青海格尔木建设局网站大连建设工程信息网档案下载

青海格尔木建设局网站,大连建设工程信息网档案下载,wordpress除了首页还能再新增主题,网页游戏网站有哪些目录页表什么时候创建内核页表变化什么时候更新到用户页表源码分析常见问题解答问题一#xff1a;页表到底是保存在内核空间中还是用户空间中#xff1f;问题2#xff1a;页表访问#xff0c;软件是不是会频繁陷入内核#xff1f;问题3#xff1a;内存申请#xff0c;软… 目录页表什么时候创建内核页表变化什么时候更新到用户页表源码分析常见问题解答问题一页表到底是保存在内核空间中还是用户空间中问题2页表访问软件是不是会频繁陷入内核问题3内存申请软件是不是会频繁陷入内核创建新页表条目问题4那内核页表和普通的页表到底有什么区别接上两文本文补充一下内核页表和用户页表创建、更新时机说明。 Linux内核学习笔记——内核页表隔离KPTI机制 Linux内核学习笔记——内核页表隔离KPTI机制源码分析 KPTI中每个进程有两套页表——内核态页表与用户态页表(两个地址空间)。 内核态页表只能在内核态下访问可以创建到内核和用户的映射不过用户空间受SMAP和SMEP保护。 内核页表即书上说的主内核页表在内核中其实就是一段内存存放在主内核页全局目录init_mm.pgd(swapper_pg_dir)中硬件并不直接使用。 进程页表每个进程自己的页表放在进程自身的页目录task_struct.pgd中。 在保护模式下从硬件角度看其运行的基本对象为“进程”(或线程)而寻址则依赖于“进程页表”在进程调度而进行上下文切换时会进行页表的切换即将新进程的pgd(页目录)加载到CR3寄存器中。从这个角度看其实是完全没有用到“内核页表”的那么“内核页表”有什么用呢跟“进程页表”有什么关系呢 页表什么时候创建 内核页表中的内容为所有进程共享每个进程都有自己的“进程页表”“进程页表”中映射的线性地址包括两部分 用户态内核态 其中内核态地址对应的相关页表项对于所有进程来说都是相同的(因为内核空间对所有进程来说都是共享的)而这部分页表内容其实就来源于“内核页表”即每个进程的“进程页表”中内核态地址相关的页表项都是“内核页表”的一个拷贝进程创建时候就产生了。 内核页表变化什么时候更新到用户页表 “内核页表”由内核自己维护并更新在vmalloc区发生page fault时将“内核页表”同步到“进程页表”中。以32位系统为例内核页表主要包含两部分 线性映射区vmalloc区 其中线性映射区即通过TASK_SIZE偏移进行映射的区域对32系统来说就是0-896M这部分区域映射对应的虚拟地址区域为TASK_SIZE~TASK_SIZE896M。这部分区域在内核初始化时就已经完成映射并创建好相应的页表即这部分虚拟内存区域不会发生page fault。 vmalloc区为896M~896M128M这部分区域用于映射高端内存有三种映射方式vmalloc、固定、临时这里就不详细展开了。 以vmalloc为例(最常使用)这部分区域对应的线性地址在内核使用vmalloc分配内存时其实就已经分配了相应的物理内存并做了相应的映射建立了相应的页表项但相关页表项仅写入了“内核页表”并没有实时更新到“进程页表中”内核在这里使用了“延迟更新”的策略将“进程页表”真正更新推迟到第一次访问相关线性地址发生page fault时此时在page fault的处理流程中进行“进程页表”的更新。 源码分析 /** 缺页地址位于内核空间。并不代表异常发生于内核空间有可能是用户* 态访问了内核空间的地址。*/if (unlikely(fault_in_kernel_space(address))) {if (!(error_code (PF_RSVD | PF_USER | PF_PROT))) {//检查发生缺页的地址是否在vmalloc区是则进行相应的处理if (vmalloc_fault(address) 0)return; /** 对于发生缺页异常的指针位于vmalloc区情况的处理主要是将* 主内核页表向当前进程的内核页表同步。*/ static noinline __kprobes int vmalloc_fault(unsigned long address) {unsigned long pgd_paddr;pmd_t *pmd_k;pte_t *pte_k;/* Make sure we are in vmalloc area: *//* 区域检查 */if (!(address VMALLOC_START address VMALLOC_END))return -1;WARN_ON_ONCE(in_nmi());/** Synchronize this tasks top level page-table* with the reference page table.** Do _not_ use current here. We might be inside* an interrupt in the middle of a task switch..*//*获取pgd(最顶级页目录)地址直接从CR3寄存器中读取。*不要通过current获取因为缺页异常可能在上下文切换的过程中发生*此时如果通过current获取则可能会出问题*/pgd_paddr read_cr3();//从主内核页表中同步vmalloc区发生缺页异常地址对应的页表pmd_k vmalloc_sync_one(__va(pgd_paddr), address);if (!pmd_k)return -1;//如果同步后相应的PTE还不存在则说明该地址有问题了pte_k pte_offset_kernel(pmd_k, address);if (!pte_present(*pte_k))return -1;return 0; } 常见问题解答 问题一页表到底是保存在内核空间中还是用户空间中 创建和删除页表的确是在内核空间操作的。页表不能在用户空间进行操作一点都不奇怪你要知道页表的作用不仅仅是虚拟地址到物理地址的映射还有关键的权限访问控制和页面属性的记录。下图是armv8中level 1的页表格式类似于x86中的PUD的结构 可以看到该页表中只有Outlook block address是在表示下一级页表的地址Upper attributes和Lower attributes是内核空间用到权限的控制位和页属性标志。 问题2页表访问软件是不是会频繁陷入内核 这个需要结合场景分析。访问页表是否会陷入内核这要看你是 CPU地址翻译的过程中的页表访问增加修改页表项。 如果是第一种CPU地址翻译那么这种访问是硬件完成的整个过程不需要代码参与没有任何性能上的损失。 如果是第二种是会慢一些。这种慢是为了安全如果页表在用户空间那么用户就可能自己修改页表映射任意的内存地址访问任何内存甚至是直接操作硬件进程间、内核的隔离保护就失去了意义。 问题3内存申请软件是不是会频繁陷入内核创建新页表条目 你以为在用户进程中分配内存的时候就马上通过系统调用陷入内核然后进行页表操作吗这个理解是不对的。 应用程序虽然可能频繁的malloc或者free但在页表层面上并不会频繁的创建、删除页表项主要原因是malloc/free操作的接口都是C库的接口在C库里还有另外一层次的封装来保证不会频繁的提交页表的操作申请。 内核如今已经发展的很成熟了当然不会这么傻。在你兴高采烈的分配好一块内存后内核只是给你找了一块独一无二的虚拟内存空间并没有映射到物理内存所以根本没有页表的操作。只有你真正用到你的内存时MMU发现无法进行虚拟内存到物理内存的转换只好抛出page fault异常然后进入内核进行物理内存的分配过程接着就给你把页表创建好了这个整个过程叫做惰性分配。 更重要的是其实libc库在进程创建的时候就已经把堆空间用内存池的方式管理起来在进程分配小于128kb的内存时根本不需要内核进行任何操作因为堆这个段的虚拟内存早就映射好了物理内存。 问题4那内核页表和普通的页表到底有什么区别 对于所有进程来说它们页表中的内核空间页表部分都是一模一样的它们都是从1号进程的init_mm结构中copy的只有用户空间的页表不尽相同。用户空间的页表是用来进行不同进程地址空间隔离的所以相同的虚拟地址可以映射到不同的物理地址当然一般情况下这也是必须的而内核只有一个。
http://www.hkea.cn/news/14266211/

相关文章:

  • 花20亿做网站上海网站备案网站
  • 自己建的网站也要注册域名吗软件制作公司
  • 辽宁网站建设找哪家怎么用vue写wordpress主题
  • 青海网站建设多少钱wordpress调查插件
  • 凡科做的网站要收费吗网站制作网络推广价格
  • 企业网站建设的流程与原则长治公司网站建设
  • 天津微信网站开发阀门专业网站建设
  • 四川网站建设培训班专业网站设计如何提升网页品质
  • 网站建设行业新闻动态福州网站建设q.479185700強
  • 达内学网站开发培训课程html5响应式公司网站模版
  • 西宁做网站的公司完整个人网站开发案例
  • 网站整套模板项目代码下载比较好的平面设计网站
  • 怎么做网站的移动端适配版移动登录网页模板下载
  • 斗门区住房和城乡建设网站网站怎么接入百度地图
  • 平凉哪家做企业网站广西南宁公司网站制作
  • 好看的企业网站首页崇明集团网站建设
  • 网站做三方登陆需要注册公司不长春哪家网站做的好
  • 哪个公司做网站好苏州杭州专业seo服务公司
  • 人社局网站建设方案广州 天河网站设计
  • 富阳区住房与建设局网站网站开发工程师 英文
  • 网站搜索防止攻击南宁seo网站建设费用
  • 肇庆网站建设咨询高端网站建设机构
  • 做房产经纪人要自己花钱开网站吗南京谷歌优化
  • 微网站建设高端网站定制网站宣传平台
  • 企业网站文案外包微信公众号直接同步到wordpress
  • 怎么网站是什么语言做的买手机的网站
  • 我想给图书网站做代理网站建设能
  • 影视公司宣传片wordpress后台优化
  • 电子毕业设计网站建设做网站学不需要做后台管理系统
  • 网站内容如何建设国外做电商平台的网站有什么