现在的位置: 首页 > 综合 > 正文

Linux设备文件管理机制历史变革(上)

2013年10月02日 ⁄ 综合 ⁄ 共 1326字 ⁄ 字号 评论关闭

本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/9246951

Jack:hi,淫龙。为什么当插入一个优盘之后,Linux内核就会自动感知到该设备,而能正常使用?

我:这是在最新的Linux内核才可以,早期的Linux内核是不支持这个功能的。

Jack:你的意思是说,这种设备热插拔的功能并不是操作系统的核心功能,而是一种附加功能而已?

我:只有多任务管理、文件系统才是操作系统的核心功能,其余的都可有可无。如果想占有更为广阔的市场,提供的功能自然要多一点。也就是说,这种所谓的热插拔功能只是一种吸引user的手段,是不需要什么高深的理论支撑的。

Jack:那早期的Linux内核是如何管理设备文件的呢?

我:首先要介绍一个概念,根目录"/"和根文件系统(root filesystem)。

Jack:这两者有什么区别吗?

我:区别大了。根目录"/"是操作系统内核硬编码写死了的,"/"仅存在于内存中,是所有文件的父节点,其角色类似于0号进程(init进程的father)。而根文件系统(root filesystem)是实实在在存在的实体,是操作系统默认加载进去的块设备。其角色类似于init进程。

Jack:对于一个操作系统内核而言,它怎么知道根文件系统是建立在哪个设备之上的呢?它的设备文件又是怎么生成的呢?

我:这是一个鸡和蛋的问题。在成熟的Linux操作系统里,这一切都将由bootloader来完成。bootloader会读取配置文件,把配置文件里的参数提交给内核,内核根据参数把根文件系统所在的设备挂载到根目录("/")下。

Jack:这里有两个疑问。

          1、当bootloader运行的时候,操作系统内核还没有跑起来,他怎么能读文件呢?

          2、操作系统内核还没有跑起来,磁盘上连文件系统都没有,怎么会有配置文件呢?

我:这两个问题都问得很好。第一个问题是因为你惯性思维,认为操作系统的功能是多任务管理+文件系统。但是反过来,并不成立。bootloader虽然不是操作系统内核,但是,它具备读取文件的功能,只是功能比起操作系统内核会弱一些。第二个问题就更不是问题了。它的磁盘设备可以通过别的操作系统来进行格式化,创建文件。

Jack:我日。那别的操作系统的文件系统是怎么格式化的呢?

我:这是鸡和蛋的问题。我也问一个问题,地球上第一个可执行文件是怎么编译出来的呢?

Jack:额。我操。不会是借用了火星的操作系统编译出来的吧?

我:这个问题纠结起来没有意义。聊些别的吧。

Jack:好吧。在不成熟的Linux操作系统里,这个工作是怎么完成的呢?

我:在不成熟的Linux操作系统(比如0.11)里,这个工作是源代码编写者手工完成的。就是说,所有的设备文件,根文件系统都是手工建立的(一个命令一个命令地敲出来的)。

Jack:也就是说,这一切,其实都不是操作系统的核心功能,只是在成熟的操作系统里,自动化更完整一些而已?

我:是的。操作系统核心的功能只是多任务管理和文件系统。

Jack:那么,Linux的设备文件管理自动化是怎么实现的呢?

我:这是一个复杂的话题,我们下次私聊。

抱歉!评论已关闭.