690-文件管理和文件系统

OS对文件的管理

(1)文件管理

在计算机中,数据基本都是以文件的形式保存在计算机中的,OS对文件的管理,其实就是对是数据的管理。
(2)数据与文件
数据是以文件为管理单位而存放在磁盘上的,各类的文件有,比如软件包、函数库、各类文档、安装的程序文件、系统软件、插件等,数据的管理基本上就是文件为单位来管理的,这里需要强调一点的是,目录也是文件之一,作用是用来组织管理其它文件的。

(3)文件在磁盘上存储形态
文件存储在磁盘上时,分别要存储两部分的内容,第一部分是文件属性信息,第二部分是文件中存放的数据,属性信息和数据是分开存放的,我们看见的图形化的文件,只是图形化给人看的一个文件符号而已,存储在磁盘上的文件信息才是真实的文件存在形态。
图:
在这里插入图片描述

1)第一部分,文件属性信息
(a)什么是属性信息
能够表现出事物独特性质的,用于区别不同事物的身份信息。
(b)人的属性信息
表现人的独特性质,是区别人用的身份信息,人的属性信息有名字、身份证号、籍贯、年龄(出生日期)、身高、体重、学历等等。
(c)文件的属性信息
表现文件的独特性质,是区别文件用的身份信息,文件的属性信息有文件名、文件类型、文件输在位置等信息,任何计算机上的文件的属性,80%都是相同,这里分别以Windows和Linux为例,看看这两个操作系统下的文件
属性是怎样的,
图:windows和Linux文件属性对比

从上图可以可以看出,不管是windows还是Linux下,文件属性都包含,文件名称、文件类型、文件大小、文件位置、创建/修改时间、文件读写权限、打开方式等。
在这里插入图片描述

2)第二部分,文件数据:就是存放在文件中的数据。
3)文件属性与文件数据

(a)并不是所有的文件都有数据
第一个:所有的文件一定都有属性信息
第二个:但是不是所有的文件都有数据
需要强调的是,虽然所有文件都有属性信息,但并不是所有文件都有数据,有些文件只有属性没有数据,该情况在Liunx下很常见。
(b)文件属性与文件数据如何发生关系
文件属性中保存了文件数据在磁盘上存储地址,操作文件时,首先找到文件属性,然后再通过地址找到数据空间,调用磁盘驱动就可以操作文件数据所在磁盘空间,对文件数据进行相应的读写操作。
图:
在这里插入图片描述

(c)只有文件属性才能代表文件的存在性
只有文件属性能代表文件存在,至于在你在图形化界面下看见的文件以图标显示,这只是为了便于人的理解而给视觉呈现,但文件的存在与否由文件属性代表的,因此,
·创建文件时
文件属性被创建后就表示文件被创建了,当有数据存入,才会为其在磁盘上开辟数据空间,属性信息中存有地址,该地址指向数据所在磁盘空间。
·删除文件时
只要文件属性被删除了,就表示文件被删除了,该文件的数据空间会被释放,其它文件会覆盖该数据空间,也就是说刚删除文件,数据空间还没有被覆盖时,只要恢复文件属性,即可还原文件,这就是为什么删除不久的文件可以被恢复的原因了。

文件系统

1)作用:文件管理软件,计算机文件的管理者
书架:文件系统
书:文件
书中的内容:数据
数据是以文件为单元存储在磁盘上的,磁盘上会存储非常多的文件,因此需要文件系统这个软件来管理这些磁盘文件,文件系统被图形化呈现后,我们看见的就是各种的文件图标。
那么文件系统管理文件时,文件系统是通过管理文件的属性信息来管理文件的,就好比公安局使用每个人的档案(人属性)来管理人一样。

2)文件大致分类
(a)目录文件
· 文件夹,用于归类和组织其它文件,是文件系统管理文件时很重要的组织节点。
· 目录文件在磁盘上存储时,会存储自己属性和数据两部分内容
· 目录的数据空间只用与存放被管理文件的简略信息,目录使用这些简略信息来组织管理文件,文件的属性和数据并不放在目录文件空间里面,而是存放在文件自己的属性和数据空间。
图:
在这里插入图片描述

