操作系统(五)| 文件系统上 结构 存取方式 文件目录 检索

news2025/1/17 0:19:40

文章目录

  • 1 文件系统概述
  • 2 文件的结构与存取方式
    • 2.1 磁盘
    • 2.2 文件的物理结构
      • 2.2.1 连续结构
      • 2.2.2 链式结构
      • 2.2.3 索引结构
    • 2.3 文件的存取方式
  • 3 文件目录
    • 3.1 基本概念
    • 3.2 目录结构
      • 单级目录结构
      • 多级目录结构
    • 3.3 文件目录检索
      • 3.3.1 目录检索
      • 文件寻址
    • 3.4 文件目录的实现

1 文件系统概述

为什么引入文件系统

​ 长期保存(大量的)数据

​ 方便用户使用

文件是有名字的记录在外存中的一组有逻辑意义的数据项序列

什么是文件系统

文件系统是OS中用来管理文件的那一部分软件

文件系统功能

统一管理文件的存储空间,实施存储空间的分配与回收
实现文件信息的共享,提供文件的保护和保密措施
实现文件的按名访问
访问的透明性:用户不关心文件的物理位置和存储结构
向用户提供一个方便使用的接口,提供对文件系统操作的命令
提供与I/O的统一接口

文件分类:

Unix系统将文件分为3类:
普通文件(regular):ASCII或二进制文件
目录文件(directory)
特殊文件:设备文件,管道,套接字(socket),符号链接等

2 文件的结构与存取方式

文件是存在磁盘上的

2.1 磁盘

磁盘有扇片 磁道 扇区

扇区——磁盘最小可寻址单元

簇——存储块,固定数量的扇区

  • 平均存取时间

​ T=平均寻道时间+平均旋转等待时间+数据传输时间(有时候忽略不计)

​ 其中

​ 平均寻道时间——磁头寻找到指定磁道所需要的平均时间(大约5ms)

​ 平均旋转等待时间——指定扇区旋转到磁头下方所需要的平均时间(约4-6ms)

  • 磁盘响应时间=平均存取时间+排队时间+控制器时间
    在这里插入图片描述

注意想明白这里的0.5的来源

2.2 文件的物理结构

2.2.1 连续结构

文件的数据存放在若干连续的物理块中
在这里插入图片描述

优点:

简单,只要记住首块的地址和文件长度即可
支持顺序存取和随机存取
顺序存取速度快
所需的磁盘寻道时间最少

缺点:

不利于文件的动态增长
若预留空间:浪费,而且预先不知道文件的最大长度
否则需要重新分配和移动
不利于文件内容的插入和删除
存在外部碎片问题

2.2.2 链式结构

一个文件的数据存放在若干不连续的物理块中,各块之间通过指针连接,
每个物理块指向下一个物理块

在这里插入图片描述

优点

提高了磁盘空间利用率
不存在外部碎片问题
有利于文件的插入和删除
有利于文件的动态扩充

缺点:
随机存取相当缓慢
需要更多的寻道时间
链接指针占用一定的空间

改进变形

FAT表

文件分配表FAT的一种实现:
磁盘的每个分区包含一个FAT,分区中的每个盘块在其中占有1项(以块号为索引),指出文件中下一块的块号。
在目录项中包含文件首块的块号。

在这里插入图片描述

2.2.3 索引结构

一个文件的数据存放在若干不连续的物理块中,系统为每个文件建立一个专用数据结构–索引表。
索引表存放逻辑块号与物理块号的对应关系
一个索引表就是磁盘块地址(块号)数组,其中第i个条目存放的是逻辑块号i对应的物理块号
文件目录的目录项中指出索引表的物理地址

在这里插入图片描述

优点:保持了链接结构的优点,又避免了其缺点
既能顺序存取,又能随机存取
能满足文件动态增长、插入、删除的要求
能充分利用外存空间
缺点
索引表本身带来了系统开销

UNIX文件系统采用的是多级混合索引结构。
每个文件的索引表为13个索引项
最前面10项直接登记存放文件数据的物理块号(直接寻址)
如果文件大于10块,则利用第11项指向一个物理块,该块中最多可放256个文件物理块的块号(一次间接寻址)。对于更大的文件还可利用第12和第13项作为二次和三次间接寻址
UNIX中采用了三级索引结构后,文件最大可达16M个物理块

索引表的组织方式

如果文件很大,索引表较大,超过了一个物理块,就必须考虑索引表的组织方式,即怎么去存储索引表

索引表的组织方式:
(1)连续方式
索引表占用多个连续的盘块
(2)链接方式
索引表按照链式结构组织,占用多个不连续的盘块
(3)多级索引(多重索引)
例如,二级索引:将一个大文件的所有索引表(二级索引)的地址放在另一个索引表(一级索引)中
此外,还有三级索引等。

题目

设每个盘块4kB,每个盘块号4B,则采用3次间址可表示的文件最大长度为 [4T] B。

