14、文件系统2(操作系统笔记)

一、文件系统实例(FAT)

1.1 Windows的FAT16文件系统

  • 簇(块)大小:1、2、4、8、16、3264扇区
  • 文件系统的数据记录在“引导扇区”中
  • 文件分配表FAT的作用
    描述簇的分配状态、标注下一簇的簇号等
  • FAT表项:2字节(16位)
  • 目录项:32字节
  • 根目录大小固定


    1

1.2 FAT文件系统:主引导记录(Main Boot Record,MBR)

  • 主引导记录
    一般放在零号扇区中


    2

1.3 FAT文件系统:分区引导扇区(Dos Boot Record,DBR)

3

说明:这里是以FAT32为例。

1.4 引导扇区(BIOS参数块)

4

说明:这里我们看BIOS参数块,也是以FAT32为例。

1.5 引导扇区(扩展BIOS参数块EBPB)

5

1.6 文件分配表FAT

  • 可以把文件分配表看成是一个整数数组,每个整数代表磁盘分区的一个簇号
  • 状态
    未使用、坏簇、系统保留、被文件占用(下一簇簇号)、最后一簇(0xFFFF
  • 簇号从0开始编号,簇0和簇1是保留的。
    6

1.7 FAT16目录项

7

说明:在前面讲过,UNIX系统中i节点加上目录项就是FCB,而在FAT文件系统中FCB就等于目录项。32个字节没有用完,没用完的保留。

1.8 FAT32文件系统

  • FAT32中,根目录区(BOOT区)不是固定区域、固定大小,而是数据区的一部分,采用与子目录文件相同的管理方式
  • 目录项仍占32字节,但分为各种类型(包括:“.”目录项、“..”目录项、短文件名目录项、长文件名目录项、卷标项(根目录)、已删除目录项(第一字节为0xE5)等)
  • 支持长文件名格式
  • 支持Unicode
  • 不支持高级容错特性,不具有内部安全特性


    8

1.9 FAT32目录项

9

说明:这是一个基本的目录项。

1.10 一般长文件名的实现方式

10

说明:左边的实现是目录项的长度不固定。第一个字段给出目录项的长度,然后把固定长度的属性记录在其后,再才是文件名,因为文件名的长度是不一样的,留出足够的空间给文件名。缺点就是一个文件删除时,就留出了一块空间,而这个空间可能不能放下其他文件,这样就会产生碎片。右边的实现是由于文件名的长度不固定,所以我们希望每个目录项的大小是固定的,其中包含了一个指向文件名起始地址的指针,然后是文件的相关属性,所有的文件名都存放在另一个区域(堆)。

1.11 FAT32中长文件名目录项格式

11

说明:其中有三处地方分别记录了文件名。前5个字符(采用的是Unicode编码,则两个字节代表一个字符)保存文件名的前5个字符,于是一共可以保存13个字符。如果一个长文件名目录项不够,则需要用第二个。在第一个字段中第6位来记录是否是最后一个目录项。下面看一个例子,文件名为The quick brown.fox,采用Unicode编码。
12

说明:其实这样一个文件占用了三个目录项。第一个目录项就是短文件名目录项,后面的两个目录项主要保存文件名。再看一个更长的文件名文件例子:
13

说明:这里的文件名更长,需要占用五个目录项。

二、文件操作的实现

这里主要是以UNIX操作系统为例。

2.1 文件操作的实现

  • 创建文件
    建立系统与文件的联系,实质是建立文件的FCB

    • 在目录中为新文件建立一个目录项(在UNIX中还需要i节点),根据提供的参数及需要填写相关内容
    • 分配必要的存储空间
  • 打开文件
    根据文件名目录中检索,并将该文件的目录项读入内存,建立相应的数据结构,为后续的文件操作做好准备。打开文件后一般会返回一个值,这个值一般叫文件描述符或文件句柄,之后的操作是通过文件描述符来进行的。

2.2 文件操作:建立文件

create(文件名,访问权限)

  • 1、检查参数的合法性
    例如:文件名是否符合命名规则;有无重名文件,合法则进行下一步,否则报错返回。
  • 2、申请空闲目录项,并填写相关内容
  • 3、为文件申请磁盘块
  • 4、返回

2.3 文件操作:打开文件

为文件读写做准备:给出文件路径名,获得文件句柄(file handler)或文件描述符(file descripter),需将该文件的目录项读到内存fd = open(文件路径名,打开方式)

  • 1、根据文件路径名查目录,找到目录项(或i节点号)
  • 2、根据文件号查系统打开文件表,看文件是否已被打开,如果是,则共享计数加一,否则,将目录项(或i节点)等信息填入系统打开文件表空表项,共享计数置为一。
  • 3、根据打开方式、共享说明和用户身份检查访问合法性
  • 4、在用户打开文件表中获取一空表项,填写打开方式等,并指向系统打开文件表对应表项,返回信息:fd(文件描述符,是一个非负整数,用于以后读写文件)

2.4 文件操作:指针定位

seekfd, 新指针位置):系统为每个进程打开的每个文件维护一个读写指针,即相对于文件开头的偏移地址(读写指针指向每次文件读写的开始位置 ,在每次读写完成后,读写指针按照读写的数据量自动后移相应的数值)

  • 1、由fd查用户打开文件表,找到对应的表项
  • 2、将用户打开文件表中文件读写指针位置设为新指针的位置,供后继读写命令存取该指针处文件内容。

