操作系统实验文件管理_系统设计硬核知识(5)——操作系统的文件管理

操作系统对计算机的管理包括两个方面:硬件资源和软件资源。硬件资源的管理包括CPU 的管理、存储器的管理、设备管理等,主要解决硬件资源的有效和合理利用问题。

软件资源包括各种系统程序、各种应用程序、各种用户程序,也包括大量的文档材料、库函数等。每一种软件资源本身都是具有一定逻辑意义的相关信息的集合,在操作系统中它们以文件形式存储。

计算机系统的重要作用之一是能快速处理大量信息,因此数据的组织、存取和保护成为一个极重要的内容。文件系统是操作系统中组织、存取和保护数据的一个重要部分。

文件管理的功能包括:建立、修改、删除文件;按文件名访问文件;决定文件信息的存放位置、存放形式及存取权限;管理文件间的联系及提供对文件的共享、保护和保密等。允许多个用户协同工作又不引起混乱。

  • 文件的共享是指一个文件可以让多个用户共同使用,它可以减少用户的重复性劳动,节省文件的存储空间,减少输入/输出文件的次数等。
  • 文件的保护主要是为防止由于错误操作而对文件造成的破坏。
  • 文件的保密是为了防止未经授权的用户对文件进行访问。

文件的保护、保密实际上是用户对文件的存取权限控制问题。一般为文件的存取设置两级控制:第 1 级是访问者的识别,即规定哪些人可以访问;第 2 级是存取权限的识别,即有权参与访问者可对文件执行何种操作。

1 文件的逻辑结构

文件的结构是指文件的组织形式,从用户角度所看到的文件组织形式,称为文件的逻辑结构。

文件的逻辑组织是为了方便用户使用。一般文件的逻辑结构可以分为两种:无结构的字符流文件和有结构的记录文件。记录文件由记录组成,即文件内的信息划分成多个记录,以记录为单位组织和使用信息。

记录文件有顺序文件、索引顺序文件、索引文件和直接文件。 (1)顺序文件。大多数文件是顺序文件。顺序文件的记录定长,记录中的数据项的类型长度与次序固定,一般还有一个可以唯一标识记录的数据项,称为键(key),记录是按键值的约定次序组织的。顺序文件常用于批处理应用,对于查询或更新某个记录的处理性能不太好。 (2)索引顺序文件。索引顺序文件是基于键的约定次序组织的,而且维护键的索引和溢出区域。键的索引也可以是多级索引。索引顺序文件既适用于交互方式应用,也适用于批处理方式应用。 (3)索引文件。索引文件是基于记录的一个键数据项组织的。许多应用需按照别的数据项访问文件,为此,常采用索引文件方法,即对主文件中的记录按需要的数据项(一个或几个)建索引,索引文件本身是顺序文件组织。 (4)直接文件。直接文件又称哈希( Hash)文件。记录以它们在直接访问存储设备上的物理地址直接(随机地)访问。直接文件常用于需要高速访问文件而且每次仅访问一条记录的应用中。

2 文件的物理结构

文件的物理结构是指文件在存储设备上的存放方法。文件的物理结构侧重于提高存储器的利用效率和降低存取时间。文件的存储设备通常划分为大小相同的物理块,物理块是分配和传输信息的基本单位。文件的物理结构涉及文件存储设备的组块策略和文件分配策略,决定文件信息在存储设备上的存储位置。常用的文件分配策略有:

(1)顺序分配(连续分配)。这是最简单的分配方法。在文件建立时预先分配一组连续的物理块,然后,按照逻辑文件中的信息(或记录)顺序,依次把信息(或记录)按顺序存储到物理块中。这样,只需知道文件在文件存储设备上的起始位置和文件长度,就能进行存取,这种分配方法适合于顺序存取,在连续存取相邻信息时,存取速度快。其缺点是在文件 建立时必须指定文件的信息长度,以后不能动态增长,一般不宜用于需要经常修改的文件。

(2)链接分配(串联分配)。这是按单个物理块逐个进行的。每个物理块中(一般是最后一个单元)设有一个指针,指向其后续连接的下一个物理块的地址,这样,所有的物理块都被链接起来,形成一个链接队列。在建立链接文件时,不需要指定文件的长度,在文件的说明信息中,只需指出该文件的第一个物理块块号,而且链接文件的文件长度可以动态地增 长。只调整物理块间的指针就可以插入或删除一个信息块。 链接分配的优点是可以解决存储器的碎片问题,提高存储空间利用率。由于链接文件只能按照队列中的链接指针顺序查找,因此搜索效率低,一般只适用于顺序访问,不适用于随机存取。 (3)索引分配。这是另一种对文件存储不连续分配的方法。采用索引分配方法的系统,为每一个文件建立一张索引表,索引表中每一表项指出文件信息所在的逻辑块号和与之对应的物理块号。索引分配既可以满足文件动态增长的要求,又可以方便而迅速地实现随机存取。对一些大的文件,当索引表的大小超过一个物理块时,会发生索引表的分配问题。一般采用多级(间接索引)技术,这时在由索引表指出的物理块中存放的不是文件存放处而是存放文件信息的物理块地址。如果一个物理块能够存储 n 个地址,则一级间接索引,将可寻址的文件长度变为 【n 的二次方】块。对于更大的文件可以采用二级甚至三级间接索引(例如, UNIX 操作系统采用三级索引结构)。

