考研408--操作系统--day11--文件管理&逻辑物理结构&目录&存储空间管理

(以下内容全部出自上述课程)

目录

  • 初识文件管理
    • [1. 文件属性](#1. 文件属性)
    • [2. 文件数据怎么组织?](#2. 文件数据怎么组织?)
    • [3. 文件之间怎么组织?](#3. 文件之间怎么组织?)
    • [4. 操作系统应该提供哪些功能?](#4. 操作系统应该提供哪些功能?)
    • [5. 文件如何存放在外存?](#5. 文件如何存放在外存?)
    • [6. 其他](#6. 其他)
    • [7. 小结](#7. 小结)
  • 文件的逻辑结构
    • [1. 无结构文件](#1. 无结构文件)
    • [2. 有结构文件](#2. 有结构文件)
      • [2.1 顺序文件](#2.1 顺序文件)
      • [2.2 索引文件](#2.2 索引文件)
      • [2.3 索引顺序文件](#2.3 索引顺序文件)
      • [2.4 多级索引顺序文件](#2.4 多级索引顺序文件)
    • [3. 小结](#3. 小结)
  • 文件目录
    • [1. 文件控制块](#1. 文件控制块)
    • [2. 目录结构](#2. 目录结构)
      • [2.1 单级目录结构](#2.1 单级目录结构)
      • [2.2 两级目录结构](#2.2 两级目录结构)
      • [2.3 多级目录结构](#2.3 多级目录结构)
      • [2.4 无环图目录结构](#2.4 无环图目录结构)
    • [3. 索引结点](#3. 索引结点)
    • [4. 小结](#4. 小结)
  • 文件的物理结构
    • [1. 文件块、磁盘块](#1. 文件块、磁盘块)
    • [2. 文件分配方式](#2. 文件分配方式)
      • [2.1 连续分配](#2.1 连续分配)
      • [2.2 隐式链接](#2.2 隐式链接)
      • [2.3 显式链接](#2.3 显式链接)
      • [2.4 索引分配](#2.4 索引分配)
    • [3. 小结](#3. 小结)
  • [逻辑结构 vs 物理结构](#逻辑结构 vs 物理结构)
    • [1. 无结构文件](#1. 无结构文件)
      • [1.1 逻辑结构](#1.1 逻辑结构)
      • [1.2 物理结构](#1.2 物理结构)
    • [2. 顺序文件](#2. 顺序文件)
      • [2.1 物理结构](#2.1 物理结构)
      • [2.2 逻辑结构](#2.2 逻辑结构)
    • [3. 索引文件](#3. 索引文件)
      • [3.1 逻辑结构](#3.1 逻辑结构)
      • [3.2 物理结构](#3.2 物理结构)
    • [4. 小结](#4. 小结)
  • 文件存储空间管理
    • [1. 存储空间的划分与初始化](#1. 存储空间的划分与初始化)
    • [2. 存储空间管理](#2. 存储空间管理)
      • [2.1 空闲表法](#2.1 空闲表法)
      • [2.2 空闲链表法](#2.2 空闲链表法)
      • [2.3 位示图法](#2.3 位示图法)
      • [2.4 成组链接法(了解)](#2.4 成组链接法(了解))
    • [3. 小结](#3. 小结)

初识文件管理

1. 文件属性

我们正常使用电脑中的文件管理器,里面就放着我们日常使用的文件。

每个文件你点开他,都能看见一大堆的信息。

同一个文件夹下的文件不能重名 ,因为我们都是根据文件名来区分哪个文件是哪个文件的。

2. 文件数据怎么组织?

  • 无结构文件=流式文件:就类似于你直接建了一个文本文件在里面打字。
  • 有结构文件=记录式文件:就类似于你建立了一个excel文件。
  • 数据项:excel中的一个小格子。
  • 记录 :excel中的一行。

    因为有结构文件有很多种存放方式,比如顺序啊链式啊什么的,我们之后就要讨论用哪种存放方式存数据。

3. 文件之间怎么组织?

文件间就是我们说的C盘D盘,哪个文件夹包含哪个文件夹。

4. 操作系统应该提供哪些功能?

  • 创建文件:我们平时右击桌面就可以新建文件,底层是操作系统帮我们调用函数创建的新文件。
  • 读文件:双击打开文件的时候,也是操作系统调用函数帮助我们打开的文件。
  • 写文件:我们在文件中打字,也是操作系统调用底层函数帮我们写上数据的。
  • 删除文件 :同上,只不过我们不知道操作系统帮助我们实现功能而已。

    通过这几个比较基础的功能,就可以叠加实现更加复杂的功能。
    比如说复制文件的本质就是新建文件,读入原文件内容,再写入同样的内容。

5. 文件如何存放在外存?

存入外存,这就涉及到了物理地址。(物理就是摸得到的东西,比如硬盘就可以摸到)

  • 操作系统把存储空间分成了一块一块的空间用来存储数据。(所以一个大房子被一个人住也是占了一个大房子的面积)
  • 内存-->外存,这就涉及到了逻辑地址与物理地址映射的问题,怎么找到数据...神马的。
  • 映射问题大差不差,具体可见:基本地址变换机构
  • 为了便于外存和内存一一对应,所以大致来看,两者差不多。

    很多块,就会出现连续不连续的问题,就会出现碎片的问题,还会涉及到文件怎么存的问题。
    具体和内存大差不差,具体可见:连续分配管理方式

6. 其他

7. 小结

文件的逻辑结构

1. 无结构文件

无结构,没什么好讨论的,所以重点在下文的有结构的文件上。

2. 有结构文件

  • 关键字:就是不能重复的字段,类似于学号啊什么的。
  • 数据项:就是一个格子,格子里面记录的数据。
  • 记录 :就是一行格子。
  • 定长记录 :类似于我们用mysql建立表的时候添加的固定字长。(比如电话只能11位)
  • 可变长记录 :比如图中的特长,有的人可以有很多,有的人可以没有。

    逻辑结构上可以分为这三种:
  • 顺序文件:像日记本,只能从头翻;
  • 索引文件:像带目录的电话本,一查就找到;
  • 索引顺序文件 :索引顺序文件:像分类快递柜,先找区再找人。

2.1 顺序文件

  • 链式存储:比如一堆乱序但是标了页码的文件。

  • 顺序存储:比如你写日记,只能写完今天的才能再写明天的。

  • 串结构:按时间排序。

  • 顺序结构 :按关键字排序。(比如学号的大小一直都是确定的)

    提到顺序文件,基本都默认是使用顺序存储的,所以把链式存储pass掉。

  • 可变长记录:比如你的日记一天长一天短,就没办法根据天数判断出第n天是第几页。

  • 定长记录:你规定日记只能一天写一页,这样就可以根据天数找到页数。

  • 串结构:如果你这一天突然想修改前一天的日记,按照时间排序,昨天的就排到今天的后面了,有误差所以无法快速找出。

  • 顺序结构:你给每篇日记按照第n天编号为n,所以就可以快速找到这天的笔记了。

缺点 :因为都是按照顺序来的,所以你的日记就没办法很方便地在两天中间再添加其他内容了。

2.2 索引文件

  • 索引文件:比如一本书。
  • 索引表-定长:这本书的目录。

缺点:如果这本书非---常厚,那么目录也就只能变得特----别长。

2.3 索引顺序文件

就是上面两种的结合。

  • 索引顺序文件:超厚大书超详细目录。

  • 索引表 :把超厚大书过于详细的目录通过分组整合成小的目录。

  • 顺序体现:小目录下的详细目录是顺序排列的。(如图第二列的表)

  • 索引体现 :小目录是详细目录的索引。

  • 顺序文件:(最好1次找到+最差10000次找到)/2次查找次数=平均查询5000次

  • 索引顺序文件 :10000分为100组100个记录。

    先找组:(最好1次找到+最差100次找到)/2次查找次数=平均查询50次

    再找具体记录:(最好1次找到+最差100次找到)/2次查找次数=平均查询50次

    所以相加就是平均100次才能找到想要的记录。

  • 更多记录怎么办? :答案是套娃!

2.4 多级索引顺序文件

纯套娃:

  • 第一列:相当于书上的章
  • 第二列:相当于书上的节
  • 第三列:相当于书上的x.x.x节

3. 小结


文件目录


1. 文件控制块

目录 :有结构文件,所以也可以用表格的形式表现出来。

因为我们之前说过我们都是按照名字来找文件的,所以这里文件名就相当于是关键字

  • FCB :记录=一行,就是一个文件控制块。

    这里对标上文的操作系统提供的功能,反正都是创建删除等的操作。

2. 目录结构

2.1 单级目录结构

类似于一个盘只让你建立平级的文件夹,不可以在文件夹里再建文件夹。

这样就只能一个用户用,因为根本区分不了用户的不同,而且一个用户这么用也不是很便利。

2.2 两级目录结构

一个用户自己相当于一个文件夹,他自己也只能建立平级文件夹。

虽然能够分出不同用户使用,但是对于用户来说还不是很便利。

2.3 多级目录结构

就是现在我们用的目录结构,文件夹随便儿建,只要不在同一个文件夹里就可以重名。

  • 绝对路径 :只能从根目录开始往下找。
  • 相对路径 :可以根据当前目录的位置来寻找文件。

2.4 无环图目录结构

之前的目录结构无法实现两个不同的用户可以访问同一个内容,所以又出现的无环图目录结构。

两个用户的FCB可以同时指向同一个文件,这样这两个用户打开自己的这个文件时,访问到的都是被指向的文件。

  • 共享计数器 :表示这个文件被几个人共享。
    如果一个用户删除了自己共享的这个文件,源文件并不会被删除,只是把用户电脑上的映射删掉了,同时共享计数器-1.
    如果有用户修改了这个文件,其他用户也能看见被修改的内容。(有点儿像在线文档)

3. 索引结点

因为FCB这一行中包含的内容太多了,很多内容是我们用户用不到的,所以就可以把这个表头精简一下,这样搜索速度就可以更快了。

4. 小结

文件的物理结构


1. 文件块、磁盘块

内存的内容,具体可见:内存

  • 用户:比如你编写代码像输出a的值。(逻辑地址)
  • 操作系统 :根据逻辑地址转为物理地址,找到这个值,把值返回给你。

2. 文件分配方式

2.1 连续分配

空闲块连在一起。

  • 逻辑地址-->物理地址:
    物理块号=起始块号+逻辑块号-->不可能从头开始就有连续位置,所以需要加上起始块号
    块内地址:因为内存和外存分的块大小相同,所以不用变。
    类似于:你从逻辑搬家搬到物理,就变了个房子位置,但是里面的装修还都是一样的。
  • 支持顺序访问和直接访问

    因为连在一起,所以读写都很方便。

    如果一个占了3个块的文件想要再添一个块的数据,但是它后面没有空闲块了,因为必须连续分配,所以就必须先把前3块复制到后面有4个连续空闲块的位置,然后再把想新添的内容填到后面的空闲块上。
    无论如何:必须保持连续!

    因为太依赖连续了,所以肯定有很多零零散散的空闲块,就很浪费空间,如果想把他们紧凑移到一起还很浪费时间。

2.2 隐式链接

空闲块用指针链接在一起,很好地解决了空闲块分散的问题。

  • 指针透明:就是用户看不见指针,所以才叫隐式链接。
  • 因为用户都不知道哪儿指向哪儿,所以只支持顺序访问,不支持直接访问(也就是随机访问)

    想拓展文件,就直接放进一个空闲块里然后用指针链接上就可以,避免了空闲块的空间浪费问题。

2.3 显式链接

多了一个FAT表,知道谁指向谁了,所以叫做显式链接。

知道每块指向的下一块是哪块之后,就支持直接访问了。

2.4 索引分配

有索引两个字一定会有索引表,索引块就是索引表放在了哪块里,就直接去那块找目录查自己想要的文件在哪个物理块里。

因为可以直接找到物理块号,所以也支持直接访问。

如果索引表太大,一块装不下怎么办?

又是套娃,链接:

  • 分好几个索引块,把索引块链接起来

    纯套娃:
  • 章-节-小节的分法

    顶级索引未读入内存,就需要K+1次读磁盘操作。

    混合(大一统):
  • 直接+间接
  • 直接:就一查就查到索引了
  • 一级间接:得查两次
  • 二级间接:得查三次
  • 当然,如果顶级索引没被读入内存,每种都需要+1次读磁盘

3. 小结

逻辑结构 vs 物理结构

1. 无结构文件

1.1 逻辑结构

逻辑结构就是我们能看的到的

我们数到第16个字符是o,想用代码显示出来

16就是逻辑地址,所以最后输出的也是o

1.2 物理结构

物理结构就是操作系统看到的

它调用函数才知道我们要的东西在什么位置,然后才能调出来给我们

2. 顺序文件

2.1 物理结构

可以把操作系统看成商家,对于商家来讲,可以有很多种方式放货物。

连续分配:

  • 类似于按照供货商分配货物

    链接分配:
  • 类似于有空我就塞进去,先不浪费空间,位置记上就好

    索引分配:
  • 类似于我都随便儿塞,但是我有记录哪里是哪里就好

2.2 逻辑结构

切换到我们的视角:

  • 顺序存储:我们看得到商家按编号给我们发出货物,刚好按顺序到
  • 链式存储:我们看得到商家发出的货物根据运输速度不同,到达的顺序也不同,但是编号还是在的
  • 但是对我们来说,我们看不到商家的货都放在哪里对吧
  • 这个就是凑巧了,我们用链式商家也是链接分配

3. 索引文件

3.1 逻辑结构

我们看到的是目录是目录,货物是货物

3.2 物理结构

操作系统看到的是:拆完了全塞进货架

4. 小结

  • 逻辑结构:我们看得到的,文件对我们来说看得见,所以逻辑结构都是XX文件
  • 物理结构 :操作系统决定自己的货物怎么分配,所以都是XX分配、XX链接

文件存储空间管理


1. 存储空间的划分与初始化

就是划分C盘、D盘。

2. 存储空间管理

2.1 空闲表法

首次适应等算法,具体可见:动态分区分配算法

  • 空闲表法 :连续的空闲块组成一个区。

2.2 空闲链表法

  • 空闲盘块链:按块连起来
  • 空闲盘区链 :把连续的块变为区连在一起


2.3 位示图法

0表示空闲,1表示已分配。

每15块为一组(第一行),以此类推。

2.4 成组链接法(了解)








3. 小结

相关推荐
cly117 小时前
Ansible自动化(十三):调试与优化
数据库·自动化·ansible
QQ_43766431417 小时前
redis相关命令讲解及原理
数据库·redis·缓存
萤丰信息17 小时前
开启园区“生命体”时代——智慧园区系统,定义未来的办公与生活
java·大数据·运维·数据库·人工智能·生活·智慧园区
TDengine (老段)18 小时前
TDengine Rust 连接器进阶指南
大数据·数据库·物联网·rust·时序数据库·tdengine·涛思数据
二哈喇子!18 小时前
MySQL数据库操作命令【SQL语言】
数据库·sql·视图与索引
China_Yanhy18 小时前
AWS S3 深度配置指南:每一栏每个选项有什么作用
java·数据库·aws
yong999018 小时前
基于MATLAB的大变形悬臂梁求解程序
前端·数据库·matlab
施嘉伟18 小时前
Oracle SQL Profile 固化执行计划实战说明
数据库·sql·oracle
Dr.Alex Wang18 小时前
Google Firebase 实战教学 - Streamlit、Bucket、Firebase
数据库·python·安全·googlecloud