1 引言 操作系統技術包含服務器和客戶機操作系統兩套技術,目前支持瘦客戶機計算的服務器技術主要是VNC、Citrix Metaframe、Terminal Services、Rapid X 和Tarantella,服務器操作系統要解決多用戶、會話控制、狀態表示等一系列技術難點。網絡計算機設計中的一個主要工作就是瘦客戶機操作系統的設計,在此我們把瘦客戶端操作系統稱為網絡計算機操作系統。本文從Linux 體系結構的角度給出網絡計算機的Linux 體系結構,這樣更能方便表達設計和實現嵌入式Linux 網絡計算機操作系統的步驟。 2 操作系統體系結構 本操作系統體系結構如圖 1 所示: 根據上面網絡計算機的嵌入式 Linux 體系結構,下面給出了要設計的網絡計算機操作系統各部分的主要硬件和軟件的選擇。硬件系統:CPU(VTA C3 733MHzpro) 、內存(64MB-512MB SDRAM)、顯卡(sis300 圖形內核、32 兆DDR 幀緩存)、聲卡(2 聲道)、網卡(10/100 兆網卡、支持PXE 啟動)、顯示器(CRT 彩顯)、PS/2 接口的鼠標和鍵盤。硬件抽象層(HAL):顯卡驅動、聲卡驅動、存儲設備驅動、網卡驅動等。Linux 內核 ![]() 3 各部分具體實現策略 3.1 硬件層的實現 該層主要實現系統初始化部分和網絡計算機硬件系統的驅動部分。首先,在386 的實模式下對已經調入內存的操作系統代碼進行檢查,通過BIOS 中斷獲取內存容量信息,設置鍵盤反應速度,設置顯示器的基本模式,獲取硬撇信息,檢測是否有PS/2 鼠標等操作。然后,就準備讓CPU 進入保護模式了。要先屏蔽中斷信號,再次設置32位啟動代碼的位置,調用操作系統指令1idt 和1gdt 被調用了,設置中斷向量表(idt)和全局描述符表(gdt)。最后們對8259 中斷控制器進行編程,對防處理器進行復位。Setup.S 設置保護模式的標志位,重新取指令以后,再用一條跳轉指令,進入保護模式下的啟動階段,同時把控制權交給Head. S 這段純32 位匯編代碼。Head. S 先做一些屏蔽中斷的準備工作,然后,用一個默認的表項把所有的256 個中斷向量填滿。這個默認表項指向一個特殊的Linux 中斷服務程。因為Linux 系統初始化完成后,就不使用BIOS 的中斷服務程序。Linux 有很完善的設備驅動程序使用機制,該機制使特定硬件設備的中斷服務程序很容易被系統本身或用戶直接調用,而且,調用時所需的參數通常都要比BIOS 調用來得簡單且高效。所以,BIOS的中斷向量在這里就被覆蓋了。Head.S 此后會檢查CPU 的類型,對協處理器進行檢查,然后調用了Setup_paging 這個子函數進行頁初始化。到此,保護機制下內存管理,中斷管理的框架已經建好了。最后,Head.S 調用/init/main.c 中的start_kernel 函數,把控制權交內核。 圖2 是NC(Network Computer)系統的整個引導過程。 Linux 核心和設備驅動程序之間必須有一個以標準方式進行相互操作的接口。每一類設備驅動:字符設備、塊設備及網絡設備都提供通用接口,以便在需要時為核心提供服務。Linux動態性很強。每次Linux 核心啟動時如果遇到不同的物理設備,需要不同的物理設備驅動程序。Linux 允許通過配置腳本,在核心重建時將設備驅動包含在內。其他設備驅動可在必要時作為核心模塊動態加載。 3.2 內核的實現 在系統需求確定的前提下,設計網絡計算機嵌入式Linux 操作系統的首要步驟是嵌入式Linux 內核的設計。內核的選擇主要是根據硬件系統處理器體系結構的不同,選擇適當的Linux 內核實現。構建Linux 內核之前先要根據目標硬件平臺的配置來修改內核選項。通常要進行的修改是選擇合適的硬件支持,這些硬件主要是處理器、芯片組、網卡、聲卡、顯卡等設備;另外還需要設置的是文件系統、網絡接口等系統軟件選項的選擇,去除不需要的功能模塊。內核編譯過程包括確定內核依賴關系、生成內核鏡像、生成內核模塊幾個步驟。 內核是應用程序和硬件之間橋梁,在瘦客戶機中,存儲設備和內存是非常緊缺的資源,保持一個小的內核既可以增強整個系統的性能,又能夠節省寶貴的存儲空間。因此需要一個精簡的內核支持瘦客戶機,使得內核能夠完備的支持瘦客戶機的硬件設備,又沒有冗余。在完成了硬件 HAL 層的工作,將各種驅動源代碼都獲得并放到內核的指定位置后,就可以開始編譯出自己想要的嵌入式Linux 內核了。編譯結束后得到內核文件大小為1M 字節左右,這個大小對于網絡計算機來說是可以接受的。 3.3 根文件系統的實現 設計好 Linux 內核后的工作是設計嵌入式Linux 的根文件系統,Linux 內核引導過程的最后一步工作就是掛接這個根文件系統。Linux 根文件系統的組織結構沿襲Unix 系統的傳統結構。在設計嵌入式Linux 的根文件系統的時候,我們要做的工作依次是組織目錄結構、開發應用程序、選擇共享函數庫、存儲內核鏡像和模塊、選擇設備文件、配置系統初始化過程和安裝根文件系統。 瘦客戶機通常使用 Flash 作為存儲設備。引導程序、操作系統內核、文件系統都保存在Flash 中。因此需要文件系統和Flash 驅動程序來統一完成對Flash 設備的讀寫。由于Flash的容量小、成本高、以及使用壽命短的特點。 3.4 應用程序層(API)層實現 應用程序層主要有許多 c 函數庫構成。在Linux 中有很多函數庫,滿足各種各樣的函數調用。我們用1dd 命令檢測出需要的函數庫,然后根據系統存儲空間(因為網絡計算機嵌入式操作系統要求最后編譯出來的內核大小不能太大)和網絡計算機需要滿足的應用需求,將用到的函數庫放到API 層,或用靜態編譯的方法將涉及該函數庫的代碼直接編譯到應用中,從而使其不依賴該函數庫。圖3 給出了我們用到的部分函數庫。 4 基于Linux 的RDP 客戶端的設計與實現 NC 系統的一大應用是連接Windows2000 或Windows2003 終端系統,使用Windows 的資源,讓用戶感覺就像直接在使用windows2003 一樣。由于Windows 終端協議經過了多次升級,到目前為止最新的是Rpd5.1 協議,該協議提供了很多RDP5.1 之前不具備的特性,如真彩色、本地打印、本地視頻等。為了給用戶提供一個真實的Windows 環境,使之具有多媒體等功能,需要研究RDP5.1,開發RDP5.1 的客戶端。 4.1 RDP 程序模塊 RDP 客戶端的設計主要分為兩大模塊,分別是RDP 程序模塊,客戶端底層設計模塊。RDP 程序模塊主要實現RDP 協議;客戶端底層設計模塊通過定制和剪裁Linux 系統,讓RDP程序與網絡計算機硬件平臺整合到一起,使RDP 程序在網絡計算機設備上可以運行。RDP 程序主要有RDP 協議模塊與GUI 模塊組成,它們之間保留了接口。RDP 協議模塊主要解析RDP 防議,與平臺無關;GUI 模塊主要負責圖形顯示和鼠標消息上傳,與所選平臺也沒有關系。圖4 是RDP 程序結構圖。 RDP 程序執行后,首先從配置文件中讀取服務器IP 地址,本機IP 地址等參數,然后連接服務器,服務器連接成功后,建立窗口,下載登陸界面,隨后進入窗口消息循環,程序只處理鼠標、鍵盤消息,出理上傳的RDP 數據。根據RDP 協議的層次結構將整個模塊分為TCP 層、ISO 層、MCS 層、SEC 層、RDP 層。分別有文件tcp.c、iso.c、mcs.c、sec.c、rdp.c來實現。按功能劃分,可以劃分為RDP 回話連接、數據傳輸與解析、RDP 數據處理、數據的上傳和本地打印。 4.2 客戶端底層設計模塊 RDP 客戶端模塊由兩個獨立程序組成,Rdp1og 負責用戶界面和處理用戶配置,mw 為RdP 客戶端程序。在腳本rdp 中循環調用這兩個獨立程序,使用戶所見到的總是RDP 客戶端界面,可以從界面點擊圖標啟動客戶端程序。在啟動腳本/etc/rc.d/rc.sysinit 中直接啟動rdp腳本。啟動流程如下圖5 所示。 本文作者創新點:本文從Linux 體系結構的角度提出了網絡計算機操作系統層次結構。根據提出的嵌入式Linux 網絡計算機操作系統層次結構,研究了基于嵌入式Linux 網絡計算機的操作系統的實現方法。 |