64位多核 MIPS 异常和中断内核代码分析 (3)

1.2.ARM裸机第二部分-ARM体系结构与汇编指令 1.2.1.可编程器件的编程原理 电子器件的发展方向 模拟器件 -> 数字器件 ASIC -> 可编程器件 可编程器件的特点 CPU在固定频率的时钟控制下节奏运行。 CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行。 这些可以被CPU解码执行的二进制指令集是CPU设计的时候确定的,是CPU的设计者(ARM公司)定义的,本质上是一串由1和0组成的数字。这 阅读详情

64位多核 MIPS 异常和中断内核代码分析 (3)

 

RMI XLR732TLB 相关处理函数分析


0. 背景

 

MIPS64 下虚拟地址空间的划分:

 


其中内核空间是 xkphys 和 xkseg;其中 xkphys 是固定映射,不经 TLB (unmapped)

用户空间是 xuseg


1. RMI XLR732 TLB Refill handler 分析


@0xFFFF FFFF 8000 0000                       
   c:    07610005     bgez    k1,24 <0x24>  /* if vaddr[61] != 1 (0xc000 0000 0000 0000 ~ 0xDFFF FFFF FFFF FFFF), branch */   
10:          3c1bc000     lui    k1,0xc000        -----> at delay slot, commit new value to k1 after reading k1 (bgez)
                                           
# vaddr is at 0xE000000000000000 ~ 0xFFFF FFFF FFFF FFFF,这个地址段里被 64 bit Linux 内核使用且又要经过 TLB 的就是 kseg2 了,内核的模块默认使用这个地址
14:    035bd02f     dsubu    k0,k0,k1        /* k0 = vaddr - 0xFFFF FFFF C0000000 */
18:    3c1b8396     lui    k1,0x8396
1c:    10000023     b    ac <0xac>        ----> @@@        
20:    277ba000     addiu    k1,k1,-24576    /* 0xFFFF FFFF 8395A000 = module_pg_dir , using the module_pg_dir as the PGD entry */

 

# vaddr is at 0xC000000000000000 ~ 0xDFFF FFFF FFFF FFFF
24:    001bd83c     dsll32    k1,k1,0x0        /* (0xFFFF FFFF C0000000 << 32) */
28:    035bd02f     dsubu    k0,k0,k1        /* k0 = vaddr - 0xC000000000000000 */
2c:    1000001f     b    ac <0xac>        ----> @@@
30:    3c1b8396     lui    k1,0x8396            /* 0xFFFF FFFF 83960000 = swapper_pg_current, using the swapper_pg_current as the PGD entry */

34:    00000000

38:    00000000 <repeat>

......


@0xFFFF FFFF 8000 0080 (xTLB Refill 入口)

8c:    403a4000     dmfc0    k0,c0_badvaddr        


90:    0740001a     bltz    k0,fc <0xfc>    /* if badvaddr >= 0x80000000 00000000 branch */

 

# vaddr is < 0x8000 0000 0000 000, so it's at kuseg
94:   403b2000    dmfc0   k1,c0_context
98:   001bddfa    dsrl    k1,k1,0x17      /* get (smp_processor_id() << 3) (26-23), see asm/mmu_context.h */
9c:   3c1a8396    lui k0,0x8396           /* swapper_pg_current = 0xFFFF FFFF 83960000 */
a0:   037ad82d    daddu   k1,k1,k0        /* k1 = swapper_pg_current[smp_processor_id()] */
a4:   403a4000    dmfc0   k0,c0_badvaddr
a8:   df7b2000    ld k1,8192(k1)        /*
                                             * pgd = *((void *)(k1 + 8192), 8 bytes per pgd entry, pgd_current = 0xFFFF FFFF 8396 2000,
                                             * 0x2000 = 8192
                                             * actually it's pgd = pgd_current[smp_processor_id()]
                                             */

@@@
ac:    001ad6fa     dsrl    k0,k0,0x1b        # >> 27
b0:    335a1ff8     andi    k0,k0,0x1ff8    /* get (vaddr[39:30] << 3), for indexing pgd */
b4:    037ad82d     daddu    k1,k1,k0        /* index pgd */

