网络文件系统(Network File System, NFS)是一种分布式文件系统协议,最初由Sun Microsystems公司开发,并于1984年发布。其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件。NFS和其他许多协议一样,是基于开放网络运算远程过程调用(Open Network Computing Remote Procedure Call, ONC RPC)协议之上的。它是一个开放、标准的RFC(Request For Comments, 请求意见稿)协议,任何人或组织都可以依据标准实现它。
  
  NFS版本包括:(1). NFSv1: 只在SUN公司内部用作实验目的;(2). NFSv2: RFC 1094,1989年3月发布;(3). NFSv3: RFC 1813,1995年6月发布;(4). NFSv4: RFC 3010,2000年12月发布; (5). NFSv4.1: RFC 5661,2010年1月; (6). NFSv4.2: RFC 7862,2016年11月发布。
  
  NFS通常用在Unix操作系统上和其他类Unix的操作系统。同时在其他一些操作系统也提供了NFS实现,例如Mac OS、OpenVMS、Microsoft Windows。
  
  NFS的启动需要透过所谓的远程过程调用(RPC),也就是说,我们并不是只要启动NFS就好了,还需要启动RPC这个服务才行。
  
  NFS最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案(share files)。所以,你也可以简单地将它看做是一个文件服务器(file server)。这个NFS服务器可以让你的PC来将网络远程的NFS服务器分享的目录,挂载到本地端的机器当中,在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区槽一样(partition),使用上相当的便利。如下图所示:当我们的NFS服务器设定好了分享出来的/home/sharefile这个目录后,其它的NFS客户端就可以将这个目录挂载到自己系统上面的某个挂载点(挂载点可以自定义),例如下图所示中的NFS client1与NFS client2挂载的目录就不相同。我只要在NFS client1系统中进入/home/data/sharefile内,就可以看到NFS服务器系统内的/home/sharefile目录下的所有数据了(当然,权限要足够)。这个/home/data/sharefile就好像NFS client1自己机器里面的一个partition。只要权限对了,那么你就可以使用cp, cd, mv, rm…等等磁盘或档案相关的指令。
  
  因为NFS支持的功能相当的多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口才没有固定住,而是随机取用一些未被使用的小于1024的埠口来作为传输之用。但如此一来又造成客户端想要连上服务器时的困扰,因为客户端得要知道服务器端的相关埠口才能够联机。此时,我们就得需要RPC的服务。RPC最主要的功能就是在指定每个NFS功能所对应的port number,并且回报给客户端,让客户端可以连接到正确的埠口上去。那RPC又是如何知道每个NFS的埠口呢?这是因为当服务器在启动NFS时会随机取用数个埠口,并主动的向RPC注册,因此RPC可以知道每个埠口对应的NFS功能,然后RPC又是固定使用port 111来监听客户端的需求并回报客户端正确的埠口。要启动NFS之前,RPC就要先启动,否则NFS会无法向RPC注册。另外,RPC若重新启动时,原本注册的数据会不见,因此RPC重新启动后,它管理的所有服务都需要重新启动来重新向RPC注册。
  
  NFS服务器在启动的时候就得要向RPC注册,所以NFS服务器也被称为RPC server之一。 那么NFS服务器主要的任务是进行文件系统的分享,文件系统的分享则与权限有关。 所以NFS服务器启动时至少需要两个daemons ,一个管理客户端是否能够登入的问题,一个管理客户端能够取得的权限。
  
  NFS本身的服务并没有进行身份登入的识别,服务器端会以客户端的使用者UID与GID等身份来尝试读取服务器端的文件系统。
  
  一般来说,NFS的服务仅会对内部网域开放,不会对因特网开放的。然而,如果你有特殊需求的话,那么也可能会跨不同网域。
  
  NFS好处:(1). 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用;(2). 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用;(3). 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用,这可以减少整个网络上可移动介质设备的数量。
  
  NFS组成:NFS体系至少有两个主要部分,一台NFS服务器和若干台客户机,如下图所示,客户机通过TCP/IP网络远程访问存放在NFS服务器上的数据。在NFS服务器正式启用前,需要根据实际环境和需求,配置一些NFS参数。

