《操作系统概念精要》之文件系统篇(二)- 文件系统实现

文件系统结构

文件系统本身通过由许多不同层组成,每层的设计利用更低层的功能,创造新的功能。


文件系统结构.png

I/O控制层(I/O control):包括设备驱动和中断处理程序,以在主内存和磁盘系统之间进行信息交流。
基本文件系统(basic file system): 本层需要发送通用命令给设备驱动层,并且还要管理内存缓冲区保存各种文件系统,目录和数据块的缓存
文件组织模块(file-organization module): 知道文件及其逻辑块以及物理块。由于知道所用的文件系统的类型和文件位置,文件组织可以将逻辑块地址转换成物理地址以供基本文件系统传输。
逻辑文件系统(logical file system): 管理元数据信息。元数据包括文件系统的所有结构,而不包括实际数据,逻辑文件系统管理目录结构,以便根据给定的文件名称为文件组织模块提供所需的信息。

文件系统实现

概述

稳健性系统的实现需要采用多个磁盘和内存的结构。虽然这些结构因操作系统和文件系统而异,但是还是有些通用原则的。
在磁盘上,文件系统包括以下信息:

  • 引导控制块:指示如何启动存储在哪里的操作系统,如果磁盘不包含操作系统,那么这部分为空,一般为启动分区的第一个扇区。 Unix上称为引导块, Windows系统称为分区引导扇区
  • 卷控制块: 包括卷(分区)的详细信息,如分区的数量和块的大小,空闲块的数量和指针,空闲的文件控制块(FCB)和FCB指针。Unix称为超级块,Windows称为主控文件表
  • 文件系统的目录结构和用于组织文件。Unix中 包含 文件名和相关的inode的号码。
  • 每个文件的FCB 包括该文件的许多信息。它有一个唯一的标识号。以便与目录条目相关联。

在内存中的信息:

  • 内存的安装表: 包含每个安装卷的信息。
  • 内存中的目录结构的缓存含有最近访问的目录的信息。
  • 整个系统的打开文件表。
  • 每个进程的打开文件表。
  • 缓冲区保存的文件系统的块。

文件的创建过程
为了创建新的文件,应用程序调用逻辑文件系统。逻辑文件系统直到目录结构的格式。它会分配一个FCB。然后将相应的目录读到内存,然后使用新的文件名和FCB进行更新,将它写会磁盘。

文件的读写过程

  • 打开文件的实际操作:
    一旦文件被创建,他就可以进行I/O操作。不过他首先应该被打开,系统调用open()将文件名传递到逻辑文件系统。系统首先搜索整个系统的打开文件表,以便确定这个文件是否被其他进程使用。
    如果是,则在进程的打开文件表中创建一个条目,并让他指向现有的系统的打开文件表,进程的打开文件表的计数加1。
    如果没有,则根据给定的文件名来搜索目录结构。(部分的目录结构通常缓存在内存中,以加快目录操作。)找到文件后,它的FCB 会被复制到内存的整个系统的开发文件表中。该表不但存储FCB,还跟踪打开文件进程的数量。接下来,在整个进程的打开文件表中,会创建一个条目,指向整个系统打开文件条目的一个指针,以及其他域。这些域可能包含文件系统的当前位置的指针和打开文件的访问模式。随后,进程的打开文件表的计数加1。
  • open() 文件最终返回一个文件指针。以后所有的操作都用这个指针,UNIX 中称为文件描述符, windows 称为文件句柄
  • 进程关闭文件时,它的单个进程的条目会被删除,并且系统的打开文件表中这个文件的打开计数会被减1。当文件计数为0时,他把文件的元数据写入此案。然后系统的打开文件表中删除此文件的条目。

分区与安装

磁盘布局可以有多种,具体取决于操作系统。一个磁盘可以分成多个区,或者一个卷跨越多个磁盘的多个分区。后者就是RAID的形式。

分区可以使原始的,什么文件系统都没有,什么都没有的时候就是原始磁盘。UNIX的交换分区就是一个原始磁盘, 有些数据库也使用原始磁盘,并且格式数据,以满足他们的要求。