(b)非目录文件
· 有数据:由于存储和管理数据用的,有数据的文件又分成了两种,

  • 字符编码文件里面存放的都是二进制形式的字符编码,比如ASCII编码,UTF-8编码等等,这类文件专门给人识别的,通过文本编辑器程序
    打开这些文件后,这些字符编码会被显示器翻译为图形化的文字图形被人识别。
  • 非字符编码文件
    里面的存放的也是二进制数据,但是不是字符编码,比如可执行程序文件或者库文件,里面就是机器指令,这些是由CPU的控制器在进行执行译码时,有CPU的控制器识别的,不是给人识别的,因此使用编辑器打开后显示的是乱码。
    ·没有数据:这类文件很特殊,只有属性没有数据,属于特殊用途的文件
    3)文件系统的管理结构:树形管理结构
    图:
    在这里插入图片描述

(a)组织结构都是以树形结构管理的
不管是文件系统的,还是人事组织安排,只要涉及组织管理,都是以树形结构来进行管理的。
(b)文件系统的树形结构
文件系统是以结构组织管理文件的,其中目录文件是非常重要的文件组织节点,上图是以人好理解的图形方式来展示树形结构的,文件在磁盘上被文件系统这个软件管理时,自然是以树形结构进行管理的,但是不是人所能直观识别的树形结构,而是以代码形式来构建这个属性而机构,不管是人能直观识别还是不能直观识别的树形结构,树形结构的逻辑结构都是一样的。

文件系统与OS,与磁盘关系

(a)文件系统属于OS的一部分
文件系统分为两部分,第一部分是“虚拟文件系统”,第二部分是“具体的文件系统”
· 虚拟文件系统:也叫VFS,OS内核与各种“具体文件系统”对接的统一接口。
· 具体的文件系统:文件分为了很多种

  • ext2:早期Linux中常用的文件系统
  • ext3: ext2的升级版,带日志功能
  • FAT : Windows XP 操作系统采用的文件系统
  • NTFS : Windows NT/XP 操作系统采用的文件系统
  • 其它
    由于各种的文件形同实在是太多了,所以这里不例举出所有文件系统。
    · “虚拟文件系统”与“具体文件系统”的关系
    图:
    在这里插入图片描述

· 文件系统与“文件系统的管理格式”

  • 不同的文件系统会用不同的管理格式去管理我们的磁盘空间,从而实现对磁盘上所放文件的管理,不同的文件系统的管理格式是不一样的。
  • OS使用不同文件系统去管理磁盘、SSD、U盘、移动硬盘,我们需要给磁盘、SSD、U盘、移动硬盘设置不同管理格式。
    也就是说,使用文件系统去管理磁盘上的文件时,首先需要设置磁盘、SSD、U盘、移动硬盘管理格式,然后OS系统才会选择对应的文件系统去管理。
    如果OS内没有该格式对应的文件系统的话,我们将无法操作磁盘、SSD、U盘、移动硬盘里的文件。
    - 如何设置磁盘、SSD、U盘、移动硬盘的管理格式呢?
    比如我们格式化磁盘、SSD、U盘、移动硬盘时,选择文件类型时,就是在选择该种文件系统对应的管理格式。
    fat
    - 我们在格式化时做了什么事?
    (1)U盘、磁盘数据空间释放,原有数据无效
    (2)设置某种文件系统需要的格式,该文件系统能够去管理磁盘、SSD、U盘、移动硬盘就是为了在格式化时,对空间进行划分,方便对应的文件系统对其进行管理,格式化的过程有第三方“格式化软件”实现,一般 是系统会自带这个格式化软件。

(b)一般,OS中会包含很多种文件系统
不管是Windows还是Linux系统,实际上包含很多种文件系统,
· windows:Windows系统内会包含很多种不同的文件系统
这么做的目的主要是为了应对各种文件系统的管理格式,比如电脑磁盘是FAT的格式,OS就是用FAT文件管理磁盘,如果插到电脑上的U盘使用的是ext管理格式,OS就应该使用ext的文件系统管理u盘上的文件。
图:
在这里插入图片描述

· Linux:Linux系统内部也会包含很多种文件系统,目的也是为了应对各种文件系统管理格式

  • 当Linux操作系统用在嵌入式计算机上的话,有些文件系统会被裁掉
    由于嵌入式计算机上的硬件资源有限,因此如果OS中包含所有的文件系统的话,使得Linux系统太大,会消耗计算机资源。
    这个时候我们就可以在编译Linux系统源码进行配置,配置的时只选择需要的文件系统,编译OS时就只会编译需要的文件系统的代码,这个时候Linux系统的就小很多,这样就不会占据太多计算机资源。
    - 同理Windows是一样的
    只是我们很少会自己对Windows配置重编译,大部分情况下拿到的Windows系统都是别人编译好,直接可以使用的。
    因为Windows大多时候使用在计算机资源充足的PC机上的,除了WCE外很少用在嵌入式设备上,但是目前WCE已经很少用了,
    因为他不开源。
    (5)以ext文件系统的管理格式为例,看看这种管理格式,它是如何划分磁盘空间