2.3 文件的存取方式

主要有顺序存取和随机存取两种。
1 顺序存取
对文件中的数据按逻辑顺序进行读/写的存取方式
2 随机存取
对文件中的数据按任意顺序进行读/写的存取方式
3 按键(key)存取:如DBMS

还与介质有关

3 文件目录

3.1 基本概念

几个基本的概念

1 文件控制块

文件控制块是操作系统为管理文件而设置的数据结构,存放了为管理文件所需的所有相关信息(文件属性)

基本信息:文件的名字、地址(起始物理块号)、长度、结构(逻辑结构、物理结构)、类型
存取控制信息:文件属主(owner)、存取权限或口令
使用信息:共享计数,文件的建立、修改日期等

2 文件目录

把所有的FCB组织在一起,就构成了文件目录
即文件控制块的有序集合

3 目录项
构成文件目录的项目(目录项就是FCB)

4 目录文件

为了实现对文件目录的管理,通常将文件目录以文件的形式保存在外存,
这个文件就叫目录文件
目录主要是为了系统快速实现“按名访问”而引入的,
查目录是文件系统最频繁的操作,因此目录的合理组织很重要

3.2 目录结构

单级目录结构

为所有文件建立一个目录文件(组成一线性表)
优点:简单,易实现

缺点:
限制了用户对文件的命名(容易出现“命名冲突”)
顺序检索文件时,平均检索时间长
不利于对文件的共享

多级目录结构

对二级目录简单扩充可得三级或三级以上的多级目录结构,
即允许每一级目录中的FCB要么指向文件,要么指向下一级子目录。
这是当今主流OS普遍采用的目录结构
优点:
层次结构清晰,便于管理和保护;有利于文件分类;
能较好地避免重名问题;提高了文件检索速度;有利于访问权限的控制

3.3 文件目录检索

访问文件时,必须首先确定读写文件的地址,需要下列2步:
(1)目录检索:根据文件名,查目录,确定文件的起始地址。
(2)文件寻址:确定所要访问文件内容的起始位置(地址)。

3.3.1 目录检索

文件的“按名存取”是通过查目录实现的,系统按照文件的路径名检索
基本的目录检索技术主要有:
线性检索法
Hash方法
为了加快目录检索,许多系统引入当前目录(工作目录)、相对路径名等。

文件寻址

根据目录项(FCB)中记录的文件物理地址等信息,
求出文件的任意记录或字节在存取介质上的地址
文件寻址与文件的物理结构和逻辑结构以及设备的物理特性有关
文件的内容是以块为单位存储的。
但存取文件时,对于记录式文件,是以逻辑记录为单位提出存取要求的,因此,
存储介质上的物理块长度与逻辑记录的长度是否匹配直接影响到对文件的寻址

3.4 文件目录的实现

当查找文件时候,需要依次将存放目录的物理块装入内存,逐一比较文件名,直到找到为止

例如:文件说明占128B,每块512B,则每块可存放4个目录项

设目录文件占用的盘块数是N个,则要找到一个目录项,
平均需要读入多少个盘块?(N+1)/2块

把文件说明信息(FCB)都放在目录项中的缺点:
查找文件缓慢,因为目录项较大
文件目录平常放在外存中,当文件很多时,可能占用大量的外存物理块

但实际上我们文件检索只需要文件名,不需要那么多其他的信息

所以我们将文件说明分成两部分 把FCB分成两部分

1 符号目录项——包括文件名,文件号

2 基本目录项——除文件名以外的所有信息

目录项分解法的典型实现

1 符号文件目录+基本文件目录

2 目录项 + | 节点

目录项分解法的典型实现:
(1)符号文件目录 + 基本文件目录
(2)目录项 + I节点
Unix/Linux采用此方法,它把符号目录项称为目录项,
而把基本目录项称为I节点(Index node,索引节点),
这样,目录项中的文件号就是I节点号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1225273.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CAS源码工程搭建记录

CAS源码工程搭建 1.下载2.gradle下载源改为阿里云,解决下载慢的问题3.解决保存 1.下载 git clone -b 5.3.x https://gitee.com/mirrors/CAS.git如果下载的是压缩包,导入工程会保存,因为builder.gradle的第20行开始有取git信息,如…

为关键信息基础设施安全助力!持安科技加入关保联盟

近日,中关村华安关键信息基础设施安全保护联盟发布了其新一批的会员单位,零信任办公安全代表企业持安科技成功加入,与联盟企业共同为关键信息基础设施提供各类支撑和保障。 中关村华安关键信息基础设施安全保护联盟由北京市科学技术委员会、中…

数据结构初阶leetcodeOJ题(二)

目录 第一题 思路: 第二题 思路 第三题 描述 示例1 思路 总结:这种类似的题,都是用快慢指针,相差一定的距离然后输出慢指针。 第一题 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val…

