2009年12月18日 星期五

[轉貼]我要點一塊半的漢堡、可樂加薯條!

我要點一塊半的漢堡、可樂加薯條!
在上個月Scrum Master的課程中,我們的老師巴斯講了以下這個故事:

美國某條公路邊,開了一家小小的漢堡店。店裡就只有一個老闆,負責點餐、也要負責廚房裡做漢堡。有一天早上,漢堡店開門沒多久,一個流浪漢模樣的客人走了進來。店老闆看他一付沒有錢的樣子,正要趕他出門,流浪漢說話了:

「我有錢!我有一塊半!我要點一塊半的漢堡、可樂加薯條!」

店老闆看了看流浪漢,指了指櫃台上的菜單,「Mr. Customer,漢堡全餐有附可樂和薯條,可是全餐要五塊錢哦!你要不要改成單點一個漢堡,只要三塊錢。」

流浪漢好像沒聽到店老闆的話,還是回答:「我有一塊半!我就是要點一塊半的漢堡、可樂加薯條!」

店老闆眉頭一皺,覺得這個流浪漢並不單純。漢堡、可樂加薯條,明明就要五塊錢,他怎麼就是要點一塊半的漢堡、可樂加薯條?如果你是店員,你會怎麼做?

老師要我們分組討論了,身為一位優秀的漢堡店老闆,我們可以用什麼方法,來滿足這位Mr. Customer呢?

有一組說,我們賣他半個漢堡!因為一個漢堡三塊錢,半個漢堡就是一塊半啦!

老師搖搖頭,「不!我要的不是半個漢堡。我要點一塊半的漢堡、可樂加薯條!」

我這一組說,「Mr. Customer,反正你的目的也就是想吃飽,不是嗎?我今天就算你特價,一塊半,薯條可樂吃到飽!好不好?」

老師還是搖搖頭,「不!我要的不是薯條可樂吃到飽。我要點一塊半的漢堡、可樂加薯條!」

另一組說,把他趕出去!這種賠本生意不做了!

老師用力地搖搖頭,「我要點一塊半的漢堡、可樂加薯條!!!」

喂~~~老師你很盧耶,這種客人也太澳客了吧?

「你們想知道,這位漢堡店老闆是怎麼做的嗎?」老師反問。大家也點頭如搗蒜,我們的答案都已經這麼有創意、這麼agile了,還會有什麼更好的答案?

漢堡店老闆的答案很簡單:「No Problem! Mr. Customer!」 轉身就往後頭的廚房去備餐了!

怎麼回事呢?難道是老闆要做慈善事業、賠本生意嗎?

原來,在開店之前,老闆在餐廳後面看到了一隻凍死的松鼠,順手就把松鼠丟到垃圾箱裡。這時,老闆跑去翻垃圾箱。。。

太好了!松鼠還在!

就把松鼠拎起來,剝了皮、剁一剁、煎一煎,松鼠肉漢堡排就好了!(此時,我們每個人的臉上,已充滿了噁心、反胃、想吐的表情...)

老闆再繼續去翻垃圾箱,找到了隔夜丟掉的麵包、薯條,甚至還有喝剩的可樂,拚拚湊湊,OMG,一份漢堡、可樂加薯條就上桌了!

「Mr. Customer! 您的漢堡全餐來了!」

流浪漢付了一塊半,拿起他的松鼠漢堡,大口咬下。。。。

「嗯~~~~ 這個漢堡真好吃啊!」 (我們每個人都快要吐了。。。)

--------------------------------------------------------------------------------

「你們覺得這個流浪漢會發生什麼事?」

食物中毒、挫賽、 嘔吐,各種淒慘的狀況都有人說。雖然,也有人覺得,說不定還好,反正松鼠也已經煎熟了,流浪漢也常常翻垃圾筒的食物吃,抵抗力夠,應該死不了!

「那你們覺得這個店老闆怎麼樣?」

「騙子!」、「黑心!」大家倒是有志一同。

「各位專案經理,大家想一想,你們有沒有做過那一種 scope、schedule 都不可以改變的專案?」

大家默默地點頭。

「而且,還是一個難以在固定時間裡,完成所有需求的專案?」

大家繼續默默地點頭。

「你們會好好地為老板、產品經理、顧客好好地分析 scope、評估時間、以及專案風險嗎?」

「你們還會向老板、產品經理、顧客討論其他的可能性,像是半個漢堡?可樂薯條吃到飽?或者,直接跟老板說,你辦不到,不幹了?」

「或者,你們會說:No Problem,卻跑回去用死松鼠做出 $1.50 的【漢堡全餐】,交給你的老板、你的產品經理、你的 Mr. Customer?」

「你都不會擔心,你的老板、你的產品經理、你的 Mr. Customer,吃了死松鼠做的漢堡,會不會生病嗎?會不會中毒嗎?」

「你們做這樣的專案,跟那漢堡店老闆還不是一樣,都在欺騙你們的 Mr. Customer 嗎?」

--------------------------------------------------------------------------------

其實,在課堂上聽了這個松鼠漢堡的故事,我的心情是五味雜陳的。我承認,我曾經為了『使命必達』,為了準時,為了完成,而做出了這種死松鼠漢堡,不管這種漢堡有沒有人想吃,不管有人吃了會不會有事。看起來,我是交出了成果,但實際上呢?

來把目光放遠一點吧!不要只推眼前的骨牌,不要只會如期如質如預算,不要只為了找點事來做、而硬做了一個產品,要做些對得起自己的事、真正對顧客有價值的事、對組織有意義的事。

讀者,你又有賣過死松鼠漢堡嗎?

後記:查了一下,好像美國人真的有在吃松鼠的。 請自行向孤狗大神查詢 squirrel pie 的圖片與食譜,內容可能令人不悅,莫怪言之不預啊!

**********
作者:喲哪桑
原文請見作者部落格:喲哪桑Speaking之專案工作日誌

[轉貼]基於SystemC/TLM方法學的IP開發及FPGA建模

基於SystemC/TLM方法學的IP開發及FPGA建模