文件系统管理格式概述

(a)ext文件系统为了很好的管理磁盘上存放的文件,ext对应的管理格式,将磁盘大致分为了四大存储区域
图:
在这里插入图片描述

·当我们对于磁盘的c盘、D盘、E盘,或者u盘、或者移动硬盘,按照ext管理格式对其格式化时,空间就是这么安排。
(b)不同文件系统对应的管理格式还会有所区别,比如如果你选择FAT格式的话,自举区和超级区就会有所不同。
2)各大区域介绍
(a)自举区
·存储内容:存放“自举程序”
·自举程序

  • 什么是自举
    开机后,计算机自己将OS启动起来就是自举,计算机启动时需要运行一个初始化程序,也就是自举程序,这个会帮助OS启动起来。
  • 自举程序做哪些事
  • 自举程序会它初始化(配置)CPU、寄存器和内存等。
  • 初始化之后,“自举程序”到某磁盘目录下找到OS内核,将其装入内存,CPU开始运行OS,从而开始启动整个操作系统。
  • 有关自举启动OS的详细过程

(b)超级区
·存储内容
存放对于磁盘(属性和数据存储区)的管理信息,其中有两个很重要的表(链表)

  • 第一个:与“文件属性存储区”相关的空闲空间管理表,管理“文件属性存储区”的空间。
  • 第二个:与“文件数据存储区”相关的空闲空间管理表,管理“文件数据存储区”的空间。
    用于管理整个磁盘空间分配和回收,比如穿件文件时,为创建的文件分配合理的磁盘空间,文件删除收回磁盘空间等等,

(c)文件属性存储区
· 存储内容

  • 该区域专门用于存放所有文件的属性信息。
  • 该存储区域被分成了一个个的inode节点
  • inode节点简称为i节点
    每个i节点有一个编号,通过这些编号(地址)就可以访问inode节点空间,读写里面的属性信息。
    + 每个i节点存放一个文件的属性信息
    文件的属性信息包括,文件名称、文件类型、文件大小、文件位置、创建/修改时间、文件读写权限、打开方式等,
    还有一个就是i节点编号,当然这些信息都是以二进制的形式存储于外存(磁盘)上的。
    图:
    在这里插入图片描述

- 如何通过i节点编号访问i节点空间

  • 如果要访问i节点空间,就需要知道i节点空间的起始地址,以及节点空间大小,每个节点空间的大小都是一样的,大约256 字节左右。
  • 通过i节点编号访问节点空间时,需要利用i节点编号计算出节点起始空间地址,然后再通过该地址访问节点空间。
    图:
    在这里插入图片描述
  • i节点编号的作用就是用于计算地址,然后索引找到i节点空间,访问i节点空间里面存放的文件属性。
  • 有关文件属性的更加详细知识内容
    ·存储文件属性信息的作用
    前面也介绍过,文件属性信息就代表了文件的存在,如果文件被创建了,就会在“文件属性存储区”为其开辟一个i节点空间,并存储文件的属性信息,如果文件的属性信息被删除了,那么就表示这个文件被删除了。
    文件属性信息的作用:
    (1)代表了文件的存在
    (2)用于管理文件
    给文件系统这个管理软件,让它去管理我们的文件系统。

(d)文件数据存储区
· 存储内容

  • 存储文件数据,文件属性和数据分开存放的
  • 并不是所有的文件都有数据,有些特殊文件只有属性没有数据
    - 访问文件数据的过程
  • 文件系统首先通过某i节点编号找到节点空间
  • 通过文件i节点空间保存的地址,找到文件数据的存储空间
  • 调用磁盘驱动程序,实现对文件数据空间的读写操作,访问文件数据。
  • 值得强调的内容
    文件的数据并不是完全一整块存储在“文件数据存储区的”,而是分一块一块存储的,每一块之间不一定是连续的,各块之间通过相互保存对方地址连接起来。
    图:
    在这里插入图片描述

