首页 > 代码库 > Linux系统结构以及文件系统
Linux系统结构以及文件系统
Linux系统结构
Linux系统一般情况下是由3个主要的部分组成的:kernel (内核)、命令解释器(Shell或者其他的操作环境)、application(应用程序或者称为实用工具)
1.Linux系统的kernel
内核是Linux系统的心脏,是运行程序和磁盘管理以及打印机等硬件设备的核心程序。操作环境向用户提供一个操作界面,它从用户的那里接受命令,并且把命令发送给内核去执行。由于内核提供的都是操作系统最基本的功能,如果内核出了问题,整个计算机也可能就会崩溃。
Linux的内核采用的是模块化结构,其中模块包括:存储管理、CPU和进程管理、文件系统的管理、设备和驱动管理、网络通信以及系统引导、系统调用等等。
当一个Linux系统安装完毕之后,一个通用的内核也就随之被安转到计算机当中。这个通用的内核能满足绝大部分用户的需求,但是也正是因为这用通用性或者说是普遍适用性,使得很多的具体某型号的计算机来说并不需要这样庞大的内核(比如一些特殊型号计算机的硬件驱动程序)。对于这部分用户来说,Linux系统允许用户根据自己计算机的实际配置来定制Linux内核,从而有效的简化了内核,释放了更多的用户空间,提高了系统的启动速度。
在我们Linux界的大牛Linus Torvalds以及他小组的不懈努力之下,Linux内核的更新速度非常快。用户在安装Linux后可以去下载他们最新版本的Linux内核,进行升级编译之后就可以使用最新版内核的功能。由于内核定制和升级的成败直接关系到我们整个计算机系统能否继续运行,因此各位切记对此必须非常谨慎!
2.Linux Shell命令解释器
Shell是系统的用户界面,提供了用户与Linux内核之间交互操作的一种接口。操作环境在内核与用户之间提供操作界面,其中操作界面有这几中:Desktop(桌面版)、Windows Manager(窗口管理器)、Terminal(命令行shell)。它可以描述为一个解释器(这里大家可以把它理解为一个翻译官,把我们人类可以理解输入的指令转换成计算机可以识别的机器指令,然后再将指令发送到内核)。
Shell不仅是一个命令解释器而且它还是一种编程语言,它允许用户编写shell命令组成的程序,它集成了普通编程语言所具有的很多特点。例:它可以执行循环结构和分支控制结构等,用shell写的程序与其他应用程序编写的程序具有同样的效果。
这里为大家解释一下shell和Linux本身一样也具有很多的版本,目前主要有以下shell版本
Bourne shell
Bash
Korn shell
C shell
Z shell
TC shell
Linux文件系统
自己装过Windows操作系统的朋友们应该都知道,Windows98(包括win98)之前的版本使用的文件系统都是FAT格式。Windows 2000后才使用的是NTFS文件系统格式。可能没有装过旧版本系统的朋友们要问了这二者之间有什么区别我在这里给大家简要说明一下
FAT文件系统(file allocation table)
是一种由微软发明并拥有部分专利的文件系统,供MS-DOS使用,也是所有非NT核心的微软窗口使用的文件系统。 FAT文件系统考虑当时电脑性能有限,所以未被复杂化,因此几乎所有个人电脑的操作系统都支持。这特性使它成为理想的软盘和存储卡文件系统,也适合用作不同操作系统中的数据交流。现在,一般所讲的FAT专指FAT32。 但FAT有一个严重的缺点:当文件删除后写入新数据,FAT不会将文件整理成完整片段再写入,长期使用后会使文件数据变得逐渐分散,而减慢了读写速度。碎片整理是一种解决方法,但必须经常重组来保持FAT文件系统的效率。
缺点:⒈太浪费磁盘空间
⒉磁盘利用效率低
⒊文件存储受限制,
⒋不支持长文件名,只能支持8个字符。
⒌安全性较差
6.FAT32在WIN2000和XP系统中最大分区容量限制为2TB的容量
7.产生的磁盘碎片较多
NTFS文件系统(New Technology File System)
是 WindowsNT 环境的文件系统。新技术文件系统是Windows NT家族(如,Windows 2000、Windows XP、Windows Vista、Windows 7和 windows 8.1)等的限制级专用的文件系统(操作系统所在的盘符的文件系统必须格式化为NTFS的文件系统,4096簇环境下)。NTFS取代了老式的FAT文件系统。 NTFS对FAT和HPFS作了若干改进,例如,支持元数据,并且使用了高级数据结构,以便于改善性能、可靠性和磁盘空间利用率,并提供了若干附加扩展功能。 该文件系统的详细定义属于商业秘密 ,微软已经将其注册为知识产权产品。
优点:性能佳、安全性强、可压缩NTFS里所有文件、设定权限、配额、支持单个文件大于4GB等等。
缺点:1.兼容性不好,很多操作系统不能识别,数据交换不方便
2.会产生文件碎片(相对于fat与fat32文件系统产生的碎片较少)
3.读写频繁
Ext2文件系统
Linux的文件系统通常为Ext2(Linux second extended file system,Ext2fs)。随后又出现了升级版的 Ext3 和 Ext4文件系统 。
我们经常听说 Windows 需要磁盘碎片整理,Linux 则却不需要。二者之间的区别是什么呢?
原因是他们之间的数据访问方式不同。如下图:
假设一个文件的属性和权限信息是存放在 3 号的 inode 上,而文件的实际数据是存放在 1、4、6、11 这四个 block 中,那么当操作系统要访问该文件时,就能据此来排列磁盘的阅读顺序,可以扫描一次就将 4 个 block 内容读出来。这种访问方式称为索引式文件系统(indexed allocation)。而且 ext 在每两个文件之间都留有相当巨大的空闲空间。当文件被修改、体积增加时,它们通常有足够的空间来扩展。因此在一定程度上保证了 block 的访问范围不会跨度很大,减小了磁头的移动距离。
那 Windows 的文件系统是怎样的呢? 我们以 FAT 为例说明。
在往 FAT 文件系统中存入一个文件时,系统会尽量存放在靠近磁盘开始的地方。当你存入第二个文件时,它会紧挨着第一个文件。当进行频繁的删除修改后,block 就会分散的特别厉害。FAT 文件系统没有 inode 的存在,所以不能一下子将文件的所有 block 在一开始就读取出来。每个 block 号码都记录在前一个 block 当中,形成一个 block 链。当我们需要读取文件的时候,就必须一个一个地将 block 读出,例如上图的读出顺序为 1、6、3、12 。这就会导致磁头无法在磁盘转一圈就获得所有数据,有时候需要来回转好几圈才能读取到这个文件,导致文件读取性能极差。这就是 Windows 经常需要碎片整理的原因——使离散的数据汇合在一起 而 NTFS 文件系统虽然智能了一点,在文件周围分配了一些“缓冲”的空间,但经过一段时间的使用后, NTFS 文件系统还是会形成碎片。由于 ext 是索引式文件系统,所以基本上不太需要经常进行磁盘碎片整理。
ext2/ext3 文件系统
我们知道文件数据除了文件的实际内容外,通常还包括非常多的属性,例如 Linux 中的文件权限(rwx)和文件属性(拥有者、用户组、时间、大小等)。ext 文件系统将这两部分存放在不同的块,权限和属性存放在 inode 中,至于文件的实际数据则存放在 block 块中。另外还有一个超级块(super block)会记录整个文件系统的整体系统。每个 inode 和 block 都有自己的编号。 ext 文件系统在格式化的时候基本上是区分为多个块组(block group)的,每个块组都有独立的 inode/block/super block 系统。其整体展示图如下所示:
其中各个块的含义如下:
super block:记录此文件系统的整体系统,包括 inode 和 block 的总量、使用量、剩余量,以及文件系统类型等。
file system description:文件系统描述说明。描述每个 block group 的开始与结束的 block 号码。
block bitmap:块对照表。用来快速寻找可用的 block 块。
inode bitmap:inode对照表。用来快速寻找可用的 inode 块。
inode table:存放 inode 块的地方。它们是文件系统的关键。记录了文件的属性,一个文件占用一个 inode,同时包含多个指针,指向了属于该文件的各个 data block 块
data block:真正存放数据的地方。文件太大会占用多个 block 。
总结
本文主要讲了Linux系统结构以及Linux文件系统结构和Windows文件系统二者之间的差异。同时在文件系统中详细阐述了ext文件系统格式磁盘寻址。希望对大家学习iNode与block能理解透彻!
参考资料:
Jark‘s Blog
鸟哥的Linux私房菜.基础学习篇
马哥教育
本文出自 “夜袭朦空” 博客,请务必保留此出处http://firstshell.blog.51cto.com/8761954/1911853
Linux系统结构以及文件系统