操作系统-文件管理(上)

初识文件管理

  • 文件–就是一组有意义的信息/数据集合

文件的属性

	文件名:由创建文件的用户决定文件名,主要是为了方便用户找到文件,**同一目录下不允许有重名文件**
	标识符:一个系统内的各个文件标识符唯一,对用户来说毫无可读性,因此标识符只是操作系统用于去分各个文件的一种内部名称
	类型:指明文件的类型
	位置:文件存放的路径(让用户使用)、在外村中的地址(操作系统使用、对用户不可见)
	大小:指明文件大小
	保护信息:对文件进行保护的访问控制信息
	创建时间、上次修改时间、文件所有者信息等

文件内部数据的组织形式

数据组织形式

操作系统向上提供的基本功能

	创建文件(create系统调用)
	删除文件(delete系统调用)
	读文件(read系统调用)
	写文件(write系统调用)
	打开文件(open系统调用)
	关闭文件(close系统调用)

可用几个基本操作完成更复杂的操作,如复制文件等

文件的逻辑结构

在这里插入图片描述

  • 逻辑结构:指在用户看来,文件内部的数据应该是如何组织起来的
  • 物理结构:指在操作系统卡莱,文件的数据时如何存放在外存中的

类似于数据结构中的“逻辑结构”和“物理结构”
如“线性表”就是一种逻辑结构,在用户角度看来,线性表就是一组有先后关系的元素序列
“线性表”这种逻辑结构可以用不同的物理结构实现,如顺序表/链表。

  • 无结构文件
    文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”。没有明显的结构特性,如Windows操作系统中的.txt文件

  • 有结构文件
    由一组相似的记录组成,又称“记录式文件”。每条记录由若干个数据项组成。如数据库表文件。一般来说,每条记录有一个数据项可作为关键字(作为识别不同记录的ID)。根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录可变长记录两种。

有结构文件的逻辑结构分为

  • 顺序文件

     - 文件中的记录一个接一个的顺序排列(逻辑上),记录可以使定长的或可变长的。
     - 各个记录在物理上可以顺序存储或链式存储
     - 顺序文件又可分为:
     		串结构:记录之间的额顺序与关键字无关,通常按照记录存入的时间决定记录的顺序
     		顺序结构:记录之间的顺序按关键字顺序排列
    
    • 顺序文件的随机查找
      在这里插入图片描述
  • 索引文件

    • 建立一张索引表以加快文件检索速度。每条记录对应一个索引项
    • 主要用于对信息处理的及时性要求比较高的场合
  • 索引顺序文件

    • 索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但不同的是:并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项。
    • 例如:学生记录按照学生姓名的开头字母进行分组。每个分组就是一个顺序文件,分组内的记录不需要按关键字排序
      在这里插入图片描述

文件目录

文件控制块

目录文件中的一条记录就是一个“文件控制块(FCB)”
FCB的有序集合称为“文件目录”,一个FCB就是一个文件目录项,FCB中包含了文件的基本信息

目录结构

单级目录结构
	整个系统中只建立一张目录表,没饿文件占一个目录表
	单级目录实现了“按名存取”,但是不允许文件重名
两级目录结构:分为主文件目录(MFD)和用户级目录(UFD)			
		1.主文件目录记录用户名及相应用户文件目录的存放位置
		2.用户文件目录由该用户的文件FCB组成
		3.允许不同用户名的文件重名
多级目录结构(树形目录结构)		
	用户要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。
	各级目录之间用“/”隔开。从根目录出发的路径称为**绝对路径**,可以使用从当前目录出发的“相对路径”。
无环图目录结构
	可以用不同的文件名指向同一个文件,甚至可以指向同一个目录
	需要为每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点,计数器为0时才真正删除该结点
	注意:共享文件不同于复制文件。在共享文件中,由于用户指向的是同一个文件
		 因此只要其中一个用户修改了文件数据,那么所有用户都可以看到文件数据的变化

索引结点

  • 除了文件名之外的所有信息都放到索引节点中,每个文件对应一个索引结点
  • 目录项中只包含文件名、索引结点指针,因此每个目录项的长度大幅减小
  • 由于目录项长度减小,因此每个磁盘块可以存放更多个目录项,因此检索文件时磁盘I/O的次数就减少了很多

文件的物理结构(文件分配方式)

文件块、磁盘块

  • 类似于内存分页,磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。很多操作系统中,磁盘块的大小与内存块、页面的大小相同
  • 在内存管理中,进程的逻辑地址空间被分为一个个页面
    同样的,在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为了一个一个的文件“块”。
    于是文件的逻辑地址也可以表示为**(逻辑块号,块内地址)**的形式,用户通过逻辑地址来操作文件,操作系统要负责实现从逻辑地址到物理地址的映射
    操作系统为文件分配存储空间都是以块为单位的

连续分配

  • 连续分配方式要求每个文件在磁盘上占有一组连续的块
    在这里插入图片描述

  • 逻辑地址到物理地址的映射

      (逻辑块号,块内地址)->(物理块号,块内地址)
      只需要转换块号就行,块内地址保持不变
      用户给出要访问的逻辑块号,操作系统找到改文件对应的目录项(FCB)...
      物理块号=起始块号+逻辑块号
      还需检查用户提供的逻辑块号是否合法(逻辑块号≥长度就不合法)
    

    故连续分配方式支持顺序访问和直接访问(即随机访问)
    在这里插入图片描述

    • 读取某个磁盘时,需要移动磁头。访问的两个磁盘块相隔越远,移动磁头所需时间就越长。故连续分配的文件在顺序读/写时速度最快
    • 物理上采用连续分配的文件不方便拓展,存储空间利用率低,会产生难以利用的磁盘碎片

