void *page_address(const struct page *page) 这个函数用于得到页的虚拟地址,这里的页可以是高端页或者低端页
其源码分析如下:
void *page_address(const struct page *page)
{unsigned long flags;void *ret;struct page_address_slot *pas;#可以看到这个函数的形参可以是高端页或者低端页。如果是低端页的话,直接调用lowmem_page_address 返回页的地址if (!PageHighMem(page))return lowmem_page_address(page);#根据page地址得到page_address_slotpas = page_slot(page);ret = NULL;#使用page_address_slot的成员变量lock来保护。看来page_address_slot是临界变量,需要锁保护spin_lock_irqsave(&pas->lock, flags);if (!list_empty(&pas->lh)) {struct page_address_map *pam;#所有的page_address_map是在lh这个list上,所以这里遍历这个list,看已经映射了页中是否有形参page。#如果找到在已经映射的page中找到形参page,则返回这个页对应的虚拟地址,否则返回null.list_for_each_entry(pam, &pas->lh, list) {if (pam->page == page) {ret = pam->virtual;goto done;}}}
done:spin_unlock_irqrestore(&pas->lock, flags);return ret;
}
这里的lowmem_page_address 函数如下,可以看到低端页都已经有虚拟地址了,只要转换一下就可以了.
static __always_inline void *lowmem_page_address(const struct page *page)
{return page_to_virt(page);
}

内存管理API之page_address相关推荐

  1. 深入理解PHP内存管理之谁动了我的内存

    本文地址: http://www.laruence.com/2011/03/04/1894.html 转载请注明出处 首先让我们看一个问题: 如下代码的输出, var_dump(memory_get_ ...

  2. C和C++安全编码笔记:动态内存管理

    4.1 C内存管理: C标准内存管理函数: (1).malloc(size_t size):分配size个字节,并返回一个指向分配的内存的指针.分配的内存未被初始化为一个已知值. (2).aligne ...

  3. 转载:Windows CE内存管理

    内存管理 如果你在写Windows CE 程序中遇到的最重要的问题,那一定是内存问题.一个WinCE 系统可能只有4MB 的RAM,这相对于个人电脑来说是十分少的,因为个人电脑的标准配置已经到了128 ...

  4. 操作系统思考 第六章 内存管理

    第六章 内存管理 作者:Allen B. Downey 原文:Chapter 6 Memory management 译者:飞龙 协议:CC BY-NC-SA 4.0 C提供了4种用于动态内存分配的函 ...

  5. Wireshark----wmem 内存池、内存管理的学习--README.wmem 翻译

    1. 什么是内存池? 当创建大量消耗小内存的对象时,频繁调用new/malloc会导致大量的内存碎片,致使效率降低.内存池的概念就是预先在内存中申请一定数量的,大小相等 的内存块留作备用,当有新的内存 ...

  6. 阅读micropython源码-内存管理组件GC

    阅读micropython源码-内存管理组件GC 苏勇,2021年8月 文章目录 阅读micropython源码-内存管理组件GC 初探micropython中的内存管理机制 分析指定的内存相关参数 ...

  7. Linux内存管理之slab 2:slab API

    Linux内存管理之slab 2:slab API 0. 前沿/须知: 1. kmem_cache_create 1.1 kmem_cache_create (仅分配一个kmem_cache实例)未分 ...

  8. 一个历史遗留问题,引发的linux内存管理的‘血案’

    最近处理一个骨灰级历史残留问题,内核模块DPI的内存数据被无故关顾,导致系统的panic的问题,linux 内核版本3.18 x86_64,由于我们要精简系统,许多调试工具已经被阉割,SLAB_DEB ...

  9. alloc_page分配内存空间--Linux内存管理(十七)

    1 前景回顾 在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担. 伙伴系统基于一种相对简单然而令人吃惊的强大算法. Linux内核使用二进制伙伴算法来管理和分配物理内存页面, 该算法由Know ...

最新文章

  1. 如何锁门_保安巡查时发现住户未锁门,应该怎么办?记住这九点!
  2. mysql获取删除的条数_如何从mysql表中删除数百万条记录而不会减速
  3. 机器学习算法python实现
  4. python语言入门m-Python入门基础三-函数
  5. 捷易拍sdk开发指南.doc_每个Android开发都必须知道的利器
  6. QT. 学习之路 一
  7. AI超人赛车手狂虐人类登Nature封面!1000台PS4训练,「苏菲」极限超车独霸赛道...
  8. 狄利克雷过程(Dirichlet Process)
  9. 吴恩达神经网络和深度学习-学习笔记-28-端到端的深度学习(end-to-end deep learning )
  10. 基于stm32智能风扇_意法半导体和Fieldscale为基于STM32的智能设备带来简单直观的触控体验...
  11. 配置Eureka-client报EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT...
  12. 【历史上的今天】5 月 25 日:雅虎与 eBay 联盟;第一次国际万维网会议;Google 街景发布
  13. lof基金溢价率php源码,一文读懂LOF基金套利策略 LOF是球友们很喜欢的一类基金,这类基金不仅可以在场内进行高效买卖,而且还可以进行折溢价套利。不过这里面牵扯到很多细节,... - 雪球...
  14. CSDN BLOG技术专家群工作平台发布公告
  15. sql 一张表递归_查看我的递归视觉指南(因为一张图片价值1,000字)
  16. win10系统启用老版windows照片查看器
  17. 展现AI与自动化测试技术之间的神奇化学反应
  18. 160个crackme 持续更新(1\2\3\4\6\8\9)
  19. 解决cannot resolve directory问题
  20. Spring Boot 1.0 升级到 2.0 的时候遇到一些问题

热门文章

  1. 西安创新港信息科技有限公司简介
  2. 读《平凡的世界》后感 (二)
  3. 小程序云开发内容审核
  4. 小米2A_2012121_官方线刷包_救砖包_解账户锁
  5. 《英雄联盟》要破产?拳头公司把服务器都卖了……
  6. 年轻人成为修谱主力军,数字化家谱搭建起家族文化传承的桥梁
  7. 活动公告|万圣节惊喜派对~
  8. 什么是static?
  9. 一个感叹号,2个感叹号,3个感叹号的含义与作用
  10. 思科模拟器Cisco Packet Tracer交换机划分VLAN配置