Linux下虚拟空间的管理

unittest + HTMLTestRunner 生成测试报告:3种定制化方案与 Jenkins 集成指南 本文详细介绍了如何基于Python的unittest框架和HTMLTestRunner生成高度定制化的测试报告,并实现与Jenkins的持续集成。文章提供了三种定制化方案,包括基础增强型报告、深度定制化模板和全功能集成型报告,帮助提升自动化测试的可读性和问题定位效率。 阅读详情

如果说物理空间是从“供”的角度管理的,那么虚拟空间的管理就是从“需”的角度管理的。就是我们需要虚存空间的哪些部分。

一个进程所需要使用的虚拟空间中各个部位又未必是连续的,通常形成若干离散的虚存"区间"。在Linux内核中,对虚拟区间的就是vm_area_struct数据结构。

struct vm_area_struct
{
    struct mm_struct *vm_mm;        /* The address space we belong to. */
    unsigned long vm_start;         /* Our start address within vm_mm. */
    unsigned long vm_end;           /* The first byte after our end address
                                           within vm_mm. */
    ....
    /* linked list of VM areas per task, sorted by address */
    struct vm_area_struct *vm_next;
    ....
    /* describe the permissable operation */
    unsigned long vm_flags;
    /* operations on this area */
    struct vm_operations_struct * vm_ops;
    
    struct file * vm_file; /* File we map to (can be NULL). */
} ;


结构中的vm_start 和vm_end决定一个虚存空间。vm_start是包括在区间内的,而vm_end则不包括在区间内。区间的划分并不仅仅取决于地址的连续性,也取决于区间的其他属性,主要是对虚拟页面的访问权限。包含在同一个区间里的所有页面应该有相同的访问权限(或保护权限)和一些其它权限。这就是结构中的成分vm_page_porthe vm_flags的用途。 

属于同一个进程的所有区间都是按虚拟内存的高低次序链接在一起。(vm_next)

在vm_area_struct中还有一个指针vm_mm,该指针指向一个mm_struct数据结构;这是比vm_area_struct更高层次的数据结构。

struct mm_struct
{
    struct vm_area_struct *mmap;            /* list of VMAs */
    struct rb_root mm_rb;
    struct vm_area_struct *mmap_cache;      /* last find_vma result */
    ...
    unsigned long start_code, end_code, start_data, end_data;
    unsigned long start_brk, brk, start_stack;
    ...
};

mm_struct数据结构是整个用户空间的抽象。

第一个mmap用来建立一个虚拟区间结构的单链线性队列。

第二个mm_rb建立虚拟区间的红黑树。(红黑树的查找效率远大于单链表);

第三个mm_cache,用于指向最近一次用过的虚存区间结构。(程序运行的局部性原理,最近一次用到的区间很可能就是下一次要用的区间)。



当查找虚拟空间时,

find_vma(),先查找mm_cache,没有找到再从红黑树(或链表)中查找,找到后将mm_cache指针指向找到的vm_area_struct 。

如果find_vma()返回值为0,表示该地址所属区间还未建立。调用insert_vm_struct()将其插入到mm_struct中红黑树或链表中去。




告别AT指令手敲!用Python脚本一键配置ESP8266-01S连接阿里云物联网平台 本文介绍如何利用Python脚本自动化配置ESP8266-01S模块连接阿里云物联网平台,告别繁琐的AT指令手动输入。通过详细的硬件连接指南、Python串口通信基础及阿里云MQTT配置流程,开发者可快速实现设备联网与数据上报,显著提升物联网开发效率。 阅读详情

相关推荐

Linux内核--内存管理(六)补充--内核页表及内核虚拟空间

进程的虚拟地址空间分为用户地址虚拟空间和内核地址虚拟空间,每个进程的用户地址虚拟空间的页表项都不一样,但是每个进程的内核地址虚拟空间的页表项都是一样的,都是同一份内核页表,等于主内核全局目录相应的表项(内核的顶级页表)。

文艺小少年的博客 958

【超详细保姆级】解决Linux服务器根目录空间不足

关于根目录空间不足的四个方法,如果没有LVM格式的情况下,可以通过软链接进行;如果有LVM推荐减少其他分区空间来扩充根目录,或者通过增加硬盘的方式。如果不能增加硬盘,且其他分区也没有空间,可以考虑清空空间。

大鹏的博客 1万+

SHAP图全解析:从理论到实践,教你如何读懂和优化模型特征

本文全面解析SHAP图,从博弈论基础到实战应用,指导读者如何解读和利用SHAP值优化机器学习模型。通过详解特征重要性条形图、小提琴图、依赖图及决策图等关键可视化工具,帮助数据科学家精准诊断模型、识别特征交互,并将洞见转化为特征工程与模型调试的实际行动,有效提升模型可解释性与性能。

svm4gardener的博客 189

linux系统清理磁盘空间

linux系统清理磁盘空间

学英语的程序员 1万+

从Protocol到硬件控制:揭秘高通UEFI中ABL与XBL的协作机制

