操作系统学习笔记_4 文件;磁盘

news2024/11/23 12:27:14

文件

有信息的数据集合。

文件包含的信息:文件名、标识符(操作系统要看)、类型、大小、创建修改时间、所有者、安全信息。

文件管理

文件分为无结构的流式文件和有结构的记录式文件。记录式文件由一条条记录组成。

文件存放在根目录里的目录里。

操作系统应该向上提供给用户的功能:CRUD,打开和关闭文件。

文件存放在外存类似进程在内存中,是分块存放的(救命啊,我刚把那块学过去)。

初次子海外,操作系统还应该提供文件共享和保护功能。

文件的逻辑结构

无结构文件(如txt)很简单。

有结构文件一般有关键字区分各个记录;记录存储长度不同又分为定长和可变长。

有结构文件逻辑结构:

  1. 顺序/链式存储。顺序定长存储可以实现随机存取,想找第i位直接起始位置+i*单位长度即可。顺序可变长无法计算,链式存储不连续也无法实现随机存取。顺序定长存储如果物理上也采用顺序存储,则可实现快速检索。

  2. 索引文件。对于可变长记录文件,可以建立一个定长的索引表,包含索引号、长度、起始位置指针的信息。检索速度很高。但是索引表和记录数一样,占的空间不小。

  3. 索引顺序文件,一条索引代表一组记录。可能查找速度还是很慢,那就建立多级索引。

    类似数据结构中学到的中间表,如果索引中只存储必要的少部分信息(文件名,指针),索引占的小,能放更多的索引,用更少的磁盘块存储,就平均需要访问更少的磁盘块就能找到文件。

image-20221213034225243

​ 外存中的索引节点叫磁盘索引节点,内存中的叫索引节点,可能包含更多信息,如文件是否被修改、同时有几个进程在访问等。

文件目录

文件控制块 FCB 中存储文件名、类型(是否是目录)、权限、地址等信息。

目录支持的功能有:搜索、创建、删除、显示、修改文件。

早期操作系统只支持单文件目录,那就不能重名了。

早期多用户操作系统支持双文件目录,一个主文件目录,其中包含多个用户目录。不同用户目录各自文件可以重名。但是用户自己没办法创建多级目录。

后来的多级目录结构支持多级目录了。

引入当前目录概念:如果没有此概念,我们要找根目录下 /目录1/目录2/照片.jpg,需要三次访存。根目录找目录1,目录1找目录2,目录2找jpg。要是有当前目录的相对路径就会方便得多。

树形目录结构缺点在于不能共享文件。

无环图目录结构

image-20221213040035339

不同用户不同目录下可以访问到相同的共享文件。

共享文件要设置共享计数器。当有用户取消共享后,要删除共享信息,共享计数器–。减为0时删除共享节点。

文件的物理结构

很多操作系统中,磁盘块和内存块、页大小相同,成块成块拿进来。

类似内存,文件存储的逻辑地址分为逻辑块号和块内地址两部分。

连续分配

自不必多说物理块号=起始块号+逻辑块号。支持顺序访问和随机访问。但是不方便拓展,比如13块的A文件想扩展,但是4~6是B文件,不是空闲文件,A文件想拓展只能整体挪到空闲区域;而且还可能产生大量磁盘碎片。

链接分配

隐式链接:FCB存储起始块号和结束块号。像链表一样从第一个找到结尾(每个磁盘块中包含指向下一个盘块的指针,但是这对用户来说是透明的),没法随机存取,但是拓展方便。

显示链接:FCB 中包含起始块号,此外还有一张文件分配表 FAT,其中包含所有块号的下一块指针。隐式链接想找一个块,要先在 FCB 中找到起始位置,再读磁盘,找磁盘里的下一块。显示连接可以先不用读磁盘,根据分配表推测出要找的逻辑块的物理地址再去读磁盘,访问速度更快。

链接分配都不会有外部碎片。

索引分配

每个文件建立一个索引表。索引表存放的磁盘块叫索引块,文件数据存放的磁盘块叫数据块。FAT是一个磁盘对应一张,索引表是一个文件对应一张。

image-20221213102643626

也支持随机存取,也方便拓展,但是索引表占空间。

要是文件太大,索引表一个索引块存不下,需要多个。

可以让索引块之间链接起来。但是不支持顺序存储,要找最后一块就要从头便历。

可以建立多级索引。每级大小不超过一个数据块。k级表访问数据,要访问k+1次磁盘块(k次查找位置,1次查找数据)。

混合索引:

image-20221213104019760

小文件层级小一点。因小文件访问可能频繁一些,就少访问几次。

文件存储空间管理

操作系统的盘有什么用?又叫文件卷,每个文件卷都包含目录区和文件区。

