根文件系统的简介

以下内容源于网络资源的整理,如有侵权请告知删除。

一、文件系统

文件系统是对一个存储设备上的数据进行组织的机制。这种机制有利于用户和操作系统的交互。

尽管内核是 Linux 的核心,但文件却是用户与操作系统交互所采用的主要工具。对Linux来说尤其如此,因为UNIX使用文件I/O机制管理硬件设备和数据文件。在Linux中如果没有文件系统,用户和操作系统的交互也就断开了。

用户空间包含一些应用程序和 GNU C 库(glibc),它们为文件系统调用(文件的打开、读取、写和关闭)提供用户接口。

系统调用接口的作用就像是交换器,它将系统调用从用户空间发送到内核空间中的适当端点。

VFS 是底层文件系统的主要接口。

  • 这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大。
  • 有两个针对文件系统对象的缓存(inode 和 dentry)。它们缓存最近使用过的文件系统对象。
  • 每个文件系统实现(比如 ext2、JFS 等等)导出一组通用接口,供 VFS 使用。
  • 缓冲区缓存会缓存文件系统和相关块设备之间的请求。例如,对底层设备驱动程序的读写请求会通过缓冲区缓存来传递。这就允许在其中缓存请求,减少访问物理设备的次数,加快访问速度。以最近使用(LRU)列表的形式管理缓冲区缓存。注意,可以使用 sync 命令将缓冲区缓存中的请求发送到存储媒体(迫使所有未写的数据发送到设备驱动程序,进而发送到存储设备)。

二、根文件系统

当我们在Windows环境下提到文件系统时,首先想到的是Fat32、NTFS等文件系统类型,而在Linux中,则会想到Ext2、Ext3等文件系统。但其实还有一种很重要的文件系统——根文件系统。

根文件系统,首先它是一种文件系统,该文件系统不仅具有普通文件系统的存储数据文件的功能,而且相对于普通的文件系统,它的特殊之处在于,它是内核启动时所挂载的第一个文件系统,内核代码的映像文件保存在根文件系统中,在根文件系统成功挂载之后,系统引导启动程序会从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。

那么根文件系统是怎样挂载的呢?先将/dev/ram0挂载,而后执行/linuxrc,等其执行完后,切换到根目录,再挂载具体的根文件系统。根文件系挂载之后,也就是到了Start_kernel()函数的最后,执行init进程,也就第一个用户进程,对系统进行各种初始化的操作。

根文件系统之所以在前面加一个”根“,说明它是加载其它文件系统的“根”,它包含系统引导和使其他文件系统得以挂载所必需的文件。根文件系统包括Linux启动时所必需的目录和关键性文件,例如:Linux启动时都需要有init目录下的相关文件;在 Linux挂载分区时Linux一定会找/etc/fstab这个文件;根文件系统中还包括了许多的应用程序bin目录等。任何包括这些Linux 系统启动所必须的文件都可以成为根文件系统。

Linux启动时,第一个必须挂载的是根文件系统。如果系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。成功之后可以自动或手动挂载其他的文件系统。因此,一个系统可以同时存在不同的文件系统。

在 Linux 中将一个文件系统与一个存储设备关联起来的过程称为挂装(mount)。使用mount命令可以将一个文件系统附着到当前文件系统层次结构中。在执行挂装时,要提供文件系统类型、文件系统和一个挂装点。根文件系统被挂载到根目录后,在根目录下就有根文件系统的各个目录与文件/bin、/sbin、 /mnt等,再将其他分区挂接到/mnt目录上,/mnt目录下就有这个分区的各个目录与文件。

附录:

Linux支持多种文件系统,包括 ext2、ext3、vfat、ntfs、iso9660、jffs、romfs、cramfs、nfs 等。为了统一管理,Linux引入虚拟文件系统 VFS(Virtual FILE System)。


Linux 文件系统由 4 层组成,分别是用户层、内核层、驱动层、和硬件层。

 

用户层:为用户提供一个操作接口。

内核层:实现了各种文件系统。

驱动层:是块设备的驱动程序。

硬件层:是嵌入式系统使用的几种存储器。


Linux启动时,第一个必须挂载的是  根文件系统。

 


