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

广东建设人才网站方正宽带网络服务有限公司

广东建设人才网站,方正宽带网络服务有限公司,百度推广开户免费,海口建网站公司首发公号#xff1a;Rand_cs 共享内核空间 我们常说#xff0c;每个进程都有自己的虚拟地址空间#xff0c;但其中内核部分是共享的。 这就有个问题#xff0c;如何共享的#xff1f; 系统启动时创建了一张内核页表#xff0c;里面记录着内核地址空间与物理地址空间的…首发公号Rand_cs 共享内核空间 我们常说每个进程都有自己的虚拟地址空间但其中内核部分是共享的。 这就有个问题如何共享的 系统启动时创建了一张内核页表里面记录着内核地址空间与物理地址空间的映射关系而每次 fork 子进程时都会复制一份内核页表所以说每个进程页表中的内核部分是“相同的”因此可以说共享内核空间。 这里我将最初的内核页表称为“原本”每个进程的内核部分称为“副本”类似副本的设计都会存在存在一个问题——同步意思是说如果某个进程修改了内核空间的映射关系那么需要将这种映射关系的改变同步到其他副本如此才能保证逻辑正确。 最初分析 xv6 的 scheduler 的代码时发现每次返回到调度器时都会切换到内核页表如下所示 void scheduler(void) { ........swtch((c-scheduler), p-context); switchkvm(); ........ }当时我便在想不切换行不行于是将 switchkvm 注释掉发现出了错而且错误还不固定有的是触发 page fault、有的是系统 reset(从 main 函数重新开始执行)未找到明确的复现规律。当时没有细想初步便认为是因为各个进程页表的内核部分也就是“副本”们之间没有同步导致了种种错误。后来重新看代码的时候发现问题应该不在内核页表同步。 xv6 不需要内核页表同步因为 xv6 在启动的时候内核地址空间的映射关系已经建立好了而纵观代码也没有修改内核地址空间映射关系的地方所以内核地址空间的映射关系应是一直不变的。可能有的朋友会觉得 kalloc 函数会更改内核映射其实并没有kalloc 只是分配内存并没有修改映射关系可以仔细看看 kalloc 前后的关于修改映射关系的代码比如说 *pte xxx, *pde xxx这才是修改页表修改映射关系。在 growproc-kalloc 调用链中kalloc 分配的内存映射到了进程的用户空间修改的是进程页表用户态部分的 ptemappages-walkpgdir-kalloc 中分配的内存用作用户页表修改的是进程页表用户态部分的 pde 这就相当于 Linux 中的直接映射区域但是不存在 vmalloc 动态映射区域所以 xv6 其实不需要内核页表的同步。假如说某个进程确实会改动内核映射关系那么应该如何实现内核页表同步。同步内核页表是为了每个进入内核时都能看到相同的内核影响所以 第一种方式不需要同步内核页表每次进程进入内核的时候切换到“原本”内核页表那么每个进程进入内核的时候使用的是同一份页表当然就不需要同步第二种方式那就是老老实实的同步页表也就是说当“原本”或“副本”被修改的同时也就将相关的修改同步到其他“副本”。这部分可以参考 Linux vmalloc 区同步的做法当“原本”修改时调用 sync_global_pgds 主动将修改同步到其他“副本”。当某个“副本”被修改时Linux 先后有三种同步方式最开始在 pagefault 中触发同步但有竟态问题有了第二种主动同步但因为性能问题又增加了第三种干掉同步的方式。Linux 内存管理的部分见 bin的技术小屋 这位大佬写的文章本文不赘述这应该是全网对 Linux 内存管理讲解的最详尽细致的文章了值得一看。 这里在穿插一个问题既然内核里面本来就有一份内核页表那么进程页表何必再拷贝一份内核页表反正进程在用户态时不能访问内核态根本就用不到内核页表。每个进程页表只需要映射它自己的地址空间以及跳转到内核那一小段代码段即可跳转到内核后切换到内核页表在内核办完事儿后再切换回进程页表这个过程似乎没有问题也就是根本就没必要拷贝整个内核页表到进程页表的内核部分那为什么还要这么做呢让内核地址空间和进程用户地址空间在同一张页表共存 我想这个问题应该是和架构强相关在 arm 中有两个页表寄存器ttbr0 存放进程页表ttbr1 存放共享的内核页表访问用户空间地址使用 ttbr0 寄存器访问内核空间地址使用 ttbr1 寄存器。因为 arm 有两个寄存器进程进出内核不需要进行页表切换。 但是 x86 架构只有一个页表寄存器如果将用户页表和内核页表分开那么进出内核势必造成页表切换页表切换刷新 tlb如果没有 ASID/PCID 等机制的话性能损失太多 话说内核页表和用户页表共存也会引发一些安全问题比如之间大爆的 meldown 漏洞以及相应的缓解方案 kpti挺有意思有兴趣的话可以看一下。 回到 xv6 上面来那为什么 scheduler 中需要切换到内核页表很不幸这个问题始终还未能解决写在这里便是和大家讨论一下以及分享一下相关的一些东西另外很有意思的是当我在 ubuntu 虚拟机中跑注释掉 switchkvm 的 xv6 时会引发各种问题但是在 ubuntu 的宿主机上跑便没有问题(已考虑到虚拟机 cpu 核心分配的问题)这便很奇怪想了很久未能弄明白暂时存疑吧。元芳你怎么看 首发公号Rand_cs
http://wiki.neutronadmin.com/news/194991/

相关文章:

  • 做网站如何赢利的网站定制一般价格多少
  • 有哪些做调查的网站可以赚钱方法数码做的网站怎么样
  • 高端企业网站制作logo一键生成器免费版下载
  • 深圳西丽网站建设公司济南软件网站建设
  • 哪个网站是专门做兼职的乐山网站制作设计公司
  • 使用网站效果图网站恶意注册
  • aso.net 网站开发wordpress修改谷歌
  • 上传wordpress到服务器网站的优化是什么意思
  • 昆明建站网站资讯平台用shopify 做网站
  • 桂林网站设计wordpress主题
  • 学代码的网站平面设计师赚钱吗
  • 营销型网站建设宣传语网站建设一意见
  • 搜索引擎优化关键词选择的方法有哪些二十条优化措施全文
  • 安徽网站设计app运营方式
  • 专业的模板建站企业外贸soho先做网站
  • 关于12380网站建设文件珠海公司做网站
  • 电商网站建设企业godaddy wordpress迁移
  • 厚街建设网站建筑公司网站被投诉违反广告法
  • 初级程序员与网站开发sap.net网站开发
  • 提高网站转化率东莞发布最新通告
  • 石家庄信息门户网站定制贵阳工程建设招聘信息网站
  • 公司的网站备案手续西安效果图制作
  • 用python做网站的公司上海网站建设哪个好
  • 建设的网站服务器茂名专业做网站
  • 如果网站没有做icp备案吗广西建设领域证书查询官方网站
  • 怎么对网站标注做记号哪个购物平台正品
  • flash网站开发框架wordpress百度蜘蛛只抓首页
  • 韩国风格网站江苏建设人才证书查询
  • 网站开发流程ppt自己怎么做点击量好的网站
  • 四川省建设厅注册管理中心网站十大app开发公司