2009-11-11 19:37:46 作者:D.Singh, N.Sharma, V.Upadhvava 來源:意法半導體

  隨着系統級晶片技術的出現,設計規模正變得越來越大,因而變得非常複雜,同時上市時間也變得更加苛刻。通常RTL已經不足以擔當這一新的角色。 上述這些因素正驅使設計師開發新的方法學,用於複雜IP(硬體和軟體)以及複雜系統的驗證。ST公司建立了一個設計流,它從高級抽象開始,易於將模型寫入 IP的精密周期或RTL模型中。當轉入低級抽象時,建模變得複雜,故IP驗證也複雜。我們的方案最適合於這種應用場景,因為它允許人們在各地相似的環境中 運行相同的測試平台和測試場景,因而允許在整個開發周期裏高效地復用所有的測試範例和環境。
  在半導體領域,開發產品的第一步就是以高級抽象開發規範的模型,通常用C/C++來實現。這裏,SystemC和C++函式庫提供了很大幫助。它簡化了共存的硬體和軟體設計的概念化。再加上實現事務級模型間對口連接的TLM傳送庫,SystemC加速了整個驗證過程。另一個重要方面是所有不同抽象架構中經過增強的可移植性。同一測試配置可以無縫地用於不同抽象級的設計。
  本文將討論一種此類的方法學。最終的目標是設計和實現UWBMAC(媒體訪問層)IP。出於架構開發的目的,決定用SystemC來實現整個 IP。還開發了抽象級具有不同程度變化的不同架構。所付出的努力比較少,最後得到的仿真速度很快,軟體的實際編寫也可以在設計周期非常早的階段開始。該 IP的RTL結果被移植到了SPEAr系列的FPGA中。除了ARM內核和相應的一系列IP,SPEAr還提供一個可配置邏輯塊,這為用戶在實現其邏輯功能時提供了無與倫比的靈活性。從而縮短了上市時間,同樣也實現了空前的成本節省。

  設計開發方法學
  圖1所示的該方法學實現了開發的內核中的事務級建模(TLM:Transaction-Level Modeling)。TLM是一種對數字系統進行建模的高級方案,這裏將模塊之間的具體通信與功能單元或通信架構的具體實現分離開。把總線(Bus)或FIFO這類通信機制模型化成信道,用SystemC接口類將這些信道提供給模塊和部件。這些信道模型的信令接口 功能將取代事務請求,這將減少具體的低級(Low-Level)信息交換。

  圖1:IP開發方法學流程。
  在事務級建模時,
  *更加注重數據轉移的功能-即轉移的是什麼數據,從那裏來,到那裏去
  *不太關注實際的實現-即不太關注數據轉移所用的實際協議
  該方案使得系統設計師的實驗變得更加容易,例如,可以利用不同的總線架構(所有都支持公共的抽象接口),不一定需要對與任意總線進行交互的模型進行重新編碼,只要這些模型能夠通過公用接口與總線進行交互即可。
  在我們的方法中,起始點是對整個功能系統平台進行建模。這是利用SystemC並通過scfifo接口實現的。為了描述通信接口間的數據流,採用了各種架構。這些架構基本上都是協議需要遵守的參數和幀格式信息。圍繞IP創建了一個測試環境,環境中開發了測試平台,來傳輸分別來自兩側的輸入,即發送和接收。在這兩種範例中,利用這種配置產生了預期的結果或參考。在抽象層,與平台一起使用來進行修改,快速並有效地做試驗時將變得很容易,不過精度會降低一些。

  圖中所示為用於開發中下一級輸入的配置平台。這裏的核心思想是確定系統的瓶頸並執行軟硬體劃分。該方案在進行軟硬體劃分方面是有效並安全的,因為平台 提供能夠用來識別出整個系統瓶頸的原始統計信息。該階段中,實現了IP的功能模型,使其具備了具體的接口,並嵌入了功能性。而在軟硬體劃分階段將對該方法 學中所用的方案進行具體化。附加到該平台上的另一個是DMA-PL080的TLM模型,下一步是用MACHWRTL替代整個MACHWSystemC功能 模型,如圖2所示。整個周邊環境是一樣的,因此測試注入與其他步驟中的注入一樣。與之前環境的變化是採用了負責到信號變換的事務處理適配器。由於該系統基於ARM,適配器的書寫必須遵從信號級AHB總線接口。實際上,該平台將相同的環境表征為現實系統,不過與此同時,開始面對仿真性能方面的問題。顯然,我們還不能用該配置來執行廣泛的調試/驗證,不過可以運行簡單的測試(具有較短的仿真時間)。

  圖2:從SystemCMACHW向VHDLRTLMACHW適配器的轉換。
  由於在當前仿真環境中發現瓶頸,我們對基於硬體模擬XTREME服務器的平台進行評估,該平台基本提供了硬體所需的FPGA塊,並提供了軟體與 整個環境的無縫集成。基於XTREME服務器中早期平台的移植只需要很少工作量,並且相對於基於ncsim的仿真環境,實現了5倍的仿真速度。很顯然,這 使得我們能夠調試並執行VHDL,RTL設計的驗證,否則將會浪費過多時間。同時,基於Xtreme服務器的平台還提供了同等調試能力。

  硬體/軟體劃分
  系統中軟硬體劃分決策是最為重要的一個方面。之所以硬體/軟體劃分變得如此關鍵,是因為如下一些因素,如系統的即時處理需求,應用軟體的存儲限制以及其他因素。許多時候,設計開發階段一些決策依賴於直覺判斷或者先前的經驗。但當某些事情發生錯誤時這將蘊含一個風險。隨着系統複雜度以及流片成本的 增加,這種決策方法可能會鑄成大錯。強調需要一種有助於實現更好軟硬體劃分決策的方法學具有許多原因。
  在UWBMAC系統開發範例中,具有很多必須很好遵守的時間約束,這是因為應用層完全依賴於空中——即來自射頻天線的全局廣播定時。實現決策的 方案建立在我們從具體的系統級平台的執行中所獲取的經驗。我們能夠分析流水線數據通道中的數據流,能夠有效地發現它們是否將對系統構成任何瓶頸。通常,當系統中的數據流發送時,數據幀必須從MAC發送到PHY,而對於接收,所產生的數據幀則從PHY到MAC,並存入到存儲器中由軟體進行進一步的分析。在仿真場景分析過程中,能夠識別出是否需要在硬體中進行一些協議解析以採取及時的措施。

  圖3:系統中着重硬體支持需求的應用場景。
  圖3中詳細給出了一個決策範例。根據協議的需求,接收數據中有一個控制包,它通知下次發送事件的通用定時,即何時發送下一個數據包。考慮到 MAC硬體是一個典型的數據通道,並將控制幀傳送到存儲器中,軟體對控制幀進行處理並決定打開發送窗口。在發送窗口打開出現問題時,用這種方案就能發現瓶頸。系統平台結果被用來確認這一理解,於是能夠做出更好決策來實現效率更高的系統。圖3中的另一個場景顯示了軟硬體劃分後的結果。
  第一個範例中,當軟體處理控制幀時,全局定時如下:
  寫視窗程式時間=T+tRP+tPM+tintr+tsw_lat>T+texp,故在系統中,SW沒有對及時打開發送視窗的指令進行寫程式。
  在第二個範例中,當MACHW處理控制幀時,全局定時為:
  寫視窗程式時間=T+tprg_winexp,故系統中,HW對及時打開發送視窗的指令進行寫程式。
  與此同時,現有的SPEAr板起到了很大的幫助作用,因為在板上測出了AES-CCM引擎的性能。因此能夠推斷出硬體中存在AES-CCM,因為AES-CCM軟體算法給不出所需要的性能。

  挑戰
  被測設計(DUT)或被測單元(UUT)的測試對任何設計方法學來說都是最關注的一個方面。在開發的初始階段,即架構評估階段,必須需要一個高 性能的性能仿真環境。具有行為功能TLM平台能夠滿足這一需求,並對將要執行的功能進行功能檢查。當進入到低級抽象設計階段時,仿真性能大大降低,這成為有效驗證IP的一個問題。
  軟硬體的系統級仿真與軟硬體的協同仿真一塊進行。ST有自己的平台,這是一個包含硬體(RTL)的混合平台,軟體利用SystemC書寫(見圖 2)。該平台的瓶頸是環境中所引入IP的RTL,而且注意到這將大大地降低性能。正如預期,這是所遇到的約束,而且對是否能夠比主仿真運行更快的可能性進行了評估。該方案基於Xtreme服務器硬體仿真,使得運行速度至少要比NCSIM仿真快10倍。

  圖4:配有軟體的Xtreme服務器配置。
  圖4所示的該技術對第一次仿真特別實用,不需要任何有關環境配置方面的工作量。其概念是在Xtreme的FPGA中運行RTLIP。開始時,引入的時鐘(Clock)為軟體時鐘,但結果相當可喜,還簡化了RTL的系統驗證和調試。配置過程中,整個仿真環境是類似的,僅有的改變是用VHDL,RTL IP替代 SysCIP。試驗結果是仿真速度快了10倍。因此,Xtreme服務器平台滿足了RTL驗證/調試所用平台的需求。最重要的方面是具有與ncsim同等 水平的調適能力。還提供了與SystemC環境的無縫集成。

  調試功能
  硬體方面的一個更具挑戰性的問題是調試。當自檢失敗時,就需要一個相關的測試範例。為了驗證該測試範例,在檢查失敗原因時必須檢查所有的主要信號。所以需要對信號進行存放,驗證,從而找出具體的原因。利用基於XTREME服務器的平台可以很容易地執行所有這些功能,無須額外的工作量。通過將實際 硬體移入獨立的FPGA,可以很容易地改善仿真速度,不過這種方法提供的調試功能較少。因此,基於XTREME服務器的平台不僅改善了仿真速度,還能提供 非常好的調試功能。圖5給出了分析結果。

圖5:A)不同平台上的仿真性能。B)不同平台上的調試複雜性。


  FPGA建模
  該功能驗證方法學中的下一步是對設計進行實時測試。雖然以高級抽象對硬體進行建模能提供高速仿真,但無法對軟硬體集成中存在的潛在問題進行放大。同樣,利用實際激勵在FPGA上運行設計能夠實現詳盡得多的和更實際的功能覆蓋,還能實現與軟體的早期集成。

  圖6:一種普通的SPEAr(SPEArHead)SoC架構。
  SPEAr(結構化的處理增強架構)提供一個強大的數字引擎,能夠以很少的時間和很少投資提供特殊的用戶功能(圖6)。該SoC系列具有大量的功能,包括外設,連通性選擇,以及允許採用定制IP,從而有助於縮短上市時間。SPEAr採用一個或兩個先進的ARM926處理內核,帶16k(數據)和16k(指令)高速緩存,主頻為333MHz(最壞條件)。它還提供600,000門(與ASIC等效)的嵌入式可配置邏輯,還配有支持DDR/DDR2存儲器的存儲器接口,以及一個大型的連通性IP(知識產權)系列。這種強大的配置為當今的設計提供了一站式解決方案,同時,通過利用板上能夠映射SPEAr內部可配置邏輯塊的FPGA,可以將時間和資源需求最小化。

  圖7:Xtreme服務器箱配置優化。
  目標IP(UWB-MAC)被分入兩塊SPEAr板:MACRTL被分入一塊板,而將PHY仿真代碼分到另一塊中。利用一塊仿效MAC-PHY 接口的連接板將這兩塊板連接到一起。利用PC上的軟體並通過各自的以太網接口來控制這兩塊板。板上的FPGA有三個接口,分別為AHB,DMA和中斷。
  定制邏輯(本例中為MACRTL和PHYEmu)與膠合邏輯(連接三個接口所需的邏輯)一道被成功地移植進FPGA。先前開發的軟體在帶有SPEAr的ARM平台上得到成功的運行。集成了相同的測試套件,結果顯示,功能性與其他架構的結果一致。

資料來源:
http://www.eeworld.com.cn/FPGA/2009/1111/article_798_1.html
http://www.eeworld.com.cn/FPGA/2009/1111/article_798_2.html
http://www.eeworld.com.cn/FPGA/2009/1111/article_798_3.html
http://www.eeworld.com.cn/FPGA/2009/1111/article_798_4.html

2009年12月17日 星期四

第六感驚人的潛力

第六感驚人的潛力
Talks Pranav Mistry: The thrilling potential of SixthSense technology



TED大會誕生於1984年,其發起人是里查德·沃曼(Richard Saul Wurman)。TED是一個縮寫,它代表技術(technology),娛樂(entertainment)與設計(design)。2002年起,Chris Anderson[1]接管TED大會。他創立了種子基金會(The Sapling Foundation),TED大會的運行就是由這一非盈利機構做的,每一年的三月在美國彙集眾多科學家、設計師、文學家、音樂家等領域的傑出人物,在TED大會上分享他們關於技術、社會、人的思考和探索。

資料來源:
Filmed Nov 2009;Posted Nov 2009
Talks Pranav Mistry: The thrilling potential of SixthSense technology
TED大會

2009年11月27日 星期五

Lego Matrix Trinity Help Side by Side Comparison

[駭客樂高]Lego Matrix Trinity Help Side by Side Comparison

2009年11月24日 星期二

MMXX的世界

題目:未來五千天的世界
東海大學「設計邊境」第二堂/主講人:姚仁祿/5000 天是13多年,未來的世界,會有什麼不同的面貌?BMW想像未來 的車,是用特殊材質的布製成,不再用厚重的鋼鐵打造;Phili ps實驗室的感光衣服,心情項錬,以及電子刺青,讓人的情緒表露 無遺;Microsoft想像的未來,處處是螢幕,而日本電信D OCOMO想像的未來,更可以超越國界,讓人與人之間的連繫無距 離。你呢?對於13年後的世界,...

5-1



5-2


5-3


5-4


5-5


資料來源:
東海大學設計邊境第二堂

二十一世紀學院

2009年11月20日 星期五

2009年10月8日 星期四

Bandwidth vs. Throughput


Bandwidth跟Throughput的定義解釋影片

