概述

文件特性:可长期存储;可在进程间共享;有特定结构。

文件系统提供对文件操作的功能接口:创建、删除、打开、关闭、读和写。

域(field):基本数据单元,一个域包含一个值。

记录(record):一组相关域的集合。

文件(file):一组相似记录的集合,可通过名字访问。

数据库(database):一组相关数据的集合,数据元素间存在明确的联系。

使用文件时需要的典型操作:

retrieve_all:检索文件全部记录。

retrieve_one:检索一条记录。

retrieve_next:检索当前访问记录后面的一条记录。

retrieve_previous:检索当前访问记录前面的一条记录。

insert_one:在文件中插入一条新记录。

delete_one:删除一条已存在的记录。

update_one:检索一条记录,更新该记录内容并写回到文件。

retrieve_few:检索部分记录。

文件管理系统:为使用文件的用户和应用程序提供服务,是访问文件的唯一方式。

FMS目标:

1.满足数据管理的要求和用户需求。(最小需求如下)

-每个用户应能创建、删除、修改和读取文件。

-受控访问其他用户文件。

-控制允许对用户文件进行哪种类型的访问。

-能在文件之间移动数据。

-备份文件和恢复文件。

-通过名字访问文件。

2.最大限度保证文件中数据有效。

3.优化性能。

4.提供I/O支持。

5.减少数据损坏的可能性。

6.为进程提供标准I/O接口例程集。

7.为多个用户提供I/O支持。

文件系统软件架构:

设备驱动:负责启动设备I/O操作,处理I/O请求的完成。

基本文件系统:处理外存和内存缓冲区中数据的位置。

基本I/O管理程序:负责所有文件I/O的初始化和终止。

逻辑I/O:使用户和应用程序能访问记录。

文件组织和访问

文件组织原则:快速访问、维护简单、易于修改、可靠性和节约存储空间。

基本组织方式:

1.堆:数据按照到达的顺序收集,每条记录由一串数据组成。最简单。

2.顺序文件:每条记录使用一种固定格式,其中有一个关键域唯一标识每条记录。最常用。

3.索引顺序文件:在顺序文件的基础上,增加了支持随机访问的文件索引和溢出(overflow)文件。索引文件中每条记录由两个部分组成:关键域和指向主文件的指针。查找文件时先查找索引文件中关键域,能匹配直接根据对应的指针定位到主文件对应记录位置;不能则根据索引文件找到距离目前位置最近的主文件位置。

4.索引文件:访问文件只能通过索引。增加新记录时需要更新所有的索引。

5.直接文件或散列文件:直接访问磁盘中任何一个地址已知的块。

B树例子:

每一层的节点数据域左右都有指针域,指针域指向下一层的节点,以指向的节点为根的子树中所有的值不大于指针域所在的节点的值(对于左指针域而言),不小于指针域所在的节点的值(对于右指针域而言)。

文件目录

文件目录包含关于文件的信息,其自身也是一个文件。

可在目录上执行的操作:

1.查找:找到文件对应目录项。

2.创建文件:新增一个目录项。

3.删除文件:删除对应目录项。

4.显示目录:查看目录内容。

5.修改目录:修改目录项内容。

路径名:从根目录到某个特定文件经过的所有目录名加上该文件名构成该文件的路径名。

工作目录:当前程序所在的目录路径。

文件共享

访问权限:无、知晓存在、执行、读、追加、更新、改变保护权限和删除文件。

用户划分:特定用户、用户组和全部用户。

记录组块

组块组织方式:

1.定长组块:定长的记录保存在一个块中。

2.变长跨越式组块:变长记录可以横跨多个块存储。(存在一个块保存多个文件的部分内容的情况)

3.变长非跨越式组块:变长记录不能横跨多个块存储。(不存在一个块保存多个文件的部分内容的情况)

外存管理(辅存 在此视为 外存)

文件分配

1.预分配:在发出创建文件的请求时,声明该文件的最大尺寸。

2.动态分配:在需要时才给文件分配空间。

文件分区

1.大小可变的大规模连续分区:能提供较好的性能。

2.块:提供更多的灵活性。

连续分区可采用的策略

1.首次适配

2.最佳适配

3.最近适配:选择与前面分配给该文件的组块最近的组。为提高局部性。

文件分配方法

1.连续分配:创建文件时,分配一组连续的块。存在外部碎片。

2.链式分配:基于单个块,链中的每块包含指向下一块的指针。局部性原理不适用。

3.索引分配:每个文件在文件分配表中都有一个一级索引,分配给该文件的每个分区自索引中都有一个表项。可克服前两种分配方式中存在的问题之一。如图

空闲空间的管理方式

