操作系统复习4.1.0-文件管理结构

news/2024/11/30 9:29:26/

定义

一组有意义的信息的集合

属性

文件名、标识符、类型、位置、大小、创建时间、上次修改时间、文件所有者信息、保护信息

操作系统向上提供的功能

创建文件、删除文件、读文件、写文件、打开文件、关闭文件
这6个都是系统调用

创建文件

创建文件时调用Create系统调用
首先在外存中找到文件
先在外存找到所需的空间,通过空闲链表法、位示图、成组链接法等管理策略,找到空闲空间
然后在文件存放路径的信息找到该目录对应的目录文件,在目录中创建该文件对应的目录项

删除文件

根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的目录项
根据目录项提供的外存地址,根据空闲表法、空闲链表法等回收文件占用的磁盘块
从目录表中删除文件对应的目录项

打开文件

在这里插入图片描述

删除文件

在这里插入图片描述

根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的目录项,检查用户对文件的操作权限
将目标项复制到内存中的“打开文件表”中,并将对应表目的编号返回给用户,用户使用打开文件表的编号来指明要操作的文件
系统将读指针指向的外存中,将用户指定大小的数据读入用户指定的内存区域中

读文件

系统使用read系统调用完成写操作,需要指定哪个文件(打开文件表中的索引号)和读入多少数据,指明读入的数据要放在内存中的什么位置
系统从用户指定的内存区域中,将指定大小的数据写回写指针指向的外存

写文件

执行文件和写出数据大小,写回外存的数据放在内存的什么位置

文件存储

操作系统以块为单位分配存储空间,块等大,常包含2的整数幂个地址,外存也是由一个个存储单元组成,每个存储单元对应一个物理地址

逻辑结构

文件内组织结构:
无结构文件:如文本文件,由一些二进制或字符流组成,又称流式文件
有结构文件:如数据库表,由一组组相似的记录组成,又称记录式文件,记录是一组相关数据项的集合

根据记录长度又可分为定长记录和不定长记录

文件间组织结构:
目录、文件,目录内可以有目录和文件

根据有结构文件中的各条记录在逻辑上如何组织可以分为三类:顺序文件、索引文件、索引顺序文件

顺序文件

文件中的记录一个接一个顺序排列
又可细分为串结构和顺序结构,前者记录间顺序与关键字无关,后者则按关键字顺序排序
链式存储不支持随机存取
而顺序存储时,可变长记录则不支持随机存取,定长则可以

定长且顺序存储可实现随机存取,若再保证顺序结构,即可快速检索

索引文件

对于可变长记录文件,需要顺序查找
因此通过索引表,索引表本身是定长记录的顺序文件,可快速找到对应的索引项,

索引顺序文件

每个记录对应一个索引表项,因此索引表可能会很大,可能索引表比文件内容本身都大,因此改良为一个索引表项对应一组记录,但速率仍不够快

多级索引顺序文件就是最终改良,加入有10^6个组,以100个为1组,形成顶级索引表,次级索引表依次类推

文件目录实现

文件控制块FCB的有序集合称为文件目录,一个FCB就是一个文件目录项,FCB内包含了文件的基本信息、存取控制信息、使用信息,最主要为文件名和存放的物理地址

目录结构

单级目录结构、两级目录结构

多级目录结构(树型结构)

绝对路径为"/目录1/…/文件名",为避免每次都低效地从根目录开始查找,
因此引入当前目录和相对路径,即当前已经处于目录2,就代表目录2的结构表已经载入内存中,无需再从目录1开始寻找,文件的地址用根目录从目录2开始的相对路径

但多级目录结构不利于文件共享

无环图目录结构

在这里插入图片描述
通过添加共享计数器记录共享结点的数量,且由于都指向同一个文件,所有用户都可看到文件数据的变化

索引结点FCB瘦身

现在的PCB除了文件名和物理位置外有许多冗余信息,如存取权限等,而FCB主要是通过文件名匹配读出文件其他信息,因此可以通过索引结点机制为FCB瘦身,通过文件名匹配索引结点指针,指针指向文件名外的所有信息

物理结构

操作系统管理磁盘块涉及两类:非空磁盘块和空闲磁盘块

非空闲磁盘块