磁盘是以块作为空间分配和管理的最小单元,一块大约4KB左右,当向文件中输入数据,当前块满了后,“超级区”会给文件再分配一块空间,数据一点点的写入这个空间,当再次写满这个空间后,再分配一个块。
由于是按块给文件分配数据空间的,因此文件数据的大小 <= 块空间之和,在没有写满块空间之前,文件的大小 < 块空间之和。
·普通文件和目录文件的数据内容

  • 普通文件
    对于普通文件来说,在数据空间放的就是文件中的数据。
  • 目录文件
  • 目录文件中存放的数据比较特殊
    仅存放相关文件的简略信息,这些简略信息就是一条一条的目录项,每条目录项至少必须包含个分信息,第一个是文件名、第二个是i节点编号,都是用于索引文件用的。
  • 例子:比如/这个目录为例,这个目录下包含两个文件,一个目录,一个普通文件。
    图:
    在这里插入图片描述

/表示根目录,这是Linux系统才有的写法,在Linux系统下,所有文件都是放在/目下的,/目录的起始地址是固定的。
但是在Windows下略有不同,Windows下的所有文件都是放在盘符下的,Windows下的根目录就是盘符,比如
C:、D:盘符等,换句话说,在Windows文件系统下有很多个根目录,每个盘符就是一个根目录,只是不用/表示,而是用C:等盘符表示。
图:在这里插入图片描述

访问文件的过程

1)例子:比如向/xxx.txt文件里面写数据

向这个文件里面写数据有两种方式,
(a)第一种:自己写一个程序实现

...
fd = open(/xxx.txt”, RDWR));//搜索找到xxx.txt,并打开这个文件
wirte(fd, “hello world”, 11);//向文件里面写入“hello world”的文字。
read(fd, buf, 11);//从文件里面度11哥字符到数组buf中
...

(b)第二种:通过图形化界面找到文件,使用文本编辑程序打开,然后操作文件数据

2)访问文件数据
不管是上面那种操作文件的方式,都要通过三步实现,
第一步:搜索,找到该xxx.txt文件
第二步:打开文件
第三步:读写文件,访问文件数据
(a)第一步:搜索,找到xxx.txt文件
· 搜索文件的方法有两种
第一种:通过图形界面,人为主动的去搜索。
第二种:程序中调用OS系统函数(open),系统函数会使用路径名去搜索

  • 第一种:通过图形化界面,人为的去搜素
  • 人为的打开并搜索目录,查看要操作文件存不存在
  • 图形化操作时,图形界面库会调用OS提供的系统调用函数
    系统调用函数又会去调用文件系统,文件系统会把当前目录里的所有文件以图形化的形式呈现给你。
    图:
    在这里插入图片描述

点击文件夹等图标——>图形界面库——>OS系统函数——>文件系统——>磁盘文件信息——>图像显示——>供人查看搜索
- 第二种:写一个程序,在程序中调用系统函数去搜索文件,

...
fd = open(/xxx.txt”, RDWR));//搜索找到xxx.txt,并打开这个文件
wirte(fd, “hello world”, 11);//向文件里面写入“hello world”的文字。
read(fd, buf, 11);//从文件里面度11哥字符到数组buf中
...

当调用open(“/xxx.txt”, RDWR))函数时,open函数会自动通过文件系统,通过路径去找到xxx.txt这个文件。

fd = open(/xxx.txt”, RDWR));//会做两件事情:

第一件:使用路径名,去搜索文件,通过文件系统去搜索,为什么需要通过文件系统去搜索呢,因为文件是由文件系统在管理。
第二件:如果文件找到了,打开文件,当然如果找不到呢,进行错误提示,提示文件不存在
open函数通过文件系统,搜索文件的过程

/xxx.txt
/: 根目录
xxx.txt:普通文件
  • /位置是固定的,先找到/的i节点空间
  • 通过/的i节点空间,找到/数据空间
  • 在/目录的数据空间,搜索/下的目录项,看看有没有叫xxx.txt的文件
  • 如果有:xxx.txt名字 —> xxx.txt目录项—>i节点编号—>i节点空间
  • 如果没有:OS返回一个错误信息给程序,提示操作的文件不存在。
    图:
    在这里插入图片描述

