官术网_书友最值得收藏!

  • 存儲技術原理分析
  • 敖青云著
  • 3752字
  • 2018-12-27 02:38:07

前言

筆者寄語

我終于長長地噓了一口氣!諾大的空間顯得格外安靜,稀疏坐落著的人們還在埋頭忙碌著。此刻的我,壓抑住內心喜悅,輕輕地踱到窗前,透過厚厚的玻璃,看著雪花亂舞,或覆蓋車頂,或湮沒河面,或消失在那一片新搭起的葡萄架下的泥土里,自己的思緒竟隨著跳動起來。

無從知曉,寫這本書的念頭一直充斥著我的腦海,多年來,片刻都沒有改變。為了你,我不惜被放逐天際,只要求擁有支配自己時間的自由;為了你,雖不能夠遁入山林,我也堅持做著這大都會的隱者——浮華非我所求,喧囂與我無緣;為了你,是的,我什么都愿意。

人生有如登山。源于上帝賜予的機遇,以及個人的努力,我有幸能登上這么一個小小的山峰,途中的辛酸只能自己去體味,或者最多和身邊的朋友傾訴,但一路過來的心得,以及登臨絕頂后所看到的風景卻實在不敢獨享。既然喜歡文字作畫,為何不將它們記錄下來,權當作同樣有志于攀登的后來者的攻略,或者是無意于此的旁觀者在為他事辛勞的間隙,也能夠了解個中的美妙。

如果讀者認為此書稍有所裨益,那么就煩請您到書店,或通過網絡去購買此書。Linux是一個有待去探索的深奧領域,我自信本書能為您提供一點線索,甚至作為隨身指導,常常溫故以知新。您的付出,無論相對于您的收獲,還是相對于本書創作過程中的付出,都是值得的。當然,筆者也不避言,因為自己還是一個有志于其他山峰的攀登者,希望為下一次的旅程積累一些資本。

本書目標

大多數愛好者在閱讀Linux內核源代碼時會產生這樣的困惑,我們很少能找到針對Linux操作系統,甚至某個單獨的內核模塊,在設計和開發方面的文檔。僅有Linux社區的一些高手們對一些關鍵算法或者一些設計考慮的討論。此外,當前大多數的源碼分析書籍,都只是就函數或代碼進行解釋,沒有給出整體和全面的視角。對于處于新手上路,或者小技初成級別的讀者,只能獲得局部和片面的認識,在理解這些討論和閱讀內核源碼時會非常困難,常常產生挫敗感。

寫作本書的初衷,就是希望從軟件設計和開發者的角度對與Linux存儲相關模塊作一個梳理。我們將設計一些主要的場景,跟蹤實現的各個層次,對其中的主要函數進行代碼級的講解。在分析每個模塊時,會給出整體框架與主要數據結構之間的關系,并列出各個域的詳細含義,比起單調的代碼閱讀理解,相信會達到更好的效果。

本書在構思之初,所計劃的目標遠非上面列舉的幾項。筆者曾經試圖加入設備仿真原理部分,分析虛擬機是如何仿真CPU、PCI子系統、SCSI子系統、存儲適配器、網絡適配器以及磁盤設備的。筆者還曾設想從Linux內核開發者的角度,盡量貼近軟件設計和開發文檔,講解各個子系統和模塊的構思過程、設計思想、技術難點及解決方案等。不過由于時間和精力所限,最后有所取舍。

本書最終確定命名為《存儲技術原理分析——基于Linux2.6內核源代碼》。坦率地說,這只是最初設定的寫作目標中基礎的部分,此外,還準備了網絡子系統、iSCSI、NFS、Heartbeat虛擬機等諸多素材,分別被規劃為進階篇、高級篇的內容。至于最終會不會有機會呈現給讀者,那就要看本書的市場反應和筆者的精力了,本書旨在通過分析Linux內核源代碼講解存儲、網絡和虛擬機的相關技術。如果讀者有足夠的耐心和毅力跟隨我們完成這一次旅程,您將理解以下幾點:

? 設備發現過程:了解操作系統如何發現PCI設備、SCSI設備、塊設備,并和驅動綁定起來;

