CLR執行模型

1:首先先明確CLR的概念:

1:首先先明確CLR的概念:

 CLR(Common Language Runtime):公共語言運行時,是一個可由多種編程語言使用的"運行時";

  在運行時,CLR根本不關心開發人員用的是哪一種語言來變寫代碼,它只關注語言是否是面向CLR(面向運行時)的.

2:CLR的核心功能包括:

  內存管理、程序集加載、安全性、異常處理和線程同步。

3:如圖:

無論是用的是哪一種編譯器,結果都是一個託管模塊(managed module),託管代碼時一個標準的32位/64位Microsoft Windows可移植執行體(PE32/PE32+)文件.

本地代碼編譯器,生成的是面向特定CPU架構(X86,X64或IA64)的代碼.相反,每個面向CLR的編譯器生成的都是IL(中間語言)代碼,IL代碼也被稱爲託管代碼.

除了生成IL,面向CLR的每個編譯器還要在每個託管模塊中生成完整的元數據,元數據是一組數據表.其中一些數據表描述了模塊中定義的內容,元數據其實就是編譯器所生成的一些完整數據.

4:CLR實際是不和模塊一起工作的,它是和程序集一起工作的.

5:加載公共語言運行時

  我們生成的每個程序集既可以是一個可執行應用程序,也可以是一個DLL,最終是由CLR管理這些程序集中的代碼的執行,所以必須在運行機器中安 裝.NET FrameWork.WIndows一些版本系統已經內置打包了好了.NET FrameWork.不過需要我們手動的開啓.可以在控制面板中進行啓動在此就不做詳細解釋.作爲開發人員,這是不需要解釋的.

6:執行程序集的代碼

 執行一個方法,第一必須把它的IL轉換爲本地CPU指令,這是CLR的JIT的本質.

如圖:

 就在Main方法執行之前,CLR會檢測Main的代碼引用的所有的類型,這導致CLR分配一個內部數據結構,用於管理對所引用的類型的訪問.

一個方法只有在首次調用時,纔會造成一些性能損失,以後對該方法的所有調用都以本地代碼的形式全速運行.無需重新驗證IL並把它編譯成本地代碼.

JIT編譯器將本地CPU指令存儲到動態內存中,一旦應用程序終止,編譯好的代碼也會被丟棄,所以,如果將來再次運行應用程序,或者同時啓動應用程序的兩個實例,JIT編譯器必須再次將IL編譯成本地指令.

6:IL驗證.

IL是基於棧的,所以它的所有指令都要將操作數壓入(push)一個執行棧,並從棧 彈出(POP)結果.由於IL沒有提供操作寄存器的指令,所以人們可以很容易地創建新的語言和編譯器,生成CLR的代碼.IL指令是無類型的.IL的好處 在於是健壯和安全的,因爲它編譯爲CPU指令,CPU會進行驗證是否安全.

7:Framework類庫

  FCL(Framework Class Library):是一組DLL程序集的統稱,其中含有很多的類型定義,每個類型都公開了一些功能.

  Web服務:Web service 技術或者WCF技術,可以非常簡單的處理通過Internet發送的消息.

  Web窗體應用程序:Web Form

  Windows應用程序:開發windows GUI應用程序.

  富Internet應用程序:Silverlight技術,可以構建通過Internet來部署的GUI應用程序.這種程序能在Web瀏覽器的內部或外部運行,還可以在非Windows操作系統與移動設備傻瓜運行.

  Window控制檯:提供簡單快捷方便的方式,生成應用程序,編譯器.

  Window服務:可以通過.NET FrameWork 生成"服務"應用程序.

  數據庫存儲過程:編寫存儲過程

  組件庫:.NET FrameWord允許生成獨立的程序集(組件),其中包含的類型可以輕鬆集成到任意的程序庫中.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章