专栏首页立权的博客关于page_struct中virtual指针的思考

关于page_struct中virtual指针的思考

1.在毛德操的《Linux源代码情景分析》中,关于内存管理的一张图

其中 virtual 居然直接 指向物理页面的起始地址,不是单单根据图推断的,文章内容也是这么描述的

virtual是一个指针,从命名就能得知应该是一个逻辑地址,virtual 在代表物理页面的 结构体 page 中

根据注释,作者说, 有部分物理机的内核虚拟地址是动态地映射到物理页的,所以要用代表物理页的结构存储这个虚地址

为什么说是动态的呢?因为内核的虚拟地址加上偏移量(X86上是 3G)就可以获得实际上的物理地址,也就是虽然内核的虚地址空间在0~1G,但是实际上在物理内存上是3~4G这个区间

动态映射的话值得就是 不执行上面的简单加上偏移量的操作来算物理地址,而是通过灵活地方式完成虚拟地址到物理地址的映射(应该是内存映射表)

那么在代表物理页的结构里 存入怎么个虚拟地址也能理解了。

有对应的宏设置它。

一个应用的地方,物理页面号 pfn 左移 PAGE_SHIFT 位后得到物理页面的起始地址

__va 是把这个起始地址 简单加上某个偏移量,最后得到 virtual

最后的猜测,虽然使用了页表来映射内核区域到物理页面,但是还是基于简单的偏移量增减来映射虚拟地址到物理地址的关系

以上只是个人猜测,真相还需日后寻求证实

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 重量级锁的加锁-等待-撤销流程

    1.entry_list 中的 节点是等待被唤醒的节点,持有重量级锁的线程执行 exit 方法(Java层面:退出上述 synchronized区或调用 wai...

    执生
  • JVM学习 : VM_Thread

    代码图片来自:https://blog.csdn.net/qq_31865983/article/details/103788358

    执生
  • 项目驱动-两日速成Docker日记

      如果功能模块之间要通过 localhost 这种屏蔽具体 IP 的设置来通信的话,最好使用 --network=host 来让多个容器都共用一个Networ...

    执生
  • 部署 Consul服务实现Docker容器跨主机通信

    consul 数据中心的含义,可以将其当做数据库来理解,类似于Redis等非关系型数据库,采用的是键-值对的方式,存放着各个容器的IP及端口信息。 consul...

    小手冰凉
  • PHP 依赖管理工具 Composer

    GitHub:https://github.com/composer/composer 官方网站:https://getcomposer.org/ 开发一个 S...

    康怀帅
  • Shiro如何去掉小尾巴 JSESSIONID

    使用shiro过程中,有时url会遇到JSESSIONID这个小尾巴,感觉好刺眼的样子。 其实shiro在1.3.2版本已经解决了这个问题,只需配置一下参数即可...

    小柒2012
  • 教你在不使用框架的情况下也能写出现代化 PHP 代码

    我为你们准备了一个富有挑战性的事情。接下来你们将以无框架的方式开启一个项目之旅。 首先声明, 这篇并非又臭又长的反框架裹脚布文章。也不是推销非原创(https:...

    程序员宝库
  • Transformers2.0让你三行代码调用语言模型,兼容TF2.0和PyTorch

    最近,专注于自然语言处理(NLP)的初创公司 HuggingFace 对其非常受欢迎的 Transformers 库进行了重大更新,从而为 PyTorch 和 ...

    机器之心
  • PIMS三个漏洞+里程密最新版V2.3 SQL注入漏洞

    pims在线订单管理系统V4.2.7重装漏洞 程序整天结构如下 ? 安装程序在install目录下,虽然index有验证,代码如下 <?php //检测重...

    Jumbo
  • cloudflare视频转码接口

    素描

扫码关注云+社区

领取腾讯云代金券