OS复习笔记ch12-1

文件系统

概述

文件是大多数应用程序的核心要素,文件系统是操作系统对用户来说最重要的部分之一。
本章的主要内容见下图:
image.png
文件,大家耳熟能详的就是的docx、pdf、jpg、MP4等各种后缀文件,根据任务需要文件又分成了文本、图片、表格、视频等类型。那么文件该如何定义呢?


说白了,文件就是一组有意义的信息集合。我们新建一个文件,核心目的就是为了存储一些有用的信息,比如各种申请表、证件照、产品说明等等,一般不会无故创建文件。
文件自身有很多的属性,比如文件名、标识符、类型、位置(路径)、大小、保护信息等。
OS一般都会封装一些常见的文件操作作为系统调用,比如create、delete、open、close等,在Linux中我们可以编写C代码,通过#include <fcntl.h>来引入。

接下来我们来了解一些文件的组织形式。

文件的组织和访问

  1. 无结构文件:流式文件,文件体为字节流,不划分记录(常见的.txt文件)
  2. 有结构文件:记录式文件,每条记录由若干数据项组成。
    1. 累积文件(Pile,文件体为无结构的记录序列,通过特定分隔符来划分记录,各记录大小和组成可变;最简单文件组织,例如数据库的log)
    2. 索引文件(Indexed file,记录大小不必相同,不必排序。比如词典A/B/C/D……,溢出的新词一般放在最后)
    3. 顺序文件(Sequential file,主文件和临时文件构成,记录格式固定,大小相同;不过在磁盘中即使排列有序也无法通过算法进行快速查找)
    4. 索引顺序文件(在顺序文件的基础上根据区间建立索引,甚至可以建立多级索引)
    5. 哈希文件(Direct/Hash file,主文件和溢出文件组成,通过哈希函数计算出记录在文件中的相对位置)

image.png
其中,有结构文件根据记录长度是否相等又分为定长记录和可变长记录。

索引文件在文件记录中快速查找,同时可以对非关键字建立索引(比如姓名),但是一旦修改之后维护成本高。哈希查找速度更快,同时会有溢出文件。现在的通用计算机不会插入一条记录到文件系统,只有数据库管理系统才会有类似的记录。

在记录数量较大时,索引顺序比顺序文件大大缩短检索时间。
顺序文件是N/2,而索引顺序文件(一级索引)是 i 2 + ( N / i ) 2 = ( i + N / i ) 2 \frac{i}{2} + \frac{(N/i)}{2} = \frac{(i + N/i)}{2} 2i+2(N/i)=2(i+N/i),其中i为索引长度,N/i是每个索引映射的文件范围。
举个🌰,1,000,000条记录的文件,顺序文件的平均检索长度为500,000,有1,000条索引项的索引文件,平均检索长度为(1,000+1,000,000/1,000)/2 = 1000。

索引还可以是多级的,二级索引的平均索引长度更短,查询速度更快。
同理,假设i1 = i2 = 100,那么结果作为N‘ = i 1 2 + i 2 2 + N / ( i 1 × i 2 ) 2 \frac{i_1}{2}+\frac{i_2}{2}+\frac{N/(i_1 \times i_2)}{2} 2i1+2i2+2N/(i1×i2) = 50+50+50 = 150

管理层次

image.png
从下之上,依次是设备驱动程序→基本文件系统→基本 I/O 管理程序→逻辑 I/O 层→实际文件→用户程序(了解即可)

  • 磁盘和磁带驱动,统称为设备驱动程序。它们直接与外围设备通信,负责启动一个设备上的I/O 操作,并继续处理I/O 请求的完成。
  • 基本文件系统,即物理I/O层,处理与磁盘等系统交换的数据块,关注数据块在辅存中的放置,关注在主存中缓冲的数据块
  • 基本I/O管理程序,负责文件I/O 的开始和终止,维护控制结构,辅助磁盘/磁带调度,负责缓冲区的指定和辅存的分配
  • 逻辑I/O,使得用户和应用程序可以访问到记录,提供通用的记录I/O 操作的能力,维护有关文件的基本数据

image.png
这张图展示了文件管理系统的关键组成部分及其相互关系,包括文件结构、目录管理、访问方法、文件操作功能,以及用户访问控制。系统还涉及物理存储管理,如内存中的物理块、磁盘调度、I/O处理、文件分配与空闲存储管理。每个部分都是文件系统性能和效率的关键,需要良好的协调和优化以确保整个系统的高效运作。

文件目录

目录是由文件说明组成的用于文件检索的特殊文件。文件目录的内容主要是文件访问的控制信息(不包括文件内容),主要作用如下:

  • 实现按名存取
  • 提高目录检索速度
  • 文件共享
  • 解决文件重名问题
  1. 文件控制块(FCB)
    文件控制块是操作系统为管理文件而设置的数据结构,存放了为管理文件所需的有关信息(文件属性),类似进程控制块PCB。
  • 文件控制块是文件存在的标志
  • 文件控制块构成文件目录项
    image.png