在搜索的过程中,需要用到目录项、i节点中的文件属性信息来进行搜索,这些都是由文件系统提供的,文件系统正是使用这些信息在管理着所有的文件。
· 如果目录层级较多
如果要找的文件目录是/yy/xxx.txt,方法是一样的,只是多了一级目录而已,方法是一样的,不管多多少级目录,方法都是一样的。

  • 首先搜索/目录项,找有没有名叫yy的目录文件
    如果有,yy目录项—>yy的i节点编号—>yy i节点空间—>yy目录的数据空间
  • 在yy目录项中,通过xxx.txt名字,搜索xxx.txt的目录项
    如果找到:xxx.txt名字 —> xxx.txt目录项—>i节点编号—>i节点空间—>xxx.txt的数据空间
  • 只要yy或者xxx.txt不存在,文件都无法被搜索到,都会提示文件不存在。

- (b)第二步:打开文件

  • 调用OS提供的系统函数,打开文件
    比如在Linux系统下,打开文件的系统函数叫open函数。
  • 打开文件后,OS会记录一些信息,用于管理被打开的文件
    调用系统函数(open)打开文件,会在内存中开辟空间,会存放一些信息,用以管理这个被打开的文件,当文件关闭时这些信息会被自动删除。
    之所以在打开文件时,需要存放一些管理信息,主要是为了方便后续对打开文件的读写操作
    图:
    在这里插入图片描述

(c)第三步:调用磁盘驱动程序,读写文件的数据
· 将文件打开后,就可以调用OS提供的读写函数,对文件进行读写操作,访问里面的数据
比如Linux OS的读写系统函数为read和write。
· 对文件进行读写操作时,需要调用磁盘驱动程序,通过驱动程序完成对文件在磁盘上的数据空间的读写。
· 向打开的文件进行读写操作时,会用到打开文件时建立的,用于管理被打开文件的管理信息。
3)访问文件的系统函数
·分为两类

  • 第一类:用于访问(读写)文件中的数据
  • 第二类:用于访问(读写)文件的属性信息

文件系统 与 磁盘驱动

1)文件系统
使用目录项、文件属性等信息来管理文件,搜索文件时,必须通过文件系统才能找到被管理的文件。
2)磁盘驱动
专门负责对磁盘上文件的读写操作:
数据空间的读写操作
属性空间的读写操作(文件i节点空间)
3)需要注意的是
对文件进行读写数据时,比如就以写数据为例,数据并不是一下子就写到文件中的,数据要经过一系列的缓存之后,驱动程序然后再将数写入文件。
图:
在这里插入图片描述

int main(void)
{
			char buf[100];
			int a;//a也是缓存,用于临时存放整形数
			struct student stu;//也是一个缓存,用于临时存放某个学生的信息
            scanf("%s", buf);//从键盘输入数据,并暂时缓存到Buf中去,
			//缓存是什么:缓存其实就是程序开辟出来的,用于临时存放数据的内存空间
			//我们程序中开辟出来的,一切的变量空间,统统都是用于存放数据的缓存
			int fd;
			fd = open("/xxx.txt", 只写);
			write(fd, "hello world", 11);//调用系统函数write,将应用程序buf(缓存)中的数据,捣腾到内核中缓存中去
			return 0;
}

文件系统简单总结

· OS是借助文件系统来管理文件的。
· OS会提供接口来对接具体的文件系统,在Linux下,对接具体文件系统的接口叫虚拟文件系统。
· 有关文件系统的更加详细的情况,在后面讲单片机、Linux系统编程、Linux文件系统移植时再详细讲解。
- 有些同学可能会有疑问,为什么单片机还需要文件系统?
因为单片机也有文件管理的需求,并非只有涉及到OS时才会有文件系统这个东西。
比如广场舞大妈的音响设备就是单片机做的,插上U盘导入音乐,这个时候就必须进行文件管理,没有文件系统,你怎么去访问u盘中的文件,在后面讲单片机时,会详细介绍讲解有关文件系统方面的内容。

OS对于网络的管理

我们说所有的通信都涉及通信协议,网络通信也不例外,网络通信的通信协议很多,目前最常见的就是TCP/IP协议,如果你的设备要进行网络通信,就必须要要有TCP/IP的协议栈代码(程序)。
TCP/IP协议栈可以是独立存在的,也可以是操作系统的一部分。
有些低级别的单片机,由于计算机资源太差,不能跑OS,但是它有需要进行网络通信,那么我们就可以将单独的TCP/IP协议栈代码移植到单片机。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林林ZEYU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值