(转)Wince读核1-启动流程4

本文详细介绍了ARM架构下的一级和二级内存映射过程。主要内容包括针对不同内存区域的映射策略,如C+B空间和非C+B空间的映射区别,以及如何通过ARM指令集实现具体的映射操作。

;下面这一段有点特殊。ce5.0最多支持512M的物理RAM,也就是说虚拟地址空间0x80000000-0x9fffffff用来映射最多512M的物理RAM;
     ;所以r2和0x1FF00000求与后满足上述要求(1M对齐);
     ;而被映射的物理地址可以是任何4g空间内的地址,所以r3和0xFFF00000求与后满足要求(1M对齐)。
     ;注意,这里和ce支持4g虚拟内存是不矛盾的。
            ldr     r5, =0x1FF00000
            and     r2, r2, r5                      ; VA needs 512MB, 1MB aligned.
    
            ldr     r5, =0xFFF00000
            and     r3, r3, r5                      ; PA needs 4GB, 1MB aligned.
           
     ;r2 = r10 + r2>>18,r2指向一个描述符地址;
     ;r0 = r0 + r3,r0指向一个描述符的值,也就是高12bit存储一个物理page的起始地址,低20bit存储上面已经设置过的该page(1M)的属性。
            add     r2, r10, r2, LSR #18
            add     r0, r0, r3                      ; (r0) = PTE for next physical page
           
     ;将描述符的值存储在该描述符地址指向的物理空间。然后r2+=4指向下一个描述符地址(注意一个描述符占4byte);
     ;r0+=0x00100000,指向下一个物理page的起始地址。
     ;至此,我们完成了一个一级映射描述符的映射过程。
     28      str     r0, [r2], #4
            add     r0, r0, #0x00100000             ; (r0) = PTE for next physical page
           
     ;r4存储了该内存区域(g_oalAddressTable某一项)的大小,单位为M,正好和page大小相等,所以直接r4-=1即可。
     ;若r4!=0,说明该内存区域还没有完成映射,则返回B28继续该内存区域其它page的映射;
     ;若r4==0,说明该内存区域映射完成,则清除r0的高12bit,而保留低20bit(因为全部page采用相同的属性设置),返回B25继续其它内存区域的映射。
            sub     r4, r4, #1                      ; Decrement number of MB left
            cmp     r4, #0
            bne     %B28                            ; Map next MB
    
            bic     r0, r0, #0xF0000000             ; Clear Section Base Address Field
            bic     r0, r0, #0x0FF00000             ; Clear Section Base Address Field
            b       %B25                            ; Get next element
    
     ;此处已经完成C+B空间的映射,接下来要继续0xa00000000-0xbfffffff的非C+B空间的映射,所以首先清除C+B位。
     ;0x0800*1M/4 = 0x20000000,所以此时r10保存的物理PTE地址对应0xa0000000
     29
            bic     r0, r0, #0x0C                   ; clear cachable & bufferable bits in PTE
            add     r10, r10, #0x0800               ; (r10) = ptr to 1st PTE for "unmapped uncached space"
            subs    r7, r7, #1                      ; decrement pass counter
            bne     %B20                            ; go setup PTEs for uncached space if we're not done
                
     ;最后恢复r10指向PTs,0x2000+0x0800+0x0800-0x3000=0   
            sub     r10, r10, #0x3000               ; (r10) = restore address of 1st level page table
