PMON学习记录3:PMON启动流程

article/2025/9/12 19:38:48

可以参考讯为电子的PMON学习视频:

https://www.bilibili.com/video/BV13M4y1P7H8?p=8&vd_source=7758aca909f593c8652fba5b3a94211dhttps://www.bilibili.com/video/BV13M4y1P7H8?p=8&vd_source=7758aca909f593c8652fba5b3a94211d

 1.通用寄存器:

 $0:即$zero ,该寄存器总是返回零,为0这个有用常数提供了一个简洁的编码形式。
           move $t0,$t1
       实际为
           add $t0,$0,$t1
       使用伪指令可以简化任务,汇编程序提供了比硬件更丰富的指令集。
$1:即$at,该寄存器为汇编保留 ,由于I型指令的立即数字段只有16位,在加载大常数时,编译器或汇编程序需要
       把大常数拆开,然后重新组合到寄存器里。比如加载一个32位立即数需要 lui(装入高位立即数)和addi两条
       指令。像MIPS程序拆散和重装大常数由汇编程序来完成,汇编程序必需一个临时寄存器来重组大常数,这
       也是为汇编 保留$at的原因之一。
$2..$3:($v0-$v1)用于子程序的非浮点结果或返回值, 对于子程序如何传递参数及如何返回,MIPS范围有一套约
       定,堆栈中少数几个位置处的内容装入CPU寄存器,其相应内存位置保留未做定义,当这两个寄存器不够存
       放返回值时,编译器通过内存来完成。
$4..$7:($a0-$a3)用来传递前四个参数给子程序,不够的用堆栈 。 a0-a3和v0-v1以及ra一起 来支持子程序/过程
       调用,分别用以传递参数,返回结果和存放返回地址。当需要使用更多的寄存器时,就需要堆栈(stack)
       了,MIPS编译器总是为参数在堆栈中留有空间以防有参数需要存储。
$8..$15:($t0-$t7)临时寄存器, 子程序可以使用它们而不用保留。
$16..$23:($s0-$s7)保存寄存器,在过程调用过程中需要保 留(被调用者保存和恢复,还包括 $fp和$ra ),MIPS
       提供了临时寄存器和保存寄存器,这样就减少了寄存器溢出(spilling,即将不常用的变量放到存储器的过程),
       编译器在编译一个叶(leaf)过程(不调用其它过程的过程)的时候,总是在临时寄存器分配完了才使用需要
       保存的寄存器。
$24..$25:($t8-$t9)同($t0-$t7)
$26..$27:($k0,$k1)为操作系统/异常处理保留,至少要预留一个 。 异常(或中断)是一种不需要在程序中显示
       调用的过程。MIPS有个叫异常程序计数器(exception program counter,EPC)的寄存器,属于CP0寄存器,

       用于保存造成异常的那条指令的地址。查看控制寄存器的唯一方法是把它复制到通用寄存器里,指令mfc0
       (move from system control)可以将EPC中的地址复制到某个通用寄存器中,通过跳转语句(jr),程序可以返
       回到造成异常的那条指令处继续执行。MIPS程序员都必须保留两个寄存器$k0和$k1,供操作系统使用。

       发生异常时,这两个寄存器的值不会被恢复,编译器也不使用k0和k1, 异常处理函数可以将返回地址放到这
       两个中的任何一个,然后使用jr跳转到造成异常的指令处继续执行 。
$28:($gp) 为了简化静态数据的访问,MIPS软件保留了一个寄存器:全局指针gp(global pointer,$gp),全局指针
       只想静态数据区中的运行时决定的地址,在存取位于gp值上下32KB范围内的数据时,只需要一条以gp为基
       指针的指令即可。在编译时,数据须在以gp为基指针的64KB范围内。
$29:($sp)MIPS硬件并不直接支持堆栈 ,你可以把它用于别的目的,但为了使用别人的程序或让别人使用你的程
       序, 还是要遵守这个约定的,但这和硬件没有关系。
$ 30:($fp)GNU MIPS C编译器使用了帧指针(frame pointer), 而SGI的C编译器没有使用, 而把这个寄存器当作保
       存寄存器使用($s8), 这节省了调用和返回开销,但增加了代码生成的复杂性。
$31:($ra)存放返回地址, MIPS有个jal(jump-and-link,跳转并 链接)指令,在跳转到某个地址时,把下一条指令的
       地址放到$ra中。用于支持子程序,例如调用程序把参数放到$a0~$a3,然后jal X跳到X过程,被调过程完成后

       把结果放到$v0,$v1,然后使用jr $ra返回。

2.MIPS运行模式:

        主要是两种运行模式:用户模式和核心模式