2009年7月27日 星期一

Greep / Radiohead電台司令

Greep / Radiohead電台司令

When you were here before 當妳出現在這裡時
Couldn't look you in the eyes 我眼睛無法直視著妳
You're just like an angle 妳就像個天使
Your skin makes me cry 妳的臉龐讓我想哭泣
You float like a feather 妳就像那輕飄飄的羽毛
In a beautiful world 在這個美麗的世界
I wish I was special 我希望我也是如此與眾不同
So fucking special 妳是如此的與眾不同
But I'm a creep 但我只是個怪物
I'm a weirdo 我是個怪人
What the hell am I doing here 我到底在這裡幹麻
I don't belong here 我並不屬於這裡
She's running out again run 妳又再次遠離我離開
She's running out 妳又再次遠離我
Rung rung run run 妳離開了 離開 離開 離開
She run 離開了
Whatever makes you happy 無法讓妳得到任何快樂
Whatever you want 無法讓妳得到妳想要的
You'er so fucking special 妳是如此的與眾不同
I wish I was special 我希望我也是如此與眾不同
But I'm a creep 但我只是個怪物
I'm a weirdo 我是個怪人
What the hell am I doing here 我到底在這裡幹麻

I don't belong here 我並不屬於這裡
I don't belong here 我並不屬於這裡
I don't belong here 我並不屬於這裡

20090627 超級偶像 6.杜俊瑋:Creep


20070706 超級星光大道 林宥嘉--Creep


原唱 Creep - Radiohead



When you were here before 當妳出現在這裡時
Couldn't look you in the eye 我眼睛無法直視著妳
You're just like an angel 妳宛若天使
Your skin makes me cry 容貌使我啜泣
You float like a feather 妳像那羽毛漂浮於
In a beautiful world 在這個美麗世界
I wish I was special 我希望我也是如此與眾不同
You're so very special 妳是如此的與眾不同

But I'm a creep 但我只是個怪物
I'm a weirdo 我是個怪人
What the hell am I doing here 我到底在這裡幹麻
I don't belong here 我並不屬於這裡

I don't care if it hurts 我不在乎是否會受傷
I want to have control 我希望能控制自己
I want a perfect body 我期盼有個完美的身體
I want a perfect soul 我期盼有個完美的靈魂
I want you to notice 我希望妳能注意到我
When I'm not around 當我不在你的週圍
You're so very special 妳是如此的與眾不同
I wish I was special 我希望我也是如此與眾不同

She's running out again run 妳又再次遠離我離開
She's running out 妳又再次遠離我
Rung rung run run 妳離開了 離開 離開 離開

Whatever makes you happy 如何讓妳得到任何快樂
Whatever you want 什麼是你想要的
You're so fucking special 妳是如此的與眾不同
I wish I was special 我希望我也是如此與眾不同
But I'm a creep 但我只是個怪物
I'm a weirdo 我是個怪人
What the hell am I doing here 我到底在這裡幹麻
I don't belong here 我並不屬於這裡
I don't belong here 我並不屬於這裡


參考資料:
音樂_翻唱最愛Radiohead-Creep
電台司令Radiohead《精選The Best Of》中文官網

2009年7月26日 星期日

few, little, a few, a little

few, little, a few, a little

先看看few跟little使用上的差異,主要是所形容的對象是何種名詞
(記憶法:few的字數少於little,少到算得出來,多到無法計算)

few + 可數名詞(countable)
little + 不可數名詞(uncountable/mass)

範例 1:
There is still a little time left for the team to score an equalizer.(正確的句子)
There is still a few time left for the team to score an equalizer.(錯誤的句子)
由於time是屬於不可數名詞,所以必需使用little來形容time,本句的意思是「還剩下很少時間讓球隊扳平」

範例 2:
There were a few children in the playground.(遊樂場內只有數個小孩)

再來看看有加冠詞a跟沒有冠詞a的差異
(記憶法:a few比few多一個字a,當然就多一些些囉.少到一直被否定,多到大家都肯定)

a few / a little - 具有肯定的含義,還有一些的意思,勉強夠用(positive)
few / little - 為否定含義,剩沒多少,根本不夠用(negative)


範例 1:
I have a little money, enough for a hamburger.(我有一點點錢,吃一個漢堡包還可以)
I have little money, not enough for a hamburger.(我只有很少錢,連吃一個漢堡包也不夠)

範例 2:(a little只是說明數量較少,而little則強調數量少得可憐,少到不符人們的期望)
A little progress was made on the peace talk.(和談取得一點點進展)此句尚算是正面的評價.
Little progress was made on the peace talk.(和談取得極少進展)此句則是負面評價囉.

範例 3:
A few visitors were allowed to enter the parliament building.(數個訪客獲准進入國會大樓)
Few visitors were allowed to enter the parliament building.(甚少訪客獲准進入國會大樓)

範例 4:
I have a little wine.(我有一些紅酒)意思是所擁有的紅酒還夠請人喝.
I have little wine.(我有一點紅酒)意思是自己喝都不夠了.

一般來說,在little或few前面加上a,只會用在書寫上使用,較少用於口語上,因為有可能會造成誤會.
所以口語上會改用另一組字來表達「少得可憐」的涵意,就是hardly any 和not much/not many。
Hardly any (Not much/Little) progress was made on the peace talk.(和談取得極少進展)
Hardly any (Not many/Few) visitors were allowed to enter the parliament building.(甚少訪客獲准進入國會大樓)


練習題:
1.Do you want water?There is _____left in my glass.
A.few B.a few C.little D.a little

2.There are a lot of new books,But____of them are easy to read.
A.few B.a few C.little D.a little

3.Please hurry up,There is _____ time left.
A.few B.a few C.little D.a little

4.The box is very heavy,____of us can lift it.
A.few B.a few C.little D.a little

5.Don't worry,we still have____time left.
A.few B.a few C.little D.a little

6.There are____books left,We can't lend you any one.
A.few B.a few C.little D.a little

7.Li Ping has learned Russian for four years,and he can speak______Russian now.
A.few B.a few C.little D.a little

8.There is _____ink in my pen,Please give me______
A.few B.a few C.little D.a little

9.Give me another cup of tea please,There is ____in this cup.
A.few B.a few C.little D.a little

10.Don't rush,There is still_____time left.
A.few B.a few C.little D.a little

標準答案:請看意見


可數名詞及不可數名詞的基本分辨方法:

方法一:
先將這個名詞所表示的東西分兩半,若分兩半後不能再叫原來的名稱時,可判斷為可數名詞.
但若分兩半後還可以叫原來的名稱時,則判定為不可數名詞.
如:
chair椅子: 分兩半後,這個椅子就壞了,不再具有原本椅子的功能了,因此我們判定它為可數名詞.
meat肉: 分兩半後,它還是肉啊,也還可以吃,所以我們判定它為不可數名詞. ( a piece of meat )

方法二:
不可數名詞沒有所謂的單數或複數形式,也就是說你很少會看到一個結尾是s的不可數名詞.
你也不會看到有個不定冠詞,a/an用在一個不可數名詞上.
如:
There is dirt on the floor.(地板上有泥土)
There is sand in your hair.(你的頭髮裏有沙子)

sand或許你曾看過有人寫sands但sands指的是沙攤或沙漠,意思上已改變了,其它的還有waters水域,winds大風,woods森木,times時代...etc.

a cake of soap 一塊肥皂
a bit of news 一件消息
a drop of oil 一滴油
a grain of sand 一粒沙
a pane of glass 一塊玻璃
a piece of advice 一條忠告
a pot of jam 一罐果醬
a sheet of paper 一頁紙


參考資料:
http://paper.wenweipo.com/2008/04/08/ED0804080010.htm
http://xueke.edudown.net/Article/gaozhong/yuwen/200609/648.html
http://www.ecp.com.cn/cc/x6/nwwd/20070406085730.htm
http://www.languageguide.org/english/grammar/cn/part2/non_count.jsp
http://www.slideshare.net/helenyan2002/g3

2009年7月18日 星期六

[轉貼]何謂道瓊工業指數(DJIA)?

道瓊工業指數,這是以30支在紐約證交所掛牌的績優股編製而成的股價加權指數,歷史已經超過70年。美國股市三大交易所為紐約證交所(NYSE)、美國證交所(AMEX)及那斯達克證交所(NASDAQ),一般所說的美國股市,也就是華爾街股市,是指在紐約證交所交易的股票。在NYSE上市的公司超過3000家,總市值超過17兆美元,是全球規模最大的股票市場。因此如果以道瓊工業指數來代表美國股市,是很容易被誤導的,因為就算道瓊工業指數大跌,也只代表這30支股票的組合大跌,並非美股整體表現不佳。
道瓊指數 DJIA (Dow Jones Industrial Average)

詳細的說明


道瓊指數由Charles H. Dow創立於1884年,歷史相當悠久,亦是美國最為人所熟知的一種股價指數。目前,道瓊指數共包含了四個項目:

一﹑30種工業平均指數(30 Industrial averagesDJIA)成分股包括四支科技股IBMHPIntelMicrosoft及其他知名企業如DisneyGECoca-ColaATT等。

二﹑20種運輸股指數 (20 Transportation)

三﹑15種公用事業股
(15 Utilities)

四﹑65種綜合指數
(65 Composite)
為上述三種指數中包含的65檔股票加總起來的綜合指數。


相對於NASDAQ指數,提到DJIA通常會予人『傳統經濟』、『舊經濟』的印象。不過DJIA的成分股也通常是歷史悠久,獲利穩定的大型企業,在產業中具有極大的影響力和代表性,這就是為何道瓊指數至今仍受市場重視的原因。