4f6e990589fa39c0dae4096533baac3e.png

索引文件的优点是既适用于顺序存取,又适用于随机存取。缺点是索引表增加了存储空间的开销。另外,在存取文件时需要访问两次磁盘,一次是访问索引表,另一次是根据索引表提供的物理块号访问文件信息。为了提高效率,一种改进的方法是,在对某个文件进行操作之前,预先把索引表调入内存。这样,文件的存取就能直接从内存的索引表中确定相应的物理块号,从而只需要访问一次磁盘。

3 文件存储设备管理(存储空间管理)

文件存储设备管理,就是操作系统要有效地进行存储空间的管理。由于文件存储设备是分成许多大小相同的物理块,并以块为单位交换信息,因此,文件存储设备的管理实质上是对空闲块的组织和管理问题。它包括空闲块的组织,空闲块的分配与空闲块的回收等问题。

有 3 种不同的空闲块管理方法,它们分别是索引法、链接法和位示图法。

(1)索引法。索引法把空闲块作为文件并采用索引技术。为了有效,索引对应于一个或由几个空闲块构成的空闲区。这样,磁盘上每一个空闲块区都对应于索引表中一个条目,这个方法能有效地支持每一种文件分配方法。

(2)链接法。链接法分为空闲盘块链与空闲盘区链两种:

【1】 空闲盘块链:使用链表把空闲块组织在一起,当申请者需要空闲块时,分配程序从链首开始摘取所需的空闲块。反之,管理程序把回收的空闲块逐个挂入队尾,这个方法适用于每一种文件分配方法。空闲块的链接方法可以按释放的先后顺序链接,也可以按空闲块区的大小顺序链接。后者有利于获得连续的空闲块的请求,但在分配请求和回收空闲块时系统开销会多一点。

【2】空闲盘区链:将磁盘上所有空闲盘区拉成一条链,在每个盘区上包含若干用于指示下一个空闲盘区的指针,指明盘区大小的信息。分配盘块时,通常采用首次适应算法 ( 显式链接法 )。 在回收时,要将回收区与空闲盘区相合并 。

(3)位示图法。该方法是在外存上建立一张位示图(Bitmap),记录文件存储器的使用情况。每一位仅对应文件存储器上的一个物理块,取值 0 和 1 分别表示空闲和占用。文件存储器上的物理块依次编号为: 0、 1、 2、…。假如系统中的一个字的字长为 32 位,也就是说,一个字可以表示 32 个物理块。假设有 4096 个物理块,那么需要 128 个字(4096/32=128)来表示这些物理块。

位示图是利用二进制的一位来表示磁盘中一个盘块的使用情况,如图 2 所示。当其值为“0”时,表示对应的盘块空闲;为“1”时表示已分配。由所有盘块对应的位构成一个集合,称为位示图。

81edf9750176744e830af1d7fe078b58.png

图 2 位示图

示例如下: 某磁盘盘组共有 10 个盘面,每个盘面上有 100个磁道,每个磁道有 32 个扇区,假定物理块的大小为 2 个扇区,分配以物理块为单位。

  1. 若使用位图管理磁盘空间,则位图需要占用多少字节空间?
  2. 若采用空白文件管理磁盘空间,且空白文件目录的每个表项占用5个字节,则当空白文件数目大于多少时,空白文件目录占用的字节数大于位图占用的字节数?

分析过程:

  • 总扇区数= 10 * 100 * 32=32000 个;每个物理块 2 个扇区,则总物理块数 = 32000/2=16000 块。
  • 假设采用位图来管理磁盘空间。一个字节通常是 8 位,则所有这些物理块需要 2000 (16000/8)字节空间。
  • 假设采用空白文件来管理磁盘空间。一个表项占用 5 个字节,那么 2000/5=400,也就是说当空白文件数>400 时,文件目录所占用的字节数就会大于位图所占用的字节数。

(4)成组链接法 成组链接法是将空闲表和空闲链表法结合形成的一种空闲盘块管理方法,适用于大型文件系统。

4 树型目录结构

