<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[星际盟主：  weolar]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[&#60;script&#62;alert(&#34;居然xss被屏蔽了！--星际探索者~&#34;)&#60;/script&#62;]]></description>
<link>http://hi.baidu.com/weolar</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[缓存管理器的一处需要注意的小细节]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/0e7bbe01d723101e728da5af.html]]></link>
        <description><![CDATA[
		
		<p>在研究改别人的一个过滤驱动的时候，发现有的人会在pre&nbsp;Create回调里调用IoCreateFileSpecifyDeviceObjectHint打开Create参数里的文件名，并且用ZwReadFile读取文件并判断是否为pe文件。这种做法会导致一些小问题。</p><p>其中过滤驱动并没处理fast io。然后我发现pre write回调偶尔会收不到消息。仔细跟踪下去，发现write消息发送了，但参数里的fileobject并不是Create回调里产生的，而居然是IoCreateFileSpecifyDeviceObjectHint产生的文件对象。</p><p>而这个文件对象会有什么问题呢？</p><p>见如下堆栈：</p><p></p><p>f9efe9cc 804e4d77 FastFat!FatFsdWrite</p><p>f9efe9dc 804f0b8d nt!IopfCallDriver+0x31</p><p>f9efe9f0 804f0756 nt!IoSynchronousPageWrite+0xaf</p><p>f9efeacc 804f050d nt!MiFlushSectionInternal+0x38b</p><p>f9efeb08 804f0e18 nt!MmFlushSection+0x1e0</p><p>f9efeb90 f81e3043 nt!CcFlushCache+0x372</p><p>f9efebb8 f81d6006 Fastfat!FatFlushFile+0x20</p><p>f9efec0c f81d8bfc Fastfat!FatCommonFlushBuffers+0x12c</p><p>f9efec50 804e4d77 Fastfat!FatFsdFlushBuffers+0x3e</p><p>f9efec60 f8034432 nt!IopfCallDriver+0x31</p><p>f9efec78 f80338a2 xxx!IoCallDriverEx+0x22</p><p>f9efec98 f802a722 xxx!OnDispatch+0x142</p><p>f9efecb4 804e4d77 xxx!OnDriverDispatch+0x52 </p><p>f9efecc4 8056b9ab nt!IopfCallDriver+0x31</p><p>f9efecd8 8057a8be nt!IopSynchronousServiceTail+0x60</p><p>f9efed54 804e006b nt!NtFlushBuffersFile+0x1c1</p><p>f9efed54 7c92eb94 nt!KiFastCallEntry+0xf8</p><p>0012eef4 7c92d9d6 ntdll!KiFastSystemCallRet</p><p>奇怪的是，IoSynchronousPageWrite并没有进入我们的过滤驱动而是直接到了文件系统上。继续跟踪，发现IoSynchronousPageWrite-》</p><p>IoGetRelatedDeviceObject的时候，会有这么段代码：</p><p></p><p>if (deviceObject-&gt;AttachedDevice != NULL) {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; if (FileObject-&gt;Flags &amp; FO_FILE_OBJECT_HAS_EXTENSION) {</p><p>&nbsp;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0055ff;">PIOP_FILE_OBJECT_EXTENSION &nbsp;</span>fileObjectExtension =</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (<span style="color: #0055ff;">PIOP_FILE_OBJECT_EXTENSION</span>)(FileObject + 1);</p><p>&nbsp;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #8c8c8c;">ASSERT</span>(!(FileObject-&gt;Flags &amp; FO_DIRECT_DEVICE_OPEN));</p><p>&nbsp;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (fileObjectExtension-&gt;TopDeviceObjectHint != NULL &amp;&amp;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IopVerifyDeviceObjectOnStack(deviceObject, fileObjectExtension-&gt;TopDeviceObjectHint)) {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #ff0000;">return fileObjectExtension-&gt;TopDeviceObjectHint;</span></p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; deviceObject = IoGetAttachedDevice( deviceObject );</p><p>&nbsp; &nbsp; }</p><p></p><p>居然返回了TopDeviceObjectHint字段的值。这个值在哪填充，又是什么用途呢？跟踪一下，原来在IoCreateFileSpecifyDeviceObjectHint</p><p>-》ObOpenObjectByName的时候会openPacket-&gt;TopDeviceObjectHint = DeviceObject;原来这个字段表示需要“命中”的对象。</p><p>那么又有疑问了，系统中理论上只有我们的过滤驱动调用了IoCreateFileSpecifyDeviceObjectHint，但是我们调用IoCreateFileSpecifyDeviceObjectHint产生的文件对象，已经在ZwReadFile被ZwClose了呀，按理说应该会被销毁。</p><p>所以继续跟踪下去，发现果然如此，堆栈如下：</p><p></p><p>f70c9508 804e58f6 nt!ObfReferenceObject+0x28</p><p>f70c9548 f700de62 nt!CcInitializeCacheMap+0x1a2</p><p>f70c9614 f700869a Fastfat!FatCommonRead+0x561</p><p>f70c9684 804eedf9 Fastfat!FatFsdRead+0x13d</p><p>f70c9694 80574b42 nt!IopfCallDriver+0x31</p><p>f70c96a8 80571b98 nt!IopSynchronousServiceTail+0x60</p><p>f70c9750 8053d808 nt!NtReadFile+0x580</p><p>f70c9750 804ff0d1 nt!KiFastCallEntry+0xf8</p><p>f70c97ec f6ea188d nt!ZwReadFile+0x11</p><p>f70c9850 f6ebc09c xxx!IsPeFile+0x119</p><p>f70c9864 f6ea0177 xxx!MyFileCreate+0x99</p><p>f70c99d8 f6ea0d8f xxx!OnCreate+0x415</p><p>f70c99f8 f6e993a7 xxx!OnDispatch+0xb2</p><p>f70c9a14 804eedf9 xxx!OnDriverDispatch+0x4b</p><p>f70c9a24 805783bc nt!IopfCallDriver+0x31</p><p>f70c9b04 805787da nt!IopParseDevice+0xa58</p><p>f70c9b3c 805b420d nt!IopParseFile+0x46</p><p>f70c9bc4 805b0b3f nt!ObpLookupObjectName+0x119</p><p>f70c9c18 8056b133 nt!ObOpenObjectByName+0xeb</p><p>f70c9c94 8056baaa nt!IopCreateFile+0x407</p><p>也就是说CcInitializeCacheMap里会把这个IoCreateFileSpecifyDeviceObjectHint产生的文件对象缓存起来。由于调用了ObfReferenceObject，所以ZwClose的时候并没被销毁。</p><p>所以事情就明朗了，原来我们在过滤驱动的create回调里调用IoCreateFileSpecifyDeviceObjectHint产生的文件对象，会在</p><p>ZwReadFile的时候被CcInitializeCacheMap缓存起来，以后再有文件读写，都是走入了缓存管理器，而缓存管理器在真正需要读写磁盘的</p><p>时候，会使用第一次捕获并缓存的文件对象来发送IRP。而这个文件对象，由于我们是用IoCreateFileSpecifyDeviceObjectHint产生的，所以带有TopDeviceObjectHint字段，表示直接命中文件系统。所以缓存管理器绕过了我们的过滤驱动。</p><p>那么解决方案是什么呢？有几种方案。比如处理好fast io，这样无论什么write方式都会被捕获到。当然，还有种更简单的，就是在IoCreateFileSpecifyDeviceObjectHint的时候，对<em>CreateOptions</em>&nbsp;加上<strong>FILE_NO_INTERMEDIATE_BUFFERING &nbsp;</strong>参数。这个参数会让ZwReadFile组装irp的时候，在Irp-&gt;Flags里带上IRP_NOCACHE标志。而这个标志会让文件系统的FatCommonRead不调用CcInitializeCacheMap而是直接走FatNonCachedIo。所以也不会缓存我们的文件对象了。</p><p>不过加了<strong>FILE_NO_INTERMEDIATE_BUFFERING &nbsp;</strong>参数会有些效率上的问题。不过对我来说足够了。修改驱动后放在虚拟机里测试，发现果然收到write消息了，今天一早上的功夫没白费~~</p><p><strong>也许本文有分析的不对的地方，欢迎大家指正</strong></p><p></p><p></p> <a href="http://hi.baidu.com/weolar/blog/item/0e7bbe01d723101e728da5af.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/0e7bbe01d723101e728da5af.html#comment">查看评论</a>]]></description>
        <pubDate>2011-12-07  00:40</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/0e7bbe01d723101e728da5af.html</guid>
</item>

<item>
        <title><![CDATA[minifilter context小结]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/1017f71f0ea9ccefe1fe0bf0.html]]></link>
        <description><![CDATA[
		
		<p><strong>FltAllocateContext</strong></p><p><strong>FltGet</strong><em>Xxx</em><strong>Context（FltGetStreamHandleContext等）</strong></p><p><strong><strong>FltSet</strong><em>Xxx</em><strong>Context（FltSetStreamContext等）</strong></strong></p><p><b>FltReleaseContext</b></p><p><b><br></b></p><p><b>MSDN文档里写的还是比较详细的，但其实是有些“潜规则”在里面。</b></p><p><b>总结一下：</b></p><p><b>1、</b><strong>FltAllocateContext其实分配出来的context ，引用计数其实是1。</strong></p><p><strong>2、无论Get还是Set，只要成功，引用计数都会加一。</strong></p><p><strong>3、Set的话，如果填的是FLT_SET_CONTEXT_REPLACE_IF_EXISTS，</strong></p><p><strong>&nbsp; &nbsp; &nbsp; 强制替换，如果成功，不但set进去的context加一，被替换出来的context引用计数也会加一。</strong></p><p><strong>4、有些的context在minifilter内部实现是AVL树实现的。当set的时候就会被绑定到树上。而要注意的是，release的时候，如果引 &nbsp; &nbsp; &nbsp; &nbsp; 用计数为零，系统将会释放这个context，但不会去操纵树！也就是说不会切断context和相关stream等的关系。</strong></p><p><strong>要想切断关系，要显式示的调用</strong><strong style="background-color: rgb(204, 237, 199) !important; color: rgb(46, 121, 219) !important; text-decoration: none; "><a href="http://msdn.microsoft.com/en-us/library/ff542016(v=vs.85).aspx" style="background-color: rgb(204, 237, 199) !important; color: rgb(46, 121, 219) !important; text-decoration: none; ">FltDeleteStreamHandleContext</a>&nbsp; &nbsp;等。。</strong></p><p><strong style="background-color: rgb(204, 237, 199) !important; color: rgb(46, 121, 219) !important; text-decoration: none; "><span style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); ">所以举个例子，你</span></strong><strong>FltAllocateContext后，立马</strong><b>FltReleaseContext，这是没问题的，而且这个context会马上被删除掉。</b></p><p><b>但如果</b><strong>FltAllocateContext再</strong><strong><strong>FltSet</strong><em>Xxx</em><strong>Context再</strong></strong><b>FltReleaseContext，再</b></p><p><b>FltReleaseContext(就是说调用两次Release)，这个context虽然会被删除掉，但</b></p><p></p><p><b>相应树的关系没被切断，所以系统很快便会蓝屏。所以一般在代码里看到的是</b><strong>FltAllocateContext再</strong><strong><strong>FltSet</strong><em>Xxx</em></strong><strong><strong>Context再</strong></strong></p><p><b>FltReleaseContext。那么有个疑问，这个context的引用计数一直是大于等于一，什么时候会被删除掉呢？</b></p><p><b>答案是在NtfsFsdClose等被调用的时候，调用栈如下：</b></p><p><b><table style="background-color: rgb(204, 237, 199) !important; color: rgb(13, 13, 2) !important; background-image: none !important; table-layout: fixed; width: 920px; "><tbody><tr><td style="font-family: Arial; word-wrap: break-word; word-break: break-all; visibility: visible !important; zoom: 1 !important; filter: none; font-size: 12px; line-height: 18px; background-color: rgb(204, 237, 199) !important; color: rgb(13, 13, 2) !important; background-image: none !important; "><p>f102e960 f97c9fe0 xxx!CtxContextCleanup+0x3b</p><p>f102e978 f97ca147 fltMgr!DoFreeContext+0x20</p><p>f102e988 f97d4b7c fltMgr!DoReleaseContext+0x25</p><p>f102e9a0 f97dee79 fltMgr!FltpDeleteContextList+0x7c</p><p>f102e9c0 f97df0c3 fltMgr!CleanupStreamListCtrl+0x1b</p><p>f102e9d8 80563cba fltMgr!DeleteStreamListCtrlCallback+0x61</p><p>f102ea20 f975741e nt!FsRtlTeardownPerStreamContexts+0x52</p><p>f102ea3c f974bcb4 Ntfs!NtfsDeleteScb+0x165</p><p>f102ea54 f97267a9 Ntfs!NtfsRemoveScb+0x88</p><p>f102ea70 f974ba9b Ntfs!NtfsPrepareFcbForRemoval+0x52</p><p>f102eab8 f9726759 Ntfs!NtfsTeardownStructures+0x5b</p><p>f102eae4 f97496eb Ntfs!NtfsDecrementCloseCounts+0x9e</p><p>f102eb68 f974948a Ntfs!NtfsCommonClose+0x397</p><p>f102ec08 804eedf9 Ntfs!NtfsFsdClose+0x21f</p><p>f102ec18 f97cbb2f nt!IopfCallDriver+0x31</p><p>f102ec2c f97cbffb fltMgr!FltpPassThrough+0xf9</p><p>f102ec5c 804eedf9 fltMgr!FltpDispatch+0xf3</p><p>f102ec6c 80578c8c nt!IopfCallDriver+0x31</p><p>f102eca4 805b0563 nt!IopDeleteFile+0x132</p><p>f102ecc0 80522e47 nt!ObpRemoveObjectRoutine+0xdf</p><p>f102ece4 805b1563 nt!ObfDereferenceObject+0x5f</p><p>f102ecfc 805b15f9 nt!ObpCloseHandleTableEntry+0x155</p><p>f102ed44 805b1731 nt!ObpCloseHandle+0x87</p><p>f102ed58 8053d808 nt!NtClose+0x1d</p><p>&nbsp;</p></td></tr></tbody></table></b></p><p><span style="color: rgb(46, 121, 219); "><b>那么还有个疑问，调用</b></span><strong>FLT_SET_CONTEXT_REPLACE_IF_EXISTS强制替换context，</strong></p><p><strong>那个被替换出来的context是什么情况，我如果一直release，直到他的引用计数为零，系统会崩溃吗？</strong></p><p><strong>答案是不会，因为那个context早在被替换出来的时候，和AVL树的关系已经被切断了。。。</strong></p><p><strong>由于深夜在公司写的，头有点晕，也许有不对的地方，希望指正。。。。</strong></p><p></p> <a href="http://hi.baidu.com/weolar/blog/item/1017f71f0ea9ccefe1fe0bf0.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/1017f71f0ea9ccefe1fe0bf0.html#comment">查看评论</a>]]></description>
        <pubDate>2011-08-13  01:14</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/1017f71f0ea9ccefe1fe0bf0.html</guid>
</item>

<item>
        <title><![CDATA[【原创】再发几个好东西，windbg可编译源码]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/3df84d90131dec97a877a457.html]]></link>
        <description><![CDATA[
		
		这是去年过年的时候无聊倒腾的东西。最近整理硬盘的时候，发现不少东西在自己的机子上静静的躺了<br>N个年头，而一直没空去打理，故干脆放出来，希望有缘人能继续整理。。。<img src="http://bbs.pediy.com/images/smilies/rolleyes.gif" class="inlineimg" style="vertical-align: middle; "><br><br>很久以前别人问我要，但我没给，是因为里面嵌了个私人版的反编译引擎（不是反汇编引擎）。现在我把它去掉了，嘿嘿。。<br><br>这个版本的windbg是从win2k源码里扣出来的。和扣ie5一样，花费了我大量的精力。但实用性不佳……比较是很早的版本了。当初编译的时候着实费了很多精力，在这个版本中，反汇编引擎缺失，也缺了很多头文件和实现，我从reactos里扣了些，然后从vc6里也扣了很多。当初微软设计整套架构的时候，还是很牛逼的。windbg和vc共用一套调试接口，而且还支持64位（那时候可是95年……）其中的dm.dll是debugger&nbsp;module&nbsp;，封装了访问和管理被调试程序的一系列函数，包括写内存、设置和读取线程上下文。这个dll是用户态调试的，还有个dmkd.dll是内核态调试。<br><br>Eecxxx86.dll是exoression&nbsp;evaluator&nbsp;of&nbsp;plus&nbsp;plus&nbsp;的缩写，因此这个是评估和处理c++语法的各种表达式。<br>emx86.dll执行模型模块。用来启动调试会话和控制被调试程序的各种函数，如附加进程等。<br>tlloc.dll，传输层模块，transport&nbsp;layer&nbsp;local的缩写，负责与本地的dm模块通信。发送请求数据包。<br>shcv.dll，符号处理器（symbol&nbsp;handler）的缩写。用来处理codeview格式的调试符号。<br><p>上图是王道：</p><p><span><img src="http://hiphotos.baidu.com/weolar/pic/item/c7ef6a22620eabc24723e8c0.jpg" small="0" class="blogimg" border="0"></span><span><img src="http://hiphotos.baidu.com/weolar/pic/item/e878870ab9bf3758b0351da3.jpg" small="0" class="blogimg" border="0"></span><span><img src="http://hiphotos.baidu.com/weolar/pic/item/29b2d613919709645baf53a3.jpg" small="0" class="blogimg" border="0"></span><span><img src="http://hiphotos.baidu.com/weolar/pic/item/7903a85176883fe98d5430d2.jpg" small="0" class="blogimg" border="0"></span><span><img src="http://hiphotos.baidu.com/weolar/pic/item/cdad0e234b3cdd28935807ac.jpg" small="0" class="blogimg" border="0"></span><br><br>&nbsp;下载地址&nbsp;<a href="http://bbs.pediy.com/showthread.php?t=137731">http://bbs.pediy.com/showthread.php?t=137731</a><br><br><br></p><p></p> <a href="http://hi.baidu.com/weolar/blog/item/3df84d90131dec97a877a457.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/3df84d90131dec97a877a457.html#comment">查看评论</a>]]></description>
        <pubDate>2011-07-25  23:38</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/3df84d90131dec97a877a457.html</guid>
</item>

<item>
        <title><![CDATA[【原创】丢几个好东西，完整可编译的ie2、ie5.5源码，嘿嘿]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/dd173a6d4ac727e142169434.html]]></link>
        <description><![CDATA[
		
		话说一直很仰慕ie的内部结构，但苦于微软把ie的代码一直藏着掖着，无缘一睹。<br>不过幸运的是微软其实泄漏过ie2和ie5.5的源码的。但估计这么多年过去了，很少有人关注<br>这么老的代码，而且很郁闷的是泄漏的源码有非常多的东西不完整。<br><br>于是我操起ida，找了台老机器提取出老版本ie，把能逆的逆了下，能抄的抄，终于把ie2和ie5.5编译出来了，期间花了整整三个月的功夫。<br>需要说明的是，我发的ie5.5代码不是我编译的，而且网上一个哥们，万连文编译的。但我编译的比他完整，基本是整个mshtml.dll。不过他整理的比我好多了，而且我那个还有不少bug，故放出他的代码。<br><br>而ie2完全是我编译的。<br><br>ie2是不带微软trident排版引擎的，css都不支持，和现在的ie差距极其巨大；而ie5.5是相对很完整的，研究这个玩意，你能看到现代版本的ie的整个架构，对ie编程极其有帮助。<br><br>不过ie2并不是说没用，至少我把这玩意移植到了我的界面库，并且成为了一个牛逼无比的richedit了，嘿嘿……<img src="http://bbs.pediy.com/images/smilies/tongue.gif" class="inlineimg" style="background-color: rgb(204, 237, 199) !important; color: rgb(13, 13, 2) !important; vertical-align: middle; background-image: none !important; "><br><br>而且ie2的结构非常清晰，要扣出来非常爽。就一个函数，显示所有的gif、文本。再几个函数负责解析html。<br>扣出来做文本显示控件非常爽，哈哈。文本的选择等逻辑也很完整，而且很容易读懂，因为是纯C打造。<br>SGML_write&nbsp;把html解析到_w3doc里后，调个TW_Draw就把所有内容包括图像都显示出来了<br><br><p>上图是王道：<span><img src="http://hiphotos.baidu.com/weolar/pic/item/acc118306ec1abffab018e21.jpg" small="0" class="blogimg" border="0"></span></p><p>&nbsp;</p><p>下载地址：<a href="http://bbs.pediy.com/showthread.php?t=137616">http://bbs.pediy.com/showthread.php?t=137616</a></p><p></p> <a href="http://hi.baidu.com/weolar/blog/item/dd173a6d4ac727e142169434.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/dd173a6d4ac727e142169434.html#comment">查看评论</a>]]></description>
        <pubDate>2011-07-22  23:45</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/dd173a6d4ac727e142169434.html</guid>
</item>

<item>
        <title><![CDATA[最近有点小纠结]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/f9e7d51b8b51d5cdac6e75d3.html]]></link>
        <description><![CDATA[
		
		<p>最近头脑有点混乱，一个强大的界面库需要高效的渲染引擎、</p><p>排版引擎、脚本支持、动画、各种控件，以及控件定制。</p><p>这几个方面无一不需要极大的人力和时间。</p><p>其实去年我也在搞类似Duilib这样的小型界面库，但遇到这个瓶颈后一直没进展了。</p><p>要做的东西实在太多了。</p><p>比如基础控件，就有richedit，日期控件等。</p><p>这个就是个很耗精力的事情。光一个richedit 复杂度就不下于一个小型浏览器了。</p><p>又如渲染引擎，市面上好的渲染引擎很多，有skia，cairo，Agg。无一不是要花大时间来啃的。更别说还有IE这个大块头要啃。</p><p>而QQ的界面库强大在于非常完善，所有该有的功能都有了------除了动画效果的原生支持和脚本控制。</p><p>其他倒没啥太大亮点，基本是仿照wpf做的。而且还是单线程渲染。这点在性能上瓶颈很大。</p><p>IE的渲染引擎是多线程的，写的貌似很牛逼。不过对脏数据的处理还没看明白，继续啃。</p><p>单线程渲染会省很多麻烦。</p><p></p><p>但在做动画效果上有很大瓶颈 。</p><p></p><p>一般是开个定时器 。</p><p></p><p>但这样渲染的时候就不能做别的了 。</p><p>比如 在渲染渐隐渐变的时候，如果是单线程开定时器刷，就要不停产生WM_PAINT ，而且要每层图形一层层的全绘制一遍。如果是多线程，一个线程负责刷写，主线程响应别的消息。</p><p>效率极大提升。</p><p>以前我注重的是界面引擎的排版布局模块，还有控件的定制能力，现在发现要做的事情太多了。</p><p></p><p>界面库水太深了，要做到完美简直不可能 。</p><p></p><p>效率和功能两者难以兼得 ，</p><p>是故天之道，损有余而补不足，是故虚胜实，不足胜有余 ，讲的就是这个道理……</p><p><strong><span style="color:#991f1f">上面纯属中午吃完饭随便瞎扯淡~~~~~</span></strong></p><p></p><div><br></div><p></p><p></p> <a href="http://hi.baidu.com/weolar/blog/item/f9e7d51b8b51d5cdac6e75d3.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/f9e7d51b8b51d5cdac6e75d3.html#comment">查看评论</a>]]></description>
        <pubDate>2011-06-13  12:55</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/f9e7d51b8b51d5cdac6e75d3.html</guid>
</item>

<item>
        <title><![CDATA[IE内核浅析 1]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/f23fa0efab963a0efcfa3cfb.html]]></link>
        <description><![CDATA[
		
		<p>最近研究界面库、渲染引擎上瘾了，故下研究研究传说中IE的框架。</p>
<p>以后不定期记录些东西，算分析ie的一些学习心得吧。也不知道这东西别人研究过没，</p>
<p>反正随便贴贴，大家随便看看……</p>
<p>&nbsp;</p>
<p>（1）</p>
<p>
<p>CMarkup负责搭建整个xml（html）树结构。</p>
<p>CMarkup::CreateElement根据一个TAG创建一个CElement。</p>
<p>CElement::InsertAdjacent连接各个CElement</p>
<p>CElement继承于CBase，CBase继承于IUnknown。所以每个CElement</p>
<p>都有QueryInterface接口，能给外部，例如像我这样微软之外的穷代码民工用。</p>
<p>比如CStyle类就能导出IHTMLStyle接口。但这里面又有玄机了。</p>
<p>继承于IUnknown的 QueryInterface ，都会走到一个全局函数CreateTearOffThunk。里面会产生一个统一大小的结构体</p>
<p><strong>struct TEAROFF_THUNK</strong></p>
<p><strong>{</strong></p>
<p><strong>&nbsp; &nbsp; void* &nbsp; &nbsp;papfnVtblThis; &nbsp; <span style="COLOR: #00cc22">&nbsp;// Thunk's vtable</span></strong></p>
<p><strong>&nbsp; &nbsp; ULONG &nbsp; &nbsp;ulRef; &nbsp; &nbsp;<span style="COLOR: #00cc22">// Reference count for this thunk.</span></strong></p>
<p><strong>&nbsp; &nbsp; IID const* const* &nbsp; apIID; &nbsp; &nbsp;<span style="COLOR: #00cc22">// Short circuit QI using these IIDs.</span></strong></p>
<p><strong>&nbsp; &nbsp; void* &nbsp; &nbsp;pvObject1; &nbsp; &nbsp;<span style="COLOR: #00cc22">// Delegate other methods to this object using...</span></strong></p>
<p><strong>&nbsp; &nbsp; const void* &nbsp; &nbsp;apfnVtblObject1; &nbsp; &nbsp;<span style="COLOR: #00cc22">// ...this array of pointers to member functions.</span></strong></p>
<p><strong>&nbsp; &nbsp; void* &nbsp; &nbsp;pvObject2; &nbsp; <span style="COLOR: #00cc22">&nbsp;// Delegate methods to this object using...</span></strong></p>
<p><strong>&nbsp; &nbsp; void* &nbsp; &nbsp;apfnVtblObject2; &nbsp; <span style="COLOR: #00cc22">&nbsp;// ...this array of pointers to member functions...</span></strong></p>
<p><strong>&nbsp; &nbsp; DWORD &nbsp; &nbsp;dwMask; &nbsp; <span style="COLOR: #00cc22">&nbsp;// ...the index of the method is set in the mask.</span></strong></p>
<p><strong>&nbsp; &nbsp; DWORD &nbsp; &nbsp;n; &nbsp;<span style="COLOR: #00cc22">&nbsp;// index of method into vtbl</span></strong></p>
<p><strong>&nbsp; &nbsp; void* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; apVtblPropDesc; &nbsp; &nbsp; <span style="COLOR: #00cc22">// array of propdescs in Vtbl order</span></strong></p>
<p><strong>};&nbsp;</strong></p>
<p>其中的papfnVtblThis默认指向s_apfnPlainTearoffVtable。这个的定义是</p>
<p><strong>static void (STDMETHODCALLTYPE *s_apfnPlainTearoffVtable[])() =</strong></p>
<p><strong>{</strong></p>
<p><strong>&nbsp; &nbsp; PFNVOID(&amp;PlainQueryInterface),</strong></p>
<p><strong>&nbsp; &nbsp; PFNVOID(&amp;PlainAddRef),</strong></p>
<p><strong>&nbsp; &nbsp; PFNVOID(&amp;PlainRelease),</strong></p>
<p><strong>&nbsp; &nbsp; THUNK_ARRAY_3_TO_15(ADDRESS)</strong></p>
<p><strong>&nbsp; &nbsp; THUNK_ARRAY_16_AND_UP(ADDRESS)</strong></p>
<p><strong>};</strong></p>
<p>拨开这层层的宏，可以看到</p>
<p>&nbsp;</p>
<p><strong>#define THUNK_ARRAY_3_TO_15(x) \</strong></p>
<p><strong>&nbsp; &nbsp; cat(THUNK_,x)(3) &nbsp; cat(THUNK_,x)(4) &nbsp; cat(THUNK_,x)(5) &nbsp; cat(THUNK_,x)(6) &nbsp; cat(THUNK_,x)(7) &nbsp; cat(THUNK_,x)(8) &nbsp; cat(THUNK_,x)(9) &nbsp; cat(THUNK_,x)(10) &nbsp;cat(THUNK_,x)(11) &nbsp;cat(THUNK_,x)(12) &nbsp;cat(THUNK_,x)(13) &nbsp;\</strong></p>
<p><strong>&nbsp; &nbsp; cat(THUNK_,x)(14) &nbsp;cat(THUNK_,x)(15)</strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong>#define cat(a,b) a##b</strong></p>
<p><strong>&nbsp;</strong></p>
<p><strong>#define THUNK_ADDRESS(n) &amp;TearoffThunk##n,</strong></p>
<p>&nbsp;</p>
<p>所以<strong>s_apfnPlainTearoffVtable</strong>是个很长的固定大小的指针数组，数组前三项目是PlainQueryInterface、PlainAddRef、PlainRelease，这符合IUnknown</p>
<p>的内存结构，而后面N项是类似TearoffThunk1、TearoffThunk2这样的指针。那么这些指针指向哪里呢？上面还有两排宏：</p>
<p><strong>THUNK_ARRAY_3_TO_15(IMPLEMENT_COMPARE);</strong></p>
<p><strong>THUNK_ARRAY_16_AND_UP(IMPLEMENT_SIMPLE);</strong></p>
<p>展开了就是</p>
<p><strong>THUNK_IMPLEMENT_COMPARE(3),THUNK_IMPLEMENT_COMPARE(4)……</strong>而<strong>THUNK_IMPLEMENT_COMPARE</strong>又是宏！</p>
<p>把<strong>THUNK_IMPLEMENT_COMPARE(3)</strong>再展开，就是</p>
<p><strong>void __declspec(naked) STDMETHODCALLTYPE TearoffThunk3() \</strong></p>
<p><strong>{<span style="WHITE-SPACE: pre"></span> &nbsp; &nbsp;\</strong></p>
<p><strong>&nbsp; &nbsp; <span style="COLOR: #00cc22">/* this = thisArg &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */ &nbsp;\</span></strong></p>
<p><strong>&nbsp; &nbsp; __asm mov eax, [esp+4]<span style="WHITE-SPACE: pre"></span> &nbsp; &nbsp;\</strong></p>
<p><strong><span style="COLOR: #00cc22">&nbsp; &nbsp;</span><span style="COLOR: #00cc22">/* remember vtbl index of method &nbsp; &nbsp;*/ &nbsp;\</span></strong></p>
<p><strong>&nbsp; &nbsp; __asm mov dword ptr [eax+32], n<span style="WHITE-SPACE: pre"></span> &nbsp; &nbsp;\</strong></p>
<p><strong><span style="COLOR: #00cc22">&nbsp; &nbsp; /* pvObject = this-&gt;_pvObject &nbsp; &nbsp; &nbsp; */ &nbsp;\</span></strong></p>
<p><strong>&nbsp; &nbsp; __asm mov ecx, [eax+12]<span style="WHITE-SPACE: pre"></span> &nbsp; &nbsp;\</strong></p>
<p><strong><span style="COLOR: #00cc22">&nbsp; &nbsp; /* thisArg = pvObject &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */ &nbsp;\</span></strong></p>
<p><strong>&nbsp; &nbsp; __asm mov [esp+4], ecx<span style="WHITE-SPACE: pre"></span> &nbsp; &nbsp;\</strong></p>
<p><strong>&nbsp;<span style="COLOR: #00cc22">&nbsp; /* apfnObject = this-&gt;_apfnVtblObj &nbsp;*/ &nbsp;\</span></strong></p>
<p><strong>&nbsp; &nbsp; __asm mov ecx, [eax+16]<span style="WHITE-SPACE: pre"></span> &nbsp; &nbsp;\</strong></p>
<p><strong><span style="COLOR: #00cc22">&nbsp; &nbsp; /* pfn = apfnObject[n] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/ &nbsp;\</span></strong></p>
<p><strong>&nbsp; &nbsp; __asm mov ecx, [ecx+(4*n)]<span style="WHITE-SPACE: pre"></span> &nbsp; &nbsp;\</strong></p>
<p><strong><span style="COLOR: #00cc22">&nbsp; &nbsp; /* jump.... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */ &nbsp;\</span></strong></p>
<p><strong>&nbsp; &nbsp; __asm jmp ecx<span style="WHITE-SPACE: pre"></span> &nbsp; &nbsp;\</strong></p>
<p><strong>}</strong></p>
<p>所以原来那两排宏就是为了生成一堆TearoffThunk3、TearoffThunk4等的函数实体。</p>
<p>那么TearoffThunk3实体这段淫荡的汇编是干嘛的呢？&nbsp;</p>
<p>举个例子，比如我通过</p>
<p><strong>CStyle* pStyleInline = NULL;</strong></p>
<p><strong>pStyleInline-&gt;QueryInterface(IID_IHTMLStyle, (LPVOID*)ppISTYLE);</strong></p>
<p>来获取一个IHTMLStyle** ppISTYLE指针。上面的QueryInterface会经过上诉层层调用到<strong>CreateTearOffThunk</strong>，然后生成</p>
<p>固定大小的<strong>TEAROFF_THUNK</strong>结构体。这时候我想通过ppISTYLE来调用IHTMLStyle接口的put_height虚函数。由于TEAROFF_THUNK结构体</p>
<p>伪装成C++的对象布局，而在VS编译器实现下，c++对象第一个字段是虚函数表，这里被填成s_apfnPlainTearoffVtable指针数组，里面填充的全是</p>
<p>TearoffThunk3等。所以调用put_height虚函数就会走到<strong>TearoffThunkN</strong>中，也即上诉的汇编。此时汇编的作用就出来了，由于最终是要调用</p>
<p><strong>CStyle::put_Variant</strong>（其实就是实现put_height的功能。），所以就开始从<strong>TEAROFF_THUNK</strong>结构体的pvObject1里取出<strong>CreateTearOffThunk</strong>填充好的</p>
<p>函数指针，即CStyle的指针，再取CStyle的CreateTearOffThunk填充好的<strong>CStyle::s_ppropdescsInVtblOrderIHTMLStyle</strong>。这又是个静态的函数指针表。</p>
<p>里面按顺序填好每个位置CStyle的函数位置。比如上例，就是put_Variant。所以汇编组装完毕后，直接就能跳转过去到put_Variant了。</p>
<p>&nbsp;</p>
<p>下面说说s_ppropdescsInVtblOrderIHTMLStyle。这是个神奇的数组。翻遍微软给出的代码，都找不到这玩意的定义。实际上，这玩意在</p>
<p>style.hdl中：</p>
<p><strong>const PROPERTYDESC * const CStyle::s_ppropdescsInVtblOrderIHTMLStyle[] = {</strong></p>
<p><strong>&nbsp; &nbsp; (PROPERTYDESC *)&amp;s_propdescCStylefontFamily,</strong></p>
<p><strong>&nbsp; &nbsp; (PROPERTYDESC *)&amp;s_propdescCStylefontFamily,</strong></p>
<p><strong>&nbsp; &nbsp; (PROPERTYDESC *)&amp;s_propdescCStylefontStyle,</strong></p>
<p><strong>&nbsp; &nbsp; (PROPERTYDESC *)&amp;s_propdescCStylefontStyle,</strong></p>
<p><strong>&nbsp; &nbsp; (PROPERTYDESC *)&amp;s_propdescCStylefontVariant,</strong></p>
<p><strong>&nbsp; &nbsp; (PROPERTYDESC *)&amp;s_propdescCStylefontVariant,</strong></p>
<p><strong>&nbsp; &nbsp; (PROPERTYDESC *)&amp;s_propdescCStylefontWeight,</strong></p>
<p><strong>&nbsp; &nbsp; (PROPERTYDESC *)&amp;s_propdescCStylefontWeight,</strong></p>
<p><strong>……</strong></p>
<p>&nbsp;</p>
<p>".hdl"文件是个神奇的东西，这玩意是由".pdl"生成的。微软在每个能实现Tear-off的类都会有</p>
<p>个相应的pdl文件，这个破pdl文件会由一个微软内部一个神奇的工具生成".h" 、".hdl"、 ".idl"文件。其中自动化的生成了</p>
<p>上面这串指针数组。</p>
<p>总结，经过上诉一系列混乱的动作，IE成功的实现了一个thrunk机制，每次QueryInterface 出来的IHTMLStyle 等接口出来的指针实际</p>
<p>指向一段相同的结构体，这个结构体会自己组装出真实的原始函数地址并跳转。而生成这一系列冗长的指针数组，是由宏、代码自动生</p>
<p>成工具搞定的……微软搞了这么多的复杂动作肯定有其原因。我猜一个是这样比较隐晦，二是结构体大小固定，方便内存申请释放吧，</p>
<p>不容易产生内存碎片，毕竟很多接口动不动就几十个虚函数，看得人心纠结…而且new对象的地方又到处都是，如果不好好管理，跑久了内存</p>
<p>也许是千疮百孔的。</p>
<p>（2）</p>
<p>DWNLOADINFO 下载的结构。包含URL等</p>
<p>&nbsp;</p>
<p>（3）</p>
<p>添加一个下载任务</p>
<p>&nbsp;1 &nbsp; &nbsp; &nbsp;MSHTML.dll!CDwnTaskExec::AddTask(CDwnTask * pDwnTask=0x001c0314)&nbsp;</p>
<p>*2 &nbsp; &nbsp; &nbsp;MSHTML.dll!StartImgTask(CImgTask * pImgTask=0x001c0314)&nbsp;</p>
<p>&nbsp;3 &nbsp; &nbsp; &nbsp;MSHTML.dll!CImgLoad::OnBindMime(MIMEINFO * pmi=0x10510bb0)&nbsp;</p>
<p>&nbsp;4 &nbsp; &nbsp; &nbsp;MSHTML.dll!CImgLoad::OnBindData()&nbsp;</p>
<p>&nbsp;5 &nbsp; &nbsp; &nbsp;MSHTML.dll!CDwnLoad::OnBindCallback(unsigned long dwFlags=32)&nbsp;</p>
<p>&nbsp;6 &nbsp; &nbsp; &nbsp;MSHTML.dll!CDwnBindData::Signal(unsigned short wSig=32)&nbsp;</p>
<p>&nbsp;7 &nbsp; &nbsp; &nbsp;MSHTML.dll!CDwnBindData::SignalData()&nbsp;</p>
<p>&nbsp;8 &nbsp; &nbsp; &nbsp;MSHTML.dll!CDwnBindData::ReportData(unsigned long grfBSCF=17, unsigned long ulPos=1, unsigned long ulMax=7200)&nbsp;</p>
<p>&nbsp;9 &nbsp; &nbsp; &nbsp;urlmon.dll!1a41572f()&nbsp;</p>
<p>（4）</p>
<p>放入一个gif的url，指定下载：</p>
<p>*1 &nbsp; &nbsp; &nbsp;MSHTML.dll!CDwnBindInfo::CDwnBindInfo()&nbsp;</p>
<p>&nbsp;2 &nbsp; &nbsp; &nbsp;MSHTML.dll!CDwnBindData::CDwnBindData()&nbsp;</p>
<p>&nbsp;3 &nbsp; &nbsp; &nbsp;MSHTML.dll!NewDwnBindData(DWNLOADINFO * pdli=0x0013f0ac, CDwnBindData * * ppDwnBindData=0x00180c70, unsigned long dwFlagsExtra=1310720)&nbsp;</p>
<p>&nbsp;4 &nbsp; &nbsp; &nbsp;MSHTML.dll!CDwnLoad::Init(DWNLOADINFO * pdli=0x0013f0ac, CDwnInfo * pDwnInfo=0x0018087c, unsigned int idsLoad=0, unsigned long dwFlagsExtra=1310720)&nbsp;</p>
<p>&nbsp;5 &nbsp; &nbsp; &nbsp;MSHTML.dll!CImgLoad::Init(DWNLOADINFO * pdli=0x0013f0ac, CDwnInfo * pDwnInfo=0x0018087c)&nbsp;</p>
<p>&nbsp;6 &nbsp; &nbsp; &nbsp;MSHTML.dll!CDwnInfo::SetLoad(CDwnCtx * pDwnCtx=0x00180b7c, int fLoad=1, int fReload=0, DWNLOADINFO * pdli=0x0013f0ac)&nbsp;</p>
<p>&nbsp;7 &nbsp; &nbsp; &nbsp;MSHTML.dll!CDwnCtx::SetLoad(int fLoad=1, DWNLOADINFO * pdli=0x0013f0ac, int fReload=0)&nbsp;</p>
<p>&nbsp;8 &nbsp; &nbsp; &nbsp;MSHTML.dll!NewDwnCtx(unsigned int dt=1, int fLoad=1, DWNLOADINFO * pdli=0x0013f0ac, CDwnCtx * * ppDwnCtx=0x0013f150)&nbsp;</p>
<p>&nbsp;9 &nbsp; &nbsp; &nbsp;MSHTML.dll!CDocument::NewDwnCtx(unsigned int dt=1, const wchar_t * pchSrc=0x0017bac4, CElement * pel=0x0017b71c, CDwnCtx * * ppDwnCtx=0x0013f150, int fSilent=0, unsigned long dwProgsinkClass=0)&nbsp;</p>
<p>&nbsp;10 &nbsp; &nbsp; MSHTML.dll!CImgHelper::FetchAndSetImgCtx(const wchar_t * pchUrl=0x0017bac4, unsigned long dwSetFlags=3)&nbsp;</p>
<p>&nbsp;11 &nbsp; &nbsp; MSHTML.dll!CImgElement::OnPropertyChange(long dispid=1007, unsigned long dwFlags=0)&nbsp;</p>
<p>&nbsp;12 &nbsp; &nbsp; MSHTML.dll!BASICPROPPARAMS::SetStringProperty(wchar_t * bstrNew=0x104c9428, CBase * pObject=0x0017b71c, CVoid * pSubObject=0x0017b728, unsigned short wFlags=0)&nbsp;</p>
<p>&nbsp;13 &nbsp; &nbsp; MSHTML.dll!CBase::put_StringHelper(wchar_t * v=0x104c9428, const PROPERTYDESC * pPropDesc=0x104b7334, CAttrArray * * ppAttr=0x00000000)&nbsp;</p>
<p>&nbsp;14 &nbsp; &nbsp; MSHTML.dll!CBase::put_String(wchar_t * v=0x104c9428)&nbsp;</p>
<div><br></div>
<p></p>
<p></p> <a href="http://hi.baidu.com/weolar/blog/item/f23fa0efab963a0efcfa3cfb.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/f23fa0efab963a0efcfa3cfb.html#comment">查看评论</a>]]></description>
        <pubDate>2011-06-10  01:04</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/f23fa0efab963a0efcfa3cfb.html</guid>
</item>

<item>
        <title><![CDATA[(转帖)一本正经瞎扯淡物理学家--牛顿哥]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/ce142973dab48c048601b016.html]]></link>
        <description><![CDATA[
		
		<strong>一本正经瞎扯淡物理学家--牛顿哥（转存）</strong><p>&nbsp;</p><p>转存</p><p>&nbsp;</p><p>一本正经瞎扯淡物理学家--牛顿</p><p><br>一.</p><p>&nbsp;&nbsp; 1642年初，那个从比萨斜塔上扔下来两个小球的人，那个给几百年来全世界小朋友们树立了一个挑战权威独立思考的进步青年形象的人，那个叫做伽利略的大牛，去世了。</p><p>&nbsp;&nbsp; 而就在这一年的圣诞夜，在世界的另一个角落，在英格兰林肯郡的牛家村，一个叫做牛顿的小孩，出生了。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 当然，我们都知道他是谁，但是我还是要假装不明真相地介绍一下他：他孤傲，但他勤奋笃学；他低调，但受万人景仰；他可以将神赐与人类得智慧运用得出神入化，可以创造出堪称艺术的超级宇宙体系！他究竟是神仙的化身，还是地狱的使者呢？没有人知道，但是可以肯定，每一个人都给他一个称号——站在巨人肩膀上的人！</p><p>&nbsp;&nbsp; 好了，让我们回到那一年的圣诞夜，我们知道，但凡牛人出世，天象必有异，要么双日并出，要么群魔乱舞。但是，拉风如牛顿一样的男人，在他出世的那一夜，并没有出现诸如天女散花夜叉乱舞文曲星下凡的异相，后来据群众回忆，只有村东头地主牛十三家的狗叫了一夜，还有就是有上万只飞虫萦绕在牛顿家的附近，久久不愿离去。但是就连这两个现象很快也找出了原因，牛十三家的狗叫是因为白天出去溜达邂逅了一母狗，晚上回来尽情叫嚣，抒发思念之情，而飞虫则是因为牛顿的母亲牛夫人忙于坐月子，牛圈里的牛粪没有时间清理，导致积了好多，晚上就招来了大批飞虫，写到这里群众不由的舒了一口气：原来飞虫围观的不是牛顿，而是牛粪！！</p><p>&nbsp;&nbsp; 还有一个信息要告诉大家，牛顿的父亲牛父在牛顿出生前三个月已经去世，关于牛父，没有太多的资料，但是，我想他应该感到庆幸，至少他有个大神一样的儿子，而牛顿却没有大神一样的父亲。&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 牛顿是个早产儿，出生时只有三磅重，小到可以放进一个杯子里，用现在的话说这无疑是个杯具。牛母汉娜和接生婆都在担心这个杯具是不是随时都有可能转化成为一个餐具，还好最后是个洗具的结果：牛顿成功活了下来！</p><p>&nbsp;&nbsp; 一个寡妇带着个孩子的日子大家应该都知道不好过，所以在牛顿长到三岁时，邻村的一个叫史密斯的牧师为了配合我基督救死扶伤普度众生的大无畏牺牲精神，娶了牛母汉娜，所以牛母把牛顿托付给了外婆照顾，这样小牛顿当然不会开心，我们可以想一想：自己嫁给了一个公务员，却把儿子托给一个老太婆照顾，搁谁都不会好受。所以牛顿在外婆那里度过了郁郁寡欢的童年，这也多少影响到了牛顿性格的形成和其以后的为人处事。</p><p>&nbsp;牛顿是在自己村的乡村小学里开始学习生涯的，而我们知道小学无非是老师每天教几个字，然后让你回家把它重复抄个十页八页的，谁写的越多谁就是好学生，所以小学里好学生无非是谁的手腕不怕酸谁的圆珠笔多不怕费油谁就是好学生，而像牛顿这种身体资质欠佳圆珠笔怕费油每天抄个两三页出门都不好意思跟人家的招呼的学生，自然不是好学生。</p><p>&nbsp;&nbsp; 而到了中学，牛顿仍然不算是个好学生（因为当时的中学可不会学习牛顿运动定律），但是牛顿这位同学有一个优点，那就是仔细观察刻苦钻研，我可以举两个例子：</p><p>&nbsp;&nbsp; 1.牛顿从外婆垫桌子脚的地方发现了一本书，叫做《人工与自然》，基本算是一个木匠初级教程，教你做一些小玩意，靠着这本菜鸟教材，牛顿做出了许多东西，如风车、木钟、折叠式提灯等等，尤其是那个折叠式提灯，它上大下小，左宽右窄，美观大方，折叠使用，便于携带，实在是您居家旅行日，月黑风高夜的必备装备。&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 2.牛顿上中学时，在男生中间流行着一种游戏叫：看谁尿的远！（这个男生都应该知道），牛顿由于身体欠佳爆发力不够经常会输给班里一票猛男，但是牛顿没有气馁，他回家经过仔细的研究，发现在尿尿初速度相同的情况下，出射的角度与尿尿的远近有莫大的关系，他还总结出，当小JJ以一个四十五度仰望天空的姿势而尿尿的时候，能到达最远的距离。这样有理论和技术支持的牛顿回到学校另行PK，果然是横扫全校无敌手,令猛男们佩服不已。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp; 通过以上两点大家都应该看出来牛顿同学虽然学习不咋地，但是动手创造能力和观察探索能力还是很强的。</p><p>&nbsp;&nbsp; 但是很奇怪，一般的传记上却都写着：到了中学毕业的时候，牛顿已经成为班里学习最好的学生。</p><p>&nbsp;&nbsp; 这就有一个问题，是什么促使牛顿开始努力学习的呢？传记资料也给出了一种解释：有一天他被一个高年级的学生恨恨地踢了胃部一脚，十分疼痛。从此，他发奋学习，直到他的成绩超过了这个学生，并成了最好的学生。这个说法多多少少有点扯淡和不合逻辑，首先揍牛顿的学生是高年级的，不属于一个年级，牛顿怎么跟人家比成绩，其次，人家揍你一次从此你就发奋学习了，那我小时候老爸还经常收拾我呢，没见的我的成绩提高多少，再说了，就算打你一次你刻苦学习了，但是这个疗效最多只能持续三天，所以不是有“三天不打，上房揭瓦”的说法么，所以按传记的说法，要让牛顿同学持续的，不间断的刻苦学习，最好的方法是让这个高年级的学生每隔三天揍他一次，但是鉴于人家高年级的学生没有这么闲的时间和精力每隔三天来揍你一次（毕竟你没有付人家小费，所以人家没有义务隔三岔五来督促的成为大物理学家）。</p><p>&nbsp;&nbsp; 所以我认为比较可靠的说法应该是：牛顿同学在诸如做小玩意和尿尿比赛中得到了肯定，获得了尊敬，体验到了快感，这也就影响到了他在课堂学习上的表现，促使他好好学习。我们把这种在某一个方面得到肯定继而促使了另一方面发展的现象叫做战斗力加成，就像你找了个漂亮的女朋友，而她又天天来篮球场观摩你打篮球，那你的篮球水平的提高那还不是嗖嗖的！！&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;到了牛顿十几岁的时候，他那做公务员的继父去世了，牛母汉娜又回到了牛顿身边，并且把牛顿从学校召回家，让其务农，我们知道，作为一个具有朴素无产阶级小农思想的人来说，牛母其实对牛顿的职业生涯规划相当简单：赶紧长大，继承家里的几亩薄田和圈里几头牛，争取为做一个没理想没抱负没文化的资本主义三无农民。</p><p>&nbsp;&nbsp; 但是没办法，牛顿同学当时已经喜欢上了科学研究这个相当有前途的职业，心思根本就不在种地上，经常消极怠工在自己家的苹果树下做数学题和思考大自然的秘密，所以享受母亲的屁股炖笤帚的待遇那是常有的事。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 当然，如果当时牛母义无反顾的坚决坚持让牛顿务农，我们现在大可以谴责万恶的资本主义制度糟蹋好苗子好人才，这要是放在我社会主义，组织上必然将其纳入希望工程体系，享受教育部特殊补助，选为林肯郡杰出青少年，优秀红领巾，树立成为“家庭艰苦，仍然刻苦学习勇攀高峰”的典型！</p><p>&nbsp;&nbsp; 还好，就在这时候，一个贵人出现了，这个人就是牛顿的舅舅艾斯科，是一个教区的教区长，相当于现在的县教育局局长，曾经在剑桥大学学习过，他看到牛顿这么刻苦上进，心中寻思道：这外甥不错，刻苦的样子颇有我当年的风采。于是他力劝牛母让牛顿回到校读书，并且决心让牛顿考剑桥大学。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 通过以上叙述我们可以看出两点：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 1.牛顿同学学习很刻苦，是一个好苗子！&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp; 2.牛顿同学有一个当局长的舅舅。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 这能说明什么呢，这说明了你要想上大学，要么你刻苦学习，要么你有一个当局长的舅舅，如果你既刻苦学习又有一个当局长的舅舅，那么你可以上剑桥大学！&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 牛顿的少年时代就这样过去了，波澜不惊，到目前为止，他像极了每一个刻苦学习的孩子，并且与他们没有任何区别，也许对他舅舅来说，他对外甥的期待也无非是上个大学然后出来找份体面的工作最终爬到像他一样的职位，或者至少混个副局长也行。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 所以在这里奉劝各位，永远不要高估了父辈对你的期望，你能做到的其实比他们希望你做到的要多得多！</p><p>还有一点需要向大家说明一下：</p><p>&nbsp;&nbsp; 牛顿在上中学时，认识了一个叫安妮的女学生，并且两人感情颇深，甚至在牛顿十九岁前往牛津求学前 ，他还和安妮订了婚。（到这里可能有些同志要反对了，说lz你这不是公开宣扬中学生早恋么，其实不然， 试想在古代，人烟稀少，政府为了提高生产力，发展经济，肯定提倡早婚早育，所以你都快二十了还没结婚出 门还好意思跟人家打招呼么，你这不是拖资本主义生产力的后腿么）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 但是为什么最后两人为什么走到一起，甚至导致牛顿终生未娶，我想这个原因应该是显而易见的:牛顿同 志太专注他的科学研究工作了。当某个人太专注与某件事肯定会忽略另外一件事物的发展，这个与上面的战斗 力加成相反，叫做战斗力光环削弱。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 当然，这位安妮小姐后来实在是不能等了，就改嫁给了别人，很多年以后，牛顿功成名就时，每次回林肯郡时总要去看望她，甚至在经济上给予接济。她也是牛顿终生唯一萌发过爱情的女人，在这里我们不得不为两位有情人未成眷属而扼腕感叹一下！</p><p>&nbsp;&nbsp; 其实，事物都是辩证的，如果当时牛顿当时真的和安妮结婚，也许他后半辈子只会把精力放在怎么给孩子挣奶粉钱怎么给孙子喂奶这些琐碎的事情上，而我们的世界也不会是现在这个样子！&nbsp;&nbsp;</p><p>&nbsp;</p><p><br>&nbsp;1661年，19岁的牛顿考入剑桥大学三一学院。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 三一学院，大家不要想当然的觉得这个学院的名字显得这么土鳖没文化，但是，正是这个名字听起来土鳖没文化的学院培养出了一大批不土鳖有文化的牛人，像培根，以后的拜伦麦克斯韦哈代罗素这一批牛X闪闪 的名字。<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个事实告诉我们，一个人的牛X程度跟他的名字是没有关系的，就像金庸武侠里面，起得名字诸如拳打关东脚踢西南雄霸关中两广混世小魔王之类的角色，一听都是小娄娄，大菜鸟，像郭靖萧峰杨过洪七公这种 听起来朴素而又平易近人的名字，才是真正的高手，其实在论坛里混也是这样，你既不要因为一个人ID叫 ‘爱因斯坦他大哥’而崇拜他，也不要因为一个人的ID叫‘leavise007'而鄙视他，小看他！！<br>（呃，有点扯远了，看来我收放自如的功力还有待加强）</p><p><br>&nbsp; 好了，扯回来！<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而在那时，剑桥当然不会教你四大力学外送相对论群论场论什么的，那时剑桥的教育制度，还充斥着相当浓厚的中世纪经院哲学的气息，那什么是经院哲学呢，所谓经院哲学，就是在承认上帝存在在前提下，一堆人在一起讨论诸如“万年能的上帝能不能造一个自己也搬不动的石头砸自己的脚”“夏娃穿什么颜色和款式的内裤”等等的问题。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （有些人可能觉得有点可笑，无法理解。但是痞子蔡说过：“用几条简单的偏微分方程式来解释自然界的物理现象，就叫科学，那为什么用天上星宿的排列组合来解释人生，就会叫迷信呢？”作为一个坚决的马克思唯物主义主义无神论者，阿漆我虽然并不完全同意痞子蔡的诡辩，但在我看来，这世上至少有两样东西是你无法辩驳的，一个是爱情，另一个是信仰！！）</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以牛顿同志作为一个十七世纪中叶的剑桥大学大学生，所以在刚开始的两年，牛顿并没有学到多少科学文化知识和科研方法论，至多是学了一些神学古代史逻辑学的东西，顺便探讨了一下一个针尖上能站多少天使和上帝造石头以及夏娃内裤颜色的问题。</p><p><br>&nbsp;&nbsp;&nbsp;&nbsp; 两年后，一个叫卢卡斯的国会议员心血来潮在剑桥创建了一个讲座教程，专门教授一些数学和物理方面的课程。而博学的科学家伊萨克·巴罗成了讲座的第一任教授（什么，你不知道巴罗是谁，用Google百度一下）</p><p>&nbsp;&nbsp; 自此，我们的主人公牛顿正式进入了自然科学的世界，在这段学习过程中，牛顿掌握了算术、三角，读了开普勒的《光学》，笛卡尔的《几何学》和《哲学原理》，伽利略的《两大世界体系的对话》，胡克的《显微图集》，自学了欧几里得的《几何原本》、笛卡尔的《几何学》、沃利斯的《无穷算术》、巴罗的《数学讲义》。而这些教材，这些在今天我们看来仍然会心惊肉跳的经典，在当时当然算是科研的最前沿，牛顿竟然是一年多时间看完的。&nbsp;&nbsp;</p><p><br>&nbsp;自此，我们的主人公牛顿正式进入了自然科学的世界，在这段学习过程中，牛顿掌握了算术、三角，读了开普勒的《光学》，笛卡尔的《几何学》和《哲学原理》，伽利略的《两大世界体系的对话》，胡克的《显微图集》，自学了欧几里得的《几何原本》、笛卡尔的《几何学》、沃利斯的《无穷算术》、巴罗的《数学讲义》。而这些教材，这些在今天我们看来仍然会心惊肉跳的经典，在当时当然算是科研的最前沿，牛顿竟然是一年多时间看完的。&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 并且，牛顿把他读这些东西时的感想，都一一记了下来，命名为《流水账》（Waste Book），为什么叫这个名字呢，因为牛顿用的笔记本，是他的继父史密斯过去记账用的账本。他把自己在力学和数学等方面的新见解和发现记在这个账本上。其内容主要有离心力定律、运动三定律的早期雏形、力的定义、物体碰撞等。这个可以称得上是史上最牛X叉的账本上，包含着他后来的几个重大力学发现：离心力定律、运动三定律和力的定义等的思想萌芽。（关于账本这事是真事，虽然我也觉得很扯淡）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 看出来了吧，真正的武林高手飞花摘叶谈笑间即可伤人，真正的牛人用账本写出个东西都能吓死你！&nbsp;</p><p>&nbsp;&nbsp;&nbsp; 1665年，伦敦爆发大规模鼠疫，牛顿被迫离开剑桥，回到林肯郡的家乡。</p><p>&nbsp;&nbsp; 关于那场鼠疫，严重到什么程度，这么说吧，只要在一片区域里发现一只老鼠，那么方圆一公里之内,无论虾蟹，跳蚤，人畜都会鸭飞狗跳灰飞烟灭。&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 以我们生活的年代，当然不会明白当年那喊一声吓哭孩子叫一声大地颤抖的瘟疫有多么可怕，作为一个严以律己实事求是人，我相信翔实的第一手资料最能说明问题，请看下面的资料：1665年，这场鼠疫肆虐了整个欧洲，几近疯狂。仅伦敦地区，就死亡六七万人以上。1665年的6月至8月的仅仅3个月内，伦敦的人口就减少了十分之一。到1665年8月，每周死亡达2000人，9月竟达8000人。鼠疫由伦敦向外蔓延，英国王室逃出伦敦，市内的富人也携家带口匆匆出逃，剑桥居民纷纷用马车装载着行李，疏散到了乡间。伦敦城有1万余所房屋被遗弃，有的用松木板把门窗钉死，有病人的住房都用红粉笔打上十字标记。</p><p>&nbsp;&nbsp; 天地不仁，为万物为刍狗，&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp; 大道无情，陷生灵于涂炭！！</p><p>&nbsp;&nbsp; 接下来的一年多牛顿就呆在家乡林肯郡牛家村里，心无旁骛，一本正经的做实验搞研究！</p><p>&nbsp;&nbsp; 天才从来不缺少飞翔的翅膀，只要你给他一片天空！&nbsp;&nbsp;</p><p><br>&nbsp;由于牛顿在剑桥受到数学和自然科学的熏陶和培养，对探索自然现象产生浓厚的兴趣，家乡安静的环境又使得他的思想展翅飞翔。这段短暂的时光成为牛顿科学生涯中的黄金岁月，他在自然科学领域内思潮奔腾，才华迸发，思考前人从未思考过的问题，踏进了前人没有涉及的领域，创建了前所未有的惊人业绩。&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 这像什么呢，这就像张君宝这个臭穷小子在少林呆了几天扫了几天藏经阁扎了几天马步跟着觉远背了几句九阳真经的零散口诀然后回家一不小心创了个武当派然后一脸欠揍相的拱拱手道：唉，承让承让,我只是站在觉远师傅的肩膀上！</p><p>&nbsp;&nbsp; 1666，请你记住这个要顺顺顺的一年，这一年也是被后世的物理史学家们津津乐道的一年，这一年和爱因斯坦的1905年一道，被合称为物理史上的两大奇迹年，让我们看看这一段时间他都干过什么：</p><p>&nbsp;&nbsp; 65年初，发明了令当今高中生头疼的二项式定理，这一年十一月，发明了令当今大学生头疼的流数术（微分）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 66年一月，用三棱镜分光，这就是著名的色散实验，研究光的性质以及视觉理论和颜色理论。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 五月，开始研究反流数术(积分)。</p><p>&nbsp;&nbsp; 这年秋天，证明了圆轨道上的引力平方反比关系，见苹果落地，悟出物理学世界中的超级绝学----万有引力定理。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 总之，他的三大神功：微积分、万有引力、光学分析的思想都是在这时孕育成形的。</p><p>&nbsp;&nbsp; 那一年，他24岁！！</p><p>&nbsp;&nbsp; 写到这里，如果你的下巴还没有掉下来的话，要么说明你是个文盲，要么说明我写的是盲文！&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 这些个东西，要是放在今天，随便拿出来一个不得获它十个八个诺贝尔奖和菲尔兹奖，什么你不信，那我们来分析一下：</p><p>我们先说说万有引力：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 研究一件事，我们要把它放在它所处的时代，这叫时代背景，这就像一个清纯漂亮的裸女，她的背景是个澡堂子和背景是一盘发黄的录像带并且在关键的地方还打上重重的马赛克，这两个对你的感官刺激是不一样的，所以时代背景不同，事物的意义就不同。&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 那么十七世纪是个什么时代呢，那是一个不信春哥信上帝的时代，那是一个你随便在大街上喊一声地球是圆的然后会被教皇抓住告诫你年轻人你知道的太多了然后绑在十字架上弹小JJ弹到死的时代。&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 而就是在这个时代，24岁的牛顿告诉世界：地球不仅是圆的，并且月球绕着地球转地球绕着太阳转而且维持这个运动的力跟使苹果掉下来砸到我头上的这个力是一样一样的，叫万有引力。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 总之总结为一句话：别信上帝了，信牛哥！</p><p>&nbsp;&nbsp; 接下来，我们来说说那个已经烂大街的故事：牛顿和苹果树不得不说的故事！</p><p>&nbsp;&nbsp; 牛顿视苹果落地&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp; 沉思里的惊鸿一现&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp; 道来：我不愿耗费心思向世人解释&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp; 无论以何种先贤之信条抑或计算之结果&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp; 地球围绕太阳旋转&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp; 乃“引力”所致之普遍现象&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp; 此亦凡人所能理解之境&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp; 自亚当，自苹果之堕</p><p>&nbsp;&nbsp; 多么美秒的巧合，试想一下，在伊甸园里，亚当和夏娃偷吃了智慧树上的苹果，于是有了人类，而几千年后，一颗苹果砸在了牛顿的头上，于是有了人类思想的飞跃。</p><p>&nbsp;&nbsp; 但是这毕竟是文人们风花雪月出来的故事，当不得真！&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 胡适说过：历史就像被人任意打扮的小姑娘！</p><p>&nbsp;&nbsp; 什么意思呢，意思就是：小朋友们，大家都被骗了，骗的结结实实。基本上，苹果落地砸牛顿的故事和伽利略比萨斜塔双球实验的故事一道，可 以并称为物理学史上两大最能忽悠未成年儿童的典范！</p><p>让我们看看牛顿的外甥女怎么说的：</p><p>&nbsp;&nbsp; 1666年，俺舅舅再次离开了剑桥大学，回到了住在林肯郡的母亲身边。当他在一座花园中沉思散步时，他突然想到重力（它的作用让一颗苹果从 树上掉到地上）不会仅局限于地球周围的有限距离里，而会延伸到比平常认为的更远的地方。他自言自语道，为什么不和月亮一样高呢——如果这样， 一定会对她的运动产生影响——也许可以让她保持在她的轨道上，于是他开始计算那样的假设会产生怎样的效果。</p><p>&nbsp;&nbsp; 所以说，牛顿当时并没有看到苹果落地，只是想到联系到而已！</p><p>&nbsp;&nbsp; 有什么区别吗，区别大大的有，这就比如你想体验一下A片，有两种途径，第一种是你挂着电驴下一部A片看，当然这样做缺点有二，第一个缺点 是你很有可能挂了一晚上电驴最终下下来个打了码的葫芦娃，第二个缺点是你有可能被有关部门列入低俗网名的名单，进行跨省追捕！至于这第二种体验途径，那真是清洁环保零投资无风险无污染无副作用，那就是yy,yy的优点呢，那就是任你思想驰骋自由发挥，想常人未所想，yy无极限，噢耶！&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 他当时并没有“看”到苹果落地，至多他当时只是yy了一下苹果落地而已！</p><p>&nbsp;&nbsp; 但是我相信，对于真正喜欢物理的同学，就会像大话西游里面的紫霞仙子，谈然一笑，说道：骗就骗吧，就像飞蛾，明知道会受伤还是会扑到火里！&nbsp;&nbsp;&nbsp;</p><p><br>&nbsp; 说完了万有引力，现在让我们来说说微积分！（关于微积分创始人之争后面会细说）</p><p>&nbsp;&nbsp; 其实关于微积分，牛顿同学真的很无辜，为什么这么说，因为牛顿创立微积分，目的并不是为了创立一门数学体系，而是为了解决物理运动问题 而自创的运算方法。</p><p>&nbsp;&nbsp; 他创立微分是为了研究曲线上一点的运动速度，创立积分是为了研究变速的运动物体在一定时间范围里走过的路程，我们完全可以想象牛顿当年 为了解决运动问题而没有相应的数学理论支撑的痛苦，当然以他的性格他肯定在心里先咒骂一下这群数学家都是吃干饭的顺便问候了一下数学家们的三 代以上直系血亲，然后大吼一声：这种小事还得老子亲自来！挽起袖子咣咣两下就创立了流数术和反流数术然后一不小心给现代数学带来了开端。</p><p>&nbsp;&nbsp; 话说牛哥创造的微积分使起来确实顺手，它通俗易懂量又大，我们一直在用它！</p><p>&nbsp;&nbsp; 最后说说光学方面的，牛顿最著名的当属那个三棱镜分光实验！&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 先来说说这个三棱镜，当然现在三棱镜满大街都是，一块钱能买一打，而在当年，大不列颠联合王国教育部又没有关于买三棱镜的专项拨款，牛顿为了买下那个三棱镜，真是差点连三角内裤都当了，当然也值得，利用这个三棱镜，牛顿第一个发现了白光是由各种不同颜色即频率的光组成的！</p><p>&nbsp;&nbsp; 还有就是制成了第一架反射望远镜，这当然与他小时候看那本木匠初级教程做水车折叠式提灯而培养的动手能力有关，牛顿把这架望远镜献给了 英国皇家学会，并且借此混了一个皇家学会会员的身份（相当于现在的中科院院士）。</p><p>&nbsp;&nbsp; 当然还有牛顿环，牛顿色盘等等我就不一一说了，因为伟大的斯蒂芬霍金说过：在科普的帖子里面哪怕出现一个公式或者专业词汇都会吓走一半的读者。</p><p>&nbsp;&nbsp; 也许你小学在学习牛顿的理论，初中高中大学仍然在学牛顿的理论，力学中有牛顿的理论，光学中有牛顿的理论，数学也有他的理论，甚至这厮还插手化学领域，搞了几十年炼金术，这还让不让其他科学家活了，这活像NBA骑士队勒布朗同学，一人承担骑士队组织后卫得分后卫大前锋小前锋中 锋教练等职，有时候还去客串一下裁判！</p><p>&nbsp;&nbsp; 所以说牛顿就是科学的丈母娘，把触角伸到科学的每一个领域，管着这个女婿的方方面面！</p><p>&nbsp;&nbsp; 如果你是一个文科生，你也许会面露崇拜的神情说道：哇塞，牛哥你好帅耶！&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 但是，作为一个被这厮的理论搞得头疼了半辈子的理科生来说，你也许会感叹：一个英国人，几十年如一日孜孜不倦的给以后全世界的小朋友们 试卷上创造着一道又一道难题，害的一代又一代小朋友累弯了腰，这种毫不利己专门害人的行为，是一种什么精神，是TMD的一种伟大的国际主义精神 ！&nbsp;</p><p><br>如果我没有穿越的话，我们现在应该说的是1666年的事！</p><p>&nbsp;&nbsp; 但是问题来了，看看牛顿这三大神功集结成册并且出版的时间：&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 《流数法和无穷级数》(1671年)</p><p>&nbsp;&nbsp; 《自然哲学的数学原理》(1687年)</p><p>&nbsp;&nbsp; 《光学》(1704年)</p><p>&nbsp;&nbsp; 暂且不说这流数术隔了六七年才出来，原理和光学竟然等了二三十年才出版，放在现在，如果把牛顿搁起点网上写连载更新小说的话，一定会收集到很多兰州烧饼和9527，当然你如果是个牛肉炖粉的话，你大可以像英雄本色里小马哥那样维护牛哥：“LZ没有欠我什么我从来不会逼楼主更新，我有自己的原则！那就是等，我等了三十年，就是要等一个机会，我要争一口气，不是想证明我有多了不起，我只是要告诉人家，我失去的沙发一定要抢回来。”</p><p>&nbsp;&nbsp; 正如雷锋叔叔做了好事从来不留名只会把它记在日记里一样，牛顿同志做了研究从来不发表只会把它烂在肚子里！&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 那么这个事就奇了怪了，像一般的科学家，稍微做出点东西就赶紧发表，然后广播上报开讲座，心急火燎的恨不得让全世界都知道，所以我们应该可以理解当年阿基米德洗澡时发现浮力定理后一丝不挂的跑到大街上去大呼小叫的那个兴奋劲！这是为嘛呢，因为对于我们一般人，会把自己的成果看成自己的孩子，你如果有一个聪明伶俐叮头可爱的娃，你肯定会天天把他带出去，享受大家的称赞，然后口头上说着一般一般这孩子随他妈实际上心里窃喜道废话老子的种能不聪明俐叮头可爱吗！</p><p>&nbsp;&nbsp; 而对于牛顿，他会把研究成果看成自己的妻子，关键是如果把所有科学家的成果都看成他们自己的老婆的话，那牛顿的这个实在可以算是国色天香倾国倾城了，如果你有一个这样的老婆，你当然会把它所在铜雀台上，然后在日记本里记上：我的老婆已长成，养在深闺人未识。</p><p>&nbsp;&nbsp; 所以牛顿只会在夜深人静的时候，从柜子底翻出自己的老婆，然后细细揣摩，每每看到精彩处，还会击节叹赏：这一步推导太他妈牛X了，我当时怎么想到的！</p><p>&nbsp;&nbsp; 那么造成牛顿的这个个性的原因是什么呢，这就要追溯到他的童年时期，上面已经说过，牛顿的童年是和他祖母生活在一起的，所以无论小牛顿搞个什么小玩意或者小发现，都不会有人和他交流，因为以他祖母的年龄智商和性别，估计也很难理解诸如四十五度的奥秘，所以小牛顿这个苦啊，有理没处说有货没处现，久而久之就养成了孤芳自赏顾影自怜的毛病，看见了吧，这就是隔代教育的悲剧啊！</p><p><br>&nbsp;二.</p><p>基本上，写到这里，我们其实已经了解到了牛顿同志在物理上做的大部分工作，那他下半辈子做了了些什么呢，老实说，作为一个忠实劲道的牛肉炖粉，牛同学下半辈子做的有些个光荣事迹我都不好意思跟大家讲！&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 有些细心的同志可能发现了：咱这不才讲到牛顿二十几岁么，怎么这就算半辈子了，据史料记载他可是活了八十有四并且之前一直是身体倍棒吃嘛嘛香啊！&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 情况确实是这么个情况，但是这要看我们把一辈子怎么定义，这就比如小日本的动作爱情片也有另外一种叫法一样（大家都懂的)。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 像有些年过半百的港台女明星虽然保养不错皮肤很好不起皱不打折并且还经常对着镜头装出一副清纯新势力小美女的样子，但是在她们魔鬼的面庞下，掩饰不了一颗已经苍老的心，牛顿同志也差不多，虽然年龄不大皮肤白皙新陈代谢正常，但是其科学创作的青春已经小鸟一样不归来了！（不由的想起老一辈无产阶级革命家臧克家老先生那首听起来有点瘆人的诗：的有些人活着，他已经死了，有些人死了，他还活着！）</p><p>&nbsp;&nbsp; 那他这下半辈子到底干了些什么事情呢，除过出版了他那三本书，其他的，总结为一句话就是掐架扯皮当官拿钱装谦虚写回忆录，关于掐架扯皮这种能引起肾上腺素分泌的有意思的大家都很感兴趣的这部分精彩内容，我会留在后面说。</p><p><br>&nbsp;我们先说说牛顿的仕途，这个以后想混官场的同学可得听仔细了：</p><p>&nbsp;&nbsp; 1667年，牛顿从故乡回到剑桥，当年当选为三一学院管理委员会的低级成员，直接就混进了剑桥管理层。在1668获硕士学位。1669年，巴罗辞了卢卡斯讲座教授的职位，并积极推荐牛顿接替了此职位．并且很快，牛顿被选为选为三一学院管理委员高级金卡vip成员，1672年起因为给皇家学会献了个望远镜，他被接纳为英国皇家学会会员,瞧瞧这才几年，爬的这叫一个快啊。1689年当选为英国国会议员，并且还来了个三连庄（1689，1690年，1701）．1696年因病离开剑桥大学，到皇家造币厂当监督，1699年出任造币厂厂长，这可是流油的肥缺啊。1703年他当选为皇家学会会长，也就是相当于中科院院长，以后每年都连任，直到去世．1705年英国女皇授予他爵士称号。</p><p>&nbsp;&nbsp; 这就是学而优则仕的典型，相传当年以色列人民强烈要求爱因斯坦当以色列的总统被爱因斯坦拒绝，给我们留下了一个不要迷恋哥 哥只是传说的传说！ 但是我现在相当怀疑以牛顿同志出仕的这个热乎劲，你给他一个大不列颠国王的位子他都敢坐!</p><p>&nbsp;&nbsp; 说几个牛顿当官时候的趣事：</p><p>&nbsp;&nbsp; 上面说了，牛顿当了三届的英国国会议员，就像人大代表要交提案一样，议员也一样，按理说作为一个议员你至少也应该提一些诸如建设祖国保家卫国为到十八世纪中叶把大英帝国建设成为富强民主文明和谐大国，尽早实现大英帝国的四个现代化而努力奋斗的提案，但是牛顿这三年来唯一有记录的议案就是抱怨议会厅的寒冷气流并要求关闭窗户开暖气。（这个可真不是我扯的）</p><p>&nbsp;&nbsp; 看来作为一个科学家，搞搞科研也就行了，当官还真不是这块料！</p><p>&nbsp;&nbsp; 牛顿在当皇家造币厂厂长的时候，全国的货币那叫一个乱一个假啊，全国约有20%的货币是假钞，这就是说你那拿一张十五块的人民币买了一块钱的棉花糖老板相当有可能找你两张七块的。又或者你站在十八世纪的伦敦大街上，用一枚带有春哥头像的威尼斯金币买了一瓶威士忌，掌柜的也许很淡定的找给你几块康熙通宝，这并不是说我大清帝国的货币在当时算是世界货币，而是因为在当时随便一个破铜板烂铁片都能当钱使。</p><p>&nbsp;&nbsp; 总结起来就是：金融市场混乱，资本主义国家人民生活在水生火热之中！</p><p>&nbsp;&nbsp; 而就在此危急存亡之秋，牛顿同。志作为皇家造币厂的厂长，临危受命，主持了全国的货币重铸工作，鉴于牛顿在之前已经搞了几十年炼金术，所以铸币这种事对他来说还不是小case，所以三两下就轻松搞定，鉴于他在铸币厂的工作表现，英国女皇授予牛顿爵士身份。</p><p>&nbsp;&nbsp; 所以同志们记好了，牛顿得到爵士这个身份，是由于在铸币厂的工作表现，而不是由于他对科学的贡献！</p><p>&nbsp;&nbsp; 再说了，如果真按科学贡献来封的话，那一个爵士身份哪成啊，至少得是黄金圣斗士！！</p><p>&nbsp;&nbsp;<br>三.</p><p><br>&nbsp;接下来，我将以一另外一种方式，来讲讲牛顿的大半辈子！</p><p>【一个牛顿和四个男人的故事】</p><p>【一.牛顿和巴罗】&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 当年，牛顿刚进剑桥的时候，真是刘姥姥进大观园，张君宝来到了少室山，弥眼里都是知识，真是感觉随便在校园里一棵树上踹两脚都会掉下来几本书，这心里琢磨着大学生活是多么美好啊 ，多么美好啊!</p><p>&nbsp;&nbsp; 而两年后，被认为当时欧洲最博学多才的巴罗教授，当了卢卡斯讲座教授，开始讲授天文学物理数学方面的知识。</p><p>&nbsp;&nbsp; 话说这牛顿第一次去找巴罗，巴罗发现眼前的这个年轻人虽然一身的大裤衩烂背心外加沙滩凉鞋，一副火云邪神刚从监狱里放出来的样子，休闲的 要死，但是禁不住仔细一看，心里一声惊呼：哇，不得了啊不得了，这小子有道灵光从天灵盖喷出来，一看就根骨奇佳，天赋异秉，简直百年一见的科 研奇才啊，如果有一天让他打通任督二脉，那还不飞龙上天！所以巴罗当时一高兴，把他那本《数学讲义》十块钱都没收就送给了牛顿,并且收其为徒!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 那本数学讲义里记的是什么呢，是曲线图形面积的算法，而巴罗用的方法是极限的思想，而我们知道极限恰恰是微积分的基本思想！</p><p>&nbsp;&nbsp; 再说一个事;</p><p>&nbsp;&nbsp; 1666年牛顿为了躲瘟疫回到乡下，而这一年牛哥果然灵光爆发，横扫八方，一举奠定了自己一生中三大理论的雏形（这个上面已经说过）！</p><p>&nbsp;&nbsp; 回来时牛顿在已然是十八般武器样样精通，巴罗老师看在眼里心里这个爽啊，琢磨着自己培养的小树苗终于要开叉了，于是决定把自己讲座教授的 职位让给牛顿，所以他向学院递辞呈说老朽老迈不复当年如今上一节课得腰酸背疼腿抽筋恳请学院批准让老朽卸甲归田，学院回复说不行啊巴老你就是 我们的唯一啊，巴罗说不碍事我推荐牛顿同学来代替我。</p><p>&nbsp;&nbsp; 于是，27岁的牛顿成了卢卡斯讲座教授。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 其实，那一年巴罗也才39岁，完全是年富力强创造力旺盛的年龄，能在不惑之年主动让贤，举荐牛顿，从这一点可以看出巴罗同志完全是人民群 众所喜闻乐见的好老师，好伯乐！</p><p>【二.牛顿和哈雷(没错，就是哈雷彗星的哈雷）】</p><p>&nbsp;&nbsp; 1680年，年轻的学者哈雷开始思索根据太阳对行星的引力平方反比定理，能推出行星的轨道到底是个什么样子，这个问题他想了几年还是没有想出来！</p><p>&nbsp;&nbsp; 于是1684年，他来剑桥拜访牛顿，向牛顿请教这个问题，没想到他刚把问题问完，牛顿想都没想就说答案是椭圆，哈雷当时一听就郁闷了说牛哥你 好歹也沉思一下再说好让我有点面子你知不知道这个问题我已经想了四年了都没有想出来而你却两秒钟不到就给出答案这让我觉得自己好失败，牛顿说 年轻人其实这个问题十几年前就证明了，只不过一直没有发表。（因为这时，哈雷还不知道牛顿做了研究从来不发表只会把它烂在肚子里这个臭毛病）哈雷就问说那你还有多少研究发现没有公布，牛顿心里想着那可都是我的老婆我为什么要告诉你，于是不愿意说，哈雷说那也行那你愿不愿意把这些出书啊这些可是震烁古今的发现啊，牛顿还是不愿意，哈雷于是引诱说你把这个出版了立马就会出名，并且会有很多崇拜者，以后拿项目经费也就好拿了 ，我们上面已经说过，牛顿同志对于名利这种东西，那是相当有追求的，于是牛顿就答应吧他的力学和运动学理论出一本书。</p><p>&nbsp;&nbsp; 接下来的事情我们都知道了，那本叫做《自然哲学的数学原理》划时代巨著于1687年出版。</p><p>&nbsp;&nbsp; 《原理》出版后大受欢迎，各地的书店纷纷排起了长龙，每天早晨书一到库就会被抢购一空，据说在黄牛市场此书已经炒到了原价的五倍以上，而且是先付款再拿书，人民群众纷纷表示这比春运的火车票和阿凡达的电影票还要难买。</p><p>&nbsp;&nbsp; 在当时，欧洲的贵妇人和小资们以见牛顿一面为荣，如果和牛顿握了下手，那回家那只手一年都舍不得洗。</p><p>&nbsp;&nbsp; 这一年，牛哥成为全民的学术明星！</p><p>&nbsp;&nbsp; 但当时全世界真正能读懂《原理》的人其实没几个，但为什么这个书还这么火呢，这个现象其实也很好理解，就像你到一个朋友家里看见这厮的 枕头边放着一本黑格尔的《小逻辑》或者但丁的《神曲》又或者是爱因斯坦的《广义相对论的基础》，那你对这厮的品味还不是佩服的滔滔江水连绵不断，殊不知这厮枕头底下其实压着阁楼和花花公子!</p><p>&nbsp;&nbsp; 既然说到了这里，不妨说一下哈雷彗星的发现：</p><p>&nbsp;&nbsp; 1687年牛顿的《原理》出版后，哈雷根据此书提出的假设，认为有些彗星具有封闭的轨道，也就是说它会有规律的重复出现，他跟据过去的观测记录，发现1305、1380、1456、1531、1607、与1682年观测到的彗星轨道非常相似，应该是同一颗彗星，如果这个推测是正确的，那么它应该会在1758年再度出现，于是哈雷发表文章说：我，哈雷，在这里立贴为证，预测下次彗星在1758年出现，欢迎大家到时候挖坟！</p><p>&nbsp;&nbsp; 当然这个文章刚发表得到了大家的一致鄙视，酱油党纷纷排队等着挖坟而围观哈雷的悲剧，激进的群众甚至骂哈雷是烧饼和纱布！</p><p>&nbsp;&nbsp; 1758年，这个彗星果然如期而来，群众沸腾了，而此时哈雷死了都有16年了，于是群众纷纷挖坟说道兰州神人啊真是预测帝我太崇拜你了！于是这个彗星就被命名为哈雷彗星。</p><p>&nbsp;&nbsp; 而我们今天知道，哈雷彗星的周期是76年，它在1986年出现过一次！</p><p>&nbsp;&nbsp; 我，leavise007,在百度物理吧里立下此贴，预测下次哈雷彗星将于2062年再度来访，欢迎大家到时候挖坟！！</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;本来剩下这点事呢，我不想也不能说的太细，一来对于创建社会主义和谐网络是大大的不利，二来对于维持我科学家长久以来不食人间烟火的形象也是有负面影响滴，但是我本已打算牺牲小我服务大众，所以就说说也无妨！</p><p>【三.牛顿和胡克】</p><p>&nbsp;&nbsp; 胡克是谁呢，就是那个初中课本上发现弹簧定理的人，那个第一个用显微镜观察细胞的人，但是老实说胡克同志的贡献可不止这些，基本上胡哥可以算是科学史上最被低估没有之一的人！</p><p>&nbsp;&nbsp; 为什么呢，这就要从他和牛顿的关系说起：</p><p>&nbsp;&nbsp; 1679年，牛顿还只不过是剑桥的一个普通教授外加皇家学会的会员，而胡克当时已经贵为皇家学会的实验室主任，职位上比牛顿高那么一点点， 这一年胡克写信给牛顿两人一块讨论当时正处在在萌芽中的万有引力的问题，领导上写信关怀科研进度牛顿当然赶紧回复说谢谢组织关心我会再接再厉 不负国家栽培，于是胡克一高兴也就把自己的研究成果行星运动的万有引力和距离的平方成反比定理告诉了牛顿。</p><p>&nbsp;&nbsp; 现在问题来了，1687年《自然哲学的数学原理》出版的时候，在万有引力的发现问题上，牛顿压根不提胡克什么事，胡克于是郁闷了，写信给牛 顿说你好歹在书的前言里提一下我写上尊敬的胡克先生在万有引力的问题上不吝赐教给过本人一定的帮助兹为感谢之类的话，你这样压根不提我搞得跟 没事人似的就太耗人品了吧，而此时的牛顿已经名满天下，你小小的一个实验室主任自然不放在眼里，于是也就拒绝了胡克的要求。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; （其实呢，这就像小青年谈恋爱一样，刚开始，牛顿和胡克两人关系融洽，互相吸引，这牛顿呢一上来用几句你是我的玫瑰你是我的爱这种恶俗但 很管用的甜言蜜语迅速拍晕了胡克，搞得胡克以为oh,baby,you are the one in my heart!恋爱中的女人都是盲目的，于是胡克就把自己的一个叫距离平方反比定理的存折交给了牛顿保管，并且把密码告诉了牛顿，没想到牛顿这个负心郎薄情汉转身就发表声明说本人过去、现在以及将来都不认识胡 克，且自古以来与他无任何利益关系）</p><p>&nbsp;&nbsp; 经历了这个事，胡克的心也就拔凉拔凉的，直接导致神经衰弱内分泌失调，下半辈子也就变成了了一个彻头彻尾的愤青，变得像更年期的女人一样多疑易怒生理周期紊乱，最后在郁郁寡欢中结束了自己的生命！</p><p>&nbsp;&nbsp; 胡克死后，牛顿当上了皇家学会的会长，他下令撤下了皇家学会中所有胡克的画像，这也就导致了现在我们找不到任何一张胡克的肖像，甚至牛顿还试图烧毁大量的胡克的书稿和文章！</p><p>&nbsp;&nbsp; 以前我们一起出去打江山，去铜锣湾砍人火拼收保护费，现在发达了，建立了我们自己的力学帝国，等到要割地封王排座次的时候，你TMD只给我分了个连初中生都懂的弹簧定理--------这就是胡克先生的悲剧！</p><p>&nbsp;</p><p>【四.牛顿和莱布尼兹---微积分创始人之争】</p><p>&nbsp;&nbsp; 现在的物理史学家们一般都认为是牛顿和莱布尼兹各自独立的创立了微积分，但是各自独立这个词本身就用的很暧昧，就像你看了gjm的《梦里花落知多少》发现咦这怎么跟人家庄羽的《圈里圈外》在人物特征人物关系故事情节上那么像呐，然后gjm出来辟谣说没有的事我们只是‘各自独立’的完成了各自的小说，这事搁谁谁也不信！</p><p>&nbsp;&nbsp; 这点烂事其实没什么好说的，我们知道牛顿在1666年已经创立了微积分，但是这厮一直憋着没有发表，1673年莱布尼兹发表了微积分思想的论著， 宣告了微积分的创立，而牛顿直到1687年《原理》出版的时候才系统的阐述了自己的流数术和反流数术，所以两人就为了到底是谁先发明了而扯起了皮 来，牛顿说莱布尼兹你个烧饼曾经来过英国并且看过我的手稿回去就创立了微积分肯定是抄我的，莱布尼茨说你全家才是烧饼呢你看好了我创立的思路 都和你不一样你是先微分再积分而我是先积分再微分，并且我用的符号都和你不一样！</p><p>&nbsp;&nbsp; 就为了这事，科学家们激烈地为双方作辩护。然而值得注意的是，大多数为牛顿辩护的文章最后被发现均出自牛顿本人之手，只不过仅仅用朋友的名义出版而已（原来牛哥当时就会用马甲，而且运用的炉火纯青不留痕迹）！</p><p>&nbsp;&nbsp; 由于牛顿当时在学术界的强大影响力最后搞得莱布尼兹最后跟胡克一样郁郁而终！</p><p>&nbsp;&nbsp; 莱布尼兹死后，牛顿扬言说他为了伤透了莱布尼茨的心感到洋洋得意！</p><p>&nbsp;&nbsp; 在这件事情上，牛顿同志的表现像极了一个CS中杀死了人还喜欢上去扫两枪踩几脚尸体而抒发胸中虐人快感的的的自恋狂.....</p><p>&nbsp;</p><p>&nbsp;</p><p>四</p><p>&nbsp;</p><p>【牛顿之殇】</p><p>&nbsp;&nbsp; 1727年3月20日，伟大艾萨克·牛顿，终于走完自己为千秋万代一统江湖的人生，作为万众景仰的智慧之王者，大英帝国为他举行了国葬，为他抬棺 送行的是八名身份显赫的贵族。</p><p>&nbsp;&nbsp; 同其他很多杰出的英国人一样，他被埋葬在了威斯敏斯特教堂。他的墓碑上镌刻着：&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 让人们欢呼这样一位多么伟大的人类荣耀曾经在世界上存在。</p><p><br>【关于牛哥信什么？】</p><p>&nbsp;&nbsp; 现在我们把牛顿当做现代科学的创始人，科学史上绝对的一哥，但是很遗憾的告诉大家，他本人信的却是神学，他在《原理》中说：“引力解释了行星的运动，但却不能解释谁让行星运动起来的。上帝统治万物，知晓所有做过和能做的事。”还有他有一句被世人选择性遗忘的名言：“我的一生， 就是在为证明上帝的存在而工作。”</p><p>&nbsp;&nbsp; 牛顿死后，留下了大量的手稿，我们发现，他没有发表的手稿中关于炼金术的研究超过一百万字，关于神学、《圣经》中年代和预言的研究达到三 百万字，实际上，他的后半辈子大部分时间在研究神学，和上帝打交道。&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 看见了吧，大家不信上帝信牛哥，但是其实牛哥本人信上帝！</p><p>&nbsp;</p><p>【身前身后名】</p><p>&nbsp;&nbsp; 对于这么一个复杂而又拉风的男人，怎么评价他确实是个问题，我先引一段我在本文开始时的那段话，以体现我文章条理清晰首尾呼应之特色：</p><p>&nbsp;&nbsp; 他孤傲，但他勤奋笃学；他低调，但受万人景仰；他可以将神赐与人类得智慧运用得出神入化，可以创造出堪称艺术的超级宇宙体系！他究竟是神 仙的化身，还是地狱的使者呢？没有人知道，但是可以肯定，每一个人都给他一个称号——站在巨人肩膀上的人！</p><p>&nbsp;&nbsp; 那么，怎么对牛哥定位呢：</p><p>&nbsp;&nbsp; 著名经济学家凯恩斯曾经说过：“从18世纪以来，牛顿一向被认为是第一个，也是最伟大的近代科学家，是一个理性主义者，他教导我们作出冷静 的思考和无偏的推理。可是现在我要说，我不认为如此……牛顿并非理性时代的第一人，却是最后一个魔术师、最后一个巴比伦人和苏美尔人。”</p><p>&nbsp;&nbsp; 现在我也要说：leavise007同意凯恩斯同志的看法！</p><p>&nbsp;</p><p><br>&nbsp;&nbsp; 最后，贴上那首大家所熟知的诗句：</p><p>&nbsp;&nbsp; 自然和自然律隐没在黑暗中；<br>&nbsp;&nbsp; 神说，<br>&nbsp;&nbsp; 让牛顿去吧！<br>&nbsp;&nbsp; 万物遂成光明。&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp; 为什么我的眼睛里充满着泪水，因为我对这句诗爱的深沉！！&nbsp;&nbsp;</p><p>&nbsp;&nbsp; ★★★★完★★★★</p><p></p> <a href="http://hi.baidu.com/weolar/blog/item/ce142973dab48c048601b016.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/ce142973dab48c048601b016.html#comment">查看评论</a>]]></description>
        <pubDate>2011-05-31  20:36</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/ce142973dab48c048601b016.html</guid>
</item>

<item>
        <title><![CDATA[SB的面向对象的继承]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/55a1cbbf9166ac1d18d81f9c.html]]></link>
        <description><![CDATA[
		
		<p>&nbsp;</p><p>一直我非常非常讨厌使用C++继承。设计继承的哥们当初肯定刚考虑完两个类之间的相互关系，认为就是上下级之间的关系最多。殊不知类与类之间可以是复杂的网状关系。于是继承不够用了，又发明什么友类、什么多重继承。面向对象从一开始就被搞错方向了。事实上，现在多倾向用组合，或者模板的静多态取代继承来关联各个类。</p><p>&nbsp;</p><p>一个典型的案例就是gui里的list。一个list很容易被产品经理要求有各种小需求：比如在list每行里嵌入按钮、单选框…我就见过某个sb把这一堆东西都继承到LineEle 这个类里。从而出现了一个无比庞大复杂的class。</p><p>&nbsp;</p><p>下面转一篇经典的文章来批判sb的继承：</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>让我们先来简单看看什么是继承和组合。只是例子，不是概念。</p><p>假设有三个特性（模块）， ModuleA, ModuleB, ModuleC。有两个类 ClassA 和 ClassB 需要使用它们。ClassA 会用到 ModuleA 和 ModuleB，ClassB 会用到全部三个特性。而且我们还假设现在全部A，B和C模块会只被ClassA和ClassB用到。</p><p>&nbsp;</p><p>继承：</p><p>&nbsp;</p><p>class ClassA {&nbsp;</p><p>&nbsp;&nbsp; &nbsp;functions of ModuleA;&nbsp;</p><p>&nbsp;&nbsp; &nbsp;functions of ModuleB;&nbsp;</p><p>};&nbsp;</p><p>&nbsp;&nbsp;&nbsp;</p><p>class ClassB extends ClassA {&nbsp;</p><p>&nbsp;&nbsp; &nbsp;functions of ModuleC;&nbsp;</p><p>};&nbsp;</p><p>组合：</p><p>class ModuleA {};&nbsp;</p><p>class ModuleB {};&nbsp;</p><p>class ModuleC {};&nbsp;</p><p>&nbsp;&nbsp;&nbsp;</p><p>class ClassA {&nbsp;</p><p>&nbsp;&nbsp; &nbsp;ModuleA ma;&nbsp;</p><p>&nbsp;&nbsp; &nbsp;ModuleB mb;&nbsp;</p><p>};&nbsp;</p><p>&nbsp;&nbsp;&nbsp;</p><p>class ClassB {&nbsp;</p><p>&nbsp;&nbsp; &nbsp;ModuleA ma;&nbsp;</p><p>&nbsp;&nbsp; &nbsp;ModuleB mb;&nbsp;</p><p>&nbsp;&nbsp; &nbsp;ModuleC mc;&nbsp;</p><p>};&nbsp;</p><p>&nbsp;&nbsp;&nbsp;</p><p>//或者：&nbsp;</p><p>&nbsp;&nbsp;&nbsp;</p><p>class ClassB {&nbsp;</p><p>&nbsp;&nbsp; &nbsp;ClassA ca;&nbsp;</p><p>&nbsp;&nbsp; &nbsp;ModuleC mc;&nbsp;</p><p>};&nbsp;</p><p>两种方法都重用了模块。</p><p>对于组合，我们一般把模块叫做组件。</p><p>在游戏开发中，这样的组合又叫做基于组件的实体系统。</p><p>&nbsp;</p><p>组合比继承有哪些优势？</p><p>&nbsp;</p><p>组合允许将问题分割成互不依赖的子元件。每个元件可以由不同的开发者开发。我们可以让三个程序员来同时开发 ModuleA， ModuleB 以及 ModuleC。元件可以在运行时被替换，删除，或者添加（动态绑定）。与之相反，继承不能或者非常难（取决于编程语言）在运行时替换，删除，或者添加特性（静态绑定）。组合比继承有更少的耦合。继承强制了 ClassB 和 ClassA 之间的耦合，但组合不会。组件可以被用在其它的组合当中用以构成不同的行为。在继承中则没有办法只重用一个单个特性。继承强制了父类的所有特性被带入到了子类。更少的代码冗余。继承比较容易导致冗余。B 继承自 A，通常 B 只需要 A 的部分特性，不需要的部分就成了冗余。如果 B 是由 A 的部分元件组合来的，那么 B 可以舍弃不需要的元件来避免冗余。更好的封装。组合是基于公开接口的。每个元件不知道其它元件的内部细节。这正是封装所指的。而继承则把父类的内部细节（保护的接口）透露给了子类。更糟的是，子类通常会对父类做某些假设，而且父类也会假设子类会尊重它要求的接口。容易更改。在组合中，任何元件都可以被更改而保证对其它元件影响很小，只要保持公开的接口。继承则强制了很紧密耦合的层次链。对于层次链任何节点的改变都将影响整个链。小模块和原子模块。组合中，大的模块是由小的模块组成的，因此模块的层次可以得到控制。有可能我们只有两个层次，原子模块，和真实的功能模块，因 而层次非常平坦。在继承中，大的模块来自从小的模块继承。想要一个模块？继承吧，得到一个新的层级。这就可能造成有很多的层级，导致系统的模块层次非常复 杂且难以理解。</p><p>对于 "is a" 关系我们应该用继承？是，也不是。</p><p>&nbsp;</p><p>虽然我们被教导继承要 "is a" 组合要 "has a"，在很多情况下 "is a" 也可以被理解为 "has a"。比如说，程序员是一种人，所以程序员从人继承。但如果我们把程序员当成是一种具有编程工作的人，那么程序员就可以由人和编程工作来组合。</p><p>&nbsp;</p><p>组合的不足之处：&nbsp;</p><p>唯一的不足之处大概就是我们最终会得到非常多的模块（类）。这个很难说是不足，而且从其它角度看，这个其实是益处。对于C++，大量的小类完全没有影响， 不会让代码变大，也不会让运行变缓慢。对于 Java，C#，Objective C，这可能会增大代码。但除非你是工作在资源有限的设备上，这个不是大问题。</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>何时用组合：</p><p>&nbsp;</p><p>当 ClassB 使用 ClassA 而不是实现 ClassA 时。当元件会被改变时（添加，替换，删除）。即使 ClassB 和 ClassA 具有 "is a" 的关系，如果这种关系在未来会发生变化，我们应该用组合而不是继承。一个程序员是人，但未来他可以选择别的工作，比如股票经纪。如果程序员是从人继承而 来，那么当工作变化时我们就比较麻烦。因此用组合。程序员只是一个普通的人，一个有着编程工作的普通人。当继承不是必须的时候。没错，我们要多用组合来代替继承。</p><p>何时用继承：</p><p>&nbsp;</p><p>当 ClassB 是实现 ClassA 而不是使用 ClassA。比如说，ClassA 可能是具有多态函数的抽象对话框，有着显示隐藏等函数。ClassB 是一个文件对话框需要实现这些多态函数。当 ClassB 和 ClassA 有明显的 "is a" 关系而且这种关系不会在运行时改变时。也就是说，绑定永远是静态的。虽然猫可以被当成是一个具有动物特征和猫特征的物体，但这两个特征永远不会改变。把猫 特征换成狗特征会产生狗而不是猫。所以这种绑定是静态的，关系也是固定的 "is a"，所以让猫从动物继承是很自然的。当 ClassA 的接口也是 ClassB 的接口时。这个其实很难讲。如果用组合实现其实也可以，ClassB 可以重写代理接口来重定向到 ClassA 上。当 ClassB 会被用到使用 ClassA 的地方时。这个也暗喻了 ClassB "is a" ClassA。 然而，对于支持类型多态（泛型编程）的语言，比如 C++，可以通过用模板类型来避免继承。</p><p>总结：&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>我展示了我们应该多用组合而不是继承。而且如果你 google "composition inheritance" （无引号），上百万的网页会支持这个观点。但这绝不是说在组合对继承的斗争中组合是赢家。不，而且根本没有斗争。对于适当的问题我们要选择适当的方法，保 证自然和逻辑性。没有什么是绝对的好或者坏，对或者错。</p><p></p><p></p><p></p><p></p><p></p><p></p><p></p> <a href="http://hi.baidu.com/weolar/blog/item/55a1cbbf9166ac1d18d81f9c.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/55a1cbbf9166ac1d18d81f9c.html#comment">查看评论</a>]]></description>
        <pubDate>2011-05-07  16:02</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/55a1cbbf9166ac1d18d81f9c.html</guid>
</item>

<item>
        <title><![CDATA[卡巴代码入手，哈哈！]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/09e906e9a3ab402cb90e2dd3.html]]></link>
        <description><![CDATA[
		
		<p>惊闻卡巴雇员泄漏源码了，赶紧下了份。果然是真的。</p><p>足有180M，哈哈。虽然不知道有多少核心代码，不过足以一观大略了。</p><p>这回当年微软的悲喜剧又重演了<img src="http://img.baidu.com/hi/face/i_f29.gif">&#8205;</p><p></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/09e906e9a3ab402cb90e2dd3.html#comment">查看评论</a>]]></description>
        <pubDate>2011-01-29  21:56</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/09e906e9a3ab402cb90e2dd3.html</guid>
</item>

<item>
        <title><![CDATA[(转)遍历PCI总线确定IDE控制器端口号]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/04f31ed843289c2732fa1c46.html]]></link>
        <description><![CDATA[
		
		<span style="FONT-SIZE: 20px; FONT-FAMILY: 宋体">
<p><span style="FONT-SIZE: 16px">Abstract</span><br><span style="FONT-SIZE: 16px">PCI设备的遍历</span><br><span style="FONT-SIZE: 16px">如何确定IDE控制器的起始端口号</span></p>
<p><span style="FONT-SIZE: 16px">1&nbsp;Background</span><br><span style="FONT-SIZE: 16px">过去我们编码过程中，在确定IDE控制器的端口号时，都是直接使用0x1F0—0x1F7(主IDE控制器)或0x170—0x177(副IDE控制器)。对于不使用这些端口的机器(比如Goalia)，就会出现初始化失败的情况，原因是无法访问硬盘。</span></p>
<p><span style="FONT-SIZE: 16px">其实这个0x1F0—0x1F7由来于ISA总线系统，并不能适应纯PCI设备的要求。 纯PCI设备希望可以不使用固定的IO端口，即要求系统对它进行动态配置， 这个时候它所占用的端口就不一定是0x1F0—0x1F7了。为解决这个问题， 我们需要遍历一下PCI总线， 从PCI bus配置空间中找到我们要访问的设备，然后再从设备的配置信息中得到IDE控制器使用哪些端口。</span></p>
<p><span style="FONT-SIZE: 16px">2&nbsp;Mainbody</span><br><span style="FONT-SIZE: 16px">2.1&nbsp;配置空间简介。</span><br><span style="FONT-SIZE: 16px">每個功能設備都有一個相互獨立的配置空間(256個字節)，可以分為兩部分，一個是64字節的配置首區，一個是192字節的設備特殊配置寄存器空間。前64字節是specific規定，有相同的格式；而后192字節隧不同的設備變化。前64字節的內容隧其中首區類型的值的不同而變化，在PCI2.1中定義兩种首區類型：nonbridge（桥类设备）和bridge（桥类设备）。</span><br><span style="FONT-SIZE: 16px">&nbsp; &nbsp;由于这里我们要讨论的是IDE控制器， 所以只介绍非桥类设备。</span></p>
<p><span style="FONT-SIZE: 16px">PCI nonbridge配置首區結构如下：</span><br><span style="FONT-SIZE: 16px">byte</span><br><span style="FONT-SIZE: 16px">3&nbsp;2&nbsp;1&nbsp;0</span><br><span style="FONT-SIZE: 16px">Device ID&nbsp;Vendor ID</span><br><span style="FONT-SIZE: 16px">Status register&nbsp;Command register</span><br><span style="FONT-SIZE: 16px">Class code&nbsp;Sub-class code&nbsp;Prog.I/F&nbsp;Revision ID</span><br><span style="FONT-SIZE: 16px">BIST&nbsp;Header type&nbsp;Latency timer&nbsp;Cache line size</span><br><span style="FONT-SIZE: 16px">Base address register 0</span><br><span style="FONT-SIZE: 16px">Base address register 1</span><br><span style="FONT-SIZE: 16px">Base address register 2</span><br><span style="FONT-SIZE: 16px">Base address register 3</span><br><span style="FONT-SIZE: 16px">Base address register 4</span><br><span style="FONT-SIZE: 16px">Base address register 5</span><br><span style="FONT-SIZE: 16px">Card bus CIS pointer</span><br><span style="FONT-SIZE: 16px">Subsystem ID&nbsp;Subsystem vendor ID</span><br><span style="FONT-SIZE: 16px">Expansion ROM base address</span><br><span style="FONT-SIZE: 16px">Reserved</span><br><span style="FONT-SIZE: 16px">Reserved</span><br><span style="FONT-SIZE: 16px">Max_lat&nbsp;Min_lat&nbsp;Interrupt pin&nbsp;Interrupt line</span><br><span style="FONT-SIZE: 16px">&nbsp;</span><br><span style="FONT-SIZE: 16px">Vendor ID register: 是一个用于唯一标识PCI设备生产厂商的数值。</span><br><span style="FONT-SIZE: 16px">Device ID register: 由厂商自己分配給產品的numbers， 该数值用于唯一标识一个特定设备。</span><br><span style="FONT-SIZE: 16px">Command register: 操作系统通过向这个域中写入命令来控制这个设备。</span><br><span style="FONT-SIZE: 16px">Status register: 顯示PCI設備的狀態。</span><br><span style="FONT-SIZE: 16px">Revision ID: 設備版本號</span><br><span style="FONT-SIZE: 16px">基地址寄存器：这些寄存器用于决定设备可以使用的PCI空间和存储空间的类型、大小，并指定它们的起始位置。</span><br><span style="FONT-SIZE: 16px">prog.I/F表示編程接口，一般為0；而VGA和IDE控制器有具体的意義。</span><br><span style="FONT-SIZE: 16px">&nbsp;IDE prog.I/F如下：</span><br><span style="FONT-SIZE: 16px">Bit0:操作模式(primary)</span><br><span style="FONT-SIZE: 16px">Bit1:可編程指示器(primary)</span><br><span style="FONT-SIZE: 16px">Bit2:操作模式(secondary)</span><br><span style="FONT-SIZE: 16px">Bit3:可編程指示器(secondary)</span><br><span style="FONT-SIZE: 16px">Bit6-4:保留</span><br><span style="FONT-SIZE: 16px">Bit 7:主控IDE設備</span><br><span style="FONT-SIZE: 16px">分类码: 设备的类别，具体分配如下：</span><br><span style="FONT-SIZE: 16px">00------PCI2.1類型定義以前的設備</span><br><span style="FONT-SIZE: 16px">01------塊存儲設備</span><br><span style="FONT-SIZE: 16px">子类号：</span><br><span style="FONT-SIZE: 16px">00：SCSI&nbsp; 控制器</span><br><span style="FONT-SIZE: 16px">01：IDE控制器</span><br><span style="FONT-SIZE: 16px">02：軟驅控制器</span><br><span style="FONT-SIZE: 16px">03：IPI控制器</span><br><span style="FONT-SIZE: 16px">04：RAID控制器</span><br><span style="FONT-SIZE: 16px">80：其他控制器</span><br><span style="FONT-SIZE: 16px">02------网絡控制器</span><br><span style="FONT-SIZE: 16px">03------顯示控制器</span><br><span style="FONT-SIZE: 16px">04------多媒体設備</span><br><span style="FONT-SIZE: 16px">05-------存儲控制器</span><br><span style="FONT-SIZE: 16px">06-------橋設備</span><br><span style="FONT-SIZE: 16px">07-------簡單通訊控制器</span><br><span style="FONT-SIZE: 16px">08-------基本系統外圍設備</span><br><span style="FONT-SIZE: 16px">09-------輸入設備</span><br><span style="FONT-SIZE: 16px">0A------大型工作站</span><br><span style="FONT-SIZE: 16px">0B------處理器</span><br><span style="FONT-SIZE: 16px">0C------串行總線控制器</span></p>
<p><span style="FONT-SIZE: 16px">2.2&nbsp;對配置空間的訪問。</span><br><span style="FONT-SIZE: 16px">對配置空間的訪問可以用BIOS CALL 和直接地址的訪問。</span></p>
<p><span style="FONT-SIZE: 16px">3.2.1 使用直接地址访问。</span><br><span style="FONT-SIZE: 16px">PCI使用两个固定的端口――0xCF8、0xCFC。0xCF8是配置端口，0xCFC是数据读写端口。通过对配置端口写指定的地址字（由总线号、设备号、功能号、寄存器号构成）， 然后对数据端口读写就可以对指定寄存器进行读写操作。</span><br><span style="FONT-SIZE: 16px">（补充说明：关于配置端口的地址字，PCI2.1規定两种机制：即配置机制1和配置机制2。配置机制2為向前兼容而定，在以后的橋路中不再支持。本文只讨论配置机制1。）</span><br><span style="FONT-SIZE: 16px">配置机制1规定的地址字格式如下：&nbsp;</span><br><span style="FONT-SIZE: 16px">Bit 31：允许地址空间映射（固定为1）</span><br><span style="FONT-SIZE: 16px">Bit 30-24：保留</span><br><span style="FONT-SIZE: 16px">Bit 23-16：总线号</span><br><span style="FONT-SIZE: 16px">Bit 15-11：设备号</span><br><span style="FONT-SIZE: 16px">Bit 10-8：功能号</span><br><span style="FONT-SIZE: 16px">Bit 7-2：寄存器号</span><br><span style="FONT-SIZE: 16px">Bit 1-0：固定为00</span></p>
<p><span style="FONT-SIZE: 16px">这样地址字的计算公式为：</span><br><span style="FONT-SIZE: 16px">DWORD addr = 0x80000000L | ((DWORD)(bus &amp; 0xFF) &lt;&lt; 16) |((device &amp; 0x1F) &lt;&lt; 11) | ((func &amp; 0x07) &lt;&lt; 8) |</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (reg &amp; 0xFC)</span><br><span style="FONT-SIZE: 16px">假如我们要读取配置空间的某个寄存器， 可以如下操作：</span><br><span style="FONT-SIZE: 16px">DWORD original_addr_value;</span><br><span style="FONT-SIZE: 16px">DWORD addr ＝ 0x88908F41; (根据需要设定)</span><br><span style="FONT-SIZE: 16px">DWORD data;</span><br><span style="FONT-SIZE: 16px">original_addr_value = inp(0xCF8) ;&nbsp; //保存原来的地址字</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;outpd(0xCF8,addr) ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><br><span style="FONT-SIZE: 16px">&nbsp; &nbsp;&nbsp;data = inpd(0xCFC) ;&nbsp;&nbsp;&nbsp;&nbsp;</span><br><span style="FONT-SIZE: 16px">&nbsp; &nbsp;outpd(0xCF8,orig) ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //恢复地址字</span></p>
<p><span style="FONT-SIZE: 16px">3.2.2&nbsp; 通过BIOS CALL访问配置空间。</span><br><span style="FONT-SIZE: 16px">可以使用BIOS中断的INT 1A来进行BIOS CALL。</span><br><span style="FONT-SIZE: 16px">PCI BIOS提供以下服務：</span><br><span style="FONT-SIZE: 16px">1.&nbsp;决定PCI芯片的配置机制。</span><br><span style="FONT-SIZE: 16px">2.&nbsp;决定芯片产生特殊周期的能力。</span><br><span style="FONT-SIZE: 16px">3.&nbsp;决定目前系统PCI总线的范围。</span><br><span style="FONT-SIZE: 16px">4.&nbsp;搜索PCI总线上的设备。</span><br><span style="FONT-SIZE: 16px">5.&nbsp;对中断进行分配。</span><br><span style="FONT-SIZE: 16px">6.&nbsp;读写配置寄存器。</span></p>
<p><span style="FONT-SIZE: 16px">2.3&nbsp;确定IDE控制器在PCI配置空间的位置。</span><br><span style="FONT-SIZE: 16px">根据PCI规定得知IDE控制器的分类号是0x01，子类号是0x01。我们只要遍历所有的PCI设备， 并读取该设备的分类号和子类号， 就可判断出该设备是否是IDE控制器。</span></p>
<p><span style="FONT-SIZE: 16px">2.4&nbsp;编程实现。</span><br><span style="FONT-SIZE: 16px">该函数调用BIOS中断确定当前系统有多少级PCI bus。</span><br><span style="FONT-SIZE: 16px">static int check_PCI_BIOS(){&nbsp;&nbsp;</span><br><span style="FONT-SIZE: 16px">union REGS regs ;</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;regs.x.ax = 0xB101 ;</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;int86(0x1A,&amp;regs,&amp;regs) ;</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;if (regs.h.ah == 0x00)</span><br><span style="FONT-SIZE: 16px">return regs.h.cl ;&nbsp;&nbsp;&nbsp; // last PCI bus in //system</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;else</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;return -1 ;&nbsp;// no PCI BIOS detected</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;}</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;成功返回值是该系统共有多少级PCI bus。这样做是为了省掉不必要的搜索，缩短搜索时间。下面的函数根据分类号和子类号搜索IDE控制器。</span><br><span style="FONT-SIZE: 16px">DWORD SearchPCIDevice(&nbsp;WORD class_code,</span><br><span style="FONT-SIZE: 16px">WORD sub_class_code，</span><br><span style="FONT-SIZE: 16px">WORD &amp; bus,</span><br><span style="FONT-SIZE: 16px">WORD &amp; unit,</span><br><span style="FONT-SIZE: 16px">WORD &amp; func)</span><br><span style="FONT-SIZE: 16px">{</span><br><span style="FONT-SIZE: 16px">&nbsp;PCIDeviceDescriptor pcidd;&nbsp;// 这是一个描述PCI配置头部的结构</span><br><span style="FONT-SIZE: 16px">int maxbus;</span><br><span style="FONT-SIZE: 16px">maxbus = check_PCI_BIOS() ;&nbsp; //首先调用BIOS中断确定PCI总线的范围。</span><br><span style="FONT-SIZE: 16px">&nbsp;if (maxbus &lt; 0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 调用失败</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;maxbus = 0xff ;&nbsp;&nbsp;// have to scan ALL possible buses&nbsp;</span><br><span style="FONT-SIZE: 16px">for(WORD i = 0;&nbsp; i &lt; maxbus;&nbsp; i++){&nbsp;&nbsp; &nbsp;&nbsp;</span><br><span style="FONT-SIZE: 16px">// 共有maxbus级PCI bus</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;for(WORD j = 0; j &lt; 32; j++) {</span><br><span style="FONT-SIZE: 16px">//每级PCI bus上最多有32个设备</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;for(WORD k = 0; k &lt; 8; k++){</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//每个设备最多有8个功能号</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;ReadPCIDeviceDescriptor(pcidd, i, j, k);</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读取当前指定的设备配置头，</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结果保存在pcidd中</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;if((pcidd.m_ClassCode == class_code) &amp;&amp; (pcidd.m_SubClassCode == sub_class_code))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //判断分类号、子类号</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;{</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bus = i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将设备所在的bus号</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unit = j;&nbsp; //设备号</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;func = k;&nbsp; //功能号通知应用程序</span><br><span style="FONT-SIZE: 16px">return 1;&nbsp;&nbsp;&nbsp; &nbsp;//设备存在返回1</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;&nbsp;}</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;}</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;}</span><br><span style="FONT-SIZE: 16px">&nbsp;}</span><br><span style="FONT-SIZE: 16px">&nbsp;return 0;&nbsp;&nbsp;&nbsp;//设备不存在</span><br><span style="FONT-SIZE: 16px">}</span></p>
<p><span style="FONT-SIZE: 16px">&nbsp;如果函数返回成功， 我们就得到了IDE控制器的bus号、设备号、功能号，下一步就通过读取它的配置头获得它所占用的起始端口号。</span><br><span style="FONT-SIZE: 16px">&nbsp;pci.ReadPCIDeviceDescriptor(pdd, bus, unit, func);</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;tmp = pdd.m_BaseAddress[0];&nbsp;&nbsp;&nbsp; //IDE 0的起始端口</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;if(tmp &amp; 1)</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;{</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;tmp&amp;= 0xfffe;&nbsp;&nbsp;&nbsp;</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;g_wPriIDEBase = tmp;</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;}</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;tmp = pdd.m_BaseAddress[2];&nbsp;&nbsp;&nbsp; //IDE 1的起始端口</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;if(tmp &amp; 1)</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;{</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;tmp&amp;= 0xfffe;</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;&nbsp;g_wSecIDEBase = tmp;</span><br><span style="FONT-SIZE: 16px">&nbsp;&nbsp;}</span></p>
<p><span style="FONT-SIZE: 16px">3&nbsp;Summary</span><br><span style="FONT-SIZE: 16px">本文提供了一种获取PCI设备信息的通用方法，不仅适用于IDE控制器， 其他比如PCI声卡、PCMCIA、PCI显卡等都可用此方法确定端口地址。</span></p>
<p><span style="FONT-SIZE: 16px">4&nbsp;Reference</span><br><span style="FONT-SIZE: 16px">《PCI Local Bus Specification》</span><br></p></span> <a href="http://hi.baidu.com/weolar/blog/item/04f31ed843289c2732fa1c46.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/04f31ed843289c2732fa1c46.html#comment">查看评论</a>]]></description>
        <pubDate>2010-12-28  00:07</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/04f31ed843289c2732fa1c46.html</guid>
</item>

<item>
        <title><![CDATA[牛逼顿的一生……]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/b22ad239fe1da8fc3b87ce42.html]]></link>
        <description><![CDATA[
		
		<span class="Apple-style-span" style="word-spacing: 0px; font: medium Simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="font-size: 17px; color: rgb(51,51,51); line-height: 21px; ">
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span class="Apple-converted-space"> </span>3月28号是牛顿的忌日，但是知道的人很少，我们毕竟更关心沈殿霞和张国荣。其实牛顿老师在科学圈里曾经很有权势，被女王封了爵位成了贵族，人称牛爵爷，官至皇家造币局局长兼皇家学会会长。如果阿尔伯特没有辞了以色列总统的话和他有一拼。</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"> </p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  说他有权势并不仅是官大，主要是贡献大。如果17世纪就有诺贝尔奖的话，牛顿老师至少能连续垄断4届物理学奖（分光计；力学体系的构建；反射望远镜；万有引力），同时为了表彰他在炼金方面的造诣，再奉送他一届化学奖。而且这孙子鼓捣出了流数术，所以菲尔兹数学奖也要给他。要知道，他的这些发现基本都是在26岁以前获得的，30岁以后牛顿就开始玩票了，成天琢磨上帝和炼金，以及怎样把莱布尼茨搞臭，捎带手的把以前的发现整理成书。所以你能想象到他在当时的欧洲是如何的一呼万应，敢跟他叫板的只有莱布尼茨和大主教贝克莱。牛老师死的时候，全英国的名流以给他扶柩为荣，全欧洲的名流蜂拥伦敦。来自法国的傻逼文科生伏尔泰在国葬现场大受刺激，回去就写了首诗，嫉妒之情溢于言表。</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"> </p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;  牛顿老师的一生是天才的一生，战斗的一生，也是孤独的一生。一辈子没有朋友，也没有结过婚，很可能到死都是处男，关于牛顿是否处男的问题，由于篇幅过长，我将在另一篇文中论证。当然他肯定不会孤独，因为科学的世界里乐趣无限，快感连连。出乎世俗想象的是，科学其实远比任何娘们儿都风骚，玩科学比玩女人爽得多，得到一个成果所获得的高潮强烈而持久，不仅有快感，更有巨大的自我认同感，远胜于那几秒寒颤之后无边的空虚与落寞。所以陈景润其实是沉溺于美色不能自拔，身体弱架不住高潮过度被爽死了。</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"> </p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  牛顿老师茕茕孑立，形影相吊的原因是多方面的。首先他生性孤傲，自恃高才，瞅谁都是傻逼，当然不会真心跟傻逼交朋友。同时在他眼里人是不分男女的，只有傻逼和巨傻逼两种，所以他对女色没兴趣也就可以理解了。有婚介中心给他介绍过几个名媛，拾掇拾掇都是当王妃的坯子，但一见面就受不了牛顿的牛逼烘烘和不知所云。比如有次相亲，他把姑娘的手指头塞进了烟斗。</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"> </p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  另一方面是外在的，不光他不愿意交朋友，也没有人真正想跟牛顿当朋友，结交他的人都是有目的的。人们对他只有敬畏和仰慕，并不真的喜欢他。这道理其实很浅显，绝大部分人都热衷于跟比自己傻的人待着，很少有人愿意在人精的身边衬托自己的二逼。所以好多人都喜欢小动物和小孩子，就是因为这些东西够傻。不少姑娘一见到小猫小狗小人儿都会迫不及待的搂抱，接踵而至的就是很嗲的说好可爱欧~，听得我阴毛都竖起来了。有时候可爱和憨态可掬的潜台词就是弱智。小猴子也很好玩，喜欢的人就少多了，因为猴子机灵到能戏弄人，那些人没有驾驭猴子的自信。同理，喜欢小孩的都是喜欢他们的单纯与缺心眼，在他们眼里，小孩跟小动物没有本质区别，也都是四条腿走路，露着屁眼随时拉撒。如果遇到一个小天才，3岁就会心算三位数乘法或者知道傻逼二字的正确写法，她们一定会骇破了胆。所以那些喜欢养猫狗的女士们别再标榜自己有爱心了，你们其实比谁都缺德。我从不喜欢猫狗，这是因为我敬畏大自然的生灵而不忍戏弄它们；我也不喜欢小孩，因为我把他们当作一个大写的人而不是小畜生看待。</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"> </p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  大家不喜欢牛顿的另一个原因是他性格暴戾乖张。长年在他身边的人回忆说，牛顿在人前只笑过两回，其中一次还是嘲笑：有人问他，欧几里得的《几何原本》那么老朽，不知道还有什么价值。牛顿闻听放声大笑。而且他人品太差，跟谁都打架。众所周知他从小就有校园暴力的记录，胖子同学不小心踩了他的风车，他抬手就把胖子打哭了，我们的教科书居然说这是他有志气的表现。长大了不以拳脚论高下，他就雇用枪手大骂莱布尼茨，甚至不惜化名亲自去骂，人品至此真是无以复加。莱布尼茨若不是脸皮厚早就跟纳什一样疯了，而且牛顿老师肯定会拍个片子叫《丑陋心灵》继续恶心人家。</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  关于牛顿的另一个谎言是他的谦虚，证据就是牛顿老师说过两段著名的话，一段是站在巨人肩膀上，另一段是海边捡石头子。这确实很有迷惑性，我第一次听到后感动的直冒鼻涕泡。但任何话语都是有语境的，巨人肩膀那一句的语境是这样的：胡克其实早就发现了万有引力定律并推导出了正确的公式，但由于数学不好，他只能勉强解释行星绕日的圆周运动，而且他没有认识到支配天体运行的力量其实是普遍存在的，是&ldquo;万有&rdquo;的。第谷早在100年前就发现了行星的公转其实是椭圆运动，开普勒甚至提出了行星运动三定律。所以科学界对胡克的成果不太重视。后来数学小狂人牛顿用微积分极其圆满的解决了这个问题并把他提出的力学三条基本定律成功推广到了星系空间，改变了自从亚里士多德以来公认的天地不一的旧观点，被科学界奉为伟大的发现。于是胡克大怒，指责牛顿剽窃了自己的成果。牛顿尖酸刻薄的回敬道：是啊，我他妈还真是站在巨人的肩膀上呢！这本是一句反语，至少不是真的想客气一下。几百年后罗永浩说自己只是站在巨人的肩膀上也是这意思。但后人出于塑造完人的目的，只保留了孤立的原话而去掉了语境，变成了一句彻头彻尾的谦辞。同样的情况出现在另一段话上：牛顿晚年因为树敌过多，来自欧洲大陆比如法德的一些新锐科学家质问他：&ldquo;牛顿你丫牛逼什么啊？&rdquo;牛顿此时完全的展现了他科学界大宗师的风度与水平，潇洒的回敬道：&ldquo;我没有什么牛逼的。我只是一个在海边独自玩耍的小孩，偶尔会为捡到几个美丽的贝壳而欣喜若狂，却对面前浩瀚的真理大海无所察觉。&rdquo;意思是说你们他妈的连贝壳都看不见有什么资格评价我？几十年的官场毕竟不是白混的，牛老师甩片儿汤话的水平已经到了信手拈来闲庭信步宠辱不惊的境界，所以我们只记住了这一段优美至极、深邃如同诗歌的话语。</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"> </p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  牛顿老师人品差，不谦虚，没朋友，按现在的说法这是典型的高智商低情商，事业不会成功。但我们也发现，当智商高到一定程度的时候是可以取代情商的。所以那些说自己情商低的所谓天才们，你们没成功只是他妈的还不够聪明而已，怨不着人家情商。要知道牛顿是个遗腹子和早产儿，出生时体重不到5斤，没吃过DHA和RHA配方的奶粉。亲娘改嫁后跟文盲姥姥度过无聊的童年，没有任何的早期智力开发和学前启蒙，7岁上学以前脑子里空空如也，牛妈妈对他的期望仅仅是认识点字然后回家务农。但是牛顿上中学后已经熟练掌握了拉丁语希腊语西班牙语和英语，然后被推荐进了剑桥，20出头就当了卢卡斯教席的终身教授。如果他能活到今天，我一定会请他当熊博网的形象代言人兼吉祥物。</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"> </p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;  晚年的牛顿除了升官发财再无其他骄傲之处，而且官迷心窍，没退休一直干到85岁寿终。当然他并没闲着，写了150万字的神学著作，同时一心扑在化学事业上，在家里盖了窑子，拿出年轻时搞物理的劲头玩命试验。但这次他的出发点就错了，总是希望从黄铜和煤渣中提炼出黄金。要知道化学反应只能改变分子并不能改变原子，能给原子做变性手术的只能是核反应。他违背了化学定律里的物质不灭原则，所以虾米了。</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"> </p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;  最后，说两段悼词。一段是他的墓志铭：伊萨克牛顿爵士，安葬在这里。他以超乎常人的智力，第一个证明了行星的运动与形状；彗星轨道与海洋的潮汐。他孜孜不倦地研究，光线的各种不同的折射角，颜色所产生的种种性质。让人类欢呼，曾经存在过这样一位，伟大的人类之光。</span><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">另一段是英国诗人写的：自然和自然的规律隐藏在茫茫黑夜之中。上帝说：让牛顿降生吧。于是一片光明。</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"> </p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;</span></p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"> </p>
<p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px 0px 0.8em; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; font-size: small; padding-bottom: 0px; margin: 0px; padding-top: 0px">&nbsp;&nbsp;&nbsp;&nbsp;  不知道为什么，一想到这里，我总是有点感动。</span></p>
</span></span> <a href="http://hi.baidu.com/weolar/blog/item/b22ad239fe1da8fc3b87ce42.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/b22ad239fe1da8fc3b87ce42.html#comment">查看评论</a>]]></description>
        <pubDate>2010-10-24  16:05</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/b22ad239fe1da8fc3b87ce42.html</guid>
</item>

<item>
        <title><![CDATA[大话量子力学[转]]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/f774ae778d396016b151b957.html]]></link>
        <description><![CDATA[
		
		<p>大话量子力学&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  一</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  故事发生在二十世纪初的法国。</p>
<p>&nbsp;&nbsp;  巴黎。</p>
<p>&nbsp;&nbsp;  一样延续着千百年的灯红酒绿，香榭丽舍大道上散发着繁华和暧昧，红磨坊里弥漫着躁动与彷徨。</p>
<p>&nbsp;&nbsp;  路上走着一个年轻人，名叫德布罗意（De Broglie）。在当时，这名字屌得就跟你说你姓爱新觉罗一样。事实上德布罗意的爸正是法国的一个伯爵奸内阁部长，德布罗意正是一个典型的富二代。</p>
<p>&nbsp;&nbsp;  这样一个不愁吃穿不愁房只是成天愁着如何打发时光的纨绔子弟自然要找一个能消耗精力的东西来度过那些寂寞的日子。这一点至今未变。</p>
<p>&nbsp;&nbsp;  而他选择了……研究中世纪欧洲史， 据说这倒也不仅是为了装B&mdash;&mdash;中世纪史中有着很多神奇的东西吸引着他，据说。</p>
<p>&nbsp;&nbsp;  时间转眼到了１９１９，这个科学界骚动的年代。</p>
<p>&nbsp;&nbsp;  比如， 就在这一年，德布罗意突然萌生了转系的念头。他发现，原来物理学中有着更多神奇的东西吸引着他，尤其是感兴趣于当时正流行的：</p>
<p>&nbsp;&nbsp;  量子论。</p>
<p><br>
&nbsp;&nbsp;  简言之，他就是迷恋于当时一个很潮的观点：光是粒子。 <br>
&nbsp;&nbsp;  按说这本该不值个烂钱，因为几百年前一个大牛牛顿就曰过：光是粒子。不过后来这个观点被菲涅尔、泊松一群做光学的搞得很久不流行了。几百年来，科学界正统的观点是：光是波。十几年前的一天，某君普朗克突然说：原来光还是粒子啊~~！大家本来不想鸟他，结果爱因斯坦用他的理论做着做着就做出了光电效应！这本来是物理学里的一朵乌云，现在突然没了，于是学界就哗然了。 <br>
&nbsp;&nbsp;  当年的德布罗意倒并不见得对这一观点的物理思想有多么深刻的见地，按他的理解，光是粒子就是在说原来牛顿是对的我们被后人忽悠了。</p>
<p>&nbsp;&nbsp;  或许一时冲动，年轻人告别了中世纪欧洲史，告别了奢侈糜烂的生活，来到了一派宗师朗之万门下，说：请您收我念PhD吧。</p>
<p> </p>
<p>&nbsp;&nbsp;  二</p>
<p><br>
&nbsp;&nbsp;  历史上，郎之万为什么给德布罗意offer已经很难说清，德布罗意到底花了多少精力去读他的PhD也已经很难说清。 白驹过隙，五年说过就过了。作为历史系中世纪欧洲史专业的德布罗意，发现转到物理系以后的确力不从心。</p>
<p>&nbsp;&nbsp;  当下，很现实的问题就是如何搞定那篇令他蛋疼的毕业论文，算是对青春一个交代。</p>
<p>&nbsp;&nbsp;  这个问题让他辗转反侧很多年。毕不了业，烦！ 德布罗意只听爱因斯坦那帮家伙一直念什么光是粒子还是波……普朗克早不念了，他不坚定，已经完全抛弃自己当初的量子假设，转回去做经典了。波呢，还是粒子？粒子呢，还是波？还是是粒子又是波呢？毕不了业啊，烦！</p>
<p>&nbsp;&nbsp;  纠结五年终于过去了。抓住１９２４的尾巴，德布罗意终于提交了自己的博士论文。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  不计封面，论文只有一页之多一行。遥想在那个没有枪手、没有万方的时代，这已经是不容易了。</p>
<p>&nbsp;&nbsp;  他的一页纸的论文反复而执着地论述粒子是波波是粒子，说来说去就一句话：既然波可以是粒子，那么粒子未必不能是波。光既然可以既是粒子又是波，别的粒子干嘛不行？</p>
<p>&nbsp;&nbsp;  波的波矢和角频率与粒子动量和能量的关系是：</p>
<p>p=h/(2*pi*k), E=hv</p>
<p>&nbsp;&nbsp;  这是他的论文里出现的唯一两个公式，其他主要是议论和感想。</p>
<p>&nbsp;&nbsp;  其实，就这两个公式也是从爱因斯坦发表于1905年那篇《光电效应》中借用而来的。</p>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp;  很难想象这样一篇博士论文是怎样通过答辩的。</p>
<p>&nbsp;&nbsp;  正式表决之前，德布罗意的老板也就是朗之万得知，论文评审委员会的六位教授中的三位表示一定会投反对票。</p>
<p>&nbsp;&nbsp;  本来在欧洲，一个学生苦读数年都那不到学位是很正常的事情，更别说一个来混日子的的花花公子。这一点也至今未变。</p>
<p>&nbsp;&nbsp;  然而，偏偏德布罗意的父亲又是一位权高望众的内阁部长。名门之下，德公子寒窗五年，最后连一个Ph.D都没拿到，双方岂不都很没面子？</p>
<p>&nbsp;&nbsp;  情急之中，朗之万往他的一个好朋友那里寄了一封信。</p>
<p>&nbsp;&nbsp;  也许当初的朗之万只是碍于情面想帮德布罗意混得一个PhD，然而事实上，这一封信却改变了科学史。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  三</p>
<p><br>
&nbsp;&nbsp;  这封信的收信人是爱因斯坦。 </p>
<p>&nbsp;&nbsp;  信的内容大致如下：</p>
<p>&nbsp;&nbsp;  尊敬的爱因斯坦阁下：</p>
<p>&nbsp;&nbsp;&nbsp;  在我这里有一位研究生，已经攻读了五年的博士学位，如今即将毕业。给你看他的毕业论文！当中有一些想法……我觉得很新鲜……</p>
<p>&nbsp;&nbsp;  ……请问您怎么看？</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  另，该研究生的父亲是弊国的伯爵，内阁的**部长……</p>
<p>&nbsp;&nbsp;  若您……将来您来法国一定会受到最隆重的接待！</p>
<p>&nbsp;&nbsp;  朗之万</p>
<p><br>
&nbsp;&nbsp;  就是说，如果您不肯给个面子，以后就甭来法国了。</p>
<p>&nbsp;&nbsp;  不知爱因斯坦是出于知趣呢，还是出于因为自己当年的离经叛道产生的惺惺相惜，对着这满篇色即是空空即是色一样的文字盯了半天，他很客气回了一封信，大意是说：It is interesting.</p>
<p><br>
&nbsp;&nbsp;  在英语里，interesting一般用于描述一种想说它好却说不出怎么好所以不知怎么说才好的微妙状态。此时的爱因斯坦已颇有威望，既然他都说interesting了，评审委员们也就心领神会了。</p>
<p><br>
&nbsp;&nbsp;  终于，化险为夷。</p>
<p>&nbsp;&nbsp;  浪荡子弟德布罗意就这样拿到PhD，回去炫耀去了。</p>
<p>&nbsp;&nbsp;  按照当时欧洲的学术传统，朗之万需要将德布罗意的博士论文分寄到了欧洲各大学物理系。</p>
<p>&nbsp;&nbsp;  几乎所有人都以为事情会就此了结，以为德布罗意那篇&ldquo;很有趣&rdquo;的博士论文在档案堆里从此埋没。</p>
<p>&nbsp;&nbsp;  然而历史总喜欢以不确定性原理来开玩笑。而这个玩笑顺带着改变了许多人的命运。</p>
<p>&nbsp;&nbsp;  在朗之万寄出的博士论文中，有一份来到了维也纳大学。</p>
<p> </p>
<p><br>
&nbsp;&nbsp;  四</p>
<p>&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;  1926年春， 维也纳。</p>
<p>&nbsp;&nbsp;&nbsp;  当时在维也纳大学物理系老大是德拜，他收到这份博士论文后，把它交给了他的组里面一位已经年届不惑的老讲师，说：回去看了下次组会讲下。</p>
<p>&nbsp;&nbsp;  想一想，一大把年纪了还在讲台上晃荡，其学术生涯多么朦胧而惨淡。德拜将任务交给他时说：</p>
<p>&nbsp;&nbsp;  &ldquo;你现在研究的问题不重要，不如给我们讲讲德布罗意的论文吧。&rdquo;</p>
<p>&nbsp;&nbsp;  这位讲师的名字叫做：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  薛定谔</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  在接下来的两周里，薛定谔仔细的读了一下德布罗意的&ldquo;博士论文&rdquo;，其实从内容上来讲根本就用不上&ldquo;仔细&rdquo;二字，薛定谔的这篇论文只不过一页之多一点，公式也不过就两个而已，并且是已经在爱因斯坦发表的论文中出现过的。</p>
<p>&nbsp;&nbsp;  然而论文里说的话却让薛定谔一头雾水，薛定谔只知道德布罗意大讲了一通&ldquo;波即粒子，粒子即波&rdquo;，除此之外则是两个黄鹂鸣翠柳&mdash;&mdash;不知所云。</p>
<p>&nbsp;&nbsp;  两周之后，薛定谔硬着头皮把这篇论文的内容在seminar上讲了一下，讲完之后，听这也是云里雾里，而老板德拜则做了一个客气的评价：</p>
<p>&nbsp;&nbsp;  &ldquo;这个年轻人的观点还是有些新颖之处的，虽然显得很孩子气，当然也许他需要更深入一步，比如既然提到波的概念，那么总该有一个波动方程吧！&rdquo; <br>
&nbsp;&nbsp;  多年以后，有人问及德拜是否后悔自己当初作出了这一评论，而没有自己埋头深入，德拜自我解嘲的说：</p>
<p>&nbsp;&nbsp;  &ldquo;你不觉得这是一个很好的评论吗？&rdquo; <br>
德拜建议薛定谔做一做这个工作，两周以后seminar的时候再讲一下。</p>
<p><br>
&nbsp;&nbsp;  仅仅两周，世界为之一变。</p>
<p>&nbsp;&nbsp;  薛定谔再次出现在seminar上讲解德布罗意的论文的时候，他宣布，他为德布罗意的&ldquo;波&rdquo;找 了这样一个方程。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  这个方程就是&ldquo;薛定谔方程&rdquo;！</p>
<p>&nbsp;&nbsp;  当然，在薛定谔方程诞生之初，没人真正把这给德布罗意的&ldquo;波&rdquo;生搬硬套上的方程当回事。常识是：德布罗意的那篇论文已经是学界公认的垃圾了，而从垃圾里翻出来的自然如同垃圾。当时还有一首打油诗讽刺薛定谔和他的方程：</p>
<p>欧文的psi，算来真灵通；</p>
<p>psi是个啥，没人看得懂。</p>
<p> </p>
<p>&nbsp;&nbsp;&nbsp;  psi是薛定谔方程中的波动变量，欧文是薛定谔的名字。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  &ldquo;这货不至于是个鸡肋吧！&rdquo;他想。</p>
<p>&nbsp;&nbsp;  薛定谔的故事似乎要再一次陷入平庸，然而平庸往往是正酝酿奇迹的缘由，只因人对平庸的不甘。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  五</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  如果把上世纪初的物理学比作一潭湖水，前面的故事都好比湖水深处的动乱&mdash;&mdash;湖的表面却是风平浪静。</p>
<p>&nbsp;&nbsp;  纵观两年以来的物理学界：哥本哈根已然成为量子理论界的&ldquo;屠龙&rdquo;&mdash;&mdash;普朗克和爱因斯坦理论的启发下，哥本哈根学派掌门人一代宗师玻尔提出了著名的&ldquo;三大核心原理&rdquo;，成功解释氢光谱。1925年，玻尔的得意大弟子海森堡进一步提出了描述氢原子轨道的理论。那个年代，没有线代，没有数学物理方法，精通数学的物理学家本来屈指可数，就连数学很强的海森堡本人也并未必知道同时代那些数学家在搞什么飞机。在他的理论出炉之后，学弟玻恩悄悄地告诉海森堡大师兄你用的东西在数学里叫：矩阵。</p>
<p>&nbsp;&nbsp;  于是，矩阵力学走上了历史的舞台。</p>
<p>&nbsp;&nbsp;  天下大变，仅一步之遥。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  此时的薛老师正带着他的情妇在阿尔卑斯山滑雪。</p>
<p>&nbsp;&nbsp;  不知是大自然的唯美风景还是身边的温香软玉，冥冥之某种存在，给予薛定谔灵感。在&ldquo;那两周&rdquo;的最后几天里：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  他从方程中得出玻尔的氢原子的解！</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  六</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  倚天一出，四海皆惊。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  （字数不够，见评论……）</p>
<p> </p>
<p>没人再敢把薛定谔的方程当扯淡了。</p>
<p>哥本哈根学派的掌门玻尔大为惊骇，急信至维也纳把薛定谔邀请到哥本哈根，切磋量子之精妙。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  然而让玻尔遗憾的是，&ldquo;切磋&rdquo;了十天，不知因哥本哈根那帮子哥们儿的数学太强了还是薛定谔的数学太挫了，反正两个人根本不知道对方在说什么。在一场令人疲惫不堪又毫无结果的&ldquo;哥本哈根论剑&rdquo;之后，波尔悻悻地目送薛定谔回到维也纳。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  薛定谔坚持努力工作，不久，矩阵力学和他的波动方程在数学上被证明等价。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  &ldquo;倚天&rdquo;&ldquo;屠龙&rdquo;，合铸为一。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  在此之后，薛定谔不断试图从更基本的原理和假设出发导出更基本的方程，但始终没有成功。不久他终于对这一切失去了耐性：他也转系了，去研究&ldquo;生命是什么&rdquo;。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  历史继续着它的历史剧，不懂数学的德布罗意和薛定谔秒杀了那一年的诺奖，成为了闹剧中的主角。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  按这故事的尿性，该是尾声了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  在这一让人啼笑皆非的历史中，上帝还是保留了某种程度的公正。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  薛定谔得出它的波动方程仅在海森堡的矩阵力学的的诞生一年之后，倘若上帝把这个玩笑开得更大一点，让薛定谔在1925年之前就导出薛定谔方程，那恐怕矩阵力学就根本不可能诞生了。（波动方程也就是偏微分方程的理论是为大多数物理学家所熟悉的，而矩阵在当时则几乎没人能懂。）如此则此前在量子领域辛苦奋斗了十几年的哥本哈根学派就真要集体吐血、暴毙而亡了！</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  薛定谔方程搞出了薛定谔方程，却到死都没有真正理解这个方程微妙，而对方程的解释也是错误的&mdash;&mdash;正解为哥本哈根学派的玻恩作出。玻恩的解释让物理学界另一位大师&mdash;&mdash;爱因斯坦极为震怒，他至死念念不忘&ldquo;上帝是不掷筛子的&rdquo;，此为后话。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  而更为基本的物理，薛定谔试图获得而无力企及，则是有根本哈根学派的另一位少壮派弟子&mdash;&mdash;狄拉克做出的。狄拉克领袖群伦，同克莱默、约尔当，也包括后来的魏扎克和伽莫夫、朗道等几代物理学家的努力，不断对理论进行修缮，最终确立了量子论的正统解释，史称&ldquo;哥本哈根解释&rdquo;。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  量子力学的殿堂终于建立起来。</p>
<p> </p>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  作者：chamb 回复日期：2003-10-25 18:17:18</p>
<p> </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  申明：这篇文章的大部分情节均来自于我的量子力学的老师田光善教授的讲课</p>
<p> </p> <a href="http://hi.baidu.com/weolar/blog/item/f774ae778d396016b151b957.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/f774ae778d396016b151b957.html#comment">查看评论</a>]]></description>
        <pubDate>2010-08-04  19:31</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/f774ae778d396016b151b957.html</guid>
</item>

<item>
        <title><![CDATA[[紧急]吾爱破解管理员A-new(牛牧原)突发疾病,希望大家伸出援助之手!]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/d102b5fb43aadb2f4e4aeaa7.html]]></link>
        <description><![CDATA[
		
		<font size="4"><font color="#ff0000"><strong>
捐款卡号:

建行卡号:6227 0030 9016 0127461
姓名:宋连轻
开行地址:珠海市分行香洲支行 

卡号来自牛牧原的妈妈,大家以后捐助请直接汇入上面的卡号里,吾爱破解论坛不再做中转了,感谢大家,之前截至到28日的所有捐款详细信息晚上我会整理出来更新到下面的帖子里.

所有捐款人和金额都会在帖子后面显示出来,捐款后可以前来查看:http://www.52pojie.net/thread-53986-1-1.html 

下面是来自金山的朋友提供的消息,A-new就是文中所说的牛牧原,正是吾爱破解论坛的创始人之一,我们都叫他A哥,硕士刚毕业的A哥刚入职金山不久,由于突发脑出血，需要很大一笔钱做手术。中午收到消息就赶紧给牛牧原的妈妈打去了电话询问情况,现在刚做完一次手术,现在还在深度昏迷中,希望论坛的各位朋友能够伸出援助之手,有钱的捐钱,没钱的祈福,帮A-new度过难关,好人一生平安</strong>。<br>
<br>
</font></font><font size="4"><font color="#ff0000">目前论坛组织募捐资金,所有捐的的钱将转交给Squn和roxiel,他们将前往医院转交给牛牧原的妈妈,并带去我们最真挚的祝福,希望他能早日康复!<br>
<br>
</font><font color="#2e8b57"><strong>所有捐款的朋友请留下自己的论坛ID和说明,事后我们将用论坛的小小荣誉回馈大家,再次感谢各位朋友,好人一生平安!</strong></font></font><br>
<br>
<br>
<font color="#0000ff"><strong>捐款卡号:</strong></font><br>
<br>
<div class="quote"><blockquote>工商银行卡号:9558 8203 0200 3958911 姓名:徐超 开行地址:天津工行唐家口支行<br>
<br>
支付宝帐号:68857640@qq.com &nbsp;&nbsp;&nbsp;    姓名:邱枫</blockquote></div>
<font color="#0000ff">工行卡来自论坛ximo,支付宝来自Hmily,所有捐款由我们代收,然后转交给牛妈妈,所有捐款人和金额都会在帖子后面显示出来,捐款后可以前来查看:http://www.52pojie.net/thread-53986-1-1.html</font><br>
<br>
<div class="quote"><blockquote><font color="#ff0000">牛牧原，7月6日来珠海金山KIS报到工作的小伙子，研究生毕业，聪明优秀，拥有着美好的前程。<br>
<br>
昨天上午，牛牧原在宿舍突发脑出血，经120急救中心送往中医院紧急抢救，中午12点，医生开具&ldquo;病危通知书&rdquo;，并要求转至珠海市人民医院神经外科。晚10:40分，进行脑手术，经确认，为脑血管动脉瘤，因天生细胞壁比较薄，导致爆裂出血。今天凌晨4:15分手术完成，直接进入ICU观察室。</font><br>
<br>
从进入医院的那一刻起，这个小伙子牧原就一直保持着非常强的求生意识，医生通知我们，每隔一个小时就唤醒他一次，以防他的病情有进一步恶化的可能，每一次呼唤，他都用尽全力的在应着我们。八点多的时候，当我们照常呼唤牧原，他没有醒来。从河南平顶山老家一路奔波赶来的父母，在手术前，没有听到儿子的呼唤。<br>
<br>
昨天深夜，牛妈妈在哭泣的时候，牛爸爸一直保持着平稳的情绪，他知道，他是一家之主，只是有些无奈的说，没想到，我这辈子第一次坐飞机，是因为这个，哪曾想过啊？！<br>
<br>
牧原刚来公司，社保和商业保险要到八月才生效，就是在这个时候，遇到了这场对他一家人来说最大的灾难。<br>
<br>
我忘不了牛妈妈的那句话，我们已经打电话回老家准备卖房子了，可是这么急，亲戚说一时也找不到人买，然后声音就被哭泣淹没......<br>
<br>
我更忘不了牛爸爸别过身子无声抽泣的样子，这个一辈子没读过什么书的老人，养出了一个博士、一个研究生、一个本科生三个优秀的儿子，他一辈子不求人，靠自己的努力养活孩子读书，却在听到我说，要组织同事捐款的瞬间，抽泣起来！<br>
<br>
本来，这一对老人，将迎来人生中最幸福的晚年，大儿子博士毕业，牧原放弃了在读的博一，也找到了自己喜欢的工作，老三本科毕业，也刚刚在北京找到一家不错的工作。可是就是这突发的病，医生说全部手术费用要二十几万，现在每天ICU重症监护的费用是4000元/天。这对于含辛茹苦供养孩子读书的家庭，是怎样一个负担？！<br>
<br>
我找出牧原刚入职时候的照片，那个鲜活帅气的小伙子和昨天我见到的、剃光了头发的，病床上的他，判若两人。我想，金山是个有爱的大家庭，那个也许你还不熟悉的小伙子--我们的同事牛牧原，需要你的帮助，也许我们每个人只需要付出一百元，那一千人的力量就是十万元！而这份爱的力量，将超越物质金钱的意义，带给牧原和他家人莫大的帮助！</blockquote></div>
<br>
<br>
<br>
<p style="text-align: center; line-height: 30px; text-indent: 2em"><span style="position: absolute; display: none" onxxxxxxxxx="showMenu({&amp;apos;amp;apos;#39;ctrlid&amp;apos;amp;apos;#39;:this.id,&amp;apos;amp;apos;#39;pos&amp;apos;amp;apos;#39;:&amp;apos;amp;apos;#39;13&amp;apos;amp;apos;#39;})"><img border="0" src="http://www.52pojie.cn/images/dst/attachimg.gif"></span> <img alt="3.jpg" width="453" unselectable="true" outfunc="null" initialized="true" file="attachments/month_1007/10072615523343f3034f366e7f.jpg" status="2" src="http://www.52pojie.cn/attachments/month_1007/10072615523343f3034f366e7f.jpg"></p>
<div style="z-index: 301; position: absolute; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); display: none; top: 1235px; left: 449px; opacity: 1" class="t_attach" initialized="true" cache="1" fade="false" cover="0" layer="1" mtype="menu" ctrlkey="aimg_37466"><a title="3.jpg" target="_blank" href="http://www.52pojie.cn/attachment.php?aid=Mzc0NjZ8Mjg2MjMyYjV8MTI4MDEzNjc1M3xjOGE5aHNjd01qb05sTzVvck5vZlE0WitYaWlWSzhsamMzbGxaQkpGN0Qwak9nRQ%3D%3D&amp;nothumb=yes"><strong>下载</strong></a> (61.7 KB)<br>
<div class="t_smallfont">2010-7-26 15:52</div>
</div>
<p> </p>
<br>
<p style="text-align: center; line-height: 30px; text-indent: 2em"><span style="position: absolute; display: none" onxxxxxxxxx="showMenu({&amp;apos;amp;apos;#39;ctrlid&amp;apos;amp;apos;#39;:this.id,&amp;apos;amp;apos;#39;pos&amp;apos;amp;apos;#39;:&amp;apos;amp;apos;#39;13&amp;apos;amp;apos;#39;})"><img border="0" src="http://www.52pojie.cn/images/dst/attachimg.gif"></span> <img alt="1.jpg" width="278" unselectable="true" outfunc="null" initialized="true" file="attachments/month_1007/10072615464d73c5ba7b29be1d.jpg" status="2" src="http://www.52pojie.cn/attachments/month_1007/10072615464d73c5ba7b29be1d.jpg"></p>
<div style="z-index: 301; position: absolute; filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100); display: none; top: 1676px; left: 537px; opacity: 1" class="t_attach" initialized="true" cache="1" fade="false" cover="0" layer="1" mtype="menu" ctrlkey="aimg_37464"><a title="1.jpg" target="_blank" href="http://www.52pojie.cn/attachment.php?aid=Mzc0NjR8ZjI3YjIxZjh8MTI4MDEzNjc1M3xjOGE5aHNjd01qb05sTzVvck5vZlE0WitYaWlWSzhsamMzbGxaQkpGN0Qwak9nRQ%3D%3D&amp;nothumb=yes"><strong>下载</strong></a> (23.85 KB)<br>
<div class="t_smallfont">2010-7-26 15:46</div>
</div>
<p> </p>
<br>
<p style="text-align: center; line-height: 30px; text-indent: 2em"><span style="position: absolute; display: none" onxxxxxxxxx="showMenu({&amp;apos;amp;apos;#39;ctrlid&amp;apos;amp;apos;#39;:this.id,&amp;apos;amp;apos;#39;pos&amp;apos;amp;apos;#39;:&amp;apos;amp;apos;#39;13&amp;apos;amp;apos;#39;})"><img border="0" src="http://www.52pojie.cn/images/dst/attachimg.gif"></span> <img alt="2.jpg" width="281" unselectable="true" outfunc="null" initialized="true" file="attachments/month_1007/1007261546166c2f9a9badbf8c.jpg" status="2" src="http://www.52pojie.cn/attachments/month_1007/1007261546166c2f9a9badbf8c.jpg"></p>
<p style="text-align: center; line-height: 30px; text-indent: 2em">论坛地址:<a target="_blank" href="http://www.52pojie.net/thread-53986-1-1.html"><strong><font color="#0000ff">http://www.52pojie.net/thread-53986-1-1.html</font></strong></a></p> <a href="http://hi.baidu.com/weolar/blog/item/d102b5fb43aadb2f4e4aeaa7.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/d102b5fb43aadb2f4e4aeaa7.html#comment">查看评论</a>]]></description>
        <pubDate>2010-07-26  23:24</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/d102b5fb43aadb2f4e4aeaa7.html</guid>
</item>

<item>
        <title><![CDATA[浅谈APIC的IPI机制]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/3df84d90bd0e4a80a877a470.html]]></link>
        <description><![CDATA[
		
		<p> </p>
<p><span class="Apple-style-span" style="word-spacing: 0px; font: medium Simsun; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class="Apple-style-span"><font style="background-color: #ffffff" color="#660000" size="2">最近写了一个DirectUI，如果运气不好没人要就开源给大家。</font></span></span></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">大家知道，在做内核调试器的时候，为了不影响当前环境，当中断产生的时候必须将非当前cpu外的其他cpu<br>
的运行中断下来。那么内核调试器是怎么做到的呢？实际上这是APIC的ipi（处理器间中断）。下面我根据Linux和Windows的相应源码进行讲解。<br>
当进入内核调试模式时，内核由KdEnterDebugger进入KeFreezeExcution。在KeFreezeExcution中首先检测是否KiFreezeExecutionLock<br>
这个锁是busy状态，如果是则表示其他的处理器试图投递IPI给当前处理器，于是调用KiIpiServiceRoutine，这便是处理器间中断的<br>
服务例程。那么什么是处理器间中断（IPI）呢?这要从8259A讲起。<br>
传统的i386采用的8259A中断控制器有个缺点，如果在smp中采用这样的设计，那就只能静态的把所有外部中断源划分成若干组，<br>
分别把每组都链接到8259A，使其与CPU有一对一的连接，然而这样就达不到动态分配中断请求的目的，也使得硬件设计变的很不简洁。<br>
因此intel设计了更为通用的中断控制器--APIC，高级可编程中断控制器。另一方面，koala到处理器间中断请求的需要，每个cpu都<br>
需要有个本地APIC，因为一个cpu常常要有目标的向系统中的其他CPU发出中断请求,所以从pentium开始intel就在cpu芯片<br>
内部集成了一个本地APIC。但是SMP结构中还需要一个外部的、全局的APIC。<br>
不管是外部还是内部，APIC都支持从0x20-0xff共240个不同的中断向量，其中0-0x1f用于cpu本身的异常。这些中断分为15个<br>
优先级，可以按中断向量号处于16算得。除了外部APIC可以把来自外部设备的中断请求提交给系统的各个cpu外，每个cpu也可以通过其内部的apic<br>
向其他cpu发出中断请求，这便是处理器间中断。当一个cpu向其他cpu发送中断信号时，就在自己的本地ICR寄存器（<br>
interrupt command ragister）中存放其中断向量，和目标cpu拥有的本地apic标识出发中断。IPI信号由apic总线传递再到目标APIC。<br>
例如，下面是我的某个cpu的idt表：<br>
lkd&gt; !idt</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">Dumping IDT:</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">37: 806e4864 hal!PicSpuriousService37<br>
3d: 806e5e2c hal!HalpApcInterrupt<br>
41: 806e5c88 hal!HalpDispatchInterrupt<br>
50: 806e493c hal!HalpApicRebootService<br>
63: 89b3948c serial!SerialCIsrSw (KINTERRUPT 89b39450)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  USBPORT!USBPORT_InterruptService (KINTERRUPT 898d3308)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  USBPORT!USBPORT_InterruptService (KINTERRUPT 89c50360)<br>
73: 89d6f7e4 atapi!IdePortInterrupt (KINTERRUPT 89d6f7a8)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  atapi!IdePortInterrupt (KINTERRUPT 89daf008)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  atapi!IdePortInterrupt (KINTERRUPT 89e20bb0)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  atapi!IdePortInterrupt (KINTERRUPT 89e01bb0)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  atapi!IdePortInterrupt (KINTERRUPT 89da0bb0)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  USBPORT!USBPORT_InterruptService (KINTERRUPT 89c4f208)<br>
83: 89c03bec VIDEOPRT!pVideoPortInterrupt (KINTERRUPT 89c03bb0)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  *** ERROR: Module load completed but symbols could not be loaded for \SystemRoot\system32\DRIVERS\HECI.sys<br>
HECI+0x486 (KINTERRUPT 89b39bb0)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  USBPORT!USBPORT_InterruptService (KINTERRUPT 898cebb0)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  *** ERROR: Module load completed but symbols could not be loaded for \SystemRoot\system32\DRIVERS\HDAudBus.sys<br>
HDAudBus+0x2C12 (KINTERRUPT 898c1bb0)<br>
92: 89c445b4 serial!SerialCIsrSw (KINTERRUPT 89c44578)<br>
94: 89c57044 USBPORT!USBPORT_InterruptService (KINTERRUPT 89c57008)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  USBPORT!USBPORT_InterruptService (KINTERRUPT 897933b8)<br>
a4: 89bedbec USBPORT!USBPORT_InterruptService (KINTERRUPT 89bedbb0)<br>
b1: 89e2867c ACPI!ACPIInterruptServiceRoutine (KINTERRUPT 89e28640)<br>
b4: 899021c4 NDIS!ndisMIsr (KINTERRUPT 89902188)<br>
c1: 806e4ac0 hal!HalpBroadcastCallService<br>
d1: 806e3e54 hal!HalpClockInterrupt<br>
e1: 806e5048 hal!HalpIpiHandler<br>
e3: 806e4dac hal!HalpLocalApicErrorService<br>
fd: 806e55a8 hal!HalpProfileInterrupt<br>
fe: 806e5748 hal!HalpPerfInterrupt<br>
可以看到0xe1号中断便是ipi的处理例程HalpIpiHandler，在HalpIpiHandler里又会调用KiIpiServiceRoutine。<br>
那么这些中断又是在哪注册的呢？实际上当系统初始化时，Phase1Initialization -&gt; HalInitSystem 时，会<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  HalpSetInternalVector(APIC_PROFILE_VECTOR, HalpProfileInterrupt);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  HalpSetInternalVector(APIC_PERF_VECTOR, HalpPerfInterrupt);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  HalpSetInternalVector(DPC_VECTOR, HalpDispatchInterrupt);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  HalpSetInternalVector(APC_VECTOR, HalpApcInterrupt);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  HalpSetInternalVector(APIC_IPI_VECTOR, HalpIpiHandler);</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">APIC_IPI_VECTOR便是0xE1(Windows下)。</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">下面看发送ipi的过程，Windows下通过KiIpiSend -&gt; HalRequestIpi。<br>
下面是HalRequestIpi的代码：</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">;++<br>
;<br>
; VOID<br>
; HalRequestIpi(<br>
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  IN ULONG Mask<br>
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  );<br>
;<br>
;Routine Description:<br>
;<br>
;&nbsp;&nbsp;&nbsp;  Requests an interprocessor interrupt<br>
;<br>
;Arguments:<br>
;<br>
;&nbsp;&nbsp;&nbsp;  Mask - Supplies a mask of the processors to be interrupted<br>
;<br>
;Return Value:<br>
;<br>
;&nbsp;&nbsp;&nbsp;  None.<br>
;<br>
;--<br>
APIC_IPI equ (DELIVER_FIXED OR LOGICAL_DESTINATION OR ICR_USE_DEST_FIELD OR APIC_IPI_VECTOR)</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">cPublicProc _HalRequestIpi ,1<br>
cPublicFpo 1, 0</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  eax, [esp+4]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ; (eax) = Processor bitmask<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  shl&nbsp;&nbsp;&nbsp;&nbsp;  eax, DESTINATION_SHIFT</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">;<br>
; With an APIC we'll IPI everyone needed at the same time.<br>
; This assumes that:<br>
;&nbsp;&nbsp;  (mask passed in) == (APIC logical destination mask) Since we've programmed<br>
; the APIC Local Units to use the Processor ID as the Logical ID's this IS true<br>
;</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pushfd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ; save interrupt mode<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  cli&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ; disable interrupt</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  STALL_WHILE_APIC_BUSY<br>
;<br>
; Set the destination address, (eax) = Processor bitmask<br>
;</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  dword ptr APIC[LU_INT_CMD_HIGH], eax<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  APICFIX edx</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">;<br>
; Now issue the command by writing to the Memory Mapped Register<br>
;</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  dword ptr APIC[LU_INT_CMD_LOW], APIC_IPI</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">;<br>
;&nbsp;&nbsp;  Wait for the delivery to happen<br>
;&nbsp;&nbsp;  KenR why is there a wait here????<br>
;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  STALL_WHILE_APIC_BUSY</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  popfd<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  stdRET&nbsp;&nbsp;&nbsp;  _HalRequestIpi</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">stdENDP _HalRequestIpi</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  page ,132<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  subttl &quot;PC+MP IPI Interrupt Handler&quot;</font></p>
<p><br>
<font style="background-color: #ffffff" face="宋体" color="#660000" size="2">Linux下则通过send_IPI_mask发送。</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">下面不妨再看看send_IPI_mask的流程：</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">static inline void send_IPI_mask(int mask, int vector)<br>
{<br>
unsigned long cfg;<br>
unsigned long flags;</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">__save_flags(flags);<br>
__cli();</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">&nbsp;&nbsp;<br>
/*<br>
* Wait for idle.<br>
*/<br>
apic_wait_icr_idle();<br>
&nbsp;&nbsp;<br>
/*<br>
* prepare target chip field<br>
*/<br>
cfg = __prepare_ICR2(mask);<br>
apic_write_around(APIC_ICR2, cfg);<br>
&nbsp;&nbsp;<br>
/*<br>
* program the ICR <br>
*/<br>
cfg = __prepare_ICR(0, vector);<br>
&nbsp;&nbsp;&nbsp;<br>
/*<br>
* Send the IPI. The write to APIC_ICR fires this off.<br>
*/<br>
apic_write_around(APIC_ICR, cfg);</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">__restore_flags(flags);<br>
}</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">static inline int __prepare_ICR (unsigned int shortcut, int vector)<br>
{<br>
return APIC_DM_FIXED | shortcut | vector | INT_DEST_ADDR_MODE;<br>
}</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">static inline int __prepare_ICR2 (unsigned int mask)<br>
{<br>
return SET_APIC_DEST_FIELD(mask);<br>
}<br>
讲解下上面代码，CPU内部还有一些中断控制器，APIC_ICR和APIC_ICR2是其中的两个。APIC_ICR2主要用来说明要发送的中断请求的目标。这种目标可以是具体的cpu，也可以是除发送自身外的所有cpu，还可以是包括自身在内、甚至自身。在Linux下的IPI服务例程是在init_IRQ()中注册的。比如CALL_FUNCTION_VECTOR就可以请求目标cpu执行一个指定的函数。要想系统某个CPU发出中断需要通过apic_wait_icr_idle确认或等待APIC_ICR处于空闲状态，然后通过__prepare_ICR和__prepare_ICR2准备要写入的数值。</font></p>
<p><br>
<font style="background-color: #ffffff" face="宋体" color="#660000" size="2">其实质便是朝APIC_BASE寄存器中写入中断号、cpu标识等。和windows下的流程也差不多。需要说明的是IOAPIC通过读写相应寄存器来进行编程，但这些寄存器又不是通<br>
用寄存器，而是通过映射成内存的物理地址进行访问。<br>
下面是SoBeIt的话：<br>
和PIC一样，控制本地APIC和IO APIC的方法是通过读写该单元中<br>
的相关寄存器。不过和PIC不一样的是，Intel把本地APIC和IO APIC的寄存器都映射到了物<br>
理地址空间，本地APIC默认映射到物理地址0xffe00000，IO APIC默认映射到物理地址<br>
0xfec00000。windows HAL再进一步把本地APIC映射到虚拟地址0xfffe0000，把IO APIC映射<br>
到虚拟地址0xffd06000，也就是说对该地址的读写实际就是对寄存器的读写，本地APIC里几<br>
个重要的寄存有EOI寄存器，任务优先级寄存器(TPR)，处理器优先级寄存器(PPR)，中断命<br>
令寄存器(ICR，64位)，中断请求寄存器(IRR，256位，对应每个向量一位)，中断在服务寄<br>
存器(ISR，256位)等。IO APIC里几个重要的寄存器有版本寄存器，I/O寄存器选择寄存器、<br>
I/O窗口寄存器(用要访问的I/O APIC寄存器的索引设置地址I/O寄存器选择寄存器，此时访<br>
问I/O窗口寄存器就是访问被选定的寄存器)还有很重要的是一个IO重定向表，每一个表项是<br>
一个64位寄存器，包括向量和目标模式、传输模式等相关位，每一个表项连接一条IRQ线，<br>
表项的数目随处理器的版本而不一样，在Pentium 4上为24个表项。表项的数目保存在IO <br>
APIC版本寄存器的[16:23]位。APIC系统支持255个中断向量，但Intel保留了0-15向量，可<br>
用的向量是16-255。并引进一个概念叫做任务优先级=中断向量/16，因为保留了16个向量，<br>
所以可用的优先级是2-15。当用一个指定的优先级设置本地APIC中的任务优先级寄存器TPR<br>
后，所有优先级低于TPR中优先级的中断都被屏蔽，是不是很象IRQL的机制？事实上，APIC <br>
HAL里的IRQL机制也就是靠着这个任务优先级寄存器得以实现。同一个任务优先级包括了16<br>
个中断向量，可以进一步细粒度地区分中断的优先级。</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">有时候cpu还需要发送给除本身之外的cpu中断请求。在Linux下这是send_IPI_allbutself做的，下面看代码：<br>
send_IPI_allbutself-&gt;__send_IPI_shortcut</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">static inline void __send_IPI_shortcut(unsigned int shortcut, int vector)<br>
{<br>
/*<br>
* Subtle. In the case of the 'never do double writes' workaround<br>
* we have to lock out interrupts to be safe. As we don't care<br>
* of the value read we use an atomic rmw access to avoid costly<br>
* cli/sti. Otherwise we use an even cheaper single atomic write<br>
* to the APIC.<br>
*/<br>
unsigned int cfg;</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">/*<br>
* Wait for idle.<br>
*/<br>
apic_wait_icr_idle();</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">/*<br>
* No need to touch the target chip field<br>
*/<br>
cfg = __prepare_ICR(shortcut, vector);</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">/*<br>
* Send the IPI. The write to APIC_ICR fires this off.<br>
*/<br>
apic_write_around(APIC_ICR, cfg);<br>
}</font></p>
<p><font color="#660000"><font style="background-color: #ffffff"><font face="宋体" size="2">参考文献：<br>
</font><font face="宋体" size="2">http://www.nsfocus.net/index.php?act=magazine&amp;do=view&amp;mid=2534</font></font></font><font color="#660000"><font style="background-color: #ffffff"><font face="宋体" size="2"> 从IRQ到IRQL(APIC版)<br>
</font><font face="宋体" size="2">http://blog.chinaunix.net/u2/87729/showart_2251707.html</font><br>
<font face="宋体" size="2">http://blog.chinaunix.net/u2/76349/showart_2194431.html</font></font></font><font color="#660000"><font style="background-color: #ffffff"><font face="宋体" size="2"> Kernel硬件中断的初始化流程<br>
</font><font face="宋体" size="2">http://wenku.baidu.com/view/e0a4806925c52cc58bd6bedc.html</font></font></font><font color="#660000"><font style="background-color: #ffffff"><font face="宋体" size="2"> A32上Linux内核中断机制分析<br>
</font><font face="宋体" size="2">http://hi.baidu.com/sysnap/blog/item/e58ab887d73ffc22c65cc396.html</font></font></font><font color="#660000"><font style="background-color: #ffffff"><font face="宋体" size="2"> IRQ和中断号的关系<br>
</font><font face="宋体" size="2">http://www.ibm.com/developerworks/cn/linux/kernel/l-ia64irq/index.html</font></font></font><font color="#660000"><font style="background-color: #ffffff"><font face="宋体" size="2"> IA64 Linux 外部中断处理机制<br>
</font><font face="宋体" size="2">http://www.linuxforum.net/forum/gshowflat.php?Cat=&amp;Board=linuxK&amp;Number=707247&amp;o=all&amp;fpart</font></font></font><font color="#660000"><font style="background-color: #ffffff"><font face="宋体" size="2">= kgdb的源代码分析<br>
</font><font face="宋体" size="2">http://www.unixresources.net/linux/clf/linuxK/archive/00/00/59/03/590356.html</font></font></font><font color="#660000"><font style="background-color: #ffffff"><font face="宋体" size="2"> 中断向量，IRQ，外部设备的关系分析<br>
</font><font face="宋体" size="2">http://www.qqgb.com/Program/Clanguage/CJQ/Program_53626_5.html</font><font face="宋体" size="2"> Linux 进程调度机制</font></font></font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">nt4\ReactOS\Linux源码等也是必不可少的。</font></p>
<p><font style="background-color: #ffffff" face="宋体" color="#660000" size="2">以上是我的一些粗略理解，有错误之处大家可以指出来。</font></p> <a href="http://hi.baidu.com/weolar/blog/item/3df84d90bd0e4a80a877a470.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/3df84d90bd0e4a80a877a470.html#comment">查看评论</a>]]></description>
        <pubDate>2010-06-19  22:30</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/3df84d90bd0e4a80a877a470.html</guid>
</item>

<item>
        <title><![CDATA[转载点关于量子态远距离传输和真空零点能]]></title>
        <link><![CDATA[http://hi.baidu.com/weolar/blog/item/4c6cd643c73bd01e72f05d12.html]]></link>
        <description><![CDATA[
		
		<p>量子隐形传输</p>
<p><br>
文/李建二</p>
<p><br>
摘 要</p>
<p><br>
近十年来「量子资讯(quantum information)」开始萌芽发展，本文针对其中重要之一环「量子隐形传输」(quantum teleportation) 作入门之介绍。</p>
<p> </p>
<p> </p>
<p>一、引言</p>
<p>很多人看过「星际航行(star trek)」这部电视连续剧。我第一次观赏这个节目是在三十年前正在美国求学的时候，看到「航海家(Voyager)」星舰上的舰长柯克(Kirk)站在「传输室(transporter)」内，室外一位舰员按下控制键，柯克便罩在耀眼的光芒下，很快变淡，成稀疏光点而消逝，随即在星舰下星球之某处(预先选定)，先出现光点，再模糊形象，然后柯克出现了，这情境相信在很多人心理留下深刻的印象和懂憬，整个过程包含实体分解、实体传输及实体组合等三个步骤，人类的科学是否真的能够建构这样的设备？也许， 在遥远(？)的未来，近十年来「量子资讯(quantum information)」开始萌芽发展，物理学家已经可以初步做到把一个光子的状态传输到另一个不相干的光子上，这就是本文要介绍的「量子隐形传输」[1]。</p>
<p><br>
二、什么是量子隐形传输 ？</p>
<p>&nbsp;&nbsp;&nbsp;  量子隐形传输是量子计算和量子资讯中重要的一环，它们都尝试应用量子系统来从事计算、储存及传输资讯，任一量子系统所处的状态称之为量子态，在不同的环境和刺激下，可以处于不同的量子态，量子隐形传输广义来说如下：把系统A之任一量子态经过一套设备完整地传输到系统B。这不是拷贝，因为原来系统A之量子态在传输后完全被破坏了。但这样的定义也包含了这种情形：系统A和系统B间可以相互作用，如果排除这种可能，就得到一般所认知的量子隐形传输：系统A和系统B 可以相距遥远(譬如在银河之两端)，彼此间无任何作用之可能。在这样的情况下，把系统A之任一量子态经过一套设备(包括古典通讯)完整地传输到系统B。要大约了解这是如何做到，也就是它的机制，则先要介绍一些量子系统完全异于古典系统的特殊性质。</p>
<p><br>
三、量子态</p>
<p>&nbsp;&nbsp;&nbsp;  前面提到的量子系统，它的演变是依据量子理论来进行，其量子态也完全由量子理论来决定。 实际上所有在巨观世界及微观世界的系统都是量子理论适用的范畴，只是在巨观世界里量子的行为一般都不显着，在这样的情形下，量子理论趋近于古典理论而运用到巨观现象。而在微观世界理，古典理论不能适用，微观现象只能用量子理论来描述。所以这里所提的量子系统都是微观世界里的系统，如分子、原子、电子、光子、量子点(quantum dot)、辐射场等。以下将以光子为例说明量子态及其特殊性。</p>
<p>从量子理论的观点，电磁波是由一群光子所组成。每一光子具有动量及两个极化态(polarization)。这三者互相垂直，我们把这两个极化态叫做水平极化态和垂直极化态，分别以 及 表示之并以之作为基本态，任意之极化态则是基本态之任意线性叠合如下：</p>
<p><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  (1)</p>
<p>其中 和 是任意复数，代表在状态之机率，且其总机率为壹： 。 亦即当你对此光子做测量时得到水平极化态之机率是，而得到垂直极化态之机率是。但在量子理论中，测量(measurement)有其特殊性：如果你量到的是水平极化态，则测量后，此光子就保持在此水平极化态，亦即原本之状态在测量时被破坏而崩溃(Collapse)成测量后之水平极化态。所以一次的测量，是无法决定，而且又把破坏了，这就是说如果你想把一个你不知道的光子状态传输给别人，你想靠测量此光子以获得及，进而告知对方进而重组是不可能的。</p>
<p>四、纠缠态</p>
<p>上一节介绍了一个光子的量子态。本节将介绍由两个光子组成的系统之量子态。我们一样只考虑光子的极化态，并选择为基底(即基态之集合)。其中底标1(2)代表第一(二)个光子， 两-光子之极化态可以分为两类，第一类是两个光子的极化态各自独立互不关连，其一般式可写成 ， 其中</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  (2)</p>
<p>且 上面的基态都属于此类。 第二类是两个光子的极化态不能写成各自状态之张量乘积(tensor product)，亦即 。 我们称之为两-光子之纠缠态(entangled state)。在纠缠态中，两个光子之极化态互相关连，不受时空之限制，亦即具有非侷域性关连(non-local correlation)。我们也可以选择四个正规(orthonormal) 纠缠态作为基底，常用的称之为贝尔态(Bell states)，其形式如下：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ,&nbsp;&nbsp;&nbsp;&nbsp;  (3)</p>
<p><br>
我们以纠缠态为例来进一步说明，在此态中它告诉我们第一个光子在水平极化态而第二个光子在垂直极化态之机率是1/2，同样的第一个光子在垂直极化态而第二个光子在水平极化态之机率也是1/2，因此各别光子之极化态是任意(Random)而未知的，但如果我们对第一个光子进行测量而得到水平极化态，则第二个光子就自动地瞬间地处在垂直极化态，不管它离第一个光子有多远(譬如在银河的另一端)，这就是所谓的非侷域性关连， 这种现象是完全非古典的，贝尔状态又称为 EPR 偶(EPR Pairs)，其中E代表爱因斯坦，PR是另外两位物理学家(B. Podolsky and N. Rosen)，他们三人于1935 [2]年发表一篇着名的论文质疑非侷域性关连及量子力学之完整性，引起相当热烈的论辨，后来实验肯定了非侷域性关连的存在。</p>
<p><br>
五、贝尔态测量</p>
<p>一个光子的水平或垂直极化态可以用检极器(Analyzer)或极化分光器(polarized beam splitter)来分析， 如果测量的结果是水平极化， 则测量后此光子原先之状态即崩溃而变成水平态，对两个光子之系统，我们也可以去量各别光子的水平或垂直极化态，如果测量的结果是第一个光子是水平态，第二个光子是垂直态，则测量后此系统之原先状态便崩溃成态，但我们不一定要量光子的水平或垂直极化态，也可以直接设法去测量两光子之贝尔态，则测量后此两光子系统便处在所量到的贝尔态上，这就是所谓的贝尔态测量(Bell state measurement)。两光子贝尔态测量中，主要的设备是 50：50 分光器(beam splitter)。当两光子同时抵达分光器时，两光子之波包( wave packet)相互重叠，因而产生干涉( interference)效应，每一个光子经过分光器后可能继续前进或被反射，调整分光器使两光子离开分光器后之两个途径之对应状态相互叠合，以用一个分光器作贝尔态测量为例如图一，&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  我们在光子离开分光器(BS)出来的两个途径上各置一个光子侦测器(detector) d1及d2，并仅对两个侦测器同时侦测到光子时作记录，这就是所谓的同时量测(coincidence measurement)。这样的设置意谓每一出来的途径必须有一个光子，所以只有两个可能：两个光子经过分光器时都继续前进或同时被反射，因为这两种情形是无法区分的，所以出来后之两光子态是这两种情形之状态之线性叠合(linear superposition)，其振幅(amplitude)大小相同而异号，因为两光子之任意状态都可以上述之四个正交(orthogonal)的贝尔态之线性叠合来表示，但观察这些贝尔态在把两个光子对调下，只有变号，其它保持不变，所以在这样的实验设置下，只有贝尔态是容许的，其他都相互抵消了，也就是量到了一个贝尔态，而原来两光子之状态也崩溃成此贝尔态了。</p>
<p>&nbsp;&nbsp;&nbsp;</p>
<p>六、量子隐形传输之机制</p>
<p>&nbsp;&nbsp;&nbsp;  于1993年由IBM 特别研究员(IBM Fellow) Charles H. Bennett [3] 领导的国际研究团队共六人，联名发表一篇文章，证明在原先系统上之状态被破坏下，完全的量子隐形传输在理论上是实际可能的。在此之前，科学家们并不认为它真的可行，因为它破坏了量子力学中的测不准原理(uncertainty principle)。这个原理说明不可能经由一次测量而得知系统之所有资讯，譬如对一个粒子的位子量的愈正确，则它的动量就愈不正确， 且对该粒子之干扰也愈严重，终于完全破坏了该粒子之原先状态且无法得知所有资讯，因此无法据以再造一个具有完全相同状态的粒子，所以认为完全的量子隐形传输是不可能的，但是Bennett 的研究团队应用量子力学中所特有的纠缠态，不必要去量知原先粒子之所有资讯而在理论上达成完全的量子隐形传输，底下我们描述这个机制。</p>
<p>&nbsp;&nbsp;&nbsp;  假定甲、乙、丙三个人各自拥有一个粒子，分别称为1、2、3粒子，甲扮演委托人的角色，在粒子1上制造了一个状态后，交给乙。乙扮演寄件者之角色，将把状态传输给丙所拥有的粒子3。在这里丙扮演接收者的角色，乙跟丙所拥有的粒子2及粒子3事先就制成为纠缠态后，再各自拥有，乙收到甲送来的粒子1后，便对粒子1及粒子2作贝尔态测量，量到某个贝尔态后，便以古典通讯方式，如电话，通知丙其测量的结果，丙依据测量的结果对粒子3作适当处理使粒子3处在粒子1原先要传输的状态上，因此达成了完全的量子隐形传输，在这整个传输过程中，乙跟丙都不知道是甚么状态，而且粒子1上之原先状态完全被破坏了，所以这不是拷贝，而是真正的传输，粒子2及粒子3间之纠缠态是重要的关键，因为在乙对粒子1及粒子2作了贝尔态测量后，粒子2之状态变了，丙所拥有的粒子3之状态自动且瞬间地跟着改变了，不管乙和丙相距多远，所以丙只要依据乙贝尔态测量之结果，作相对应唯一的处理就可以使粒子3 处在状态上，因为需要古典通讯以告知测量结果，所以这个传输不是瞬间的，而仍然受限于相对论，即讯息的传送不能比光速快，之所以称为「隐形」是因为在传输过程中，除了开始和最后，都没有出现，这个机制不仅适用于纯态，也适用于非纯态。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>七、量子隐形传输之实验</p>
<p>Bennett 研究团队所提出的机制一直到1997年才在澳大利亚Innsbruck 大学由Anton Zeilinger [4] 所领导的研究团队第一次作出来。 Innsbruck 实验成功地把一个光子的任意极化态完整地传输到另一个光子上， 但是成功的机率只有25%，这是因为在作贝尔态测量时，他们用的方法就是上面所介绍的贝尔态测量，这个方法只能量到一个贝尔态，其他三个贝尔态则量不到，因为四个贝尔态出现的机率是相同的，所以成功地传输的机率只有25%，Innsbruck 实验之基本架构如图二。其后在1998年初，在义大利罗马大学的研究团队[5]应用两个纠缠的光子，并把每个光子之两个自由度，动量和极化态，一齐考虑进来，他们在一个光子上应用这两个自由度建构了不同的贝尔态，而要传输的极化态是在其中一个光子上调出来的，他们成功地把极化态由一个光子传输到另一个光子上，这两光子的传输装置只能传输纯态，非纯态就无能为力了，同年年底，在美国加州理工学院由Jeff Kimble[6]领导的光学研究团队发表了一个完全成功的量子隐形传输，只是他们用的不是三个或两个光子而是幅射场(Radiation Field)，所用的状态不是极化态或动量而是一致态(coherent state)，在他们的装置下，可以测量所有的贝尔态，因此甲送进之状态皆能传输到丙，传输机率为100%。</p>
<p>&nbsp;&nbsp;</p>
<p>八、未来展望</p>
<p>以上实验所完成的量子隐形传输都是在同样的量子系统间传输状态，而且用的量子系统都是光子(电磁场)，未来应可以发展到不同的量子系统，如电子，原子，分子，量子点等，而且不限于同样量子系统间状态之传输，我们如果能够把一个不稳定或寿命短的系统上之资讯传输到一个稳定且寿命长的系统上，就能够发展量子记忆(quantum memory)，当然我们都希望能像「航海家」星舰上一样地传输人或实物，也许在遥远的未来会成功，但是实体之传输应该完全不同于状态之传输，其困难度是难于估计的，除此以外，量子隐形传输也预期将在量子电脑及密码学方面扮演重要的角色。</p>
<p>参考资料：</p>
<p>[1]一般性介绍可参考网页如 <a href="http://www.quantum.univie.ac.at/research/teleport">http://www.quantum.univie.ac.at/research/teleport</a>, <a href="http://bohm.anu.edu.au/units/public/phys1007">http://bohm.anu.edu.au/units/public/phys1007</a>, 等.</p>
<p>[2] A. Einstein, B. Podolsky, and N. Rosen, Phys. Rev. 47, 777 (1935).</p>
<p>[3] C. H. Bennett et al., Phys. Rev. Lett. 70, 1895 (1993).</p>
<p>[4] D. Bouwmeester et al., Nature 390, 575 (1997).</p>
<p>[5] S. Popescu, quant-ph/9501020, 1995 ; D. Boschi et al., Phys. Rev. Lett. 80, 1121 (1998).</p>
<p>[6] A. Furusawa et al., Science 282, 706 (1998).</p>
<p>　</p>
<p>真空零点能<br>
 <br>
　　<br>
 <br>
真空零点能（Zeropointenergy）　　<br>
量子理论预示，真空中蕴藏着巨大的本底能量，它在绝对零度条件下仍然存在，称为真空零点能。对卡西米尔（Casimir）力（一种由于真空零点电磁涨落产生的作用力）的精确测量，证实了这一物理现象。　　现代科学认为真空并不意味着一无所有，真空是由正电子和负电子旋转波包组成的系统，这种状态的动态能量可以作为工业能源、未来星际航行能源以及家庭生活等诸多领域的能源。量子真空是一个非常活跃的空间，它充满时隐时现的粒子和在零点线值上涨落的能量场。而与这种现象伴生的能量，被称为零点能，也就是说，即使在绝对零度，这种真空活性仍然保持着。早在1891年，科学家忒斯拉（NikolaTesla）在一次演讲中就提到：几个世纪之后，也许我们可以从宇宙中的任意一点提取能量来驱动我们的机械。用今天的科学语言解释，这种能源就是真空零点能，或称空间能、自由能等。　　研究　　关于零点能的设想来自量子力学的一个著名概念:海森堡测不准原理。该原理指出：不可能同时以较高的精确度得知一个粒子的位置和动量。因此，当温度降到绝对零度时粒子必定仍然在振动；否则，如果粒子完全停下来，那它的动量和位置就可以同时精确的测知，而这是违反测不准原理的。这种粒子在绝对零度时的振动（零点振动）所具有的能量就是零点能。狄拉克从量子场论对真空态进行了生动的描述，把真空比喻为起伏不定的能量之海。J.Wheeler估算出真空的能量密度可高达1095g/cm^3。　　1948年，荷兰物理学家亨德里克·卡西米尔提出了一项检测这种能量存在的方案。从理论上看，真空能量以粒子的形态出现，并不断以微小的规模形成和消失。在正常情况下。真空中充满着几乎各种波长的粒子，但卡西米尔认为，如果使两个不带电的金属薄盘紧紧靠在一起，较长的波长就会被排除出去。接着，金属盘外的其他波就会产生一种往往使它们相互聚拢的力，金属盘越靠近，两者之间的吸引力就越强。1996年，物理学家首次对这种所谓的卡西米尔效应进行了测定。华盛顿大学Lamoreaux在他的学生DevSen协助下，对卡西米尔效应进行了精确的测量，该测量结果与卡西米尔对这一特殊板间距及几何构形所预测的力相差不超过5%。Lamoreaux在他的实验中，采用镀金石英表面作为他的金属板。另外一块板固定在一个灵敏扭摆的端部。如果该板向着另外一块板移动，则摆就会发生扭转。一台激光器可以以0.01微米的精度测量扭摆的扭转。向一组压电组件施加的一股电流使卡西米尔板移动；而另一电子反馈系统则抵消这一移动，使扭摆保持静止。零点能效应就表现为保持摆的位置所需的电流量的变化。Mohideen等人在加州理工学院作的实验中，在0.1到0.9μm的范围内，用原子力显微镜对卡西米尔力进行的测量结果，与理论值相差不到1%。　　应用前景　　如果零点能可以提取，无疑将是人类所能够利用的最佳能源了。它是洁净，廉价的能源，是大自然给予人类的&ldquo;免费的午餐&rdquo;。宇宙中所有的物质都来源于零点电磁涨落能，我们身上的每一个物质粒子不停地与真空零点能发生能量交换，也就是，没有任何一个物理体系称得上是孤立体系的。根据物理真空的性质，我们可以从空间任何一点提取零点能，并转换成我们所需要的能量形式。原子中电子绕核转；太阳系中，行星绕太阳转，几十亿年永不停息；超导和超流现象，这些都是大自然给我们的关于能源的启示。　　1989年3月，弗雷希曼和庞斯在美国宣布他们用钯电极在常温下电解重水，观察到了异常的热量输出和少量的中子。该现象一经公布就在全世界范围内引起了一场轩然大波。由于当时的实验用的是重水又是在常温下，人们就把这种现象称之为&ldquo;冷核聚变&rdquo;。　　传统核物理理论认为，只有在非常高的温度和压强下，克服库仑势垒才能发生氘核聚变，像常温常电压下的电解过程是不可能发生核反应的。而且若认为过热是由核反应引起的，就应该观察到大量的中子和γ射线，而实验中却未观察到。加之，一些实验室也声称重复实验中未能观察到弗雷希曼和庞斯所宣布的现象。人们开始怀疑是不是实验中出现了人为的偏差，&ldquo;冷核聚变&rdquo;研究渐渐地进入低潮。　　十几年来对真理执著追求的科技工作者没有放弃这项研究。进一步的研究发现：即使用普通的碳电极在轻水以及辉光放电等其他装置中也能观察到&ldquo;冷核聚变&rdquo;现象。国际权威刊物《科学》杂志于1998年6月载文称：对冷核聚变不怀疑下列事实，多数装置产生异常能量输出，有些已投入市场，有些已取得专利。美国核科学协会已于1998年将电化学低能核反应列入了年会的正式讨论内容。由于&ldquo;冷核聚变&rdquo;与人类的能源问题密切相关，日本、意大利、法国等资源匮乏的国家已投巨资资助&ldquo;冷核聚变&rdquo;类型的研究。但是，目前困扰科学家们的问题是如何解释这些异常现象。　　由于当初的实验用的是重水和钯电极，这很容易给人以错觉，认为这种电化学异常现象就是核现象。因此大部分研究者都在寻求&ldquo;冷核聚变&rdquo;的核解释，但在理论上遇到了强大的阻力，进展甚微。另一方面大多数的理论解释认为&ldquo;冷核聚变&rdquo;是一种体效应，没有分析电极微观结构的作用。北京航空航天大学的江兴流教授基于实验结果，以电极的尖端效应为突破口，分析了电化学异常现象。江兴流科研组在电解实验中，观察到在电极附近有高度定向的核反应，以及过热、核嬗变、滞后效应（HeatafterDeath）。经过不断的探索总结出：气体放电、真空击穿及液体中的放电（电解）现象，有着共同的物理规律：由于电解过程中电极表面尖端效应产生的聚能过程，在电极表面局部产生气泡和涡旋运动，气泡的产生和坍塌过程将发生动态卡西米尔效应而提取零点能并以热能的方式释放出来；同时涡旋运动与零点能形成挠场相干而提取零点能，一方面释放热能，另一方面形成类星体涡旋结构，在涡旋中心产生高能射线、中子和高能粒子，并伴有高度定向的核反应。可见电极表面尖端处形成远离平衡态的非线性体系，满足一定的条件就会形成自组织的正反馈涡旋，通过挠场机制提取零点能。从而可以看出&ldquo;冷核聚变&rdquo;中的&ldquo;过热&rdquo;，在考虑零点能的提取后不应再被视为过热，因为此时它并不违反能量守恒定律。而且，既然&ldquo;冷核聚变&rdquo;过程中主要发生的不是核反应，冷核聚变这个词就已经不再适用了，它仅仅是一个代名词。　　江兴流教授认为关于&ldquo;冷核聚变&rdquo;研究应该将注意力转移到提取零点能和挠场机制上面来。零点能即物理真空能，它是不确定性原理所要求的最小能量。真空能是开放非线性系统的混沌表现，来源于四维空间的电磁流的三维表现，它可扭曲我们的三维空间，从而改变时空度规。慧勒计算零点能的密度为1095g／cm3，也就是说它是一个无比巨大的能源。由真空零点能而带来的可以直接从实验观测的物理结果是卡西米尔效应。挠场理论最初源于爱因斯坦&mdash;&mdash;&mdash;康顿理论，在广义相对论中，若要考虑物质自旋的作用，需引入非对称的联络，即挠率不为零的情况就会导出挠场的存在，挠场的能量来源是零点能。众所周知，基本粒子的&ldquo;电荷&rdquo;对应于电磁场，&ldquo;质量&rdquo;对应于引力场，那也应有对应于&ldquo;自旋&rdquo;的挠场存在。挠场有许多独特的性质：它只改变物质的自旋性质；类似于引力场的高穿透性；滞后效应；轴向加速效应。用挠场机制我们就可解释电化学异常现象中的过热、核嬗变、滞后放热等效应。　　研究&ldquo;冷核聚变&rdquo;的意义已经不限于其本身，它使我们意识到一个新的巨大的能源&mdash;&mdash;&mdash;真空能的存在。我们可以通过高能粒子的对撞激发真空，也可以通过电化学、涡旋等过程激发真空而提取零点能。而且后面所属的过程并不十分复杂，这一点可以通过美国的许多效率大于一的专利看出。这就是说大规模提取零点能具有很大的可行性。　　然而一项创新的实现，总是要受到来自各方面的阻力，一方面我们在这个领域的理论和实验研究还不够成熟；另一方面由于真空能这种新能源的广泛应用必然引起世界能源结构的巨大变革，对世界经济格局乃至政治格局都将产生深重影响，传统势力会从学术和经济两方面阻挠新能源研究的发展。　　新能源&mdash;&mdash;&mdash;真空能的大规模利用为人类描绘了一个美好的未来：由于零点能十分巨大，加上它的利用过程高效且清洁无污染，它的大规模利用将解决目前世界所面临的能源短缺、环境污染、干旱、温室效应等生态环境问题。　　不难看出，新能源&mdash;&mdash;&mdash;真空能的利用是一项具有巨大战略意义的创新工程。而我国目前在这个领域的研究才刚刚起步，社会各方面应给与足够的关注和支持，国家应不失时机地从系统工程的高度加强这方面的领导工作，以期在国家综合实力竞争中处于优势地位。<br>
量子理论预示，真空中蕴藏着巨大的本底能量， 它在绝对零度条件下仍然存在， 称为零点能（Zero point energy）。对卡西米尔（Casimir）力（一种由于真空零点电磁涨落产生的作用力）的精确测量，证实了这一物理现象。随着物理真空理论和实验研究的推进，人类将会把处于&ldquo;闲置&rdquo;状态的真空作为一块&ldquo;新油田&rdquo;加以开发。若能将这种能量转换为可供人类应用的动力，等于为人类开启了一座永不枯竭的能源宝藏。涡旋是宇宙的引擎，作者提出瞬态涡旋动力学与挠场效应提取真空零点能的观点，用以解释异常核反应和异常能量输出的现象。当前，许多新能源发生装置不断出现，能源革命的时代已经到来。量子真空零点能　　现代科学认为真空并不意味着一无所有，真空是由正电子和负电子旋转波包组成的系统，这种过程的动态能量可以作为工业能源、 未来星际航行能源以及家庭生活等诸多领域的能源。量子真空是一个非常活跃的空间，它充满时隐时现的粒子和在零点线值上涨落的能量场。而与这种现象伴生的能量，被称为零点能，也就是说，即使在绝对零度，这种真空活性仍然保持着。早在1891年，科学家忒斯拉（Nikola Tesla）在一次演讲中就提到：几个世纪之后，也许我们可以从宇宙中的任意一点提取能量来驱动我们的机械。用今天的科学语言解释，这种能源就是真空零点能，或称空间能、自由能等。　　诺贝尔奖获得者李政道教授在他的《粒子物理和场论引论&gt;（Particle Physics and Introduction to Field theory）一书中，第一次提出了真空工程（ Engineering the vacuum）的概念，他写道：&ldquo;用实验的方法改变真空的性质，可以称作真空工程……，如果能真正改变真空，那么我们将发现许多新的，预料不到的现象。&rdquo;真空作为现代物理的核心结构，研究真空是全面理解各种自然力的一把钥匙。　　传统的观念认为物理真空是一个能量最小的系统，不能从这样一个系统中取出能量。但应该看到的是，物理真空是一个具有强烈波动的动态系统，它可能是一种能源。许多有独特见解的科学家很早就开始注意到利用卡西米尔效应作为替代的能源。休斯公司研究室的R. Forword在1984年就提出了利用带电荷薄膜导体内聚现象从真空中提取电能[Phys .Rev. B60, 14,740(1984)]。近年来，各种科学杂志和新闻媒体纷纷报道关于真空零点能的研究，尤其在精确测量卡西米尔效应之后，人们更加关注如何向真空索取能量来解除人类所面临的环境恶化、能源枯竭、臭氧层减少等严重问题。　　真空中存在电磁零点能，并可以认为零点能起源于宇宙边界条件，或是由组成物质的带电粒子的量子涨落运动产生的。零点能推动粒子运动，粒子运动产生零点能，形成了自生宇宙反馈模式，宇宙的所有物质对真空都是开放的，零点能的涨落可以看作是具有随机状态的经典电磁辐射模式的集合。宇宙电磁涨落的能谱密度分布为：<br>
其中每个正态模式的平均能量为：<br>
也就是真空中的能量是以分立的互不相干的涨落形式存在。　　关于卡西米尔效应的最新实验结果证明，真空中确实存在零点能。关于零点能的设想来自量子力学的一个著名概念:海森堡测不准原理。该原理指出：不可能同时以较高的精确度得知一个粒子的位置和动量。因此，当温度降到绝对零度时粒子必定仍然在振动；否则，如果粒子完全停下来，那它的动量和位置就可以同时精确的测知，而这是违反测不准原理的。这种粒子在绝对零度时的振动（零点振动）所具有的能量就是零点能。狄拉克从量子场论对真空态进行了生动的描述，把真空比喻为起伏不定的能量之海。J. Wheeler估算出真空的能量密度可高达1095 g/cm3。　　有人认为零点能来自所有各种类型的力场，包括电磁场、引力场和核力场，并可以通过几种方式表现出来。一种方式是兰姆移位，即受激原子发出的光的频率的轻微改变；另一种形式是电子和光学仪器中可记录到的一类特殊的不可避免的电平噪声。但是影响最大也最为明显的要算卡西米尔效应。1948年，荷兰物理学家卡西米尔在理论上计算出两块靠得足够近的金属板之间将会有轻微的相互吸引。原因在于金属板之间的微小距离只允许真空能量中高频电磁成分存在，其它那些较大成分则被金属板挡在外面，因而内外存在着压力差，正是这样的力使得金属板相互靠拢。这也被称为静态卡西米尔效应。尔后，许多物理学家对其进行了实验上的验证。华盛顿大学Lamoreaux在他的学生Dev Sen协助下，对卡西米尔效应进行了精确的测量。该测量结果与卡西米尔对这一特殊板间距及几何构形所预测的力相差不超过5%。Lamoreaux在他的实验中，采用镀金石英表面作为他的金属板。另外一块板固定在一个灵敏扭摆的端部。如果该板向着另外一块板移动，则摆就会发生扭转。一台激光器可以以0.01微米的精度测量扭摆的扭转。向一组压电组件施加的一股电流使卡西米尔板移动；而另一电子反馈系统则抵消这一移动，使扭摆保持静止。零点能效应就表现为保持摆的位置所需的电流量的变化。Mohideen等人在加州理工学院作的实验中，在0.1到0.9&micro;m的范围内，用原子力显微镜对卡西米尔力进行的测量结果，与理论值相差不到1%。《Science》杂志曾载文&ldquo;The Subtle Pull of Emptiness&rdquo;(Vol. 275,10 Jan. 1997)称：这是一个让所有教科书都要改写的实验。 冷核聚变与提取零点能　　曾被许多媒体称作&ldquo;病态科学&rdquo;或&ldquo;伪科学&rdquo;的&ldquo;冷核聚变&rdquo;研究，其近况如何？作者参考在美国麻省理工学院召开的第十届国际冷核聚变会议（ICCF-10， 2003年8月）和2005年5月冷核聚变座谈会内容，对冷核聚变研究的现状作一简单介绍。许多从1989年开始研究&ldquo;冷聚变&rdquo;的科学家，虽然处于经费不足，被人误解的状态，但仍坚持艰苦的探索。国际原子能委员会（IAEA）分管聚变的官员（1995-2001）T.J.Dolan，在清华召开的ICCF-9国际会议上的总结会上，提出五种重要的解释冷聚变现象的理论模型，其中有江兴流提出的涡旋动力学（Vortex Dynamics）模型。涡旋动力学模型的主要论点在于：局域瞬态非平衡体系产生涡旋，而涡旋的内聚作用和极化效应，使体系内的粒子相互靠近，通过涡旋动力学与真空零点能产生挠场相干，提取真空零点能，并产生局域极化核反应和高度定向的轴向加速高能粒子。这种局域瞬态非平衡体系出现在电极微突起处或多层膜的非平衡点处。这一理论成功地解释了许多异常放热和核嬗变现象，因而受到了广泛重视。　　美国能源部于2003年11月6日召见一批从事15年冷核聚变研究的科学家， 讨论重新评估冷核聚变的问题。Physics Today 杂志也于2004年4月1日发表文章，题目是： &ldquo;DOE Warms to co<br>
ld fusion(能源部热心于冷核聚变)&rdquo;。一篇由调研人员Steven Krivit 和Nadine Winocurf访问了50多名世界各国的有关科学家写成的，题为:&rdquo;The Cold fusion Report&rdquo;的，长达53页的报告，详细报道了&ldquo;冷核聚变&rdquo;的研究成果及许多证明冷核聚变现象的客观存在和可重复性的实验事实(<a href="http://www.newenergytimes.com/">http://www.newenergytimes.com</a>)。 美国能源部在重新评议冷核聚变的过程中，参会的18个科学家仍然以现有的理论框架和核反应产生热量的传统观点来评价冷核聚变现象，因此有2/3的评议人认为在令人信服的异常放热的实验中，没有发现核反应的证据。但是他们都认为冷核聚变现象是值得进一步研究的。　　2002年3月8日《科学》杂志报道说，美、俄科学家通过让一个大烧杯所盛液体中微小气泡产生的爆炸，在实验室获得了相当于核聚变的效果。当时，美国橡树岭国家实验室的科学家塔利亚克汉采用氘化丙酮作为实验材料，即将丙酮分子中的氢原子都以氢同位素氘取代。他们用中子脉冲轰击丙酮液，使其内部产生微小的气泡，并利用声波促使这些气泡保持快速而稳定的增长。当声波的声压达到一定值时，丙酮液体中这些微小气泡便会在迅速膨胀后突然崩溃，产生千万摄氏度的高温与局部高压，同时伴有强大的冲击波、闪光以及巨大能量的产生，这种状态大约持续了1微微秒。这一实验现象为冷核聚变的研究提供了新的证据。早前，Roger Stringham就用声学空化法，在浸入重水中的金属薄膜表面，产生超声核聚变。最好的实验结果是15瓦声学输入功率，可得到40瓦的热能输出，但是，没有中子辐射。　　2003年12月19日出版的《Science》杂志载文称，本年度最大的科学突破是暗能量的发现。研究表明，近73%的宇宙由神秘的暗能量组成，它是一种反重力。真空零点能是暗能量的一种表现，暗能量的证实，为冷核聚变的研究提供了新的物理依据。　　江兴流的涡旋动力学提取零点能理论认为：电解过程中，电极的棱角及表面的凸起，将引起局部电场集中。如果是阴极，将出现局部高密度电子发射，而导致远离平衡态的非线性的涡旋运动，这一涡旋效应将产生挠场。由于氢（或氘）气泡的不断出射和离去，在电极尖端将出现周期性的瞬态变化过程。瞬变的气泡可以看作是带有可动边界的谐振腔，它们可能产生动态长西米尔效应而吸收零点能，并以光子的形式放出，这样，通过挠场与真空的相干作用而提取能量（零点能），导致了过热和异常核现象的出现。这一理论也成功地解释了最近Nature杂志2005年4月28日刊登的，美国加州大学洛衫矶分校用热电晶体在氘气的环境中，在温度变化不到30度时产生的核聚变。这种被称为&ldquo;口袋中的核聚变&rdquo;的实验结果，用了热电效应和尖端放电效应的简单方法产生核聚变中子。涡旋动力学提取零点能理论也为气泡核聚变现象提供理论依据：气泡破裂的瞬态过程，产生自收缩涡旋，通过挠场相干提取量子真空零点能而形成高度定向的能量射束。这种微细射束，可以是光束，也可能是引起核反应的高能粒子束。　　从电解实验结果中，我们看到了挠场存在的证据，例如：通过辐射自照相法观察到的高度定向的 _ 粒子束；有时，断开电解电压后，仍能看到电极尖端处持续出现的气泡，说明该处残留的挠场仍在起作用。应该指出，国际上许多实验室观察到的停止电解后出现的持续过热现象，亦可用挠场的存在作解释。　　从1989至今，整整16年了，在这期间，全世界有不少科学家克服种种困难，探索着冷核聚变这一新的物理现象，有更多可靠、可信的实验证据已表明，被称之为&ldquo;冷核聚变&rdquo;这一现象的确是存在的，以下我们指出，由世界各地不同科学家在最近几年所做的有过热现象产生的几个典型的实验。　　在第10届国际冷核聚变会议期间，MitchellSwartz在麻省理工学院（MIT）Hagelstein教授的实验室，演示了的Fleischmann / Pons型钯&mdash;低电导率重水&mdash;铂电解池。在不同的实验条件下，这一装置的过热功率比为167%&mdash;267%，这一现象的演示过程在会议期间，从8月24日到8月30日多次进行过。　　美国波特兰州立大学的John.Dash教授，带领着暑期高中学生在MIT的Hagelstein的实验室也演示了过热实验。　　&ldquo;Letts-Cravens&rdquo;效应:用激光照射电解池阴极会激发过热的产生，这一现象由三个科学家小组各自独立地观测到（Michael Mckubre, Edmund Storms, 和Mitchell Swartz）。此实验结果有两个特点。第一: 实验的输出功率是输入功率的30倍；例如：当输入激光束功率为30毫瓦时，电解池输出为1瓦。第二：这一实验重复性很好。　　来自佛罗里达的James Patterson博士和他的同事们向公众展示了一种结构简单、坚固、构思巧妙的气相&ldquo;冷聚变&rdquo;反应器，该反应器能持续不间断地产生过热输出。而且该装置的全部细节均无保留地向公众公开。　　意大利政府支持的固态低能核反应装置观察到与过热相关的4He。　　一家以色列公司&mdash;能源技术有限公司，在美国投资者支持下，仅二年时间就得到各种过热过程，有关这些成果在ICFF-10会议上，做了介绍与演示。　　&ldquo;气泡核聚变(bubble Fusion)&rdquo;和声致发光，与电化学异常核反应过程相似，都存在气泡的产生、长大和破裂的过程。气泡破裂有各种模式：球形破裂、非球形破裂和射流模型。 美国科学家Roger Stringham 在超声空化实验中发现：氧化氘中气泡瞬态破裂产生一束包含10exp10 个氘核高密度等离子体喷注。在电化学实验中，我们也同样观测到高度定向的核反应。赝火花放电实验中，在瞬间产生的高密度等离子体中，由于自收缩效应和挠场轴向加速效应，从而观测到异常高能粒子的出现。在挠场作用下的（D,D）反应，第三反应道也可能出现。考虑到核场中的Primakoff效应和轴子（Axion）模型，应能观察到高度定向的轴子，即轻的中性赝标量粒子。在&ldquo;冷核聚变&rdquo;研究中，观察到过量的4He的出现，就属于这种情况。由于中子发射方向的随机性，少数固定位置的中子探测器是不容易测到中子的。而（D,D）反应中出现的质子（P）和氦核（ ）由于能量在MeV量级，在液体中的射程很短（&lt;1mm），不能从烧杯外部探测到。　　在过去的16年里，诸如以上这些用传统热核聚变无法解释的冷核聚变现象的实验事实足以说明，&ldquo;冷核聚变&rdquo;现象是存在的，而且在一些关键性实验装置上有很好的重复性。 涡旋动力学与挠场理论 　　随着对自然界和实验室现象的深入观察，人们发现涡旋现象存在于自然界的各个层次，从微观的基本粒子自旋、超导体中的涡旋点阵，到宏观的等离子体加速、电化学点腐蚀、龙卷风、银河系、类星体、黑洞等都存在涡旋现象，整个宇宙通过涡旋而联系在一起。粒子和物质产生的涡旋是信息的携带者，它们几乎瞬间地通过挠场相互作用着。因而有人把涡旋称为宇宙的引擎，它是连接不可见能量和可见物质的桥梁。而且许多异常物理现象都与涡旋相关。人们也发现，大量的异常放能和核反应现象不能用现有的四种相互作用加以解释，需要引入挠场或自旋场。挠场效应属于新的基本相互作用，它有许多独特的性质，如：高穿透性、记忆和滞后效应、超光速传递和全息特性等，它是物理真空极化的一种表现，具有涡旋拓扑性质。　　江兴流的涡旋动力学提取零点能理论认为：电解过程中，电极的棱角及表面的凸起，将引起局部电场集中。如果是阴极，将出现局部高密度电子发射，而导致远离平衡态的非线性的涡旋运动，这一涡旋效应将产生挠场。由于氢（或氘）气泡的不断出射和离去，在电极尖端将出现周期性的瞬态变化过程。瞬变的气泡可以看作是带有可动边界的谐振腔，它们可能产生动态卡西米尔效应而吸收零点能，并以光子的形式放出，这样，通过挠场与真空的相干作用而提取能量（零点能），导致了过热和异常核现象的出现。这一理论合理地解释了Nature杂志2005年4月28日刊登的，美国加州大学洛衫矶分校用热电晶体在氘气的环境中，在温度变化不到30度时产生的核聚变。这种被称为&ldquo;口袋中的核聚变&rdquo;的实验结果，用了热电晶体和尖端放电效应产生核聚变中子。涡旋动力学提取零点能理论也为气泡核聚变现象提供理论依据：气泡破裂的瞬态过程，产生自收缩涡旋，通过挠场相干提取量子真空零点能而形成高度定向的能量射束。这种涡旋轴向加速产生的微细射束，可以是光束，也可以是引起核反应的高能粒子束。　　近年来，通过对粒子自旋和宏观物体的旋转角动量的深入研究，科学家对挠场理论作了进一步的完善。这一理论不仅使我们对提取真空能提供了可能的途径，而且也对量子理论中违反直觉性质的异常现象有了新的认识，如与量子牵连相关的非定域的许多现象。目前，国外的挠场（torsion field）理论和试验研究已经有了很大的进展。由于挠场具有许多独特性质，使它在生物、医疗、新能源、通信、地质、材料、天文等方面有着特殊的应用。　　值得注意的是,与涡旋有关的物理现象和物理过程，都没有很好的理论解释。近来，发现超导体中的涡旋点阵具有记忆效应，这使人想到挠场效应。在我们所做的电解实验结果中，看到了挠场存在的迹象。例如通过辐射自照相法观察到的高度定向的β粒子束；有时，断开电解电源后，仍然能够看到电极尖端处持续出现的气泡，说明该处残留的挠场仍在起作用；许多实验室也观察到停止电解后，会出现持续的放热现象，也可以用挠场的滞后效应加以解释。　　如果零点能可以提取，无疑将是人类所能够利用的最佳能源了。它不但廉价无污染，而且，可以说取之不尽用之不竭。目前，尽管大多数物理学家认为不能从真空中提取能量，但美国得克萨斯州奥斯汀高级研究所的成员们却坚信宇宙中有&ldquo;免费的午餐&rdquo;，他们的目标就是要向真空中索取能量。该所所长Puthoff甚至指出：&ldquo;对于这个领域的狂热分子（比如我们自己），我们认为21世纪可能是零点能的世纪。&rdquo;　　Moray B. King坚持认为零点能是可以提取的，并在这方面做了长期的研究工作。他的专著&ldquo;Tapping the zero-point energy&rdquo;受到普遍欢迎。 King的依据主要来自普里高津的耗散理论。根据普里高津的理论，非线性非平衡体系在一定条件下，可以产生自组织效应，从混沌走向有序。由于挠场相干等原因，可以使随机背景电磁场产生自组织，从而提取零点能。更多的人，从电化学异常、非平衡磁场及引力场的角度出发，探索提取零点能的有效而简单的途径,并取得了一定的成就。1997年，美国航空航天局主办了一个名为&ldquo;突破性推进物理&rdquo;学术研讨会，据与会者称，零点能成了这些探讨何种&ldquo;突破&rdquo;的人的中心话题。美国航空航天局甚至制订了详细的研究开发计划。2001年1月20至22日，第一届国际&ldquo;场推进&rdquo;会议在英国召开。世界各地的科学家齐聚英国，研究&ldquo;利用零点能推动宇宙飞船引擎&rdquo;的可能性，一旦成功，人类将可在太空中自由来去，而且不需要耗费任何燃料，飞行数百年之久也没有问题。2001年6月23日,在瑞士的Weinfelden召开未来能源和引力研究国际会议，200多位科学家讨论了多种新能源和反引力研究的进展。　　1998年6月，《Science》杂志曾载文称：对&ldquo;冷核聚变&rdquo;类型的装置不怀疑下列事实，多数产生异常能量输出，有的已投入市场，有的已取得专利。　　所有的物理现象都与真空有关，而真空是巨大的能量涨落的海，通过动态卡西米尔效应和挠场相干可以从空间的任何一点提取能量。关于宇宙具有全息性质，量子纠缠和非定域性，以及物质、能量、时空之间的相互转换关系的认识，使我们对大自然的认识深化了。新能源展望　　零点能是洁净，廉价的能源，是大自然给予人类的&ldquo;免费的午餐&rdquo;。宇宙中所有的物质都来源于零点电磁涨落能，我们身上的每一个物质粒子不停地与真空零点能发生能量交换，也就是，没有任何一个物理体系称得上是孤立体系的。根据物理真空的性质，我们可以从空间任何一点提取零点能，并转换成我们所需要的能量形式。原子中电子绕核转；太阳系中，行星绕太阳转，几十亿年永不停息；超导和超流现象，这些都是大自然给我们的关于能源的启示。　　我国《科技日报》于2000年4月19日刊登一篇题为《&ldquo;冷核聚变&rdquo;与新能源－真空能》的评论性文章。该文简述江兴流的提取真空能的理论和实验研究成果，认为真空能的大规模利用为人类描绘了一个美好的未来。五年过去了，如今这篇文章在互联网上成为关注能源问题的人们的点击率很高的一篇重要文章。江兴流等人撰写的论文&ldquo;瞬态涡旋动力学与非平衡体系中的异常核现象&rdquo;已被作为优秀论文收入由路甬祥为编委会主任的《中国科技发展论坛》大型文献中。　　冷核聚变现象的研究，引起社会各界人士的广泛关注。联合国秘书长安南于今年6月13日参观了N. Moller 在瑞士的冷核聚变和飘升机实验室，以及原子氢热发生器和高效能量提升技术。他热情支持这些新能源技术实验，并认为Moller的研究结果向世界表明，清洁和新形式的能源将减少环境恶化，推进可持续发展。Moller的原子氢热发生器在法国的Naudin实验室得到重复，其能量转换效率可达347%。　　意大利和日本联合提出利用冷核聚变的核嬗变现象处理核废料的建议，两年的研究经费为一千三百万欧元。此前，日本三菱重工的核嬗变实验研究结果在日本获奖。　　许多发明家很早就研制成效率大于100%的能源装置，如：美国有许多类似于水泵的效率大于1的能源装置，已经申请专利（US Patent:5188090,5279262），但由于不能解释其机制，得不到科学界的承认而不能推广。还有许多类似的例子，或由于技术不成熟，或造价太高, 或发明家本人过于追求经济利益而不能产业化。美国黑光能源公司R.L. Mills研制的镍/钛电解系统，热效率可达850%,曾吸引到2000万美元的投资。他用新的氢氧化物和聚合态理论解释过量熵的出现，遭到以诺贝尔奖得主P. Anderson等人的反对。由于学术上的争执导致商业利益的损失，引起了法律诉讼。Nature杂志曾以&ldquo;新氢能挑战怀疑主义（New form of hydrogen power provokes skepticism）&rdquo;为标题报道了这件事。由此可见，阐明物理机制，进行科普宣传，得到广泛认同，是重要的。国外有许多学术杂志对零点能研究进行宣传报道，如Journal of New Energy, Infinite Energy, New Energy Times，New Energy Technologies等。．The 12th International Conference on Condensed Matter Nuclear Science (ICCF-12)。This conference takes place on Nov. 27 - Dec. 2, 2005. Please note that a new location has been selected: Shin Yokohama Prince Hotel, in Yokohama, Japan.4．The 2005 Cold Fusion Colloquium at Massachusetts Institute of Technology。5． 2005 ExtraOrdinary Technology Conference(July 28, 2005 - July 31, 2005)。6． RCCNT&amp;BL-13(September 15, 2005 - September 22, 2005)。 结语　　所有的物理现象都与真空有关，而真空是巨大的能量涨落的海，通过动态卡西米尔效应和挠场相干可以从空间的任何一点提取能量。关于宇宙具有的全息性质，量子隐形传态，量子纠缠和非定域性，以及物质、能量、时空之间的相互转换关系的认识，使我们对大自然的认识深化了。据此，我们可以探索许多未知领域，为解决能源、通讯、材料、生物医学等学科中的问题，提供新思路。有人认为，二十一世纪是真空工程的世纪，物理学的发展趋势是研究宏观宇宙和微观粒子相结合，研究自旋及由自旋产生的挠场的性质，利用零点能，开发零点能。为了加速零点能的相关产业的开发过程，需要科学家，发明家和投资者联手做好信息、科普、研发和产业化的工作。可以预期，率先开发洁净廉价的真空零点能能源，建立分布式的能源网点，将使我们在二十一世纪经济发展中成为最大的赢家。</p> <a href="http://hi.baidu.com/weolar/blog/item/4c6cd643c73bd01e72f05d12.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/weolar/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/weolar/blog/item/4c6cd643c73bd01e72f05d12.html#comment">查看评论</a>]]></description>
        <pubDate>2010-06-04  21:50</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[weolar]]></author>
		<guid>http://hi.baidu.com/weolar/blog/item/4c6cd643c73bd01e72f05d12.html</guid>
</item>


</channel>
</rss>