b8:    403a4000     dmfc0    k0,c0_badvaddr
bc:    df7b0000     ld    k1,0(k1)            /* get p_pmd */
c0:    001ad4ba     dsrl    k0,k0,0x12
c4:    335a0ff8     andi    k0,k0,0xff8        /* get (vaddr[29:21] << 3), for indexing pmd */
c8:    037ad82d     daddu    k1,k1,k0        /* index pmd */

cc:    403aa000     dmfc0    k0,c0_xcontext   
d0:    df7b0000     ld    k1,0(k1)            /* get p_pt */       
d4:    335a0ff0     andi    k0,k0,0xff0        /* get (va[20:13] << 4), actually use va[20:12] index the pt, va[12]=0, for indexing pt */
d8:    037ad82d     daddu    k1,k1,k0        /* index pt */

dc:    df7a0000     ld    k0,0(k1)            /* get even page addr */    <-------------
e0:    df7b0008     ld    k1,8(k1)            /* get odd page addr */

e4:    001ad1ba     dsrl    k0,k0,0x6        /* ignore the low 6 bits, it's for os */
e8:    409a1000     mtc0    k0,c0_entrylo0    /* tlb even page entry */
ec:    001bd9ba     dsrl    k1,k1,0x6        /* same as above */
f0:    409b1800     mtc0    k1,c0_entrylo1    /* tlb odd page entry */
f4:    42000006     tlbwr                    /* random write tlb */
f8:    42000018     eret                   

 

# go here, vaddr is >=0x8000 0000 0000 0000, so it's in xkphys or xkseg; and 0x8000 0000 0000 0000 ~ 0xBFFF FFFF FFFF FFFF is xkphys, unmapped, do not index TLB, so vaddr is at 0xc000 0000 0000 0000
fc:    001ad8b8     dsll    k1,k0,0x2        # vaddr << 2, will be test the vaddr[61]
100:    1000ffc2     b    c <0xc>

104:    00000000     nop
108:    00000000     nop




2. RMI XLR732  handle_tlbl 分析

 

