• 沒有找到結果。

Linux平台上驅動程式層網路事件通知機制

第三章 相關研究

3.3 Linux平台上驅動程式層網路事件通知機制

[32]是本實驗室之前所發展的系統。該系統將網路介面相關的狀態改變利用 類似傳統UNIX作業系統上的信號 (signal) 機制通知使用者空間的程式,並且修 改了排程的演算法,使得使用者空間程式不必一再地發出系統呼叫,加快對於網 路介面狀態改變的處理,以增進系統效能。

該系統之實作可以分為三個主要部分:

z 事件通知部分 (Event notification) z 行程管理 (process management) z 排程器 (scheduler)

當網路驅動程式相關訊息發生以後,該系統的目標是由核心空間直接切換至 使用者空間來執行。也就是說,在行程從核心空間回到使用者空間之前,該系統 會去檢查是否有該行程所註冊的事件發生,當有註冊的事件發生時,系統會先執 行該行程所註冊的對應處理函式,接下來,利用系統呼叫返回核心空間,並且在 該系統呼叫內回覆原來所應該執行行程的硬體環境 (hardware context) 。

關於使用者空間和核心空間的切換,該系統利用了 Linux 下的兩種堆疊 – 核心模式堆疊 (kernel mode stack) 和使用者模式堆疊 (user mode stack) ;核心模 式堆疊主要作用有兩點,記錄使用者硬體環境 (hardware context) 以及存放程序 敘述子。

當要跳至使用者空間執行行程註冊的回叫 (Callback) 函數之前,因為在 Linux 中每次由核心空間返回使用者空間都會將核心模式堆疊清空,如此一來,

當使用者由回叫函數返回核心空間時,原本用以執行一般程式碼的硬體環境會消 失;因此該系統將核心模式堆疊中的硬體環境存至別的地方,以免原本的硬體環 境消失,因此,該系統將原本的硬體環境儲存在使用者模式的堆疊中,等到由回 叫函數返回後,再將其復原。

系統核心內的關係如 Figure 3-3 所示。當網路事件發生時,通用驅動程式 (Generic Driver Layer)會去呼叫 Event Handler,Event Handler 就會去更改核心用 來處理程序的資料結構,通知有事件發生,當排程器排到該程序時會先檢查是否 有事件發生,有的話,就會去執行程序所註冊的回叫函式。

Figure 3-3 Linux平台上驅動程式層網路事件通知機制的系統元件架構和關係 [32]

第 4 章 支援網路感知之中介軟體設計與架構

本章將介紹本論文所提的支援具網路感知應用程式的中介軟體設計架構。我 們將此中介軟體命名為 WinME。

4.1 目標與問題定義

本論文的主要目標是發展一個應用程式平台,讓程式設計者可以用來開發具 網路感知的應用程式,因此我們有以下的子目標:

z 應用程式可以取得網路資訊

„ 應用程式可以主動要求網路相關資訊。

z 當網路狀態改變時,應用程式可以被通知

„ 應用程式可以被動的被通知事件的產生,不需要去使用系統呼叫輪詢網 路狀態是否改變。

z 程式設計者可以只註冊自己感興趣的事件

z 程式設計者開發網路程式時不需擔心網路相關的系統程式碼

z 行動管理員程式可以控制協定堆疊各層的資訊 (e.g. 設定 IP 位址等…) 為達以上的目標,我們會有以下的問題:

z 應用程式如何取得網路資訊?

z 如何提供事件驅動機制?

z 程式界面的定義。

z 如何去控制協定堆疊和網路界面卡?

接下來的章節將會介紹我們的系統如何完成以上的目標及解決上面所提及的 問題。

4.2 系統概觀

Figure 4-1 中介軟體概觀

Figure 4-1 顯示了整個WinME的架構,我們可以很清楚看到應用程式透過WinMe 所提供的程式界面去對系統底層的網路作存取的動作。這邊也有跨層設計的概 念,我們將位於應用層下層協定堆疊的資訊直接傳達給使用者空間的應用程式,

使用者空間的應用程式也可以直接將資訊傳遞給協定堆疊的底層。

我們將這些資訊都拉上使用者空間的應用程式的好處是我們在控制底層網路 時可以有較大的彈性,完全取決於程式設計員的設計方式。以行動管理員來說,

行動管理員的決策很可以很複雜的,也可能會常常更動,這時候要求效率而把換 手決策作進核心內就顯得不適當。

當一個 802.11 的網路界面卡和無線接取點連上線後,會產生一個 Link UP 的 事件,並且會帶上 ESSID 等資訊,我們知道當連結上之後需要給網路界面卡設 定 IP 位址。

讓我們來考慮兩種情況:

一種情況是 802.21[30]的MIH Function,在這個情形之下Link UP的事件會 傳達給網路層(Network Layer),此時網路層也許就直接把IP位址設定到網路界面 卡上。

另一種情況就是使用 WinME,在這個情形之下,Link UP 的事件會傳達給應 用程式,應用程式經過決策後,可能決定使用 DHCP 取得 IP 位址,或經由使用 者設好的 Profile 決定 IP 位址,然後再把 IP 位址設定到網路界面卡上。

很明顯地,第一種情況的效能會比較好,可是沒有彈性,而今 802.21 的也尚 未成為標準,而且要達到第一種情形,我們還必須更改核心中關於協定堆疊的程 式碼,使其可以支援 MIH Function。我們認為關於換手的策略應該在使用者空間 的應用程式作決定,本論文並不關心行動管理員程式是如何作換手決策的,本論 文只是提供一個程式開發平台,讓行動管理員程式的撰寫者可以方便地開發和處 理網路間的換手策略。本論文提供的只是一個機制 (Mechanism),而程式的策略 (Policy) 就交給應用程式的開發者。