? 存儲I/O路徑:了解用戶對文件的讀/寫請求怎么通過I/O路徑,最終到達磁盤介質上;

? 內核編程模式:理解PCI-SCSI HBA驅動、塊設備驅動,以及文件系統等編程框架。

本書讀者

本書所針對的讀者應該具有一定基礎。應該對存儲技術有些了解,應該對操作系統有些領悟,應該對軟件開發有些心得,但是這種了解、領悟和心得又似乎浮于表面,經不住考驗。最為重要的是,應該有對細節的渴望和對未知的好奇。本書通過分析Linux源代碼系統闡述存儲技術的內在原理,它要告訴的,不是Linux的歷史有多長、功能有多強,或是那些古老的話題,重復在我們的身旁;它要講述的,是一些執著的人們思考著什么,又最終決定了什么,在并不為我們所知的地方。

本書導讀

本書針對的Linux內核版本號為2.6.34,并且以x86為硬件平臺為目標。為了突出重點,將在各個部分討論最具普遍性、而不是最新的技術。例如,會探討PCI和SCSI,但不會涉及PCIe或者SAS。至于文件系統部分,還是以Minix作為基礎,盡管當前有很多非常強大的文件系統存在,并且還會不斷被推出。在行文過程中,可能會談到某些廠商的產品或驅動,這絕非出于市場考慮,也并不表明該產品是行業內功能最強或性能最優的,或者這些驅動是“沒有錯誤(bug free)”的。

本書涉及的內容較多,分為三部分共8章。為了使讀者在閱讀過程中不至于迷失,請參考如下導讀。

1.第一部分為第1章,介紹存儲技術的概況。

這一章討論存儲系統的組成元素:磁盤驅動器、存儲設備、服務器部件和存儲軟件,闡述和存儲相關的各種技術,如備份、快照、連續數據保護、重復數據刪除、虛擬化及虛擬機技術等。

2.第二部分包括第2章到第4章,介紹設備發現的過程。

第2章講述Linux驅動模型。它為Linux內核構建了一個綜合的、統一的機制,以內核對象為基礎,將總線、設備和驅動關聯起來,組織成一個層次結構的系統,方便了各種類型設備的熱插拔和電源管理,同時借助sysfs提供了一個完全層次結構的用戶視圖。

第3章講述PCI子系統。它將SCSI適配器、網絡適配器等設備連接到主機I/O總線。

第4章講述SCSI子系統。它將磁盤或者外部存儲設備連接到主機I/O總線。

3.第三部分包括第5章到第8章,介紹存儲I/O的路徑。

第5章講述塊I/O子系統。它向上層提供I/O請求API,并實現I/O調度,將請求派發到具體塊設備的請求隊列執行,以及提供請求完成的下半部處理API,直至最終調用上層的請求完成回調函數結束I/O。

第6章講述Linux RAID。MD模塊是一個虛擬塊設備層。這一章將以MD模塊源碼為基礎,闡述Linux內核中如何支持各種不同的RAID級別。

第7章講述Device Mapper。這一章將以Device Mapper模塊源碼為基礎,闡述設備映射原理及各種映射規則的實現。

第8章講述文件系統。文件系統是存儲和組織文件(即一系列相關的數據),以便可以方便地進行查找和訪問的一種機制。這一章將介紹Linux內核如何通過虛擬文件系統層,實現對各種具體文件系統的支持,以及從裝載文件系統到訪問文件等系統調用的流程。

本書圖例

本書不會僅限于從概念上來講解存儲技術,而是以Linux內核源碼為基礎進行詳細的闡述。理解Linux內核的關鍵在于把握各個數據結構之間的關系,用圖示方式描畫出各個數據結構之間的關系無疑是最為直觀的。在描畫各個關系圖時,本書遵循如圖所示的圖例注解:

圖 本書圖例注解

圖中①表示數據結構B有一個pointer域指向數據結構A。它的示例代碼如下:

struct B {
    ...
    struct A *pointer;
    ...
};

②表示數據結構B通過list域鏈入數據結構A的以head域為表頭的鏈表,它的示例代碼如下:

struct A {
    ...
    list_head head;
    ...
};
struct B {
    ...
    list_head list;
    ...
};
...
void link_B_to_A(struct A *a, struct B *b) {
    list_add(&b->list, &a->head);
}

我們看到,在數據結構A中定義了head域,數據結構B中定義了list域。兩個域都是list_head類型,這是Linux內核代碼中表示鏈表的數據結構,在分析代碼中遇到它再進行分析。上面的例子中還有一個函數link_B_to_A,用于將結構A的對象通過list域,鏈接到結構B的對象以head域為首的鏈表中,其中list域被稱為連接件,head域被稱為表頭。

③表示數據結構B通過list域鏈入哈希表的某個哈希桶中。哈希桶的數據結構為A,其head域為鏈表表頭。表示結構A的數組。

感謝與聯系方式

本書是一本技術性組織的書籍,能通過對Linux源碼的分析來講解存儲、網絡和虛擬機相關技術的內涵,外延及這些技術的原理。在寫作過程中筆者查閱了很多資料,在此一并向有關資料的提供者表示感謝。

感謝我的導師上海交大計算機系的白英彩教授!白老師是我一生的導師,自畢業以來,始終給予我職業上的指導,并提供了許多寶貴的建議和機會。

感謝博文視點公司的幾位編輯。如果不是有幸遇到他們,本書可能還只是孕育著的一個想法。在寫作過程中,他們提供了很多的專業指導,尤為感動的是,在因延期交稿而忐忑時,還給予了從作者角度設身處地的勸慰,使得我安心、愉快地繼續創作。

真誠地感謝我的家人,讓我在緊張寫作的間隙,總能夠享受家的溫馨。尤其是我的愛人鄧玉潔,對于我的每一個想法,盡管可能不見得是主流,她總是給予極大的支持。由于她的努力,我可以無需過多顧慮生活上的壓力,感謝她,還有我們生命中最重要的小末末!

最后,感謝我所有的朋友,以前的和現在的,有聯系的和沒有聯系的。曾經為遠離從前的朋友而遺憾,怕從此友情不再。現在終于釋懷,人生就好像一個旅程,朋友就是我一路的風景,不同的階段風景會不同,感謝他們,見證了我生命的歷程。特別的感激送給:柴劍鋒、陳穎、戴廣成、丁旭華、董歆奕、方敏、谷大武、黃昉、蔣川群、蔣文蓉、金崇英、李虎、李靜、李小勇、梁堅、劉俊、劉偉、任松林、田忠、王安保、王金浦、楊向群、張冠群。同樣,向很多沒有列出名字的朋友說聲抱歉——你們在我心中。

當然,由于資料難覓,加之筆者水平有限,本書難免存在不少的瑕疵和錯誤的理解,敬請讀者批評指正,可以發送郵件至ao_qy@hotman.com進行聯系。

最后附上小詩一首,結束全文。

【登南岳賦】

二零一零年,清明,霂,游壽岳衡山,經半山亭,南天門等,至祝融峰晉香,感自然浩瀚,嘆世俗虛華,以此詩記之:

半山煙雨半山空,一路流云一路松,

攜風漫道南門外,相邀長住壽天宮。

敖青云

2010年7月~2011年2月

寫作于上海浦東新區圖書館

完稿于上海第二工業大學



謹以此書獻給小末末

人生路常伴風雨,希望你總能安然度過。

我愿用生命來呵護你,為你護航。

主站蜘蛛池模板: 澳门| 封开县| 嘉荫县| 澎湖县| 芜湖县| 土默特右旗| 肇州县| 平罗县| 南陵县| 阿坝| 双柏县| 建宁县| 华宁县| 太保市| 深水埗区| 景德镇市| 漳平市| 横峰县| 通辽市| 英吉沙县| 庆城县| 上蔡县| 阿瓦提县| 上杭县| 芮城县| 景谷| 永善县| 南华县| 东方市| 榆中县| 沁阳市| 准格尔旗| 富平县| 额济纳旗| 绥化市| 永川市| 康保县| 汶上县| 祥云县| 嘉黎县| 新绛县|