考研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. 小结

相关推荐
爱可生开源社区1 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1771 天前
《从零搭建NestJS项目》
数据库·typescript
加号32 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏2 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐2 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再2 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest2 天前
数据库SQL学习
数据库·sql
jnrjian2 天前
ORA-01017 查找机器名 用户名 以及library cache lock 参数含义
数据库·oracle
十月南城2 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark
Henry Zhu1232 天前
数据库:并发控制基本概念
服务器·数据库