FCB有多条信息供给系统,包括文件属性、位置(路径)、属主等。而文件属性包括了文件的基本信息、存取控制信息、使用信息等等。

  1. 文件目录:
    把所有的FCB组织在一起,就构成了目录文件,即文件控制块的有序集合,其中一个FCB就称作一个目录项。
    image.png
    文件名在特定的目录里面必须是唯一的,不能重名。
    不同系统有不同的命名规则,比如有些系统不支持某些特殊符号,有的支持修改有的不支持。

image.png

  • 文件目录也是一个文件
  • 提供文件名与文件自身的映射(双击进入)
  1. 一级目录
  • 线性结构,一个文件一个表项
  • 以文件名为关键字的顺序文件
  • 无法管理和组织文件
  • 没有解决重名问题
    image.png
  1. 二级目录
    image.png
    在主目录下每个用户目录对应一个目录项,解决了不同用户之间的文件重名问题,没有解决用户自身文件重名问题,或者说不能进行文件分类。
  2. 多级目录
    image.png
    每个用户目录下可以有子目录和文件,彻底解决了文件重名问题
  • 文件命名
    image.png
    按名存取,同一路径下不能重名,查找的时候名字是最关键的
  • 工作目录
    image.png
    除了绝对路径,我们常常会基于当前目录/工作目录使用相对路径,比如.表示当前目录,..表示父目录。在Linux类OS中,使用pwd指令就可以知道当前的工作目录了。
  1. 改进的多级文件目录
    image.png
    首先说一下索引节点inode (index node)是指在许多“类Unix文件系统”中的一种数据结构,用于描述文件系统对象(包括文件、目录、设备文件、socket、管道等)。每个inode保存了文件系统对象数据的属性和磁盘块位置。文件系统对象属性包含了各种元数据(如:最后修改时间) ,也包含用户组(owner)和权限数据。
    基于iNode改进的多级目录:
  • 符号文件目录:只有文件名和内部标识iNode组成树状结构,可以按文件名排序
  • 基本文件目录:一张大表,包含iNode和对应文件的全部详细信息。

举个🌰,
image.png
分解前,遍历读取才能知道文件在哪个盘块,平均需要13/2 = 6.5,也就是7次

而分解后,先查找符号目录,两个盘块平均就是一次,然后由于iNode大小确定,通过符号目录编号iNode计算出偏移量,然后根据基址变址寻址找到文件的基本目录项,再查看文件权限和数据等,也就是说总共平均是两次。这样确实能有效减少访问硬盘的次数,提高检索速度

到此总结一下,常见的三种文件目录查询技术:

  • 目录查询:用户给出文件名,按名寻找目录项(FCB,或索引节点)。
  • 线性检索:
    • 全路径名:从根开始
    • 相对路径:从当前目录开始
  • Hash检索:hashed structure,通过键值对进行查询

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java小代码(1)

代码 &#xff1a; 今日总结到此结束&#xff0c;拜拜&#xff01;

(经验)高考填报志愿,有哪些坑你需要避开?

高考年年考&#xff0c;填报志愿的却年年都是新手.....哪些关于高考填报志愿的坑&#xff0c;依旧还继续坑....是时候做些改变了。过来人写的几点避坑&#xff0c;希望给这届新人做参考。 1、不要什么热门就报什么&#xff0c;因为有些东西别人学得很快&#xff0c;而我慢的像蜗…

springboot+mysql 心理健康咨询管理系统-计算机毕业设计源码031706

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对心理健康咨询管理系统等问题&#xff0c;对…

【鸿蒙】 模拟器运⾏

【鸿蒙】HUAWEI DevEco Studio安装-CSDN博客 【鸿蒙】创建第⼀个鸿蒙项⽬-CSDN博客 点击 Tools 菜单下的 Device Manager 点击 Install &#xff0c;安装模拟器 下载模拟器相关的SDK&#xff0c;点击 Finish 选择安装⽬录&#xff0c;点击 New Emulator 选择设备类型&#…

whisper 模型源码解读

whisper官方源码 whisper 模型官方代码&#xff1a;https://github.com/openai/whisper/blob/main/whisper/model.py &#xff1b;注释如下 import base64 import gzip from dataclasses import dataclass from typing import Dict, Iterable, Optionalimport numpy as np impo…

【动态规划】1130. 叶值的最小代价生成树

1130. 叶值的最小代价生成树 难度&#xff1a;中等 力扣地址&#xff1a;https://leetcode.cn/problems/minimum-cost-tree-from-leaf-values/description/ 题目内容 给你一个正整数数组 arr&#xff0c;考虑所有满足以下条件的二叉树&#xff1a; 每个节点都有 0 个或是 2 个…

基于Java的学生成绩管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术&#xff0c;B/S结构 工具&#xff1a;MyEclipse&#xff0c;MySQL 系统展示 首页 个人中…

软件测试——稳定性测试:adb Monkey

Monkey 1. Monkey1.1 Monkey 是什么1.2 Monkey 测试场景1.3 Monkey 特点1.4 Monkey 在哪里1.5 测试准备事项1.6 Monkey 参数列表 2. 基本命令3. 常用参数4. 事件类型5. 调试参数6. 日志管理7. 日志错误定位8. Monkey测试可以发现的问题 1. Monkey 1.1 Monkey 是什么 Monkey是一…

