【操作系统学习】(七)文件系统(2)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文主要写操作系统中与文件系统相关的内容。
本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。

文件系统目录实现

在何处存放文件属性

  • 直接存放在目录项中

(u1s1,我感觉Windows也是这样的)

  • 对于采用i节点的系统,把文件属性放在i节点中。

如何支持可变长的文件名

  • 给予文件名一个长度限制

(像关系型数据库的表一样,设定最大长度255,不过就是有点浪费空间)

  • 在内存中,划定某一块存放文件a的信息,下一块存b,依次类推。

(让我联想到了写c代码的时候的变量放置位置还有那个对应的内存占用表,最好把相同类型的放一处,把空间占满,比如先全设int,再全放double。。咳咳。。只可意会,没法言传)

  • 文件项存放指向文件名的指针和文件属性,专门有个存放文件名信息。
  • 加快查找速度可以考虑哈希表

适用于经常有很多数量文件的系统,否则管理的开销也很大。

  • 使用cache

适合查询目标密集的情况

共享文件

linked机制表明文件系统本质是个有向无环图(注意:不是树)

linked的两种实现方式

  • 磁盘块列入与该文件相关的小型数据结构(如i节点),目录将指向该数据结构(类似于指针记录的用法)

存在的问题是如果文件所有者将文件删除,该节点被重新分配,链接文件指向的是无效的节点。

  • 不用指针,用符号链接,即产生链接后在原文件目录下产生一个新文件,里面存放所链接的文件的路径。

会产生额外开销,且查找目录时被链接的文件将多次被定位到。

日志结构文件系统(Log-structured file system)

  • 市场需求:未来多数磁盘访问是零碎的写操作。
  • 工作原理:通过索引维护分散在整个日志中的i节点。所有写操作最初都被缓冲在内存中,并周期性地把所有已缓冲的写作为独立端,在日志末尾处写入磁盘。
  • 如何解决磁盘空间不够大,日志可能占满磁盘的问题?

清理线程,周期性扫描日志以进行磁盘压缩。

日志文件系统

  • 思想:保存一个用于记录系统下一步要做什么的日志,如果系统崩溃了,重启后还可以通过查看日志继续未完成的任务。
  • 为了让文件系统工作,被写入日志的操作必须是幂等的。可以引入 事务 来减少失误。

虚拟文件系统(VFS)

绝大多数UNIX OS都使用虚拟文件系统的概念,尝试将多种文件系统统一成有序结构。
大多数VFS应用的本质上都是面向对象的,抽象出所有文件系统都共有的部分。

磁盘空间管理

把文件系统分割成固定大小的块来存储,各块之间不一定相邻。

如何记录跟踪空闲块?

  • 用空闲磁盘块存放空闲表
  • 位图。n个块的磁盘只需要n位的位图。

如何避免过多磁盘I/O?

拆分满了的指针块。

如果内核是分页的,把位图放在虚拟内存内,在需要时将位图的页面调入

文件系统的一致性

  • 块一致性
  • 文件一致性

UNIX的fsck,Windows的scandisk都可用于检查一致性。

提升文件系统性能

  • cache
  • 块提前读
  • 减少磁盘臂运动

磁盘碎片整理

Windows的defrag可以移动文件,从而把大部分空闲空间放在一个或多个大的连续区域内。

Linux选择磁盘块的方式使得它很少需要手动的磁盘碎片清理。

!!注意:不要在固态硬盘上进行这一操作!!

参考书籍

《现代操作系统》 Andrew S.Tanenbaum,Herbert Bos著,陈向群,马洪兵等译

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
机器学习/深度学习 Dart 前端开发
移动应用与系统:构建现代数字生态的基石在当今这个高度数字化的社会中,移动应用与操作系统已成为我们日常生活不可或缺的一部分。它们不仅改变了我们的沟通方式,还重塑了我们的工作、学习和娱乐模式。本文将深入探讨移动应用开发的基础、移动操作系统的功能以及这两者如何共同塑造了我们的数字世界。
随着智能手机和平板电脑的普及,移动应用与系统的重要性日益凸显。它们不仅为用户提供了便捷的服务和丰富的功能,还为开发者提供了广阔的创新平台。本文将介绍移动应用开发的基本概念、技术栈以及最佳实践,并探讨主流移动操作系统的特点和发展趋势。通过分析移动应用与系统的相互作用,我们可以更好地理解它们在现代社会中的重要地位。
|
2月前
|
存储 算法 安全
操作系统之文件系统的奥秘
【9月更文挑战第19天】本文将深入探索操作系统中不可或缺的组件——文件系统,揭示其工作原理与实现细节。我们将通过浅显的语言和生动的比喻,一步步解析文件系统如何组织数据、管理存储空间,并确保数据的完整性和安全性。文章不仅适合初学者构建基础概念,也能帮助有经验的开发者更深入地理解文件系统的高级特性。
|
12天前
|
存储 安全 大数据
深入浅出操作系统:文件系统的秘密
【10月更文挑战第35天】本文将揭示文件系统背后的奥秘,从其基本概念到复杂的实现机制。我们将一起探索文件系统的结构和原理,并了解它如何影响我们的日常计算体验。通过简单的例子和比喻,文章旨在使读者对文件系统有一个清晰而深刻的理解,就像甘地所言:“你必须成为你希望在世界上看到的改变。”让我们一起成为理解操作系统的先行者。
|
5月前
|
存储 Linux 数据处理
探索Linux操作系统的内核与文件系统
本文深入探讨了Linux操作系统的核心组件,包括其独特的内核结构和灵活的文件系统。文章首先概述了Linux内核的主要功能和架构,接着详细分析了文件系统的工作原理以及它如何支持数据存储和检索。通过比较不同的文件系统类型,本文旨在为读者提供一个关于如何根据特定需求选择合适文件系统的参考框架。
|
6月前
|
存储 Unix Linux
手写操作系统(4)——计算机是如何启动的?BIOS、GRUB、文件系统......
手写操作系统(4)——计算机是如何启动的?BIOS、GRUB、文件系统......
119 1
|
2月前
|
存储 缓存 文件存储
探索操作系统中的文件系统管理
【9月更文挑战第25天】在数字世界的海洋中,操作系统是指引我们航行的灯塔。它不仅管理着硬件资源,还维护着软件的秩序。本文将深入探讨操作系统中一个至关重要的部分——文件系统管理。我们将从基础概念出发,逐步深入到文件系统的设计与实现,最后通过代码示例来直观展示文件系统的操作。让我们一起揭开文件系统管理的神秘面纱,理解其背后的逻辑与奥秘。
|
3月前
|
编解码 Linux 程序员
深度探索Linux操作系统 —— 构建根文件系统2
深度探索Linux操作系统 —— 构建根文件系统
45 12
|
3月前
|
Linux Shell 网络安全
深度探索Linux操作系统 —— 构建根文件系统1
深度探索Linux操作系统 —— 构建根文件系统
54 6
|
3月前
|
存储 人工智能 数据管理
深入理解Linux操作系统之文件系统管理探索人工智能:从理论到实践的旅程
【8月更文挑战第30天】在探索Linux的无限可能时,我们不可避免地会遇到文件系统管理这一核心话题。本文将深入浅出地介绍Linux文件系统的基础知识、操作命令及高级技巧,帮助你更有效地管理和维护你的系统。从基础概念到实践应用,我们将一步步揭开Linux文件系统的神秘面纱。
|
2月前
|
运维 Ubuntu Linux
操作系统发行版特性学习
操作系统发行版特性学习

热门文章

最新文章

下一篇
无影云桌面