该来的终于来了

PS3的OtherOS惨遭升级阉割,消费者今日终于将SONY告上法院……

出来混的迟早要还的。

原文:Sony Sued For Removal Of Linux Support From PS3

相关文档

其实无所谓,反正我只用Linux

JIT, dynarec and binary translation

HyperIris原创文章,谢绝转载

JIT这个概念在计算机科学中,常见于两种上下文:对一般程序员来说,经常见到的是Just-in-time debugging,也就是当程序崩溃时,操作系统会根据预先的配置调用调试器来对故障进行诊断和处理;对于虚拟机来说,JIT意味着另一种技术-dynarec。

dynarec是两个单词的缩写,即dynamic recompilation。顾名思义,动态重编译是一种编译技术,但是又和我们常见的编译器不一样,它是在代码的执行阶段动态的将一种代码的表示方式翻译成另一种,例如,常常是字节码翻译成本地机器码。

我们每天使用的编译器,绝大多数都是将文本形式的源代码编译成机器可以执行的本地代码或者是虚拟机的字节码。这种编译过程又被称为ahead-in-time compile。这个编译过程往往是很慢的,在研发阶段进行的。因为这种编译过程往往涉及到复杂的词法、语法、语义分析和优化以及代码生成。由于现代编程语言大都规模庞大,所以这个编译过程通常需要较多的时间。

在何时需要引入dynarec呢?对于传统编译语言来说,是不需要的。在基于虚拟机的语言中,常常纯粹的解释执行不能带来满意的执行速度,这个时候就需要dynarec来提高速度。也就是,虚拟机不再解释执行字节码而是根据某种规则,将字节码翻译成本地机器指令(native code),然后再执行。由于解释执行往往比本地代码慢一到两个数量级,所以使用dynarec能带来较大的性能改善。

注意,无论如何,dynarec这个过程也是需要时间的,如果每次执行一条字节码都要执行dynarec然后再执行生成的本地代码,这显然是得不偿失的,dynarec必须要和一定的缓存策略配合才能真正起到作用。也就是说,我们将按照一定的策略,比如按照一定的字节码数,或者以函数为单位整体进行dynarec,然后将生成的本地代码缓存起来。这样,在最理想的情况下,dynarec只需要一次,当字节码下一次被执行的时候,虚拟机可以直接执行已经翻译的本地代码。

如果生成字节码的高级语言编译器能够在生成的字节码流之中或者其他地方提供一些额外的信息,那么可以提高dynarec这个过程的性能。

那么,binary translation又是什么呢?一般定义上它所处理的是从一种体系结构的机器指令到另一种体系结构的机器指令的翻译。注意输入输出都是传统意义上的机器指令。

binary translation分为静态和动态两种,从理论上讲,我们可以编写一个“编译器”,把一种体系的可执行代码翻译成另一种体系,然后永久保存下来,比如说我们有一个windows x86平台的文字处理程序,可以用这种“编译器”将它编译成linux powerpc平台的可执行程序。但是一般来说这仅仅是理论上可行,实际实现难度极大,以后我将另行撰文说明。动态的binary translation是dynarec的一个特殊分支,它的输入不是字节码,而是本地代码。

Happy birthday! Hubble

hubble

LBM Lid Driven Flow

我把何雅玲老师的《格子Boltzmann方法的理论及应用》一书的附录D程序输入并且调试完毕,工程是VS2010的,有需要的可以到我的google code下载。

工程地址是:https://code.google.com/p/openhyper/

svn访问是:

# Non-members may check out a read-only working copy anonymously over HTTP.
svn checkout http://openhyper.googlecode.com/svn/trunk/ openhyper-read-only

VS2010 RTM

Visual Studio 2010 已经RTM并且在Msdn subscription提供了下载和试用版本,为了迎接这一产品,我在这个周末格式化了系统分区重新安装了Windows 7 x64。

在最新的Visual Assist配合下,整个IDE较之之前的版本更加舒适。

vs01

比如,选中的变量名或者类名会自动在其作用域内以淡蓝色突出显示。

 

 

 

vs02

上图是我当前桌面的屏幕截图,目前系统配置在双显示器模式,主显示器2048×1152,副显示器1280×1024,所以图片我进行了缩小。由于VS2010实现了WPF为基础的代码编辑器,我可以在副显示器上打开代码编辑窗口,同时用鼠标滚轮平滑放大。

vs03

这是把副显示器上的代码窗口拖回IDE界面,这次可以直接拆分了。

OK,上面是面子上的工作,下面说说正经的核心内容,VC++ 2010到底怎么样呢?

  1. VC++的构建工具已经由vcbuild统一成为msbuild。在依赖性分析速度上有了很大的提高。
  2. 路径设置从IDE的全局性修改为per-project,简而言之就是include和lib等目录现在是在工程属性里面设置了,这对于很多工程的大项目来说,有利的一面是可以单独调整每个工程的设置,不利的一面是,繁琐了。
  3. 语言上的强化,这个不多说了,什么auto关键字扩充,什么C++0x(应该叫1x了……),之前有很多文章说过这个。
  4. 编译速度提高,MFC默认向导出来的ribbon界面的例子,x64 release rebuild all在我这里需要 1>Time Elapsed 00:00:09.81,比2008快了不少。
  5. 代码生成质量,这个只能泛泛的说一下,我还没有反汇编看,但是从可执行程序的体积比较能简单地看出一些。以Dolphin.exe为例,配置都是x64,优化全开链接时代码生成:
    • 2008: dolphin.exe 7,292,416 bytes
    • 2010: dolphin.exe 6,611,968 bytes
  6. ncb不见了,对,就是那个经常很大的破玩意。不过呢,取之而来的是一个sdf文件,MFC向导出来的工程,sdf文件是64M……,另外顺便说一下,整个工程的大小是255M……这是只有向导生成的代码没有任何改动的情况下,只做了deubg和release编译。

全脑瘫IT时代(四)

公司里中有些中病毒的机器,必须得用防火墙。于是装了ZoneAlarm……

又因为计算任务,连续开了几天机器然后C盘就一点可用空间都没了,我操!

tv

原来是这个Truevector Internet Monitor,不知道这玩意是哪个脑残设计的,总有人抱怨Windows臃肿占用大量硬盘空间,我看又是微软背黑锅了(这个tvdebug是放在windows目录下面的)。

投影键盘原理

projectkb说真的不知道该放在哪个分类,只好放在DIY里面了……说不定哪天我心血来潮真的会去做一个。

很久以前就知道这玩意了,一直觉得很科幻,而且极其昂贵,这玩意究竟是怎么工作的呢?研究了一下,其实很简单……

一共是四个组成部分:

1 投影模块。不要被激光投射出的键盘迷惑了,这玩意只是给人看的,完全不参与识别。

2 红外投射模块。红外投射模块贴着桌面发射平行于桌面的红外光,当手指敲在桌面上也就遮挡了光,也就是手指被红外光照亮了。

3 摄像模块。当手指被照亮,摄像头就看到了,如果只用一个摄像头那么识别还是挺麻烦的(特别是多个手指同时敲击),但是……我们可以用两个摄像头啊。识别处理太容易了。

4 接口模块。通过USB HID或者蓝牙,把自己报告成一个键盘,一个鼠标还是一个随便什么玩意。

画一张图,更容易理解上面的啰嗦文字:

pkb