至此一级映射全部完成。下面再看我们上面跳过的二级映射。
     ;       Setup 2nd level page table to map the high memory area which contains the
     ; first level page table, 2nd level page tables, kernel data page, etc.
     ;r4指向物理地址HighPT。HighPT存储二级页表。
            add     r4, r10, #HighPT-PTs            ; (r4) = ptr to high page table
    
     ;为映射物理地址PTs构造一个表项。0x051最后两bit是01,说明是Large page(参考2),一个page为64k。
     ;其余字节说明访问权限。
     ;注意,这个page是非C+B的。
            orr     r0, r10, #0x051                 ; (r0) = PTE for 64K, kr/w kr/w r/o r/o page, uncached unbuffered
           
     ;PTs对应虚拟地址0xFFFD0000,由于一个page是64k,需要4个page来映射0xFFFD0000-0xFFFD3FFF。
     ;Large page的映射方式在table index上稍微有点特别,使得我们可以使用同一个物理基址r0,具体参考2。           
            str     r0, [r4, #0xD0*4]               ; store the entry into 8 consecutive slots
            str     r0, [r4, #0xD1*4]
            str     r0, [r4, #0xD2*4]
            str     r0, [r4, #0xD3*4]
           
     ;r8指向中断向量表的物理地址ExceptionVectors。这个page的C和B如何设置由OEM指定,保存在r2中。           
            add     r8, r10, #ExceptionVectors-PTs ; (r8) = ptr to vector page
            bl      OEMARMCacheMode                 ; places C and B bit values in r0 as set by OEM
            mov     r2, r0
     ;构造PTE。最后两个bit是10,说明是一个4k的Small page。(ExceptionVectors是4k大小)。
     ;为了将一个物理small page映射到4个第二级页表描述符,这里用了一个小技巧。
     ;注意到这四个虚拟地址0xFFFF0000,0xFFFF2400,FFFF4900和FFFF6800。通过Page index的不同(0x000,0x400,0x900和0x800 )
     ;可以将一个物理small page映射到不同的虚拟地址,而通过虚拟地址最后12bit的Page index来避免重叠访问。
            orr     r0, r8, #0x002                  ; construct the PTE
            orr     r0, r0, r2
            str     r0, [r4, #0xF0*4]               ; store entry for exception vectors          
            orr     r0, r0, #0x500                  ; (r0) = PTE for 4k r/o r/o kr/w kr/w C+B page
            str     r0, [r4, #0xF4*4]               ; store entry for abort stack
            str     r0, [r4, #0xF6*4]               ; store entry for FIQ stack (access permissions overlap for abort and FIQ stacks, same 1k)
            orr     r0, r8, #0x042
            orr     r0, r0, r2                      ; (r0)= PTE for 4K r/o kr/w r/o r/o (C+B as set by OEM)
            str     r0, [r4, #0xF2*4]               ; store entry for interrupt stack
           
     ;没什么好说的。      
            add     r9, r10, #KPage-PTs             ; (r9) = ptr to kdata page
            orr     r0, r9, #0x002
            orr     r0, r0, r2                      ; (r0)=PTE for 4K (C+B as set by OEM)
            orr     r0, r0, #0x250                  ; (r0) = set perms kr/w kr/w kr/w+ur/o r/o
            str     r0, [r4, #0xFC*4]               ; store entry for kernel data page
           
      ;构建二级映射中的第一级描述符。           
            orr     r0, r4, #0x001                  ; (r0) = 1st level PTE for high memory section
            add     r1, r10, #0x4000
            str     r0, [r1, #-4]                   ; store PTE in last slot of 1st level table
           

 

http://hi.baidu.com/garnetttt/blog/item/418ba9ecb28acf2462d09f95.html

内容概要:本文围绕列车-轨道-桥梁交互仿真研究,基于Matlab平台构建数值模型,系统分析列车运行过程中轨道与桥梁结构间的动态相互作用机制。研究涵盖多体动力学建模、耦合系统运动方程求解、边界条件设定及仿真结果可视化等关键环节,重点揭示高速行车条件下基础设施的振动传递规律与力学响应特征。该仿真方法可有效评估结构安全性、舒适性指标及疲劳寿命,为轨道交通工程的设计优化与运维管理提供理论支撑和技术路径。文中配套提供了完整的Matlab代码实现方案及操作说明,便于用户复现、验证和拓展相关研究。; 适合人群:具备Matlab编程基础和结构动力学、车辆动力学等相关专业知识的研究生、科研人员及从事铁路工程、桥梁工程与交通系统安全评估的工程技术人才,尤其适合开展轨道交通耦合振动课题的研究者。; 使用场景及目标:①用于高校与科研机构进行列车-轨道-桥梁耦合系统动力学特性的教学演示与科学研究;②支撑高速铁路桥梁的设计优化、运营安全性评估与减振降噪方案验证;③为复杂交通基础设施的多物理场耦合仿真提供建模思路与代码参考。; 阅建议:建议者结合所提供的Matlab代码逐模块深入研,重点关注系统建模假设、质量-刚度-阻尼矩阵构建方法及数值积分算法的实现细节,同时可通过调整参数进行敏感性分析,进一步掌握仿真模型的适用范围与优化方向。
内容概要:本文系统研究了非线性薛定谔方程的物理信息神经网络(PINN)求解方法,提出一种将物理规律嵌入深度学习模型的科学计算新范式。通过构建全连接神经网络架构,将非线性薛定谔方程及其初始/边界条件作为损失函数的心组成部分,实现了在无须大量标注数据的前提下对复值偏微分方程的高精度数值求解。该方法充分利用自动微分技术精确计算方程残差,有效融合了数据驱动与模型驱动的优势,在光学孤子传播、量子系统演化等典型场景中展现出优异的逼近能力与泛化性能。文中配套提供了完整的Python实现代码,涵盖网络搭建、损失定义、训练优化与结果可视化全流程。; 适合人群:具备Python编程能力与深度学习基础知识,熟悉偏微分方程理论及科学计算的理工科研究生、科研人员,以及从事光学、量子物理、流体力学等领域建模与仿真的工程技术人员。; 使用场景及目标:① 掌握PINN方法的基本原理与实现技巧;② 学习如何将复杂物理方程化为可训练的神经网络损失项;③ 应用于非线性光学、玻色-爱因斯坦凝聚、水波动力学等问题的仿真与预测;④ 为相关科研课题提供可复现的算法原型与代码参考。; 阅建议:建议者结合所提供的Python代码进行动手实践,重点理解神经网络对微分算子的近似机制、损失函数的多任务加权策略以及训练过程中的超参数调优方法,进而可迁移至其他非线性偏微分方程的求解任务,拓展其在交叉学科中的应用边界。
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 微软推出的【AZ-900微软认证】是一项针对初学者的基础级云服务资格认证,其目的在于帮助学习者掌握云概念、微软Azure服务的运作机制以及云解决方案的心知识。获得这一认证后,考生将能够清晰地理解云计算领域的基础术语、服务模式(包括IaaS、PaaS、SaaS等)以及这些服务在Azure平台上的实际应用方式。 在【必过考题】部分,我们可以观察到两个重点议题,它们分别聚焦于PaaS(平台即服务)的概念阐释和云成本的计算方式。 在第一个议题中,考生被要求辨别关于PaaS的正确性描述。PaaS平台提供了一个开发环境,但并不允许用户直接访问操作系统(Box 1: No)。比如,Azure Web Apps服务可以用来部署web应用,但用户无法直接管理虚拟机或IIS系统。另一方面,PaaS确实具备自动扩展的功能(Box 2: Yes),这表示可以根据实际需求自动增加负载均衡的虚拟机以支持web应用的运行。PaaS框架还为开发人员提供了构建和调整云端应用的工具,预置的应用组件能够有效缩短新应用的编程周期(Box 3: Yes)。 第二个议题同样关注云计算理念的理解,尤其强调IT支出从资本性支出(CapEx)向运营性支出(OpEx)的型思想。传统的IT投资通常被视为CapEx,而云计算的按需付费机制使企业能够将这部分开支化为OpEx,从而在财务规划上获得更大的自由度。 在为AZ-900考试做准备时,考生需要特别关注以下几个心知识点: 1. **云服务模式**:深入理解IaaS(基础设施即服务)、PaaS和SaaS(软件即服务)之间的差异及其各自的应用情境。 2. **Azure服务*...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值