文件数据获得分配存储空间的方式有三种:连续分配、链接分配、索引分配

磁盘中的存储单元也会被分为一个个块/磁盘块/物理块,磁盘块与内存块、页面等大

内存与磁盘间的数据交换都是以块为单位进行的,每次读入写出都为一块
由于外存管理是以块为单位,因此文件的逻辑地址空间被分为一个个的文件块,与内存相似地,也可分为(逻辑块号、块内地址)

连续分配

每个文件在磁盘上占有一组连续的块用户通过逻辑地址操作文件
(逻辑块号、块内地址)—>(物理块号、块内地址)
物理块号 = 起始块号 + 逻辑块号
而文件目录中记录了文件名和起始块号和块数,因此可以随机访问

连续分配优势在连续读写时的速度快
但文件的拓展不方便,需要经常挪位,且会产生碎片

链接分配

为文件分配离散的磁盘块

隐式链接

目录中记录文件名、起始块号和结束块号
每个磁盘块会保存指向下一个盘块的指针,且对用户透明
隐式链接的文件只支持顺序访问,外存利用率高,不会有碎片问题

显式链接

目录中记录文件名和起始块号,另设置文件分配表FAT,用于记录文件各个物理块的指针,每个磁盘仅设置一张FAT,开机后将FAT读入内存,并常驻内存,由于FAT表项等大,因此同样隐含块号

逻辑块号转换成物理块号的过程不需要读磁盘操作,且显示链接支持随机访问和顺序访问,过程间不需访问磁盘,速度更快,且不产生外部碎片,文件拓展方便

索引分配

在这里插入图片描述

索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块
区分:文件存放数据的磁盘块叫数据块,索引表存放的磁盘块叫索引块

逻辑块号—>物理块号
用户给出逻辑块号,系统查找对应的FCB,从FCB中可知索引表位置,再由索引表和逻辑块号得知物理块号,由此可知索引分配方式可以支持随机访问,文件拓展也容易实现,但索引表占用一定存储空间

但磁盘块大小有限,索引表放不下怎么办?

链接方案

一个文件比较大,需要多个索引块,那么将索引块间链接起来,但查询时效率低

多层索引

在这里插入图片描述
类同多级页表,磁盘块大小b/索引表项大小 = 每个磁盘块最多存放在的索引项数量a
文件最大长度:k层索引, a^k*b
k层索引,k+1磁盘读取操作

混合索引

在这里插入图片描述
两种模式混合,针对文件大小进行了方式的区分和选择,小文件就无需多次读取磁盘在这里插入图片描述
在这里插入图片描述

空闲磁盘块

存储空间的划分和存储化

存储空间的划分:将物理磁盘划分为一个个文件卷(逻辑卷、逻辑盘)
磁盘分区:C、D、E盘
盘内分区为:目录区、文件区
目录区:存放文件目录信息FCB、用于磁盘存储空间管理的信息
文件区:用于存放文件数据

空闲表法

适用于连续分配方式,通过表记录第一个空闲盘块号和连续的空闲盘块号,当请求块时,使用首次适应算法,其他算法也可采用
回收时根据前后有无空闲区进行合并表项

空闲链表法

在这里插入图片描述

空闲盘块链

分配时,从链头开始一次摘下k个盘块分配,并修改空闲链的链头指针
回收时,回收的盘块依次挂到链尾,并修改链尾指针

空闲盘区链

分配时,采用首次适应、最佳适应等算法,从链头开始检索,若没有合适的连续空闲块,也可将不同盘区同时分配给一个文件
回收时,若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区,否则将回收区作为单独空闲盘区挂到链尾

位示图法

在这里插入图片描述
位示图法使用(字号i、位号j),盘块号b = ni+j
字号i = b / n,位号j = b%n
0为空闲,1为盘块已分配

分配时
顺序扫描位示图,找到k个相邻/不相邻的0
根据字号和位号算出对应的盘块号,将相应盘块分配给文件
将相应位设置为1

回收时
根据回收的盘块号计算出对应的字号、位号
将对应位设为0

成组链接法