handle_tlbl:

   c:   403a4000    dmfc0   k0,c0_badvaddr          <---- handle_tlbl start
  10:   07400027    bltz    k0,b0 <0xb0>   # if badvaddr >= 0x80000000 00000000 branch

  14:   403b2000    dmfc0   k1,c0_context
  18:   001bddfa    dsrl    k1,k1,0x17      /* get (smp_processor_id() << 3) (26-23) */
  1c:   3c1a8396    lui k0,0x8396           /* 0xffffffff83960000 + 0x2000 = pgd_current */
  20:   037ad82d    daddu   k1,k1,k0
  24:   403a4000    dmfc0   k0,c0_badvaddr
  28:   df7b2000    ld  k1,8192(k1)         /* pgd = pgd_current[smp_processor_id()] */

 @@
  2c:   001ad6fa    dsrl    k0,k0,0x1b      # >> 27
  30:   335a1ff8    andi    k0,k0,0x1ff8    /* get (vaddr[39:30] << 3), for indexing pgd */
  34:   037ad82d    daddu   k1,k1,k0        /* index pgd */
  38:   403a4000    dmfc0   k0,c0_badvaddr
  3c:   df7b0000    ld  k1,0(k1)            /* get pmd */
  40:   001ad4ba    dsrl    k0,k0,0x12      # >> 18
  44:   335a0ff8    andi    k0,k0,0xff8     # get (vaddr[29:21] << 3)
  48:   037ad82d    daddu   k1,k1,k0        # index pmd
  4c:   403a4000    dmfc0   k0,c0_badvaddr
  50:   df7b0000    ld  k1,0(k1)            # get p_pt
  54:   001ad27a    dsrl    k0,k0,0x9
  58:   335a0ff8    andi    k0,k0,0xff8     # get (vaddr[20:12])
  5c:   037ad82d    daddu   k1,k1,k0        # index pt

  60:   d37a0000    lld k0,0(k1)            # get pt entry
  64:   42000008    tlbp        # to distinguish TLB invalid or TLB refill exception

  68:   335a0003    andi    k0,k0,0x3
  6c:   3b5a0003    xori    k0,k0,0x3           # _PRESENT and _READ
  70:   1740001a    bnez    k0,dc <0xdc>   # low two bits is not 011, branch @@-->out
  74:   d37a0000    lld k0,0(k1)                # get pt entry again

  78:   375a0088    ori k0,k0,0x88
  7c:   f37a0000    scd k0,0(k1)                # set pt entry's pte[7] = 1, pte[3] =1
  80:   1340fff7    beqz    k0,60 <0x60>
  84:   00000000    nop

  88:   377b0008    ori k1,k1,0x8
  8c:   3b7b0008    xori    k1,k1,0x8           # for getting even page
  90:   df7a0000    ld  k0,0(k1)                # get even page addr
  94:   df7b0008    ld  k1,8(k1)                # get odd page addr
  98:   001ad1ba    dsrl    k0,k0,0x6
  9c:   409a1000    mtc0    k0,c0_entrylo0
  a0:   001bd9ba    dsrl    k1,k1,0x6
  a4:   409b1800    mtc0    k1,c0_entrylo1
  a8:   42000002    tlbwi
  ac:   42000018    eret

 @@
  b0:   001ad8b8    dsll    k1,k0,0x2   # go here, vaddr is in xkphys or xkseg (>0x8000..0000)
                                        # 0x8000..0000 ~ 0xc000..0000 is xkphys, unmapped,
                                        # so vaddr > 0xc000..0000; vaddr << 2
  b4:   07610005    bgez    k1,cc <0xcc>
                                        # vaddr[61] != 1 (0xc000..0000 ~ 0xdfff..ffff), branch
  b8:   3c1bc000    lui k1,0xc000

                                        # vaddr, 0xe000..0000 ~ 0xffff..ffff
  bc:   035bd02f    dsubu   k0,k0,k1    # k0 = vaddr - 0xffffffffc0000000
  c0:   3c1b8396    lui k1,0x8396
  c4:   1000ffd9    b   2c <0x2c>
  c8:   277ba000    addiu   k1,k1,-24576    # k1 = 0xffffffff8395a000, module_pg_dir
                                            # module_pg_dir & swapper_pg_dir don't need the smp

 @@
                                        # vaddr, 0xc000..0000 ~ 0xdfff..ffff
  cc:   001bd83c    dsll32  k1,k1,0x0   # 0xc0000000 00000000
  d0:   035bd02f    dsubu   k0,k0,k1    # k0 = vaddr - 0xc0000000 00000000
  d4:   1000ffd5    b   2c <0x2c>
  d8:   3c1b8396    lui k1,0x8396       # only swapper_pg_current

 @@-->do_page_fault
  dc:   08d01150    j   3404540 <0x3404540>
  e0:   00000000    nop
    ...

Windows内核--CPU和内核(1.7) ARM具备低功耗优势, 除了高通, 还有Broadcom/NXP等都支援ARM架构.苹果自研M系列开了头,ARM不仅有低功耗,同样有性能,Windows也想分一杯羹。 阅读详情

相关推荐

龙芯K架构开发环境搭建与内核编译问题解决

在嵌入式系统开发中,交叉编译工具链配置和内核定制是关键技术环节。MIPS64架构作为经典RISC指令集,其龙芯K系列处理器通过指令集优化和硬件定制实现了性能突破。开发过程中,开发者常遇到VPE模块兼容性、缓存一致性等典型问题,这些问题与龙芯特有的多核调度机制和缓存管理策略密切相关。通过正确配置内核参数和应用官方补丁,可以有效解决编译错误和系统稳定性问题。在工业控制、网络设备等应用场景中,合理调优龙芯处理器的中断响应和内存访问性能尤为重要。久久派开发板作为典型应用平台,其GMAC网络驱动和SPI Flash配

weixin_34216614的博客 300

mips64 虚地址空间划分

在32位CPU下,程序地址空间划分为4个大区域。每个区域有一个传统的名字。对于在这些区域的地址,各自有不同的属性: kuseg: 虚拟空间0x0000 0000 - 0x7FFF FFFF (低端2G):这些地址是用户态可用的地址。在有MMU的机器里,这些地址将一概被MMU作转换,除非MMU的设置被建立好,否则这2G地址是不可用的。对于没有MMU的机器,存取这2G地址的方法依具体机器相关,你

