对下面的地址空间创建3级页表

// level 1 table, 4 entries:
// 0000 0000 - 3FFF FFFF, 1GB block, DDR
// 4000 0000 - 7FFF FFFF, 1GB block, DDR
// 8000 0000 - BFFF FFFF, 1GB block, DDR
// C000 0000 - FFFF FFFF, point to level2 tabel
//
// level 2 table, 512 entries:
// C000 0000 - DFFF FFFF, 256 entries, 512MB DDR, 2MB block
// E000 0000 - EFFF FFFF, 128  entries, 256MB OSPI0 flash, 2MB block
// F000 0000 - F01F FFFF, 1 entries, resever , 2MB block, device
// F020 0000 - F03F FFFF, 1 entry, point to level 3_1
// F040 0000 - F05F FFFF, 1 entry, point to level 3_2
// F060 0000 - F07F FFFF, 1 entry, point to level 3_3
// F080 0000 - F09F FFFF, 1 entries, 2MB block, normal memory, RNE_MEM, 1.5M acture, SRAM
// F0A0 0000 - F0BF FFFF, 1 entries, 2MB block, device, RNE_CFG1

下面是创建过程与添加的注释。

#include "v8_mmu.h".text.cfi_sections .debug_frame  // put stack frame info into .debug_frame instead of .eh_frame.global setup_ttb.global ZeroBlock.global __ttb0_l1.global __ttb0_l2_ram.global __ttb0_l3_ram_1.global __ttb0_l3_ram_2.global __ttb0_l3_ram_3//----------------------------------------------------------------
// setup translation table
// level 1 table, 4 entries:
// 0000 0000 - 3FFF FFFF, 1GB block, DDR
// 4000 0000 - 7FFF FFFF, 1GB block, DDR
// 8000 0000 - BFFF FFFF, 1GB block, DDR
// C000 0000 - FFFF FFFF, point to level2 tabel
//
// level 2 table, 512 entries:
// C000 0000 - DFFF FFFF, 256 entries, 512MB DDR, 2MB block
// E000 0000 - EFFF FFFF, 128  entries, 256MB OSPI0 flash, 2MB block
// F000 0000 - F01F FFFF, 1 entries, resever , 2MB block, device
// F020 0000 - F03F FFFF, 1 entry, point to level 3_1
// F040 0000 - F05F FFFF, 1 entry, point to level 3_2
// F060 0000 - F07F FFFF, 1 entry, point to level 3_3
// F080 0000 - F09F FFFF, 1 entries, 2MB block, normal memory, RNE_MEM, 1.5M acture, SRAM
// F0A0 0000 - F0BF FFFF, 1 entries, 2MB block, device, RNE_CFG1
//----------------------------------------------------------------.type setup_ttb, "function".cfi_startproc
setup_ttb://// x21 = address of L1 tables// x22 = address of L2 tables// x23 = address of L3 tables F02// x24 = address of L3 tables F04// x25 = address of L3 tables F06//ldr x2, =0  // x2 = 0 (用于清零内存)ldr x3, =0 // x3 = 0 (同上)// 清零 L1 页表 (__ttb0_l1) (L1 页表(32 字节,4 个条目))ldr x21, =__ttb0_l1  // x21 = L1 页表基地址mov x0, x21            // x0 = 当前操作地址mov x1, #(4 << 3)      // x1 = 4个条目 * 8字节 = 32字节 (L1页表大小)add x0, x0, x1         // x0 指向区域末尾 (预递减清零准备)// can not call func ZeroBlock,  not support nesting
loop_zero_0:subs x1, x1, #16       // 每次处理16字节 (2个条目),更新计数器stp  x2, x3, [x0, #-16]! // 存储双零并递减地址: [x0-16] = (0,0), x0-=16b.ne loop_zero_0        // 循环直到x1=0// 清零 L2 页表 (__ttb0_l2_ram) (L2 页表(4096 字节,512 条目))ldr x22, =__ttb0_l2_ram // x22 = L2 页表基地址mov x1, #(512 << 3)    // x1 = 512条目 * 8字节 = 4096字节 (标准2MB块大小)mov x0, x22            // x0 = 当前操作地址add x0, x0, x1         // x0 指向区域末尾//循环使用 subs + b.ne 实现精确计数(当 x1 减至 0 时退出)
loop_zero_1:subs x1, x1, #16       // 每次16字节stp  x2, x3, [x0, #-16]! // 存储双零并前移指针b.ne loop_zero_1       // 循环// 清零第一个 L3 页表 (__ttb0_l3_ram_1) (三个 L3 页表(各 4096 字节))ldr x23, =__ttb0_l3_ram_1 // x23 = L3 页表1基地址mov x1, #(512 << 3)    // 4096字节 (标准4KB页表大小)mov x0, x23add x0, x0, x1        // 指向末尾
loop_zero_2:subs x1, x1, #16stp  x2, x3, [x0, #-16]!b.ne loop_zero_2// 清零第二个 L3 页表 (__ttb0_l3_ram_2)ldr x24, =__ttb0_l3_ram_2 // x24 = L3 页表2基地址mov x1, #(512 << 3)    // 4096字节mov x0, x24add x0, x0, x1        // 指向末尾
loop_zero_3:subs x1, x1, #16stp  x2, x3, [x0, #-16]!b.ne loop_zero_3// 清零第三个 L3 页表 (__ttb0_l3_ram_3)ldr x25, =__ttb0_l3_ram_3 // x25 = L3 页表3基地址mov x1, #(512 << 3)    // 4096字节mov x0, x25add x0, x0, x1         // 指向末尾
loop_zero_4:subs x1, x1, #16stp  x2, x3, [x0, #-16]!b.ne loop_zero_4// 设置 L1 页表项配置// 0000 0000 - 3FFF FFFF, 1GB block, DDR// 4000 0000 - 7FFF FFFF, 1GB block, DDR// 8000 0000 - BFFF FFFF, 1GB block, DDR// 3 1G block, write to l1 table//ldr x1, =3                // x1 = 3 (需要配置的页表项数量)ldr x2, =0x40000000      // x2 = 1GB 地址增量 (每个 L1 条目映射 1GB 空间)// 构建 L1 块描述符属性值:// - 物理地址基址: 0x00000000// - 块描述符类型 (TT_S1_ATTR_BLOCK)  TT_S1_ATTR_BLOCK:使用块描述符 (1GB/2MB 大页)// - 内存属性索引 1 (MATTR=1) 普通内存,适用于ddr// - 非安全状态 (NS)// - 特权读写权限 (AP_RW_PL1)// - 内部可共享 (SH_INNER)// - 访问标志 (AF)// - 非全局映射 (nG)ldr x3, =(0x00000000	   | \TT_S1_ATTR_BLOCK | \(1 << TT_S1_ATTR_MATTR_LSB) | \TT_S1_ATTR_NS | \TT_S1_ATTR_AP_RW_PL1 | \TT_S1_ATTR_SH_INNER | \TT_S1_ATTR_AF | \TT_S1_ATTR_nG)mov x4, x21                // x4 = L1 页表基址指针 (x21 来自前段代码)#if 1	// enable after ddr ready
loop1:str x3, [x4], #8         // 存储每次的x3描述符到 L1 页表并后移指针add x3, x3, x2           // 物理地址增加 1GB (0x40000000)subs x1, x1, #1           // 递减计数器bne loop1                 // 循环直到 3 个条目配置完成
#else
loop1:add x4, x4, #8           // 仅移动指针 (不存储)add x3, x3, x2          // 物理地址增加 1GBsubs x1, x1, #1bne loop1
#endif// 配置 L1 页表中 C0000000-FFFFFFFF 区域的条目// C000 0000 - FFFF FFFF, point to level2 tabel, write to l1 tableorr x1, x22, #TT_S1_ATTR_PAGE  // 将 L2 表基址(x22)与页表描述符属性组合。TT_S1_ATTR_PAGE:页表描述符 (指向下级页表)str x1, [x4]              // 存储到 L1 页表 (指向 L2 页表)// 配置 L2 页表:DDR 区域 (C0000000-DFFFFFFF, 512MB)// level 2 table: C000 0000 - DFFF FFFF, 256 entries, 512MB DDR, 2MB blockldr x1, =256              // 256 个条目 (256 * 2MB = 512MB)ldr x2, =0x200000         // x2 = 2MB 地址增量 (块大小)// 构建 DDR 区域的 L2 块描述符:// - 物理地址基址: 0xC0000000// - 块描述符类型// - 内存属性索引 1 (普通内存)ldr x3, =(0xC0000000	   | \TT_S1_ATTR_BLOCK | \(1 << TT_S1_ATTR_MATTR_LSB) | \TT_S1_ATTR_NS | \TT_S1_ATTR_AP_RW_PL1 | \TT_S1_ATTR_SH_INNER | \TT_S1_ATTR_AF | \TT_S1_ATTR_nG)mov x4, x22              // x4 = L2 页表基址指针 (x22)
loop2_ddr:str x3, [x4], #8          // 存储每次的x3到描述符到 L2 页表并后移指针add x3, x3, x2           // 物理地址增加 2MBsubs x1, x1, #1          // 递减计数器bne loop2_ddr            // 循环配置 256 个条目// 配置 L2 页表:OSPI0 Flash 区域 (E0000000-EFFFFFFF, 256MB)// level 2 table: E000 0000 - EFFF FFFF, 64 entries, 128MB OSPI0 flash, 2MB blockldr x1, =128              // 128 个条目 (128 * 2MB = 256MB)ldr x2, =0x200000         // 2MB 块大小// 构建 OSPI Flash 的 L2 块描述符:// - 物理地址基址: 0xE0000000// - 内存属性索引TT_S1_ATTR_MATTR_LSB 2 (通常用于设备内存)//AP_RW_PL1:特权读写权限//SH_INNER:内部可共享//AF:访问标志 (Access Flag)//nG:非全局映射ldr x3, =(0xE0000000	   | \TT_S1_ATTR_BLOCK | \(2 << TT_S1_ATTR_MATTR_LSB) | \TT_S1_ATTR_NS | \TT_S1_ATTR_AP_RW_PL1 | \TT_S1_ATTR_SH_INNER | \TT_S1_ATTR_AF | \TT_S1_ATTR_nG)
loop2_ospi0:str x3, [x4], #8         // 继续在 L2 页表存储 (紧接 DDR 区域之后)add x3, x3, x2         	 // 物理地址增加 2MBsubs x1, x1, #1           // 递减计数器bne loop2_ospi0           // 循环配置 128 个条目// F0800000-F09FFFFF 区域:2MB 块映射 (普通内存)// F000 0000 - F01F FFFF, resever, no need to set this block// F080 0000 - F09F FFFF, 1 entries, 2MB block, normal memory, RNE_MEM, 1.5M acture, SRAM// 物理地址 + 属性ldr x1, =(0xF0800000	   | \TT_S1_ATTR_BLOCK | \(1 << TT_S1_ATTR_MATTR_LSB) | \TT_S1_ATTR_NS | \TT_S1_ATTR_AP_RW_PL1 | \TT_S1_ATTR_SH_INNER | \TT_S1_ATTR_AF | \TT_S1_ATTR_nG)ldr x2, =0xF0800000  // 目标虚拟地址ubfx x3, x2, #21, #9            // 提取 L2 索引 (位[29:21]) ?str x1, [x22, x3, lsl #3]      // 写入 L2 页表 (x22) ?// F0A00000-F0BFFFFF 区域:2MB 块映射 (设备内存)// F0A0 0000 - F0BF FFFF, 1 entries, 2MB block, device, RNE_CFG1// 物理地址 + 属性ldr x1, =(0xF0A00000	   | \TT_S1_ATTR_BLOCK | \(2 << TT_S1_ATTR_MATTR_LSB) | \TT_S1_ATTR_NS | \TT_S1_ATTR_AP_RW_PL1 | \TT_S1_ATTR_SH_INNER | \TT_S1_ATTR_AF | \TT_S1_ATTR_nG)ldr x2, =0xF0A00000            // 目标虚拟地址ubfx x3, x2, #21, #9         // 提取 L2 索引str x1, [x22, x3, lsl #3]      // 写入 L2 页表/*0x00000000 ~ 0xc0000000                          ----l10xc0000000 ~ 0xe0000000                          ----l20xe0000000 ~ 0xf0000000                          ----l20xf0800000 ~ 0xf0870000 rne_mem                    ----l20xf0a00000 ~ 0xf0bfffff rne_cfg                    ----l20xf0000000 ~ 0xf02fffff  rsv0xf0314000 ~ 0xf03effff  peri                   -----0xf0200000 ~ 0xf03fffff : l2 -> l3 3_10xf0400000 ~ 0xf04fffff usb                     -----0xf0500000 ~ 0xf0517fff peri                    -----0xf0400000 ~ 0xf05fffff : l2 -> l3 3_20xf0600000 ~ 0xf062ffff ddr gic noc acodec      -----0xf0600000 ~ 0xf07fffff : l2 -> l3 3_3地址转换:L2 索引:ubfx 提取位[29:21] (#21, #9)L3 索引:ubfx 提取位[20:12] (#12, #9)页表项位置:基址 + 索引 × 8 (lsl #3)*/// 设置 L2 页表项:F0200000-F03FFFFF 指向 L3 页表 (x23)// level 2 table: F020 0000 - F03F FFFF, 1 entry, point to level 3_1orr x1, x23, #TT_S1_ATTR_TABLE  // 组合 L3 基址和表描述符属性ldr x2, =0xF0200000             // 虚拟地址范围起始ubfx x3, x2, #21, #9           // 提取 L2 索引str x1, [x22, x3, lsl #3]       // 写入 L2 页表// 设置 L2 页表项:F0400000-F05FFFFF 指向 L3 页表 (x24)// level 2 table: F040 0000 - F05F FFFF, 1 entry, point to level 3_2orr x1, x24, #TT_S1_ATTR_TABLE  // 组合 L3 基址和表描述符属性ldr x2, =0xF0400000            // 虚拟地址范围起始ubfx x3, x2, #21, #9           // 提取 L2 索引str x1, [x22, x3, lsl #3]       // 写入 L2 页表// 设置 L2 页表项:F0600000-F12A5FFF 指向 L3 页表 (x25)// level 2 table: F060 0000 - F12A 5FFF, 1 entry, point to level 3_3orr x1, x25, #TT_S1_ATTR_TABLE  // 组合 L3 基址和表描述符属性ldr x2, =0xF0600000            // 虚拟地址范围起始ubfx x3, x2, #21, #9           // 提取 L2 索引str x1, [x22, x3, lsl #3]      // 写入 L2 页表// 填充 L3 页表 (x23):F0200000-F03FFFFF 区域 (512 个 4KB 页)// level 3 table: F02 0000 - F03F FFFF, 512 entry, x24// valid addr  F020 0000 - F03F FFFFldr x1, =0x1000                // 页大小:4KBldr x2, =((0xF03FFFFF + 1 - 0xF0200000) >> 12) // 计算页数ldr x3, =0xF0200000                        // 物理地址起始// 页描述符属性// 设备内存属性ldr x4, = (TT_S1_ATTR_PAGE | \(2 << TT_S1_ATTR_MATTR_LSB) | \TT_S1_ATTR_NS | \TT_S1_ATTR_AP_RW_PL1 | \TT_S1_ATTR_SH_INNER | \TT_S1_ATTR_AF | \TT_S1_ATTR_nG)
loop3_1:ubfx x5, x3, #12, #9            // 提取页内索引 (位[20:12])orr x6, x3, x4                // 组合物理地址和属性str x6, [x23, x5, lsl #3]       // 存储到 L3 页表 (x23)add x3, x3, x1                 // 移动到下一页subs x2, x2, #1               // 递减页计数器bne loop3_1                    // 循环直到所有页映射完成// 填充 L3 页表 (x24):F0400000-F05FFFFF 区域 (512 个 4KB 页)// level 3 table: F040 0000 - F05F FFFF,, 512 entry, x25// valid addr  F040 0000 - F05F FFFFldr x1, =0x1000                 // 页大小:4KBldr x2, =((0xF05FFFFF + 1 - 0xF0400000) >> 12) // 计算页数ldr x3, =0xF0400000             // 物理地址起始// 设备内存属性ldr x4, = (TT_S1_ATTR_PAGE | \(2 << TT_S1_ATTR_MATTR_LSB) | \TT_S1_ATTR_NS | \TT_S1_ATTR_AP_RW_PL1 | \TT_S1_ATTR_SH_INNER | \TT_S1_ATTR_AF | \TT_S1_ATTR_nG)
loop3_2:ubfx x5, x3, #12, #9        // 提取页内索引orr x6, x3, x4              // 组合物理地址和属性str x6, [x24, x5, lsl #3]      // 存储到 L3 页表 (x24)add x3, x3, x1               // 下一页subs x2, x2, #1               // 递减页计数器bne loop3_2               // 循环// 填充 L3 页表 (x25):F0600000-F07FFFFF 区域 (512 个 4KB 页)// level 3 table: F060 0000 - F07F FFFF, 512 entry, x25// valid addr  F060 0000 - F07F FFFFldr x1, =0x1000               // 页大小:4KBldr x2, =((0xF07FFFFF + 1 - 0xF0600000) >> 12) // 计算页数ldr x3, =0xF0600000             // 物理地址起始// 设备内存属性ldr x4, = (TT_S1_ATTR_PAGE | \(2 << TT_S1_ATTR_MATTR_LSB) | \TT_S1_ATTR_NS | \TT_S1_ATTR_AP_RW_PL1 | \TT_S1_ATTR_SH_INNER | \TT_S1_ATTR_AF | \TT_S1_ATTR_nG)
loop3_3:ubfx x5, x3, #12, #9          // 提取页内索引orr x6, x3, x4               // 组合物理地址和属性str x6, [x25, x5, lsl #3]      // 存储到 L3 页表 (x25)add x3, x3, x1            	// 下一页subs x2, x2, #1             // 递减页计数器bne loop3_3           		// 循环ret.cfi_endproc

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

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