【vue实战项目】通用管理系统:首页

前言 本文为博主的vue实战小项目系列中的第三篇,很适合后端或者才入门的小伙伴看,一个前端项目从0到1的保姆级教学。前面的内容: 【vue实战项目】通用管理系统:登录页-CSDN博客 【vue实战项目】通用管理系统:封装to…

为什么软件公司很少用Python开发Web项目?

实际上,Python在Web开发方面有着广泛的应用,许多软件公司也确实使用Python来开发Web项目。 Python拥有诸如Django、Flask等流行的Web框架,这些框架使得开发者能够迅速、高效地开发出Web应用。 然而,Python在Web开发中的使用可能会…

C_12练习题

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) C 风格的注释,也称块注释或多行注释,以()…

基于STM32的多组外部中断(EXTI)的优化策略与应用

在某些嵌入式应用中,可能需要同时处理多个外部中断事件。STM32系列微控制器提供了多组外部中断线(EXTI Line),可以同时配置和使用多个GPIO引脚作为外部中断触发器。为了有效管理和处理多组外部中断,我们可以采取一些优…

[CISCN 2023 初赛]ezbyte

从字符串找到%100s,发现下面有个yes 跟踪yes 、 yes之前有个jmp 看上面的代码,要想跳转到含有yes这一块,需要r13等于r12 xor r13,r13说明r13是0,但是找不到r12的操作代码 实际着这个关键的操作r12的加密逻辑&…

STM32外部中断(EXTI)与RTOS多任务处理的协同设计

当在STM32上使用外部中断(EXTI)与RTOS(Real-Time Operating System,实时操作系统)进行多任务处理时,需要设计合适的协同机制,以确保可靠的中断处理和任务调度。在下面的概述中,我将介…

微机原理_12

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案。〕 十进制正数56的 8位二进制补码是()。 A. 00011001 B. 10100110 C. 10011001 D. 00100110 若栈顶的物理地址为20100H,当执行完指令PUSH…

Day34力扣打卡

打卡记录 合并石头的最低成本(区间DP) 链接 与多边形的三角形问题相同,将大问题化小问题,再用中间节点不断地寻找最值。 class Solution:def mergeStones(self, stones: List[int], k: int) -> int:n len(stones)if (n - 1…

2023年中职“网络安全“—Web 渗透测试②

2023年中职“网络安全“—Web 渗透测试② Web 渗透测试任务环境说明:1.访问http://靶机IP/web1/,获取flag值,Flag格式为flag{xxx};2.访问http://靶机IP/web2/,获取flag值,Flag格式为flag{xxx};3.访问http://靶机IP/web…

安卓环境搭建及运行安卓应用

1 jdk安装 安卓项目也是java开发的,运行在虚拟器上,安装jdk及运行的时候,就会带上虚拟器 jdk前面已经讲过,不在讲解 2 下载安装androj studio https://developer.android.google.cn/studio?hlzh-cn 下载下来,双击…

选硬币该用动态规划

选硬币&#xff1a; 现有面值分别为1角1分&#xff0c;5分&#xff0c;1分的硬币&#xff0c;请给出找1角5分钱的最佳方案。 #include <iostream> #include <vector>std::vector<int> findChange(int amount) {std::vector<int> coins {11, 5, 1}; /…

【每日一题】—— C. Yarik and Array(Codeforces Round 909 (Div. 3))(贪心)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

【实用技巧】更改ArduinoIDE默认库文件位置,解放C盘,将Arduino15中的库文件移动到其他磁盘

本文主要介绍更改Arduino IDE &#xff08;含2.0以上版本&#xff09;默认库文件位置的方法。 原创文章&#xff0c;转载请注明出处&#xff1a; 【实用技巧】解放系统盘&#xff0c;更改ArduinoIDE默认库文件位置&#xff0c;将Arduino15中的库文件移动到其他磁盘-CSDN博客文…

Python (十) 元组

元组 元组与列表类似&#xff0c;不同之处在于元组的元素不能修改。 元组使用小括号 ( )&#xff0c;列表使用方括号 [ ]。 元组创建只需要在括号中添加元素&#xff0c;并使用逗号隔开即可。 访问 tup1 (hello,Java,Python,123,456) print(type(tup1)) print(tup1[1])#输出 …

计算机网络的体系结构

目录 一. 计算机体系结构的形成二. 协议与层次划分2.1 数据传输过程2.2 什么是网络协议2.3 网络协议的三要素2.4 协议有两种形式2.4 各层协议2.5 什么是复用和分用 \quad 一. 计算机体系结构的形成 \quad 计算机网络是一个非常复杂的系统, 相互通信的两个计算机系统必须高度协调…

搜索二叉树(二叉搜索树)的实现(递归与非递归)

一、搜索二叉树的概念 搜索二叉树又称二叉排序树&#xff0c;二叉搜索树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点…