Articles of 虚拟

如何确定纯系统文件系统?

我正在写notifyfs(现在只用于linux),它是: 一个fsevent通知程序,它应该与保险丝和networking文件系统一起工作,如fuse.sshfs,cifs和nfs。 一个客户可以用来build立他们的意见的项目caching 如果/ proc / self / mountinfo中报告的是与系统相关的文件系统或“真实的”文件系统,则肯定有一种方式可以通知informfs来确定文件系统。 例如cpuset,cgroup,devtmpfs和sysfs就是我所说的系统文件系统,而ext2,ext3和tmpfs,vfat和nfs,cifs是“真正的”文件系统。 系统文件系统与真实文件系统的区别在于真正的文件系统是通过inotify进行监视的,而系统的文件系统则不是。 将一个inotify手表放在/ proc文件中,你就会发现这是行不通的。 当查看/ proc / filesystems时,唯一的额外信息是“nodev”,它表示mountsource是否是一个blockdevice。 当它是一个块设备,那么它不是一个系统文件系统。 但是,当它不是一个块设备(并指定nodev)时,并不总是一个系统文件系统,例如networking文件系统cifs和nfs,或者tmpfs和ramfs。 有没有办法确定一个“nodev”文件系统的行为像一个真正的文件系统,例如通过inotify可见? 提前致谢, 燕姿

在Linux中创build一个虚拟文件

我正在使用一些我无法更改的现有软件,它从一堆configuration文件中加载它的configuration数据,所有的configuration文件都遵循相同的命名模式,比如file_param1.conf,file_param2.conf,file_param3.conf等。文件内容之间的区别只是param1 vs param2 vs param3,所以一个典型的configuration文件将如下所示 foo=bar x=param1 要么 foo=bar x=param2 有没有什么地方在Linux上创build一个虚拟FS的例子,让我访问file_param1.confdynamic生成与适当的参数variables的文件? 我知道关于scriptfs,但不知道使用它的任何教程。

虚拟内存分配没有物理内存分配

我正在开发一个Linux内核项目,我需要find一种分配虚拟内存而不分配物理内存的方法。 例如,如果我使用这个: char* buffer = my_virtual_mem_malloc(sizeof(char) * 512); my_virtual_mem_malloc是由我的内核模块实现的一个新的SYSCALL。 所有写在这个缓冲区上的数据通过套接字(不在物理内存上)存储在文件或其他服务器上。 所以为了完成这个工作,我需要请求虚拟内存并访问vm_area_struct结构来重新定义vm_ops结构。 你有什么想法吗? 谢谢

设备文件是由Linux中的特定文件系统还是虚拟文件系统实现的?

在Tanenbaum的“现代操作系统”一书中,对于Linux文件系统,有两个草图: 在这两个草图中,“虚拟文件系统”下列出了特定文件系统(例如,ext4types)(第一个草图中的“文件系统”和第二个草图中的“文件系统1”)。 不同之处在于 在第一个草图中,“文件系统”被列在与“terminal”和“套接字”相同的级别,并且不包括后两者, 在第二个草图中,“文件系统1”包括“常规文件”,“块特殊文件”,“文件特殊文件”和“networking套接字”。 我的理解是这两个草图显示的是同样的东西,所以它们应该是一致的。 我的问题是 特定的文件系统(例如ext4)是否实现设备文件并使其像普通文件一样对待,还是“虚拟文件系统”的工作? 我怎么理解上面提到的“文件系统”和“networking套接字”,“块/字符特殊文件”之间关系的两个草图之间的区别?

计算在Linux上使用的%内存

Linux的noob问题: 如果我有500MB的RAM和500MB的交换空间,操作系统和进程是否可以使用1GB内存? 换句话说,程序可用的内存总量和操作系统是物理内存大小和交换大小的总和? 我试图找出哪些SNMP计数器来查询,但需要了解Linux如何使用虚拟内存先好一点。 谢谢

如何在重载虚拟方法声明中检测“虚拟”说明符?

