½âÎö Linux ÖÐµÄ VFS Îļþϵͳ»úÖÆ
1. ÕªÒª
±¾ÎIJûÊö Linux ÖеÄÎļþϵͳ²¿·Ö£¬Ô´´úÂëÀ´×Ô»ùÓÚ IA32 µÄ 2.4.20 Äںˡ£×ÜÌåÉÏ˵ Linux
ϵÄÎļþϵͳÖ÷Òª¿É·ÖΪÈý´ó¿é£ºÒ»ÊÇÉϲãµÄÎļþϵͳµÄϵͳµ÷Ó㬶þÊÇÐéÄâÎļþϵͳ VFS(Virtual Filesystem
Switch)£¬ÈýÊǹÒÔØµ½ VFS Öеĸ÷ʵ¼ÊÎļþϵͳ£¬ÀýÈç ext2£¬jffs µÈ¡£±¾ÎIJàÖØÓÚͨ¹ý¾ßÌåµÄ´úÂë·ÖÎöÀ´½âÊÍ 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
ÖÐÒ²»áÉæ¼°µ½Îļþ¼¶µÄ²Ù×÷£¬±¾ÎIJ»²ûÊöÕâÖÖÇé¿ö¡£ÏÂÎÄÌᵽĿ¼Ê÷»òĿ¼£¬Èç¹û²»Ìرð˵Ã÷£¬¾ùÖ¸ VFS µÄĿ¼Ê÷»òĿ¼¡£Í¼ 1
ÊÇÒ»ÖÖ¿ÉÄܵÄĿ¼Ê÷ÔÚÄÚ´æÖеÄÓ°Ïñ£º
ͼ 1£ºVFS Ŀ¼Ê÷½á¹¹
3. ÎļþϵͳµÄ×¢²á
ÕâÀïµÄÎļþϵͳÊÇÖ¸¿ÉÄܻᱻ¹ÒÔØµ½Ä¿Â¼Ê÷Öеĸ÷¸öʵ¼ÊÎļþϵͳ£¬Ëùνʵ¼ÊÎļþϵͳ£¬¼´ÊÇÖ¸VFS
ÖеÄʵ¼Ê²Ù×÷×îÖÕҪͨ¹ýËüÃÇÀ´Íê³É¶øÒÑ£¬²¢²»Òâζ×ÅËüÃÇÒ»¶¨Òª´æÔÚÓÚijÖÖÌØ¶¨µÄ´æ´¢É豸ÉÏ¡£±ÈÈçÔÚ±ÊÕßµÄ 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
Ïà¹ØÎĵµ£º
ÀýÒ»£º·¢ËÍSignaling Packet£º
Signaling CommandÊÇ2¸öBluetoothʵÌåÖ®¼äµÄL2CAP²ãÃüÁî´«Êä¡£ËùÒÔµÃSignaling CommandʹÓÃCID 0x0001.
¶à¸öCommand¿ÉÒÔÔÚÒ»¸öC-frame£¨control frame£©Öз¢ËÍ¡£
Èç¹ûÒªÖ±½Ó·¢ËÍSignaling Command.ÐèÒª½¨Á¢SOCK_RAWÀàÐ͵ÄL2CAPÁ¬½ÓSocket¡£ÕâÑù²ÅÓлú»á×Ô¼ºÌî³äCommand Code£¬Identi ......
#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 ......
linux¶àÏß³ÌÉè¼Æ
¡¡¡¡1 ÒýÑÔ
¡¡¡¡Ị̈߳¨thread£©¼¼ÊõÔçÔÚ60Äê´ú¾Í±»Ìá³ö£¬µ«ÕæÕýÓ¦ÓöàÏ̵߳½²Ù×÷ϵͳÖÐÈ¥£¬ÊÇÔÚ80Äê´úÖÐÆÚ£¬solarisÊÇÕâ·½ÃæµÄٮٮÕß¡£´«Í³µÄUnixÒ²Ö§³ÖÏ̵߳ĸÅÄµ«ÊÇÔÚÒ»¸ö½ø³Ì£¨process£©ÖÐÖ»ÔÊÐíÓÐÒ»¸öỊ̈߳¬ÕâÑù¶àÏ߳̾ÍÒâζ×Å¶à½ø³Ì¡£ÏÖÔÚ£¬¶àÏ̼߳¼ÊõÒѾ±»Ðí¶à²Ù×÷ϵͳËùÖ§³Ö£¬°üÀ¨Windows/NT£ ......
¹ØÓÚepollʹÓ÷½·¨£º
²ÎÕÕ£º http://linux.die.net/man/4/epoll
ʵÀý´úÂ룺£¨À´×ÔÍøÉÏijÂÛ̳£©
#include <pthread.h>
#include <stdio.h>
#include <sys/timeb.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/epoll.h> ......