发布网友 发布时间:2022-04-23 16:39
共3个回答
热心网友 时间:2022-05-07 07:07
Linux之所以能在嵌人式系统领域取得如此辉煌的成绩,与其自身的优良特性是分不开的。与其他操作系统相比,Linux具有以下一系列显著的特点。
1.模块化程度高
Linux的内核设计非常精巧,分成进程调度、内存管理、进程间通信、虚拟文件系统和网络接口五大部分;其独特的模块机制可根据用户的需要,实时地将某些模块插入或从内核中移走,使得Linux系统内核可以裁剪得非常小巧,很适合于嵌入式系统的需要。
2.源码公开
由于Linux系统的开发从一开始就与GNU项目紧密地结合起来,所以它的大多数组成部分都直接来自GNU项目。任何人、任何组织只要遵守GPL条款,就可以自由使用Linux 源代码,为用户提供了最大限度的自由度。这一点也正投嵌入式系统所好,因为嵌入式系统应用千差万别,设计者往往需要针对具体的应用对源码进行修改和优化,所以是否能获得源代码 对于嵌入式系统的开发是至关重要的。加之Linux的软件资源十分丰富,每种通用程序在Linux上几乎都可以找到,并且数量还在不断增加。这一切就使设计者在其基础之上进行二次开发变得非常容易。另外,由于Linux源代码公开,也使用户不用担心有“后闸”等安全隐患。
同时,源码开放给各教育机构提供极大的方便,从而也促进了Linux的学习、推广和应用。
3.广泛的硬件支持
Linux能支持x86、ARM、MIPS、ALPHA和PowerPC等多种体系结构的微处理器。目前已成功地移植到数十种硬件平台,几乎能运行在所有流行的处理器上。
由于世界范围内有众多开发者在为Linux的扩充贡献力量,所以Linux有着异常丰富的驱动程序资源,支持各种主流硬件设各和最新的硬件技术,甚至可在没有存储管理单元MMU 的处理器上运行,这些都进一步促进了Linux在嵌入式系统中的应用。
4.安全性及可靠性好
内核高效稳定。Linux内核的高效和稳定已在各个领域内得到了大量事实的验证。
Linux中大量网络管理、网络服务等方面的功能,可使用户很方便地建立高效稳定的防火墙、路由器、工作站、服务器等。为提高安全性,它还提供了大量的网络管理软件、网络分析软件和网络安全软件等。
5.具有优秀的开发工具
开发嵌入式系统的关键是需要有一套完善的开发和调试工具。传统的嵌入式开发调试工具是在线仿真器(In Circuit Emulator,ICE),它通过取代目标板的微处理器,给目标程序提供一个完整的仿真环境,从而使开发者能非常清楚地了解到程序在目标板上的工作状态,便于监视和调试程序。在线仿真器的价格非常高,而且只适合做非常底层的调试。如果使用的是嵌人式Linux,一旦软硬件能支持正常的串口功能,即使不用在线仿真器,也可以很好地进行开发和调试工作,从而节省了一笔不小的开发费用。嵌入式Linux为开发者提供了一套完整的工具链(Tool Chain),能够很方便地实现从操作系统到应用软件各个级别的调试。
6.有很好的网络支持利文件系统支持
Linux从诞生之日起就与Internet密不可分,支持各种标准的Internet网络协议,并且很容易移植到嵌入式系统当中。目前,Linux几乎支持所有主流的网络硬件、网络协议和文件系统,因此它是NFS的一个很好的平台。
另一方面,由于Linux有很好的文件系统支持(例如,它支持Ext2、FAT32、romfs等文件系统),是数据各份、同步和复制的良好平台,这些都为开发嵌入式系统应用打下了坚实的基础。
7.与UNIX完全兼容
目前,在Linux中所包含的工具和实用程序,可以完成UNIX的所有主要功能。
但由于Linux不是为实时而设计的,因而这就成了Linux在实时系统中应用的最大遗憾。不过,目前有众多的自由软件爱好者正在为此进行不懈的努力,也取得了诸多成果
热心网友 时间:2022-05-07 08:25
类似于 Windows下的C、D、E等各个盘,Linux系统也可以将磁盘、Flash等存储设备划分为若干个分区,在不同分区存放不同类别的文件。与Windows的C盘类似,Linux一样要在一个分区上存放系统启动所必需的文件,比如内核映象文件(在嵌入式系统中,内核一般单独存放在一个分区中)内核启动后运行的第一-个程序( init)给用户提供操作界面的 shell程序、应用程序所依赖的库等。这些必需、基本的文件合称为根文件系统,它们存放在一个分区中。Linux 系统启动后首先挂接这个分区,称为挂接( mount)根文件系统。其他分区上所有目录、文件的集合,也称为文件系统。Linux 中并没有C、D、E等盘符的概念,它以树状结构管理所有目录、文件,其他分区挂接在某个目录上,这个目录被称为挂接点或安装点(mount point),然后就可以通过这个目录来访问这个分区上的文件了。比如根文件系统被挂接在根目录“I”上后,在根目录下就有根文件系统的各个目录、文件:/bin、/sbin、/mnt等;再将其他分区挂接到/mnt目录上,/mnt目录下就有这个分区.的各个目录、文件。在一个分区上存储文件时,需要遵循一定的格式,这种格式称为文件系统类型,比如fat16、fat32、ntfs、ext2、ext3、jffs2、yaffs 等。除这些拥有实实在在的存储分区的文件系统类型外,Linux还有几种虚拟的文件系统类型,比如proc、sysfs 等,它们的文件并不存储在实际的设备上,而是在访问它们时由内核临时生成。比如 proc文件系统下的uptime文件,读取它时可以得到两个时间值(用来表示系统启动后运行的秒数、空闲的秒数),每次读取时都由内核即刻生成,每次读取结果都不一样。“文件系统类型”常被简称为“文件系统”,比如“硬盘第二个分区上的文件系统是EXT2”指的就是文件系统类型。所以“文件系统”这个术语,有时候指的是分区上的文件集合,有时候指的是文件系统类型,需要根据语境分辨,在阅读各类文献时需要注意这点。
热心网友 时间:2022-05-07 10:00
第9章 Linux文件系统知识与格式化应用实践... 1
9.1 Linux文件系统介绍... 2
9.1.1文件系统知识预备... 2
9.1.2什么是文件系统?... 3
9.1.3文件系统有什么用?... 3
9.1.4 常见文件系统类型介绍... 3
9.1.5文件系统的深入体系结构介绍... 9
9.1.6操作系统默认文件系统及简单对比... 11
9.1.7文件系统选型简单介绍... 12
9.2 mkfs:创建Linux文件系统核心命令... 13
9.2.1 命令详解... 13
9.2.2 使用范例... 14
9.3 Ext2文件系统介绍... 16
9.3.1 ext2文件系统介绍... 16
9.3.2 ext2文件系统知识回顾... 16
9.3.3什么是inode?... 18
9.3.4什么是逻辑块(Block)?... 21
9.4文件系统的磁盘布局... 22
9.4.1磁盘文件系统概述... 22
9.4.2 ext2文件系统总体存储布局... 23
9.3.1文件系统新增文件操作流程... 36
9.3.2文件系统删除原理... 37
9.1 Linux文件系统介绍
9.1.1文件系统知识预备
分区与文件系统的关系比喻:分区就是给房子打隔断,创建文件系统就是给房子装修!
根据前面课程的讲解,以及大家日常对Linux系统的操作,我们很容易理解,当通过fdisk命令对一个磁盘进行分区后,并不能直接挂载目录存放数据实体,还需要格式化操作,才可以进行挂载并存放数据。这里实践下,将一个未进行格式化的分区sdb1直接挂载。
[root@oldboy ~]# mount /dev/sdb1 /mnt
mount: you must specify the filesystem type #<==CentOS6系统未格式化直接挂载的结果。
[root@oldboy ~]# mount /dev/sdb1 /mnt
mount: /dev/sdb3 is write-protected, mounting read-only #<==CentOS7系统未格式化直接挂载的结果。
mount: unknown filesystem type '(null)'
为什么磁盘分区后需要格式化呢?这是因为磁盘分区在没有格式化前,操作系统是无法识别系统上磁盘分区格式的,也就无法存取文件目录属性和权限等内容,把分区格式化成操作系统支持的某个文件系统后,再存放数据,系统就会根据这个文件系统的格式进行存取文件了。
9.1.2什么是文件系统?
简单地说,文件系统就是一种存储和组织计算机中数据文件的机制或方法,它使得对计算机内的数据的存储、访问和查找变得更容易、简单。如ext2、ext3(CentOS5.x)、ext4(CentOS6.x)、xfs(CentOS7.x)、zfs和Reiserfs或FAT、NTFS等都是常见文件系统。
文件系统也可能是一种访问数据的服务形式,实际的数据是通过网络协议(如NFS、MFS等)提供的或者系统内存里,甚至可能根本没有对应的文件(如proc文件系统)。
因此,如果严格地说,文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型,而文件系统落到计算机里其实就是一个应用软件。
9.1.3文件系统有什么用?
文件系统使用文件和树形目录的抽象逻辑概念代替了磁盘等物理设备使用数据块的概念,用户使用文件系统来存放数据,而不必关心数据实际保存在硬盘(或者光盘)的地址为多少的inode和block上,只需要记住这个文件的所属目录和文件名就好了。
在向磁盘分区写入新数据之前,用户不必关心硬盘上的哪个索引节点和块地址有没有被使用,硬盘上的存储空间管理(分配和释放)功能都是由文件系统自动帮用户完成的,用户只需要记住数据被写入到了哪个文件中或文件放于哪个目录中即可。
在磁盘实际工作场景,即使给磁盘分区了,但如果没有在磁盘格式化创建文件系统,那么磁盘是无法存储数据的。因此,在磁盘分区后能够使用之前必须要格式化成相应的文件系统才行。
9.1.4 常见文件系统类型介绍
随着Linux系统的不断发展,它所支持的文件系统格式也在迅速增多,当今的Linux系统核心可以支持多种文件系统类型:如Btrfs、JFS、ReiserFS、ext、ext2、ext3、ext4、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等还有一种文件系统是Filesystem in Userspace(FUSE)。它可以将文件系统的请求通过VFS虚拟文件系统发送回用户空间。很多分布式文件系统例如:MFS就支持FUSE挂载的方式。。下表是一些常见文件类型的全称、简称和基本用途对应:
Linux支持的每个文件系统都有自己的优缺点和性能特征。文件系统的一个重要属性是日志功能,它允许系统在崩溃后更快地恢复。通常,日志文件系统比非日志文件系统在数据保护方面会更好一些。
1.ext2 文件系统
也称为第二扩展文件系统(英语:second extended filesystem,缩写为 ext2),目的是克服早期 Linux 版本中使用的Minix文件系统的缺点。多年来,该文件系统一直广泛应用于Linux。但 ext2 中没有日志,现在基本上已被ext3(Centos5.x默认的文件系统)取代,ext3文件系统也正逐渐被ext4取代(Centos6.x默认的文件系统)。
ext2开始由Rémy Card设计,用以代替ext,于1993年1月加入linux核心支持之中。ext2的经典实现为LINUX内核中的ext2fs文件系统驱动,最大可支持2TB的文件系统,至linux核心2.6版时,扩展到可支持32TB。其他的实现包括GNU Hurd, Mac OS X (第3方), Darwin (第3方), BSD。ext2为数个LINUX发行版的默认文件系统,如Debian、Red Hat Linux、Centos等。
2.ext3 文件系统
为了避免上述提到的ext2文件系统不一致的情况发生,人们想到了一个方式, 在filesystem当中规划出一个区块,该区块专门记录写入或修订文件时的步骤, 就可以简化一致性检查的步骤了。也就是说:
1)预备:当系统要写入一个文件时,会先在日志记录区块中记录某个文件准备要写入的信息;
2) 实际写入:开始写入档案的权限与数据;开始更新metadata的数据;
3)结束:完成数据与metadata的更新后,在日志记录区块当中完成该档案的记录。
在这样的程序当中,万一数据的记录过程当中収发生了问题,那么我们的系统只要去检查日志记录区块, 就可以知道那个文件发生了问题,针对该问题来做一致性的检查即可,而不必针对整块 filesystem 去检查, 这样就可以达到快速修复filesystem的能力了!这就是日志式文件系统最基础的功能。
Ext3就是日志文件系统,Ext3是Ext2的升级版本,并且可以向下兼容Ext2。目前建议大家直接使用Ext3这个文件系统。
ext3文件系统向标准ext2文件系统添加了日志功能,因此是一个非常稳定的文件系统的一个演化发展。它在大多数情况下提供合理的性能并且仍旧在改进。由于它在可靠的 ext2文件系统之上添加了日志功能,因此可以将现有ext2文件系统转换为ext3文件系统,并且在必要时还可以转换回来。ext3 文件系统是一个成熟的文件系统,用作Redhat/Centos发行版上的默认文件系统。
http://www.ibm.com/developerworks/cn/linux/filesystem/l-fs7/index.html
3.ext4文件系统
Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4。 Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能:
1)与 Ext3 兼容。 执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统。原有Ext3数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了Ext4所支持的更大容量。
2) 更大的文件系统和更大的文件。 较之Ext3目前所支持的最大16TB文件系统和最大2TB文件,Ext4 分别支持1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系统,以及16TB的文件。
3) 无限数量的子目录。 Ext3 目前只支持 32,000 个子目录,而 Ext4 支持无限数量的子目录。
4) Extents。 Ext3 采用间接块映射,当操作大文件时,效率低下。比如一个100MB 大小的文件,在 Ext3 中要建立 25,600 个数据块(每个数据块大小为4KB)的映射表。而 Ext4 引入了现代文件系统中流行的extents概念,每个extent 为一组连续的数据块,上述文件则表示为“该文件数据保存在接下来的25,600个数据块中”,提高了不少效率。
5) 多块分配。 当写入数据到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个 4KB的块,写一个100MB 文件就要调用25,600次数据块分配器,而Ext4的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。
6) 延迟分配。 Ext3的数据块分配策略是尽快分配,而Ext4和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在cache中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。
7) 快速fsck。 以前执行fsck第一步就会很慢,因为它要检查所有的inode,现在Ext4给每个组的inode表中都添加了一份未使用inode的列表,今后fsck Ext4 文件系统就可以跳过它们而只去检查那些在用的inode了。
8) 日志校验。 日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。Ext4 的日志校验功能可以很方便地判断日志数据是否损坏,而且它将Ext3的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。
9) “无日志”(No Journaling)模式。 日志总归有一些开销,Ext4允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。
10) 在线碎片整理。 尽管延迟分配、多块分配和extents能有效减少文件系统碎片,但碎片还是不可避免会产生。Ext4支持在线碎片整理,并将提供e4defrag工具进行个别文件或整个文件系统的碎片整理。
inode相关特性。 Ext4支持更大的inode,较之Ext3 默认的inode 大小 128 字节,Ext4 为了在inode中容纳更多的扩展属性(如纳秒时间戳或inode版本),默认inode大小为256字节。Ext4 还支持快速扩展属性(fast extended attributes)和inode保留(inodes reservation)。
12) 持久预分配(Persistent preallocation)。 P2P 软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。 Ext4在文件系统层面实现了持久预分配并提供相应的API(libc 中的 posix_fallocate()),比应用软件自己实现更有效率。
13) 默认启用barrier。 磁盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写commit记录,若commit记录写入在先,而日志有可能损坏,那么就会影响数据完整性。Ext4 默认启用barrier,只有当barrier之前的数据全部写入磁盘,才能写barrier之后的数据。(可通过 "mount -o barrier=0" 命令禁用该特性。)
4.ReiserFS 文件系统
ReiserFS是一个基于B状树的文件系统,拥有非常好的总体性能,特别是对于大量小文件。ReiserFS 拥有良好的伸缩性并具有日志功能。但该文件系统不再受到积极开发,不支持SELinux,基本上已被 Reiser4 取代。ReiserFS文件系统多年来一直用作一些发行版(包括SUSE)的默认文件系统,但现在用得少了。
5.XFS文件系统
XFS文件系统拥有日志功能,包含一些健壮的特性,并针对可伸缩性进行了优化。XFS在RAM中强制缓存中转数据,因此如果使用 XFS,建议采用不间断电源供应。淘宝的数据库在使用此文件系统。
XFS 最初是由 Silicon Graphics,Inc. 于90年代初开发的。那时,SGI发现他们的现有文件系统(existing filesystem,EFS)正在迅速变得不适应当时激烈的计算竞争。为解决这个问题,SGI 决定设计一种全新的高性能位文件系统,而不是试图调整EFS在先天设计上的某些缺陷。因此,XFS 诞生了,并于 1994 年随 IRIX 5.3 的发布而应用于计算。它至今仍作为 SGI 基于 IRIX 的产品(从工作站到超级计算机)的底层文件系统来使用。现在,XFS 也可以用于 Linux。XFS的Linux 版的到来是激动人心的,首先因为它为 Linux 社区提供了一种健壮的、优秀的以及功能丰富的文件系统,并且这种文件系统所具有的可伸缩性能够满足最苛刻的存储需求。
6.vfat 文件系统
vfat 文件系统(也称为 FAT32)没有日志功能,且缺乏完整的 Linux 文件系统实现所需的许多特性。它可用于在 Windows 和 Linux 系统之间交换数据,因为 Windows 和 Linux 都能读取它。不要将这个文件系统用于 Linux,除非要在 Windows 和 Linux 之间共享数据。如果您在一个 vfat 磁盘上解压缩一个 Linux 归档文件,那么您将丢失权限(比如执行权限),还会丢失该归档文件中可能存储的符号链接。
7.VFS虚拟文件系统
虚拟文件系统VFS也称为虚拟文件系统开关(Virtual filesystem Switch),它是内核的一个子系统,提供了一个通用文件系统模型,该模型囊括了所能见到的文件系统常用功能和行为,并为应用程序提供一致性的文件系统接口,安装的所有物理文件系统不但依赖于VFS共存,而且也依靠VFS协同工作。它的主要设计思想有以下3点:
(1)应用层:VFS模型源于UNIX文件系统,使得用户可以直接使用标准UNIX文件系统调用来操作文件,无需考虑具体文件系统特性和物理存储介质,通过VFS访问文件系统,才使得不同文件系统之间的协作性和通用性成为可能。
(2)虚拟层:在对所有具体文件系统的共同特性进行抽象的基础上,形成一个与具体文件系统实现无关的虚拟层,并在此层次上定义与用户的一致性接口;
(3)实现层:该层使用类似开关表技术进行具体文件系统转接,实现各种文件系统的物理操作细节,每个文件系统是自包含的,包含文件系统实现的各种设施,如超级块、节点区、数据区以及各种数据结构和文件类的操作函数。
一般地说,VFS提供以下功能:
•记录可用的文件系统类型;
•把文件系统与对应的存储设备联系起来;
•处理面向文件的通用操作;
•涉及具体文件系统的操作时,把它们映射到相关的具体文件系统。
VFS抽象层之所以能衔接各种不同的文件系统,是因为它定义了所有文件系统都支持的基本抽象接口和数据结构,同时具体的文件系统也将自己的诸如“文件如何打开”、“目录如何定义”等概念在形式上与VFS的定义保持一致。对于像FAT和NTFS这类非UNIX风格文件系统,必须经过封装,提供符合VFS概念的接口。比如,一个文件系统不支持inode概念,它也必须在内存中装配inode结构体,就像它本身包含inode一样。这些装配和转换需要在使用现场引入特别处理,使得非UNIX文件系统能够兼容UNIX文件系统的使用规则和满足VFS的需求,这样一来,非UNIX文件系统便可与VFS一道工作,只是性能上会有少许影响。
下面看一个文件操作的例子,假如应用程序执行如下文件操作:write(fd,&buf,len);要求将buf指针指向的、长度为len字节的数据写入文件描述符fd对应的文件的当前位置。
用户执行的系统调用首先被VFS的sys_write( )处理,该函数首先处理一些与设备无关的操作,并找到f所在的文件系统,再根据VFS结构及它的inode数据结构提供的信息,重定向到具体文件系统中相对应的写函数,由它来处理与特定设备相关的操作,并把数据写到物理介质。