1.位表:使用一个向量,每一位对应磁盘中每一块,0表示空闲,1表示已使用。较容易找到连续空闲块、占用空间较小。

2.链接空闲区:空闲区通过指向下一个空闲区的指针和记录下一个空闲区的长度链接成串。出现碎片。

3.索引:将空闲区看作文件,使用索引。

4.空闲块列表:每块指定一个序号,所有空闲块的序号保存在磁盘的一个保留区中。

卷是逻辑磁盘。一组在外存上可寻址的扇区集合,OS 或者应用程序用来存储数据。物理存储设备上不需要连续。

参考

William Stallings. 操作系统——精髓与设计原理(8th).

OSIDP-文件管理-12(end)的更多相关文章

  1. linux面试题2

    1. 在Linux系统中,以文件的方式访问设备 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统 3. Linux文件系统中每个文件用inode来标识 4.  链接分为 ...

  2. Oracle DBA 的常用Unix参考手册(一)

    作为一名Oracle DBA,在所难免要接触Unix,但是Unix本身又是极其复杂的,想要深刻掌握同样很不容易.那么到底我们该怎么入手呢?Donald K Burleson 的<Unix for ...

  3. 【转】33 个 2017 年必须了解的 iOS 开源库

    1.IGListKit,作者是Instagram Engineering Instagram 程序员做的,IGListKit 是数据驱动的 UICollectionView 框架,为了构建快速和可扩展 ...

  4. 33 个 2017 年必须了解的 iOS 开源库

    本文翻译自Medium,原作者为Pawe? Bia?ecki 照片版权:(Unsplash/Markus Pe) 你好,iOS 开发者们!我的名字叫 Pawe?,我是一个独立 iOS 开发者,并且是  ...

  5. 33 个 2017 年必须了解的 iOS/swift 开源库第三方库

    本文翻译自Medium,原作者为 Paweł Białecki&lt;img src="https://pic3.zhimg.com/v2-c786777447261347b0d97 ...

  6. python 各模块

    01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...

  7. Python Standard Library

    Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...

  8. 在mybatis中写sql语句的一些体会

    本文会使用一个案例,就mybatis的一些基础语法进行讲解.案例中使用到的数据库表和对象如下: article表:这个表存放的是文章的基础信息 -- ------------------------- ...

  9. Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作

    (11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require ...

  10. java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis

    A 调用摄像头拍照,自定义裁剪编辑头像 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技术:313596790freemaker模版技术 ,0个代码不用写 ...

随机推荐

  1. 【Windows】IP 地址变为 169.254.x.x 的解决方法

    最近每次开机 IP 地址都会自动跳至 169.254.x.x 段,连接不上网络,设置了固定 IP 也会跳段.因此找到以下解决方法: 『IP地址变成169.254.x.x 和固定ip两个IP地址的解决办 ...

  2. phpstorm go py 30天无线试用

    1.关闭软件(建议先导出设置配置,操作会重置配置) 2.删除文件(一般AppData会被隐藏,需要通过查看选项里面打开查看隐藏文件,不懂自行百度) 删除目录 C:\Users\用户名\AppData\ ...

  3. file类型的input框获取文件

  4. 关于sql时间方面的处理

    查询大于时间两小时(例:订单设置两小时后过期 $res = Order::where(['status'=>0,'sid'=>1])->whereRaw("created_ ...

  5. DevExpress各大版本支持的VS版本和支持的.net版本图

    如下图所示,绿色Yes代表支持,红色No代表不支持.对于有些人觉得装了dev后,vs工具箱没有,一般都是以下两大问题:1.要么你的Dev的版本不支持你当前的VS版本,没有很正常.2.要么你的项目的.n ...

  6. 本地启动https服务器

    如果是vue-cli3项目,直接在vue.config.js中设置如下即可: devServer: { https: true } 如果是express项目,则根据这篇文章来操作即可:https:// ...

  7. Pycharm实现sqlite数据库可视化

  8. PaddleOcr-noavx离线部署文档

    PaddleOcr-noavx离线部署文档 环境与版本说明: 系统 架构 Anaconda3 PaddlePaddle PaccleOCR 银河麒麟Server V10 X86 Anaconda3-2 ...

  9. 1.JavaScript的实现与由来

    1.一个JavaScript由不同的部分组成 核心(ECMAScript)以下简称ES 文档对象模型(DOM) 浏览器对象模型(BOM) ES就是JavaScript的语法层面 而DOM则是浏览器解释 ...

  10. 实验:在Arduino上使用printf格式化输出到串口

    那么在pcDuino上如何用printf函数将数据从串口送出来呢?这就需要修改Arduino上的串口的库文件了.修改 步骤如下:  1.在 pcduino上arduino的库文件路径是:/usr /a ...