概述

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

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

域(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. VSCode-WSL配置 C++ —— 以OpenCV4为例

    生成并编辑c_cpp_properties.json 命令窗口输入:>C/C++: Edit Configurations(JSON),就会自动生成该文件 在includePath中加上需要in ...

  2. WPF_MVVM框架(5)

    1.NuGet引用MVVM框架包 引入该框架包之后, 默认会在目录下创建ViewModel层的示例代码 2.第二步, 通过在MainViewModel中创建一些业务代码, 将其与MainWindow. ...

  3. ICPC2020 沈阳

    F-Kobolds and Catacombs 牛客网 题意:对于\(n(n<=10^6)\)个数的序列,划分区间,每个区间内部从小到大排序,要求最后整个序列单调不下降,求最多可以划分为多少个区 ...

  4. JavaScript逗号运算符的用法

    var a = 3, b b = (a++, a) 与 var a = 3, b b = a++ 区别

  5. Unity Shader实现《死亡搁浅》扫描效果!

    https://mp.weixin.qq.com/s/4YwjxScnU0zprjGekAyvsw

  6. 'umi' 不是内部或外部命令,也不是可运行的程序 或批处理文件或umi: command not found

    问题 'umi' 不是内部或外部命令,也不是可运行的程序 或批处理文件或umi: command not found 解决方法 参考链接:https://blog.csdn.net/weixin_40 ...

  7. 2357. 使数组中所有元素都等于零 (Easy)

    问题描述 2357. 使数组中所有元素都等于零 (Easy) 给你一个非负整数数组 nums .在一步操作中,你必须: 选出一个正整数 x , x 需要小于或等于 nums 中 最小 的 非零 元素. ...

  8. 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组

    var threeSum = function(nums) {let ans = [];const len = nums.length;if(nums == null || len < 3) r ...

  9. ORACLE备份脚本(3-RMAN0级全备)

    创建目录 mkdir  -p  /bak/level0 mkdir  -p  /bak/arch chown -R oracle:oinstall  /bak/ vi  rmanlevel0.sh # ...

  10. less的基本用法

    学习less详细文章链接 https://juejin.cn/post/6844903520441729037#heading-9