linux 根目录的来由


http://blog.chinaunix.net/uid-20554258-id-2815914.html

用linux,有这样一个疑问:要访问一个文件就得先访问一个目录,才能根据文件名从目录中找到该文件的目录项,进而找到i节点;可是目录本身也是文件,它本身的目录项又在另一个目录项中,这样一来不是成了 “先有鸡还是先有蛋”的问题,或者是递归了吗?这个圈子的出口在哪里呢? 
答案是:系统中有这样一个目录,能够在固定的位置找到。这就是初始根节点

现在就来看看内核中是怎样实现的。

 我们知道,打开文件时,需要调用path_lookup()函数查找文件名对应的目标节点 。这个函数首先会根据文件名的首字母是否为'/',设置查找的起点。若为'/'则从currend->fs->root目录开始。这里currend->fs->root是当前进程的根目录。那么,可以猜想,系统第一个进程的根目录就应该是“先有鸡还是先有蛋”问题出口了。

 查看代码 

在文件Namespace.c中,有系统启动初始化时设置进程根目录的代码

//>>start_kernel>vfs_caches_init>mnt_init>init_mount_tree]

mnt = do_kern_mount("rootfs", 0, "rootfs", NULL);//这里挂载rootfs文件系统
.....
namespace->root = mnt; 
..... 
set_fs_pwd(current->fs, namespace->root, namespace->root->mnt_root); 
set_fs_root(current->fs, namespace->root, namespace->root->mnt_root); 

系统第一个进程是所有进程的祖先,由它fork出来的进程将继承它的根目录


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值