根文件系统的简介

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

一、文件系统

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

尽管内核是 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,一经查实,立即删除!

相关文章

函数指针的使用

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

CreateThread和_beginthread的区别

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

冒泡排序 Bubble Sort

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

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

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

win设置壁纸

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

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

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

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

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

Android Gallery控件使用方法详解

我们今天给大家讲的就是Gallery控件,这个控件在android当中是非常重要的,我们今天就给大家介绍一下3D的Gallery控件是怎么样来实现的。下面我们就来直接看看代码吧。 1.扩展Gallery: 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>标签 …

c++远征之继承篇——继承的概念、继承时构造函数/析构函数的先后顺序

1、继承的概念 2、继承中&#xff0c;构造函数和析构函数的先后顺序

结对开发:电梯调度(2)

组员&#xff1a;赵天 李金吉 分工&#xff1a;赵天&#xff1a;概要设计与编码。 李金吉&#xff1a;详细设计与调试。 界面&#xff1a; 详细代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Sys…

c++远征之继承篇——继承方式

以下内容源于慕课网&#xff0c;系学习整理而成&#xff0c;如有侵权&#xff0c;请告知删除。 1、公有继承 2、保护继承 3、私有继承

VMware vCenter Server6.5安装及群集配置介绍

借助 VMware vCenterServer&#xff0c;可从单个控制台统一管理数据中心的所有主机和虚拟机&#xff0c;该控制台聚合了集群、主机和虚拟机的性能监控功能。 VMware vCenterServer 使管理员能够从一个位置深入了解虚拟基础架构的集群、主机、虚拟机、存储、客户操作系统和其他关…

[JS性能优化专篇]

为什么80%的码农都做不了架构师&#xff1f;>>> 参考文章&#xff1a;了解 JavaScript 应用程序中的内存泄漏 旧版本的IE和Firefox都存在内存泄漏的问题&#xff0c;而且会一直持续到浏览器关闭。现在可以使用 Google Chrome 中的 Heap Profiler 来诊断内存问题。 …

Simulated Annealing(模拟退火算法)

/* Simulated Annealing(模拟退火算法) 求解旅行商问题(TSP) 网上给的数据是31个省会的坐标&#xff0c;蚁群算法得到的结果是&#xff1a;15378 我算的结果中&#xff0c;最好的一次是&#xff1a;15495 */ #include<iostream> #include<cstdio> #include<cstd…

c++远征之继承篇——隐藏,isa,虚析构函数

一、隐藏 父子关系。成员&#xff08;数据成员或者成员函数&#xff09;同名&#xff1b;此时子类中会隐藏父类中的同名成员。无法函数重载&#xff0c;只会隐藏&#xff01;如果想访问父类中的同名成员&#xff0c;需要 :: 操作。 访问父类同名函数的方法 二、is-a &#xff…

表单元素对齐问题解决方案

之前一直困扰自己的一个问题就是表单内radio、select等的对齐问题&#xff0c;一直以来&#xff0c;都是给提示添加label&#xff0c;然后跟radio等一起浮动&#xff0c;然后再设置margin解决的&#xff0c;但是这样又得另外解决IE6下的双边距问题&#xff0c;搞得自己相当恼。…

(转)动态Entity Framework查询:Dynamic Query 介绍

原文地址&#xff1a;http://www.cnblogs.com/yinzixin/archive/2012/11/30/entity-framework-dynamic-query.html Dynamic Query是一个支持动态Entity Framework查询的库。它的设计初衷是为了减少在管理系统中大量出现的对一个数据集进行查找、排序、分页的这类场景的开发工作…

c++远征之继承篇——多重继承,多继承,虚继承,多继承时的重复定义解决方法

以下内容源于慕课网的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 1、多重继承 &#xff08;1&#xff09;概念理解 2、多继承 &#xff08;1&#xff09;概念理解 3、虚继承 &#xff08;1&#xff09;问题的引出&#xff1a;多重继承和多继承的结合&#xff0c…

从Pycharm说起

说实话.作为一个Coder.每天在各种IDE中切换编写Code.如果一个IDE Look and Feel总是无形中影响你每天Code Farm的心情.那该是多么不爽的事情.特别是针对本人对IDE总是有一种天生“洁癖感”.每当一们语言或技术在无意中吸引我.或是已经在粗糙的本文编辑器初体验.都会在两到三天体…