长沙最好网站建设中山建设网站首页

张小明 2026/3/2 18:08:08
长沙最好网站建设,中山建设网站首页,长沙app开发报价,装修设计网站免费文章目录1. 前言2. 概述2.1 两级分页2.2 三级分页3. 参考资料1. 前言 限于作者能力水平#xff0c;本文可能存在谬误#xff0c;因此而给读者带来的损失#xff0c;作者不做任何承诺。 2. 概述 本文以 Linux 4.14.x 在 ARMv7 架构下#xff0c;分别对两级和三级分页进行…文章目录1. 前言2. 概述2.1 两级分页2.2 三级分页3. 参考资料1. 前言限于作者能力水平本文可能存在谬误因此而给读者带来的损失作者不做任何承诺。2. 概述本文以Linux 4.14.x在ARMv7架构下分别对两级和三级分页进行讨论。在讨论之前先假定4G虚拟地址空间按1G:3G划分中断向量位于4G虚拟地址最高地址位置(Vector High)一如下图2.1 两级分页在没有启用LPAE(Large Physical Address Extension)功能的情形下内核最多使用两级分页进行寻址。注意这里的最多表示有些情形下可以一级分页两级分页是上限。先上图Linux 下两级分页寻址过程如下仅用到TTBR0来存储第一级页表物理基址用来进行page table walk其值初始在__enable_mmu中设置后续会随着进程切换变化而TTBR1仅用来备份内核页表 swapper_pg_dir的物理地址其值在proc-v7-2level.S:v7_ttb_setup中设置在切换页表期间临时拷贝覆盖TTBR0避免非法的地址访问。来简单看一下上图形成的过程。先看TTBR0TTBR1初始化过程__v7_ca7mp_setup:...__errata_finish:mov r10,#0...#ifdefCONFIG_MMU.../* * r10 0 * r8 内核页表 swapper_pg_dir 物理基址 */v7_ttb_setup r10,r4,r5,r8,r3 TTBCR,TTBRx setup...#endif.macro v7_ttb_setup,zero,ttbr0l,ttbr0h,ttbr1,tmp// TTBCR 0mcr p15,0,\zero,c2,c0,2 TTB controlregisterALT_SMP(orr \ttbr0l,\ttbr0l,#TTB_FLAGS_SMP)// \ttbr0l | TTB_FLAGS_SMP (r4 | TTB_FLAGS_SMP)...ALT_SMP(orr \ttbr1,\ttbr1,#TTB_FLAGS_SMP)// \ttbr1 | TTB_FLAGS_SMP (r8 | TTB_FLAGS_SMP)...// TTBR1 swapper_pg_dir 页表物理地址mcr p15,0,\ttbr1,c2,c0,1 load TTB1.endmBOOT CPU上TTBCRTTBR0TTBR1从初始化如上分析。注意MMU是每 CPU的那自然TTBCRTTBR0TTBR1也是每 CPU的。在非BOOT CPU上除了TTBR0初始为idmap_pgd的物理地址外TTBR1仍然初始化为swapper_pg_dir页表物理地址这里就不做展开了。再简单看下内核lowmem的映射建立包括内核镜像区间start_kernel()setup_arch()paging_init()map_lowmem()map_lowmem()建立了lowmem的页表映射内核区间用1MB section大小进行映射只使用了一级映射正如前面提到的。接下来看下进程第一级页表的创建copy_process()copy_mm()dup_mm()mm_init()mm_alloc_pgd()pgd_alloc()/* * need to get a 16k page for level 1 */pgd_t*pgd_alloc(structmm_struct*mm){pgd_t*new_pgd,*init_pgd;pud_t*new_pud,*init_pud;pmd_t*new_pmd,*init_pmd;pte_t*new_pte,*init_pte;/* 分配页目录表(第一级页表)空间(表项为未配置状态) */new_pgd__pgd_alloc();if(!new_pgd)gotono_pgd;/* 页目录表(第一级页表)用户空间部分的所有表项清 0 */memset(new_pgd,0,USER_PTRS_PER_PGD*sizeof(pgd_t));/* * Copy over the kernel and IO PGD entries *//* 拷贝 内核空间页目录表映射表项 到新分配页目录表的内核空间映射部分 */init_pgdpgd_offset_k(0);memcpy(new_pgdUSER_PTRS_PER_PGD,init_pgdUSER_PTRS_PER_PGD,(PTRS_PER_PGD-USER_PTRS_PER_PGD)*sizeof(pgd_t));/* 清除新页目录表空间的 cache */clean_dcache_area(new_pgd,PTRS_PER_PGD*sizeof(pgd_t));returnnew_pgd;}最后看一下进程切换时的页表切换__schedule()context_switch()switch_mm_irqs_off()switch_mm()check_and_switch_context()voidcheck_and_switch_context(structmm_struct*mm,structtask_struct*tsk){unsignedlongflags;unsignedintcpusmp_processor_id();u64 asid;.../* TTBR0 TTBR1 swapper_pg_dir 物理地址 */cpu_set_reserved_ttbr0();...switch_mm_fastpath:/* 切换到目标进程 tsk 的页表: TTBR0 标进程 tsk 的页表 */cpu_switch_mm(mm-pgd,mm);}#definecpu_switch_mm(pgd,mm)cpu_do_switch_mm(virt_to_phys(pgd),mm)// cpu_v7_switch_mm2.2 三级分页在启用了LPAE(Large Physical Address Extension)功能的情形下内核最多使用三级分页进行寻址。照样先上图Linux 下三级分页寻址过程如下Linux 下三级分页寻址过程同时使用TTBR0和TTBR1进行page table walkTTBR1指向内核空间 1GB 页表物理基址且其值始终不会变化TTBR0用来存储每进程第一级页表物理基址。来简单看一下上图形成的过程。先看TTBR0TTBR1初始化过程和二级分页基本一致只不过TTBCRTTBR1设置是通过proc-v7-3level.S:v7_ttb_setup设置时TTBR1并不是指向内核页表swapper_pg_dir的物理首地址而是指向了第二级的最后一个 PMD 页表的物理首地址为啥这样来看看。三级分页使用Long-descriptor格式我们讨论的场景是1G:3G划分所以swapper_pg_dir包含的最后一个 PMD 页表刚好映射内核的1G空间。那为什么不让TTBR1指向swapper_pg_dir的物理首地址呢这和硬件的实现有关看一下相关原文简单来说在启用了LPAE(Large Physical Address Extension)功能的情形下寻址内核 [0xC0000000, 0xFFFFFFFF] 空间时从第二级 PMD 页表开始 page table walk 的过程这就是TTBR1指向最后一个第二级 PMD 页表的原因。寻址时VA的 PGD Index 部分可以不用关心了因为确定寻址的内核空间。Linux 下三级分页的进程第一级页表的创建和页表切换过程和二级分页基本相同这里就不再赘述了。3. 参考资料[1] DDI0406C_d_armv7ar_arm.pdf[2] TLB原理
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

