linux kernel物理内存概述(二)

目录

物理内存数据结构

设备数物理内存描述

物理内存映射

map_kernel

map_mem

zone数据结构 

zone类型


物理内存数据结构

  • 站在处理器角度,管理物理内存的最小单位是页面。使用page数据结构描述,通常默认大小4kB,采用mem_map[]数组来存放这些page数据结构,数组与物理内存由一一对应关系。

设备数物理内存描述

  • 在设备树dts中,定义内存的起始地址,大小 如VExpress平台 ;qemu虚拟机内存的描述在 hw/arm/virt.c文件中
    memory@60000000{device_type = "memory";reg = <0x60000000 0x40000000>;}

dts文件的解析 start_kernel->setup_arch->setup_machine_fdt->early_init_dt_scan_nodes->early_init_dt_scan_memory

void __init early_init_dt_add_memory_arch(u64 base, u64 size)
{int in_use = 0;low_mem_sz = size;in_use = 1;memblock_add_node(base, size, 0, MEMBLOCK_NONE);
}

memblock_add_node添加到memblock子系统中

物理内存映射

在内核使用之前,需要初始化内核页表,paging_init 函数完成,主要做两次映射,map_kernel与map_mem

void __init paging_init(void)
{pgd_t *pgdp = pgd_set_fixmap(__pa_symbol(swapper_pg_dir));map_kernel(pgdp);map_mem(pgdp);
}

都是建立物理地址到内核虚拟地址的线性映射,但映射的地址不一样

map_kernel
  1. map_kernel映射内核镜像到内核空间的虚拟地址 该函数对内核映像的各个段分别进行映射,映射的内核空间虚拟地址为vmalloc区域; vmalloc区域的范围从0xFFFF 0000 1000 0000 到 0xFFFF 7DFF BFFF 0000
    • 代码段:从_text到_etext
    • 只读数据段:从__start_rodata到__inittext_begin;
    • 初始化代码段:
    • 初始化数据段:
    • 数据段:从_data到_end
map_mem
  1. map_mem做物理内存的线性映射。 映射三段物理内存到线性映射区。线性映射区的范围从0xFFFF 8000 0000 0000 到0xFFFF FFFF FFFF FFFF,大小为128TB 为什么把第三段物理内存单独拿出来映射? 这三段物理内存都会被映射到 不可执行 的属性,但是后续代码里把第三段映射的属性设置成 只读 ,防止后续的其他内核模块不经意地修改了代码,如CPU休眠机制。另外,第一段和第二段映射启用了连续页表属性(PTE_CONT),单独把第三段映射拎出来可以避免连续页表特性映像第三段的映射。

对页表的初始化完成后,内核可以对内存进行管理,内核采样zone管理区来管理。

zone数据结构 

struct zone {/* Read-mostly fields *//* zone watermarks, access with *_wmark_pages(zone) macros */unsigned long _watermark[NR_WMARK];//每个zone在系统启动时会计算出3个水位,最低警戒水位,低水位和高水位,在页面分配器和kswapd页面回收中用到unsigned long watermark_boost;unsigned long nr_reserved_highatomic;long lowmem_reserve[MAX_NR_ZONES];//防止页面分配器过度使用低端zone的内存#ifdef CONFIG_NUMAint node;
#endifstruct pglist_data	*zone_pgdat;//指向内存节点struct per_cpu_pages	__percpu *per_cpu_pageset;struct per_cpu_zonestat	__percpu *per_cpu_zonestats;int pageset_high_min;int pageset_high_max;int pageset_batch;#ifndef CONFIG_SPARSEMEM/** Flags for a pageblock_nr_pages block. See pageblock-flags.h.* In SPARSEMEM, this map is stored in struct mem_section*/unsigned long		*pageblock_flags;
#endif /* CONFIG_SPARSEMEM *//* zone_start_pfn == zone_start_paddr >> PAGE_SHIFT*/unsigned long		zone_start_pfn;//起始页帧号atomic_long_t		managed_pages;//被伙伴系统管理的页面数量unsigned long		spanned_pages;//zone包含的页面数量unsigned long		present_pages;//实际管理的页面数量
#if defined(CONFIG_MEMORY_HOTPLUG)unsigned long		present_early_pages;
#endif
#ifdef CONFIG_CMAunsigned long		cma_pages;
#endifconst char		*name;...atomic_long_t		vm_stat[NR_VM_ZONE_STAT_ITEMS];atomic_long_t		vm_numa_event[NR_VM_NUMA_EVENT_ITEMS];
} ____cacheline_internodealigned_in_smp;

  • zone经常被访问到,因此数据结构使用L1高速缓存对齐;CACHELINE_PADDING 为了性能,填充对齐空间