3.MIPS处理器地址映射

 

MIPS32将虚拟地址空间划分为4个区域:

  • kuseg 0x0000.0000 - 0x7FFF.FFFF(低2GB)

这些地址是用户态可用的地址。对于有MMU的机器,这些地址需要经过MMU(TLB)的转换后才可以使用;对于没有MMU的机器,这些地址的行为与具体机器实现相关。

  • kseg0 0x8000.0000 - 0x9FFF.FFFF(512MB):

这段地址只需将最高位清零即转换为物理地址,映射到连续的低端512MB物理地址上,因此在描述其属性时一般称为unmapped。另外该段地址访问时总是需要通过cache,因此描述其属性时称为cached。在一般应用上,这段地址映射到的物理地址用于存放程序和数据或者操作系统核心。

  • kseg1 0xA000.0000 - 0xBFFF.FFFF(512MB):

与kseg0类似,这段地址同样映射到了低端512MB物理地址(将高3个bit清零),但其访问不经过cache,因此其属性可以称为 unmapped/uncached。由于unmaped/uncached特性,这段地址无需配置TLB和cache即可使用,是唯一的在系统重启时能 正常工作的地址空间,因此复位入口点(0xBFC0.0000)被放在这个区域,其物理地址为0x1FC0.0000。

  • kseg2 0xC000.0000 - 0xFFFF.FFFF(1GB):

该段地址只能在核心态下使用且需要经过MMU(TLB)转换。


http://chatgpt.dhexx.cn/article/FGc8WbQl.shtml

相关文章

PMON学习记录2:PMON启动流程1

PMON启动流程分析 B站有讯为电子的详细介绍视频,连接如下,十分推荐第一次学的看一下https://www.bilibili.com/video/BV13M4y1P7H8?p7&vd_source7758aca909f593c8652fba5b3a94211dhttps://www.bilibili.com/video/BV13M4y1P7H8?p7&vd_source77…

PMON分析(1)- ROM阶段

PMON的运行过程分为两个阶段:第一阶段是在ROM FLASH中运行,主要进行基本硬件初始化,如:初始化核的一些配置寄存器,其中包括cpu状态和原因寄存器、pcie的配置寄存器、GPIO、sata、cache、tlb、内存控制器和串口初始化等…

【基础知识】Oracle核心进程(PMON、SMON、DBWn、LGWR、CKPT)

本文主要总结的是五个核心后台进程(PMON、SMON、CKPT、DBWn、LGWR),理解这些进程的概念是Oracle学习的内功,是TroubleShooting和优化的基础,以下内容参考了Oracle编程艺术、官方文档Concept、OCP考试指南及行业大牛的总…

pmon下常用命令

pmon下常用命令 在进入系统前按 “c” 进入pmon的命令行。如设置自器动的话(pmon自动加载内核、启动文件系统),需要设置环境变量 a l / al/ al/al1、$append。 1、帮助命令 h 有两种使用方式: ① h 查看所有命令 ② h xxx 查…

PMON环境配置(龙芯,亲测成功1)

1.前言 2.运行平台 3.依赖组件 4.安装与配置安装专用GCC编译器 4.1下载GCC编译器 4.2解压GCC编译器 4.3配置系统运行 5.编译龙芯PMON执行文件 5.1下载PMON源码 5.2 编译并配置git tools插件 5.3编译gzrom…

PMON简介

最近在学习Sylix OS,将系统运行至龙芯开发板时候需要用到PMON,记录一下几种下载方式 目录 一.PMON启动过程 二.PMON命令介绍 1.load 命令 tftp 启动 USB 手动启动 硬盘手动启动 硬盘自动启动 2.reboot 命令 3.date 命令 4.ifconfig 命令 5.ping 命令 6.s…

Java多线程游戏仿真实例分享

