王舉輝
【摘 要】本文創(chuàng)建了一個基于Linux的文件服務(wù)器模型,基本架構(gòu)為客戶端-服務(wù)器端-文件服務(wù)器的三層模型。服務(wù)器向客戶發(fā)送操作列表,客戶向服務(wù)器發(fā)送請求,服務(wù)器將客戶的請求發(fā)送至文件服務(wù)器進(jìn)行處理,并將處理結(jié)果通過服務(wù)器反饋給客戶。通過本文可幫助初學(xué)者分析和理解Linux的基本概念和實(shí)驗(yàn)。
【關(guān)鍵詞】文件服務(wù)器;socket;共享內(nèi)存;消息傳遞
中圖分類號: TP311.52 文獻(xiàn)標(biāo)識碼: A 文章編號: 2095-2457(2018)28-0154-002
DOI:10.19694/j.cnki.issn2095-2457.2018.28.070
【Abstract】This paper creates a file server model based on Linux,and the basic architecture is a three-layer model of client-server-file server.The server sends the list of operations to the client,then the client sends the request to the server,and the server sends the client's request to the file server for processing,and the processing result is fed back to the client through the server.This article can help beginners to analyze and understand the basic concepts and experiments of Linux.
【Key words】File server;Socket;Shared memory;Message passing
0 引言
Linux是大學(xué)本科學(xué)生完成操作系統(tǒng)課程實(shí)驗(yàn)所使用的主要操作系統(tǒng),該系統(tǒng)也是各大公司、企業(yè)使用和開發(fā)產(chǎn)品的主要系統(tǒng)。本文基于教學(xué)過程中的實(shí)踐經(jīng)驗(yàn),研究并構(gòu)建了一個基于Linux的文件服務(wù)器模型,向初學(xué)者提供了使用、學(xué)習(xí)操作系統(tǒng)工具的一種框架。
本模型使用了POSIX(Portable Operating System Interface),即可移植化的操作系統(tǒng)接口,是IEEE為了在各種UNIX操作系統(tǒng)上運(yùn)行軟件而定義的一系列API標(biāo)準(zhǔn)總稱。
本文根據(jù)操作系統(tǒng)中的高級進(jìn)程通信機(jī)制來完成模型的創(chuàng)建,高級通信機(jī)制包括:共享存儲器系統(tǒng)(Shared memory)、管道通信系統(tǒng)(Pipes)、消息傳遞系統(tǒng)(Passing message)以及客戶-服務(wù)器系統(tǒng)(C/S)[1]。
1 文件服務(wù)器簡介
該模型允許用戶(客戶端)上傳文本文件到服務(wù)器并選擇相應(yīng)的操作,然后從服務(wù)器獲得結(jié)果并下載文件。主要有以下功能:將小寫字母轉(zhuǎn)換成大寫字母;統(tǒng)計(jì)單詞在字符串中出現(xiàn)的次數(shù)。
該框架包括三個組成部分:
(1)客戶端。這是用戶接口,用于從服務(wù)器端接收列表(包括服務(wù)器能進(jìn)行的操作)并顯示給用戶;發(fā)送用戶的選擇給服務(wù)器,從服務(wù)器接收反饋的處理結(jié)果。
(2)服務(wù)器。與客戶端進(jìn)行通信。將操作列表發(fā)給客戶,接收用戶的選擇和數(shù)據(jù),并把這些信息傳給文件服務(wù)器,接收文件服務(wù)器的處理結(jié)果并傳給客戶。
(3)文件服務(wù)器。處理來自于客戶的數(shù)據(jù)并把處理結(jié)果傳給服務(wù)器。
2 模型基本元素
為構(gòu)建一個較全面的模型,系統(tǒng)中要求使用以下元素(技術(shù)、函數(shù)):
(1)Socket[2]:套接字,是UNIX操作系統(tǒng)下的網(wǎng)絡(luò)通信接口,是目前最流行的網(wǎng)絡(luò)通信程序接口之一。一個套接字就是一個通信標(biāo)識類型的數(shù)據(jù)結(jié)構(gòu),包含通信目的地址、端口號、網(wǎng)絡(luò)傳輸層協(xié)議、進(jìn)程所在的網(wǎng)絡(luò)地址等。在該模型中,Socket用于實(shí)現(xiàn)客戶和服務(wù)器之間的通信。服務(wù)器將對文件進(jìn)行操作的列表發(fā)給客戶機(jī),客戶將選擇傳給服務(wù)器,服務(wù)器處理后將結(jié)果返回給客戶
(2)Shared Memory:共享內(nèi)存,一種高級通信機(jī)制,通過共享內(nèi)存可以實(shí)現(xiàn)進(jìn)程間通信(IPC)。在該模型中,共享內(nèi)存用于實(shí)現(xiàn)服務(wù)器和文件服務(wù)器之間的通信。服務(wù)器創(chuàng)建共享內(nèi)存,并將數(shù)據(jù)(存在于用戶上傳的文件中)放到共享內(nèi)存中,文件服務(wù)器從共享內(nèi)存讀取數(shù)據(jù)。
(3)Messaging:消息傳遞,也是一種高級通信機(jī)制,通過消息隊(duì)列實(shí)現(xiàn)進(jìn)程間通信(IPC)。在該模型中,消息傳遞用于實(shí)現(xiàn)服務(wù)器和文件服務(wù)器之間的通信。服務(wù)器將用戶的選擇傳給文件服務(wù)器,文件服務(wù)器將處理完成的信號傳給服務(wù)器。
(4)Threads[3]:線程,是比進(jìn)程更小的實(shí)體,切換速度快,作為通信的實(shí)體。在該模型中,線程用于統(tǒng)計(jì)字符串中單詞出現(xiàn)的次數(shù)。首先,將字符串分割成單詞,然后在一個方法(method)中創(chuàng)建線程實(shí)現(xiàn)單詞的統(tǒng)計(jì)。
3 主要的頭文件
要實(shí)現(xiàn)進(jìn)程間及網(wǎng)絡(luò)間通信,基于Linux的系統(tǒng)必須包括以下頭文件:
Client.c(客戶端):
#include
#include
#include