全美网站建设公司网页设计电子版教材

【奶茶Beta专项】【LVGL9.4源码分析】09-core-global全局核心管理 1 概述1.1 文档目的1.2 代码版本与范围 2 设计意图与总体定位2.1 lv_global 在 LVGL 中扮演的角色2.2 全局上下文结构与访问方式2.3 与 lv_init/lv_deinit 以及对象系统的关系 3 使用方式与典型调用场景3.1 常规…

张小明 2026/1/20 10:17:22 网站建设

关于vi设计的网站公司网站包含哪些内容

第一章:Open-AutoGLM 体温数据记录在智能健康监测系统中,Open-AutoGLM 框架支持高精度、低延迟的体温数据采集与记录。该功能适用于可穿戴设备、远程医疗终端以及个人健康日志系统,能够实时捕获用户体温变化并安全上传至云端进行分析。数据采…

张小明 2026/1/20 10:16:52 网站建设

个人网站免费域名注册linux 搭建网站服务器

文章目录系统截图项目技术简介可行性分析主要运用技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统截图 Djangopython_wro6f5v 的短视频推荐系统的设计与实现基于 项目技术简介 Python版本&#xf…

张小明 2026/1/21 14:28:30 网站建设

天天向上做图网站html个人网站模板

url: /posts/010959c3420353370cba3b8af5b6fef1/ title: Vue3数组语法如何高效处理动态类名的复杂组合与条件判断? date: 2025-12-15T05:50:00+08:00 lastmod: 2025-12-15T05:50:00+08:00 author: cmdragon summary: Vue3数组语法用于动态类名组合,含基础使用(静态/动态/条…

张小明 2026/1/20 10:15:50 网站建设

吉林省建设部网站贵州交通建设集团有限公司网站

深入探究GMSL:功能、应用与调试 1. 关联数组与命名栈操作 在编程实践中,关联数组和命名栈是非常实用的数据结构。对于关联数组,我们可以使用 defined 函数来测试某个键是否存在。 defined Arguments: 1: Name of associative array2: The key to test Returns: $(tr…

张小明 2026/1/20 10:14:48 网站建设

佛山哪里有做网站的苏州高新区网页设计

一、软件开发生命周期(SDLC)(一)概述Software Development Life Cycle(SDLC)是组织和实施软件开发管理的框架,定义系统工程师和开发人员在软件开发和维护中的工作阶段,主要包括需求收…

张小明 2026/1/20 10:14:17 网站建设