道瓊工業指數成分股
AAAlcoa Inc
AIGAmer Intl Group Inc (
美國國際集團)
AXPAmer Express Inc (
美國鋁業)
BABoeing Co (
波音公司)
CCitigroup Inc (
花旗集團)
CATCaterpillar Inc (
開拓重工)
DDDu Pont E I De Nem (
杜邦公司)
DISWalt Disney-Disney C (
華德迪士尼)
GEGen Electric Co (
奇異公司)
GMGen Motors (
通用汽車)
HDHome Depot Inc (
家庭大賣場)
HONHoneywell Intl Inc (
漢威聯合)
HPQHewlett Packard Co
IBMIntl Business Mach (
國際商業機器公司)
INTCIntel Cp (
英特爾)
JNJJohnson And Johns Dc (
嬌生)
JPMJp Morgan Chase Co (
摩根銀行)
KOCoca Cola Co The (
可口可樂)
MCDMcdonalds Cp (
麥當勞)
MMM3m Company (
明尼蘇達礦業製造)
MOAltria Group Inc (
菲利普摩里斯)
MRKMerck Co Inc (
默克藥廠)
MSFTMicrosoft Cp (
微軟)
PFEPfizer Inc (
輝瑞製藥)
PGProcter Gamble Co (
寶鹼)
SBCSbc Communications (SBC
通訊)
UTXUnited Tech (
聯合科技)
VZVerizon Commun (
威瑞森通訊)
WMTWal Mart Stores (
渥瑪)
XOMExxon Mobil Cp (
艾克索美孚石油)

資料來源:
何謂道瓊工業指數(DJIA)?

2009年7月16日 星期四

股神是川藏銀炒股秘訣──「只吃八分飽」和「烏龜三原則」

股市之神是川銀藏

從30歲的70日元開始投資,到成為叱吒風雲的日本股神,是川銀藏僅小學畢業,卻憑著在股市的驚人業績設立「是川經濟研究所」,登上大學教壇。他以「只吃八分飽」、「烏龜三原則」與「股票投資五原則」的簡單哲學屢創股市奇蹟。

只吃八分飽

是川認為,投資股票賣出比買進要難得多,買進的時機抓得再準,如果在賣出時失敗了,還是賺不了錢。
而賣出之所以難是因為一般不知道股票會漲到什麼價位,因此便很容易受周圍人所左右,別人樂觀,自己也跟著樂觀,最後總是因為貪心過度,而錯失賣出的良機。
日本股市有句俗話:「買進要悠然,賣出要迅速。」如果一口氣倒出,一定會造成股價的暴跌,因此,必須格外謹慎,不能讓外界知道自己在出貨,而且,他有時為了讓股票在高價位出脫,還得買進,以拉抬股價,如此買進與賣出交互進行,逐漸減少手中的持股。市場人氣正旺時,是川不忘「飯吃八分飽,沒病沒煩惱」的道理,收斂貪欲,獲利了結。遵守了「低價買進,高價賣出」的股市投資法則。

烏龜三原則

是川積多年的經驗認為,投資股票就像烏龜兔子與烏龜的競賽一樣,兔子因為太過自三信,被勝利沖昏了頭,以至於失敗。另一方則面,烏龜走得雖慢,卻是穩扎穩打,謹慎小心,反而贏得最後勝利,因此,投資人的心境必須和烏龜一樣,慢慢觀察,審慎買賣。所謂「烏龜三原則」就是:

一、選擇未來大有前途,卻尚未被世人察覺的潛力股,長期持有。
二、每日盯牢經濟與股市行情的變動,而且自己下功夫研究。
三、不可太過於樂觀,不要以為股市會永遠漲個不停,而且要以自有資金操作。

股票投資五原則,對於股市投資人,是川有兩個忠告

第一個忠告是:投資股票必須在自有資金的範圍內
「沒有現金也沒關係,一定會賺!」証券公司再怎麼以此類的甜言蜜語誘惑你,也千萬不可去做融資、融券。股價有漲亦有跌,下跌的幅度稍大,就會被追繳保証金,若不繳,便會被証券公司中止合作。當然,下跌時趕緊出脫就沒事了,可是連股市專家都很難判斷何時該賣,何況是一般投資大眾?
有時候,投資人也會運氣好而賺一筆,可是人們往往在嘗到勝利的滋味後,忘記了失敗的悲慘,而乘勝追擊,大膽深入。結果,通常的結局是,不但賠掉本錢,還得向親戚、朋友,甚至高利貸業者借一屁股債。

第二個忠告是:不要一看到報章雜誌刊出什麼利多題材,就一頭栽進去。
老實說,單聽別人的意見,或只憑報紙、雜誌的報導就想賺錢,這樣的心態本身就已經是失敗的根源。自己不下功夫研究,只想在上班之餘,看看報章雜誌有什麼利多題材,以供買進股票之依據。這樣是不可能成功的。天下豈有如此的美事?
真的想在股市賺錢的話,就得注意經濟的動向,本地經濟、世界經濟,要每天不間斷地注意。只要擁有一般程度的經濟常識,誰都辦得到,何況判斷的材料大多出現在每天的報紙上,極為方便。
是川銀藏把買股票比喻為登山,理想的買點自然是在高度離山谷不很遠的地方,可是當報紙、雜誌出現利多消息時,通常股價已漲到離山頂很近的地方。自己收集情報、在低價區買進、耐心等待,這是投資股票的秘訣。

最後,是川把他這一生的投資經驗,整理成「投資五原則」提供給讀者參考。

一、選股票不要靠人推荐,要自己下功夫研究後選擇;
二、自己要能預測一二年後的經濟變化;
三、每隻股票都有其適當價位,股價超越其應有水準,切忌追高;
四、股價最後還是得由其業績決定,做手硬做的股票千萬碰不得;
五、任何時候都可能發生難以預料的事件,因此必須記住,投資股票永遠有風險。

2009年6月22日 星期一

可愛的泡咖啡機器人

可愛的泡咖啡機器人

コーヒーを淹れさせてみた -oil Master's brain-


資料來源:
可愛的泡咖啡機器人

2009年6月15日 星期一

痞子英雄 片尾曲 完美陌生人 Perfect Stranger 歌詞

痞子英雄 片尾曲 完美陌生人 Perfect Stranger 歌詞
曲/TERDSAK JANPAN 詞/Jason 鄒承恩.痞克四自從 演唱/Jason 鄒承恩.痞克四

Dive from the blue sky 自蔚藍天空向下深潛
To see who I really am 探究最真實的自我

Facing my desire 正視深層慾望
With the answer 並藉由唯一的解藥
To start again, be brave again 讓一切從頭開始 勇敢前進

What will stop in my way? 途中還有什麼將阻擋我前行
Who will challenge the fate? 又有誰能同樣挺身對抗命運
The test of pain and rack 度過苦痛與狂暴不止的試煉

Are we living in circus? 我們生活在被人操控的馬戲團中
Are we beat up by curses? 難道只能有如詛咒般遭受痛擊
Cause I'm sure will take the race 但我卻堅信,這是必須挑戰的人生競賽

【Bridge 1】
(keep my beat alive)(維持我震動的心跳)
Holding my will 抓緊我專注一致的決心
I've never met someone like you 只因我已遇見生命中獨一無二的你

(take my breath away)(緩和我急切的呼吸)
Cause I'm blinded by your smile 眼中只容得下你美好笑容
Using tears, burying the lie 卻必須說服自己,用淚水埋藏背後謊言

【Chorus】
Oh, Pretty Stranger 最完美的陌生人
Rock my soul and world with a gentle kiss 你的輕吻足以撩動我全部靈魂
Fly, making me fly to eternal 讓我自在飛翔至無限邊際
(High, making me high to eternal)

Oh,once again, the love we make 就讓我們再次擁緊彼此
Until the sun has risen 直到太陽升起的那一刻
Our life will bond together 我們的生命將完全緊密結合

Oh mime, perfect stranger 與我,最完美的陌生人
Would you dream about me? 然而我真的會出現在你睡夢中嗎
Could you spend time with me? 或者你能將所有時光與我共享
I crave for your lips lifetime 我盡其一生都真切渴望你的吻

Breathing in frozen fever 讓我得以在凝結熱度中平穩呼吸
Standing in burning winter 在沸騰寒冬中不受動搖
All the misery need you by my side 這一切慘澹歷程都需要你陪伴我度過

【Bridge 2】
(keep my beat alive)(維持我震動的心跳)
Now seize the time 緊握擁有彼此的時刻
Defeat the weak and break my runaway 擊退潛藏脆弱和逃避慾望

