2007年12月29日 星期六

Linux Memory Paging - 2

Linux的每一個Process都有4GB的記憶體定址空間,並且被劃分成:
• 3GB的 User Space (0x00000000 - 0xBFFFFFFF)
• 1GB的 Kernel Space (0xC0000000 - 0xFFFFFFFF)

其中,位址0xC0000000以下是各個Process自已獨有的空間
位址0xC0000000以上給Kernel使用的空間則是由所有Process共享
而Kernel Space是直接映射到實體記憶體上,如下圖所示:


故0xC0000000就成為Linux切割記憶體的方式(此例為一比三)
該值被定義成 PAGE_OFFSET,當然這個值是可以調整的

Linux開機時,其Kernel Code會載入實體記憶體位址0x00100000處
即第二個 1MB 的位置,接著是存放Kernel Data的空間
這些被Kernel使用的範圍會標記成 _text_end

在Kernel中,要將Virtual Address轉換成Physical Address時
使用巨集 __pa(x),其實就是將x減掉PAGE_OFFSET
反之,則使用巨集 __va(x),即將x加上PAGE_OFFSET

2007年12月9日 星期日

Linux Memory Paging - 1

Linux 的記憶體 Paging 機制與處理器平台有關
事實上,大部份的分頁處理動作是靠硬體來執行的
以 x86為例,定址到 32bits的記憶體(即4GB),有以下幾種機制:

80x86 paging with PAE disabled
2-level paging, 4KB/page, 32-bit linear address to 32-bit physical address
80x86 paging with PAE disabled
1-level paging, 4MB/page, 32-bit linear address to 32-bit physical address

若啟用 PAE(Physical Address Extension) 功能,則可使用 36bits的記憶體空間(即64GB):

80x86 paging with PAE enabled
3-level paging, 4KB/page, 32-bit linear address to 36-bit physical address

80x86 paging with PAE enabled
2-level paging, 2MB/page, 32-bit linear address to 36-bit physical address


Linux 在 2.6.11 之後的核心使用 4-level 的 Paging
此記憶體分頁的模型可以套用在各種處理器上,四層分別為:
• Page Global Directory
• Page Upper Directory
• Page Middle Directory
• Page Table
當記憶體定址空間是 32bits 時,不使用 PUD 及 PMD
如此,便可同時支援 32 及 64 位元的記憶體架構

2.6 Linux paging model
4-level paging, 32/64-bit linear address to 32/64-bit physical address

2.6 Linux paging with PAE disabled
2-level paging, 4KB/page, 32-bit linear address to 32-bit physical address
2.6 Linux paging with PAE enabled
3-level paging, 4KB/page, 32-bit linear address to 36-bit physical address
2.6 Linux paging with PAE enabled
2-level paging, 2MB/page, 32-bit linear address to 36-bit physical address

在 Kernel Source Code 中,Page-Directory 及 Page-Table 是用相同的結構
分別名命為 pgd_tpte_t,定義於 include/asm-i386/page.h
若未使用 PAE,則其大小為 32bits,否則為 64bits

Page-Directory Entry with PAE disabled
4KB/page-table, 32-bit physical address

32bits 的 pgd_t 的欄位格式如下:

//2.6 Linux : Page Global Directory
typedef struct { unsigned long pgd; } pgd_t;
Page-Table Entry with PAE disabled
4KB/page, 32-bit physical address

32bits 的 pte_t 的欄位格式如下:

//2.6 Linux : Page Table Entry
typedef struct { unsigned long pte_low; } pte_t;
Page-Directory Entry with PAE enabled
2MB/page, 32-bit physical address

此時的型態為 64bits 的資料,定義如下:

//2.6 Linux : Page Table Entry
typedef struct { unsigned long pte_low, pte_high; } pte_t;

//2.6 Linux : Page Middle Directory
typedef struct { unsigned long pmd; } pmd_t;

//2.6 Linux : Page Global Directory
typedef struct { unsigned long pgd; } pgd_t;


結論:
Linux 使用 4-level paging 機制來套用到不同的硬體平台,而且可相容於 32/64-bit 的架構
但是,若硬體的 Paging Unit 其分頁方式大於 4-level,Linux 就無法支援