lanxch的专栏 6965

MIPS指令集模拟器全览:从教育工具到工业级虚拟化

本文全面解析MIPS指令集模拟器,从教育工具SPIM和MARS到工业级虚拟化平台QEMU和OVPsim。探讨MIPS架构基础、教学应用、工业级虚拟化解决方案及高级特性,帮助开发者和教育者选择合适的工具,提升开发效率与系统验证能力。

v5w6x的博客 626

64位多核 MIPS 异常和中断内核代码分析 (2)

64位多核 MIPS 异常和中断内核代码分析 (2) 本节主要分析 Cavium Octeon 上 TLB 异常相关的处理函数   1.2 TLB Refill 例外入口   非启动模式 (BEV=0) 下,MIPS64 R1上,64 位地址空间的 TLB Refill 入口在物理地址 0x80 处,其空间可以放一个 32 条指令的处理函数; 32 位地址空间的 TLB Refil

白水煮鸡蛋 2779

计算机体系结构基础——1

从 CPU 架构说起 引言 CPU 是整个计算机体系结构的核心,体系结构研究 CPU 内部的结构,CPU 如何与内存,外设交互,如何支撑并配合操作系统。 资料主要来源: 《Linux 内核完全剖析–基于0.12内核》/ 赵炯 1 著. ——机械工业出版社,2010.1 《计算机体系结构》/ 胡伟武等著. ——北京:清华大学出版社,2011.6 其他资料参见篇后附录链接 三种 CPU 架构的介...

星海横流的博客 3735

XLR732处理器介绍

非常详细的描述了XLR系列处理器的PPT

Linux Kernel Driver 内核延时,并发,竞态

内核延时 Linux 内核延时分为两种方式,一种 忙延时 一种 休眠延时。 忙延时,CPU在原地空转,等待条件满足,适用于延时时间较短的场景。 实现忙延时的API: ndelay(x) x 表示纳秒 udelay(x) x 表示微秒 mdelay(x) x 表示毫秒数 如果延迟大于CPU能够响应的最短中断的时间,比如 ARM 架构 HZ 为100,那么响应中断的最短间隔为 10毫秒,如果延迟超过了该值(10毫秒),那么不再建议使用 忙延时,而采用休眠延时。 忙延时,是不释放C...

frodocheng的博客 927

多核多线程处理器XLR732的多核间通信.pdf

多核多线程处理器XLR732的多核间通信.pdf,这是我花钱买的很有价值的文档。贡献给大家了,希望对大家有帮助!

64位多核 MIPS 异常和中断内核代码分析 (4)