相关文章

DeepSeek-R1满血版:硅基流动API或本地部署

大家好! 想在手机上部署 DeepSeek-R1 满血版&#xff08;671B&#xff09;&#xff1f;我来手把手教你最靠谱的两种方式&#xff01;满血版模型参数高达 671 亿&#xff0c;手机本地运行几乎不可能&#xff0c;但通过「云服务 手机 App」的组合&#xff0c;你一样能在手机上丝…

React 各颜色转换方法、颜色值换算工具HEX、RGB/RGBA、HSL/HSLA、HSV、CMYK

&#x1f4d6; 简介 基于 React Tailwind CSS 构建的专业颜色转换工具&#xff0c;支持多种颜色格式的实时转换。无论是设计师、开发者&#xff0c;都能在这个工具中找到所需的颜色转换功能。 ✨ 核心功能 &#x1f3af; 多格式颜色转换 HEX 格式: 支持 3 位缩写 (#000, #…

开关电源抄板学习

一、实物 输入220V&#xff0c;输出12V5A 二、拍照并使用PS矫正 用卡尺测量下PCB的尺寸&#xff0c;在PS中作为画布。 用相机拍下照片&#xff0c;导入到PS中&#xff0c;用拉伸工具对图片进行矫正处理&#xff0c;并拉伸到和画布一样大小。 三、打开嘉立创EDA&#xff0c;导…