2007年12月8日 星期六

武陵農場 楓葉紅了

11/24-26 去梨山三日遊,挑這個時間去, 當然就是要看楓葉啦




進台7甲後,直奔福壽山農場,這裏以松廬配紅楓而聞名
可惜楓葉沒有全紅,但也夠美的了

農場裏有還個 蘋果王,用接枝的方式讓一顆樹生出許多不同品種的蘋果

玩到太陽下山,臨走前跟水果販買了一箱雪梨
老闆說是最後的雪梨了,不想留,全部14顆賣1000元聽說這個價錢超便宜的 ?

然後就到第一天住的民宿 http://www.ssy.idv.tw/
雖然空間小了點,但民宿老闆很熱情,地點就在武陵農場入口旁邊

第二天進武陵農場,今晚就住這了
首先走桃山瀑布,這個步道是一路上坡,來回要3小時
上午去比較好,因為陽光的照射,瀑布會有彩虹


接著到雪山登山口走走、在農場到處逛逛、喝下午茶
這裏的楓葉也紅了大半,晚上還有免費的音樂會--吉他表演

其實武陵農場四季都有看頭,真是個渡假的好地方
在熱門時段想要住在農場裏,記得要提早訂房

第三天就走台14甲,從埔里下山
全部的照片在此 http://picasaweb.google.com/yichung.shen/20071124

2007年11月30日 星期五

Understanding the Linux Kernel

這是一本講解 Linux Kernel 的暢銷書,由 O'Reilly 出版,目前為 3rd Edition
內容是以 linux-2.6.11 這個 kernel 版本為例,下圖是一個 Linux 系統的方塊圖
Linux 的核心大致上就是由這幾塊元件所組成:


從這篇文章開始整理這本書的筆記 ...

2007年7月18日 星期三

2007 雲南之旅 (台北-昆明)

2007.7.7 - 2007.7.14

今年夏天決定到雲南玩 8 天 ... 但是雲南地方太大,行程的時間不容易預估
所以

2007年2月13日 星期二

06-07 東京跨年 下集

[倒數之前]
東京跨年最有名的就是在東京鐵塔旁的 增上寺
在新年來臨的那一刻,貼滿願望的3000顆氣球會伴隨著除夕鍾聲飛向天空
除夕之鐘就在增上寺裏,要敲108響,國內電視台轉播日本跨年的畫面,就是這裏啦

[新年快樂]
仔細看,東京鐵塔上顯示了 2007 的字樣唷

[第四天]
今天是元旦,旅館的早餐特別加了年糕耶,真幸福~
按照日本的傳統,新年的第一天要去神社參拜,又稱為 初詣

首選一定是明治神宮了,這是祭祀明治天皇的神社,全日本人氣指數第一的參拜聖地唷
到神社或寺廟參拜當然有規矩的,也不知道正確的參拜法... 就隨意啦
最後來個 '飛錢祈福',其實平常只是投錢幣到賽錢箱,因為新年的遊客特別多
所以神社已經圍好一塊地,讓所有人直接往裏面丟錢祈福

接著到皇居,也就是日本天皇住的地方,這裏好熱鬧啊
廣場停滿了黑頭車,每台車都有國旗,應該是各國外交官要晉見天皇吧
皇居平時是不能參觀的,周圍有幾個古蹟可看

其一是 '二重橋'

還有 '櫻田門'

另一個有名的神社-- 靖國神社,也是一定要去的啦
靖國神社供奉的是明治維新後,為國捐軀的將士,因為包含了二次世界大戰的戰犯,所以才會變得很敏感
這裏倒是有很多東西可看

夜晚到六本木新地標-- Roppongi Hills (六本木之丘) 一遊,附近的街道也裝飾的非常亮麗
不知是否因為元旦的關係,遊客很少,值得一提的是,森大廈的第52層觀景台
在元旦這天有特別開放,可以迎接新年的第一道署光唷

