概述

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

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

域(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. Assembler Instructions with C Expression Operands

    Using the GNU Compiler Collection For gcc version 4.9.3 (GNU Tools for ARM Embedded Processors) In a ...

  2. Anaconda配置环境变量

    环境变量里写自己的Anaconda下载目录,找到对应的文件位置,然后把这三个上移到最上面,点击确定即可配置完成 出现这个环境变量就成功啦 在输入conda 出现这个就表明你的Anaconda已经好了

  3. linux 安装ssl 失败原因

    配置文件成功的情况下打不开:开放端口 设置端口 server { listen 443 default ssl; //需要加不然会显示404 default ssl server_name 域名; s ...

  4. nginx auth_basic uwsgi 目录简易认证。

    mkdir /etc/nginx/conf.d/auth_pwd touch /etc/nginx/conf.d/auth_pwd/xx.pwd htpasswd -c -d /etc/nginx/c ...

  5. sql server 常用高级查询sql

    数据源:表:coursename kecheng fenshu张三 语文 81张三 数学 75李四 语文 76李四 数学 90王五 语文 81王五 数学 100王五 英语 90赵六 语文 88赵六 数 ...

  6. Java 18-方法 认识方法与方法定义

    1.认识方法 1)什么是方法 Java方法是语句的集合,它们在一起执行一个功能; 方法是解决一类问题的步骤的有序组合; 方法一般包含于类中; 方法在程序中被创建,在其他地方被引用2 2)方法的有点 使 ...

  7. vector 搜罗最强版

    vector 常见用法(以int类型为例) https://www.cnblogs.com/YJthua-china/p/6550960.html 概括描述总体vector,包括内存的探讨 https ...

  8. requests断点续传功能

    requests取消ssl验证会出现告警InsecureRequestWarning,取消告警如下: import urllib3urllib3.disable_warnings(urllib3.ex ...

  9. WDA学习(24):Context Menu使用

    1.17 UI Element:Context Menu使用 本实例测试创建Context Menu. 1.创建Component,View: V_CONTEXT_MENU; 2.创建Context节 ...

  10. hive支持的压缩算法

    压缩格式的设置 set mapred.output.compression= 压缩格式 工具 算法 扩展名 是否支持分割 Hadoop编码/解码器 default deflate .deflate N ...