linux-在我的例子里,Linux的kernel与user space如何进行通信才好?

问题描述

在我的例子里,Linux的kernel与user space如何进行通信才好?

我的例子大概如下:

我想做一个简单的分布式文件系统。在client端,当某个用户态应用程序open()一个远程文件时,VFS会去通知另一个专用的用户态应用程序,然后这个专用的用户态应用程序会去server端把远程文件缓存到本地,然后通知VFS这个缓存文件的路径。然后VFS会去打开这个缓存文件,再把文件的描述符返回给最开始的用户态应用程序。

在这里,我要进行kernel和user space的通信。一方面,在kernel里的VFS要告诉专用的用户态应用程序,我要打开的远程文件的路径是什么;另一方面,专用的用户态应用程序要告诉VFS,缓存下来的文件的路径是什么。

我目前是使用netlink socket来实现这个功能。这是没有问题的。但是由于我对Linux kernel并不熟悉,所以我不知道是不是还有其它更加有效的方式来解决这个问题。

比如,我之前在想,能不能用mmap()的方式实现kernel和user space之间的通信。但是我在了解了一下之后发现,在我的这个例子里,好像我必须要写一个驱动程序,才能提供一个设备文件作为mmap()的后盾。这在用法上就有点像命名管道或者命名socket(或者叫Unix domain socket?),感觉没什么意思,而且似乎也不太容易整合进VFS去。

然后,我又在想,能不能让VFS和这个专用的用户态应用程序somehow约定一个user space的缓冲区地址,然后VFS直接copy_to_user()(专用的用户态应用程序就直接写这个缓冲区)。但是我又不知道要怎样约定这个缓冲区的地址才好,以及怎么通知对方说我写了新的数据进去。

所以在这里求教。有没有什么好的办法在我的这个例子里实现kernel与user space的通信?以及我对mmap()、命名管道、命名socket或者copy_to_user()的理解有没有问题?感谢。

解决方案

改写VFS驱动,只要是涉及到内核,都是需要写内核模块的,驱动也是内核模块的一种,理解上是没有错的,只是这样用的话,对你来说就转折了点

解决方案二:

VFS驱动?不太明白。能请你稍微描述一下要怎么做么?

解决方案三:

搞不懂,为什么这么做?防止攻击?

时间: 2024-08-03 09:59:06

linux-在我的例子里,Linux的kernel与user space如何进行通信才好?的相关文章

Linux中/etc/fstab配置项里最后两个数字是什么意思?

Linux中/etc/fstab配置项里最后两个数字是什么意思? 我们先来看一下这个/etc/fstab的文件内容: [root@localhost&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;software]# vi /etc/fstab     #  # /etc/fstab  # Created by anaconda on Sat Jun  8 16:22:16 2013  #  # Accessibl

vmware-VMware里Linux系统,键盘输入和终端输出不一样,度娘解释菜鸟看不懂,怎么解决?

问题描述 VMware里Linux系统,键盘输入和终端输出不一样,度娘解释菜鸟看不懂,怎么解决? 键盘输入方向键,终端输出ABCD,键盘输入e终端输出Tab 摁Fn+F8不管用 解决方案 VMware 里面安装个VmTools 解决方案二: 你装的时候是选择的美式键盘么?? 解决方案三: 进入 Vi 输入方向键变成 ABCD 解决方法 参考:http://blog.csdn.net/u011937547/article/details/43852913 解决方案四: 你的linux选择是美式键盘

那位知道远程如何备份linux下的opends2.2里的数据,用什么方法?

问题描述 那位知道远程如何备份linux下的opends2.2里的数据,用什么方法? 那位知道远程如何备份linux下的opends2.2里的数据,用什么方法?

《Linux 工作站安全检查清单》——来自 Linux 基金会内部

<Linux 工作站安全检查清单>--来自 Linux 基金会内部 目标受众 这是一套 Linux 基金会为其系统管理员提供的推荐规范. 这个文档用于帮助那些使用 Linux 工作站来访问和管理项目的 IT 设施的系统管理员团队. 如果你的系统管理员是远程员工,你也许可以使用这套指导方针确保系统管理员的系统可以通过核心安全需求,降低你的IT 平台成为攻击目标的风险. 即使你的系统管理员不是远程员工,很多人也会在工作环境中通过便携笔记本完成工作,或者在家中设置系统以便在业余时间或紧急时刻访问工作

《树莓派学习指南(基于Linux)》——1.3 Linux

1.3 Linux 树莓派学习指南(基于Linux)作为一本初学者指南,我们会简要介绍Linux的由来.特点以及一些初学者常犯的错误.如果你对这部分内容有所了解或不太感兴趣,不妨跳过本节,继续下一小节"下载Raspbian". Linux是什么?解释Linux是什么这个问题即便对专家来说也会感到困扰.原因在于Linux这一概念在不同语境下代表的含义相差很多.当谈到操作系统时,我们可以很容易理解Microsoft Windows和Apple Mac OS X是完全不同的东西.当我们说&q

详解Linux Socket编程(不限Linux)_Linux

我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的.本文的主要内容如下: 1.网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和

Linux系统管理技巧大荟萃_unix linux

作为桌面操作系统,Linux的人机界面可真是不敢恭维,但是,作为网络操作系统,其易用性(对于NOS而言)和高性能恐怕是很难有能出其右的.当然,这并不是说它的操作很简单,而是说若能掌握一些技巧,无论是系统设置还是网络管理都能变得轻松自如.随心所欲. ●禁止终端模式下的显示器自动节能 大部分PC上安装Linux后,在终端模式下也能实现自动关闭显示器的功能,但是假如我们要在显示器上即时显示一些信息,如:网络流量.包分析等,这个功能就变得非常讨厌了.采用修改CMOS和系统属性都无法解决,解决的办法是用s

Linux不完全手册(三)_unix linux

linux系统目录结构介绍篇 linux系统有其特定的文件系统的目录组织结构,了解这些目录结构是学习基本知识的基本.下面我以redhatlinux为蓝本介绍一下这些目录结构.目录名 简介 /bin 这个目录是系统中最主要的可执行文件的存放地,这些可执行文件大都是linux系统里最常用的命令了,一般用户和超级用户都会经常使用其下的命令,如:ls.su.mount等. /etc 是系统内部存放配置文件的最主要场所,一般和系统关系十分密切的配置文件都放在该目录下,也就是说对系统的配置主要就是对该目录下

详解Linux多线程编程(不限Linux)_Linux

前言 线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步.互斥,这些东西将在本文中介绍.我在某QQ群里见到这样一道面试题: 是否熟悉POSIX多线程编程技术?如熟悉,编写程序完成如下功能: 1)有一int型全局变量g_Flag初始值为0: 2) 在主线称中起动线程1,打印"this is thread1",并将g_Flag设置为1 3) 在主线称中启动线程2,打印"this is thread2"