接下來的小節中,我們會介紹 WinME 中的各個元件。

4.2.1 控制 (Control) 、查詢 (Query) 及事件 (Event) 介面

應用程式透過 WinME 所提供的應用程式介面來使用控制、查詢和事件介面。

控制界面是用來控制協定堆疊或網路界面的狀態,如設定網路位址、增加路 由表欄位、更改預設閘道或叫無線網路卡去掃描鄰近的接取點 (Point Of Attachment) 等…。

查詢界面則提供應用程式用於查詢目前的網路資訊,如連線訊號強度、目前 網路頻寬、網路卡的狀態等。像 VoIP 的程式在一開始啟動時可能會需要知道目 前連線網路卡的 IP 位址,然後再用此 IP 位址去 SIP Server 註冊。

事件介面將網路事件提供給應用程式,如 Link UP、Link Down、IP Change 等事件。這對網路換手的效能很重要,有了這個介面之後應用程式就不需要去輪 詢底層的網路狀態來判斷事件是否發生。

4.2.2 行動管理員 (Mobility Manager)

使用 WinME 所提供的程式界面來管理底層的硬體或網路狀態。也因為如此 行動管理員的設計者可以只需要專注於換手策略 (Policy) 的設計,而無需去關 心底層是如何的運作。

行動管理員也可能包含使用者圖形界面 (GUI) 讓使用者來設定換手策略相 關的資料,或顯示出目前網路狀態。

最簡易的雙網 (802.11 WLAN and GPRS) 行動管理員,它可能是以無線區域 網路作為連線優先,當有無線區域網路時,就將預設閘道設成無線區域網路下的 預設閘道,在沒有無線區域網路訊號的範圍下,就將預設閘道設成個人行動通訊 GPRS 下的預設閘道。所以我們是藉著更改預設閘道來達到選擇網路界面卡的效 果。

4.2.3 WinME 的應用程式界面 (Middleware API)

讓程式開發者使用這些界面來與 WinME 溝通,協助開發應用程式。

4.2.4 WinME 的核心元件

本節會介紹 WinME 核心中的各個元件說明。

4.2.4.1 網路資訊儲存體 (Network Information Storage)

用來存放所量測的網路資訊,如網路頻寬、訊號強度、網路界面卡的 IP 位址 等。雖然資訊有可能會過時,不過在當有很多不同的應用程式來查詢同一份資料 時,WinME 就可以快速地回應應用程式。有的資訊可能會常常變動的 (如訊號 強度),我們就會設一個新鮮時間 (Fresh Time),如果應用程式下達取得訊號強度 的資訊,而這個資訊又過期的話,WinME 就會去跟底層取得資訊。至於不常變 動的資訊 (e.g. IP 位址),則 WinME 會在收到底層 IP 位址改變的事件時,就會 更改相對應的資訊。

此元件存在的目的就是為了快速地回應使用者程式的查詢要求,使得 WinME 不需要每當使用者程式要求一個網路資訊時,都要去跟系統底層要求一遍。

4.2.4.2 網路觀察者 (Network Monitor)

週期性的去觀察網路狀態,如訊號強度、網路卡資訊等資料….。觀察到的結 果會存入網路資訊儲存體中。

4.2.4.3 網路測量程式 (Network Measurement Daemon)

可產生封包來測量目前的網路頻寬。測量的結果會存入網路資訊儲存體中。

此元件在雖然在本論文中有納入WinME的設計,可是在實作上本論文並沒有實 作該元件,因為關於頻寬的測量本身就是一個值得討論的研究議題 [33][34]

[35][36]。或許可以在未來實作出這一個元件。

4.2.4.4 事件服務元件 (Event Service)

此元件提供應用程式事件處理機制,和處理底層的網路事件。應用程式可以 透過 WinME 的程式界面來跟此元件註冊感興趣的事件,而網路底層的事件會先 通知事件服務元件後,然後再由該元件再將訊號分送給感興趣的應用程式。

4.2.4.5 中介軟體轉接器 (Middleware Adapter)

這部份實作了所有和作業系統有關的程式碼 (如系統呼叫)。可用於幫助整個 WinME 的移植(porting)。

4.2.4.6 驅動程式轉接器 (Driver Adapter)

定義好驅動程式要提供的界面,讓 WinME 可以直接使用這個界面來對網路 硬體作溝通。這有點像是 802.21 的 MIH 提供的部分機制,不過在 802.21 尚未 成為標準前,我們只能自己先這樣作,如果未來 802.21 成為標準,而且核心內 也實作的話,驅動程式轉接器有機會用 802.21 取代掉。

4.3 網路事件通知機制

本論文所提出的系統中,事件通知機制可以說是十分重要的部份。有了這個 機制,應用程式就可以快速地反應網路狀態的變化,也不用像過去傳統的設計一 樣,週期的使用系統呼叫來輪詢網路狀態,造成系統不必要的負擔。

由於應用程式並不會對每個網路事件都感興趣,所以 WinME 提供讓應用程 式註冊事件的功能。有了註冊事件的功能之後,接下來是當事件發生時應用程式 如何得知?WinME 提供兩種得知事件的方法,我們把他們分別稱為同步處理和

由於應用程式並不會對每個網路事件都感興趣,所以 WinME 提供讓應用程 式註冊事件的功能。有了註冊事件的功能之後,接下來是當事件發生時應用程式 如何得知?WinME 提供兩種得知事件的方法,我們把他們分別稱為同步處理和