空闲表法

分配磁盘块给用户:类似动态分区分配,可采用首次适应、最佳适应、最坏适应等。

回收磁盘块:也类似动态分区分配,考虑前后有无空闲块。

空闲链表法

image-20221213105751349

空闲盘块链分配:空闲链从链头摘下来k个空闲块,并修改链头位置。

空闲盘块链回收:回收的空闲块挂到空闲链结尾,并修改链尾位置。

空闲盘区链分配:先按算法找到合适的空闲盘区。如果没有合适的,也可以把不同盘区的盘块同时给一个文件。

空闲盘区链回收:如果和空闲盘区挨着,直接合并。否则变成一个单独的空闲盘区挂到队尾。

位示图法

一定注意从0还是1开始!

image-20221213111306083

分配:扫描位图,找到连续的k个0,修改为1.

回收:算出回收盘块的位图字号、位号,置为0.

成组链接法

大文件不适用空闲块法。

超级块存放在内存中,其中包含下一组空闲块块数和块号。

如果没有下一级了,下一组空闲盘块数可以用特殊标识符如-1表示。

image-20221213125105862

空闲分配:如果<100个,从超级块分配就够。

如果=100个,不能直接分配超级块因为这样超级块对后面的链接就消失了。要先把300的内容提到超级块作为新的超级块,再分配。

image-20221213130944587

回收:直接加到超级块上。如果超级块最大大小为100,已经满了,还要回收,就要让新回收的块作为新的超级块,并指向原来的超级块。

image-20221213131331129

文件基本操作

文件创建

需要关注:文件名;文件路径;需要的外存空间。

  1. 在外存中找到合适大小的内存空间;
  2. 在目录表中更新新文件的信息。

文件删除

  1. 根据目录表找到该目录项;
  2. 外存中回收内存;
  3. 目录表中删除该文件信息。

打开文件

需要用户提供的信息:文件名;文件目录;打开方式(读;写;……)

操作系统先去目录表找到对应的文件,复制到内存中。并且把目录项复制到内存系统的“打开文件表”中。

image-20221213133814373

关闭文件

删除用户打开文件表的对应项;回收空间;系统打开文件表的打开计数器-1,减到0则删除打开文件表的对应项。

读文件

指明要读的文件,要读入多少数据,读入的数据在内存中的位置。读入指定大小放入内存中。

写文件

和read很像。最后再通过write系统调用写回外存。

文件共享

基于索引节点的共享方式(硬链接):

image-20221213162136121

count说明还有几个进程在共享该文件。

要删除时,count–,若>0则不能删除,=0才能删除。

基于符号链的共享方式(软链接):

image-20221213162634924

删掉文件1,软链接仍然存在,只是无法通过软链接去访问文件1了。

因为访问共享文件要查询多级目录,进行多次 IO,因此采用软链接。

文件保护

口令保护:规定一个口令,用户要说对应口令才能访问。但是口令保存在系统内部,不安全。

加密保护:用密码对文件加密。如异或加密。有点费时。

访问控制:文件的 FCB 中增加一个访问控制列表 ACL,记录用户可以有哪些权限(读写运行ls)。以组为单位,如:管理员,文件主,文件主的伙伴,陌生人。

文件系统的层次结构

image-20221213165015538

image-20221213165347348

磁盘

image-20221213172411000

image-20221213172609205

image-20221213172629925

image-20221213172637487

磁盘调度算法

image-20221213181331914

先来先服务算法 FCFS:就是单纯的先处理先来的进程。

image-20221213182105548

最短寻找时间优先 SSTF:先找离当前磁道近的。

image-20221213182454524

扫描算法 SCAN:只有磁道移到最外侧之后才允许往回移动,避免 SSTF 的左右横跳。

image-20221213183053980

LOOK 调度算法:改进 SCAN 算法,观察到当前磁道已经是访问请求最右边的磁道后,就可以立即改变磁道移动方向往回。

image-20221213183329408

循环扫描算法 C-SCAN:

image-20221213184440873

C-LOOK 算法:

image-20221213184532367

减少延迟时间

磁盘一直旋转的。如果要读几个相邻的扇区,读了第一个处理的过程中磁盘还在转,处理好了的时候可能又转到不知道哪里去了。可能就会产生很长的延迟时间。

解决办法:交替编号。逻辑上相邻的扇区物理上分开。

image-20221213192126906

为什么磁盘的物理地址是(柱面号,盘面号,扇区号)而不是(盘面号,柱面号,扇区号)?因为更改柱面号需要移动磁头臂,更改盘面号不用移动臂,只需要激活相邻盘面的磁头即可。可以减少磁头移动消耗的时间。