引导的信息可以存储在各自分区中,而且可以有自己的格式,不一定和要加载的文件系统的保存结构一样。因此在这个阶段,还没有加载操作系统,更不会有文件系统。因此引导信息通常是一系列的块,可作为映像加载到内存。映像一般的执行从预先定义的位置执行。这个引导的信息里面应该包含应该以怎样的结构来解析接下来的文件系统信息,从而找到内核,并进行执行。
许多系统可以有多个引导程序,因为可以安装双系统。

根分区,包括操作系统内核其他文件系统,在启动时安装,其他卷可以在引导时自动安装以后安装。

虚拟文件系统

现代操作系统必须同时支持多中类型的文件系统,但是操作系统如何才能实现将多个类型的文件系统集成到目录结构中呢?用户如何在多个文件系统中无缝的迁移?

在大多数的操作系统中,都支持了在不同文件类型可通过相同的类型来实现。它也包括网络文件系统类型。
数据结构和程序用于隔离基本系统调用的功能和实现细节。因此,文件系统的实现由三个主要层组成。

  • 第一次为文件系统接口层。基于系统调用open, read, write 和close。
  • 虚拟文件系统层(VFS)。他提供两个功能:
    1. 通过定义一个清晰的VFS接口,将文件系统的通用操作和实现分开。VFS提供多个通用接口,允许透明的访问本地安装的不同类型的文件系统。
    2. 它提供了一种机制,唯一表示网络上的文件。VFS 基于称为虚拟节点的文件表示结构, 虚拟节点包含一个数字指示符,唯一表示网络上的一个文件。UNIX中采用inode。内核为每个活动节点保存一个vnode结构。
虚拟文件系统.png

VFS根据文件系统的类型调用特定的操作以便处理本地请求。通过NFS协议程序来处理远程请求。

目录的实现

数据结构的选择

  1. 线性列表:不合适。频繁的搜索称为问题。
  2. 哈希表:哈希表根据文件名获取一个值,并返回线性列表内的一个元素指针。减少了目录搜索的时间。当发生冲突的时候可以使用链式哈希结构。

分配方法

创建文件时,如何在空闲的磁盘上为一个新文件分配空间?
一般由是那种方法: 连续,链接和索引。

连续分配
连续分配表示每个文件在磁盘上占有一组连续的块。磁盘地址为一组线性结构。
问题:在给每个分配的时候,容易在中间产生碎片。 还有无法估算一个文件有多大, 估算的很小,没有办法扩展。

链接分配
解决了连续分配的所有问题,每个文件都是磁盘块的链表。文件的磁盘块可能分布在磁盘的任何地方,通过链表来进行连接。
问题:只能顺序的访问文件,要找到第i个块,必须从头开始。还有每次磁盘块的最后4个字节需要保存下一个磁盘的地址。而且如果链断了,就全部完了。

索引分配
索引分配通过将所有指针放在一起,称为索引块。
每个文件都有自己的索引块。这是一个磁盘块地址的数组。索引块的第一个条目指向文件的第i块。目录包含索索引块的地址。

索引分配.png

空闲空间管理

由于磁盘空间有限,如果可能,需要将删除文件的空间重新用于新文件。为了跟踪空闲磁盘空间。系统需要维护一个空闲空间列表。空闲空间列表记录了所有空闲磁盘空间。

位图
空闲空间列表按 位图(bitmap)来实现。每个块用一个位来表示。块是空闲的,位为1;如果块是分配的,位为0。

链表
空闲空间将所有的空闲磁盘块用链表连接起来。


空闲列表方法的一个改进是,在第一个空闲块中存储n个空闲块的地址
这些块的前n-1个确实为空。
最后一块包含另外n个空闲块的地址。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,875评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,569评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,475评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,459评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,537评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,563评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,580评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,326评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,773评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,086评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,252评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,921评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,566评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,190评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,435评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,129评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,125评论 2 352

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,292评论 0 9
  • 一、文件与文件系统 1.1 文件是什么 文件是对磁盘的抽象 所谓文件是指一组带标识(标识即为文件名)的、在逻辑上有...
    yjaal阅读 2,713评论 0 3
  • 前言 北大《操作系统原理》[https://www.coursera.org/learn/os-pku]课堂笔记,...
    尤汐Yogy阅读 2,653评论 0 11
  • 21.1文件系统的概念 21.1.1文件系统和文件 ■文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访...
    龟龟51阅读 723评论 0 4
  • Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。 内核、shell和文件系统一起形成了基本...
    请爱护小动物阅读 2,564评论 0 22