posts - 12,comments - 1,trackbacks - 0
          <2008年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          看understanding linux kernel的一點(diǎn)筆記:
          頁表
          通常32位cpu使用2級頁表機(jī)制就已足夠,但到64位時(shí)代,2級頁表會(huì)使頁表的項(xiàng)急劇增加,所以通常會(huì)使用更多的頁表級數(shù)。
          ia64/ppc64/alpha使用3級頁表,x86_64使用到4級頁表。為兼容這些模型,2.6.11之后使用了統(tǒng)一的4級頁表模型
          Global Directory
          Upper Directory
          Middle Directory
          Page Table
          針對不同的架構(gòu),設(shè)置每一級不同的地址位數(shù),0的話就是不使用這一級頁表機(jī)制。

          cache
          多cpu環(huán)境中,每個(gè)cpu有自己的cache,對cache的更新有硬件機(jī)制保證通知其他的cpu進(jìn)行同步。(真的嗎?)

          tlb
          用來cache頁表,加速地址的轉(zhuǎn)換速度。每個(gè)cpu有自己的tlb,但不需要同步,因?yàn)榈刂忿D(zhuǎn)換和進(jìn)程相關(guān)。

          posted @ 2008-11-01 08:27 白色天堂 閱讀(145) | 評論 (0)編輯 收藏
          LinuxThreads:
            舊的pthread實(shí)現(xiàn),基于process實(shí)現(xiàn)pthread。主要問題是signal不符合規(guī)范,stack size固定???

          NPTL:
            2.6后加入的新實(shí)現(xiàn),redhat as中2.4就可以支持。更符合pthread的規(guī)范。用戶線程和內(nèi)核線程采取1:1模式,支持floating stack。

          posted @ 2008-09-09 22:56 白色天堂 閱讀(195) | 評論 (0)編輯 收藏
          今天花了一點(diǎn)時(shí)間作了個(gè)x86上hotspot vm的disassembler,這樣可以看出jvm生成的本地代碼了。
          代碼比較簡單,主要是用了udis86的庫,這個(gè)可以在sf上下載到,它的接口還是比較簡單的。

          簡單的例子,hotspot解析模式中iconst_0的對應(yīng)匯編代碼:
          iconst_0  3 iconst_0  [0xb4d98120, 0xb4d98160]  64 bytes

            0xb4d98120: sub esp, 0x4
            0xb4d98123: fstp dword [esp]
            0xb4d98126: jmp 0x1e
            0xb4d9812b: sub esp, 0x8
            0xb4d9812e: fstp qword [esp]
            0xb4d98131: jmp 0x13
            0xb4d98136: push edx
            0xb4d98137: push eax
            0xb4d98138: jmp 0xc
            0xb4d9813d: push eax
            0xb4d9813e: jmp 0x6
            0xb4d98143: push eax
            0xb4d98144: xor eax, eax
            0xb4d98146: movzx ebx, byte [esi+0x1]
            0xb4d9814a: inc esi
            0xb4d9814b: jmp dword near [ebx*4+0x6900680]

          posted @ 2008-08-24 00:28 白色天堂 閱讀(186) | 評論 (0)編輯 收藏
          對soft reference,比較容易理解它的用處。它天生就是為實(shí)現(xiàn)cache來設(shè)計(jì)的。關(guān)于weak reference,好像很少有人說的清楚。有的和soft reference混在一起談,有的就是簡單翻譯java doc中的說明,看得出翻譯的人自己也不是很理解,所以只能一筆帶過。

          我也一直不是很清楚它的實(shí)際用途,今天我突然想到WeakReference可能的設(shè)計(jì)目的。

          從java的內(nèi)存泄漏說起,以前說到j(luò)ava也會(huì)內(nèi)存泄漏的時(shí)候往往會(huì)舉這樣的例子,對象保存在一個(gè)全局表中,造成無法回收。一般的解決方法是不要使用全局表或者記得更新。但在實(shí)際開發(fā)中,有時(shí)必須要使用全局表,但無法明確知道該對象是否可銷毀,因?yàn)閷ο罂赡鼙欢鄠€(gè)線程共享訪問,所以程序不能確切的更新表中的引用。這時(shí)候weak reference就有用武之地,用WeakHashMap構(gòu)造全局表,key和value之間是weak reference,這樣的話程序員就不用考慮更新該表了,只要該對象沒有強(qiáng)引用指向它,gc就可以回收它了。

          回頭去找一個(gè)實(shí)際的例子對照看看,記得在JDK中,weak reference還是用的很頻繁的。

          posted @ 2008-07-25 22:51 白色天堂 閱讀(615) | 評論 (0)編輯 收藏
          主站蜘蛛池模板: 织金县| 古蔺县| 东明县| 班戈县| 三原县| 汶上县| 澳门| 宜章县| 浠水县| 东台市| 施秉县| 城市| 长丰县| 钦州市| 陇川县| 京山县| 江北区| 铜鼓县| 甘南县| 洛阳市| 那坡县| 肥城市| 靖安县| 丽水市| 涿州市| 正定县| 阿尔山市| 南陵县| 二连浩特市| 壤塘县| 鹤庆县| 利辛县| 繁峙县| 泽州县| 丹巴县| 多伦县| 东安县| 彭阳县| 成武县| 赤峰市| 平塘县|