[第五天]
一月二日是各家百貨公司開店的日子,今天要拼福袋,目標是西武百貨池袋總店
來買福袋的人太多了,熱門品牌還要管制人數耶,於是選了兩個福袋,體驗過新年的氣氛就好

離開西武百貨便前往秋葉原,除了百貨公司之外,其他的商店也會推福袋
電器街的大小店舖也都有擺出福袋,有點好奇裏面裝了什麼東西?

逛完秋葉原就去下一站-- 銀座與有樂町,前者以名牌店和高級餐廳聞名,後者則有劇場街之稱
在銀座 Sony大樓正對面,有一間 Nikon House,是二手鏡頭與機身的專賣店,可惜還在放年假
到了有樂町時,可以找找哥斯拉銅像,位於一個小廣場上,這裏的地板上還有許多日本明星的手印唷

[第六天]
最後一天了,從旅館check-out後,還有一些時間可用
於是就搭環狀的山手線,繞東京一圈,看看街景和上下車的東京人,約一個小時可繞完
然後就準備轉京成 SkyLiner 去機場,東京之旅結束啦!

-完-

2007年2月8日 星期四

06-07 東京跨年 上集

兩個月前就開始計劃的 東京跨年之旅,前後共六天 (2006.12.29-2007.01.03)
同時也是第一次到東京旅遊~

[第一天]
住宿選擇類似YH經營方式的 Tokyo International Hostel
地點相當好,就位於JR飯田橋站上

在旅館完成check-in時,已將近下午4:00,冬季時天很快就黑了,立即前往日本橋
其實這座橋都被高架道路給遮住了,在地圖上並不顯眼,橋的一端有個 '日本道路元標' 的紀念碑
沒錯! 這裏可是日本古時道路的起點,三越百貨總店也在這裏唷

接著到東京車站走走,這裏有慶祝聖誕與新年的燈飾活動-- Lightopia 2006
不只是燈光效果,還有配上音樂,倒是有點像我們的元宵節燈會
最近幾年,東京車站附近都會舉辦類似的活動,例如前年是 Tokyo Millenario

[第二天]
原本計劃早上要去新宿御苑,因為新年假期,所有的公家單位都放假,幾個想去的 '御苑' 也都休園
今天就到新宿、澀谷、原宿、表參道幾個鬧區逛街啦
在澀谷的街上看到偽科學小飛俠-- 還以為是Keroro軍曹
後來才知道叫做 Mukku Gachapin,是富士電台兒童節目的角色

新宿被JR山手線分成東西兩邊,車站西口是以都廳(市政府)為首的高樓群,東口則有惡名昭章的歌舞伎町
此外,南口有大型百貨-- 高島屋時代廣場,以及可看夜景的空中花園-- 新宿南園
晚上刻意到歌舞伎町繞了兩圈,這裏聚集了很多柏青哥、電動間和怪怪的店
結果只遇到一次被人拉客,太遜了

[第三天]
今晚就要倒數了,已經決定要去增上寺跨年。吃完早餐,先去看看淺草寺囉
聽說淺草是東京古時的商業中心,所以是全東京最具江戶味的地方
淺草寺的代表就是雷門(風雷神門),因為是熱門景點,在這裏立刻就會遇到台灣來的團
過了雷門就便是仲見世商店街,是一排排從江戶時代延續下來的大小店舖,熱鬧非凡啊
淺草寺旁的吾妻橋有水上巴士,可以漫遊隅田川,從這裏也可以坐到台場 (參考 這裏)
最短的行程是到濱離宮,途中會穿過好幾座有特色的橋,同時還有英文的解說喔

Tokyo International Hostel 雖然便宜又方便,可是有門禁管制,要跨年就要找其他地方過夜了
此時再推薦一間旅館-- 郵便貯金會館,就在增上寺旁,單人房一晚約 2700NT
而增上寺就在東京鐵塔旁邊,趁著黃昏先去參觀鐵塔

這幾天的天氣超好,白天若是在高樓上,都能看得到富士山覆蓋著白雪的山頭
今天也是萬里無雲的天空,當夕陽從西邊落下時,現場的遊客都一起豉掌
嗯~~ 2006 最後一天的日落耶,真是感動啊

-待續-