2.5 文件操作:读文件

read(文件描述符,读指针,要读的长度,内存目的地址)

  • 1、根据打开文件时得到的文件描述符,找到相应的文件控制块(目录项),确定读操作的合法性,读操作合法则进行下一步,否则出错处理。
  • 2、将文件的逻辑块号转换为物理块号。根据参数中的读指针、长度与文件控制块中的信息,确定块号、块数、块内位移
  • 3、申请缓冲区
  • 4、启动磁盘I/O操作,把磁盘块中的信息读入缓冲区,再送到指定的内存区(多次读盘)
  • 5、反复执行3、4直至读出所需数量的数据或读至文件尾

三、文件系统的管理

3.1 文件系统的可靠性

可靠性:抵御和预防各种物理性破坏和人为性破坏的能力

  • 块坏问题
  • 备份
    通过转储操作,形成文件或文件系统的多个副本。

3.2 文件系统备份

  • 全量转储
    定期将所有文件拷贝到后援存储器
  • 增量转储
    只转储修改过的文件,即两次备份之间的修改。减少系统开销。
  • 物理转储
    从磁盘第零块开始,将所有磁盘块按序输出到磁带
  • 逻辑转储
    从一个或几个指定目录开始,递归地转储子给定日期后所有更改的文件和目录

3.3 文件系统一致性

  • 问题的产生:
    磁盘块-->内存-->写回磁盘块
    若在写回之前,系统崩溃,则文件系统出现不一致

  • 解决方案
    设计一个使用程序,当系统再次启动时,运行该程序,检查磁盘块和目录系统

3.4 磁盘块的一致性检查

14

说明::一致性检查时,检查所有的文件和空闲块,检查完之后可能会出现四种结果。第一种是一个一致性的结果,即某个磁盘块要么分配给了某个文件,要么在空闲块中。第二种结果是在空闲块中找不到,但是也没有分配给某个文件,于是我们通过在空闲块表中将磁块标记为一来解决。第三种结果是某个磁盘块在空闲块表中出现了两次,同样是不合理的,对这一位进行修改。最后一种结果是在两个文件中出现,这种情况较为复杂,我们应该在空闲块中找一个,然后将其中一个磁盘块内容拷贝到这个空闲块中,然后将使用块表中的这一位减一。

3.5 文件系统的写入策略

对某些文件做出了修改,那么什么时候将修改后的内容写入到文件中。这里需要考虑文件系统一致性和速度。下面有几种写入策略

  • 通写(write-through
    内存中的修改立即写到磁盘。缺点是速度性能差,如FAT文件系统。
  • 延迟写(lazy-write
    利用回写(write back)缓存的方法得到高速。其缺点就是可恢复性较差,可能会导致信息丢失
  • 可恢复写(tansaction log
    采用事务日志来实现文件系统的写入,既考虑安全性,又考虑速度性能,如NTFS
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 一、文件与文件系统 1.1 文件是什么 文件是对磁盘的抽象 所谓文件是指一组带标识(标识即为文件名)的、在逻辑上有...
    yjaal阅读 2,669评论 0 3
  • 21.1文件系统的概念 21.1.1文件系统和文件 ■文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访...
    龟龟51阅读 719评论 0 4
  • 1、第八章 Samba服务器2、第八章 NFS服务器3、第十章 Linux下DNS服务器配站点,域名解析概念命令:...
    哈熝少主阅读 3,707评论 0 10
  • Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本...
    偷风筝的人_阅读 3,241评论 1 17
  • 白先生是一个有些大男子主义的人,他能够在可爱和霸道之间随时切换。 这些日子以来白先生卖萌的次数增多了,比如晚上给他...
    爱吃柚子的王少女阅读 241评论 0 0