计算机网络期末

1、IP 地址为:192.168.0.254,它的子网掩码应该为( ) A.255.255.255.0 B.255.255.254.0 C.255.255.252.0 D.255.255.0.0 2、最容易产生网络可靠性瓶颈问题的拓扑构型是&#xff08; &#xff09;。 A 总线型 B 星型 C 环型 D 网状型 3、HTTP 就是电子邮件阅读协议&#xff0…

使用Vue+Antv-X6实现一个输送线可视化编辑器(支持拖拽、自定义连线、自定义节点等)

最近公司有这样的业务&#xff0c;要实现一个类似流程图的编辑器&#xff0c;可以拖拉拽之类的&#xff0c;网上寻找了一番&#xff0c;最终决定使用Antv-X6这个图形引擎&#xff0c;非常强大&#xff0c;文档多看几遍也就能上手使用了。感觉还不错就写个使用心得期望能帮助到同…

访问网站时IP被屏蔽是什么原因?

在互联网使用中&#xff0c;有时我们可能会遇到访问某个网站时IP地址被屏蔽的情况。IP地址被网站屏蔽是一个相对常见的现象&#xff0c;而导致这种情况的原因多种多样&#xff0c;包括恶意行为、违规访问等。本文将解释IP地址被网站屏蔽的常见原因&#xff0c;同时&#xff0c;…

如何理解广角镜头和长焦镜头的区别。

为什么广角镜头的视野会比长焦镜头的视野大呢&#xff1f; 我之前用等光程解释了景深&#xff0c;也解释了为什么焦距越远&#xff0c;成像越大&#xff0c;但是从来没有提到过视野范围这个概念。实际上在我之前建立的数学模型中&#xff0c;物曲面S是无限大的&#xff0c;像曲…

Python,PyCharm,Anaconda安装及使用教程

一、Python下载及安装 Python官网Welcome to Python.org 当前最新版是3.11.0版本&#xff1a;python-3.11.0-amd64.exe 下一步&#xff0c;下一步进行安装即可 选择&#xff1a;“Customize installation”,出现下图&#xff1a; 点击“Next”下一步&#xff0c;出现如下图…

HTTP网络协议

1.HTTP &#xff08;1&#xff09;概念&#xff1a; Hyper Text Transfer Protocol&#xff0c;超文本传输协议规定了浏览器和服务器之间数据传输的规则。 &#xff08;2&#xff09;特点 基于TCP协议:面向连接&#xff0c;安全基于请求-响应模型的:一次请求对应一次响应HTTP协…

Redis源码学习:quicklist的设计与实现

为什么需要quicklist 假设你已经知道了ziplist的缺陷&#xff1a; 虽然节省空间&#xff0c;但是申请内存必须是连续的&#xff0c;如果内存占用比较多&#xff0c;申请效率低要存储大量数据&#xff0c;超过了ziplist的最佳上限后&#xff0c;性能有影响 借鉴分片思想&…

说说 SSL 的错误认识和不足之处

最近明月在学习折腾 LNMP 期间无意中建了一个 Typecho 的博客小站&#xff0c;近一周的折腾下来&#xff0c;收获真的不少&#xff0c;致使兴趣也越来越浓了&#xff0c;在升级 LNMP 的时候捎带手的给这个 Typecho 博客也启用了 SSL。并且开启了 memcached 和 OPcache 优化加速…

Spring Cache常见问题解决

目录 一 报错:Null key returned for cache operation 二 报错&#xff1a;类型转换异常 三 取出的数据为null 一 报错:Null key returned for cache operation 这里报错有两种情况&#xff1a; 第一&#xff0c;如果你在新增的方法上使用Cacheable注解&#xff0c;那么肯定是…

终极解决方案,传统极速方案,下载软件的双雄对决!

在数字资源日益丰富的今天&#xff0c;下载管理器成为了我们日常生活中不可或缺的工具。市场上两款备受欢迎的下载管理软件——Internet Download Manager&#xff08;IDM&#xff09;和迅雷11&#xff0c;它们以各自的特色和优势&#xff0c;满足了不同用户群体的需求。 软件…

5.3 Python len()函数:获取字符串长度或字节数

Python len()函数详解&#xff1a;获取字符串长度或字节数 Python 中&#xff0c;要想知道一个字符串有多少个字符&#xff08;获得字符串长度&#xff09;&#xff0c;或者一个字符串占用多少个字节&#xff0c;可以使用 len 函数。 len 函数的基本语法格式为&#xff1a; …

python-今年第几天

[题目描述] 定义一个结构体变量&#xff08;包括年、月、日&#xff09;。 计算该日在本年中是第几天&#xff0c;注意闰年问题。输入格式&#xff1a; 年 月 日。输出格式&#xff1a; 当年第几天。样例输入 2000 12 31样例输出 366 数据范围 对于100%的数据&#xff0c;保…