本文深入解析了高通UEFI架构中ABL与XBL的协作机制,重点探讨了Protocol通信在硬件控制中的关键作用。通过对比传统GPIO控制方式,揭示了Protocol架构在安全性、可维护性和灵活性方面的优势,并提供了关机充电场景的实战案例分析及调试技巧。

weixin_29185199的博客 431

Qt6.5.1+WebRTC学习笔记(十二)环境搭建流媒体服务器(ubuntu22.04+SRS)

若只是实现一对一通信,仅使用webrtc就足够了。但有时间需要进行多个人的直播会议,当人比较多时,建议使用一个流媒体服务器,笔者使用的是SRS。这个开源项目资料比较全,笔者仅在此记录下搭建过程。

aggs1990的专栏 3364

用户态内存映射 与 mmap()

mmap 的原理 在虚拟地址空间那一节,我们知道,每一个进程都有一个列表 vm_area_struct,指向虚拟地址空间的不同的内存块,这个变量的名字叫mmap。 struct mm_struct { struct vm_area_struct *mmap; /* list of VMAs */ ...... } struct vm_area_struct { /* * For areas with an address space and backing store, * li

一蓑烟雨任平生 848

解密携程风控:user-dun算法中的自定义base64与多模式加密机制剖析

本文深入剖析了携程旅行APP风控核心组件libduncode.so中的user-dun算法。文章重点解密了其采用的自定义Base64编码机制与多模式加密选择逻辑,并详细阐述了如何通过动态分析与静态还原,理解算法与设备指纹的深度绑定关系,为逆向分析类似混淆加固的风控算法提供了系统的方法论。

weixin_29323049的博客 340

Linux进程调度切换和虚拟空间管理深入分析

<br /><br />Linux进程调度切换和虚拟空间管理深入分析一、Linux进程切换深入分析<br />#define CLONE_KERNEL    (CLONE_FS | CLONE_FILES | CLONE_SIGHAND)<br />创建内核线程时使用的CLONE标志。1.#define unlikely(x)    __builtin_expect(!!(x), 0)<br />编译器优化,实际返回值x是整型表达式,0表示并不预期该事件发生,也就是说x为0的可能性很小,这是为了让编译

Full Stack Engineer 3821

ANSYS Workbench实战:用网格自适应搞定超弹性橡胶大变形仿真(附避坑命令流)

本文深入探讨了ANSYS Workbench中超弹性橡胶大变形仿真的网格自适应技术,重点解析了混合U-P单元的应用、非线性自适应网格的实战技巧及材料模型选择的注意事项。通过具体案例和命令流示例,帮助工程师有效解决橡胶仿真中的收敛问题和网格畸变挑战,提升仿真精度和效率。

weixin_42666036的博客 303

从CT扫描到3D模型:手把手教你用NII文件在3D Slicer中重建脊柱(附Verse数据集实战)

本文详细介绍了如何利用NII文件在3D Slicer中从CT扫描数据重建脊柱3D模型的全流程,包括环境配置、数据获取、方向校准、结构分割和模型优化等关键步骤。通过Verse数据集实战演示,帮助医学从业者快速掌握医学图像处理技术,提升临床诊疗与教学效率。

weixin_42651281的博客 203

Linux内存管理:从物理页到虚拟空间的魔法

在计算机的世界里,内存管理如同一位精明的空间规划师,将有限的物理内存转化为无限的虚拟空间。Linux内核的内存管理系统堪称**工程艺术的巅峰之作**,它不仅要处理TB级物理内存的分配,还要为每个进程创建独立的虚拟宇宙。本章将深入Linux 6.x内存子系统,揭示其如何实现**纳秒级分配**与**TB级扩展**的魔法。

SEU123WW的博客 1112

为YOLO11更换Backbone(一):轻量化之星GhostNet

摘要: 本文重点介绍了轻量化Backbone网络GhostNet及其在YOLO11中的应用。首先分析了Backbone网络在目标检测中的重要性,指出其需平衡特征提取能力和计算效率的需求。然后详细解析了GhostNet的核心思想,包括其通过"幽灵模块"生成冗余特征的设计原理,该模块使用1×1卷积生成少量内在特征,再通过廉价线性变换生成更多幽灵特征,显著降低了计算量。GhostNet的创新设计使其在保持精度的同时大幅减少了参数和FLOPs,为YOLO11等目标检测模型提供了高效的轻量化解决方

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1498

linux进程虚拟空间的管理

简说linux进程虚拟空间管理

weixin_40822211的博客 192

《网络安全自学教程》- Nmap使用及扫描原理分析

使用Nmap进行端口扫描、主机发现、服务识别、操作系统识别、指定脚本、结果导出文件,使用wireshark抓包分析扫描原理。

wangyuxiang946的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

linux虚拟机空间管理,linux虚拟空间使用教程

Directadmin(DA面板)美国虚拟主机/香港虚拟空间管理面板使用方法Directadmin容易使用,是很受用户欢迎的虚拟主机控制系统。后台管理功能很多,不一一解说,只说说我们常用的几项功能。通过九零起航(网址:www.90qh.com),会员中的“主机管理"登录Directadmin界面,如下图一、文件管理器:可以在线上传、解压缩、下载、编辑文件等。点击界面中的文件管理器进入:(publi...

weixin_39793638的博客 198

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

linux驱动开发(6)-内核虚拟空间管理

此时就可以使用per-CPU变量,让系统中每个处理器都使用独属于自己的该变量的副本,这样在变量更新时就无须考虑多处理器的锁定问题,可以提高性能。实际代码中ioremap还有一些相关的变体,包括ioremap_nocache、ioremap_cached等,这些变体的主要功能是通过加入一些映射标志位来影响相关内核页表项的设置,比如设备驱动程序中最常用的ioremap_nocache,就是通过清除页表项中的C(ache)标志[插图],使得处理器在访问这段地址时不会被cache,这对外设空间的地址是非常重要的。

yyc的博客 1407

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java虚拟空间

今天在网上找了一个linux的虚拟空间,然后把原来做的一个项目挂上去了,感觉还不错,感觉一时学到了好多东西, 不过注意的事项很多: 1,挂载到别人的服务器上面就不要用绝对路径了,或者去获得绝对路径或者是相对路径,方法如下: 绝对路径:application.getRealPath(); 相对路径:request.getContextPath(); 2,注意数据库的编码问题,在别人的服务上

一只独孤的程序猿 1794

Linux源代码阅读笔记-内存管理

1.  内存管理1.  综述为了与intel 8086 实地址(real mode)操作兼容,继续保持段地址模式。段地址模式中使用几个关键的段寄存器,如:CS, DS, SS, ES, 在80386模式下增加了FS, GS。这些段寄存器在保护模式下作用与实模式下根本不同,在保护模式下是作为GDT(全局描述苻表)的下表,在保护模式下,段描述保存在描述府表中,起地址保存在CPU的GDTR寄存器中,这个

cglin的专栏 1500

Linux内核中内存管理的艺术从物理页面到虚拟空间的精妙舞蹈

伙伴系统将空闲页面按2的幂次方大小分组,分配时寻找合适大小的块,回收时则检查其“伙伴”是否空闲以便合并成大块,这有效地减少了外部碎片,如同一名娴熟的拼图大师,将零散的空间整理得井然有序。对于可以被重新生成的页面(如进程的只读代码段,或已被写入交换空间的匿名页),内核会将它们换出到磁盘上的“交换分区”或“交换文件”中,这个过程称为“交换”。CMA在系统启动时预留一片连续的物理内存区域,平时允许内核的移动页面分配器使用它,但当设备驱动需要分配连续内存时,CMA可以回收这些页面,将它们组合成连续块分配给设备。

TimmyZ的专栏 347

Linux内核中内存管理机制的变革从物理内存到虚拟空间的演进

Linux内核内存管理的演进史,是一部从直面物理硬件到构建精妙抽象的奋斗史。它从一个简单的物理内存分配器,成长为一个能够处理复杂工作负载、适应多样硬件平台、具备强大隔离能力的成熟虚拟内存系统。每一次变革都是为了解决特定时代的核心矛盾,无论是早期的多进程隔离,中期的资源高效利用,还是现代的大规模可扩展性和异构硬件支持。这一演进过程充分体现了Linux内核开放、务实和持续创新的精神,也预示着未来它将继续演进,以应对诸如人工智能、物联网等新兴领域带来的挑战。

weixin_49922638的博客 306

linux内存管理学习方法,Linux学习心得——内存管理方法.pdf

Linux 学习心得——内存管理总结目录1. 概述32. 物理空间/虚拟空间32.1 物理空间32.1.1 物理空间概述32.1.2 Linux 内核分配的物理内存62.2 虚拟空间82.2.1 内核虚拟空间92.2.2 进程虚拟空间 112.3 物理空间和虚拟空间的转换 143. 内核使用内存 153.1 内核...

weixin_28738021的博客 156

轻松理解操作系统 - Linux内存管理第二话:从用户角度讲内核怎么管理自己的虚拟内存

轻松理解操作系统 - Linux内存管理第二话:从用户角度讲内核怎么管理自己的虚拟内存

H_P10的博客 1093

小白成长之路-Linux磁盘管理(二)

LVM 是 Logical Volume Manager(逻辑卷管理)的简写,它是 Linux 环境下对磁盘分区进行管理的⼀种机制;安装 Linux 操作系统时遇到的⼀个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空 间;普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小;随着 Linux 的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小,即动态调整磁盘容量,从而提高磁盘管理的灵活性。今天主要是卷的扩展,希望能帮到小伙伴们。

m0_70730767的博客 1079

Linux 内存管理 解析

用户空间对应进程,所以每当进程切换,用户空间就会跟着变化;而内核空间是由内核负责映射,它并不会跟着进程改变,是固定的。内核空间地址有自己对应的页表(init_mm.pgd),用户进程各自有不同的页表。     为了方便管理,虚拟空间被化分为许多大小可变的(但必须是4096的倍数)内存区域,这些区域在进程线性地址中像停车位一样有序排列。这些区域的划分原则是“将访问属性一致的地址空间存放在一起”,所

随便写写 505
上一篇: Linux面试小问题
下一篇: 越界访问
Rebirth__Man
博客等级 码龄9年 3粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值