zone类型

内核的zone分为ZONEDMA、ZONEDMA32、ZONENORMAL和 ZONEHIGHMEM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习java第一天(下载并配置环境+写第一个java程序)

一.安装 1.下载 直接去官网上选择与你电脑符合的版本下载 官网链接Java Archive Downloads - Java SE 8u211 and later &#xff08;拿我的为例 Windows x64版本&#xff09; ​ 2.然后安装好exe&#xff08;要让自己知道在哪&#xff09; 3.配置环境 大佬链接&#xff1…

“每一次的感应,都是对环境的温柔拥抱。”#STM32项目二 《感应开关盖垃圾桶》【上】

“每一次的感应&#xff0c;都是对环境的温柔拥抱。”#STM32项目二 《感应开关盖垃圾桶》【上】 前言预备知识1.定时器介绍11.1软件延时的优缺点1.2定时器工作原理1.3定时器的分类1.4 STM32F103C8T6定时器资源1.5通用定时器介绍 2.定时器介绍22.1定时器计数模式2.2定时器时钟源…

【VTKExamples::PolyData】第四十六期 Reflection

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例Reflection,并解析接口vtkReflectionFilter,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. Reflection …

Docker容器详解

一、概述 1.1 基本概念&#xff1a; Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚…

SpringCloud 各自组件的停更/升级/替换

一、停更不停用 现在 SpringCloud 不再修复 bug&#xff0c;也不再接收合并请求&#xff0c;也不再发布新版本&#xff0c;但是目前还是可以继续使用的。 二、以前的组件 以前 SpringCloud 常用的组件如下图&#xff0c;服务的注册和发现使用 Eureka&#xff0c;服务的负载和调…

深入理解c指针(七)

目录 十、回调函数和qsort函数 1、回调函数 2、简单介绍size_t 数据类型 3、qsort 排序函数 3.1 qsort函数简单举例1&#xff08;升序排序&#xff09; 3.2 qsort函数简单举例2&#xff08;字符串长度排序&#xff09; 3.3 简单讲解 -> 操作符 3.4 常见符号的ASCII…

如何利用会话式AI提升你的工作效率?

会话式AI如何改变我们的生活和工作 在当今时代&#xff0c;内容策略的重要性日渐凸显&#xff0c;良好的内容策略能够与流量及转化率紧密相连&#xff0c;成为企业在内容策略领域不容忽视的营销工具之一。 然而&#xff0c;目前内容同质化现象严重&#xff0c;企业若想在内容营…

iPaas数据传输的方式

一、iPaas平台概述 iPaas&#xff08;Integration Platform as a Service&#xff09;平台&#xff0c;作为一种先进的云计算服务模式&#xff0c;为开发者和企业提供了一种全面且灵活的应用集成解决方案。它构建在PaaS&#xff08;Platform as a Service&#xff09;基础之上…

【C++庖丁解牛】初始化列表 | Static对象 | 友元函数

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1. 再谈构造函数1.1 …

WiFi模块赋能智能手表:拓展功能与提升连接性

随着科技的不断进步&#xff0c;智能手表正逐渐成为现代人生活中不可或缺的智能配饰。其中&#xff0c;WiFi模块的应用为智能手表带来了更多强大的功能和更高的连接性&#xff0c;为用户提供了更为便捷、智能化的使用体验。本文将深入探讨WiFi模块在智能手表中的应用。 远程通信…