链接分配

链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接显示链接两种。

隐式链接
文件名起始块号结束块号
aaaa916
  • 目录中记录了文件存放的起始块号和结束块号
    除了文件的最后一个磁盘块之外,每个磁盘块中都会保存指向下一个潘快的指针,这些指针对用户是透明的
  • 逻辑地址->物理地址
    用户给出要访问的逻辑块号,操作系统找到改文件对应的目录项(FCB)…
    从目录项中找到起始块号(即0块号),将0号逻辑块读入内存,由此知道1号逻辑块存放的物理块号…以此类推
  • 故采用链式地方时的文件,只支持顺序访问,不支持随机访问,查找效率低。另外,指向下一个盘块的指针也需要耗费少量的存储空间。
  • 采用隐式链接的链接分配方式,很方便文件拓展。另外,所有的空闲磁盘块都可以被利用,不会有碎片问题,外存利用率高。
显示链接
 把用于链接文件各物理块的指针显示的存放在一张表中。即文件分配表(FAT,File Allocation Table)
  • 目录中只需记录文件的起始块号
文件名起始块号
aaa2
bbb4
  • FAT(文件分配表)
物理块号下一块
01
2-1
35
4-1
523
0
22
233
假设某个新创建文件“aaa”依次存放在磁盘块2->5->0->1
假设某个新创建文件“bbb”依次存放在磁盘块4->23->3
  • 一个磁盘仅设置一张FAT。开机时,将FAT读入内存,并常驻内存
  • 逻辑地址->物理地址
    用户给出要访问的逻辑块号,操作系统找到改文件对应的目录项(FCB)…
    从目录项中找到起始块号,若i>0,则查询内存中的文件分配表FAT,往后找到i好逻辑块对应的物理块号。逻辑块号转换成物理块号的过程不需要读磁盘操作
    结论:采用显示链接方式的文件,支持顺序访问,也支持随机访问,由于块号转换过程不需要访问磁盘,因此相比于隐式链接来说,访问速度快很多,也不会产生外部碎片,也可以很方便的对文件进行拓展

索引分配

索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表功能类似于内存管理中的页表)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块

  • 目录中需要记录文件的索引块是几号磁盘块
文件名索引块
aaa7
bbb23
假设某个新创建的文件“aaa”的数据依次存放在磁盘块2->5->13->9。
7号磁盘块作为“aaa”的索引块,索引块中保存了索引表的内容
  • 文件aaa的索引表
逻辑块号物理块号
02
15
213
39
  • 注:在显示链接的链式分配方式中,文件分配表FAT是一个磁盘对应一张。而索引分配方式中,索引表是一个文件对应一张。
  • 索引分配方式可以支持随机访问。文件拓展也很容易实现,只需要给文件分配一个空闲块,并增加一个索引表项即可。
物理结构总结
How?目录项内容优点缺点
顺序分配为文件分配的必须是连续的磁盘块起始块号、文件长度顺序存取速度快,支持顺序访问会产生碎片,不利于文件拓展
隐式链接出文件的最后一个磁盘块之外,每个盘块中都存有指向下一个盘块的指针起始块号、结束块号可解决碎片问题,外存利用率高,文件拓展实现方便只能顺序访问,不能随机访问
显示链接建立一张文件分配表(FAT),显示记录盘块的先后关系(开机后FAT常驻内存)起始块号除了拥有隐式链接的优点之外,还可通过查询内存中的FAT实现随机访问FAT需要占用一定的存储空间
索引分配为文件数据块建立索引表,若文件太大,可采用链接方案、多层索引、混合索引链接方案记录的是第一个索引块的块号,多层/混合索引记录的是顶级索引号的块号支持随机访问,易于实现稳健的拓展索引表需占用一定的存储空间。访问数据块前需要先读入索引块。若采用链接方案,查找索引块时可能需要很多次读磁盘操作。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件空间管理是指操作系统如何管理硬盘上的文件空间,包括如何分配和回收文件所占用的磁盘空间。 在文件系统中,文件通常被分成多个块或扇区存储在磁盘上。操作系统需要跟踪哪些块已经被占用,哪些块是空闲可用的。为了有效地管理文件空间,操作系统使用了一些算法和数据结构,如位图、空闲块链表等。 其中,位图是一种常用的文件空间管理算法。操作系统使用一个位图来表示磁盘上每个块的使用情况,位图中的每个位代表一个块,如果该位为1,则表示该块已被占用,如果该位为0,则表示该块是空闲的。当需要分配磁盘空间给新文件时,操作系统会在位图中查找空闲块,然后把这些块分配给新文件。当文件被删除或移动时,操作系统会将对应的位图位置为0,表示该块空闲可用。 除了位图算法,还有其他的一些文件空间管理算法,如链表算法。在链表算法中,操作系统维护一个空闲块链表,每个节点代表一个空闲块。当需要分配磁盘空间给新文件时,操作系统会从链表中取出一个节点,然后把这个节点对应的块分配给新文件。当文件被删除或移动时,操作系统会把对应的块添加到空闲块链表中。 文件空间管理操作系统中扮演着重要的角色,它直接影响到文件系统的性能和可靠性。因此,操作系统需要设计合理的文件空间管理算法和数据结构,来实现高效、可靠的文件存储。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值