磁盘管理

初始化:

​ 物理格式化:把磁盘划分为扇区。扇区包含头、尾、中间数据部分。头尾会存放一些扇区校验码之类的信息。

​ 磁盘分区:分为几个文件卷。

​ 逻辑格式化:创建文件系统(根目录、管理空间的数据结构如位示图、空闲分区表等)。

​ 磁盘的初始化程序:放在哪里?

​ ROM 只读存储器中的数据出厂时就写好了且不能更改,集成在主板上。但是磁盘的初始化程序说不定以后会更新换代,ROM 中的内容又不能更新,因此初始化程序不放在 ROM 中,而是放在磁盘(C)里。初始化程序的装入程序写在 ROM 中。

坏块的管理:坏掉的扇区。简单的磁盘直接在 FAT 中标记出来防止被使用到(对操作系统不透明)。复杂的磁盘交给磁盘控制器维护坏块链表,而且保留一些备用分区(对操作系统透明)。

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

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

相关文章

DFGN-Dynamically Fused Graph Network for Multi-hop Reasoning 论文阅读

文章目录介绍相关工作text-based QA多跳QA推理模型段落选择器构建实体图编码 Query 和 ContextFusion Block 推理Doc2GraphDynamic Graph AttentionUpdate QueryGraph2Doc预测介绍 将 DFGN 模型用于HotpotQA &#xff08;TBQA类型的公开数据集&#xff09; QA任务注重从单一的…