uint8_t MemoryManager::getByte(uint32_t addr) {
if (!this->isAddrExist(addr)) {
dbgprintf("Byte read to invalid addr 0x%x!\n", addr);
return false;
}
uint32_t i = this->www.gaozhuoyiqi.com/ getFirstEntryId(addr);
uint32_t j = this->getSecondEntryId(addr);
uint32_t k = this->getPageOffset(addr);
return this->memory[www.shengyunyule.cn][j][k];
}
关于MemoryManager实现的更多信息,参见src/MemoryManager.cpp。

3.2 可执行文件的装载、初始化
本模拟器的可执行文件加载部分采用了GitHub上的开源库ELFIO(https://github.com/serge1/ELFIO),由于这个库只有头文件,所以导入工程相当容易,相关头文件在include/文件夹下。

使用这个库进行ELF文件加载相当容易

// Read ELF file
ELFIO::elfio reader;
if (!reader.load(elfFile)) {
fprintf(stderr, "Fail to load ELF file %s!\n", elfFile);
return -1;
}
加载ELF文件进内存的代码如下,直接按照ELF文件头的信息将每个数据段拷贝到指定的内存位置即可,唯一需要注意的是文件内数据长度可能小于指定的内存长度,需要用0填充。值得一提的是本模拟器在设计时并未考虑支持32位以上的内存,因为内存占用如此之大的用户程序是比较罕见的,在我们用的测试程序中不会出现这种情况。

void loadElfToMemory(ELFIO::elfio *reader, MemoryManager *memory) {
ELFIO::Elf_Half seg_num = reader-www.wanmeiyuele.cn>segments.size();
for (int i = 0; i < seg_num; ++i) {
const ELFIO::segment *pseg = reader->segments[i];

uint64_t fullmemsz = pseg->get_memory_size();
uint64_t fulladdr = pseg->get_virtual_address();
// Our 32bit simulator cannot handle this
if (fulladdr + fullmemsz > 0xFFFFFFFF) {
dbgprintf(
"ELF address space larger than 32bit! Seg %d has max addr of 0x%lx\n",
i, fulladdr + fullmemsz);
exit(-1);
}

uint32_t filesz = pseg->get_file_size(www.yunshengpt.com);
uint32_t memsz = pseg->get_memory_size(www.hengtongyoule.com);
uint32_t addr = (uint32_t)pseg->get_virtual_address();

for (uint32_t p = addr; p <www.huarenyl.cn addr + memsz; ++p) {
if (!memory->isPageExist(p)) {
memory->addPage(p);
}

if (p < addr + filesz) {
memory->setByte(p, pseg->get_data()[p - addr]);
} else {
memory->setByte(p, 0);
  
  NFS应用:NFS有很多实际应用,下面是比较常见的一些:(1). 多个机器共享一台CDROM或者其它设备,这对于在多台机器中安装软件来说更加便宜跟方便;(2). 在大型网络中,配置一台中心NFS服务器用来防止所有用户的home目录可能会带来便利。这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录;(3). 不同客户端可以NFS上观看影视文件,节省本地空间;(4). 在客户端完成的工作数据,可以备份保存到NFS服务器上用户自己的路径下。NFS是运行在应用层的协议,随着NFS多年的发展和改进,NFS既可以用于局域网也可以用于广域网,且与操作系统和硬件无关,可以在不同的计算机或系统上运行。

网络文件系统(NFS)简介的更多相关文章

  1. Linux下网络文件系统NFS服务搭建易错点总结

    一.环境准备: 1 [root@czh ~]# cat /etc/redhat-release 2 CentOS release 6.7 (Final) 3 [root@czh ~]# uname - ...

  2. 网络文件系统nfs文件系统使用(很全面)

    一.NFS简介 1.NFS就是Network FileSystem的缩写,它的最大功能就是可以通过网络让不同的机器,不同的操作系统彼此共享文件(sharefiles)——可以通过NFS挂载远程主机的目 ...

  3. 网络文件系统nfs文件系统使用(比较全面)

    一.NFS简介 1.NFS就是Network FileSystem的缩写,它的最大功能就是可以通过网络让不同的机器,不同的操作系统彼此共享文件(sharefiles)——可以通过NFS挂载远程主机的目 ...

  4. 网络文件系统NFS

    NFS介绍 什么是NFS? NFS是Network File System的缩写,即网络文件系统.它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端(一般为应用 ...

  5. Centos 7网络文件系统nfs服务的安装与配置

    实验环境>>>>>>>>> nfs服务端:(nfs-server)192.168.100.2 nfs客户端:(nfs-client)192.168 ...

  6. Linux网络文件系统NFS详解

    什么是文件系统,NFS文件系统又是什么? 简单的说,文件系统就是通过软件对磁盘上的数据进行组织和管理的一种机制,对其的一种封装或透视. 你女朋友拍了美美的暧昧照片,放一个文件夹里发送给了A服务器,当你 ...

  7. 网络文件系统-NFS

    1. 什么是NFS NFS是 Network File System 的缩写,即网络文件系统.一种使用于分散式文件系统的协议,有Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的 ...

  8. NFS的安装以及windows/linux挂载linux网络文件系统NFS

    1.创建linux的NFS服务端安装centos6.4,关闭防火墙/etc/init.d/iptables status yum install nfs-utils rpcbind [root@lin ...

  9. 网络文件系统nfs在ubuntu16.04的安装

    1.搜索nfs-sudo apt-cache search nfs- 2.安装sudo apt-get install nfs-kernel-server 3.配置:/etc/exports /hom ...

随机推荐

  1. Vicious Keyboard CodeForces - 801A (暴力+模拟)

    题目链接 题意: 给定一个字符串,最多更改一个字符,问最多可以有多少个“VK”子串? 思路: 由于数据量很小,不妨尝试暴力写.首先算出不更改任何字符的情况下有多个VK字串,然后尝试每一次更改一个位置的 ...

  2. MyBatis模糊查询不报错但查不出数据的一种解决方案

    今天在用MyBatis写一个模糊查询的时候,程序没有报错,但查不出来数据,随即做了一个测试,部分代码如下: @Test public void findByNameTest() throws IOEx ...

  3. Redis使用和部分源码剖析以及Django缓存和redis的关系

    0.特点: a.持久化 b.单进程.单线程 c.5大数据类型    d.用于操作内存的软件.    e.虽然是缓存数据库但是可以做持久化的工作 MySQL是一个软件,帮助开发者对一台机器的硬盘进行操作 ...

  4. Docker存储驱动Device Mapper,Overlay,AUFS

    Docker存储驱动之Device Mapper简介 - BookShu - 博客园https://www.cnblogs.com/styshoo/p/6528762.html Docker存储驱动之 ...

  5. CentOS的el5, el6, el7代表什么

    https://www.cnblogs.com/EasonJim/p/9051851.html el: enterprise linux?

  6. Use the Microsoft Symbol for VS and Windbg

    快捷方式mklink的远程符号由于所有者权限问题,链接到本地可能造成不能使用, 或每次都需要重新下载, 1.环境变量中没有设置_NT_SYMBOL_PATH的值 2.windbg快捷方式中也没有设置- ...

  7. ShowDoc上手

    ShowDoc是什么 每当接手一个他人开发好的模块或者项目,看着那些没有写注释的代码,我们都无比抓狂.文档呢?!文档呢?!Show me the doc !! 程序员都很希望别人能写技术文档,而自己却 ...

  8. 同一个机器 安装多个版本Chrome浏览器的方法

    1. Chrome 现在安装直接没有任何提示 就直接安装了 而且自动式 高版本覆盖低版本安装 不给你任何选择版本的机会. 2. 但是chrome 的安装是基于用户的 所以 同一个机器 使用不同的用户 ...

  9. 查找文献的BibTex

    BibTex可以通过Google Scholar来查找. 注意,默认情况下,Google scholar 关闭了显示BibTex链接. 打开Google Scholar 选择右上角菜单按钮 选择set ...

  10. UTF-8编码与GBK编码下的字符长度

    源码: package lsh.java.charset; import java.nio.charset.Charset; public class LengthOfUTF_8 { public s ...