嵌入式系统的存储介质:

 

 

JFFS文件系统:主要用于NOR型Flash存储器。其基于MTD驱动层。可读写、支持数据压缩、基于哈希表的日志型文件系统,并提供了崩溃掉电安全保护,提供“写平衡”支持。

YAFFS文件系统:专门为NAND Flash存储器设计的嵌入式文件系统。适用于大容量的存储设备。速度快,占用内存少,不支持压缩和只支持NAND Flash存储器。


根文件系统

​​​​​​​

 

根文件系统被存储在Flash存储器中,存储器被分为多个分区,(分区1,分区2,分区3等。)

分区1一般存储Linux内核映像文件,分区2存放根文件系统,根文件系统中存放着系统启动必须的文件和程序(包括提供用户界面的shell程序、应用程序依赖的库、配置文件等)。


内核启动后运行的第一个程序是init,其将启动根文件系统中的shell程序,给用户提供一个友好的操作界面。

构建根文件系统:

第一种方法:下载相应的命令源码,并移植到处理器架构平台上。

第二种方法:使用开源工具构建。(BusyBox、TinyLogin、Embutils)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用jQuery异步传递含复杂属性及集合属性的Model到控制器方法

Student类有集合属性Courses&#xff0c;如何把Student连同集合属性Courses传递给控制器方法&#xff1f; public class Student { public string StudentName { get; set; } public IList<Course> Courses { get; set; } } public class Course…

函数指针的使用

在学习群里看到的一个程序&#xff0c;基本说明了函数指针的用法。就摘录如下&#xff1a;

CreateThread和_beginthread的区别

1.程序&#xff1a;程序构成&#xff1a;(1)源代码(2)可执行的二进制代码程序是指令和数据的有序集合&#xff0c;其本身没有任何运行的含义&#xff0c;是一个静态的概念。由操作系统加载其可执行的二进制代码&#xff0c;分配相应的数据结构&#xff1a;进程控制块PCB(Proces…

重新注册dll

for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %i它的作用是用循环语句并且用regsvr32命令对Windows\System32文件夹中的所有DLL文件都进行一次注册&#xff0c;以解决诸如IE无法打开二级链接这样的问题。转载于:https://blog.51cto.com/gzkhrh/1375543

hdu max sum

这题跟求最大连续数列一样的&#xff0c;稍微不同的是只要把值改为标号就可以了。 #include<stdio.h>#include<string.h>#include<stdlib.h>#include<debug.h>#defineX 100001intA[X];intmain( ){intN,M,a,b,c,d,e,f,x,i,y,sum,len0; Debug(); scanf(&…

冒泡排序 Bubble Sort

冒泡排序 冒泡排序的过程很简单&#xff0c;就是不断比较相邻两个元素的大小关系&#xff0c;若逆序则交换之&#xff0c;这样通过一轮的比较&#xff0c;关键字最大的记录就沉底了。 一般地说&#xff0c;第i趟冒泡排序是从第一个元素起到第n-i1个元素依次比较相邻两个记录的关…

mysql query cache

1.概述&#xff1a;MySQL Query Cache 缓存客户端提交给MySQL的SELECT&#xff08;注意只是select&#xff09;语句以及该语句的结果集。注意&#xff1a;query_cache是mysql server端的查询缓存&#xff0c;在存储引擎之上。存储引擎层还有存储引擎的缓存&#xff0c;表也有表…

从源码到可执行程序的步骤

以下内容源于朱有鹏《物联网大讲堂》课程的学习整理&#xff0c;以及网页http://mp.weixin.qq.com/s/_iVrUtA-jgE8XAR-vKYcww的学习整理。如有侵权&#xff0c;请告知删除。 一、总结 从源码到可执行程序的步骤&#xff1a;预编译、编译、汇编、链接。前三个宏观上为编译&…

最近在ST公司的STxp70的dsp平台上开发音频codec模块.

公司最近和ST公司有个DAB的项目, 需要将AACplus,BSAC,MPEG-lay2以及lay3的算法在该dsp平台上 进行优化.这个dsp平台比较的奇怪和TI的以及arm的core不太一样,它有一个基本core以及基本指令集,它的 扩展的一些数学指令集是通过增加一些extension库来实现的.不过优化后的效率还是比…