ADI Blackfin DSP处理器-BF533的开发详解46:图像处理专题-Translation (图像平移处理)(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 代码实现了图像平移处理&#xff0c;代码运行时&#xff0c;会通过文件系统打开工程文件根目下" …/ImageView"路径中的 tes…

【爬虫实战项目】Python爬取Top100电影榜单数据并保存csv文件(附源码)

前言 今天给大家介绍的是Python爬取Top100电影榜单数据保存csv文件&#xff0c;在这里给需要的小伙伴们代码&#xff0c;并且给出一点小心得。 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫&#xff0c;基本的是加请求头&#xff0c;但是这样的纯文本数据爬取的…

(四)springcloud之Nacos注册服务与发现-1

前言&#xff1a;一段时间来忙忙碌碌&#xff0c;回头发现很多技术已经更新了很多&#xff0c;很长一段时间都在忙其他的事情&#xff0c;以至于没有太多关注于微服务更新&#xff0c;今天更新了下版本以便于后期使用&#xff0c;突然发现很多东西已经被删除或直接改变了&#…

TIA博途_序列化指令Serialize的具体使用方法示例

TIA博途_序列化指令Serialize的具体使用方法示例 序列化指令的基本用途: 首先,我们可以查看TIA博途中的帮助文件说明,如下图所示: 简单总结就是: 把复杂的数据或数据类型(例如UDT、STRUCT等)转换成BYTE或CHAR类型的数组,从而方便数据处理,通常在通信数据的处理中可以…

DBCO-PEG-amine,二苯并环辛炔PEG氨基 MV 1K、2K、3.4K、4K、5K、10K

1、试剂基团反应特点&#xff08;Reagent group reaction characteristics&#xff09;&#xff1a; DBCO用于无铜点击化学。在没有铜催化剂的情况下&#xff0c;与叠氮化合物的反应非常迅速。这种反应是非常迅速&#xff0c;温和&#xff0c;和生物相容性&#xff0c;NH2和带N…

数据结构---KMP算法

一、KMP算法简介 KMP算法是一个字符串匹配算法&#xff0c;对暴力算法BF的一种优化&#xff0c;使得时间复杂度大量的降低。 基本概念&#xff1a; s[]是字符串&#xff0c;简单来说&#xff0c;就是比较长的字符串。p[]是模式串&#xff0c;简单来说&#xff0c;就是比较短的…

使用小爱同学语音控制电脑关机 - Winform C#

使用小爱同学语音控制电脑变关机前言实现原理准备注册巴法云账号接入巴法云接入米家编写程序连接TCP接收信息并运行关机指令发送指令订阅主题添加心跳机制后台运行阻止默认关闭窗口事件完整代码前言 小爱同学应该已经是家喻户晓的了&#xff0c;现在一直用来控制家里的家电。于…

selenium + python自动化测试环境搭建(有手就行)

selenium 是一个web的自动化测试工具&#xff0c;不少学习功能自动化的同学开始首选selenium &#xff0c;相因为它相比QTP有诸多有点&#xff1a; 免费&#xff0c;也不用再为破解QTP而大伤脑筋 小巧&#xff0c;对于不同的语言它只是一个包而已&#xff0c;而QTP需要下载安装…

时序预测 | MATLAB实现PSO-SVM粒子群优化支持向量机时间序列预测

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

LeetCode刷题日记之链表II

1.四数相加II 题目描述 解题思路 1.定义一个哈希Map,其中key存放两数之和&#xff0c;value存放两数和出现的次数。 2.遍历统计出nums1和nums元数相加和出现的次数(ab)。 3.遍历nums3和nums4&#xff0c;并求和(cd),统计出(0-(cd))在Map中出现的次数。 4.返回&#xff08;0-(…

央企招聘:中国人民银行2023年度招聘启事

2023年中国外汇交易中心 博士后科研工作站招聘公告 中国外汇交易中心暨全国银行间同业拆借中心&#xff08;以下简称“交易中心”&#xff09;于1994年成立&#xff0c;是中国人民银行直属事业单位&#xff0c;为银行间外汇、货币、债券及其衍生产品提供交易、发行、基准及一线…

如何通过.exe文件控制一台电脑

CVE-2022-21999漏洞 如何实现发送一个.exe文件偷偷控制他人的电脑&#xff1f;这个想法很刑的&#xff0c;所以我只是说明我的实现方式&#xff0c;具体操作建议仅用于hvv等专业领域&#xff0c;请勿以身试法。 首先我们分析一下.exe文件的实际应用场景---windows系统的电脑&am…

11、setoolkit工具 构造钓鱼网站、powershell注入

靶机&#xff1a;192.168.11.105攻击机kail&#xff1a;192.168.11.1061.在kali中启动setoolkitsetoolkit2.利用SET构建钓鱼网站1&#xff09;选择1 Social-Engineering Attacks &#xff08;社会工程学攻击&#xff09;2&#xff09;选择2 Website Attack Vectors &#xff…

Spring Boot 概念、创建和运行 · Spring Boot 的优点 · 启动第一个 Spring Boot · Spring Boot 的注意事项

一、什么是 Spring Boot二、Spring Boot 优点三、Spring Boot 项目创建四、项目目录介绍和运行4.1 运行项目4.2 输出 Hello World五、注意事项5.1 包路径错误5.2 小结&#xff1a;约定大于配置六、总结一、什么是 Spring Boot Spring 的诞生是为了简化 Java 程序的开发的&…

GAMES101-现代计算机图形学入门-闫令琪 课程笔记 - 汇总(上)

一些前言与感慨&#xff1a; 学了再多的AI&#xff0c;终究还是没有办法拒绝计算机图形学的魅力。当初就不该一招不慎&#xff0c;踏入AI的坑。 可惜当年在学校里学计算机图形学的时候&#xff0c;还没有闫令琪这么好的课程&#xff0c;当时学得一知半解&#xff0c;云里雾里…

极市直播回放第106期丨阿里达摩院:兼顾速度与精度的高效目标检测框架DAMO-YOLO

阿里巴巴达摩院智能计算实验室团队设计并开源了一款兼顾速度与精度的目标检测框架DAMO-YOLO&#xff0c;其性能超越了目前的一众YOLO系列方法&#xff0c;在实现精度SOTA的同时&#xff0c;保持了很高的推理速度。DAMO-YOLO是在YOLO框架基础上引入了MAE-NAS、efficient-RepGFPN…

cas:1628790-40-8|脂溶性Cyanine7-COOH|CY7-Carboxylic Acid

cas:1628790-40-8|脂溶性Cyanine7-COOH|CY7-Carboxylic Acid 名称&#xff1a;脂溶性Cyanine7-COOH|CY7-Carboxylic Acid cas:1628790-40-8 英文同义词: Cy7;Colpro;Prothil;R-13615;Cy7-COOH;CY7ACID;Cy7NHS;AY-62022;Cy7,>97%;Sulfo-Cyanine7 中文名称:磺基-CY7羧酸 …

【小甲鱼C语言】课后笔记第一章第四节——数据类型

目录 1、数据类型 2、short 和 long 3. sizeof 运算符 4. signed 和 unsigned 5、课后习题&#xff08;编程题&#xff09; 1、数据类型 在 C 语言里&#xff0c;所谓的数据类型就是坑的大小。我们说变量就是在内存里边挖一个坑&#xff0c;然后给这个坑命名。那么数据类型…

U盘格式化后能恢复数据吗?U盘删除的数据还能恢复吗

U盘格式化后能恢复数据吗&#xff1f;通常情况下&#xff0c;我们U盘里的数据丢失后&#xff0c;它们并没有立即消失&#xff0c;它们只是被系统做了一个标记&#xff0c;将数据存储的位置标记成可写入的状态&#xff0c;只有当新数据写入的时候&#xff0c;这个存储位置才会被…