50 vmalloc 的实现
前言
这里说的是 内核中分配按页分配的场景
常用于 驱动什么的, 分配 中大型空间
由于 连续的 n 个页是分别使用 alloc_pages 分配的, 因此是 虚拟地址空间连续, 但是 物理地址空间不连续
如何分配对象
两个步骤, __get_vm_area_node 获取为 size 分配的 vma 区间, 然后 __vmalloc_area_node 为给定的 vma 分配 n 个物理页

首先是定位查询可用空间的起点
free_vmap_cache 的作用是顺序分配的时候快速的定位 first
否则需要从 vmap_area_root 开始, 找到第一个大于 vmalloc 区间的 vma, 然后开始向后查询, 如果没有找到 使用 vstart 作为起始地址[vmalloc区间的第一块空间]
从 first 开始向后查询, 查询第一块空闲的可以容下 size 的空间, 来分配空间
如果是遍历到 vmap_area_list[是维护了虚拟地址顺序的] 的末尾, 以最后一块 vma 的 end 作为起始地址
找到空间 之后判断是否 overflow, 如果 overflow 走清理空间, 然后重试的处理
然后以 [addr, addr+size)作为当前待分配的 vma 的空间, 然后将 vma 添加到 vmap_area_root 上面, 以及将添加到 vmap_area_list 中[按照虚拟地址排序]


purge_vmap_area_lazy
寻找 vmap_purge_list 的地址空间的区间, 如果没有待释放的 vma, 直接返回
否则 以此 __free_vmap_area, 更新统计信息

从 vmap_area_root 中删除当前 vma, 从 vmap_area_list 中删除当前 vma

__vmalloc_area_node 计算 size 所需要的物理页的数量
然后循环 alloc_pages 分配物理页, 并和 vma 建立关联, 注册页表关联 等等

如何释放空间
remove_vm_area 为将 addr 对应的 vma 添加到 vmap_purge_list, 移除相关注册的 页表关联
__free_pages 清理掉关联的相关物理页
真实的 vma 相关数据的清理是在 xxx_purge_vmap_area_xx 相关函数中具体去实现

将当前 vma 添加到 vmap_purge_list, 如果超过了 阈值, 则直接 try_purge_vmap_area_lazy 清理空间
否则是在 分配空间的时候, vma 不够的时候 会 purge_vmap_area_lazy 清理空间

