易截截图软件、单文件、免安装、纯绿色、仅160KB

解析 Linux 中的 VFS 文件系统机制

1. 摘要
本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核。总体上说 Linux
下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem
Switch),三是挂载到 VFS 中的各实际文件系统,例如 ext2,jffs 等。本文侧重于通过具体的代码分析来解释 Linux 内核中
VFS 的内在机制,在这过程中会涉及到上层文件系统调用和下层实际文件系统的如何挂载。文章试图从一个比较高的角度来解释 Linux 下的 VFS
文件系统机制,所以在叙述中更侧重于整个模块的主脉络,而不拘泥于细节,同时配有若干张插图,以帮助读者理解。
相对来说,VFS
部分的代码比较繁琐复杂,希望读者在阅读完本文之后,能对 Linux 下的 VFS
整体运作机制有个清楚的理解。建议读者在阅读本文前,先尝试着自己阅读一下文件系统的源代码,以便建立起 Linux
下文件系统最基本的概念,比如至少应熟悉 super block, dentry, inode,vfsmount
等数据结构所表示的意义,这样再来阅读本文以便加深理解。
2. VFS 概述
VFS 是一种软件机制,也许称它为 Linux
的文件系统管理者更确切点,与它相关的数据结构只存在于物理内存当中。所以在每次系统初始化期间,Linux 都首先要在内存当中构造一棵 VFS
的目录树(在 Linux 的源代码里称之为 namespace),实际上便是在内存中建立相应的数据结构。VFS 目录树在 Linux
的文件系统模块中是个很重要的概念,希望读者不要将其与实际文件系统目录树混淆,在笔者看来,VFS
中的各目录其主要用途是用来提供实际文件系统的挂载点,当然在 VFS
中也会涉及到文件级的操作,本文不阐述这种情况。下文提到目录树或目录,如果不特别说明,均指 VFS 的目录树或目录。图 1
是一种可能的目录树在内存中的影像:
图 1:VFS 目录树结构
3. 文件系统的注册
这里的文件系统是指可能会被挂载到目录树中的各个实际文件系统,所谓实际文件系统,即是指VFS
中的实际操作最终要通过它们来完成而已,并不意味着它们一定要存在于某种特定的存储设备上。比如在笔者的 Linux 机器下就注册有
"rootfs"、"proc"、"ext2"、"sockfs" 等十几种文件系统。
3.1 数据结构
在 Linux 源代码中,每种实际的文件系统用以下的数据结构表示:
struct file_system_type {
const char *name;
int fs_flags;
struct super_block *(*read_super) (struct super_bloc


相关文档:

实战Linux Bluetooth编程(三) HCI层编程

1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI)  就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......

Linux时钟基本概念

1、系统时钟(System Clock)与实时时钟(Real Time Clock)
实时时钟指的是硬件时钟,而系统时钟指的是软件时钟,存在于Linux系统之中。当系统启动时,Linux会从硬件读取时间做为系统时间,之后便一直采用系统时间。Linux命令date可以用来设置系统时钟,而hwclock或者clock则用来设置实时时钟,即硬件时钟。
2、时钟频率
单 ......

linux C 读取目录文件并统计文件数

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <errno.h>
#include <string.h>
#define MAX 1024
int get_file_count(char *root)
{
 DIR *dir;
 struct dirent * ptr;
 int total = 0;
 char path[MAX];
 dir = opendir(root ......

SUSE Linux 维护笔记一

SUSE Linux 维护笔记 一
1. Linux时间更新设置
时区设定:
#主要文件
/etc/sysconfig/clock
#用北京时间的正确内容应该是
TIMEZONE="Asia/Beijing"
DEFAULT_TIMEZONE="Asia/Beijing"
#同时确保 /etc/localtime文件是/usr/share/zoneinfo/Asia/Beijing的拷贝
保持更新:
在/etc/crontab中加入一 ......

windows使用Xmanager远程桌面控制linux系统


虽然我们习惯于linux下命令行操作,但是安装某些软件必须是基于GUI下面的,这个时候总不能跑到机房去安装吧,但我们可以使用Xmanager软件实现对linux进行远程控制.
 
第一步,我们在
LINUX
系统下,修改
/etc/X11/xdm/Xaccess
文件,找到下面语句:
# *# any host can get a login window
去掉最前面的
#
号 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号