(take my breath away)(緩和我急切的呼吸)
Cause I'm conquered by your eyes 因為我已征服於你堅定眼神
(Cause I'm tempted by your eyes)
and I'm losing all my mind 內心深處就此由你占據

About the Song

【創作概念】
隱身在黑暗中的,是準備衝向光明的力量。
我已準備好,掙脫一切困縛,因為妳,一個完美的陌生人。
震動我靈魂之際,真實的自己,也將重生。
Oh, Perfect Stranger.

【作詞】Jason 鄒承恩 + 自從(痞克四)
☆ 痞克四 ☆
一個除了搖滾,連情歌也是拚命唱給大家聽的樂團。
四個懷抱著搖滾夢想的痞客,認識十一年,組團九年,時間空間怎麼改變,
不會改變的是他們的「想讓全世界都聽到」的音樂夢。

☆ Jason 鄒承恩 ☆
《痞子英雄》秘密人物之一的 Twins弟,詢問度非常高的殺手角色。
做過高科技產業,偶像是香港首富李嘉誠,
優異的歌聲和外型,受蔡岳勳導演之邀加入《痞子英雄》劇組,
無論是演戲還是填詞還是唱歌,都是他的第一次。

【作曲】TERDSAK JANPAN
泰國金奬配樂大師,作品包括電影《不能說的,祕.密》等。
執掌 2009 電視劇《痞子英雄》全劇配樂,磅礡氣勢,完美詮釋全劇中心價值。

【演唱】Jason 鄒承恩+自從(痞克四)
☆ Jason 鄒承恩 ☆
蔡導一句,「Jason的歌聲真令我驚豔!」欽點演唱片尾曲《完美陌生人》及插曲《痞子英雄》。
Jason's 無名BLOG:http://www.wretch.cc/blog/jasontsou

☆ 痞克四 ☆
自從,痞克四主唱,不唱歌的時候,是電視台的節目音效師。
痞克四,不可分割的音樂體,無名BLOG:http://www.wretch.cc/blog/picksband

【音樂製作】果核有限公司 GO AHEAD Public LTD. Company
— 果核有限.夢想無限 —
音樂,是我們的出發點。
熱情,是我們的中繼站。
夢想,是我們的終點站。

沁黃的燈光色調,和煦的陽光灑落,窗外伴隨著美麗的摩天輪景色,
果核就猶如一個溫暖而熱情的大家庭。

果核有限公司在知名音樂人黃韻玲與鍾興民老師的創立帶領下,
結合了金牌音樂製作團隊、超級活動企宣人員及網路事業發展部門,
以愛音樂、愛設計、愛生活、愛分享的概念出發,
發展一個共屬創作以及實現夢想的快樂園地。



痞子英雄官方網頁

2009年5月5日 星期二

[好康] Linux System Programming 中文版電子書免費下載

今天在這篇 《Linux系统编程》中文版(Alpha)正式发布 看到有免費的 Linux System Programming (Linux 系統程式開發) 的中文版電子書可讓人下載,雖然是簡體中文版的,不過還是有一定的實用性。它是 PDF 格式,檔案大小約 2MB 左右,將近 400 頁,有需要而且不排斥簡體中文的人可以去下載來讀讀。

LSP CN Alpha(Revision 77)


資料來源:
[好康] Linux System Programming 中文版電子書免費下載

2009年4月8日 星期三

雷神之鎚Quake3 on Browser

有沒有聽過在瀏覽器(IE)玩雷神之鎚Quake 3呢?只要你有Flash version 8就有可能.
不過當然!它還只是for demo,但它已經展現了很多的想像空間了!

Play Flash Quake3 Game


這種功能對一般人來說,或許不明白這有什麼好神奇的。但如果是懂程式設計的人應該會知道它有其難度的。
因為它並不是單純的進行程式移植呢!

轉貼部份ria blog的內容解釋:
如何讓 c/c++ 程式可以跑在 Tamarin 上,下面是基本的 steps

1. c -> LLVM instructions (using slightly modified version of llvm-gcc)
c/c++ code 透過 llvm-gcc (可能有動手腳稍微改過以符合 Tamarin 的需要) 編譯成標準的 LLVM instructions (IR)

2. LLVM instructions -> opcode (run by LLVM virtual machine in as3)
這些 llvm instructions 再經由一個用 actionscript 3 implement 的 virutal machine 處理成底層的 opcode

3. as3 -> bytecode -> machine code

參考資料:
Run c/c++ in flash, again !
劃時代的Adobe Alchemy
Running C and Python Code on The Web

重要參考資料:
Alchemy:Documentation:Getting Started
Chris Lattner

2009年4月7日 星期二

搭建LLVM實驗環境[轉貼]

周末在家里,把前一段時間略為作了一些研究的LLVM的文檔翻出來又讀了一下,一時興起,到llvm的官方站點里下了llvm 2.3和 llvm-gcc 4.2,在本地搭了個llvm的實驗環境。

基本的搭建步驟如下:
1:從llvm.org里下載下來llvm 2.3的source code

2:從llvm.org里下載下來llvm-gcc 4.2的source code,在llvm的官方站點里也提供了
llvm-gcc 4.2在若干個平台上的binary版本,如果正好有自己平台相對應的binary文件,
就不需要下載llvm-gcc的源碼進行手動編譯安裝的工作了

3:將llvm 2.3的源碼包解壓縮到指定目錄,我是解壓縮到
/mnt/work/personal/open-source/LLVM/source-code/llvm-2.3 目錄下
然後
    cd /mnt/work/personal/open-source/LLVM/source-code/llvm-2.3

./configure

make

make install
編譯時間較長,在Ubuntu 8.04, T7250 Duo Core, 2G內存的本本上,大概花了半個小時左右的時間。

4:將llvm-gcc 4.2的源碼包解壓縮到指定目錄下,然后在跟該目錄平級的地方創建一個OBJ目錄用來存放編譯llvm-gcc生成的目標文件。
如,我將llvm-gcc4.2解壓縮到 LLVM/llvm-gcc4.2-2.3.source/ 目錄下,所以需要在LLVM目錄下再新建一個llvm-gcc-obj的目錄,用于存放llvm-gcc編譯過程中生成的目標文件。(注:直接在 llvm-gcc4.2-2.3.source 目錄下編譯會報錯)

cd llvm-gcc-obj/

../llvm-gcc4.2-2.3.source/configure --program-prefix=llvm- --enable-llvm=/mnt/work/personal/open-source/LLVM/source-code/llvm-2.3 --enable-languages=c,c++

(其中program-prefix是用于確保編譯生成的gcc工具的可執行文件名會有一個llvm-的前綴,而--enable-llvm則是指定步驟 3中編譯llvm生成的目標文件的所在路徑,確保llvm-gcc的編譯過程中能夠找到所需的llvm的目標文件)

make

make install
編譯過程大概也花了有將近二十分鐘。

5:確保llvm-gcc工具和llvm工具的可執行程序所在路徑已經加到了PATH環境變量中至此,llvm的實驗環境已經搭建完畢。
現在我們可以使用剛剛搭建好的環境作一個小實驗。
現在有如下內容的c++源文件test.cc:
#include <stdio.h>
#include <iostream>

using namespace std;
int main()
{
printf( "hello, the world\n" );
cout << "this from C++" << endl;
return 0;
}

實驗步驟:
1:
llvm-g++ test.cc -emit-llvm -c -o test.bc
調用llvm-g++的編譯前端為test.cc生成相應的LLVM bit code 文件。
我們也可以在調用llvm-g++的過程中添加上一些額外的選項,如
    llvm-g++ --verbose test.cc -emit-llvm -c -o test.bc
加上--verbose以確認llvm-g++前端在編譯過程中使用的是正確的頭文件
    llvm-g++ -S test.cc --emit-llvm
加上 -S 選項,生成 LLVM的匯編格式文件。

2:基於步驟1生成的bit code文件,我們可以調用lli來對其解釋執行
   lli ./test.bc
3:基於步驟1生成的bit code文件,我們可以調用llvm-dis來進行反匯編
    llvm-dis < test.bc
4:基於步驟1生成的bit code文件,我們還可以調用llc來為其生成本地的匯編文件
    llc test.bc -o test.s
5:最後我們可以調用本地g++編譯器為test.s生成本地機器碼并執行之。
    g++ test.s -o test.native
./test.native


資料來源:
搭建LLVM实验环境
額外參考資料:
Google LLVM 2.0介紹


LLVM & Rubinius
LLVM论文阅读笔记(1)

2009年4月3日 星期五

IETester - 讓多套 IE 共存於電腦上

IETester - 讓多套 IE 共存於電腦上

熟電腦的人應該都知道Windows通常只讓你在系統裏跑一套IE,並無法讓你同時跑好幾個不同版本的IE,這對寫網頁的人來說相當的麻煩,因為必需測試各個版本IE的相容性情況,總不能拿好幾台電腦來測試,裝Virtual Machine耗資源,速度又慢。
這裏介紹一套程式,IETester,檔案大小約24MB,它可以讓你同時使用IE5/IE6/IE7/IE8的瀏覽器核心,來看看網頁輸出的結果唷,當然啦,它還有一些小缺點如下:
* 改變視窗大小後,網頁內容可能會不見
* 上一頁 / 下一頁的按鈕功能有些不正常
* 有時無法正確取得焦點
* 不支援 Java applets
* Flash 無法在 IE 6 核心底下執行
注意:
要安裝它的最小需求是:有安裝 IE 7 的 Windows XP 或 Vista。



也有另一套叫MultipleIE也有類似的功能(可以測IE3~6),但它只能裝XP,裝在Vista上會有問題。

參考網頁:
http://nelson.pixnet.net/blog/post/19121065

2009年3月10日 星期二

Bluespec Helloworld

Helloworld Version 1
一個Bluespec設計應該是多個packages的集合,但在這個範例程式中我們將只會有一個package。
因此我們先開始寫一個叫"FirstAttempt"的package,剛好這是一個練習加註解去解譯這個程式的好機會。
程式如下:
package FirstAttempt;
//My first design in the cool Bluespec language
endpackage

package名稱必需要跟檔名相同,因此我們將上面的程式儲存為"FirstAttempt.bsv"。
請使用下面的命令去編譯它:
bsc FirstAttempt.bsv
它應該可以很正確的被編譯成功,並且沒有任何的錯誤。

然而一個package至少應該包含了一些類型及常數的初使化定義,及一些module的定義。
比如下個範例,我們定義了一個字串,讓我們將來可以將它輸出到螢幕上。
package FirstAttempt;
//My first design in the cool Bluespec language
String s = "Hello world";
endpackage

接下來我們思考一下在這個範例裏的主要module。我們要思考的是它將如何和其它的硬體進行溝通呢?
不管這些硬體都設計在這個模組裏,或是和外部的硬體都需要進行溝通的。因此我們必需決定它的溝通介面。
但在我們這個範例中,是可以完全不理會溝通介面,因此我們並沒有去定義它。

為了方便起見,所有的modules的命名都以"mk"開始命令,並且將這個主要module宣告在package裏,
範例程式如下:
package FirstAttempt;
//My first design in the cool Bluespec language
String s = "Hello world";

module mkAttempt;
endmodule
endpackage

上面的範例就是最基本的一個package加一個module。

接下來我們要為這個module加入rules(規則),而這個rules將直接定義在module的內部。
(通常我們應該都會為module加入interface(界面)以提供跟外界互動,但在這個範例裏我們沒有這麼做)。
這個範例裏我們只有一條規則,規則名稱為"say_hello",它將會使用系統命令"$display"執行輸出文字訊息。
接著我們要將它合成,以進行模擬其執行結果。
範例程式如下:
package FirstAttempt;
//My first design in the cool Bluespec language
String s = "Hello world";

(* synthesize *)
module mkAttempt(Empty);
rule say_hello;
$display(s);
endrule
endmodule
endpackage

Simulation(模擬)
將我們的package轉成Verilog RTL:
bsc -verilog FirstAttempt.bsv
(產生)Verilog file created: mkAttempt.v

產生的verilog檔內容如下
`ifdef BSV_ASSIGNMENT_DELAY
`else
`define BSV_ASSIGNMENT_DELAY
`endif

module mkAttempt(CLK,
RST_N);
input CLK;
input RST_N;

// handling of system tasks

// synopsys translate_off
always@(negedge CLK)
begin
#0;
$display("Hello world");
end
// synopsys translate_on
endmodule // mkAttempt

將mkAttempt.v轉成可執行的模擬程式
bsc -o sim -e mkAttempt mkAttempt.v
./sim

mkAttempt指向我們所設計裏的top-level module。
請試看看它的執行結果,你將會看見每個clock cycle都會執行一次rule,所以會在螢幕上一直印出"Hello world"。

執行畫面如下:

Helloworld version 2
如果你有執行它,你應該發現了,程式並不會停止執行,如果想改成印一次Hello world然後停止程式,
修改程式碼如下:
package FirstAttempt;
String s = "Hello world";

(* synthesize *)
module mkAttempt(Empty);
rule say_hello;
$display(s);
$finish(0);
endrule
endmodule
endpackage


Helloworld version 3
接著我們再改個版本,使它可以執行"Hello world"的命令5次,為了這個目的,我們必需要有一個計數用的暫存器。將計數器宣告在在這module裏,在rule之前。這個計數器需要計數到5,因此3 bits就夠用了,所以我們可以用UInt#(3)來宣告,它的意思是使用無號的3位元整數。我們也指定了暫存器的初使值為0(它指的是一發生reset時就將0放回暫存器中)。
宣告使用計數器程式如下:
package FirstAttempt;
//My first design in the cool Bluespec language
String s = "Hello world";
(* synthesize *)
module mkAttempt(Empty);
Reg#(UInt#(3)) ctr <- mkReg(0);

rule say_hello;
$display(s);
$finish(0);
endrule
endmodule
endpackage

接著我們必需控制什麼時候數值,什麼時候結束。
package FirstAttempt;
//My first design in the cool Bluespec language
String s = "Hello world";
(* synthesize *)
module mkAttempt(Empty);
Reg#(UInt#(3)) ctr <- mkReg(0);

rule say_hello;
ctr <= ctr + 1;
$display(s);
if (ctr == 4) $finish(0);
endrule
endmodule
endpackage

Helloworld version 4
package FirstAttempt;
//My first design in the cool Bluespec language
String s = "Hello world";
(* synthesize *)
module mkAttempt(Empty);
Reg#(UInt#(3)) ctr <- mkReg(0);

rule end_run(ctr == 5);
$finish(0);
endrule

rule say_hello(ctr < 5);
ctr <= ctr + 1;
$display(s);
endrule
endmodule
endpackage

Helloworld version 5
package FirstAttempt;
//My first design in the cool Bluespec language
String s = "Hello world";
(* synthesize *)
module mkAttempt(Empty);
Reg#(UInt#(3)) ctr <- mkReg(0);

rule end_run(ctr == 5);
$finish(0);
endrule

rule say_hello(ctr < 5);
$display(s);
endrule

rule inc_ctr;
ctr <= ctr + 1;
endrule
endmodule
endpackage

自己比較一下version 3/4/5的差異性吧^^

原始官方文件:


資料來源:
Learning Bluespec Wiki
Learning Bluespec
MIT開放式課程

2009年2月27日 星期五

養老計劃

這個是朋友轉寄給我看的文章,還蠻有趣的,貼出來給大家看看囉!

大約兩年前,我太太和我搭乘一艘公主號遊輪經過西地中海。晚餐時,我們注意到有一位老太太單獨坐在大廳的大樓梯邊。我也注意到,所有的工作人員、幹部、服務生、小弟等似乎都和她很熟絡。 我問我們的服務生那位老太太是誰,本以為他會告訴我老太太是船東,但他告訴我他只知道她已經在這艘船上待了四趟航程。
有一天晚上,當我們離開餐廳時,我和她互相看了一眼,於是我就停下來和她打個招呼。我們聊了一下,然後我說:「聽說妳在這艘船上已經參加了前面四趟航程。」她說:「是啊。」我說:「我不明白。」
她立即答道:「這比安養院便宜。」
以下是老太太的看法:
所以,我的將來不會有安養院。
當我年老體衰,我就要搬到一艘公主號遊輪上去。安養院平均每天要花 200 元。我查過公主號遊輪的價錢,我可以有長期折扣和老年折扣,每天只要 135 元。 每天剩下 65 元可以用來:
1. 每天只要 10 元小費。
2. 只要我! 還能走到餐廳,我每天可吃到十餐,不然我也可以叫客房服務,就是每天都可以在床上吃早餐。
3. 公主號有三個游泳池,一間健身房,免費的洗衣機和烘乾機,每天晚上都有表演。
4. 船上有免費的牙膏和刮鬍刀、免費的肥皂和洗髮精。
5. 他們把你當做客人而不是病人。再加 5 元的小費,船上所有的工作人員都會來幫助你。
6. 每 7 到 14 天我都會遇到一些新的人。
7. 電視機壞了嗎?需要換燈泡嗎?需要換床墊嗎?沒問題! !他們會修好所有的東西並為了你的不方便向你致歉。
8. 你都不必要求,每天就有乾淨的床單和毛巾。
9. 如果你在安養院跌倒摔斷了大腿,你就要仰賴醫療保險;如果你在公主號跌倒摔斷了大腿,他們就會把你升級到更好的房間,還有更好的!
10.你想去看南非、巴拿馬運河、大溪地、澳洲、紐西蘭、亞洲,或其他地方?公主號會有船去到那
所以,別去安養院找我,船靠岸時來找我。

又,別忘了,當你死了,
他們就把你從船邊丟下去——不另收費。

-----------------------------------------------------------------------------
奇怪!它是怎麼算的,可以算到一天只要135元@@

參考網址:
富遊網公主遊輪簡介
公主遊輪官網
豪華退休 住郵輪養老 聯合新聞網

2009年2月13日 星期五

Android on x86 展示影片

Android on the HP 2133 Demo


Android on Asus EeePC 901 Demo

Linux kernel 各版本的精進功能

留個專門介紹各個Linux Kernel版本改變的地方

Linux 2.6.34
Linux 2.6.33
Linux 2.6.32
Linux 2.6.31
Linux 2.6.30
Linux 2.6.29
Linux 2.6.28
Linux 2.6.27

Kernel Log: What's coming in 2.6.28 - Part 9: Fastboot and other remainders

API changes in the 2.6 kernel series
Porting device drivers to the 2.6 kernel

Fred's Fastboot 快速開機


資料來源:
fred's fastboot
再談 FastBoot 快速開機簡記

Fred其它文章
桌面開發
快速開發
Fred's Homepage

ACPI和APIC有什麽關系?[轉貼]

很多人問道了什麽ACPI,什麽是APIC,他們有没有關系?名字這麽相近。下面給出我對其的一些理解,具體的解釋可以查看内核文檔庫的内核參數文件:
/usr/src/`uname -r`/Documents/kernel-parameters.txt

ACPI就是Advanced Configuration and Power Interface的縮寫,意思是“高級配置與電源接口”。這是英特爾、微軟和東芝共同開發的一種電源管理標准。
ACPI可實現以下功能:   
1、用户可以使外設在指定時間開關;   
2、使用筆記本電腦的用户可以指定計算機在低電壓的情况下進入低功耗狀態,以保證重要的應用程序運行;   
3、操作系統可以在應用程序對時間要求不高的情况下降低時鐘頻率;
4、操作系統可以根據外設和主板的具體需求為它分配能源;
5、在無人使用計算機時可以使計算機進入休眠狀態,但保證一些通信設備打開;
6、即插即用設備在插入時能够由ACPI來控制。
不 過,ACPI和其他的電源管理方式一様,要想享受到上面這些功能,必須要有軟件和硬件的支持。在軟件方面,Windows 98及其後續産品和Windows 2000都對ACPI給予了全面的支持;而Linux的内核目前對此支持得并不是太理想。硬件方面比較麻煩,除了要求主板、顯卡和網卡等外設要支持 ACPI外,還需要機箱電源的配合。電源在提供5伏電壓給主板的同時,還必須使電流穩定在720毫安以上才可以,這様它才能够實現電腦的“睡眠”和“唤醒 ”。
ACPI共有六種狀態,分別是S0到S5,它們代表的含義分別是:
S0–實際上這就是我們平常的工作狀態,所有設備全開,功耗一般會超過80W;
S1–也稱為POS(Power on Suspend),這時除了通過CPU時鐘控制器將CPU關閉之外,其他的部件仍然正常工作,這時的功耗一般在30W以下;(其實有些CPU降温軟件就是利用這種工作原理)
S2–這時CPU處於停止運作狀態,總線時鐘(Bus Clock)也被關閉,但其餘的設備仍然運轉;
S3–這就是我們熟悉的STR(Suspend to RAM),這時的功耗不超過10W;
S4–也稱為STD(Suspend to Disk),這時系統主電源關閉,但是硬碟仍然帶電並可以被唤醒 再進入系統時需重跑BIOS,如同WindowsXP的睡眠模式行為;
S5–這種狀態是最乾脆的,就是連電源在内的所有設備全部關閉,功耗為0。
我們最常用到的是S3狀態,即Suspend to RAM(載入到記憶體)狀態,簡稱STR。顧名思義,STR就是把系統進入STR前的工作狀態數據都存放到記憶體中去。在STR狀態下,電源仍然繼續為記憶體等 最必要的設備供電,以確保數據不丢失,而其他設備均處於關閉狀態,系統的耗電量極低。一旦我們按下Power按鈕(主機電源開關),系統就被唤醒,馬上從 内存中讀取數據並恢復到STR之前的工作狀態。記憶體的讀寫速度極快,因此我們感到進入和離開STR狀態所花費的時間不過是幾秒鐘而已;而S4狀態,即 STD(載入到硬盤)與STR的原理是完全一様的,只不過數據是保存在硬盤中。由於硬盤的讀寫速度比内存要慢得多,因此用起來也就没有STR那麽快了。 STD的優點是只通過軟件就能實現,比如Windows 2000就能在不支持STR的硬件上實現STD。
之前的電源管理是APM(Advanced Power Management),那麽ACPI和APM相比有什麽區別呢?

2、ACPI與APM比較
APM 1.0&1.1:由BIOS執行電源管理;
APM 1.2:操作系統定義電源管理時間,由BIOS負責執行;
ACPI:BIOS收集硬件信息,定義電源管理方案;由操作系統負責執行。
APM是一種軟件解决方案,因此是與操作系統有關的, 而ACPI是工業標准,包括了軟件和硬件方面的規範。

APIC (高級可編程中斷控制器)對計算機來講有兩個作用
一是管理IRQ的分配,可以把傳統的16個IRQ擴展到24個(傳統的管理方式叫PIC),以適應更多的設備。
二是管理多CPU。由於Nf2主板并不支持多CPU,所以,APIC關閉直接的影響是减少了可用的IRQ。
不過,如果板卡不是非常多的話,關閉 APIC對系統是没有什麽影響的。
要實現SMP功能,我們使用的CPU必須具備以下要求:
CPU 内部必須内置APIC單元。Intel 多處理規範的核心就是高級可編程中斷控制器(Advanced Programmable Interrupt Controllers–APICs)的使用。CPU通過彼此發送中斷來完成它們之間的通信。通過給中斷附加動作(actions),不同的CPU可以在 某種程度上彼此進行控制。每個CPU有自己的APIC(成為那個CPU的本地APIC),並且還有一個I/O APIC來處理由I/O設備引起的中斷,這個I/O APIC是安裝在主板上的,但每個CPU上的APIC則不可或缺,否則將無法處理多CPU之間的中斷協調。
APIC可能遇到的問題,很多這類問題可以通過BIOS更新來解决。
下面的是通過更改HAL類型來解决
  CPU實際運行頻率與BIOS設定頻率不符
  NF2的用户大约有10%的會出現CPU實際運行頻率與BIOS設定頻率不符的問題。我們稱之為“頻率不對”。
  這種現象帶來的直接後果就是在測試3dmark或跑3D游戲的時候,會感覺不流暢,也稱之為“頓”。
   一般在更改BIOS設置後、更新驅動後重啓時,用測試軟件如Aida32、MBM5等可以看到CPU的運行頻率和你在BIOS裏設置得不一様,而且差距 很大。這個時候,用super pi測試CPU速度,會比平常花費時間長好幾秒,用3dmark跑測試,會比平常低幾百分甚至上千分。在3dmark中看到的CPU頻率,也與BIOS設 定不符合。
  如果出現這種情况,則屬於我們所討論的“頻率不對”的問題。
  不過,不是所有的3D游戲“頓”都是這個原因。判斷的方法是:如果你只有個別游戲“頓”,或者用上述軟件測試頻率正確,就不是此問題。
  如果判斷確實屬此問題,解决的方法也很簡單,經過網友討論,只要關閉APIC功能即可。(注意,是APIC,不是ACPI)。

有一些服務器(比如IBM的,HP的),安裝LINUX時,會給出内核的錯誤,導致無法安裝,這個時候可以在安裝的時候輸入linux acpi=off noapic應該是安裝上的。

資料來源:
http://mlsx.xplore.cn/2006/01/12/what-difference-between-acpi-and-apic.html

2009年2月11日 星期三

Vista超級終端機

Vista已取消內建終端機的功能,所以Vista原則上是沒有超級終端機的.但是在開發程式時,常會需要用到啊@@
所以你有2個選擇方案
(1)將XP的超級終端機 Copy 到你的Vista內去使用
(2)使用Tera Term,它也支援UTF8/SSH/telnet/Macro,它是BSD License.


2009年1月18日 星期日

從VT-x到VT-d Intel虚擬化技術發展藍圖[轉貼]

當前非常熱門的Virtualization虚擬化技術的出現和應用其實已經有數十年的歷史了,在早期,這個技術主要應用在服務器以及大型主機上面,現在,隨着PC性能的不斷增長,Virtualization也開始逐漸在x86架構上流行起來。

虚擬化技術將各種資源虚擬出多台主機,以提高這些資源的共享率和利用率,虚擬化可以將IT環境改造成為更加强大、更具彈性、更富有活力的架構。通過把多個操作系統整合到一台高性能服務器上,最大化利用硬件平台的所有資源,用更少的投入實現更多的應用,還可以簡化IT架構,降低管理資源的難度,避免IT架構的非必要擴張。客户虚擬機的真正硬件無關性還可以實現虚擬機的運行時遷移,可以實現真正的不間斷運行,從而最大化保持業務的持續性,而不用為購買超高可用性平台而付出高昂的代價。

和Sun上的虚擬化技術(CPU分區)比起來,x86上的虚擬化要落後不少的,然而確實在不斷進步着,在數年前,x86上還没有什麽硬件支持,甚至連指令集都不是為虚擬化而設計,這時主要靠完全的軟件來實現虚擬化,當時的代表是VMware的産品,以及尚未被Microsoft收購Connectix開發的Virtual PC,在服務器市場上應用的主要是VMware的産品,包括GSX Server和稍後的ESX Server,這些軟件虚擬化産品在關鍵指令上都采用了二進制模擬/翻譯的方法,開銷顯得比較大,後期出現了Para-Virtualization部分虚擬化技術,避免了一些二進制轉换,性能得到了提升,不過仍然具有隔離性的問題。

今天,虚擬化技術的各方面都有了進步,虚擬化也從純軟件逐深入到處理器級虚擬化,再到平台級虚擬化乃至輸入/輸出級虚擬化,代表性技術就是Intel Virtualization Technology for Directed I/O,簡寫為Intel VT-d,在介紹這個Intel VT-d之前,我們先來看看x86硬件虚擬化的第一步:處理器輔助虚擬化技術,也就是Intel Virtualization Technology,分為對應Itanium平台的VT-i和對應x86平台的VT-x兩個版本。AMD公司也有對應的技術AMD-V,用于x86平台。我們介紹的是x86平台上的VT-x技術,VT-i技術原理上略為相近。
純軟件虚擬化主要的問題是性能和隔離性。Full Virtualization完全虚擬化技術可以提供較好的客户操作系統獨立性,不過其性能不高,在不同的應用下,可以消耗掉主機10%~30%的資源。而OS Virtualization可以提供良好的性能,然而各個客户操作系統之間的獨立性并不强。無論是何種軟件方法,隔離性都是由Hypervisor軟件提供的,過多的隔離必然會導致性能的下降。
這些問題主要跟x86設計時就没有考慮虚擬化有關。我們先來看看x86處理器的Privilege特權等級設計。

x86架構為了保護指令的運行,提供了指令的4個不同Privilege特權級彆,術語稱為Ring,從Ring 0~Ring 3。Ring 0的優先級最高,Ring 3最低。各個級彆對可以運行的指令有所限制,例如,GDT,IDT,LDT,TSS等這些指令就只能運行于Privilege 0,也就是Ring 0。要注意Ring/Privilege級彆和我們通常認知的進程在操作系統中的優先級并不同。
操作系統必須要運行一些Privilege 0的特權指令,因此Ring 0是被用于運行操作系統内核,Ring 1和Ring 2是用于操作系統服務,Ring 3則是用于應用程序。然而實際上并没有必要用完4個不同的等級,一般的操作系統實現都僅僅使用了兩個等級,即Ring 0和Ring 3,如圖所示:

也就是説,在一個常規的x86操作系統中,系統内核必須運行于Ring 0,而VMM軟件以及其管理下的Guest OS却不能運行于Ring 0——因為那様就無法對所有虚擬機進行有效的管理,就像以往的協同式多任務操作系統(如,Windows 3.1)無法保證系統的穩健運行一様。在没有處理器輔助的虚擬化情况下,挑戰就是采用Ring 0之外的等級來運行VMM (Virtual Machine Monitor,虚擬機監視器)或Hypervisor,以及Guest OS。
現在流行的解决方法是Ring Deprivileging(暫時譯為特權等級下降),并具有兩種選擇:客户OS運行于Privilege 1(0/1/3模型),或者Privilege 3(0/3/3模型)。
無論是哪一種模型,客户OS都無法運行于Privilege 0,這様,如GDT,IDT,LDT,TSS這些特權指令就必須通過模擬的方式來運行,這會帶來很明顯的性能問題。特彆是在負荷沉重、這些指令被大量執行的時候。
同時,這些特權指令是真正的“特權”,隔離不當可以嚴重威脅到其他客户OS,甚至主機OS。Ring Deprivileging技術使用IA32架構的Segment Limit(限制分段)和Paging(分頁)來隔離VMM和Guest OS,不幸的是EM64T的64bit模式并不支持Segment Limit模式,要想運行64bit操作系統,就必須使用Paging模式。
對于虚擬化而言,使用Paging模式的一個致命之處是它不區分Privileg 0/1/2模式,因此客户機運行于Privileg 3就成為了必然(0/3/3模型),這様Paging模式才可以將主機OS和客户OS隔離開來,然而在同一個Privileg模式下的不同應用程序(如,不同的虚擬機)是無法受到Privileg機構保護的,這就是目前IA32帶來的隔離性問題,這個問題被稱為Ring Compression。

IA32不支持VT,就無法虚擬64-bit客户操作系統
這個問題的實際表現是:VMware在不支持Intel VT的IA32架構CPU上無法虚擬64-bit客户操作系統,因為無法在客户OS之間安全地隔離。
作為一個芯片輔助(Chip-Assisted)的虚擬化技術,VT可以同時提升虚擬化效率和虚擬機的安全性,下面我們就來看看Intel VT帶來了什麽架構上的變遷。我們談論的主要是IA32上的VT技術,一般稱之為VT-x,而在Itanium平台上的VT技術,被稱之為VT-i。
VT-x將IA32的CU操作擴展為兩個forms(窗體):VMX root operation(根虚擬化操作)和VMX non-root operation(非根虚擬化操作),VMX root operation設計來供給VMM/Hypervisor使用,其行為跟傳統的IA32并無特彆不同,而VMX non-root operation則是另一個處在VMM控制之下的IA32環境。所有的forms都能支持所有的四個Privileges levels,這様在VMX non-root operation環境下運行的虚擬機就能完全地利用Privilege 0等級。

兩個世界:VMX non-root和VMX root
和一些文章認為的很不相同,VT同時為VMM和Guest OS提供了所有的Privilege運行等級,而不是只讓它們分彆占據一個等級:因為VMM和Guest OS運行于不同的兩個forms。
由此,GDT、IDT、LDT、TSS等這些指令就能正常地運行于虚擬機内部了,而在以往,這些特權指令需要模擬運行。而VMM也能從模擬運行特權指令當中解放出來,這様既能解决Ring Aliasing問題(軟件運行的實際Ring與設計運行的Ring不相同帶來的問題),又能解决Ring Compression問題,從而大大地提升運行效率。Ring Compression問題的解决,也就解决了64bit客户操作系統的運行問題。
為了建立這種兩個虚擬化窗體的架構,VT-x設計了一個Virtual-Machine Control Structure(VMCS,虚擬機控制結構)的數據結構,包括了Guest-State Area(客户狀態區)和Host-State Area(主機狀態區),用來保存虚擬機以及主機的各種狀態參數,并提供了VM entry和VM exit兩種操作在虚擬機與VMM之間切换,用户可以通過在VMCS的VM-execution control fields裏面指定在執行何種指令/發生何種事件的時候,VMX non-root operation環境下的虚擬機就執行VM exit,從而讓VMM獲得控制權,因此VT-x解决了虚擬機的隔離問題,又解决了性能問題。
我們可以看到,Inter VT的出現,可以解决了重要的虚擬處理器架構問題,讓純軟件虚擬化解决方案的性能問題得以大大緩解。然而要做的事情還有很多。
我們知道對于服務器而言,很重要的一個組成部分就I/O,CPU的計算能力提升雖然可以更快地處理數據,但是前提是數據能够順暢的到達CPU,因此,無論是存儲,還是網絡,以及圖形卡、内存等,I/O能力都是企業級架構的一個重要部分。為此,人們不但在傳輸帶寬上投資(比如從百兆以太網到千兆以太網再到萬兆以太網),還在各種系統和架構上進行了大量的投入(比如吞吐量更高的RAID系列、多層數據中心)。
在虚擬化技術中,隨着整體處理器資源的利用效率的提升,對數據I/O也提出了更高的要求。
VMM虚擬機管理器必須提供I/O虚擬化來支持處理來自多個客户機的I/O請求,當前的虚擬化技術采用下列的方式來處理I/O虚擬化。

Full Virtualization


模擬I/O設備:VMM對客户機摸擬一個I/O設備,通過完全模擬設備的功能,客户機可以使用對應真實的驅動程序,這個方式可以提供完美的兼容性(而不管這個設備事實上存不存在),但是顯然這種模擬會影響到性能。作為例子,各種虚擬機在使用軟盤映像提供虚擬軟驅的時候,就運行在這様的方式,以及Virtual PC的模擬的真實的S3 Virge 3D顯卡,VMware系列模擬的Sound Blaster 16聲卡,都屬於這種方式。

Para- Virtualization


額外軟件界面:這個模型比較像I/O模擬模型,VMM軟件將提供一系列直通的設備接口給虚擬機,從而提升了虚擬化效率,這有點像Windows操作系統的DirectX技術,從而提供比I/O模擬模型更好的性能,當然兼容性有所降低,例如VMware模擬的VMware顯卡就能提供不錯的顯示速度,不過不能完全支持DirectDraw技術,Direct3D技術就更不用想了。相似的還有VMware模擬的千兆網卡,等等,這些品牌完全虚擬的設備(例如,VMware牌顯卡,VMware牌網卡)需要使用特制的驅動程序部分直接地和主機、硬件通信,比起以前完全模擬的通過虚擬機内的驅動程序訪問虚擬機的十兆百兆網卡,可以提供更高的吞吐量。
現在的I/O設備虚擬化主要是采用模擬方式或者軟件接口方式,因此性能上很容易成為瓶頸——畢竟傳統的機器上,I/O設備都很容易成為瓶頸,因此Intel就適時提出了Intel Virtualization Technology for Directed I/O,簡稱為Intel VT-d。
I/O虚擬化的關鍵在于解决I/O設備與虚擬機數據交换的問題,而這部分主要相關的是DMA直接内存存取,以及IRQ中斷請求,只要解决好這兩個方面的隔離、保護以及性能問題,就是成功的I/O虚擬化。


和處理器上的Intel VT-i和VT-x一様,Intel VT-d技術是一種基于North Bridge北橋芯片(或者按照較新的説法:MCH)的硬件輔助虚擬化技術,通過在北橋中内置提供DMA虚擬化和IRQ虚擬化硬件,實現了新型的I/O虚擬化方式,Intel VT-d能够在虚擬環境中大大地提升 I/O 的可靠性、靈活性與性能。
傳統的IOMMUs(I/O memory management units,I/O内存管理單元)提供了一種集中的方式管理所有的DMA——除了傳統的内部DMA,還包括如AGP GART、TPT、RDMA over TCP/IP等這些特彆的DMA,它通過在内存地址範圍來區彆設備,因此容易實現,却不容易實現DMA隔離,因此VT-d通過更新設計的IOMMU架構,實現了多個DMA保護區域的存在,最終實現了DMA虚擬化。這個技術也叫做DMA Remapping。

I/O設備會産生非常多的中斷請求,I/O虚擬化必須正確地分離這些請求,并路由到不同的虚擬機上。傳統設備的中斷請求可以具有兩種方式:一種將通過I/O中斷控制器路由,一種是通過DMA寫請求直接發送出去的MSI(message signaled interrupts,消息中斷),由于需要在DMA請求内嵌入目標内存地址,因此這個架構須要完全訪問所有的内存地址,并不能實現中斷隔離。
VT-d實現的中斷重映射(interrupt-remapping)架構通過重新定義MSI的格式來解决這個問題,新的MSI仍然是一個DMA寫請求的形式,不過并不嵌入目標内存地址,取而代之的是一個消息ID,通過維護一個表結構,硬件可以通過不同的消息ID辨認不同的虚擬機區域。VT-d實現的中斷重映射可以支持所有的I/O源,包括IOAPICs,以及所有的中斷類型,如通常的MSI以及擴展的MSI-X。
VT-d進行的改動還有很多,如硬件緩衝、地址翻譯等,通過這些種種措施,VT-d實現了北橋芯片級彆的I/O設備虚擬化。VT-d最終體現到虚擬化模型上的就是新增加了兩種設備虚擬化方式:

左邊是傳統的I/O模擬虚擬化,右邊是直接I/O設備分配
直接I/O設備分配:虚擬機直接分配物理I/O設備給虚擬機,這個模型下,虚擬機内部的驅動程序直接和硬件設備直接通信,只需要經過少量,或者不經過VMM的管理。為了系統的健壯性,需要硬件的虚擬化支持,以隔離和保護硬件資源只給指定的虚擬機使用,硬件同時還需要具備多個I/O容器分區來同時為多個虚擬機服務,這個模型幾乎完全消除了在VMM中運行驅動程序的需求。例如CPU,雖然CPU不算是通常意義的I/O設備——不過它確實就是通過這種方式分配給虚擬機,當然CPU的資源還處在VMM的管理之下。
I/O設備共享:這個模型是I/O分配模型的一個擴展,對硬件具有很高的要求,需要設備支持多個功能接口,每個接口可以單獨分配給一個虚擬機,這個模型無疑可以提供非常高的虚擬化性能表現。
運用VT-d技術,虚擬機得以使用直接I/O設備分配方式或者I/O設備共享方式來代替傳統的設備模擬/額外設備接口方式,從而大大提升了虚擬化的I/O性能。

主流雙路Xeon Stoakley平台將支持Intel VT-d技術

高端四路Caneland平台也會支持VT-d功能
根據資料表明,不日發布的Stoakley平台和Caneland平台上將包含VT-d功能,Stoakley平台是現在的Bensley的下一代産品,用于雙路Xeon處理器,而Caneland則是Truland的繼任者,用于四路Xeon處理器,這些芯片組都能支持最新的45nm Penryn處理器。

從Intel虚擬化技術發展路綫圖來看,虚擬化無疑是從處理器逐漸擴展到其他設備的,從VT-i/VT-x到VT-d就非常體現了這個過程,對于關注I/O性能的企業級應用而言,完成了處理器的虚擬化和I/O的虚擬化,整個平台的虚擬化就接近完成了,因此在未來,Intel將會持續地開發VT-d技術,將各種I/O設備中加入虚擬化特性,從而提供一個强大的虚擬化基礎架構。

資料來源:
http://www.wlkj.net/redirect.php?tid=34660&goto=lastpost
http://www-07.ibm.com/tw/imc/seminar/download/200711_C_2.ppt
漫談CPU虛擬技術之Intel篇
影片:IBM何謂虛擬化技術?
影片:IBM BladeCenter 虛擬化I/O技術
影片:IBM 第四代多處理器伺服器為虛擬化環境所帶來的好處
IBM虛擬化新五步
IBM多系統虛擬技術運作優勢白皮書
Xen and the Art of Virtualization
Linux_Weather_Forecast/virtualization

一個小故事讓我們明白資金流通的意義

“又是炎熱小鎮慵懶的一天。太陽高掛,街道無人,每個人都債台高築,靠信用度日。這時,從外地來了一位有錢的旅客,他進了一家旅館,拿出一張1000 元鈔票放在櫃檯,說想先看看房間,挑一間合適的過夜,就在此人上樓的時候---- 店主抓了這張1000 元鈔,跑到隔壁屠戶那裡支付了他欠的肉錢...