空闲表法和空闲链表法不适用于大型文件系统,因为空闲表或空闲链表过大时,UNIX系统中采用了成组链接法对磁盘空闲块进行管理
文件卷的目录区中专门用一个磁盘块作为超级块,当系统启动时需要将超级块读入内存,并保证内存和外存中的超级块数据一致
在这里插入图片描述
超级块中存储下一组空闲盘块数和空闲块号

当需要分配内存块时,先检查第一个分组的块数是否充足,若充足则使用第一个分组里面取出需要数量的空闲块,若此时第一分组存放着下一组的信息,则需要将下一组的信息复制到超级块中

在这里插入图片描述
当第一组未满时,直接添加

在这里插入图片描述
第一组满了之后,将原本超级块信息复制到新回收块中,新回收块成为第一个分组

文件共享

基于索引结点的硬链接

索引结点有助于文件目录瘦身,因为文件检索只要文件名,其余信息放到索引结点,索引结点中设置链接计数变量count,用于表示链接到本索引结点上的用户目录项数,用户删除文件时count-1,count=0时系统删除文件

基于符号链的软链接

在这里插入图片描述
增添Link类型文件,存放指向目标文件的路径,类同快捷方式
当文件1被删除了,文件2仍存在,只是不能执行文件1

文件保护

口令保护

口令存放在文件对应的FCB或者索引结点,访问文件前需输入口令
口令空间开销小,验证也快
但口令放在系统内部,不够安全

加密保护

通过密码加密文件,加密后文件数据和原始数据不一样
保密性强,不需要存储密码
但编码和译码耗时

访问控制

在这里插入图片描述
每个文件的FCB中都有一个访问控制列表,记录各个用户可以对该文件执行哪些操作

文件系统层次结构

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/179114.html

相关文章

一文简单理解《Effective Java》建议

考虑用静态工厂方法替代构造方法 传统的获取一个对象实例,通常是通过构造方法,new一个对象;不同数量的入参,会有不同的构造方法; 例如,统一的返回结果类,传统方式(伪代码&#xff…

HashMap的扩容(扩容成红黑树之后再次扩容)

HashMap在多次扩容过程中,会根据负载因子(load factor)和容量(capacity)来确定是否需要进行扩容。当HashMap中的元素个数超过负载因子与当前容量的乘积时,就会触发扩容操作。 HashMap的默认负载因子为0.75…

JS隐式转换与类型比较

JS隐式转换与类型比较 隐式转换 隐式转换(Implicit Conversion)是指在表达式求值或操作中自动发生的类型转换。当使用不同的数据类型进行操作时,JavaScript 会自动进行类型转换以满足操作的要求。 隐式转换在编写逻辑时经常会出现&#xf…

starram内存条怎么样_starram内存牌子_星存内存条

我的电脑是星存(StarRam)内存条,512 DDR400 可看网上说有散热片的是假的? 请问是这样的吗? 假的和真的性能差别大不大??前天加了条内存,是黑金刚521 DDR400的, 可是安电脑里就不对了,倒是比以前快了,可是IE总出错,下载东西用迅雷一直自动关闭,重装系统干脆连硬盘都找不到了…

数据结构与算法 -- 再论递归

之前在总结函数的时候,有介绍过递归。参看:C语言再学习 -- 函数 正在看数据结构与算法分析,开篇就讲到递归,那现在就详细讲解下它吧。 参看:递归函数理解 一、什么是递归函数 (1)递归函数即自…

为什么 VS Code 会这么牛逼?

点击上方“码农突围”,马上关注,每天早上8:50准时推送 真爱,请置顶或星标 来自公众号码农翻身 | 作者:李少侠 链接 : zhuanlan.zhihu.com/p/35303567 Visual Studio Code(VS Code)近年来获得了…

数据库之战 | 寻找你心中的数据库漫威英雄

戳蓝字“CSDN云计算”关注我们哦! 技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下! 作者:S.L.Cloud 转自:京东云开发者社区 《复仇者联盟4-终局之…

Google黑科技:USB Accelerator —— EDGE TPU CORROCESSOR

最近玩了玩google的一个“黑科技”,名字叫:Edge TPU Accelerator(边缘TPU加速器)。一个支持TensorFlow Lite,有USB Type-C连接器的神经网络协处理器。其目标是让更多人能学习、探索并体验人工智能,感受AI带…