完
相关文章:
50 vmalloc 的实现
前言 这里说的是 内核中分配按页分配的场景 常用于 驱动什么的, 分配 中大型空间 由于 连续的 n 个页是分别使用 alloc_pages 分配的, 因此是 虚拟地址空间连续, 但是 物理地址空间不连续 如何分配对象 两个步骤, __get_vm_area_node 获取为 size 分配的 vma 区间, 然后…...
程序员的金三银四求职宝典!
目录 编辑 程序员的金三银四求职宝典 一、为什么金三银四是程序员求职的黄金时期? 二、如何准备金三银四求职? 1. 完善简历 2. 增强技术能力 3. 提前考虑目标公司 4. 提前准备面试 三、程序员求职的常见面试题 1. 数据结构和算法 2. 数据库 …...
day04_拦截器Apifox角色管理(登录校验,API接口文档,权限管理说明,角色管理,添加角色,修改角色,删除角色)
文章目录 1. 登录校验1.1 需求说明1.2 实现思路1.3 ThreadLocal1.4 AuthContextUtil1.5 拦截器使用1.5.1 拦截器开发1.5.2 拦截器注册 1.6 代码优化1.6.1 配置优化1.6.2 代码优化1.6.3 前端修改 2. API接口文档2.1 Apifox接口管理平台2.1.1 接口管理平台简介2.1.2 Apifox简介2.…...
在线上传解压PHP文件代码,压缩/压缩(网站一键打包)支持密码登录
在线上传解压PHP文件代码,压缩/压缩(网站一键打包)支持密码登录 资源宝分享:www.httple.net 如果你没有主机控制面板这个是最好选择,不需要数据库,上传当控制面板使用,无需安装任何扩展,安全高,…...
【刷题】模拟
模拟算法:题目中已经告诉应该怎么做了,只需要模拟即可,思路比较简单,比较考察代码能力。 一般先在草稿纸上模拟流程,如果直接写代码,容易忽视细节,并且不容器调试! 优化策略&#…...
【打工日常】使用docker部署在线Photopea用于linux下替代ps
一、Photopea介绍 linux没有ps适配,对于有时候工作来说确实不方便,我找了很久,才找到了一款功能可以跟ps接近的在线软件,使用docker部署就可以了。它是ps的最佳替代品之一,其界面几乎与ps相同,只不过它是在…...
leetcode 热题 100_盛最多水的容器
题解一: 双指针遍历:容量计算公式为min(左高度,右高度)*底部距离,我们可以令底部距离逐步递减(左右两边的指针向中部移动)。此时对于min(左高度,右高度),假设较高的线向中部移动&…...
基本正则表达式
基本正则表达式 正则命令功能^尖角号,用于模式的最左侧,如“^oldbpy",匹配以oldboy单词开头的行$美元符,用于模式的最右侧,如"oldboy$",表示以oldboy单词结尾的行^$组合符&…...
sqlserver保存微信Emoji表情
首先将数据库字段,设置类型为 nvarchar(200)一个emoji表情,占4字节就可以了,web前端展示不用改任何东西,直接提交数据保存;回显也会没有问题,C#代码不用做任何处理; 不哭不闹要睡觉ἱ…...
网络编程 io_uring
io_uring 1、概述 io_uring是Linux(内核版本在5.1以后)在2019年加入到内核中的一种新型的异步I/O模型; io_uring使用共享内存,解决高IOPS场景中的用户态和内核态的切换过程,减少系统调用;用户可以直接向…...
Java中的static
Java中的static 同一个类的静态变量共享同一个内存空间,即静态变量也就是被 static 关键字修饰的变量。它可以被类的所有实例共享,无论一个类创建了多少个对象,它们都共享同一份静态变量。从变量在内存中的存储方式来看,如果成员…...
如何在群晖Docker运行本地聊天机器人并结合内网穿透发布到公网访问
文章目录 1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 随着ChatGPT 和open Sora 的热度剧增,大语言模型时代,开启了AI新篇章,大语言模型的应用非常广泛,包括聊天机…...
lv20 QT进程线程编程
知识点:启动进程 ,线程 ,线程同步互斥 1 启动进程 应用场景:通常在qt中打开另一个程序 process模板 QString program “/bin/ls"; QStringList arguments; arguments << "-l" << “-a";QPro…...
什么是机器人学习?
机器人学习是一种涉及人工智能和机器人技术的领域,旨在使机器人能够从经验中学习和改进其性能。通过模仿人类的学习过程,机器人可以通过不断地接收和分析信息来提高自己的技能和表现。机器人学习可以分为监督学习、无监督学习和强化学习等不同类型&#…...
裸机程序--时间片调度
1.为什么自己写一个时间片调度呢 a. 网上其实有很多成熟的时间片调度例程, 包括我最开始参加工作也是抄的网上的例程(还记得当时领导问我看明白了它的调度原理吗, 作为一个自学刚参加工作的我来说, 看懂别人的意思真的很难, 当时只能含糊其词的说看得差不多) b. 在我看来网上的…...
【web APIs】5、(学习笔记)有案例!
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、js组成window对象定时器-延迟函数location对象navigator对象histroy对象 二 、本地存储(今日重点)localStorage(重点&am…...
【刷题1】LeetCode 994. 腐烂的橘子 java题解
tag:图论 广度优先搜索 https://leetcode.cn/problems/rotting-oranges/description/?envTypestudy-plan-v2&envIdtop-100-liked 使用广度优先搜索,搜索步数就是分钟数,等到所有橘子都腐烂后,各个橘子腐烂的最长分钟数就是全部都烂的最小…...
Java的运行机制与Java开发环境的搭建
1.编译和执行 首先通过文本编辑器编写源程序(后缀为.java),再利用编译器编译成字节码文件(后缀为.class),最后利用虚拟机也叫解释器解释执行。 2.JVM、JRE和JDK的区别 简单来说, ①JVM 提供了运行 Java 程…...
【Java】面向对象之多态超级详解!!
文章目录 前言一、多态1.1 多态的概念1.2 多态的实现条件1.3 重写1.3.1方法重写的规则1.3.2重写和重载的区别 1.4 向上转型和向下转型1.4.1向上转型1.4.2向下转型 1.5 多态的优缺点1.5.1 使用多态的好处1.5.2 使用多态的缺陷 结语 前言 为了深入了解JAVA的面向对象的特性&…...
react 路由的基本原理及实现
1. react 路由原理 不同路径渲染不同的组件 有两种实现方式 ● HasRouter 利用hash实现路由切换 ● BrowserRouter 实现h5 API实现路由切换 1. 1 HasRouter 利用hash 实现路由切换 1.2 BrowserRouter 利用h5 Api实现路由的切换 1.2.1 history HTML5规范给我们提供了一个…...
AWR2243数据采集实战:从硬件连接到软件配置的避坑指南
1. AWR2243与DCA1000硬件连接详解 第一次接触毫米波雷达开发板时,看到AWR2243和DCA1000这两块板子确实有点懵。我清楚地记得自己第一次接线时,把电源接口和以太网口搞混的尴尬场景。下面我就用最直白的语言,把硬件连接的关键点说清楚。 首先是…...
腾讯云轻量2核2G Ubuntu 服务器配置 + Xshell 连接服务器
购买成功会跳转到这个页面一、第一步:放行防火墙端口(必做!否则连不上、访问不了) 我们现在在服务器列表页,必须先开放端口,否则 Xshell 连不上、项目也访问不了。 1. 进入防火墙设置 点击截图箭头指向的 「…...
深度学习基于YOLOv11+pyqt5的农作物识别检测系统 智慧农业CWC数据集 包含蓝草、藜、刺菜、玉米、莎草、棉花、茄属植物、番茄、天鹅绒、生菜、萝卜,11类农作物
智慧农业基于YOLOv11pyqt5的农作物识别检测系统内含CWC数据集 包含蓝草、藜、刺菜、玉米、莎草、棉花、茄属植物、番茄、天鹅绒、生菜、萝卜,11类农作物 也可自行替换模型,使用该界面做其他,实现检测目标自定义完整源码源文件已标注的数据集训…...
Android集成chineseocr_lite实战:4.7M超轻量级中文OCR完整指南
Android集成chineseocr_lite实战:4.7M超轻量级中文OCR完整指南 【免费下载链接】chineseocr_lite 超轻量级中文ocr,支持竖排文字识别, 支持ncnn、mnn、tnn推理 ( dbnet(1.8M) crnn(2.5M) anglenet(378KB)) 总模型仅4.7M 项目地址: https://gitcode.…...
Dips实战指南:极坐标投影在结构面分析中的关键应用
1. 极坐标投影在结构面分析中的核心价值 第一次接触Dips软件时,我被它处理结构面数据的独特方式震撼了。传统直角坐标系下杂乱无章的测量数据,转换到极坐标系后突然呈现出清晰的规律性。这种转变就像把一堆散落的拼图块重新排列,瞬间显现出完…...
思源宋体CN:7种字重完全免费的专业中文字体解决方案
思源宋体CN:7种字重完全免费的专业中文字体解决方案 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为专业设计中的字体选择而烦恼吗?Source Han Serif CN&…...
终极Scroll Reverser指南:彻底解决Mac多设备滚动冲突问题
终极Scroll Reverser指南:彻底解决Mac多设备滚动冲突问题 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 还在为Mac触控板和外接鼠标的滚动方向冲突而烦恼吗…...
花了几百万办完一场AI大会后,想跟你分享这6个感悟。
AIFUT结束了。两天,四场,1500多人,几十位嘉宾,从早上9点到下午6点,线上观众有将近200万,展区还是有几千人前来体验。然后就这么过完了,结束的晚上,我跟伙伴们在聚餐,办庆…...
2025年Scratch图形化编程三级考试真题解析与备考策略
1. 2025年Scratch三级考试真题深度解析 最近帮几个小朋友准备Scratch三级考试,发现很多孩子做题时容易陷入"看着会做但总选错"的困境。就拿2025年6月这套真题来说,表面看都是基础题,但每道题都藏着几个易错点。比如第一题的多边形绘…...
多尺度特征融合在计算机视觉中的实践与优化
1. 多尺度特征融合的核心价值与应用场景 第一次接触多尺度特征融合是在处理医疗影像分割项目时遇到的难题。当时我们的模型在识别大尺寸肿瘤时表现良好,但对微小病灶的检测率却惨不忍睹。这个问题困扰了我们团队整整两周,直到尝试了FPN(特征金…...