大数据在UI前端的应用探索:基于用户行为分析的产品优化策略

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 一、引言&#xff1a;用户行为分析重构产品优化的技术逻辑 在数字化产品体验竞争日益激烈的今…

优化 WebSocket 实现单例连接用于打印【待测试 】

class PrinterWebSocket { constructor(url) { if (PrinterWebSocket.instance) { return PrinterWebSocket.instance; } this.url url; this.socket null; this.queue []; // 打印任务队列 this.isConnecting false; this.retry…

Spring Cloud Alibaba/Spring Boot整合华为云存储实例(REST API方式)

一个小作业&#xff0c;初次尝试华为云存储&#xff0c;一点分享 原项目采用Spring Cloud Alibaba微服务技术、Spring Boot框架技术、VueJS前端框架开发技术&#xff0c;nacos注册中心&#xff0c;数据库为mysql 下面看一下没有运用云存储的原项目&#xff08;可跳过&#xf…

Petalinux工程如何离线编译

目录 一.下载离线包 1.1 共享状态缓存包&#xff1a;sstate-cache 1.1.1 进入官网打开Petalinux工具网页 1.1.2 找到相应的Petalinux版本 1.1.3 根据平台下载 1.2 下载downloads源码包 1.3 open_components源码包 二.解压 2.1 sstate-cache 2.2 downloads源码包 2.3…

w446数字化农家乐管理平台的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

AWS WebRTC:通过shell分析viewer端日志文件

在并发过程中,每个viewer会产生一个对应的日志文件,日志文件名为: viewer_channel_index_20250626_030943_145.logviewer端日志比master端日志文件数量多,比例大概是5:1,有1个master就会有5个viewer,每个viewer对应一个日志文件。 我要统计的是从启动viewer到出第一帧视…

时间转换——借助时间模块time

两种时间戳类型 例如s11704879917000 1、13位的时间戳&#xff1a;单位&#xff08;毫秒&#xff09; &#xff08;1&#xff09;毫秒变成秒&#xff0c;1s1000ms&#xff0c;s1/1000&#xff08;秒&#xff09; &#xff08;2&#xff09;加载时间 times time.localtime(…

LabVIEW MathScript薄板热流模拟

热流模拟是热设计关键环节&#xff0c;传统工具精准但开发周期长&#xff0c;本 VI 利用 LabVIEW 优势&#xff0c;面向工程师快速验证需求&#xff0c;在初步方案迭代、教学演示等场景更具效率&#xff0c;为热分析提供轻量化替代路径&#xff0c;后续可结合专业工具&#xff…

为什么大语言模型训练和推理中越来越多地使用 bfloat16?

随着大语言模型&#xff08;LLM&#xff09;的参数规模从几十亿&#xff08;B&#xff09;飙升到千亿&#xff08;T&#xff09;级别&#xff0c;模型的训练与推理效率变得尤为关键。为了在保证精度的同时节省显存、加快运算&#xff0c;混合精度训练&#xff08;Mixed Precisi…

暴力破解漏洞与命令执行漏洞

在当今的互联网世界中&#xff0c;网络安全威胁无处不在。对于Java后端开发者而言&#xff0c;了解常见的Web漏洞及其防护措施至关重要。本文将探讨两种常见的安全漏洞&#xff1a;暴力破解漏洞&#xff08;Brute Force&#xff09;和命令执行漏洞&#xff08;Command Injectio…

HDFS Java API 开发指南:从基础操作到高级应用

HDFS (Hadoop Distributed File System) 作为大数据生态的核心存储系统&#xff0c;提供了分布式、高容错、高吞吐量的数据存储能力。通过 Java API 操作 HDFS 是开发大数据应用的基础技能。本文将基于你的笔记&#xff0c;详细解析 HDFS Java API 的使用方法&#xff0c;并提供…

区块链技术核心组件及应用架构的全面解析

区块链技术是一套融合密码学、分布式系统与经济激励的复合型技术体系&#xff0c;以下是其核心组件及应用架构的全面解析&#xff1a;一、区块链核心技术栈 1. 分布式账本技术&#xff08;DLT&#xff09; 核心原理&#xff1a;多节点共同维护不可篡改的数据链数据结构&#xf…

golang 协程 如何中断和恢复

Go语言通知协程退出(取消)的几种方式 - 知乎 GoLang之goroutine底层系列二(goroutine的创建、让出、恢复)_golang goroutine-CSDN博客 在 Go 语言中&#xff0c;协程&#xff08;也称为 goroutine&#xff09;是通过 go 关键字启动的轻量级线程。由于 goroutine 的调度是由 Go…

ARMv8 创建3级页表示例

最近在研究arm v8页表创建过程&#xff0c;顺带做了一个如下形式的页表&#xff0c; // level 1 table, 4 entries: // 0000 0000 - 3FFF FFFF, 1GB block, DDR // 4000 0000 - 7FFF FFFF, 1GB block, DDR // 8000 0000 - BFFF FFFF, 1GB block, DDR // C000 0000 - FFFF FFFF…

迁港战平 精神可胜国足

迁港战平可胜国足 江苏省城市足球联赛第6轮&#xff0c;宿迁队主场迎战连云港队。比赛中&#xff0c;宿迁队由张栋和高驰各入一球&#xff0c;连云港队则凭借穆家鑫与李团杰的进球连扳两城。最终双方以2比2握手言和。 第38分钟&#xff0c;张栋角球进攻中无人盯防推射破门&…

408第三季part2 - 计算机网络 - ip分布首部格式与分片

理解 好好看一下这个图 每行是4B&#xff0c;首部也不一定是20B&#xff0c;还有可选字段&#xff0c;可以变的更大 然后我们先看一下概念 然后这个生存时间每路过一个路由器就会扣1滴血 比如一开始是13&#xff0c;经过r1r2r3到B会变成10 但如果是2&#xff0c;经过第二个路…

详解String类不可变的底层原理

String类 String的基本特性 不可变性: String 对象一旦创建就不能被修改&#xff0c;所有看似修改的操作实际上都是创建新的 String 对象final类: String 类被声明为 final&#xff0c;不能被继承基于字符数组: 内部使用final char value[]存储字符数据(Java9以后改为byte[] …