64位多核 MIPS 异常和中断内核代码分析 (4)   1.3 其它例外入口初始化 其它例外的入口初始化位于: [arch/mips/kernel/traps.c] void __init trap_init() { ......     /*      * Copy the generic exception handlers to their final destina

白水煮鸡蛋 1896

COMSOL 6.4安装全攻略:安装包获取、许可证配置与避坑指南

多物理场仿真是现代工程与科研中不可或缺的技术手段,其核心原理在于将电磁、结构、流体、传热等不同物理过程的耦合效应置于统一环境中求解,从而真实模拟复杂系统行为。这类仿真平台能大幅提升产品研发与设计验证效率,广泛应用于电子散热、声学分析、电力设备等领域。在部署最新版本仿真软件时,安装与许可证配置往往成为影响工作效率的关键环节。本文系统梳理COMSOL 6.4在Windows平台的安装全流程,涵盖安装包获取、系统依赖准备、许可证配置、常见报错排查等实用经验,帮助工程师与科研人员一次性完成环境搭建,把更多时间投入真

weixin_30000735的博客 1364

使用PyTorch设计卷积神经网络(CNN)来处理遥感图像Indian Pines数据集

使用PyTorch设计卷积神经网络(CNN)来处理遥感图像Indian Pines数据集

XAX520_1314的博客 2491

64位多核 MIPS 异常和中断结构

64位多核 MIPS 异常和中断结构 1. 概述 MIPS 统称异常(同步事件)和中断(异步事件)为例外 (Exception) 引入异常则是为了解决处理器运行过程中的一些意外情形,比如执行流中有非法指令(无法被处理器辨识的指令),访问了没有映射的虚拟地址等等。 中断的引入则是提供一种 IO 设备请求处理器服务的一种通讯机制;往往是由外部设备主动发起(给处理器的中断引脚一个信号),

白水煮鸡蛋 2603

Logisim实战:手把手教你设计硬布线版MIPS CPU(多周期/8指令/附电路图)

本文是一份详细的Logisim实战指南,手把手教你设计一个采用硬布线控制的多周期MIPS CPU。文章深入剖析了硬布线控制与微程序控制的核心理念差异,并逐步讲解了从定义执行状态、构建状态跳转逻辑到生成控制信号、集成测试的完整流程,最终实现一个支持8条指令、可运行简单程序的处理器模型。

g9h0i1的博客 592

64位多核 MIPS 异常和中断内核代码分析 (1)

64位多核 MIPS 异常和中断内核代码分析 (1) 1. 高优先级例外入口初始化 本文不涉及 Bootloader,因此 Reset 例外入口处的 Bootloader 我们就不讨论了。 多核环境下,所有核默认指向的例外入口基地址都是一样的,尽管可以修改各自核内部的 EBase 寄存器来改变例外入口基地址,但我们此处只讨论所有核运行在对称多处理模式(SMP) 下的情形,即所有核都使用同样的

白水煮鸡蛋 2254

机器学习分类算法之XGBoost(集成学习算法)

目录 走进XGBoost 什么是XGBoost? XGBoost树的定义 XGBoost核心算法 正则项:树的复杂程度 XGBoost与GBDT有什么不同 XGBoost需要注意的点 XGBoost重要参数详解 调参步骤及思想 XGBoost代码案例 相关性分析 n_estimators(学习曲线) max_depth(学习曲线) 调整max_depth 和min_child_weight 调整gamma 调整subsample 和colsample_bytree 调整正则

迷茫与徘徊只会让你陷入绝境,欢迎私信博主,带你开始提升变现价值! 11万+

RPA与旅游与酒店行业自动化实战案例

1. 背景介绍 1.1 旅游与酒店行业的挑战 旅游与酒店行业是一个高度竞争的市场,企业需要不断提高服务质量、降低成本、提高效率以保持竞争力。在这个过程中,企业面临着诸多挑战,如客户需求多样化、市场变化快速、人力资源成本高昂等。为了应对这些挑战,企业需要寻求新的技术手段来提高运营效率。

AI天才研究院 615

64位多核 MIPS 异常和中断内核代码分析

http://hi.baidu.com/comcat/blog/item/3cff7bddec14a1f176c6388a.html 1. 概述 MIPS 统称异常(同步事件)和中断(异步事件)为例外 (Exception) 引入异常则是为了解决处理器运行过程中的一些意外情形,比如执行流中有非法指令(无法被处理器辨识的指令),访问了没有映射的虚拟地址等等。 中断的引入则是提供一种 IO

Blaider的专栏 1万+

打通ZYNQ的任督二脉:AXI_FIFO数据交互全解析

FIFO(First In First Out,先进先出)是一种经典的数据缓冲结构,就像排队买票一样,先来的人先得到服务。时钟域交叉(CDC):连接不同时钟频率的模块数据缓冲:平衡生产者和消费者的速度差异流量控制:防止数据丢失或溢出input clk,// 输入AXI4-Stream接口(从PS到PL)// 输出AXI4-Stream接口(从PL到PS)// 状态指示信号// 定义状态机状态// 数据缓存// 8个深度的缓存// 流水线处理寄存器。

QQ_778132974的博客 306

龙芯架构(LoongArch)简介

龙芯架构是我国自主研发的开源RISC指令集,旨在构建自主可控的软硬件生态。该架构采用模块化设计,支持32位(LA32R/LA32S)和64位(LA64)版本,具备多核、虚拟化等扩展功能,并通过二进制翻译技术兼容x86/ARM/MIPS程序。其软件生态已覆盖主流Linux发行版和开发工具链,硬件支持DDR4/DDR5内存和NUMA架构。龙芯架构通过分层启动流程完成初始化,采用4级页表管理内存,支持TLB重填和大页优化,并实现高效的中断处理与进程调度机制。该架构在服务器、桌面和嵌入式领域均有应用,展现了国产CP

tangzhangyin的专栏 1681

数字图像处理:直方图匹配或规定化Histogram Matching (Specification)原理及感悟

本文介绍了连续图像和数字图像直方图匹配(直方图规定化)的原理、处理过程,并提供了案例进行了讲解。可以看到,直方图均衡处理是直方图匹配的一个重要桥梁。 最后,对于直方图规定化这个翻译个人觉得很low,个人感觉叫指定直方图更好理解,但Histogram Specification怎么翻译确实不太好把握,因此还是叫Histogram Matching直方图匹配最好。

老猿Python 2880

OceanBase迁移平台OMS企业版部署

OceanBase迁移平台OMS企业版部署摘要: 本文档详细介绍了OceanBase迁移平台OMS企业版的部署流程,包含环境准备、OAT部署管理、MetaDB部署等关键步骤。

Sebastien23的博客 521

中断向量表简要分享

中断向量表是计算机系统连接硬件中断与软件处理的核心机制,其设计随处理器架构和应用场景呈现显著差异。x86架构从实模式固定地址IVT演进为保护模式灵活IDT,通过描述符特权级和内存保护实现安全性;ARM架构面向嵌入式优化,支持向量表重定位和TrustZone隔离;MIPS采用软件主导的异常处理;RISC-V则体现模块化设计理念。异常处理流程揭示向量表的关键作用——通过专用表项快速定位处理程序,实现错误恢复或系统保护。

Mr_-G,一名勤奋底层软件开发工程师的博客 1561

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MIPS内嵌汇编实战指南:从语法解析到原子操作与性能优化

内嵌汇编是连接高级语言与底层硬件的关键技术,它允许开发者在C/C++代码中直接嵌入处理器特定的汇编指令,实现对硬件资源的精确控制。其核心原理在于通过编译器提供的特殊语法(如GCC的`asm`关键字),将汇编指令模板与C变量进行绑定,并由编译器负责寄存器分配与指令调度。这项技术的价值在于能够突破高级语言的限制,直接访问特权寄存器、实现原子操作、执行特定处理器指令,从而在操作系统内核、嵌入式系统、驱动开发及性能关键路径优化等场景中发挥不可替代的作用。本文聚焦于经典的RISC架构——MIPS,深入解析其内嵌汇编的

weixin_33735077的博客 460

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

读书笔记之基于龙芯的linux内核探索解析

1.1龙芯处理器简介 中央处理器(cpu)分为复杂指令集计算机(cisc)和精简指令集计算机(risc),cisc具有指令集复杂而庞大,指令字不等长,寻址方式复杂,计算指令操作数可以是内存等特征,典型代表有x86.risc具有指令集精简而高效,指令字等长,寻址方式简明,计算指令操作必须是寄存器等特征,典型代表有arm,mips,power.两者各有其优劣. 龙芯cpu属于无互锁流水阶段微型计算机(mips)家族,是risc精简指令集体系结构的一种.产品以32位和64位单核及多核为主,主要面向网络安全,高端嵌

冷漠的搬砖人的博客 2731

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

深入解析PowerPC Book E架构:指令集、控制寄存器与多核同步机制

在嵌入式系统与实时计算领域,处理器架构是决定系统性能、功耗与可靠性的基石。RISC(精简指令集计算机)架构以其精简指令、固定长度和高效的流水线设计,成为高性能嵌入式处理器的首选。其技术价值在于通过硬件与软件的协同优化,为路由器、汽车电子和工业控制等对实时性有严苛要求的场景提供了确定性的计算基础。Book E作为PowerPC架构的增强版本,正是这一理念的典范,它在保持应用级二进制兼容性的同时,针对嵌入式环境重新设计了系统编程模型。本文聚焦于Book E架构的**指令集格式**与**处理器控制寄存器**两大核

328
上一篇: 64位多核 MIPS 异常和中断内核代码分析 (2)
下一篇: 64位多核 MIPS 异常和中断内核代码分析 (4)
白水煮鸡蛋
博客等级 码龄15年 106粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值