操作系统大作业模拟实现命令解释器_PPSSPP模拟器基本架构(一)

731ceb49627e7cb3f2534570694f08d6.png

一、索尼PSP的软硬件体系

PSP首发于2004年,外观属于直板形式的一体式掌上游戏主机,支持插入卡带(一种特制小光盘UMD)。主要有3个系列,游戏彼此兼容。主要提升是更轻薄和更好的硬件特性。同时支持wlan无线网络和网络浏览器。

241f2c0d11b8af5acdadf9401a86d369.png

硬件体系采用两颗333MHZ的基于MIPS32 r4000的处理器,一颗作为主处理器,一颗做为图形和多媒体加速处理器使用。主内存容量为32M,图形显存为4M,后期升级型机器内存升级到64M,但是为了保持兼容性一般额外升级的内存作为缓存使用。最开始为了续航和维持电池寿命,CPU锁频为222MHZ,后期锁频被索尼解除。基中战神系列游戏必须运行在高主频模式上。

软件上使用裁剪的类BSD结构的UNIX操作系统,主要是底层函数接口部分和库的loader部分被索尼大量定制,二进制文件格式对ELF进行了一定的修改,不过整体上还是保留了BSD的系统结构。

PSP因为出色的图形表现和便携性,同时对多媒体音频视频支持良好,成为苹果iPhone出现之前最畅销的手持电子设备,不算后代的PSV,总销量大概8000万部。

PSV是索尼2011年发售的的掌机,同时兼容PSP游戏。因为外观相似度太高总是被人混为一谈,实际上PSV的硬件基于ARM平台,PPSSPP不可以运行针对PSV的游戏。

二、关于PPSSPP模拟器

PPSSPP是Henrik Rydgård设计的开源PSP模拟器,作者也是Dolphin模拟器的创建者之一,所以在系统架构上PPSSPP和Dolphin大致类似。PPSSPP通过对PSP的系统API进行高层行为模拟同时对MIPS的指令进行动态翻译即时编译执行的方式模拟运行PSP的游戏镜像。PPSSPP的性能非常高,在2019年主流手机运行PPSSPP都非常流畅,同时软件还支持扩展游戏分辨率,贴图分辨率调整,图像后期渲染,即时存档等功能。

8effbb1bb25329021ec62057735a8456.png

三、PPSSPP的系统架构

1. 反汇编与即时编译模块

这一块位于源码目录Core/MIPS内,此模块为整个模拟器十分核心和对性能影响极其巨大的模块。位于子目录IR中的是PPSSPP设计的简单中间指令集,反编译的目标为中间指令集,之后再由中间指令集进行即时翻译或是编译到目标平台运行。IRinst.h文件定义了指令的操作码,实际上这层IR仅仅是对MIPS指令进行一定的抽象封装,寄存器也是直接使用MIPS的寄存器定义。精简指令集MIPS本身非常容易设计解释器,因此设计IR解释器也很容易。IRInterpreter.h和IRInterpreter.cpp定义了中间代码的解释器,不过一般此解释器为调试使用,在目标平台一般不启用此解释器。即时编译的架构如下图所示:

634ec027c192db3935c0d59a70af1be7.png

对于IR的优化主要是合并一些指令的操作,因为x86和ARM平台都有不少向量指令集的扩展,可以极大加速向量类的操作。同时针对指令流水线也可以进行一定不破坏语义的重排。对于即时编译部分作者没有利用开源的ASMJIT或是LLVM,而是重用了之前Dolphin模拟器中的已有模块。基本的即时编译过程并不复杂,主要是对虚拟的寄存器变量和内存变量进行操作,里面的关键是性能调优。

定义即时编译的相关接口类都在JitCommon.h头文件中,即时编译的基本模块是基本块,之后将之连接成函数并保存。为了让即时编译实现更加模块化,定义了即时编译的前端接口MIPSFrontendInterface,对于不同分类的指令分割到不同函数中实现而不用制造一下巨大的switch跳转表。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值