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

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

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

    posts - 12,comments - 1,trackbacks - 0
    看understanding linux kernel的一點筆記:
    頁表
    通常32位cpu使用2級頁表機制就已足夠,但到64位時代,2級頁表會使頁表的項急劇增加,所以通常會使用更多的頁表級數(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的話就是不使用這一級頁表機制。

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

    tlb
    用來cache頁表,加速地址的轉(zhuǎn)換速度。每個cpu有自己的tlb,但不需要同步,因為地址轉(zhuǎn)換和進程相關(guān)。

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

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

    posted @ 2008-09-09 22:56 白色天堂 閱讀(199) | 評論 (0)編輯 收藏
    今天花了一點時間作了個x86上hotspot vm的disassembler,這樣可以看出jvm生成的本地代碼了。
    代碼比較簡單,主要是用了udis86的庫,這個可以在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 白色天堂 閱讀(189) | 評論 (0)編輯 收藏
    對soft reference,比較容易理解它的用處。它天生就是為實現(xiàn)cache來設(shè)計的。關(guān)于weak reference,好像很少有人說的清楚。有的和soft reference混在一起談,有的就是簡單翻譯java doc中的說明,看得出翻譯的人自己也不是很理解,所以只能一筆帶過。

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

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

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

    posted @ 2008-07-25 22:51 白色天堂 閱讀(618) | 評論 (0)編輯 收藏
    以前用redhat的時候使用rpm管理軟件包,因為不能解決軟件的依賴關(guān)系后來轉(zhuǎn)到debian。apt確實方便了很多,但一直懷念rpm的一個功能,rpm可以查詢一個文件具體屬于哪個包,用apt一直沒有找到對應(yīng)的命令。
    今天想在64位ubuntu上編譯32位程序的時候發(fā)現(xiàn)沒有/usr/include/gnu/stub-32.h,在網(wǎng)上搜索時突然發(fā)現(xiàn)apt也可以根據(jù)文件來搜索包。命令是apt-file(缺省是沒有安裝的)。
    先安裝apt-file
    使用apt-file update同步安裝包內(nèi)部的文件,它會到你定義的source去獲取這些信息,運行會比較慢,而且沒有什么提示,不知道今后會不會都是這樣。
    然后就可以用apt-file find xxx 去查詢了。


    -每天進步一點點, :)

    posted @ 2008-05-21 23:04 白色天堂 閱讀(353) | 評論 (1)編輯 收藏
    代碼生成一般采用tree rewriting的方式,先將源代碼轉(zhuǎn)換成語法樹的形式,通過模式匹配將子樹替換成葉結(jié)點,同時生成代碼指令,當(dāng)樹全部替換完后代碼即生成了。采用這種方式主要關(guān)心匹配規(guī)則,甚至可以使用lex/yacc之類的工具生成code generator generator,也便于實現(xiàn)可移植的編譯器。

    dynamic programing
    前面的算法如果只是從左往右依次匹配的話生成的代碼質(zhì)量不高,DP就是要考慮指令的代價,生成質(zhì)量較優(yōu)的代碼。

    自底向上為每個節(jié)點計算一系列值存入數(shù)組C[],其中index代表使用的register數(shù)目,存儲的是相應(yīng)的代價(要考慮可能增加的store/load指令代價),計算某個節(jié)點的C[]時,先找到可能的匹配模式,根據(jù)匹配模式選擇可能的寄存器數(shù)目組合,計算代價后選擇最小值。這樣遍歷整個樹后可以得到最小代價生成方式。



    posted @ 2008-05-07 05:14 白色天堂 閱讀(270) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 亚洲色精品三区二区一区| 亚洲精品无播放器在线播放 | 三年片在线观看免费观看高清电影| 在线观看特色大片免费视频| 国产jizzjizz视频免费看| 久久99国产亚洲高清观看首页| 亚洲国产日韩在线成人蜜芽| 狠狠热精品免费观看| 1000部啪啪未满十八勿入免费| 男人的天堂亚洲一区二区三区| av无码东京热亚洲男人的天堂| 久久亚洲精品无码gv| 99久久99这里只有免费费精品| 亚洲乱码国产一区网址| 亚洲永久在线观看| 久久aⅴ免费观看| 久久综合亚洲色HEZYO国产| 亚洲第一街区偷拍街拍| 免费国产怡红院在线观看| 亚洲中文字幕久在线| 久9这里精品免费视频| 精品亚洲国产成AV人片传媒| 中文字幕免费在线看线人动作大片 | 国产免费黄色无码视频| 日韩一级免费视频| 亚洲一区在线观看视频| 在线播放高清国语自产拍免费| 亚洲精品人成电影网| 美丽姑娘免费观看在线观看中文版| 国产成人亚洲综合无码| 特级毛片爽www免费版| 国产成人青青热久免费精品| 精品亚洲456在线播放| 亚洲免费网站在线观看| 亚洲天堂中文资源| 久久爰www免费人成| 久久久久久a亚洲欧洲AV| 国产又黄又爽又大的免费视频| 亚洲性天天干天天摸| 午夜神器成在线人成在线人免费| 一级特黄特色的免费大片视频|