这是一篇学习分享博客,这篇博客将会介绍以下几项内容: 1、如何让一个程序同时做多件事?(多线程的创建、多线程的应用) 2、如何让小球在画面中真实地动起来?(赋予小球匀速直线、自由落体、上抛等…

算法工程 # 深度学习算法落地最后一公里:工业界中的大规模向量检索

前言:现代深度学习实践中很多场景其实都是对输入数据进行处理、嵌入,最终获得一个 embedding,然后对 embedding 进行相似度检索,而工业界中的被检索数据往往是海量的,因此深度学习模型落地的最后一步也就是大规模向量检…

向量检索-faiss检索

一、语义相似检索背景 1、为什么引入语义相似检索(向量检索) 问题引出: 搜索引擎和搜索广告最难解决的问题是语义相似度 具体体现:召回和排序。 Case1: 如"从北京到上海的机票"与"携程网"的相似性 Case2"快递软件"与&q…

ModaHub魔搭社区:向量数据库Milvus性能优化问题(三)

目录 Milvus 的导入性能如何? 边插入边搜索会影响搜索速度吗? 批量搜索时,用多线程的收益大吗? 为什么同样的数据量,用 GPU 查询比 CPU 查询慢? Milvus 的导入性能如何? 客户端和服务端在同一台物理机上时,10 万条 128 维的向量导入需要约 0.8 秒(基于 SSD 磁盘)…

Shader 优化相关资料整理

什么是渲染管线 注: 应用程序阶段:主要是CPU与内存打交道,例如碰撞检测,计算好的数据(顶点坐标、法向量、纹理坐标、纹理)就会通过数据总线传给图形硬件 。 几何阶段:其实上图有个问题&#xff…

pthread多线程入门-并行计算高维向量

介绍pthread ​ pthread其实也可以当作C/C的一个库&#xff0c;所有的函数和数据类型都在<pthread.h>中&#xff0e;跟AVX一样&#xff0c;如果使用了pthread&#xff0c;在编译的时候必须加上编译参数-lpthread&#xff0e;使用gcc编译指令如下&#xff1a; gcc filen…

Unity项目优化详解(持续补充ing)

Unity开发项目总结的几项优化点&#xff0c;比较适合中小项目优化&#xff0c;拿来即用&#xff0c;大型项目需要考虑定制化渲染管线、剔除、光照等。针对优化更多的还是需要结合项目去考虑。 一、模型 Read/Write&#xff1a;同Texture&#xff0c;若开启&#xff0c;Unity会…

SQL查询优化原理与向量化执行引擎

文章目录 1.SQL查询优化的目的2.SQL 查询优化的基本原理之研究如何通过关系代数优化执行方案3.总结使用关系代数进行查询优化的要点4.SQL 查询优化的基础算法5.Volcano Optimizer6.自底向上 vs. 自顶向下7.广度优先搜索与启发式算法8. 向量化执行引擎 1.SQL查询优化的目的 本文…

SQL优化之火山模型、向量化、编译执行

文章目录 1.当代CPU特性2.查询执行模型3.向量化VS编译执行4.编译执行融合向量化5.优化方向 1.当代CPU特性 向量化执行和编译执行是目前主流的两种数据库执行引擎优化手段。 了解CPU特性可以让我们真正理解各种数据库执行引擎优化技术的动机。 影响数据库执行引擎执行效率的C…

UE4性能优化

UE4性能优化 参考文档&#xff1a;UE4性能优化GPU分析**CPU分析**一些相关工具 Time: 2021年10月19日16:46:22 Desc: UE4性能优化 参考文档&#xff1a; https://docs.unrealengine.com/4.27/zh-CN/TestingAndOptimization/PerformanceAndProfiling/https://blog.csdn.net/u01…

一文纵览向量检索

摘要&#xff1a;本文针对向量检索要解决的问题&#xff0c;梳理了主流向量检索相关的技术&#xff0c;分析了向量检索目前的一个趋势。 什么是向量检索 首先我们了解下什么是向量&#xff0c;所谓向量就是由n个数字&#xff08;二值向量由n个比特组成&#xff09;组成的数组&…

C/C++编译器并行优化技术:并行优化针对多核处理器和多线程环境进行优化,以提高程序的并行度

目录标题 引言数据并行&#xff1a;将数据集分割成多个子集&#xff0c;分配给多个线程或处理器并行处理。延迟执行与乱序执行&#xff1a;对指令的执行顺序进行调整&#xff0c;提高指令流水线的利用率和性能。延迟执行乱序执行 任务并行&#xff1a;将程序分解为多个独立的任…

离散与提炼——一些关于向量召回算法优化方法的思考

✏️ 作者介绍&#xff1a; 周语馨&#xff0c;高级云智能工程师 最近做的很多向量召回的相关工作&#xff0c;主要集中在优化 Faiss 里面常用的几个算法&#xff0c;包括 IVFFlat 和 IVFPQ&#xff0c;并且针对这两个算法都做出了专门的优化。 前一阵子灵光乍现&#xff0c;想…

java手动回收线程_性能优化:线程资源回收

本文来自: PerfMa技术社区 PerfMa(笨马网络)官网 一、问题 模型服务平台的排序请求出现较多超时情况&#xff0c;且不定时伴随空指针异常。 二、问题发生前后的改动 召回引擎扩大了召回量&#xff0c;导致排序请求的item数量增加了。 三、出问题的模型 基于XGBoost预测的全排序…