jpcsp源码解读11:近期笔记

原创 2012年03月28日 21:39:17

最近阅读代码主要牵涉到两个问题,一个是动态二进制翻译,一个是进程管理。

两个问题都很棘手,代码量大,复杂度高。今天主要备份一下关键笔记。

/////////////////////////////////////////////////////////////////////////
启动运行流程:
用户点击 运行 按钮
RunButtonActionPerformed
RunEmu
emulator.RunEmu()
mainThread.start()
start就是调用该线程的run方法
Emulator.run()
如果使能动态二进制翻译
RuntimeContext.run()
-->getExecutable(processor.cpu.pc)
-->Compiler.getInstance().compile(address)
-->compile(address, getResetCount())
-->executable = analyse(context, address, false, instanceIndex)
-->context.analysedAddresses.add(pc)
  codeBlock.addInstruction(pc, opcode, insn, isBranchTarget, isBranching, branchingTo)
  executable = codeBlock.getExecutable(context)
-->compile(context)
-->prepare(context, context.getMethodMaxInstructions())
  compile(context, mv, codeInstructions)
  compile(context, mv, sequenceCodeInstruction.getCodeSequence().getInstructions())
否则,不使能动态二进制翻译,就单步执行
processor.step()
/////////////////////////////////////////////////////////////////////////


进程调度与进程切换:
ThreadManForUser.java(Initialise创建了第一个进程)
hleRescheduleCurrentThread
contextSwitch                   *************************关键函数,关于callback此处还有疑问**********************
internalContextSwitch
这个函数调用过程完成了操作系统层面的进程调度和上下文切换,在系统层的进程管理器中记录了新的运行态进程,并且根据该进程的描


述符更新了processor
internalContextSwitch最后调用了RuntimeContext.update
RuntimeContext.update
则是更新运行时上下文,将运行上下文切换到新进程。函数调用过程:
RuntimeContext.update
switchThread
switchRealThread
{
thread = new RuntimeThread(threadInfo)
thread.start()
-->thread.run()
-->RuntimeContext.runThread(this)
-->getExecutable(processor.cpu.pc)
-->executable = Compiler.getInstance().compile(address)


如果目标进程尚未创建运行时上下文,就在此时创建(也就是动态编译出可执行程序)
}

restoreContext中也调用了update操作,似乎与前述内容有重复


DCGAN论文笔记+源码解析

DCGAN,Deep Convolutional Generative Adversarial Networks是生成对抗网络(Generative Adversarial Networks)的一种延...
  • wspba
  • wspba
  • 2017年01月25日 22:55
  • 4732

pandas 学习笔记

读者只需浏览一下本文的目录结构,我相信就已经掌握了1到2成的 pandas 知识。本文的目的是建立一个大概的知识结构在数据挖掘python阅读源码时,断断续续查阅了些 pandas 资料,并在源码中大...
  • u012675539
  • u012675539
  • 2015年07月28日 22:29
  • 2656

论文笔记 | YOLO9000论文阅读笔记(一)

CVPR 2017刚刚结束,心想选几篇论文拜读一下,大牛就是大牛,仅供瞻仰。 YOLO9000: Better, Faster, Stronger 由华盛顿大学艾伦研究所的大牛Josehp Redm...
  • u014593748
  • u014593748
  • 2017年08月13日 20:33
  • 498

mxnet代码解析之mshadow

mshadow采用了表达式模板的技巧增强了c++矩阵库的性能。 mshadow用于数据存储结构的主要继承脉络如下: Tensor->TRValue->RValueExp->Exp 继承链的顶端是...
  • chaojichaoachao
  • chaojichaoachao
  • 2016年08月02日 15:36
  • 4066

Pixhawk 源码笔记

Pixhawk源码笔记五:存储与EEPROM管理   (2014-12-15 15:38:32) 转载▼ 标签:  pixhawk   学习笔记   ...
  • linuxarmsummary
  • linuxarmsummary
  • 2015年04月22日 19:23
  • 10417

DirectX 11游戏编程学习笔记之1: 开场白

本文由哈利_蜘蛛侠原创,转载请注明出处!有问题欢迎联系2024958085@qq.com           这是我之前的博客系列“DirectX9.0c游戏开发手记之‘龙书’第二版学习笔记”的平...
  • u011873969
  • u011873969
  • 2014年10月09日 00:17
  • 2404

spring 源码解读与设计详解:1 框架搭建

从今天起,开始写一系列的对呀spring的源码的解读和设计详解的相关文章。开篇第一章,框架搭建。 1、官网下载spring所需的jar包等,地址:http://spring.io/   (projec...
  • sundenskyqq
  • sundenskyqq
  • 2015年01月31日 20:44
  • 2542

jquery3.0源码解读(一)Init

目的督促自己耐心完整看完jquery源码,学习jquery书写思想,并留下笔记供他人参考。环境jquery源码地址:https://github.com/jquery/jquery/tree/3.0....
  • m1213642578
  • m1213642578
  • 2016年09月09日 20:43
  • 1998

FMDB源码分析

一、前言 如上一章所讲,FMDB源码主要有以下几个文件组成: FMResultSet : 表示FMDatabase执行查询之后的结果集。 FMDatabase : 表示一个单独的SQ...
  • leikezhu1981
  • leikezhu1981
  • 2016年06月14日 23:19
  • 552

jquery源码分析之Callbacks

Callbacks是JQ的一个回调对象,可以对回调进行统一的管理。而且还为Deferred延迟对象提供了基础功能。   一、举例: function aa(){ alert(1); } ...
  • vuturn
  • vuturn
  • 2015年06月22日 21:36
  • 788
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jpcsp源码解读11:近期笔记
举报原因:
原因补充:

(最多只允许输入30个字)