Eclipse中部分快捷键

这个链接文章介绍的比较全面&#xff1a;http://blog.csdn.net/hevicky/article/details/7239977 我把其中认为对自己有用的几个快捷键整理出来&#xff0c;以便熟悉、使用。 MyEclipse 快捷键1(CTRL) ------------------------------------- Ctrl1 快速修复&#xff08;例如导…

win设置壁纸

默认壁纸图片位置&#xff1a; C:\Windows\Web\Wallpaper\Scenes 你可以自己建文件夹&#xff0c;放自己喜欢的桌面壁纸。 设置壁纸&#xff1a; 桌面右键 -> 个性化 然后点击 “桌面背景” -> 可以点击标题选择其下面的所有图片&#xff0c;也可以按 ctrl 选择你想要的…

Makefile中三个自动变量:$^,$@,$<

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 什么叫自动变量呢&#xff1f;就是这种变量会把模式中所定义的一系列的文件自动地挨个取出&#xff0c;直至所有的符合模式的文件都取完。这种自动化变量只应出现在规则的命令中。 以一个例子说明。 OBJS…

win8 软件字体乱码

安装了Win8企业评估版&#xff0c;安装一些软件中文字体显示出粗。进入控制面板&#xff0c;语言->单击左下角的位置链接->弹出的区域当前位置下拉框选择中文即可&#xff0c;最后重启即可。 winq -> search language setup->add language-> location (left bot…

物理机安装ESXI6.7提示No Network Adapters的解决方案

下载好ESXI6.7.iso镜像&#xff0c;写入U盘后&#xff0c;提示No Network Adapters&#xff0c;找不到网卡驱动。 解决办法&#xff1a;需要重新封装ESXI&#xff0c;将对应的网卡驱动嵌入进来。 1、先下载VMware-PowerCLI-6.5.0和ESXi-Customizer-PS&#xff1a; http://down.…

汇编程序、shell脚本与Makefile中的注释方法

一、汇编程序中的注释方法 &#xff08;1&#xff09;可以用或;&#xff08;这里的不是makefile中的静默执行之意&#xff0c;分号是英文状态的分号&#xff09;。 &#xff08;2&#xff09;可以用//或者/* */&#xff08;既然可以用/* */&#xff0c;汇编语言就不用关注单行…

mysqlslap详解--MySQL自带的性能压力测试工具(转)

本文的参考博客地址为&#xff1a;https://blog.csdn.net/fuzhongfaya/article/details/80943991 和 https://www.cnblogs.com/davygeek/p/5253830.html 本文的目的一方面是自己整理&#xff0c;防止后续忘记&#xff0c;一方面是对参考博客的进行验证. 首先在这里介绍一下常用…

Android Gallery控件使用方法详解

我们今天给大家讲的就是Gallery控件&#xff0c;这个控件在android当中是非常重要的&#xff0c;我们今天就给大家介绍一下3D的Gallery控件是怎么样来实现的。下面我们就来直接看看代码吧。 1.扩展Gallery&#xff1a; public class GalleryFlow extends Gallery { private Cam…

javax.servlet.jsp.JspTagException:

2019独角兽企业重金招聘Python工程师标准>>> Illegal use of <when>-style tag without <choose> as its direct parent 这个错误一般是在jsp页面中非法使用<when>标签 该标签必须是<choose>标签的直接子标签 不能单独是<when>标签 …

uboot将命令结构体单独存放在某个代码段的方法

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 1、uboot的链接脚本里有如下代码片段。 __u_boot_cmd_start .;.u_boot_cmd : { *(.u_boot_cmd) } __u_boot_cmd_end .; 2、uboot中将命令结构体单独存放在某个代码段&#xff0c;是通过以下两个宏…

Felix的Nodejs代码风格

Felix的Nodejs代码风格 原文地址&#xff1a;http://nodeguide.com/style.html 这是翻译的关于nodejs编码风格的一片文章&#xff0c;nodejs并没有官方统一的编码风格&#xff0c;但是好的编码风格可以提高代码可读性&#xff0c;既然有人总结了&#xff0c;就可以参照一下。没…