范永剛,劉紹方,董 晶,崔蘭清
(1.華北計算技術研究所,北京100083;2.太極計算機股份有限公司,北京100083)
隨著以以太網為基礎的TCP/IP網絡的廣泛應用,網絡已經成為了企業(yè)構建信息化系統(tǒng)的一種主導方式,但是目前廣泛使用的傳統(tǒng)設備如RFID讀寫器、調制解調器[1]等大多串口進行通信,并且大量新研制的工控設備一般首先提供串口與這些設備進行通信,業(yè)界提出了采用串口服務器將這些串口設備接入到以太網絡。串口服務器能夠提供一種將串口中的數據和以太網中傳送的TCP/IP數據包之間進行轉換的橋梁,使通過串口傳輸的數據能夠通過以太網進行傳送和共享,因此串口服務器成為了業(yè)界將串口設備接入到以太網的一種主要方式。
但是傳統(tǒng)的串口服務器一般采用100M以太網接口,隨著接入設備和請求傳輸數據量的增加,采用1000M以太網絡接口已經成為了主要趨勢,但串口的低速特性嚴重影響了以太網絡接口的性能的提高,因此如何高效的利用串口服務器提供的高速網絡接口進行數據的傳輸并提高串口服務器的通信效率成為了串口服務器中需要解決的一個主要問題[2]。
本文分析了影響串口服務器通信效率的原因,并指出了影響串口通信效率的因素在于內核態(tài)和用戶態(tài)之間的數據拷貝,據此本文提出了通過修改內核網絡協(xié)議棧在內核態(tài)將網絡接受到的數據傳送到串口,并修改內核中的串口驅動將串口收到的數據在內核態(tài)直接傳送到網絡協(xié)議棧,避免了大量數據在用戶態(tài)和內核態(tài)之間的拷貝進而大大提高串口服務器的傳輸效率的解決方案。又分別介紹了高性能串口服務器的硬件和軟件體系結構,并提出了高性能串口服務器的軟件體系結構的設計思想和實現(xiàn)方案。論文依據系統(tǒng)性能理論研究中提出的性能技術指標對高性能串口服務器的性能進行了實驗并對實驗結果進行了分析,結果表明一定程度上提高了串口服務器的性能。
評價網絡性能的主要技術指標包括數據傳輸率、吞吐率、網絡利用率、傳輸延遲、響應時間、負載能力、擴展性和適應性、互連與兼容性、可靠性和可維護性等[2]。
在高性能串口服務器的實現(xiàn)過程中,網絡采用1000Mbps以太網絡作為串口服務器的網絡連接接口,同時根據串口服務器的實際需求是使一個或多個工作站以最快的速度將網口接受到的數據發(fā)送到串口并將串口接收到的數據發(fā)送到網口,因此系統(tǒng)主要從網絡利用率、響應時間和負載能力等3個方面對網絡性能進行衡量。
1.1.1 網絡利用率
網絡利用率是指網絡傳輸的有效信息量與網絡能夠傳輸的最大信息量之比,在高性能串口服務器設備中,高性能串口服務器采用1000Mbps以太網絡作為串口服務器的網絡連接接口,因此網絡能夠傳輸的最大信息量為1000Mbps,網絡傳輸的有效信息量可以用發(fā)送數據密度即每秒發(fā)送數據的次數與每次發(fā)送數據中包含的數據幀數以及幀長度和幀中有效數據率來表示,則高性能串口服務器的網絡利用率采用公式表示如下
1.1.2 響應時間
響應時間是指從工作站發(fā)出一個命令到命令得到應答的時間間隔,在高性能串口服務器設備中,響應時間是指從網口發(fā)送命令數據包到串口服務器并由串口服務器將網絡數據包轉發(fā)到串口并從串口收到響應數據包并將響應數據包轉發(fā)到網口的時間延遲,由于系統(tǒng)可以假設高性能串口服務器的響應時間與連接到串口的設備本身的處理能力無關,因此將連接到串口的設備的處理時間考慮到響應時間中不影響對高性能串口服務器本身性能的評估。因此論文中采用多次響應時間的算術平均值對高性能串口服務器的響應時間進行計算,計算公式如下
響應時間 = [(te1-ts1)+ … + (teN-tsN)]/N
1.1.3 負載能力
負載能力是指隨著工作站的增加吞響應時間的變化量,在高性能串口服務器設備中,負載能力是指當連接到高性能串口服務器的工作站的數量增加時,工作站響應時間的變化率,若M>N則,則負載能力可以表示如下,在實際計算過程中可以逐漸增加M和N之間的步長得到不同的負載能力,并對負載能力進行算術平均從而能夠更加準確的對高性能串口服務器的負載能力進行評估。
1.2.1 UART硬件接口性能分析
串口傳輸數據[3]的性能通常采用波特率或比特率進行表示,波特率 (用S表示)是指數據信號對載波的調制速率,通常采用單位時間內載波調制狀態(tài)的改變次數來表示,其單位為波特,比特率 (用I表示)是指每秒鐘傳送二進制的位數,通常作為衡量信息傳輸速率的標準,二者之間的關系表示為
比特率 = 波特率 * 單個調制狀態(tài)對應的二進制位數
采用公式表示為:I=S*log2N,其中I表示比特率,S表示波特率,N表示單位載波負載的信息量,log2N以比特為單位。因此,為了從物理上提高串口的性能,應該從提高串口的波特率和單位載波負載的信息量等兩個方面進行考慮。
串口波特率的計算公式如下:Br=fsys_clk/ [C1*(Brs+C2)],其中fsys_clk是系統(tǒng)時鐘頻率,C1是系統(tǒng)頻率的分頻,Brs是串口寄存器中設置的值,C2的值通常為1,因此串口的波特率僅與硬件和串口寄存器中設置的值相關[4]。單位載波負載的信息量與串口通信的調制方式相關,串口通信的調制方式通常包括相移鍵控 (Phase-Shift-Keying,PSK)、幅移鍵控 (Amplitude-Shift-Keying,ASK)、頻移鍵控 (Frequency-Shift-Keying,F(xiàn)SK),其中PSK使用最為廣泛,因此在串口調制方式固定的情況下,單位載波負載的信息量也隨之確定。綜上所述采用修改硬件的手段提高串口通信性能的方式存在較大的局限性。
1.2.2 嵌入式Linux中串口操作性能分析
嵌入式Linux操作系統(tǒng)中進行串口通信的方式包括以下幾個步驟:打開串口,設置串口屬性,以文件方式對串口進行讀寫,關閉串口[5]。
嵌入式Linux操作系統(tǒng)中的打開串口操作通過采用系統(tǒng)提供的系統(tǒng)調用open函數進行。Linux下的串口文件位于/dev設備目錄中,其中串口文件分別采用ttyS0,ttyS1等文件名表示,因此通過標準的系統(tǒng)調用open即能夠完成對串口的打開操作,涉及的系統(tǒng)開銷主要包括,將設備文件名和設備操作類型從用戶態(tài)拷貝到內核態(tài),采用中斷方式完成操作,并將內核態(tài)的文件描述符返回到用戶態(tài),整個打開操作的系統(tǒng)開銷表示如下:Topen=Tu2k1+Tsyscall1+Tk2u1,其中Tu2k1表示從用戶態(tài)將pathname拷貝到系統(tǒng)態(tài)引起的開銷,Tsyscall1表示系統(tǒng)調用引起的開銷,Tk2u1表示將設備描述符從系統(tǒng)態(tài)拷貝到用戶態(tài)引起的開銷[6]。
嵌入式Linux操作系統(tǒng)中在用戶態(tài)維護串口屬性的通用結構體為struct termios2,Linux2.6內核中在系統(tǒng)態(tài)中維護串口屬性的結構體為struct ktermios,嵌入式Linux操作系統(tǒng)中對串口屬性進行操作的函數接口為tcgetattr和tcsetattr[12]。
目前嵌入式Linux操作系統(tǒng)內核支持36種串口波特率最低為50bps,最高為4 000 000bps,串口波特率的設置采用cfsetispeed和cfsetospeed系統(tǒng)調用完成串口屬性的設置。
因此配置串口屬性操作引起的系統(tǒng)開銷可以表示為
式中:Tu2k2——將struct termios結構體從用戶態(tài)拷貝到系統(tǒng)態(tài)引起的開銷,Tswitch2kern——從用戶態(tài)切換到內核態(tài)引起的開銷,Tswitch2usr——從內核態(tài)切換到用戶態(tài)引起的開銷,Tkfonfig——在內核態(tài)進行串口設置的開銷。
串口的讀寫操作采用read系統(tǒng)調用和write系統(tǒng)調用進行。串口讀操作的函數原型可以表示為ssize_t read(int fd,void*buf,size_t count),串口讀操作引起的系統(tǒng)開銷可以表示為Tread=Tsyscall2+Trecv+Tk2u3+Tswitch2usr,其中Tsyscall2表示引發(fā)read系統(tǒng)調用的開銷,Trecv表示從串口接收數據的開銷,Tk2u3表示從內核態(tài)拷貝數據到用戶態(tài)的開銷,Tswitch2usr表示從系統(tǒng)態(tài)切換到用戶態(tài)的開銷;串口寫操作的函數原型可以表示為ssize_t write(int fd,const void*buf,size_t count),串口寫操作引起的系統(tǒng)開銷可以表示為Twrite=Tsyscall3+Tu2k4+Tsend+Tswitch2usr,其中Tsyscall3表示引發(fā)write系統(tǒng)調用的開銷,Tu2k4表示將數據從用戶態(tài)拷貝到內核態(tài)引起的開銷,Tsend表示發(fā)送數據緩沖區(qū)中的數據引起的開銷,Tswitch2usr表示從系統(tǒng)態(tài)切換到用戶態(tài)的開銷。
嵌入式Linux操作系統(tǒng)中的關閉串口采用系統(tǒng)調用close進行,close函數原型為int close(int fd),其中fd為open系統(tǒng)調用得到的文件描述符,因此系統(tǒng)開銷可以表示為Tclose=Tsyscall4,其中Tsyscall4為close所引起的開銷。
綜上所述,一次完整的串口發(fā)送和串口接受數據的操作引起的系統(tǒng)開銷如下
其中包括4次系統(tǒng)調用,3次從用戶態(tài)到內核態(tài)的數據拷貝操作,2次送內核態(tài)到用戶態(tài)的數據拷貝操作和4次內核態(tài)和用戶態(tài)之間的上下文切換。在高性能串口服務器操作過程中打開串口操作、配置串口操作和關閉串口操作一般只進行一次,因此用戶態(tài)和內核態(tài)之間的數據拷貝操作是串口讀寫操作中的主要時間開銷,綜上所述在高性能串口服務器中減少用戶態(tài)和內核態(tài)之間的數據拷貝操作是提高串口服務器性能的主要途徑。
高性能串口服務器的一般連接模型如圖1所示,串口處理設備通過串口連接到高性能串口服務器,串口服務器通過1000M以太網連接到交換機,不同的工作站連接到交換機并通過網絡對高性能串口服務器進行訪問[7]。
圖1 高性能串口服務器網絡模型
高性能串口服務器的性能主要是對工作站來說的,因此高性能串口服務器的性能主要表現(xiàn)為網絡性能,但串口服務器對外表現(xiàn)的網絡性能受到串口服務器本身處理能力的制約和串口服務器與串口處理設備之間數據傳輸效率的制約,因此系統(tǒng)的整體性能為:P=min(Pnic,Pcpu,Pttys),其中P表示系統(tǒng)的整體性能,Pnic表示網口的傳輸數據的性能,Pcpu表示高性能串口服務器的處理性能,Pttys表示串口傳輸數據的性能。
論文中實現(xiàn)的高性能串口服務器的硬件采用1000Mbps以太網口作為網絡接口,采用ATMEL AT91RM9200QU作為高性能串口服務器處理器,處理器主頻為260MHz,串口采用最高波特率支持為115 200bps的UART串口芯片,操作系統(tǒng)內核采用Linux 2.6.24,因此整個系統(tǒng)的性能瓶頸在于串口[8],有效的提高串口的通信效率是提高系統(tǒng)整體性能的有效途徑,上一節(jié)中理論分析顯示影響串口通信效率的關鍵因素在于大量的數據在內核態(tài)和用戶態(tài)之間的拷貝,因此減少內核態(tài)和用戶態(tài)之間的數據拷貝將提高串口的通信效率,從而克服系統(tǒng)的瓶頸并提高系統(tǒng)的整體性能[9]。
高性能串口服務器的硬件以ARM9200開發(fā)板為基礎[10],開發(fā)板主處理器采用AT91RM9200ARM處理器,AT91RM9200ARM處理器內嵌ARM920T核心,帶有全性能的MMU,ARM9200開發(fā)板由核心板和主控板組成,核心板包括AT91RM9200ARM處理器、64MSDRAM、4MNorFlash、32MNandFlash、1個10/100/1000MDAVICOM公司的DM9702超高速以太網絡芯片、1個ST16C554串口芯片、RTC、1個JTAG接口和1個外部擴展總線,主控板上包括1個USB接口、1個SD卡接口、1路CAN總線接口、1個RS485、1個8×8的鍵盤、1個320×240的觸摸屏LCD接口。高性能串口服務器硬件體系結構如圖2所示。
圖2 高性能串口服務器硬件體系結構
高性能串口服務器在實現(xiàn)中只使用了核心板,核心板上的64M的SDRAM用于系統(tǒng)運行過程中的內存,4M的NorFlash用于存放Bootloader和Linux Kernel代碼,32M的NandFlash用于存放jffs2根文件系統(tǒng),系統(tǒng)采用10/100/1000M高速以太網絡芯片DM9702作為系統(tǒng)的網絡接口,采用ST16C554串口芯片作為系統(tǒng)的串口芯片,該芯片與16C550串口芯片兼容,支持最高波特率達到115200bps。
2.2.1 DM9702網卡芯片驅動與網絡子系統(tǒng)體系結構
高性能串口服務器中的DM9702網卡芯片驅動針對系統(tǒng)采用的Linux 2.6.24內核編寫,驅動在編寫過程中與傳統(tǒng)網絡接口驅動程序相似,驅動模塊初始化函數和清除函數代碼分別如下:
清除函數為:
由于驅動在分配設備結構時調用的是alloc_etherdev函數,因此驅動采用了內核中提供的ether_setup函數完成了對DM9702以太網絡接口設備驅動結構的大多數默認操作,Linux操作系統(tǒng)采用register_netdev函數完成以太網接口設備驅動的注冊。
Linux內核中的網絡子系統(tǒng)被設計成完全與協(xié)議無關的,但高性能串口服務器在實現(xiàn)過程中主要采用的是TCP/IP協(xié)議棧,因此論文主要研究了Linux網絡子系統(tǒng)中的TCP/IP協(xié)議棧,Linux網絡子系統(tǒng)TCP/IP協(xié)議棧體系結構如圖3所示。
用戶應用程序使用Linux提供的套接字接口進行網絡傳輸,當進程A需要將數據傳送到進程B時,應用程序創(chuàng)建所需要傳輸的數據,然后打開套接字接口并向接口中寫入數據并處理需要傳輸的數據,套接字緩沖擁有數據的引用并通過各層將其向下傳遞,在每一層中都會執(zhí)行如解析數據包頭、添加修改數據包頭、檢查大小、路由操作、分片等,當套接字緩沖通過這些層向下傳遞時,其數據本身不會被復制到每個層,內核通過及時修改套接字緩沖的引用并傳遞到下一層來減少開銷,最后內核通過調用驅動程序中的hard_start_xmit函數將數據發(fā)送到進程B的網絡接口中,若數據包的目標物理地址與進程B所在主機的網卡的MAC地址吻合,數據包會被轉到網卡的緩沖區(qū)中,然后內核將數據包拷貝到套接字緩沖并向CPU發(fā)送一個硬中斷,最后CPU處理數據包并通過所有層向上傳遞直到其達到應用程序的端口[11]。
圖3 Linux網絡子系統(tǒng)TCP/IP協(xié)議棧體系結構
2.2.2 ST16C554串口芯片驅動與串口子系統(tǒng)體系結構
高性能串口服務器中的ST16C554串口芯片驅動主要針對系統(tǒng)采用的Linux 2.6.24內核編寫,驅動在編寫過程中與通用串口驅動程序相似,驅動模塊初始化函數和清除函數代碼分別如下:
對st16c554_port[i]串口的操作函數、地址映射類型、訪問地址、中斷類型、時鐘和緩沖區(qū)大小等進行初始化:
清除函數為:
Linux內核采用uart_register_driver函數完成對串口設備驅動的注冊。
Linux串口子系統(tǒng)采用層次式結構組織整個驅動程序,Linux串口子系統(tǒng)體系結構如圖4所示。
圖4 Linux內核串口子系統(tǒng)體系結構
Linux內核串口子系統(tǒng)分為三層,分別是tty核心層、tty線路規(guī)程層和tty驅動程序層,其中tty核心層對應的數據結構是struct uart_driver,tty線路規(guī)程層在內核中對應的數據結構是struct ktermios,tty驅動程序層對應的數據結構是struct tty_driver。
在通過串口發(fā)送數據的過程中[12],tty核心層從用戶得到數據,并發(fā)送給tty線路規(guī)程層程序,然后傳遞給tty驅動程序層,并格式化數據,最后發(fā)送給硬件;在通過串口接收數據的過程中串口硬件設備將數據回溯到tty驅動程序層,進入tty線路規(guī)程驅動,然后流入到tty核心層,最后被用戶獲取。在串口通信過程中,tty驅動程序層也可以直接與tty核心層進行通信和數據傳輸,但大多數時候數據傳輸需要通過tty線路規(guī)程層驅動程序進行轉換[13]。
高性能串口服務器主要在Linux內核中對Linux網絡子系統(tǒng)和Linux串口子系統(tǒng)進行了修改[14],從而使得網絡子系統(tǒng)中收到的數據不經過內核態(tài)到用戶態(tài)的拷貝直接在內核態(tài)發(fā)送到串口子系統(tǒng)中,從而大大提高了高性能串口服務器的性能。高性能串口服務器軟件體系結構如圖5所示。
圖5 高性能串口服務器軟件體系結構
在系統(tǒng)實現(xiàn)過程中,對于網絡子系統(tǒng)中,主要修改了TCP/IP協(xié)議棧中的傳輸層的代碼使得傳輸的數據不用拷貝到接收緩沖區(qū)中就發(fā)送到串口子系統(tǒng)的內核緩沖區(qū)中;在串口子系統(tǒng)中,主要是修改了tty核心層,tty核心層在內核態(tài)直接接收網絡子系統(tǒng)中的在內核態(tài)中的傳輸層數據包,并通過tty線路規(guī)程層和tty驅動程序將其發(fā)送到物理串口設備中,同時tty核心層將從物理串口設備中接收到的數據在內核態(tài)發(fā)送到網絡子系統(tǒng)中的傳輸層,從而實現(xiàn)串口和網絡間數據的高速傳輸[15]。
本文第1.3節(jié)指出高性能串口服務器的主要性能瓶頸在于網絡數據和串口數據在內核態(tài)和用戶態(tài)之間的數據拷貝操作,由高性能串口服務器的網絡模型圖可知,高性能串口服務器對用戶可見的性能主要表現(xiàn)在網絡性能上,因此根據第1.1節(jié)中提出的3個網絡性能指標分別對系統(tǒng)實現(xiàn)的高性能串口服務器的網絡利用率、響應時間和負載能力等進行測試。
在系統(tǒng)測試過程中,系統(tǒng)采用1.3節(jié)中提出的網絡模型,通過4臺PC和H3CS5100系列交換機與高性能串口服務器進行連接,并將高性能串口服務器的串口和900MHz的RFID讀寫器進行了連接。測試過程中保持串口的連接屬性為波特率115 200bps、8位數據位、1位停止位、無奇偶校驗和無流控。
在網絡利用率的測試過程中,系統(tǒng)通過采用1.3節(jié)中提出的網絡模型,在其中一臺PC上對和高性能串口服務器相連的接口的流量進行監(jiān)控,將監(jiān)控得到的流量數據文件進行保存,然后采用1.1.1節(jié)中提出的網絡利用率計算方法對高性能串口服務器的網絡利用率進行測試,測試實驗結果如圖6所示。
圖6 內核修改前后網絡利用率的對比
實驗結果表明利用修改后的內核能夠比修改前的內核的網絡利用率方面提高約5%左右,因此在一定程度上提高了網絡的利用率。
在對高性能串口服務器的響應時間的測試過程中,系統(tǒng)通過多臺PC客戶端不斷的連接高性能串口服務器并通過串口服務器發(fā)送數據包和接收數據包,并記錄每次發(fā)送數據包和接收數據包的延時并保存到一個數據文件,測試實驗結果如圖7所示。
實驗結果表明高性能串口服務器在修改內核后比修改內核前的發(fā)送數據和接收數據的響應時間縮短了約0.4ms,因此在一定程度上提高了通過串口服務器進行數據通信的效率。
在測試高性能串口服務器的負載過程中,采用不斷增加客戶端從而達到增加通過高性能串口服務器的網絡流量從而使得網絡出現(xiàn)響應時間超過3s的方法對高性能串口服務器的負載能力進行測試,測試的實驗結果如圖8所示。
實驗結果表明串口服務器修改后的內核比修改前的內核在網絡負載上提高了約4.5MB,因此達到了提高串口服務器網絡負載的目標,并在一定程度上提高了串口服務器的性能。
本文對網絡和串口的性能進行了研究,并分析了影響串口服務器性能的因素,即串口通信,而影響串口通信效率的因素為內核態(tài)和用戶態(tài)之間的頻繁數據拷貝。通過修改內核中的串口驅動將數據直接傳送到網絡協(xié)議棧,提高了數據的傳輸效率,并給出了系統(tǒng)的硬件和軟件體系結構,詳細地介紹了系統(tǒng)的實現(xiàn)方案。最后對改進的串口服務器進行實驗,結果表明,改進的系統(tǒng)提高了網絡的利用率和負載能力,并減少了網絡響應時間,提高了高性能串口服務器的性能。
[1]Joseph Yiu.The definitive guide to the ARM Corter-M3 [M].SONG Yan,transl.Beijing:Beihang University Press,2009:30-98 (in Chinese).[Joseph Yiu.ARM Cortex-M3權威指南 [M].宋巖,譯.北京:北京航空航天大學出版社,2009:30-98.]
[2]YANG Shuiqing,ZHANG Jian,SHI Yunfei.Embedded Linux system development for ARM [M].Beijing:Publishing Houser of Electronics Industry,2008:245-323(in Chinese). [楊水清,張劍,施云飛.ARM嵌入式Linux系統(tǒng)開發(fā)技術詳解[M].北京:電子工業(yè)出版社,2008:245-323.]
[3]YAN Liming,HU Likun,WANG Qingchao.Temporal analysis for master node of UART-based Mster/SLAVE communication [J].Electrical Measurement &Instrumentation,2006,43 (7):51-54(in Chinese). [嚴利明,胡立坤,王慶超.基于UART的主從通信方式的主節(jié)點時序分析 [J].電測與儀表,2006,43 (7):51-54.]
[4]HU Likun.UART-based reliable communication and performance analysis[J].Computer Engineering,2006,32 (10):15-17 (in Chinese).[胡立坤,王慶超.基于UART的可靠通信與性能分析 [J].計算機工程,2006,32 (10):15-17.]
[5]Michael R Sweet.Serial programming guide for POSIX operating systems [EB/OL].http://www.easysw.com/~mike/serial/serial.html,2011.
[6]HUANG Fengqi,WANG Yingchun.Design of embedded communication and control system platform based on ARM9+Linux [J].Measurement & Control Technology,2008,27 (9):36-38 (in Chinese).[黃風奇,王迎春.基于ARM9+Linux的嵌入式通信檢測平臺的設計 [J].測控技術,2008,27 (9):36-38.]
[7]ZOU Yingting,LI Shaorong.Transplant of the Linux system on ARM9 [J].Computer Applications,2009,28 (6):43-45(in Chinese).[鄒穎婷,李紹榮.ARM9上的嵌入式Linux系統(tǒng)移植 [J].計算機應用,2009,28 (6):43-45.]
[8]ZU Dan,REN Changming.The initialization designing of the embedded system based on the ARM946E-S [J].Microprocessors,2009,30 (3):95-97 (in Chinese). [祖丹,任長明.基于ARM946E-S的嵌入式系統(tǒng)初始化設計 [J].微處理機,2009,30 (3):95-97.]
[9]YAO Hongxin,HUANG Bing.Study of IRQ interrupt programming mechanism based on ARM9 [J].Computer Engineering and Desing,2009,30 (12):2848-2851 (in Chinese).[姚宏昕,黃冰.基于ARM9內核的IRQ異常中斷編程機制的研究 [J].計算機工程與設計,2009,30 (12):2848-2851.]
[10]LIAN Jia.The research on technology of processor management SDSM operating system based on ARM [D].Beijing:Beijing Jiaotong University,2008:25-38 (in Chinese). [連嘉.基于ARM的SDSM操作系統(tǒng)處理機管理技術研究 [D].北京:北京交通大學,2008:25-38.]
[11]Eduardo Ciliendo,Takechika Kunimasa.Linux performance and tuning guidelines [EB/OL].http://www.redbooks.ibm.com/abstracts/redp4285.html,2011.
[12]Jonahan Corbet.Linux device drivers[M].WEI Yongming,GENG Yue,transl.Beijing:China Electric Power Press,2006 (in Chinese).[Jonahan Corbet.LINUX設備驅動程序[M].魏永明,耿岳,譯.北京:中國電力出版社,2006.]
[13]Philipp K Janert.Gnuplot in action:understanding data with graphs[M].America:Manning Publications,2009:43-153.
[14]LI Junqiang,LI Dongsheng,LI Yilei.A design to implement UART interface of communication based on FPGA [J].Microprocessors,2009,30 (6):20-23(in Chinese).[李軍強,李東生,李鸞磊.基于FPGA的UART通信接口設計與實現(xiàn)[J].微處理機,2009,30 (6):20-23.]
[15]JIANG Yanhong.Design and application of UART based on FPGA [J].Computer Engineering,2008,34 (21):225-229(in Chinese).[蔣艷紅.基于FPGA的UART設計與應用 [J].計算機工程,2008,34 (21):225-229.]