假设你有这个Base类: class Base { public: virtual void foo(); }; 你可以在派生自Base的类中重写foo() : class Derived : public Base { public: virtual void foo(); }; 但是,如果您在Derived::foo()的声明中“忘记”“ virtual ”: class Derived : public Base { public: void foo(); }; 你得到完全相同的语义: Derived::foo()是虚拟的,虽然没有明确声明。 现在,假设你的编码标准规定在这种情况下应该明确提到“ virtual ”。 你知道一个简单的方法(在Linux + gcc环境中)来检测Derived::foo()的声明中缺less的' virtual '吗? 我不知道有任何gcc警告检测到这一点。

C ++:g ++编译器:与虚拟function的stdio的冲突?

我无法使用stdio和虚拟function(Windows Vista,Cygwin,GCC 4.8.2) #include <stdio.h> class A { public: // If I make g() as virtual, stdio doesn't print. virtual void g() {} }; int main() { A a; // Or I could remove this object to make stdio print. printf("testing\n"); } 有了“Borgleader”的提示,我发现它与“-O2”选项一起使用时可以工作。 使用/不使用“-O2”时,链接似乎有所不同。 /home/user> g++ test.cc /home/user> ./a.exe /home/user> ldd ./a.exe ntdll.dll => /cygdrive/c/Windows/system32/ntdll.dll […]

虚拟WiFi / 802.11接口类似Linux上的VETH

我正在寻找一种方法来在单个设备上设置纯粹的虚拟(即没有实际信号)802.11networking – 为了testing目的,可以给我类似的function: 创build多个接入点接口(比如ap0 , ap1 ..) 设置其基本参数( ssid …) 在每一个上设置DHCP服务器, 用shell命令pipe理信号强度( iw ?) 允许密码pipe理(更改密码,encryption方法等) 创build单一的接入点客户端接口( wifi0 ),这将 看具体的接入点(或全部) 允许我通过NetworkManager等工具连接到特定的界面 实际上,这是非常基本的,看看驱动程序如何与ip link给了我很多希望。 用iw工具可以吗? 如果是的话 – 我该怎么做? 如果没有,如果我需要实施这个,我通常会如何处理这个问题? 通过创build一个假的wpa_supplicant驱动程序来提供数据? 我很感激在这个问题上的任何提示和指针。

如何在Linux中创build一个虚拟设备?

我的问题几乎是相同的 – 如何创build一个虚拟文件? 除非我想在Linux中做。 我想我需要做的是创build一个虚拟设备,并指出应用程序日志logging到该设备。 如果可能的话,我想用python或者ruby或者其他解释来编写这个设备。

4GB / 4GB内核虚拟机分割

朋友们, 我看到了着名Linux内核爱好者Ingo Molnar的文章 ,他谈到了4GB / 4GB拆分。 在这篇文章中,他说 在4G / 4G补丁的情况下,内核可以采用4G / 4G模式进行编译,在这种情况下,内核拥有一个完全独立的4GB虚拟机,并且为用户空间提供了单独的完整(每进程)4GB虚拟机。 我的问题从这里开始: 我的假设是,像Linux一样,在一个单一内核中,进程的内核和用户部分共享相同的PROCESS ADDRESS SPACE。 因此,对于没有4G / 4G补丁的Linux内核,我们分别为用户虚拟空间和内核虚拟空间分割3/1。 实际上,内核的1GB虚拟空间被映射到每个进程的虚拟地址空间。 简单来说,PROCESS ADDRESS SPACE是4GB,其中1GB分配给内核。 这是真的吗? 通过这个问题的文章 – 如果我在1)中所说的假设是正确的 – 是否意味着内核地址空间不再被映射到进程地址空间,并且我们有一个不同的用于内核的虚拟地址空间,并且没有共享地址空间? 那就是PROCESS ADDRESS SPACE是4GB,KERNEL ADDRESS SPACE是另一个4GB; 而不是PROCESS ADDRESS SPACE已经扩大到8GB,而其中4GB是内核共享的。 我知道我听起来有点愚蠢:)。