在计算机的文件系统中,一般采用树型目录结构。在树型目录结构中,树的根结点为根目录,数据文件作为树叶,其他所有目录均作为树的结点。

根目录隐含于一个硬盘的一个分区中,根目录在最顶层。它包含的子目录是一级子目录。每一个一级子目录又可以包含若干二级子目录,…,这样的组织结构就叫作目录树。

当前盘和当前目录是系统默认的操作对象。 如果用户没有指明操作对象,系统就将用户命令指向当前盘和当前目录。

路径是指从根目录或者当前目录开始到访问对象(目录或者文件),在目录树中路经的所有目录的序列。例如“c:emp”就是 Windows 系统中的一条路径。在树型目录结构中,从根目录到任何数据文件之间,只有一条唯一的通路,从树根开始,把全部目录文件名与数据文件名,依次用“ /”( UNIX/Linux 系统)或“ ”( Windows 系统)连接起来,构成该数据文件的路径名,且每个数据文件的路径名是唯一的。这样,便可以解决文件重名问题。

从树根开始的路径为绝对路径,如果文件系统有很多级时,使用不是很方便,所以引入相对路径,即从当前目录开始,再逐级通过中间的目录文件,最后到达所要访问的数据文件。

绝对路径给出文件或目录位置的完全描述,通常由层次结构的顶端开始(根目录),通常第一个字符是“/”(UNIX/Linux 系统)或者是盘符(Windows 系统)。相对路径通常由目录结构中的当前位置开始,一般都比绝对路径要短。

父目录是指当前路径的上一层目录。每个目录下都有代表当前目录的“.”文件和代表当前目录父目录的“..”文件,相对路径名一般就是从“..”开始的。

在 Windows 系统中,有两种格式的文件,分别是 FAT32 ( FAT16 ) 文件和 NTFS 文件。 NTFS 在使用中产生的磁盘碎片要比 FAT32 少,安全性也更高,而且支持单个文件的容量更大,超过了 4GB , 特别适合现在的大容量存储。 NTFS 可以支持的分区 ( 如果采用动态磁盘则称为卷 ) 大小可以达到 2TB ,而 Windows 2000 中的 FAT32 支持分区的大小最大为 32GB。


作者:deniro
链接:https://www.jianshu.com/p/e94fc7d228d9
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

相关文章

错误 0xc0202049: 数据流任务 1: 无法在只读列“ID”中插入数据

数据库导入导出时总失败,错误信息如下: 正在验证 (错误) 消息错误 0xc0202049: 数据流任务 1: 无法在只读列“ID”中插入数据。 (SQL Server 导入和导出向导) 错误 0xc0202045: 数据流任务 1: 验证列元数据失败。 (SQL Server 导入和导出向导) 错误 0xc0…

python中的items方法_Python 字典的items()方法和iteritems()方法有什么不同?【面试题详解】...

今天爱分享给大家带来Python 字典的items()方法和iteritems()方法有什么不同?【面试题详解】,希望能够帮助到大家。 字典是 Python 语言中唯一的映射类型。映射类型对象里哈希键(键,key)和指向的对象(值,value)是多对一的关系&am…

大网高级技术笔记(一)

防伪码;黑发不知勤学早,白首方悔读书迟本章目标:理解消化动态路由协议与OSPF协议并应用于实际工作中。第一章 动态路由协议一、按照路由执行的算法分类距离矢量路由协议:RIP、IGRP链路状态路由协议:OSPE、IS-IS二、RIP…

容器类基础篇(一)

