王举辉
【摘 要】本文创建了一个基于Linux的文件服务器模型,基本架构为客户端-服务器端-文件服务器的三层模型。服务器向客户发送操作列表,客户向服务器发送请求,服务器将客户的请求发送至文件服务器进行处理,并将处理结果通过服务器反馈给客户。通过本文可帮助初学者分析和理解Linux的基本概念和實验。
【关键词】文件服务器;socket;共享内存;消息传递
中图分类号: TP311.52 文献标识码: 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是大学本科学生完成操作系统课程实验所使用的主要操作系统,该系统也是各大公司、企业使用和开发产品的主要系统。本文基于教学过程中的实践经验,研究并构建了一个基于Linux的文件服务器模型,向初学者提供了使用、学习操作系统工具的一种框架。
本模型使用了POSIX(Portable Operating System Interface),即可移植化的操作系统接口,是IEEE为了在各种UNIX操作系统上运行软件而定义的一系列API标准总称。
本文根据操作系统中的高级进程通信机制来完成模型的创建,高级通信机制包括:共享存储器系统(Shared memory)、管道通信系统(Pipes)、消息传递系统(Passing message)以及客户-服务器系统(C/S)[1]。
1 文件服务器简介
该模型允许用户(客户端)上传文本文件到服务器并选择相应的操作,然后从服务器获得结果并下载文件。主要有以下功能:将小写字母转换成大写字母;统计单词在字符串中出现的次数。
该框架包括三个组成部分:
(1)客户端。这是用户接口,用于从服务器端接收列表(包括服务器能进行的操作)并显示给用户;发送用户的选择给服务器,从服务器接收反馈的处理结果。
(2)服务器。与客户端进行通信。将操作列表发给客户,接收用户的选择和数据,并把这些信息传给文件服务器,接收文件服务器的处理结果并传给客户。
(3)文件服务器。处理来自于客户的数据并把处理结果传给服务器。
2 模型基本元素
为构建一个较全面的模型,系统中要求使用以下元素(技术、函数):
(1)Socket[2]:套接字,是UNIX操作系统下的网络通信接口,是目前最流行的网络通信程序接口之一。一个套接字就是一个通信标识类型的数据结构,包含通信目的地址、端口号、网络传输层协议、进程所在的网络地址等。在该模型中,Socket用于实现客户和服务器之间的通信。服务器将对文件进行操作的列表发给客户机,客户将选择传给服务器,服务器处理后将结果返回给客户
(2)Shared Memory:共享内存,一种高级通信机制,通过共享内存可以实现进程间通信(IPC)。在该模型中,共享内存用于实现服务器和文件服务器之间的通信。服务器创建共享内存,并将数据(存在于用户上传的文件中)放到共享内存中,文件服务器从共享内存读取数据。
(3)Messaging:消息传递,也是一种高级通信机制,通过消息队列实现进程间通信(IPC)。在该模型中,消息传递用于实现服务器和文件服务器之间的通信。服务器将用户的选择传给文件服务器,文件服务器将处理完成的信号传给服务器。
(4)Threads[3]:线程,是比进程更小的实体,切换速度快,作为通信的实体。在该模型中,线程用于统计字符串中单词出现的次数。首先,将字符串分割成单词,然后在一个方法(method)中创建线程实现单词的统计。
3 主要的头文件
要实现进程间及网络间通信,基于Linux的系统必须包括以下头文件:
Client.c(客户端):
#include
#include
#include