<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 403, comments - 310, trackbacks - 0, articles - 7
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    2008年4月17日

    http://blog.yxwang.me/

    posted @ 2009-12-30 09:48 ZelluX 閱讀(470) | 評(píng)論 (0)編輯 收藏

    寫(xiě)了好幾天的代碼因?yàn)檫€有bug沒(méi)de掉,沒(méi)commit到svn上

    然后不知怎么的在make的時(shí)候生成的kernel沒(méi)變化,于是直接make world,然后發(fā)現(xiàn)linux kernel目錄被清空了。。。

    只能明天靠記憶慢慢補(bǔ)了,皚皚。

    posted @ 2009-04-02 01:38 ZelluX 閱讀(893) | 評(píng)論 (3)編輯 收藏

    yifanw大牛半個(gè)月前發(fā)在c++版上的,怕以后忘了看先放在這備個(gè)忘吧

    白話入門
    http://www.newsmth.net/bbscon.php?bid=335&id=250203

    白話解決方案
    http://www.newsmth.net/bbscon.php?bid=335&id=250237

    白話參考文獻(xiàn)
    http://www.newsmth.net/bbscon.php?bid=335&id=250260

    posted @ 2009-03-25 22:14 ZelluX 閱讀(845) | 評(píng)論 (2)編輯 收藏

    最近有點(diǎn)忙,今天總算在某個(gè)課題deadline前把論文憋出來(lái)交上去了。跑這兒來(lái)推薦兩篇上個(gè)月看到的比較有意思的paper,都比較偏理論,也很老。

    今天寫(xiě)介紹下第一篇,劍橋大學(xué)的A Logic of Authentication,中了SOSP '89,整理后發(fā)在1990年的ACM Transactions on Computer Systems上。
    http://www.csie.fju.edu.tw/~yeh/research/papers/os-reading-list/burrows-tocs90-logic.pdf

    (另一篇是Safe Kernel Extensions Without Run-Time Checking,改天再寫(xiě)點(diǎn)介紹)

    這篇paper的主要工作是通過(guò)構(gòu)造一種多種類的模態(tài)邏輯(many-sorted model logic),來(lái)檢查網(wǎng)絡(luò)中驗(yàn)證協(xié)議的安全性。

    基礎(chǔ)的邏輯分三部分:
    原語(yǔ),如驗(yàn)證雙方A和B,以及服務(wù)器S,下文用P Q R泛指
    密鑰,如K_ab代表a和b之間的通訊密鑰,K_a代表a的公鑰,{K_a}^{-1}代表對(duì)應(yīng)的私鑰,下文用K泛指
    公式(或者陳述),用N_a, N_b等表示,下文用X Y泛指

    接下來(lái)定義以下約定(constructs)
    P 信任 X: 原語(yǔ)P完全信任X
    P 看到 X: 有人發(fā)送了一條包含X的信息給P,P可以閱讀它或者重復(fù)它(當(dāng)然通常是在做了解密操作后)
    P 說(shuō)了 X: 原語(yǔ)P發(fā)送過(guò)一條包含X的信息,同時(shí)也可以確定P是相信X的正確性的
    P 控制 X: P可以判定X的正確與否。例如生成密鑰的服務(wù)器通常被默認(rèn)為擁有對(duì)密鑰質(zhì)量的審核權(quán)。
    X 是新鮮的: 在此之前X沒(méi)有被發(fā)送過(guò)。這個(gè)事實(shí)可以通過(guò)綁定一個(gè)時(shí)間戳或者其他只會(huì)使用一次的標(biāo)記來(lái)證明。
    P <-K-> Q: P和Q可以通過(guò)共享密鑰K進(jìn)行通訊,且這個(gè)K是好的,即不會(huì)被P Q不信任的原語(yǔ)知道。
    K-> P: P擁有K這么一個(gè)公鑰,且它對(duì)應(yīng)的解密密鑰K^{-1}不會(huì)被其他不被P信任的原語(yǔ)知道。
    P <=X=> Q: X是一個(gè)只被P和Q或者P和Q共同信任的原語(yǔ)知道的陳述,只有P和Q可以通過(guò)X來(lái)相互證明它們各自的身份,X的一個(gè)例子就是密碼。
    {X}_K: X是一個(gè)被K加密了的陳述
    <X>_Y: 陳述X被Y所綁定,Y可以用來(lái)證明發(fā)送X的人的身份

    好了,總算把這些約定列完了,然后來(lái)看看通過(guò)這些約定能推出一些什么東東:
    如果 P 相信 (P <-K-> Q), 且 P 看到 {X}_K,那么 P 相信 Q 說(shuō)了 X。
    這個(gè)例子很簡(jiǎn)單,既然P Q有安全的密鑰K,那么P看到通過(guò)K加密后的X肯定認(rèn)為就是Q發(fā)出的。

    又比如,
    如果 P 相信 Q 控制 X,P 相信 (Q 相信 X),那么 P 相信 X
    也很容易理解,既然 P 相信 Q 的判斷,那么 Q 相信什么 P 自然也就相信了。

    再舉一個(gè)例子
    如果 P 相信 Y 是新鮮的,那么 P 相信 (X, Y) 也是新鮮的。
    這里(X, Y)表示 X 和 Y 的簡(jiǎn)單拼接,也很容易理解,既然 Y 之前沒(méi)出現(xiàn)過(guò),那么 X 和 Y 的組合自然也沒(méi)出現(xiàn)過(guò)。

    一個(gè)協(xié)議要被定義為安全,最起碼要滿足
    A 相信 A <-K->B,B 相信 A <-K->B
    即雙方要互相信任密鑰是安全的

    再健壯一點(diǎn)的協(xié)議,還要滿足
    A 相信 (B 相信 (A 相信 A <-K->B)),反之一樣
    即A B不僅相信密鑰,也相信對(duì)方相信自己對(duì)密鑰的信任。

    有了這些簡(jiǎn)單卻強(qiáng)大的工具后,接下來(lái)這篇paper開(kāi)始著手分析一些協(xié)議,包括Kerberos協(xié)議,Andrew Secure RPC 握手協(xié)議等,還指出了其中的一些問(wèn)題和改進(jìn)措施,例如CCITT X.509 協(xié)議中可以通過(guò)重復(fù)發(fā)送一條老的信息來(lái)模仿成加密雙方中的一員。

    具體的分析不貼上來(lái)了,一方面對(duì)于我這個(gè)不熟悉TeX的人來(lái)說(shuō)碼公式實(shí)在麻煩,另一方面我實(shí)在困死了 =_=

    建議有興趣的朋友好好看看這篇經(jīng)典paper

    posted @ 2009-03-18 03:10 ZelluX 閱讀(2513) | 評(píng)論 (0)編輯 收藏

    Some notes on lock-free and wait-free algorithms

    http://www.audiomulch.com/~rossb/code/lockfree/

    ?

    NOBLE - a library of non-blocking synchronization protocols

    http://www.cs.chalmers.se/~noble/

    ?

    An optimistic approach to lock-free FIFO queues (Distributed Computing 2008)

    http://people.csail.mit.edu/edya/publications/OptimisticFIFOQueue-journal.pdf

    ?

    High performance dynamic lock-free hash tables and list-based sets

    http://portal.acm.org/citation.cfm?id=564870.564881

    ?

    Concurrent Programming Without Locks

    http://www.cl.cam.ac.uk/research/srg/netos/papers/2007-cpwl.pdf

    ?

    Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms

    http://www.research.ibm.com/people/m/michael/podc-1996.pdf

    posted @ 2009-03-17 20:48 ZelluX 閱讀(2728) | 評(píng)論 (0)編輯 收藏

    抓抓大牛的博客(http://www.cnblogs.com/JeffreyZhao)上看到的鏈接,原文地址是
    http://blog.objectmentor.com/articles/2009/02/26/10-papers-every-programmer-should-read-at-least-twice

    貌似我只讀過(guò)那篇Reflections on Trusting Trust,水木的Programming版搜索作者為modico的帖子的前四篇就是介紹這篇paper的。

    先貼個(gè)列表,改天好好讀一讀
    1. On the criteria to be used in decomposing systems into modules – David Parnas
    2. A Note On Distributed Computing – Jim Waldo, Geoff Wyant, Ann Wollrath, Sam Kendall
    3. The Next 700 Programming Languages – P. J. Landin
    4. Can Programming Be Liberated from the von Neumann Style? – John Backus
    5. Reflections on Trusting Trust – Ken Thompson
    6. Lisp: Good News, Bad News, How to Win Big – Richard Gabriel
    7. An experimental evaluation of the assumption of independence in multiversion programming – John Knight and Nancy Leveson
    8. Arguments and Results – James Noble
    9. A Laboratory For Teaching Object-Oriented Thinking – Kent Beck, Ward Cunningham
    10. Programming as an Experience: the inspiration for Self – David Ungar, Randall B. Smith

    作者博客后面還新增了對(duì)它們的簡(jiǎn)要評(píng)論

    posted @ 2009-03-02 18:24 ZelluX 閱讀(782) | 評(píng)論 (0)編輯 收藏

    2009-01-08

    以前碰到這個(gè)問(wèn)題都得先重啟PieTTY然后用screen -x恢復(fù)到原來(lái)的工作界面,今天不知怎么的emacs里C-x C-s按了就掛起,只能google。

    傳說(shuō)中,早期的終端會(huì)遇到顯示字符的速度慢于接收字符的速度,為了解決這個(gè)問(wèn)題,C-s用于先掛起當(dāng)前終端,在數(shù)據(jù)傳輸之后用C-q恢復(fù)顯示。所以最簡(jiǎn)單的解決方法就是在掛起后按C-q。

    不過(guò)我的WinXP中C-q已經(jīng)和快速啟動(dòng)工具(寢室里是Turbo Launcher,實(shí)驗(yàn)室的是Launchy)綁定了,也懶得為了這么個(gè)問(wèn)題改操作習(xí)慣,于是再次google,終于找到一個(gè)一勞永逸的方法,以bash為例,在~/.bashrc中加入一行

    stty -ixoff -ixon

    即可。另外這樣設(shè)置后似乎恢復(fù)了C-s在bash中正向增量查找的功能。恩。


    posted @ 2009-02-17 12:12 ZelluX 閱讀(2145) | 評(píng)論 (0)編輯 收藏

    今年的ASPLOS '09上zhou yuanyuan也有一篇關(guān)于如何concurrent program中發(fā)現(xiàn)隱藏的atomicity violation bugs的paper,里面提到了這篇paper

    2008-11-30

    OSDI '08上MSR發(fā)的paper,針對(duì)并發(fā)編程中難以發(fā)現(xiàn)的bug問(wèn)題。

    paper的內(nèi)容主要分兩大塊。

    一是如何在發(fā)現(xiàn)bug的時(shí)候記錄下線程的運(yùn)行先后(thread interleaving),途徑是在線程API和用戶程序多寫(xiě)一層wrapper functions,這里還有一些其他的問(wèn)題,比如只記錄下了thread interleaving的話出現(xiàn)data race怎么解決等。

    另外一塊內(nèi)容是如何遍歷出給定程序運(yùn)行后所能產(chǎn)生的結(jié)果的集合,加入這個(gè)能實(shí)現(xiàn)的話那就能把所有隱藏的bug都找出來(lái)了。但是這個(gè)搜索空間很大,是 指數(shù)級(jí)的,的一個(gè)結(jié)論就是:給定一個(gè)程序有n個(gè)的線程,所有線程共完成k條指令,那么c次占先調(diào)度后線程的排列情況數(shù)的復(fù)雜度是k^{c}的,所以在實(shí)現(xiàn)遍歷代碼的時(shí)候必須有效的降低k和c的值。

    posted @ 2009-02-17 11:30 ZelluX 閱讀(631) | 評(píng)論 (0)編輯 收藏

    問(wèn)題現(xiàn)象:上校內(nèi)、一些國(guó)內(nèi)論壇時(shí)經(jīng)常出現(xiàn)連接重置(Connect reset)錯(cuò)誤,而上google baidu等網(wǎng)站卻沒(méi)什么問(wèn)題。ping那些有問(wèn)題的網(wǎng)站的結(jié)果很正常。

    google了一堆關(guān)鍵詞后終于發(fā)現(xiàn)問(wèn)題出在MTU上,至少在偶的本本上運(yùn)行
    sudo ifconfig eth1 mtu 1412
    就沒(méi)問(wèn)題了(eth1是無(wú)線網(wǎng)卡)

    p.s 多謝萬(wàn)熊? XD

    posted @ 2009-01-29 00:30 ZelluX 閱讀(883) | 評(píng)論 (2)編輯 收藏

         摘要: 發(fā)信人: linelf (水水), 信區(qū): Real_Estate
    標(biāo) 題: 蘇南經(jīng)濟(jì)模式興衰親歷記zz
    發(fā)信站: 日月光華 (2009年01月15日20:39:22 星期四)

      閱讀全文

    posted @ 2009-01-21 14:47 ZelluX 閱讀(900) | 評(píng)論 (0)編輯 收藏

    Bruce Eckel的一篇日志建議把self從方法的參數(shù)列表中移除,并把它作為一個(gè)關(guān)鍵字使用。
    http://www.artima.com/weblogs/viewpost.jsp?thread=239003

    Guido的這篇日志說(shuō)明了self作為參數(shù)是必不可少的。
    http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html

    第一個(gè)原因是保證foo.meth(arg)和C.meth(foo, arg)這兩種方法調(diào)用的等價(jià)(foo是C的一個(gè)實(shí)例),關(guān)于后者可以參見(jiàn)Python Reference Manual 3.4.2.3。這個(gè)原因理論上的意義比較大。

    第二個(gè)原因在于通過(guò)self參數(shù)我們可以動(dòng)態(tài)修改一個(gè)類的行為:

    # ?Define?an?empty?class:
    class ?C:
    pass
    ?
    # ?Define?a?global?function:
    def ?meth(myself,?arg):
    myself.val?
    = ?arg
    return ?myself.val
    ?
    # ?Poke?the?method?into?the?class:
    C.meth? = ?meth

    這樣類C就新增了一個(gè)meth方法,并且所有C的實(shí)例都可以通過(guò)c.meth(newval)調(diào)用這個(gè)方法。

    前面兩個(gè)原因或許都可以通過(guò)一些workaround使得不使用self參數(shù)時(shí)實(shí)現(xiàn)同樣的效果,但是在存在decorator的代碼中Bruce的方法存在致命的缺陷。(關(guān)于decorator的介紹可以參見(jiàn)http://www.python.org/dev/peps/pep-0318/)

    根據(jù)修飾對(duì)象,decorator分兩種,類方法和靜態(tài)方法。兩者在語(yǔ)法上沒(méi)有什么區(qū)別,但前者需要self參數(shù),后者不需要。而Python在實(shí) 現(xiàn)上也沒(méi)有對(duì)這兩種方法加以區(qū)分。Bruce日志評(píng)論中有一些試圖解決decorator問(wèn)題的方法,但這些方法都需要修改大量底層的實(shí)現(xiàn)。

    最后提到了另一種語(yǔ)法糖實(shí)現(xiàn),新增一個(gè)名為classmethod的decorator,為每個(gè)方法加上一個(gè)self參數(shù),當(dāng)然這種實(shí)現(xiàn)也沒(méi)必要把self作為關(guān)鍵字使用了。不過(guò)我覺(jué)得這么做還不如每次寫(xiě)類方法時(shí)手工加個(gè)self =_=


    posted @ 2008-11-15 19:58 ZelluX 閱讀(2536) | 評(píng)論 (2)編輯 收藏

    2008年評(píng)出了1998年最具影響力的PLDI論文,獲獎(jiǎng)?wù)撐牡淖髡邔⒎謹(jǐn)?000美元的獎(jiǎng)金(還沒(méi)一等獎(jiǎng)學(xué)金多 -_-b)

    2008 (for 1998): The Implementation of the Cilk-5 Multithreaded Language, Matteo Frigo, Charles E. Leiserson, and Keith H. Randall

    Citation

    “The 1998 PLDI paper “Implementation of the Cilk-5 Multithreaded Language” by Matteo Frigo, Charles E. Leiserson, and Keith H. Randall introduced an efficient form of thread-local deques to control scheduling of multithreaded programs. This innovation not only opened the way to faster and simpler runtimes for fine-grained parallelism, but also provided a basis for simpler parallel recursive programming techniques that elegantly extend those of sequential programming. The stack-like side of a deque acts just like a standard procedure stack, while the queue side enables breadth-first work-stealing by other threads. The work-stealing techniques introduced in this paper are beginning to influence common practice, such as the Intel Threading Building Blocks project, an upcoming standardized fork-join framework for Java, and a variety of projects at Microsoft.”

    另外前幾年的獲獎(jiǎng)paper有:
    2007 (for 1997): Exploiting Hardware Performance Counters with Flow and Context Sensitive Profiling, Glenn Ammons, Thomas Ball, and James R. Larus

    2006 (for 1996): TIL: A Type-Directed Optimizing Compiler for ML, David Tarditi, Greg Morrisett, Perry Cheng, Christopher Stone, Robert Harper, and Peter Lee

    2005 (for 1995): Selective Specialization for Object-Oriented Languages, Jeffrey Dean, Craig Chambers, and David Grove

    2004 (for 1994): ATOM: a system for building customized program analysis tools, Amitabh Srivastava and Alan Eustace

    2003 (for 1993): Space Efficient Conservative Garbage Collection, Hans Boehm

    2002 (for 1992): Lazy Code Motion, Jens Knoop, Oliver Rüthing, Bernhard Steffen.

    2001 (for 1991): A data locality optimizing algorithm, Michael E. Wolf and Monica S. Lam.

    2000 (for 1990): Profile guided code positioning, Karl Pettis and Robert C. Hansen.

    posted @ 2008-10-17 20:08 ZelluX 閱讀(534) | 評(píng)論 (2)編輯 收藏

    兩者配合,更完美的知識(shí)管理方案

    http://hi.baidu.com/qq303520912/blog/item/de5cba082db83e36e924889e.html

    Endnote是目前國(guó)內(nèi)科研人員使用最多的文獻(xiàn)管理軟件,功能最完備,各數(shù)據(jù)庫(kù)或大學(xué)圖書(shū)館等和它的兼容也是最好。它的Filter和style 也最為豐富,而且可以自己創(chuàng)建修改。看看周圍的人,大部分都是Endnote的用戶。   Zotero作為一個(gè)新的文件管理系統(tǒng),與Endnote相比還是稚嫩了些,特別對(duì)于國(guó)內(nèi)數(shù)據(jù)庫(kù)的支持不佳,更是限制了它的應(yīng)用。

    不過(guò),Zotero作為Firefox瀏覽器的插件,還是有一些特別之處。

    第一,便攜。Firefox是有Portable版本的,當(dāng)然Zotero也就是Portable了,也就是說(shuō)可以把火狐和Zotero放到U盤里,在任何一臺(tái)電腦上都可以 使用。而Endnote就沒(méi)有這么方便了。

    第二,便利。使用電腦時(shí),我們使用瀏覽器的時(shí)間要大大多于Endnote的時(shí)間,遇到有用的文獻(xiàn)、網(wǎng)頁(yè)或者需要做筆記,直接使用Zotero更加省時(shí)省力。而且它自動(dòng)收集網(wǎng)頁(yè)中文獻(xiàn)信息的功能也大大方便了操作。

    第三, 分享。EndnoteX以后可以把一個(gè)library發(fā)送成一個(gè)檔案文件(.enlx),使得文獻(xiàn)交換更為方便。不過(guò)有時(shí)我們只需要幾條文獻(xiàn)時(shí),這樣操作 就大動(dòng)干戈了。當(dāng)然Endnote也支持所選部分文獻(xiàn)的導(dǎo)出,但這樣有不能夠?qū)С龈郊▓D片、PDF等(此處為個(gè)人經(jīng)驗(yàn),是否Endnote也能導(dǎo)出 附件來(lái)還望您不吝賜教)。而Zotero就可以實(shí)現(xiàn)某條文獻(xiàn)所有內(nèi)容(題錄、筆記、附件)的全部導(dǎo)出,而且可以為另一Zotero用戶所完整接受。

    第四,跟蹤文獻(xiàn)的收集。很多數(shù)據(jù)都支持檢索式或者引文的提醒,會(huì)隨時(shí)把新的內(nèi)容發(fā)送到郵箱或者以RSS的形式發(fā)布。一般來(lái)說(shuō),查看這些都需要瀏覽器。有了Zotero,我們可以在查看的同時(shí)收集下有用的文獻(xiàn)信息。

    Zotero更適合于在日常工作、學(xué)習(xí)甚至娛樂(lè)時(shí)使用,而Endnote更適合在有明確目的時(shí)使用。有人說(shuō)Zotero更像“知識(shí)管理軟件”, 而 Endnote就是為文獻(xiàn)服務(wù)的。兩者可以實(shí)現(xiàn)互補(bǔ),在日常工作中使用Zotero收集零散的資料,積累一定量之后將文獻(xiàn)信息導(dǎo)入到Endnote中,使 用Endnote管理、引用文獻(xiàn)信息。至于PDF、圖片等附件的管理,我還是建議使用Zotero,方便且可以完整導(dǎo)出。

    下面談一下Zotero和Endnote中文獻(xiàn)的互相導(dǎo)入。

    Zotero導(dǎo)入Endnote:
    1 選定文獻(xiàn),右鍵點(diǎn)選”export selected items”;如果是導(dǎo)入整個(gè)Library或者cellection可在相應(yīng)圖標(biāo)上右鍵點(diǎn)選;
    2 在彈出的對(duì)話框中選擇導(dǎo)出的格式為”Refer/BibIX”, 選擇文件目錄,保存文件,格式為.txt;
    3 在Endnote中打開(kāi)一個(gè)library,執(zhí)行“files-import”;
    4 在對(duì)話框中選擇剛才的.txt文件, Impott Option選Refer/BibIX,Text Translation選Unicode(UTF-8)。點(diǎn)確定后即可導(dǎo)入。

    Endnote導(dǎo)入Zotero:
    1 選擇文獻(xiàn)后,執(zhí)行“files-export”;
    2 選擇Output Style為Endnote Export,命名后導(dǎo)入,得到.txt文件。
    3 在Zotero中執(zhí)行“actions-import” ,選擇得到的文件,點(diǎn)確定即可導(dǎo)入。
    上述導(dǎo)入方式僅能實(shí)現(xiàn)文獻(xiàn)題錄的導(dǎo)入。

    posted @ 2008-10-17 20:07 ZelluX 閱讀(8778) | 評(píng)論 (0)編輯 收藏

    BBS上的一個(gè)帖子,問(wèn)題是
    def?a():
    ????
    def?b():
    ????????x?
    +=?1
    ?
    ????x?
    =?1
    ????
    print?"a:?",?x
    ????b()
    ????
    print?"b:?",?x
    ?
    def?c():
    ????
    def?d():
    ????????x[0]?
    =?[4]
    ????x?
    =?[3]
    ????
    print?"c:?",?x[0]
    ????d()
    ????
    print?"d:?",?x[0]

    運(yùn)行a()會(huì)報(bào)UnboundLocalError: local variable ‘x’ referenced before assignment
    但是運(yùn)行c()會(huì)正確地顯示3和4。

    原因在于原因在于CPython實(shí)現(xiàn)closure的方式和常見(jiàn)的functional language不同,采用了flat closures實(shí)現(xiàn)。

    “If a name is bound anywhere within a code block, all uses of the name within the block are treated as references to the current block.”

    在第一個(gè)例子中,b函數(shù)x += 1對(duì)x進(jìn)行賦值,rebind了這個(gè)對(duì)象,于是Python查找x的時(shí)候只會(huì)在local environment中搜索,于是就有了UnboundLocalError。

    換句話說(shuō),如果沒(méi)有修改這個(gè)值,比如b中僅僅簡(jiǎn)單的輸出了x,程序是可以正常運(yùn)行的,因?yàn)榇藭r(shí)搜索的范圍是nearest enclosing function region。

    而d方法并沒(méi)有rebind x變量,只是修改了x指向的對(duì)象的值而已。如果把賦值語(yǔ)句改成x = [4],那么結(jié)果就和原來(lái)不一樣了,因?yàn)榇藭r(shí)發(fā)生了x的rebind。

    所以Python中的closure可以理解為是只讀的。

    另外第二個(gè)例子也是這篇文章中提到的一種workaround:把要通過(guò)inner function修改的變量包裝到數(shù)組里,然后在inner function中訪問(wèn)這個(gè)數(shù)組。

    至于為什么Python中enclosed function不能修改enclosing function的binding,文中提到了主要原因還是在于Guido反對(duì)這么做。因?yàn)檫@樣會(huì)導(dǎo)致本應(yīng)該作為類的實(shí)例保存的對(duì)象被聲明了本地變量。

    參考網(wǎng)站:http://www.python.org/dev/peps/pep-0227/


    posted @ 2008-10-17 20:06 ZelluX 閱讀(509) | 評(píng)論 (0)編輯 收藏

    acm queue 9月的雜志的主題是The Concurrency Problem,力推了Erlang這個(gè)語(yǔ)言,其中有篇文章簡(jiǎn)單的介紹了下這個(gè)message-oriented語(yǔ)言。

    查了下這個(gè)名字的讀法,正確的讀法應(yīng)該是air-lang,這里元音a的發(fā)音和bang中的a一樣。

    文章中的第一個(gè)程序就有點(diǎn)令人費(fèi)解,主要原因在于Erlang的語(yǔ)法和一般的imperative language差別很大,和functional language比較類似,但是本質(zhì)上也有很大的不同。

    以Java的一個(gè)計(jì)數(shù)程序?yàn)槔?br />
    //?A?shared?counter.
    public?class?Sequence?{
    ????
    private?int?nextVal?=?0;
    ?
    ????
    //?Retrieve?counter?and?increment.
    ????public?synchronized?int?getNext()?{
    ????????
    return?nextVal++;
    ????}
    ?
    ????
    //?Re-initialize?counter?to?zero.
    ????public?synchronized?void?reset()?{
    ????????nextVal?
    =?0;
    ????}
    }

    這個(gè)程序的功能不用多說(shuō)了,一個(gè)同步的計(jì)數(shù)程序。它的Erlang翻譯版的代碼為

    -module(sequence1).
    -export([make_sequence/0, get_next/1, reset/1]).
    ?
    % Create a new shared counter.
    make_sequence() ->
    spawn(fun() -> sequence_loop(0)end).
    ?
    sequence_loop(N) ->
    receive
    {From, get_next} ->
    From!{self(), N},
    sequence_loop(N + 1)<SEMI>
    reset ->
    sequence_loop(0)
    end.
    ?
    % Retrieve counter and increment.
    get_next(Sequence) ->
    Sequence!{self(), get_next},
    receive
    {Sequence, N} -> N
    end.
    ?
    % Re-initialize counter to zero.
    reset(Sequence) ->
    Sequence! reset.

    初看這個(gè)程序自然是一頭霧水,不過(guò)程序的函數(shù)式風(fēng)格味還是很濃的。

    前面提到,Erlang是基于message的,或者說(shuō)message sending機(jī)制是包含在語(yǔ)言系統(tǒng)內(nèi)部的,語(yǔ)法就是 pid ! message

    接下來(lái)再來(lái)分析這個(gè)簡(jiǎn)單的程序。開(kāi)頭兩行是模塊和函數(shù)聲明,略去。make_sequence開(kāi)始這個(gè)進(jìn)程,spawn/1內(nèi)置函數(shù)創(chuàng)建一個(gè)新的進(jìn)程,并返回pid到調(diào)用者。

    初始時(shí)運(yùn)行的函數(shù)是sequence_loop(0),這個(gè)函數(shù)接收兩種信息,用receive表達(dá)式聲明:如果收到形式是{From, get_next}的信息,就返回當(dāng)前的N并調(diào)用sequence_loop(N+1),這樣下一次收到同樣的信息時(shí)就能返回N+1了;reset則等價(jià) 于Java版本中的n=0語(yǔ)句。

    get_next/1則是發(fā)送給pid為Sequence的進(jìn)程 {self(), get_next} 這樣一個(gè)信息,上面解釋的sequence_loop/1函數(shù)收到這個(gè)信息后會(huì)返回一個(gè) {self(), N} 的tuple給get_next/1,收到這個(gè)信息后get_next/1就能返回N這個(gè)值了。

    最后reset/1函數(shù)則是發(fā)送給Sequence一個(gè)reset信息。

    這個(gè)簡(jiǎn)單的程序里能大致窺見(jiàn)一些Erlang的特點(diǎn),尤其是它基于信息發(fā)送的本質(zhì)。

    posted @ 2008-10-17 20:05 ZelluX 閱讀(1901) | 評(píng)論 (0)編輯 收藏

    09月 18, 2008
    第一個(gè)testkernel在Xen中的載入

    The Definitive Guide to Xen中第二章的例子,make成功后運(yùn)行xen create domain_config,報(bào)錯(cuò)
    Error: (2, ‘Invalid kernel’, ‘xc_dom_compat_check: guest type xen-3.0-x86_32 not supported by xen kernel, sorry\n’)

    google之后發(fā)現(xiàn)是虛擬機(jī)類型設(shè)置的問(wèn)題,運(yùn)行xm info可以看到
    xen_caps : xen-3.0-x86_32p
    末尾的p表示Xen內(nèi)核開(kāi)啟了PAE模式,所以載入的kernel也必須開(kāi)啟PAE,在bootstrap.x86_32.S中加入PAE=yes選項(xiàng)即可。

    09月 25, 2008
    DomainU中調(diào)用do_console_io

    The Definitive Guide to Xen第二章的Exercise,通過(guò)調(diào)用hypercall page中的console_io項(xiàng)輸出Hello World。

    void?start_kernel(start_info_t?*?start_info)
    {
    ????HYPERVISOR_console_io(CONSOLEIO_write,
    12,"Hello?World\n");
    ????
    while(1);
    }


    但是默認(rèn)選項(xiàng)編譯和啟動(dòng)的Xen是不會(huì)保留DomainU中輸出的信息。參考drivers/char/console.c,可以看到主要有兩個(gè)選項(xiàng)控制了DomainU的do_console_io輸出:

    #ifndef?VERBOSE
    ????
    /*?Only?domain?0?may?access?the?emergency?console.?*/
    ????
    if?(?current-&gt;domain-&gt;domain_id?!=?0?)
    ????????
    return?-EPERM;
    #endif

    if?(?opt_console_to_ring?)
    {
    ????
    for?(?kptr?=?kbuf;?*kptr?!=?'\0';?kptr++?)
    ????????putchar_console_ring(
    *kptr);
    ????send_guest_global_virq(dom0,?VIRQ_CON_RING);
    }


    VERBOSE選項(xiàng)可以在編譯Xen的時(shí)候開(kāi)啟debug選項(xiàng),而opt_console_to_ring則是一個(gè)啟動(dòng)選項(xiàng),在grub的啟動(dòng)選項(xiàng)中增加loglvl=all guest_loglvl=all console_to_ring即可。

    重啟Xen后就能通過(guò)xm dmesg看到Hello World了。

    09月 25, 2008
    Xen: Remove support for non-PAE 32-bit

    看來(lái)我還是用Xen 3.1吧 = =

    Subject: [Xen-devel] [PATCH] xen: remove support for non-PAE 32-bitLink to this message
    From: Jeremy Fitzhardinge (jer…@goop.org)
    Date: 05/09/2008 04:05:34 AM
    List: com.xensource.lists.xen-devel

    Non-PAE operation has been deprecated in Xen for a while, and is rarely tested or used. xen-unstable has now officially dropped non-PAE support. Since Xen/pvops’ non-PAE support has also been broken for a while, we may as well completely drop it altogether.

    10月 07, 2008
    IA-32 Memory Virtualization
    http://www.intel.com/technology/itj/2006/v10i3/3-xen/4-extending-with-intel-vt.htm
    o_figure_3.gif
    上圖為full virtulization的情況,即不修改Guest OS的行為時(shí)的解決方案。Xen為每個(gè)Guest OS維護(hù)了一張shadow page table,其中映射的地址為machine address。一種比較高效的方案是設(shè)置Guest OS的page table為只讀,當(dāng)Guest OS試圖修改這個(gè)虛擬頁(yè)表時(shí),發(fā)生page fault被Xen截獲,Xen修改shadow page table中相應(yīng)的數(shù)據(jù)(把pseudo-physical address轉(zhuǎn)化成machine address)。另外一個(gè)優(yōu)化是guest page table被修改時(shí)不修改shadow page table,只是把它放到一個(gè)待更新列表中,等Guest OS執(zhí)行了刷新tlb的指令后再一次性更新。

    The Definitive Guide to Xen上還提到了另一種基于full paravirtulization和shadow page table之間的方案。Xen把Guest OS的page table置為只讀,當(dāng)Guest OS試圖修改page table時(shí),Xen捕獲到page fault,把page directory中對(duì)應(yīng)的入口置為無(wú)效,再把page table改成可寫(xiě)讓Guest OS修改。由于page directory中對(duì)應(yīng)的入口被設(shè)成無(wú)效了,下次訪問(wèn)該地址時(shí)還是會(huì)發(fā)生page fault,這時(shí)候Xen再修改page directory和page table的對(duì)應(yīng)項(xiàng)就行了。

    這種方法意味著Guest OS中內(nèi)核管理模塊直接和machine address打交道,而其他部分則仍然使用pseudo-physical address。另外這種情況下page directory不能被Guest OS修改。

    另外Xen還用到了段機(jī)制,用來(lái)為Xen保留地址空間開(kāi)始的64M內(nèi)存。

    posted @ 2008-10-17 20:01 ZelluX 閱讀(1437) | 評(píng)論 (6)編輯 收藏

    好不容易找到的一個(gè)php,直接貼這兒了,方便其他網(wǎng)友。
    wordpress的wp-syntax插件用的也是geshi,所以同樣也適用于wp-syntax

    <?php
    /*************************************************************************************
    ?*?erlang.php
    ?*?--------
    ?*?Author:?Uwe?Dauernheim?(uwe@dauernheim.net)
    ?*?Copyright:?(c)?2008?Uwe?Dauernheim?(http://www.kreisquadratur.de/)
    ?*?Release?Version:?1\.0\.0
    ?*?Date?Started:?2008-09-27
    ?*
    ?*?Erlang?language?file?for?GeSHi.
    ?*
    ?*?CHANGES
    ?*?-------
    ?*?2008-09-27?(1.0.0)
    ?*???[?]?First?Release
    ?*
    ?*?2008-09-28?(1.0.0.1)
    ?*???[!]?Bug?fixed?with?keyword?module.
    ?*???[+]?Added?more?function?names???
    ?*
    ?*?TODO?(updated?2008-09-27)
    ?*?-------------------------
    ?*???[!]?Stop?';'?from?being?transformed?to?'<SEMI>'
    ?*?
    ?***********************************************************************************
    */

    $language_data?=?array?(
    ????
    'LANG_NAME'?=>?'Erlang',
    ????
    'COMMENT_SINGLE'?=>?array(1?=>?'%'),
    ????
    'CASE_KEYWORDS'?=>?GESHI_CAPS_NO_CHANGE,
    ????
    'QUOTEMARKS'?=>?array('"'),
    ????
    'HARDQUOTE'?=>?array("'",?"'"),?
    ????
    'HARDESCAPE'?=>?array('\\\'',),?
    ????
    'ESCAPE_CHAR'?=>?'\\',
    ????
    'KEYWORDS'?=>?array(
    ????????1?=>?array(
    ????????????
    'module',?'export',?'import',?'author',?'behaviour'
    ????????????),
    ????????2?=>?array(
    ????????????
    'case',?'of',?'if',?'end',?'receive',?'after'
    ????????????),
    ????????3?=>?array(
    ????????????//?erlang
    ????????????
    'set_cookie',?'get_cookie',?
    ????????????//?io
    ????????????
    'format',?'fwrite',?'fread',?
    ????????????//?gen_tcp
    ????????????
    'listen',?'accept',?'close',?
    ????????????//?gen_server
    ????????????
    'call',?'start_link'
    ????????????)
    ????????),
    ????
    'SYMBOLS'?=>?array(
    ????????
    ':',?'=',?'!',?'|'
    ????????),
    ????
    'CASE_SENSITIVE'?=>?array(
    ????????GESHI_COMMENTS?=>?false,
    ????????1?=>?true,
    ????????2?=>?true,
    ????????3?=>?true
    ????????),
    ????
    'STYLES'?=>?array(
    ????????
    'KEYWORDS'?=>?array(
    ????????????1?=>?
    'color:?#b1b100;',
    ????????????2?=>?'color:?#b1b100;',
    ????????????
    3?=>?'color:?#000066;'
    ????????????)
    ,
    ????????
    'COMMENTS'?=>?array(
    ????????????
    1?=>?'color:?#666666;?font-style:?italic;',
    ????????????
    2?=>?'color:?#009966;?font-style:?italic;',
    ????????????
    3?=>?'color:?#0000ff;',
    ????????????
    4?=>?'color:?#cc0000;?font-style:?italic;',
    ????????????
    5?=>?'color:?#0000ff;',
    ????????????
    'MULTI'?=>?'color:?#666666;?font-style:?italic;'
    ????????????)
    ,
    ????????
    'ESCAPE_CHAR'?=>?array(
    ????????????
    0?=>?'color:?#000099;?font-weight:?bold;',
    ????????????
    'HARD'?=>?'color:?#000099;?font-weight:?bold;'
    ????????????)
    ,
    ????????
    'BRACKETS'?=>?array(
    ????????????
    0?=>?'color:?#009900;'
    ????????????)
    ,
    ????????
    'STRINGS'?=>?array(
    ????????????
    0?=>?'color:?#ff0000;',
    ????????????
    'HARD'?=>?'color:?#ff0000;'
    ????????????)
    ,
    ????????
    'NUMBERS'?=>?array(
    ????????????
    0?=>?'color:?#cc66cc;'
    ????????????)
    ,
    ????????
    'METHODS'?=>?array(
    ????????????
    1?=>?'color:?#006600;',
    ????????????
    2?=>?'color:?#006600;'
    ????????????)
    ,
    ????????
    'SYMBOLS'?=>?array(
    ????????????
    0?=>?'color:?#339933;'
    ????????????)
    ,
    ????????
    'REGEXPS'?=>?array(
    ????????????
    0?=>?'color:?#0000ff;',
    ????????????
    4?=>?'color:?#009999;',
    ????????????)
    ,
    ????????
    'SCRIPT'?=>?array(
    ????????????)
    ????????)
    ,
    ????
    'URLS'?=>?array(
    ????????
    1?=>?'',
    ????????
    2?=>?'',
    ????????
    3?=>?'http://www.erlang.org/doc/man/{FNAMEL}.html'
    ????????)
    ,
    ????
    'OOLANG'?=>?true,
    ????
    'OBJECT_SPLITTERS'?=>?array(
    ????????
    1?=>?'-&gt;',
    ????????
    2?=>?':'
    ????????)
    ,
    ????
    'REGEXPS'?=>?array(
    ????????
    //?Variable
    ????????0?=>?'[A-Z][_a-zA-Z0-9]*',
    ????????
    //?File?Descriptor
    ????????4?=>?'&lt;[a-zA-Z_][a-zA-Z0-9_]*&gt;'
    ????????)
    ,
    ????
    'STRICT_MODE_APPLIES'?=>?GESHI_NEVER,
    ????
    'TAB_WIDTH'?=>?4
    );

    ?>

    posted @ 2008-10-16 20:36 ZelluX 閱讀(437) | 評(píng)論 (0)編輯 收藏

    http://www.codeproject.com/KB/work/FontSurvey.aspx

    主要的衡量標(biāo)準(zhǔn)是可讀性、是否等寬、特殊字符的辨認(rèn)度(比如0和O)

    posted @ 2008-10-13 18:26 ZelluX 閱讀(1278) | 評(píng)論 (1)編輯 收藏

    依然是內(nèi)網(wǎng)日志的匯總

    1. sysenter的介紹
    http://www.codeguru.com/cpp/w-p/system/devicedriverdevelopment/article.php/c8223

    System Call Optimization with the SYSENTER Instruction
    by John Gulbrandsen
    Windows下的

    2. The SLUB allocator
    slab的改進(jìn)版本

    http://lwn.net/Articles/229984/

    http://lwn.net/Articles/229096/

    Christoph’s response is the SLUB allocator, a drop-in replacement for the slab code. SLUB promises better performance and scalability by dropping most of the queues and related overhead and simplifying the slab structure in general, while retaining the current slab allocator interface.

    Wider use may be in the cards: the SLUB allocator is in the -mm tree now and could hit the mainline as soon as 2.6.22. The simplified code is attractive, as is the claimed 5-10% performance increase. If merged, SLUB is likely to coexist with the current slab allocator (and the SLOB allocator intended for small systems) for some time. In the longer term, the current slab code may be approaching the end of its life.

    3. Compilers and More: Parallel Programming Made Easy?
    http://www.hpcwire.com/features/Compilers_and_More_Parallel_Programming_Made_Easy.html

    by Michael Wolfe, Compiler Engineer, The Portland Group, Inc.

    4. OpenCL slides, SIGGRAPH '08
    發(fā)信人: jjgod (while(!asleep()) sheep++;), 信區(qū): CSArch
    標(biāo)? 題: SIGGRAPH 08 上的 OpenCL slides
    發(fā)信站: 水木社區(qū) (Mon Sep 15 01:32:03 2008), 站內(nèi)

    ※ 來(lái)源:·水木社區(qū) newsmth.net·[FROM: 125.33.176.*]

    附件: munshi-opencl.pdf (1338 KB) 鏈接:
    http://att.newsmth.net/att.php?p.272.35430.226.pdf
    全文鏈接:http://www.newsmth.net/bbscon.php?bid=272&id=35430

    5. linux-gate.so
    http://www.trilithium.com/johan/2005/08/linux-gate/
    linux下使用sysenter的機(jī)制

    posted @ 2008-10-10 15:29 ZelluX 閱讀(488) | 評(píng)論 (0)編輯 收藏

    轉(zhuǎn)自偶的內(nèi)網(wǎng)博客

    Time : 2008-08-20 21:44
    匯編文件中導(dǎo)出函數(shù)符號(hào)

    Linux 2.4.18的linux/linkage.h文件定義了若干相關(guān)的宏

    #define?SYMBOL_NAME(X)?X
    #ifdef?__STDC__
    #define?SYMBOL_NAME_LABEL(X)?X##:
    #else
    #define?SYMBOL_NAME_LABEL(X)?X/**/:
    #endif
    ?
    #define?__ALIGN?.align?16,0x90
    #define?__ALIGN_STR?".align?16,0x90"
    ?
    #define?ALIGN?__ALIGN
    #define?ALIGN_STR?__ALIGN_STR
    ?
    #define?ENTRY(name)?\
    ??.globl?SYMBOL_NAME(name);?\
    ??ALIGN;?\
    ??SYMBOL_NAME_LABEL(name)

    用ENTRY(name)就能定義函數(shù)了。后來(lái)發(fā)現(xiàn)Flux OSKit中本來(lái)就提供了類似功能的宏,定義在inc/asm.h中。
    使用的時(shí)候需要再寫(xiě)一個(gè)c語(yǔ)言的wrapper function(至少2.4.18里面是這么做的)
    asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");

    Time : 2008-08-22 15:56
    OS Lab 4 debugging notes [1]
    系統(tǒng)調(diào)用 fork()

    用Simics跟蹤一條條匯編分析頁(yè)表映射、寄存器值還真是體力活啊。。

    1. 實(shí)現(xiàn)Copy On Write時(shí),如果某一個(gè)用戶態(tài)頁(yè)面有多個(gè)進(jìn)程共享,其中一個(gè)進(jìn)程修改該頁(yè)面時(shí)需要?jiǎng)?chuàng)建一個(gè)新的頁(yè)面。一開(kāi)始偶忘了把原來(lái)頁(yè)面的內(nèi)容復(fù)制到新的頁(yè)面了 =_= 另外由于新的頁(yè)面要代替老的頁(yè)面,或者說(shuō)它們的物理地址不同,但虛擬地址相同,我的方法是在內(nèi)核態(tài)開(kāi)辟一個(gè)大小為一個(gè)頁(yè)面的空間作為中轉(zhuǎn)。

    2. do_fork函數(shù)中,子進(jìn)程復(fù)制父進(jìn)程的頁(yè)表的同時(shí)會(huì)把父進(jìn)程頁(yè)表項(xiàng)置為不可寫(xiě),注意最后要flush tlb。因?yàn)橐婚_(kāi)始沒(méi)有flush tlb,導(dǎo)致最后用戶態(tài)fork返回以后讀取的信息來(lái)自于tlb,直接改寫(xiě)了共享頁(yè)面中fork的返回地址,導(dǎo)致切換到子進(jìn)程時(shí)fork的返回地址丟失。這個(gè)bug讓我郁悶了兩三個(gè)小時(shí)。。

    3. 使用兩次fork時(shí),第二次fork返回的pid會(huì)被改掉。查了下發(fā)現(xiàn)為用戶空間分配物理頁(yè)面的代碼里居然在分配好以后沒(méi)有把對(duì)應(yīng)的struct置為已使用,結(jié)果導(dǎo)致第二個(gè)子進(jìn)程COW創(chuàng)建新頁(yè)面時(shí)得到了原來(lái)的父進(jìn)程頁(yè)面,改寫(xiě)了父進(jìn)程頁(yè)面內(nèi)容。

    Time : 2008-08-23 19:41
    OS Lab4 debugging notes [2]
    ?
    系統(tǒng)調(diào)用 exec()

    1. 清空頁(yè)表的用戶空間映射的函數(shù)一開(kāi)始寫(xiě)得yts,bug到處都是,比如free的時(shí)候沒(méi)使用指向內(nèi)存塊首地址的指針,記錄內(nèi)存地址的變量沒(méi)有累加。

    2. exec傳遞給內(nèi)核態(tài)的兩個(gè)參數(shù)必須先在內(nèi)核態(tài)保存一個(gè)副本,否則清空用戶態(tài)頁(yè)表后就無(wú)法得到這兩個(gè)參數(shù)信息了。

    3. 分配給用戶態(tài)的頁(yè)面必須先清零,一方面考慮到安全性,另一方面不清零會(huì)隱藏一些潛在的bug。一開(kāi)始我沒(méi)有在內(nèi)核執(zhí)行exec的時(shí)候完整的復(fù)制所有的參數(shù),而是直接指向了原進(jìn)程的內(nèi)存空間,由于清空頁(yè)表后再次申請(qǐng)新頁(yè)表時(shí)得到了原來(lái)的頁(yè)面,結(jié)果正好原來(lái)那個(gè)保存參數(shù)的頁(yè)面和新進(jìn)程的該頁(yè)面重合了 =_= 于是浪費(fèi)了不少時(shí)間在這個(gè)bug上

    Time : 2008-08-31 1:18
    OS Lab5 debugging notes

    還算順利,不過(guò)這個(gè)lab蠻無(wú)聊的,等有空了把syscall改成類似linux的做法,單一中斷號(hào)+寄存器選擇syscall。

    1. 最花時(shí)間的一個(gè)bug是ls返回值沒(méi)有改成應(yīng)用程序數(shù),結(jié)果一開(kāi)始一直以為是brk系統(tǒng)調(diào)用沒(méi)寫(xiě)好,最后才發(fā)現(xiàn)問(wèn)題出在這么小的地方。

    2. brk的邏輯還不是很清楚,盡管通過(guò)了簡(jiǎn)單的測(cè)試,但是debug輸出的信息顯示brk增長(zhǎng)的很快,經(jīng)常是一個(gè)頁(yè)一個(gè)頁(yè)漲的,看來(lái)還得查下brk的具體行為。

    3. 寫(xiě)了個(gè)比MAGIC_BREAK好用一點(diǎn)的宏,因?yàn)橛脩魬B(tài)的程序都是按二進(jìn)制讀入的,Simics無(wú)法得到函數(shù)信息(函數(shù)名、當(dāng)前行數(shù)等),利用C99的宏寫(xiě)了個(gè)新的INFO_BREAK

    #define?INFO_BREAK?\
    ????
    do?{??\
    ????????lprintf_kern(
    "break?in?%s:%d",?__FUNCTION__,?__LINE__);?\
    ????????MAGIC_BREAK;?\
    ????}
    ?while?(0)?\

    posted @ 2008-10-10 15:21 ZelluX 閱讀(592) | 評(píng)論 (0)編輯 收藏

    發(fā)信人: Zellux (null), 信區(qū): Software_06
    標(biāo) 題: OSLab之中斷處理
    發(fā)信站: 日月光華 (2008年08月30日20:15:58 星期六), 站內(nèi)信件

    1. 準(zhǔn)備工作
    在開(kāi)始分析Support Code之前,先配置下我們的Source Insight,使它能夠支持.s文件的搜索。

    在Options->Document Options->Document Types中選擇x86 Asm Source File,在File fileter中增加一個(gè)*.s,變成*.asm;*.inc;*.s 然后在Project->Add and Remove
    Project Files中重新將整個(gè)oslab的目錄加入,這樣以后進(jìn)行文本搜索時(shí).s文件也不會(huì)漏掉了。

    2. Source Insight使用
    接下來(lái)簡(jiǎn)單分析下內(nèi)核啟動(dòng)的過(guò)程,在瀏覽代碼的過(guò)程中可以迅速的掌握Source Insight的使用技巧。

    lib/multiboot /multiboot.s完成了初始化工作,可以看到其中一句call
    EXT(multiboot_main)調(diào)用了C函數(shù)multiboot_main,使用ctrl+/搜索包含multiboot_main的所有文件,最終base_multiboot_main.c中找到了它的定義。依次進(jìn)行cpu、內(nèi)存的初
    始化,然后開(kāi)啟中斷,跳轉(zhuǎn)到kernel_main函數(shù),也是Lab1中所要改寫(xiě)的函數(shù)之一。另外
    在這里可以通過(guò)ctrl+單擊或者ctrl+=跳轉(zhuǎn)到相應(yīng)的函數(shù)定義處,很方便。

    3. irq處理初始化工作
    來(lái)看下Lab 1的重點(diǎn)之一,irq的處理。跟蹤multiboot_main->base_cpu_setup->base_cp
    u_init->base_irq_init,可以看到這行代碼
    gate_init(base_idt, base_irq_inittab, KERNEL_CS);
    繼續(xù)使用ctrl+/找到base_irq_inittab的藏身之處:base_irq_inittab.s

    4. base_irq_inittab.s
    這個(gè)匯編文件做了不少重復(fù)性工作,方便我們?cè)赾語(yǔ)言級(jí)別實(shí)現(xiàn)各種handler。
    GATE_INITTAB_BEGIN(base_irq_inittab) /* irq處理函數(shù)表的起始,還記得jump
    table 嗎? */
    MASTER(0, 0) /* irq0 對(duì)應(yīng)的函數(shù) */


    來(lái)看看這個(gè)MASTER(0, 0)宏展開(kāi)后是什么樣子:
    #define MASTER(irq, num) \
    GATE_ENTRY(BASE_IRQ_MASTER_BASE + (num), 0f, ACC_PL_K|ACC_INTR_GATE) ;\
    P2ALIGN(TEXT_ALIGN) ;\
    0: ;\
    pushl $(irq) /* error code = irq vector */ ;\
    pushl $BASE_IRQ_MASTER_BASE + (num) /* trap number */ ;\
    pusha /* save general registers */ ;\
    movl $(irq),%ecx /* irq vector number */ ;\
    movb $1 << num,%dl /* pic mask for this irq */ ;\
    jmp master_ints

    依次push irq號(hào),trap號(hào)(0x20+irq號(hào)),通用寄存器(eax ecx等)入棧,把irq號(hào)保
    存到ecx寄存器,然后跳轉(zhuǎn)到master_ints,master_ints是所有master interrupts公用
    的代碼。

    跳過(guò)master_ints的前幾行,從第七行開(kāi)始
    /* Acknowledge the interrupt */
    movb $0x20,%al
    outb %al,$0x20

    /* Save the rest of the standard trap frame (oskit/x86/base_trap.h). */
    pushl %ds
    pushl %es
    pushl %fs
    pushl %gs

    /* Load the kernel's segment registers. */
    movw %ss,%dx
    movw %dx,%ds
    movw %dx,%es

    /* Increment the hardware interrupt nesting counter */
    incb EXT(base_irq_nest)

    /* Load the handler vector */
    movl EXT(base_irq_handlers)(,%ecx,4),%esi

    注釋寫(xiě)得很詳細(xì),首先發(fā)送0x20到0x20端口,也就是Lab1文檔上所說(shuō)的發(fā)送INT_CTL_DON
    E到INT_CTL_REG,看來(lái)這一步support code已經(jīng)替我們完成了。接下來(lái)保存四個(gè)段寄存
    器ds es fs gs,并讀入kernel態(tài)的段寄存器信息。

    最后一句很關(guān)鍵,把base_irq_handlers + %ecx * 4這個(gè)值保存到了esi寄存器中,%ecx
    中保存了irq號(hào),而*4則是一個(gè)函數(shù)指針的大小,那么base_irq_handlers是什么呢?繼
    續(xù)用ctrl+/搜索,可以在base_irq.c中找到這個(gè)數(shù)組的定義
    unsigned int (*base_irq_handlers[BASE_IRQ_COUNT])(struct trap_state *ts)
    且初始時(shí)這個(gè)數(shù)組的每一項(xiàng)都是base_irq_default_handler

    看來(lái)這句匯編代碼的功能是把處理irq對(duì)應(yīng)的函數(shù)地址保存到了esi寄存器中。
    為了證實(shí)這一點(diǎn),繼續(xù)看base_irq_inittab.s的代碼:
    #else
    /* Call the interrupt handler with the trap frame as a parameter */
    pushl %esp
    call *%esi
    popl %edx
    #endif
    果然,在保存了esp值后,緊接著就調(diào)用了esi指向的那個(gè)函數(shù)。而從那個(gè)函數(shù)返回后,
    之前在棧上保存的相關(guān)信息都被恢復(fù)了:

    /* blah blah blah */
    /* Return from the interrupt */
    popl %gs
    popl %fs
    popl %es
    popl %ds
    popa
    addl $4*2,%esp /* Pop trap number and error code */
    iret
    這樣就恢復(fù)到了進(jìn)入這個(gè)irq處理單元前的狀態(tài),文檔中所要求的保存通用寄存器這一步
    其實(shí)在這里也已經(jīng)完成了,不需要我們自己寫(xiě)代碼。

    好了,這樣一分析后,我們要做的事情就很簡(jiǎn)單,就是把base_irq_handlers數(shù)組中的對(duì)
    應(yīng)項(xiàng)改成相應(yīng)的handler函數(shù)就行了。
    注意index是相應(yīng)的idt_entry號(hào)減去BASE_IRQ_SLAVE_BASE,或者直接使用IRQ號(hào)。

    另外這個(gè)數(shù)組的初始值都是base_irq_default_handler,用ctrl+左鍵跳到這個(gè)函數(shù)的定
    義,可以看到這個(gè)函數(shù)只有一句簡(jiǎn)單的輸出語(yǔ)句:
    printf("Unexpected interrupt %d\n", ts->err);
    而這就是沒(méi)有注冊(cè)handler前我們所看到的那句Unexpected interrupt 0的來(lái)源了。

    5. struct trap_state *ts
    所有的handler函數(shù)的參數(shù)都是一個(gè)struct trap_state *ts,這個(gè)參數(shù)是哪來(lái)的呢?
    注意call *%esi的前一行
    /* Call the interrupt handler with the trap frame as a parameter */
    pushl %esp
    這里把當(dāng)前的esp當(dāng)作指向ts的指針傳給了handler,列一下從esp指向的地址開(kāi)始的內(nèi)容
    ,也就是在此之前push入棧的內(nèi)容:

    pushl $(irq) /* error code = irq vector */ ;\
    pushl $BASE_IRQ_MASTER_BASE + (num) /* trap number */ ;\
    pusha /* save general registers */ ;\
    pushl %ds
    pushl %es
    pushl %fs
    pushl %gs

    再看一下trap_state的定義,你會(huì)發(fā)現(xiàn)正好和push的順序相反:
    /* Saved segment registers */
    unsigned int gs;
    unsigned int fs;
    unsigned int es;
    unsigned int ds;

    /* PUSHA register state frame */
    unsigned int edi;
    unsigned int esi;
    unsigned int ebp;
    unsigned int cr2; /* we save cr2 over esp for page faults */
    unsigned int ebx;
    unsigned int edx;
    unsigned int ecx;
    unsigned int eax;

    /* Processor trap number, 0-31. */
    unsigned int trapno;

    /* Error code pushed by the processor, 0 if none. */
    unsigned int err;

    而這個(gè)定義后面的
    /* Processor state frame */
    unsigned int eip;
    unsigned int cs;
    unsigned int eflags;
    unsigned int esp;
    unsigned int ss;
    則是發(fā)生interrupt時(shí)硬件自動(dòng)push的五個(gè)數(shù)據(jù)(參見(jiàn)Understand the Linux Kernel)

    也就是說(shuō),ts指針指向的是調(diào)用當(dāng)前handler前的寄存器狀態(tài),也是當(dāng)前handler結(jié)束后
    用來(lái)恢復(fù)的寄存器狀態(tài),了解這一點(diǎn)對(duì)以后的幾個(gè)lab幫助很大。

    p.s. 另外提一句和這個(gè)lab無(wú)關(guān)的話,非vm86模式下棧上是不會(huì)有v86_es等四個(gè)寄存器
    信息的,所以以后根據(jù)task_struct指針計(jì)算*ts的地址時(shí)使用的偏移量不應(yīng)該是sizeof(
    struct trap_state)

    6. The End
    這樣差不多就把support code中處理interrupt的方法過(guò)了一遍(另外還有base_trap_in
    ittab.s,不過(guò)和irq的處理很相似)

    了解這些后Lab1就比較簡(jiǎn)單了,不需要任何內(nèi)嵌匯編代碼即可完成。

    posted @ 2008-09-02 11:55 ZelluX 閱讀(641) | 評(píng)論 (5)編輯 收藏

         摘要: 美國(guó)為什么需要這么多大學(xué)生,而中國(guó)培育出這么多優(yōu)秀大學(xué)生為什么失業(yè)?難道是我們學(xué)生程度不夠?難道是我們同學(xué)不夠用功?難道是我們同學(xué)專業(yè)不對(duì)口?那我告訴所有讀者,為什么大學(xué)生就業(yè)難……   閱讀全文

    posted @ 2008-07-28 11:31 ZelluX 閱讀(680) | 評(píng)論 (5)編輯 收藏

    用ctags -R或者ctags * -R的時(shí)候只能生成當(dāng)前目錄下的tag,檢查了半天發(fā)現(xiàn)原來(lái)這個(gè)版本的ctags的參數(shù)順序只能老老實(shí)實(shí)的來(lái):ctags -R *

    太囧了,總歸要bs下的,雖說(shuō)也有那么一點(diǎn)點(diǎn)可能是bash解析參數(shù)時(shí)的問(wèn)題,不過(guò)我猜問(wèn)題來(lái)源還是這個(gè)低版本的ctags = =

    話說(shuō)我也挺圡的,不習(xí)慣用source insight,還是喜歡用vim寫(xiě)代碼

    posted @ 2008-07-15 10:41 ZelluX 閱讀(546) | 評(píng)論 (3)編輯 收藏

    沒(méi)心思看離散,也不準(zhǔn)備堅(jiān)持看沒(méi)有荷蘭的歐洲杯決賽。閑著點(diǎn)好友的Q-Zone,原來(lái)Q-Zone首先會(huì)判斷你的瀏覽器,如果是Firefox它會(huì)重定向到RSS閱讀界面。

    安然在開(kāi)學(xué)后2個(gè)月寫(xiě)的一篇日志,“記憶里的名單”,驚喜的看到有我。也列出了一張屬于我的名單。好,等待時(shí)間的遴選。

    “于是想 如果有個(gè)妹妹 我要告訴她 好好放肆猖狂 做不可思議的事情 為友情和少年青澀的愛(ài)情花心思 做只是喜歡沒(méi)有功利目的的事情 這么好的年華 就是用來(lái)這樣浪費(fèi) 和珍惜的~”

    可惜我只保持了四五個(gè)月的這種瘋狂,現(xiàn)在依然糾結(jié)于功利的選擇。有時(shí)候曾想,或許那次失敗更適合我,或許我終將把這么一條平淡無(wú)奇的路走到盡頭。“表面強(qiáng)者”,或許還是很有道理的。

    看到fofo的博的文字,“我要去杭州,把所有的事情拋掉,不管后果。這個(gè)地方太讓人壓抑,盡管有很玩得來(lái)的室友,有很好的足球隊(duì)的隊(duì)友,可以看很多以前爸媽不讓看的喜歡的書(shū)還有過(guò)米的比賽,吃的東西也都很習(xí)慣,還是會(huì)在天氣很好的星期天下午突然想起曾經(jīng)在冬日的陽(yáng)光照射下一家人在陽(yáng)臺(tái)上圍著一張桌子吃飯的情景,還是會(huì)在一個(gè)人騎在去計(jì)算機(jī)協(xié)會(huì)的路上很難過(guò)地想著再也不會(huì)有那么四個(gè)或者五個(gè)人在一起吃完小炒放肆地在鋪滿夕陽(yáng)的校園小路上勾肩搭背地行走了,還是會(huì)在一百多個(gè)人的課堂上懷念起那些艱苦卻簡(jiǎn)單的日子里所有的笑聲,還是會(huì)在網(wǎng)吧包夜的時(shí)候想起初中時(shí)捏著飯錢偷偷摸摸地去電腦房玩星際……想找找朋友們,調(diào)整一下自己的心情。”

    真的找不回來(lái)了。在寫(xiě)這篇博文時(shí)也找不到以前寫(xiě)字的感覺(jué)了。

    明天離散考試,某個(gè)記錄或許將要因此打破。

    posted @ 2008-06-30 02:09 ZelluX 閱讀(376) | 評(píng)論 (1)編輯 收藏

    不枉我周末練了那么多ZvP

    不過(guò)總比分太慘了。。

    posted @ 2008-06-24 00:20 ZelluX 閱讀(402) | 評(píng)論 (0)編輯 收藏

         摘要: 一篇關(guān)于函數(shù)式編程的介紹,在水木Java版引起了熱烈討論。  閱讀全文

    posted @ 2008-06-05 21:10 ZelluX 閱讀(767) | 評(píng)論 (1)編輯 收藏

    1. framwork/policies/Singleton.h
    Singleton模式,可以指定相應(yīng)的線程模型、創(chuàng)建策略和生命期控制策略。
    對(duì)于全局范圍的Singleton實(shí)例,定義了若干個(gè)宏便于訪問(wèn),例如
    #define?sLog?MaNGOS::Singleton<Log>::Instance()
    #define?sMaster?MaNGOS::Singleton<Master>::Instance()

    Singleton的定義:


    不知道這里的注釋Prohibited actions...this does not prevent hijacking.是什么意思,copy constructor和hijacking有什么關(guān)系呢?

    另外注意這行typedef typename ThreadingModel::Lock Guard;,原來(lái)typedef還可以用在函數(shù)上。

    Singleton的Instance方法用的是標(biāo)準(zhǔn)的double-checked lock方法,關(guān)于DCL可以參考這篇博文http://m.tkk7.com/zellux/archive/2008/04/07/191365.html

    2. Explicit Constructors
    game/WorkPacket.h中看到的語(yǔ)法,防止構(gòu)造函數(shù)中參數(shù)的隱式轉(zhuǎn)型
    比如explicit String(int n); 用String('c')聲明時(shí)就會(huì)報(bào)錯(cuò)

    posted @ 2008-06-03 19:03 ZelluX 閱讀(777) | 評(píng)論 (0)編輯 收藏

    一套基于文件系統(tǒng)的安全方案,主要通過(guò)隔離運(yùn)行不可信任的程序、taint記錄、事故恢復(fù)。

    我的presentation:
    http://docs.google.com/Presentation?id=dcjk4xx7_473cv5ddgc8

    出于時(shí)間考慮沒(méi)有提到paper中進(jìn)程間通信的解決方法

    posted @ 2008-05-28 15:23 ZelluX 閱讀(507) | 評(píng)論 (0)編輯 收藏

    水木上有人貼了個(gè)有趣的程序

    #include? < stdlib.h >
    #include?
    < stdio.h >

    void ?print_forever( int ?n)
    {
    ????printf(
    " %d\n " ,?n);
    ????print_forever(n?
    + ? 1 );
    }


    int ?main( int ?argc,? char ? * argv[])
    {
    ????print_forever(
    0 );
    ????
    return ? 0 ;
    }


    用gcc -O2編譯運(yùn)行后會(huì)不停地打印從0開(kāi)始的自然數(shù),注意如果編譯器沒(méi)有做優(yōu)化的話,打印到某個(gè)數(shù)的時(shí)候肯定會(huì)發(fā)生棧溢出從而程序終止的情況,但這個(gè)程序卻能一直運(yùn)行下去,說(shuō)明編譯器做了尾遞歸優(yōu)化。

    用gcc -O2 -S生成這個(gè)程序的匯編代碼后證實(shí)了這一點(diǎn)。
    .L6:
    ????????movl????
    %ebx,?4(%esp)
    ????????addl????$
    1,?%ebx
    ????????movl????$.LC0,?(
    %esp)
    ????????call????printf
    ????????jmp?????.L6
    print_forever的關(guān)鍵部分被優(yōu)化成了一個(gè)n不斷增加的死循環(huán)。

    接下來(lái)是分析哪個(gè)優(yōu)化選項(xiàng)處理了尾遞歸。

    用O3 O2 O1三個(gè)優(yōu)化強(qiáng)度編譯程序,查看匯編代碼后,發(fā)現(xiàn)尾遞歸優(yōu)化是O2中新增的功能。于是查看O2新開(kāi)啟的優(yōu)化開(kāi)關(guān):
    gcc -c -Q -O1 --help=optimizers > /tmp/O1-opts
    gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
    diff /tmp/O2-opts /tmp/O1-opts?| grep enabled
    輸出結(jié)果:

    經(jīng)證實(shí)是-foptimize-sibling-calls這個(gè)選項(xiàng)實(shí)現(xiàn)了尾遞歸的優(yōu)化,具體內(nèi)容可以參看
    http://gcc.gnu.org./ml/gcc-patches/2000-03/msg00867.html

    posted @ 2008-05-24 02:05 ZelluX 閱讀(2445) | 評(píng)論 (1)編輯 收藏

    睡覺(jué)去恩

    P.S 點(diǎn)球真不是人看的

    posted @ 2008-05-22 05:44 ZelluX 閱讀(449) | 評(píng)論 (0)編輯 收藏

         摘要: 一篇介紹一種全新的Web架構(gòu),另一篇介紹虛擬機(jī)的探測(cè)方法  閱讀全文

    posted @ 2008-05-20 20:18 ZelluX 閱讀(2251) | 評(píng)論 (1)編輯 收藏

         摘要: 發(fā)信人: NetMD (C++), 信區(qū): CPlusPlus
    標(biāo) 題: [FAQ] C/C++中的序列點(diǎn)
    發(fā)信站: 水木社區(qū) (Wed Feb 7 01:13:41 2007), 站內(nèi)  閱讀全文

    posted @ 2008-05-16 10:42 ZelluX 閱讀(2139) | 評(píng)論 (1)編輯 收藏

    VIM Calender是個(gè)很好用的寫(xiě)日記的插件(http://www.vim.org/scripts/script.php?script_id=52)

    水木上的rmrf寫(xiě)了一個(gè)同步VIM Calender和Google Calender的腳本(http://code.google.com/p/diaryvgc/downloads/list)

    想到blogger.com支持通過(guò)發(fā)送郵件發(fā)布日志,于是我也寫(xiě)了個(gè)把VIM Calender中的日記發(fā)布到blogger.com的腳本。

    這個(gè)腳本把發(fā)布情況記錄在diary/poster.log中,以后每次執(zhí)行只會(huì)發(fā)布最新的日志,同時(shí)考慮到當(dāng)天的日記可能會(huì)被修改(blogger.com似乎不支持通過(guò)email修改日志),所以當(dāng)天的日記不會(huì)被發(fā)布。

    使用的時(shí)候修改開(kāi)頭幾行的配置信息即可

    #!/usr/bin/python

    #?A?script?for?posting?diaries?created?by?VIM?Calender?to?blogger.com
    #
    ?Author:?Wang?Yuanxuan?<zellux@gmail.com>

    import?smtplib,?os,?re,?datetime
    from?email.mime.text?import?MIMEText

    fromaddr?
    =?xxxxx@fudan.edu.cn'
    toaddr?
    =?xxxx.xxxx@blogger.com'
    smtpserver?
    =?'mail.fudan.edu.cn'
    diarydir?
    =?'/home/user_name/diary'
    username?
    =?'xxxxxx'
    password?
    =?'xxxxxx'
    logpath?
    =?diarydir?+?'/poster.log'

    def?PostMail(title,?content):
    ????msg?
    =?MIMEText(content?+?'\r\n#end\r\n')
    ????msg[
    'Subject']?=?title
    ????msg[
    'From']?=?fromaddr
    ????msg[
    'To']?=?toaddr

    ????server?
    =?smtplib.SMTP(smtpserver)
    ????server.login(username,?password)
    ????
    #?server.set_debuglevel(1)
    ????server.sendmail(fromaddr,?[toaddr],?msg.as_string())
    ????server.quit()

    #?Load?log?file.?Create?a?new?one?if?not?exist.
    posted?=?[]
    if?os.path.isfile(logpath):
    ????temp?
    =?open(logpath,?'r')
    ????posted?
    =?[line[:-1]?for?line?in?temp.readlines()]
    ????log?
    =?open(logpath,?'a')
    else:
    ????
    print?"A?new?poster?log?has?been?created?at?"?+?logpath
    ????log?
    =?open(logpath,?'w')

    pattern?
    =?r'(\d{4})/(\d{1,2})/(\d{1,2}).cal$'
    scanner?
    =?re.compile(pattern)

    for?(top,?dirname,?filenames)?in?os.walk(diarydir):
    ????
    for?filename?in?filenames:
    ????????fullpath?
    =?os.path.join(top,?filename)
    ????????
    if?scanner.search(fullpath):
    ????????????(year,?month,?day)?
    =?scanner.search(fullpath).groups()
    ????????????filedate?
    =?datetime.date(int(year),?int(month),?int(day))
    ????????????title?
    =?filedate.isoformat()
    ????????????
    if?filedate?==?datetime.date.today():
    ????????????????
    continue
    ????????????
    if?fullpath?not?in?posted:
    ????????????????log.write(fullpath?
    +?'\n')
    ????????????????text?
    =?open(fullpath).read()
    ????????????????PostMail(title,?text)
    ????????????????
    print?'The?diary?'?+?title?+?'?has?been?posted'

    log.close()

    posted @ 2008-05-12 22:04 ZelluX 閱讀(1276) | 評(píng)論 (0)編輯 收藏

    這書(shū)的數(shù)學(xué)分析方面有點(diǎn)過(guò)于簡(jiǎn)單了,連絕對(duì)值、二維坐標(biāo)系是個(gè)什么東東都會(huì)給你解釋一下,所以看起來(lái)很快。

    第一章 經(jīng)濟(jì)學(xué)十大原理

    第二章 像經(jīng)濟(jì)學(xué)家一樣思考
    生產(chǎn)可能性邊界(production possibilites frontier)通常是凹向原點(diǎn)的形狀。
    實(shí)證表述(positive statements):企圖描述世界是什么的觀點(diǎn)。經(jīng)濟(jì)學(xué)的許多內(nèi)容是實(shí)證的。
    規(guī)范表述(normative statements):企圖描述世界應(yīng)該是什么的觀點(diǎn)。

    第三章 相互依賴性與貿(mào)易的好處
    機(jī)會(huì)成本與比較優(yōu)勢(shì)

    第四章 供給與需求的市場(chǎng)力量

    第五章 彈性及其應(yīng)用
    需求價(jià)格彈性 = 需求量變動(dòng)百分比 / 價(jià)格變動(dòng)百分比
    供給價(jià)格彈性 = 供給變動(dòng)百分比 / 價(jià)格變動(dòng)百分比
    例:由于毒品的需求缺乏彈性,禁毒引起的毒品價(jià)格提高的比例大于毒品使用減少的比例,因此禁毒會(huì)增加與毒品相關(guān)的犯罪。(短期)

    第六章 供給、需求與政府政策
    限制性價(jià)格上限導(dǎo)致短缺,限制性價(jià)格下限導(dǎo)致過(guò)剩。
    例:最低工資法導(dǎo)致失業(yè)。
    一旦市場(chǎng)達(dá)到新均衡,無(wú)論向誰(shuí)征稅,都是買者與賣者分?jǐn)偠愂肇?fù)擔(dān)。
    例:由于勞動(dòng)的供給遠(yuǎn)比勞動(dòng)的需求缺乏彈性,是工人而不是企業(yè)承擔(dān)了大部分工薪稅的負(fù)擔(dān)。

    posted @ 2008-05-10 15:29 ZelluX 閱讀(500) | 評(píng)論 (0)編輯 收藏

    發(fā)信人: bluegene (藍(lán)色基因||多看paper才是王道), 信區(qū): Quant
    標(biāo) 題: 美國(guó)次貸危機(jī)之通俗演義 zz (轉(zhuǎn)載)
    發(fā)信站: BBS 未名空間站 (Fri Mar 21 01:24:10 2008)

    【 以下文字轉(zhuǎn)載自 ChinaNews 討論區(qū) 】
    發(fā)信人: chaoz (飯局局長(zhǎng)), 信區(qū): ChinaNews
    標(biāo) 題: 美國(guó)次貸危機(jī)之通俗演義 zz
    發(fā)信站: BBS 未名空間站 (Thu Mar 20 23:49:57 2008)

    在美國(guó),貸款是非常普遍的現(xiàn)象,從房子到汽車,從信用卡到電話賬單,貸款無(wú)處不在。當(dāng)?shù)厝撕苌偃钯I房,通常都是長(zhǎng)時(shí)間貸款。可是我們也知道,在這里失業(yè) 和再就業(yè)是很常見(jiàn)的現(xiàn)象。這些收入并不穩(wěn)定甚至根本沒(méi)有收入的人,他們?cè)趺促I房呢?因?yàn)樾庞玫燃?jí)達(dá)不到標(biāo)準(zhǔn),他們就被定義為次級(jí)貸款者。

    大約從10年前開(kāi)始,那個(gè)時(shí)候貸款公司漫天的廣告就出現(xiàn)在電視上、報(bào)紙上、街頭,抑或在你的信箱里塞滿誘人的傳單:

    “你想過(guò)中產(chǎn)階級(jí)的生活嗎?買房吧!”

    “積蓄不夠嗎?貸款吧!”

    “沒(méi)有收入嗎?找阿牛貸款公司吧!”

    “首付也付不起?我們提供零首付!”

    “擔(dān)心利息太高?頭兩年我們提供3%的優(yōu)惠利率!”

    “每個(gè)月還是付不起?沒(méi)關(guān)系,頭24個(gè)月你只需要支付利息,貸款的本金可以兩年后再付!想想看,兩年后你肯定已經(jīng)找到工作或者被提升為經(jīng)理了,到時(shí)候還怕付不起!”

    “擔(dān)心兩年后還是還不起?哎呀,你也真是太小心了,看看現(xiàn)在的房子比兩年前漲了多少,到時(shí)候你轉(zhuǎn)手賣給別人啊,不僅白住兩年,還可能賺一筆呢!再說(shuō)了,又不用你出錢,我都相信你一定行的,難道我敢貸,你還不敢借?”

    在這樣的誘惑下,無(wú)數(shù)美國(guó)市民毫不猶豫地選擇了貸款買房。(你替他們擔(dān)心兩年后的債務(wù)?向來(lái)自我感覺(jué)良好的美國(guó)市民會(huì)告訴你,演電影的都能當(dāng)上州長(zhǎng),兩年后說(shuō)不定我還能競(jìng)選總統(tǒng)呢。)

    阿牛貸款公司短短幾個(gè)月就取得了驚人的業(yè)績(jī),可是錢都貸出去了,能不能收回來(lái)呢?公司的董事長(zhǎng)——阿牛先生,那也是熟讀美國(guó)經(jīng)濟(jì)史的人物,不可能不知道房 地產(chǎn)市場(chǎng)也是有風(fēng)險(xiǎn)的,所以這筆收益看來(lái)不能獨(dú)吞,要找個(gè)合伙人分擔(dān)風(fēng)險(xiǎn)才行。于是阿牛找到美國(guó)經(jīng)濟(jì)界的帶頭大哥——投行。這些家伙可都是名字響當(dāng)當(dāng)?shù)闹? 兒(美林、高盛、摩根),他們每天做什么呢?就是吃飽了閑著也是閑著,于是找來(lái)諾貝爾經(jīng)濟(jì)學(xué)家,找來(lái)哈佛教授,用上最新的經(jīng)濟(jì)數(shù)據(jù)模型,一番鼓搗之后,弄 出幾份分析報(bào)告,從而評(píng)價(jià)一下某某股票是否值得買進(jìn),某某國(guó)家的股市已經(jīng)有泡沫了,一群在風(fēng)險(xiǎn)評(píng)估市場(chǎng)里面騙吃騙喝的主兒,你說(shuō)他們看到這里面有風(fēng)險(xiǎn)沒(méi)? 用腳都看得到!可是有利潤(rùn)啊,那還猶豫什么,接手搞吧!于是經(jīng)濟(jì)學(xué)家、大學(xué)教授以數(shù)據(jù)模型、老三樣評(píng)估之后,重新包裝一下,就弄出了新產(chǎn)品——CDO (注: Collateralized Debt Obligation,債務(wù)抵押債券),說(shuō)穿了就是債券,通過(guò)發(fā)行和銷售這個(gè)CDO債券,讓債券的持有人來(lái)分擔(dān)房屋貸款的風(fēng)險(xiǎn)。

    光這樣賣,風(fēng)險(xiǎn)太高還是沒(méi)人買啊,假設(shè)原來(lái)的債券風(fēng)險(xiǎn)等級(jí)是6,屬于中等偏高。于是投行把它分成高級(jí)和普通CDO兩個(gè)部分,發(fā)生債務(wù)危機(jī)時(shí),高級(jí)CDO享 有優(yōu)先賠付的權(quán)利。這樣兩部分的風(fēng)險(xiǎn)等級(jí)分別變成了4和8,總風(fēng)險(xiǎn)不變,但是前者就屬于中低風(fēng)險(xiǎn)債券了,憑投行三寸不爛“金”舌,當(dāng)然賣了個(gè)滿堂彩!可是 剩下的風(fēng)險(xiǎn)等級(jí)8的高風(fēng)險(xiǎn)債券怎么辦呢?

    于是投行找到了對(duì)沖基金,對(duì)沖基金又是什么人,那可是在全世界金融界買空賣多、呼風(fēng)喚雨的角色,過(guò)的就是刀口舔血的日子,這點(diǎn)風(fēng)險(xiǎn)小意思!于是憑借著老關(guān) 系,在世界范圍內(nèi)找利率最低的銀行借來(lái)錢,然后大舉買入這部分普通CDO債券,2006年以前,日本央行貸款利率僅為1.5%;普通CDO利率可能達(dá)到 12%,所以光靠利息差對(duì)沖基金就賺得盆滿缽滿了。

    這樣一來(lái),奇妙的事情發(fā)生了,2001年末,美國(guó)的房地產(chǎn)一路飆升,短短幾年就翻了一倍多,這樣一來(lái)就如同阿牛貸款公司開(kāi)頭的廣告一樣,根本不會(huì)出現(xiàn)還不 起房款的事情,就算沒(méi)錢還,把房子一賣還可以賺一筆錢。結(jié)果是從貸款買房的人,到阿牛貸款公司,到各大投行,到各個(gè)銀行,到對(duì)沖基金人人都賺錢,但是投行 卻不太高興了!當(dāng)初是覺(jué)得普通CDO風(fēng)險(xiǎn)太高,才扔給對(duì)沖基金的,沒(méi)想到這幫家伙比自己賺的還多,凈值一個(gè)勁地漲,早知道自己留著玩了,于是投行也開(kāi)始買 入對(duì)沖基金,打算分一杯羹了。這就好像“老黑”家里有餿了的飯菜,正巧看見(jiàn)隔壁鄰居那只討厭的小花狗,本來(lái)打算毒它一把,沒(méi)想到小花狗吃了不但沒(méi)事,反而 還越長(zhǎng)越壯了,“老黑”這下可蒙了,難道餿了的飯菜營(yíng)養(yǎng)更好,于是自己也開(kāi)始吃了!

    這下又把對(duì)沖基金樂(lè)壞了,他們是什么人,手里有1塊錢,就能想辦法借10塊錢來(lái)玩的土匪啊,現(xiàn)在拿著搶手的CDO還能老實(shí)?于是他們又把手里的CDO債券 抵押給銀行,換得10倍的貸款,然后繼續(xù)追著投行買普通CDO。嘿,當(dāng)初可是簽了協(xié)議,這些CDO都?xì)w我們的!!!投行心里那個(gè)不爽啊,除了繼續(xù)悶聲買對(duì) 沖基金之外,他們又想出了一個(gè)新產(chǎn)品,就叫CDS (注:Credit Default Swap,信用違約交換)好了,華爾街就是這些天才產(chǎn)品的溫床:不是都覺(jué)得原來(lái)的CDO風(fēng)險(xiǎn)高嗎,那我投保好了,每年從CDO里面拿出一部分錢作為保金, 白送給保險(xiǎn)公司,但是將來(lái)出了風(fēng)險(xiǎn),大家一起承擔(dān)。

    保險(xiǎn)公司想,不錯(cuò)啊,眼下CDO這么賺錢,1分錢都不用出就分利潤(rùn),這不是每年白送錢給我們嗎?干了!

    對(duì)沖基金想,不錯(cuò)啊,已經(jīng)賺了幾年了,以后風(fēng)險(xiǎn)越來(lái)越大,光是分一部分利潤(rùn)出去,就有保險(xiǎn)公司承擔(dān)一半風(fēng)險(xiǎn),干了!

    于是再次皆大歡喜,CDS也賣火了!但是事情到這里還沒(méi)有結(jié)束:因?yàn)椤奥斆鳌钡娜A爾街人又想出了基于CDS的創(chuàng)新產(chǎn)品!我們假設(shè)CDS已經(jīng)為我們帶來(lái)了 50億元的收益,現(xiàn)在我新發(fā)行一個(gè)“三毛”基金,這個(gè)基金是專門投資買入CDS的,顯然這個(gè)建立在之前一系列產(chǎn)品之上的基金的風(fēng)險(xiǎn)是很高的,但是我把之前 已經(jīng)賺的50億元投入作為保證金,如果這個(gè)基金發(fā)生虧損,那么先用這50億元墊付,只有這50億元虧完了,你投資的本金才會(huì)開(kāi)始虧損,而在這之前你是可以 提前贖回的,首發(fā)規(guī)模500億元。天哪,還有比這個(gè)還爽的基金嗎?1元面值買入的基金,虧到0.90元都不會(huì)虧自己的錢,賺了卻每分錢都是自己的!評(píng)級(jí)機(jī) 構(gòu)看到這個(gè)天才設(shè)想,簡(jiǎn)直是毫不猶豫:給予AAA評(píng)級(jí)!

    結(jié)果這個(gè)“三毛”可賣瘋了,各種養(yǎng)老基金、教育基金、理財(cái)產(chǎn)品,甚至其他國(guó)家的銀行也紛紛買入。雖然首發(fā)規(guī)模是原定的500億元,可是后續(xù)發(fā)行了多少億, 簡(jiǎn)直已經(jīng)無(wú)法估算了,但是保證金50億元卻沒(méi)有變。如果現(xiàn)有規(guī)模5000億元,那保證金就只能保證在基金凈值不低于0.99元時(shí),你不會(huì)虧錢了。

    當(dāng)時(shí)間走到了2006年年底,風(fēng)光了整整5年的美國(guó)房地產(chǎn)終于從頂峰重重摔了下來(lái),這條食物鏈也終于開(kāi)始斷裂。因?yàn)榉績(jī)r(jià)下跌,優(yōu)惠貸款利率的時(shí)限到了之 后,先是普通民眾無(wú)法償還貸款,然后阿牛貸款公司倒閉,對(duì)沖基金大幅虧損,繼而連累保險(xiǎn)公司和貸款的銀行,花旗、摩根相繼發(fā)布巨額虧損報(bào)告,同時(shí)投資對(duì)沖 基金的各大投行也紛紛虧損,然后股市大跌,民眾普遍虧錢,無(wú)法償還房貸的民眾繼續(xù)增多……最終,美國(guó)次貸危機(jī)爆發(fā)。(屈直言)

    次貸危機(jī)是否會(huì)釀成全球危機(jī)?
    --
    只要功夫深, 一夜夫妻百日恩.


    ※ 來(lái)源:·WWW 未名空間站 海外: mitbbs.com 中國(guó): mitbbs.cn·[FROM: 141.219.]

    posted @ 2008-05-08 00:26 ZelluX 閱讀(431) | 評(píng)論 (0)編輯 收藏

         摘要: 一種利用虛擬機(jī)進(jìn)行的攻擊手段(下篇)  閱讀全文

    posted @ 2008-05-06 14:35 ZelluX 閱讀(1480) | 評(píng)論 (1)編輯 收藏

         摘要: 一種利用虛擬機(jī)進(jìn)行的攻擊手段  閱讀全文

    posted @ 2008-05-05 21:53 ZelluX 閱讀(1752) | 評(píng)論 (0)編輯 收藏










    Fight Club

    1. 不能談?wù)摱逢嚲銟?lè)部。
    2. 不能談?wù)摱逢嚲銟?lè)部。
    3. 只要有人喊停,或者受傷,快累死了,打斗就得停。
    4. 一次只能兩人打
    5. 一次一場(chǎng)
    6. 脫掉襯衫和鞋子
    7. 打斗沒(méi)有時(shí)限
    8. 只要你是初次參加,就一定得打。


    太混亂了

    posted @ 2008-05-04 20:44 ZelluX 閱讀(494) | 評(píng)論 (1)編輯 收藏











    秒速5センチメートル

    “櫻花飄落的速度,是每秒5厘米。”

    凄美無(wú)奈的故事,有點(diǎn)像村上的《國(guó)境以南》,只是主人公最后仍然在尋找著對(duì)方。

    新海誠(chéng)的動(dòng)畫(huà)色彩很斑斕,很華麗。

    寫(xiě)到這里,千千靜聽(tīng)里正好隨機(jī)播放到了那首One More Time, One More Chance,幾百分之一的概率,呵呵。

    晚上看風(fēng)格截然不同的National Trasure: Book of Secrets

    posted @ 2008-05-03 18:10 ZelluX 閱讀(563) | 評(píng)論 (4)編輯 收藏

    在機(jī)房電腦的Arch Linux上搭了個(gè)MediaWiki,作為自己的知識(shí)庫(kù)。
    前幾天在水木上看到的想法,覺(jué)得這樣很有成就感,盡管現(xiàn)在還沒(méi)學(xué)多少東西。
    一步一個(gè)腳印,慢慢擴(kuò)充。

    Mika的歌還真是好聽(tīng)。

    posted @ 2008-04-26 14:39 ZelluX 閱讀(381) | 評(píng)論 (2)編輯 收藏

    Problem

    Every bus in the Ekaterinburg city has a special man (or woman) called conductor. When you ride the bus, you have to give money to the conductor. We know that there are more then P% conductors and less then Q% conductors. Your task is to determine a minimal possible number of Ekaterinburg citizens.


    我只能說(shuō)太挫了。。。精度問(wèn)題搞了半天,看來(lái)浮點(diǎn)還是要盡量化成整型再算啊。


    還有個(gè)問(wèn)題就是q*i是開(kāi)區(qū)間還是閉區(qū)間,總之Wrong Answer了無(wú)數(shù)次后總算過(guò)了。。。

    posted @ 2008-04-23 22:44 ZelluX 閱讀(815) | 評(píng)論 (10)編輯 收藏

         摘要: 算法導(dǎo)論第27章,在并行處理的條件下高效的排序算法。  閱讀全文

    posted @ 2008-04-23 20:22 ZelluX 閱讀(1749) | 評(píng)論 (2)編輯 收藏

    因?yàn)镸SN一開(kāi)始會(huì)嘗試連接crl.microsoft.com,把這個(gè)網(wǎng)站屏蔽了就行。
    在hosts文件中加入
    127.0.0.1?? crl.microsoft.com

    posted @ 2008-04-20 17:10 ZelluX 閱讀(1187) | 評(píng)論 (3)編輯 收藏

    貼幾個(gè)鏈接,以后有空再看

    Microsoft Live Mail? http://securitylabs.websense.com/content/Blogs/3063.aspx#
    http://securitylabs.websense.com/content/Blogs/2907.aspx

    Google http://securitylabs.websense.com/content/Blogs/2919.aspx#

    posted @ 2008-04-18 00:30 ZelluX 閱讀(423) | 評(píng)論 (1)編輯 收藏

    http://www.nocow.cn/index.php

    抽時(shí)間多做做,提高下我可憐的算法功底 >,<

    posted @ 2008-04-17 11:48 ZelluX 閱讀(707) | 評(píng)論 (2)編輯 收藏

    ~/.vim/ftplugin/ 下有c.vim和cpp.vim
    但是vim打開(kāi)cpp和c文件時(shí)使用的配置都是c.vim中指定的

    使用vim xxx.cpp -V跟蹤了打開(kāi)的配置列表,發(fā)現(xiàn)有這么一段

    line 17: sourcing "/usr/share/vim/ftplugin/cpp.vim"
    Searching for "ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim" in "/home/wyx/.vim,/usr/share/vim,/usr/share/vim,
    /usr/share/vim/after,/home/wyx/.vim/after"
    Searching for "/home/wyx/.vim/ftplugin/c.vim"
    line 12: sourcing "/home/wyx/.vim/ftplugin/c.vim"

    原來(lái)/usr/share/vim/ftplugin/cpp.vim中直接調(diào)用了c.vim
    runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim
    把這行注釋掉,問(wèn)題解決

    posted @ 2008-04-17 00:48 ZelluX 閱讀(1931) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 免费毛片在线看不用播放器| 国产精品亚洲片在线花蝴蝶 | 日韩亚洲翔田千里在线| 精品久久久久国产免费| 亚洲91精品麻豆国产系列在线| 18禁止看的免费污网站| 亚洲美女色在线欧洲美女| 69精品免费视频| 亚洲精品第五页中文字幕| 亚洲高清中文字幕免费| 国产精品久久亚洲不卡动漫| 无码人妻精品一二三区免费| 亚洲精品无码少妇30P| 国产高清视频在线免费观看| 亚洲国产成人精品无码区花野真一| 午夜免费不卡毛片完整版| 激情小说亚洲图片| 精品亚洲一区二区三区在线观看| 二个人看的www免费视频| 亚洲AV综合色区无码另类小说| 最近免费最新高清中文字幕韩国| 亚洲伊人久久精品| 国产特级淫片免费看| fc2成年免费共享视频网站| 精品久久香蕉国产线看观看亚洲| 麻豆成人久久精品二区三区免费| 亚洲一卡2卡4卡5卡6卡在线99 | 7723日本高清完整版免费| 亚洲中文字幕乱码一区| 亚洲VA综合VA国产产VA中| 国产午夜精品久久久久免费视| 亚洲黄色免费网站| 国产免费牲交视频| 嫩草在线视频www免费看| 国产亚洲sss在线播放| 亚洲A∨午夜成人片精品网站| 久久久精品2019免费观看 | 国产福利免费视频 | 一级A毛片免费观看久久精品 | 在线播放高清国语自产拍免费| 一级毛片免费不卡|