容器类:用来解决数组具有固定尺寸而使得灵活性受限的问题。基本的容器类(集合类)有:List、Set、Queue、Map。 Java容器类类库的用途是用来“保存对象”,这分为两个不同的大类: 1.Collection(集合…

阿里MySQL读写一致_阿里面试题:如何保证缓存与数据库的双写一致性?

作者:你是我的海啸出处:https://blog.csdn.net/chang384915878/article/details/86756463只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性…

反射小应用之DataTable和ListT互操作

反射小应用之DataTable和List<T>互操作 在程序中&#xff0c;往往会遇到一些小情况&#xff0c;就是数据库取出来的时候为了方便直接将数据通过存储在DataSet或DataTable中&#xff0c;这样做的一个后果是在日后的的对数据进行”细“操作时&#xff0c;就发现它可能没有L…

python适合什么样的人群_什么样的人比较适合选择Python开发+人工智能技术?

原标题&#xff1a;什么样的人比较适合选择Python开发人工智能技术&#xff1f; 互联网行业最近几年来确实成为了竞相追捧的行业&#xff0c;人工智能、大数据的不断发展让Python开发技术成为了继Java开发之后的又一热门编程语言。我们都知道&#xff0c;想要学习Python开发编程…

java 8 方法引用(method references)

1 什么是方法引用&#xff08;method references&#xff09;java 8 添加了一个很熟悉但是又很陌生的符号::。 你也许会看到这样的代码System.out::println其实就是方法引用&#xff08;method references&#xff09;。由于java 8 把方法/函数也作为第一输入参数。所以你会看到…

SWT中Button事件的几种不同写法

1&#xff0e;匿名内部类写法button.addSelectionListener(new SelectionAdapter(){Overridepublic void widgetSelected(SelectionEvent e){.....}});释&#xff1a;当button被单击时&#xff0c;底层就会检查button是否注册了相对就的监听器&#xff0c;如果有&#xff0c;底…

python中fetchall函数_python中查询数据库时fetchone()函数和fetchall()函数的区别

我们在用python操作数据库的时候,经常会碰见两个函数:fetchone()和fetchall()刚开始学习的时候可能会搞不清楚他们两个的区别其实非常简单首先fetchone()函数它的返回值是单个的元组,也就是一行记录,如果没有结果,那就会返回null其次是fetchall()函数,它的返回值是多个元组,即返…

文字对齐格式

text-align:justify; letter-spacing:5px; line-height:40px; text-indent:40px 转载于:https://www.cnblogs.com/mrcln/p/3757148.html

excel vba 从入门到精通_VBA词汇-基本元素篇

在公众号发布学习VBA需要哪些基础知识这篇文章后&#xff0c;有朋友给我们留言&#xff0c;希望可以出一份VBA基础的英语知识贴。其实相关的内容我们会在后面所对应知识点一一进行讲解&#xff0c;提前剧透其实会少很多学习未知知识的乐趣哦~ 我们会将所涉及的基础单词和其说明…

jQuery基础:remove()与 detach()区别

1、detach&#xff08;&#xff09; detach() 方法移除被选元素&#xff0c;包括所有文本和子节点。这个方法会保留 jQuery 对象中的匹配的元素&#xff0c;因而可以在将来再使用这些匹配的元素。detach() 会保留所有绑定的事件、附加的数据&#xff0c;这一点与 remove() 不同…

python保存模型 特征_Pytorch提取模型特征向量保存至csv的例子

Pytorch提取模型特征向量# -*- coding: utf-8 -*-"""dj"""import torchimport torch.nn as nnimport osfrom torchvision import models, transformsfrom torch.autograd import Variableimport numpy as npfrom PIL import Imageimport torchvi…

Matlab画图-非常具体,非常全面

Matlab画图 强大的画图功能是Matlab的特点之中的一个&#xff0c;Matlab提供了一系列的画图函数&#xff0c;用户不须要过多的考虑画图的细节&#xff0c;仅仅须要给出一些基本參数就能得到所需图形&#xff0c;这类函数称为高层画图函数。此外&#xff0c;Matlab还提供了直接对…

openfeign使用_Feign使用基于配置服务发现

之前写了篇《Feign在实际项目中的应用实践总结》Feign在实际项目中的应用实践总结 - 沐风之境 - 博客园​www.cnblogs.com总结了在一般项目中如何使用Feign这个提升开发效率的利器。最近在看Feign的文档的时候发现了之前遗漏的一些点&#xff0c;所以写了这篇文章进行补充。pom…

Oracle按用户进行统计信息更新

按用户进行统计信息更新 PL/sqldev工具使用system用户连接到oracle&#xff0c;打开命令窗口执行以下SQL&#xff0c;用户名请根据实际情况进行更改&#xff1a; begin dbms_stats.gather_schema_stats( ownname > testuser, estimate_percent > dbms_stats.aut…

个人使命宣言

最近在阅读《高效人士的7个习惯》&#xff0c;其中提到个人使命宣言&#xff0c;也就是个人的行为宪法&#xff0c;有了这个宪法我们在日常生活和工作中才能有法可循有法可依&#xff0c;才不至于在纷繁的社会中迷失自己。通过思考自我感觉制作个人使命宣言还是非常有用的&…

jq js json 转字符串_JS中JSON对象和String之间的互转及处理技巧

json&#xff1a;JavaScript 对象表示法(javascript Object Notation)&#xff0c;其实JSON就是一个javaScript的对象(Object)而已。如有不清楚JSON&#xff0c;可以去w3cschool了解http://www.w3school.com.cn/json/1.在Javascript中新建一个字符串(JSON文本)。 var txt { &q…

php中__autoload()方法详解

原文地址&#xff1a;http://www.php100.com/html/php/lei/2013/0905/5267.html[导读] PHP在魔术函数__autoload()方法出现以前&#xff0c;如果你要在一个程序文件中实例化100个对象&#xff0c;那么你必须用include或者require包含进来100个类文件&#xff0c;或者你把这100个…