RK DVP NVP6158配置 学习

NVP6158简介 NVP6158C是一款4通道通用RX&#xff0c;提供高质量图像的芯片。它接受来自摄像机和其他视频信号的独立4通道通用输入来源。它将4通道通用1M至8M 7.5P视频格式数字化并解码为代表8位ITU-R BT.656/1120 4:2:2格式的数字分量视频&#xff0c;并将单独的BT.601格式与27…

40个Python字符串实例

Python 字符串是 Python 编程语言中最常用的数据类型之一&#xff0c;它可以表示文本或一组字符。Python 中的字符串是不可变的序列&#xff0c;意味着一旦创建&#xff0c;其值就不能被修改。下面是一些关于 Python 字符串的介绍。 概述 创建字符串&#xff1a;可以使用单引…

如何找回删除的文件?5个数据恢复方法

电脑已经成为我们生活和工作不可或缺的一部分。然而随着电脑使用频率的增加&#xff0c;误删文件的情况也时有发生。一旦重要的文件被误删&#xff0c;很多人会感到惊慌失措。实际上只要掌握了一些有效的数据恢复方法&#xff0c;就有可能找回那些被误删的文件。本文将为你介绍…

指针中的回调函数与qsort的深度理解与模拟

今天给大家在更新一下指针类型的知识&#xff0c;这里讲到了一个库函数sqort&#xff0c;以及回调函数的理解。 望喜欢 目录 回调函数 qsort函数 qsort模拟实现 回调函数 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数…

Mac清理电脑垃圾工具CleanMyMac X4.15中文免费版下载

嘿&#xff0c;亲爱的Mac用户们&#xff0c;你们是否曾经想象过你的电脑是一座美丽的城市&#xff0c;而垃圾文件则是那些不速之客&#xff0c;悄悄堆积&#xff0c;影响着城市的整体美观。今天&#xff0c;我们就来聊聊Mac为什么会产生垃圾文件&#xff0c;这些垃圾文件会对你…

【科研基础】插图摘录

FedSL: Federated Split Learning for Collaborative Healthcare Analytics on Resource-Constrained Wearable IoMT Devices Blockchain-Based Trustworthy and Efficient Hierarchical Federated Learning for UAV-Enabled IoT Networks

机械五要素手持气象站的应用

TH-SQ5在数字化和智能化的时代背景下&#xff0c;气象监测技术正日益成为众多行业不可或缺的利器。其中&#xff0c;机械五要素手持气象站以其便携性、实时性和多功能性受到了广泛关注。下面讲解一下手持气象站是什么以及应用&#xff1a; 一、机械五要素手持气象站概述 机械五…

白酒:制曲工艺的环境因素与微生物生态关系

在豪迈白酒的酿造过程中&#xff0c;制曲工艺是非常关键的一环。而环境因素与微生物生态关系对于制曲工艺的成功与否起着决定性的作用。云仓酒庄深谙此道&#xff0c;在制曲过程中注重环境因素的调控&#xff0c;并深入研究微生物生态关系&#xff0c;以提升豪迈白酒的品质和风…

【Java EE 】认识文件与Java文件操作

目录 &#x1f340;认识文件&#x1f338;树型结构组织 和 目录&#x1f338;文件路径&#xff08;Path&#xff09;&#x1f338;其他知识 &#x1f333;Java 中操作文件&#x1f338;File 概述&#x1f33b;属性&#x1f33b;构造方法&#x1f33b;方法 &#x1f338;代码示例…

【论文精读】I-JEPA

摘要 计算机视觉中&#xff0c;常采用基于不变性和基于生成的方法进行自监督学习。对比学习&#xff08;CL&#xff09;是典型的基于不变性的方法&#xff0c;通过预训练方法优化编码器&#xff0c;使其能生成同一图像的两个或多个视图的相似嵌入&#xff0c;其中图像视图通常由…