摘要:
收集整理看過的一些論文用,不定期更新:MMTk: The Memory Management Toolkithttp://cs.anu.edu.au/~Robin.Garner/mmtk-guide.pdf講在JikesRVM,一個叫jikes寫的虛擬機里面,結合Eclipse來實現一個Gabarge Collector。GCspy: An Adaptable Heap Visualisation... 閱讀全文
posted @ 2008-12-30 23:08
lbq1221119
閱讀(1685)
評論(3)
推薦(0)
摘要:
你是否真正的了解你所認識的.NET?Rotor、Mono?垃圾收集器、類裝入器、類型系統、錯誤報告系統、應用程序域、配件、代理支持、反射、安全性和代碼管理器等等等等的架構、實現。在實現這些名詞中遇到的有趣的問題和睿智的解決方案。 在對新技術的追蹤和應用中,國內的技術愛好者已經能基本上跟上國外同行的步伐。而對于.Net比較核心的基本技術,高級調試技術,FrameWork架構細節及其實現的研究,與國外... 閱讀全文
posted @ 2008-03-10 07:43
lbq1221119
閱讀(4202)
評論(90)
推薦(0)
摘要:
時間同步算法的應用非常廣泛。譬如在Unix系統里面,Make命令,只是用來編譯新修改過的代碼文件。Make命令使用運行的客戶端的時鐘來決定哪個文件是被修改過的。但是,如果把代碼放到文件服務器上面,而運行make命令的主機與文件服務器的時間不同的時候,make命令就有可能工作不正常。譬如玩dota的時候,幾個客戶端需要一個同步過的時鐘來使每個人的畫面保持一致。、再譬如PC電腦同步服務器上面的時間可以... 閱讀全文
posted @ 2010-01-14 16:03
lbq1221119
閱讀(7362)
評論(5)
推薦(3)
摘要:
上一節中的GarbageCollect()方法,主要是傳遞不同的Generation做為參數,來調用GarbageCollectGeneration方法,實現對heap中不同的Generation進行回收。 精簡了以后的GarbageCollectGeneration方法以后的代碼如下: 在第一次調用該方法的時候,Gen傳遞過來的參數值為max_generation,表示對GC Heap中所有G... 閱讀全文
posted @ 2009-09-14 18:39
lbq1221119
閱讀(798)
評論(0)
推薦(0)
摘要:
繼續接著上篇的分析, F11從Fcall中跳出來,就到了sscli20\clr\src\vm\gcsmp.cpp中關于Garbage Collect的最外部的方法GCHeap::GarbageCollect: HRESULTGCHeap::GarbageCollect (int generation, BOOL collect_classes_p){ UINT GenerationAtEntry... 閱讀全文
posted @ 2009-09-14 18:31
lbq1221119
閱讀(2484)
評論(2)
推薦(3)
摘要:
首先在SSCLI2.0源代碼的\clr\src\vm\comutilnative.cpp文件中的GCInterface類的CollectGeneration方法上下個斷點,該宏方法主要實現了一個調用轉換: /*==============================CollectGeneration===============================**Action: Collect... 閱讀全文
posted @ 2009-09-11 11:13
lbq1221119
閱讀(2600)
評論(20)
推薦(3)
摘要:
Job Description:Responsibilities:- Design and implement software modules in .NET.Qualifications:- 2+ years commercial software development experience in C# after the BS degree, or MS degree graduates ... 閱讀全文
posted @ 2009-09-08 15:46
lbq1221119
閱讀(869)
評論(10)
推薦(1)
摘要:
1.在開啟了主板的DHCP功能之后,由于主板每次重啟之后,都會需要一定的時間獲取一個IP地址,這個需要一定的時間。而在Visual Studio中debug的時候attach到電路板上面的時候,會reset一下來連接上tinyCLR的debug engine。連接和重試的時間,會小于主板獲取IP地址的時間,這個時候,就會出現attach不上主板的現象。解決 這個問題的方法可以是: 打開注冊表,... 閱讀全文
posted @ 2009-06-17 18:49
lbq1221119
閱讀(1876)
評論(4)
推薦(0)
摘要:
在.Net micro framework的一個項目的開發過程中,有一個GPRS的Modem。我們在主板上通過串口,提供了5v的電壓。 GPRS Modem設計板如圖: 我們使用TXD和RXD,對應到另外一塊主板芯片上面的COM4,在開始實現GPRS Modem撥號的過程中,我想是使用GSM 7.07的標準,在Tera Term終端中,經由STK500開發電板連接上GPRS Modem上面的串口... 閱讀全文
posted @ 2009-06-11 00:37
lbq1221119
閱讀(3229)
評論(5)
推薦(0)
摘要:
周六參加了博客園北京俱樂部第三次活動,作為主講人之一,我給出的題目是.Net 下垃圾回收算法與實現。內容主要包括三個部分:經典基本垃圾回收算法 CLR中垃圾回收算法介紹 SSCLI中Garbage Collection源碼分析PPT可以在這個地址下載到: http://files.cnblogs.com/lbq1221119/GC_Algorithm_inside_dotNET.pptx這次活動的... 閱讀全文
posted @ 2009-05-26 11:30
lbq1221119
閱讀(2510)
評論(24)
推薦(0)
摘要:
在定義任何一個ValueType之后,它都是從System.ValueType繼承過來的,默認的就繼承了Equals方法和GetHashCode方法,在使用的時候,必須主意的是最好重寫自定義ValueType的這兩個方法,因為可能帶來性能上面的嚴重問題或者是比較的不正確。譬如定義下面這樣的一個結構體值類型: struct TestValueType { public int Myint; publ... 閱讀全文
posted @ 2009-03-03 21:01
lbq1221119
閱讀(2386)
評論(1)
推薦(1)
摘要:
key words:DPWS,嵌入式設備,WebService,Http,嗅探,Micro Framework。。 為了實現一個嵌入式設備和一個host在IIS server上面的WebService交互,使用了MF3.0里面的DPWS方法。不過這個東西實在是Hard to use。今天就記錄下使用的過程中的第一步,首先分析一個Client和一個Webservice是如何交互的,發送的數據流的格式... 閱讀全文
posted @ 2009-01-08 18:43
lbq1221119
閱讀(12496)
評論(2)
推薦(1)
摘要:
抓到一個dump文件之后,很多托管命令不能用,查看托管線程的時候,現如下顯示: XXXX表示這個托管線程已經被結束了,同時在等待GC的回收。這個時候,用~[N]s命令來切換線程是不可以的。如果是Framework 1.1下,可以使用!dumpallexceptions (!dae)來查看所有的Exception。2.0的SOS下面,咋同樣可以使用類似的命令: 然后用!pe address打印出相... 閱讀全文
posted @ 2008-12-31 18:13
lbq1221119
閱讀(1030)
評論(3)
推薦(0)
摘要:
Random函數到底是如何返回一個隨機數的呢?下面看實現: 調用了一個內部方法: 另外還有在random的構造函數里面實現初始化seed數組: 最后就是涉及到一些變量的定義: seed數組的初始化有點麻煩,其中為什么用55和21俺也不太清楚,估計是定義一個特定的隨機取數方法吧。比較有意思,呵呵。發這篇文章的目的,主要是為了檢驗下cnblog用live writer發圖片的效果。。 閱讀全文
posted @ 2008-12-25 11:47
lbq1221119
閱讀(1886)
評論(3)
推薦(0)
摘要:
在上一篇文章,講到了雙擊一個應用程序之后,操作系統如何初始化Process,以及創建相關的context,最后引導到應用程序的Main方法中。在托管代碼中,對于Main的啟動還有點不同,有一個PAL層在啟動main方法之前啟動:#ifdef __cplusplus extern "C"#endifint __cdecl main(int argc, char **argv) { struct _m... 閱讀全文
posted @ 2008-12-09 21:12
lbq1221119
閱讀(1500)
評論(0)
推薦(0)
摘要:
從雙擊一個應用程序到生成一個OS的process,然后到執行這個exe文件的Main方法,中間做了些什么呢?經常看著call stack的這塊灰色的地方,總是想看看其是如何實現的。 Process的creation分為兩個級別的創建:NT級別的和Windows級別的。CreateProcess這個方法,就會進行這兩個級別的創建,同時創建Threads。俺們找到c:\Program Files\Mi... 閱讀全文
posted @ 2008-12-07 22:03
lbq1221119
閱讀(1935)
評論(5)
推薦(0)
摘要:
在3.0的Micro Framework中,咱可以使用SPI(Serial Peripheral Interface)來和外圍設備進行通信了。SPI是一種串口總線系統,和I2C,CAN,USB一樣。 使用SPI來進行串口通信中,從設備的通訊模式如下: 兩個數據口,一個進一個出,另外兩個控制口。在標準SPI通信模式中,設備分為master設備和slave設備。Master設備決定clock信號和線... 閱讀全文
posted @ 2008-12-05 23:23
lbq1221119
閱讀(2102)
評論(2)
推薦(0)
摘要:
Cordbg是和.Net Framework,以及Windows SDK一起ship的托管代碼的調試工具,相對于VS來說,它是一個比較low-level的調試工具. 本文的主要目的,就是看看Cordbg如何來進行托管調試,然后演示下其功能,看看其和其它的托管調試工具,譬如MDBG和windbg+SOS有啥不同. Mdbg,是一個使用dbgeng.dll的調試接口來開發的一個開源調試工具,版本ms現... 閱讀全文
posted @ 2008-11-17 22:23
lbq1221119
閱讀(2668)
評論(4)
推薦(0)
摘要:
自從可以動態調試SSCLI之后,發現這個玩意還真是個寶山,越玩越有意思,就像捅開一扇門,發現門后面還有一座寶山……不光CLR的內部實現細節,可以象是放電影一樣呈現在眼前,Visual Studio里面的一些底層的技術,還有OS的底層技術,查看起來那是相當的便捷。 這里就說說malloc函數是具體如何實現的,能夠F10,F11動態的在VS里面跟蹤其一步一步的實現的源碼,真... 閱讀全文
posted @ 2008-11-13 20:52
lbq1221119
閱讀(5673)
評論(11)
推薦(0)
摘要:
以前build過幾次sscli2都成功了,這次換了個新的環境,沒想到出了一大堆的問題。折騰了半天,最終搞定,把解決問題的過程和方法都記錄下來。首先說說build的過程中參考過的鏈接和資源。1. 首先就是sscli自帶的文檔:Building the Shared Source CLI 2.0 and C# 2.0 Source Tree(\sscli20\docs\buildtools\build... 閱讀全文
posted @ 2008-11-12 18:48
lbq1221119
閱讀(3622)
評論(5)
推薦(0)
摘要:
在分析MethodTable具體分配內存實現的時候,看到了計算MethodTable的大小,然后分配空間的算法。其中有個加法運算實現的非常贊,特地截取出來。 所有的MethodTable的分配,都是通過methodtable中的一個static方法AllocagteNewMT來實現的,該方法定義如下:MethodTable * MethodTable::AllocagteNewMT(EEClass... 閱讀全文
posted @ 2008-11-05 18:12
lbq1221119
閱讀(2105)
評論(5)
推薦(0)
摘要:
問題源自一個Seminar,如何使用Windbg找到在函數調用的時候,所傳遞的參數的值。 當使用live Debug模式attach到一個managed Process的時候,默認情況下并不顯示函數內部之間的調用,這個時候,需要在這個函數沒調用之間給下一個斷點。 基于對一個托管函數下斷點的兩種方法,在上面一片文章里面已經講過了,這里就顯的容易多了。首先還是找上篇文章里面的程序作為例子:class ... 閱讀全文
posted @ 2008-10-17 19:08
lbq1221119
閱讀(2582)
評論(6)
推薦(0)
摘要:
本文介紹兩種使用Windbg在Managed App中設置斷點的方法。一種是在live Debug的時候,attach到了Process之后。另外一種是動態調試的時候,如何給幾個模塊的特定方法下一個斷點。 使用Windbg在Native Code里面下斷點是比較方便的,bp加上一個內存地址就可以做到。但是在托管的時候給一個方法下一個斷點稍微有點麻煩。因為Windbg是一個native Debug... 閱讀全文
posted @ 2008-10-17 19:05
lbq1221119
閱讀(2847)
評論(6)
推薦(0)
摘要:
寫本文主要兩個目的,一個是解析下2.0下的對象在內存里面究盡是個什么樣子的布局,使用windbg和sos來show下內存里面的bit是如何組織其來的。另外一個就是比較下和.Net Framework 1.1你面的內存布局有什么區別,修正下“Drill Into .NET Framework Internals to See How the CLR Creates Runtime Objects”里... 閱讀全文
posted @ 2008-10-15 12:04
lbq1221119
閱讀(3272)
評論(20)
推薦(0)
摘要:
在研究handle table的時候順便研究的東西。Baidu了下,發現國內這方面的資料幾乎沒得,然后就準備瞎bb下,為下面的一篇介紹handle table的結構做準備。關于lock-free data structure。以及解決這個問題中使用的CAS(compare and swap)操作。以及使用CAS操作的時候出現的A-B-A Problem。對于lock-free data struc... 閱讀全文
posted @ 2008-08-18 14:36
lbq1221119
閱讀(4796)
評論(8)
推薦(0)
摘要:
好久沒寫了..恩,先寫handle table。越學越發現,又回到了崇拜scz,pjf的日子... 閱讀全文
posted @ 2008-08-12 17:15
lbq1221119
閱讀(1423)
評論(1)
推薦(0)
摘要:
最近惡補操作系統和一些底層的知識。遂寫篇文章來說說從操作系統的角度來研究Process的一些結構,實現,Porcess的初始化,重要的結構體域的定義,代表的含義,如何組織起來的,等。還有在前段時間研究托管的static字段到底在內存中如何組織的時候,遇到的handle table不熟悉的問題。 一個xp里面的Process,是由幾個Eprocess,執行體進程塊來表示的。這個Eprocess里面不... 閱讀全文
posted @ 2008-07-22 14:45
lbq1221119
閱讀(4480)
評論(11)
推薦(1)
摘要:
問題的提出,是源自Justin提出的一個case里面的一個問題,討論了n久沒得到一個答案,昨天justin周一早上一起來就又回憶起了這個問題,看來一直把這個問題放在腦子里面沒有放下,佩服啊佩服 ^_^ 遂決定深入研究一番,下面是問題的提出:Boxed value typeIn C#, the value type instance having pure user data is resided ... 閱讀全文
posted @ 2008-06-24 16:59
lbq1221119
閱讀(2388)
評論(15)
推薦(0)
摘要:
下午,msn上面一個朋友發了一個dump文件過來,說是Web服務器的CPU使用率在100%,找不到問題在什么地方,讓幫忙看看,遂讓把dump文件傳過來,找找問題出在哪兒。 Framework2.0,Windows 2k的OS。 加載了Dump文件之后,接著加載2.0版本的SOS擴展調試模塊: .load C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\S... 閱讀全文
posted @ 2008-06-17 23:36
lbq1221119
閱讀(4465)
評論(25)
推薦(1)
摘要:
晚上,小落給推薦了一首非常好聽的Folk名謠,說是網上很難找到的。:)給了一個地址:http://www.neocha.com/naivete/music!1657.html聽了之后,很是喜歡這種風格。然后baidu了一個下載地址發給她,說是這個flash的MP3的地址,后來非要讓我如何找到的….冂冏囧….只好拾起塵封了n久的hack技術… 首先查看Page Source,找到相關的一段:<... 閱讀全文
posted @ 2008-05-24 23:36
lbq1221119
閱讀(6808)
評論(57)
推薦(0)
摘要:
線程插入,在托管平臺上面,是不能直接實現的。如果想通過托管平臺在一個非托管的Process里面插入執行一段托管代碼,就需要在非托管Process里面啟動CLR。我們可以以此為突破口,通過直接調用CLR提供的功能接口來執行托管代碼。 最終效果,是實現了非托管平臺下托管代碼執行的混合型線程插入。 在開發CLR的時候,MS將CLR作為一個COM服務器放到了一個DLL里面。MS為CLR定義了一個標準的CO... 閱讀全文
posted @ 2008-05-19 14:10
lbq1221119
閱讀(2788)
評論(8)
推薦(0)
摘要:
在開發CLR的時候,MS實際上是將CLR相關的功能作為一個COM服務實現在一個DLL里面。對這個DLL的選擇,是由墊片來選擇的。MS為CLR定義了一個標準的COM接口,并且為該接口和COM服務指定了GUID。雖然沒有墊片mscoree.dll的實現代碼,但是咱可以看看頭文件….在MSCorEE頭文件里面,定義了一些GUID和非托管的最重要的ICorRuntimeHost接口。任何windows應用... 閱讀全文
posted @ 2008-05-17 14:07
lbq1221119
閱讀(4434)
評論(17)
推薦(2)
摘要:
在以前的一篇叫做<深入追蹤Exe加載過程>的文章里面,從clix的launch函數開始,再到CorExeMain2函數,在CorExeMain2里面有一個叫做CoInitializeEE的函數: result = CoInitializeEE(COINITEE_DEFAULT | COINITEE_MAIN) 一路找到EnsureEEStarted,這個是確保EE啟動的方法。在這個方法... 閱讀全文
posted @ 2008-05-16 10:59
lbq1221119
閱讀(3491)
評論(10)
推薦(0)
摘要:
如果想自己獲取應用程序的Call Stack,就需要查看Stack的內容。Stack Walker,在最近查看SSCLI源碼的時候發現這個東西是和Stack Frame緊密聯系在一起的。Walking the StackWe could conceivably attempt to unwind the stack ourselves using inline assembly. But stac... 閱讀全文
posted @ 2008-04-18 14:58
lbq1221119
閱讀(3899)
評論(3)
推薦(0)
摘要:
這幾天Oracle培訓,數據庫功力倒是沒太大長進,倒是Debug,Windows架構和實現還有CLR的覺悟突飛猛進。開篇前首先3ks下rick,他把他寫的一票經典的文章都發到sscli.cnblogs.com團隊里面來了。Rick可是我在看雪bbs上面久仰的大牛…由于寫的文章時間在創建團隊的時間之前,故需要翻到第一頁才能看到rick的文章。 首先就從sscli中TLS預先定義的一個結構體說起了: ... 閱讀全文
posted @ 2008-04-12 18:12
lbq1221119
閱讀(3513)
評論(11)
推薦(0)
摘要:
DataTable在內存中是如何存儲一張表的結構的呢?如何使用Windbg直接在內存中找到一個DataTable里面的第M列第N行的值呢?這的確是一個比較有趣的問題^_^下面的內容,主要是講如何用windbg+sos來看看一個DataTable在內存中是如何存儲的,以及尋找內存中一個DataTable特定的行列的一個單元的值是多少。同時,還有一點Windbg Script的使用。找一個小白鼠先: ... 閱讀全文
posted @ 2008-03-31 22:03
lbq1221119
閱讀(3518)
評論(18)
推薦(0)
摘要:
前段寫過一篇文章“CLR探索系列:深入追蹤托管exe加載執行過程”,在那篇文章中,主要是側重靜態代碼的分析,追蹤源代碼的流程一步一步看是如何實現的。這次,寫一篇文章,結合Windbg,從一個托管應用程序執行的調用堆棧開始,追蹤其調用堆棧中的線索,以及這些托管應用程序執行中調用的功能實現,來展示托管代碼的加載和執行的流程和實現。首先還是找一個小白鼠:public partial class Form... 閱讀全文
posted @ 2008-03-25 10:50
lbq1221119
閱讀(3762)
評論(2)
推薦(0)
摘要:
無疑,一個Object在CLR中的邏輯結構是相當復雜的。前段時間,寫了一篇CLR探索系列:System.Object內存布局模型及實現研究,側重從System.Object這個基本類的基本內存布局,實現和結構來研究了下。這是遠遠不夠的。今天就從如何存儲一個Object中的Field,Method等信息,這些信息的邏輯組織方式和存儲的邏輯結構。廢話不多說,看看就知道了:首先,給一個圖: 這個圖,顯示... 閱讀全文
posted @ 2008-03-14 19:55
lbq1221119
閱讀(5384)
評論(13)
推薦(1)
摘要:
吃飯回來,看到Share Source CLI團隊的rss聚合上面Debug團隊的juqiang發了一篇文章,說抓了一個minidump出現了:WARNING: Unable to verify timestamp for mscorwks.dll的錯誤。上次我在查看一個mini Dump的時候,ntdll.dll好像也出現過這個問題,當時把符號文件重新加載了一次就OK了。這次看到他出現了同樣的問... 閱讀全文
posted @ 2008-03-13 14:00
lbq1221119
閱讀(3254)
評論(1)
推薦(0)
摘要:
前些天,發布了一個能夠在Visual Studio2005查看sscli源代碼的項目文件。不過,在VS2008中編譯sscli,會出現一大堆錯誤。這里,有幸在Jeremy Kuhne's Blog上面找到了一篇文章來解決這個問題。原文鏈接可以點這里。這里,時間原因就不翻譯過來了,希望對sscli團隊中研究這個的同志們有幫助,特別希望“裝配腦袋”能看到這篇文章。The currently avail... 閱讀全文
posted @ 2008-03-13 08:37
lbq1221119
閱讀(2020)
評論(4)
推薦(0)
摘要:
我想,有過研究sscli 2.0源碼經歷的朋友們看到這個標題,一定挺的高興吧。在以前參閱SSCLI2.0的源碼的時候,一直用的EditPlus。感覺在整個VM或者是PAL目錄下面尋找對一個類的應用或者一個方法的定義相當的不方便。經常F3搜索整個目錄中文件包涵的一個字符串,而且經常一不留神按F3大盤就出來了....這里發布一個項目文件,做為Share Source CLI團隊的第一個團隊資源。還有一... 閱讀全文
posted @ 2008-03-11 10:27
lbq1221119
閱讀(2906)
評論(13)
推薦(0)

浙公網安備 33010602011771號