【操作系统学习】(六)文件系统(1)

简介: 本文为个人对操作系统的学习笔记。
本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。

一点感悟

随着对操作系统学习的逐渐深入,越来越感受到如下两点:

  • 操作系统也有自己的“设计模式”,类似于人类社会的“管理模式”。从某种程度上说,操作系统管理调度和人文学科中的管理是互通的。
  • 数据结构与算法,虽然在写业务代码的时候可能用不到,但都一一体现在了操作系统的架构设计中。

产生文件系统这个抽象概念的背景:

满足计算机长期存储信息的需要

三大要求:

  • 能存储 大量 信息

(受虚拟地址空间大小限制,进程在其地址空间存储的信息有限)

  • 信息不受使用的进程影响

(而进程终止时其保存的信息会丢失)

  • 多个进程能 并发 访问有关信息

(某种程度上说信息必须和单个进程是解耦的,是一个独立的存在)

文件系统

这是进程创建的信息逻辑单元,是对在磁盘上保存信息而方便以后读取的物理实体的一种概念抽象。

从用户的角度看文件系统

文件命名

  • win95、win98(虽然现在早没人用了)是属于MS-DOS系统类,即对文件命名不区分大小写
  • 在unix系中,操作系统本身并不关心文件扩展名,用户自己改啥都行;而Windows系则严格规定。

文件结构

在操作系统看来,文件就是字节序列。(unix系以及Windows都是这种)

也有记录序列和树两种结构。前者现在已经没人用了,后者在一些处理商业数据的大型计算机上还应用广泛。

文件类型

image.png

探究其中的二进制文件--以可执行文件为例

未命名绘图.drawio (13).png

文件属性

文件的附加信息称为属性(atribute)或元数据(metadata)

文件目录

  • 进程切换工作目录是安全的
  • 但进程不能随意更改库文件目录,否则会由于其他进程对目录的假设失效,导致其他进程无法正常运行。

目录操作

link:

image.png

从用户的视角看,在多个目录下都会出现该文件。

从操作系统的视角看,多个路径(的指针/映射)都指向了该文件(这句是我的理解)

unlink

删除文件的本质就是unlink。只不过对于文件只出现在一个目录下的情况,表现为该文件直接消失;而对于文件有多个link的情况,unlink仅解除某个指定路径的link。

链接文件的一种可选方式——符号链接

一个file name指向命名另一个文件的小文件,当访问该小文件时,文件系统沿着路径最终找到了file name ,并且通过file name再找文件。

其中,这个file name就是符号,起到了跳板的作用。(不知道有没有理解错)

通过这种机制,不仅能跨越磁盘的界限,还能访问远程计算机上的文件。

从操作系统的角度看文件系统

文件系统布局

文件系统存放在磁盘上。

image.png

文件存储实现的几种方案

连续分配

  • 特点:将一连串连续数据块存储在磁盘上。

(我的理解是像划定一大块空间存放数组一样,存数据就赋值,取数据就将该位置置特殊值或移动指针)

  • 由上述表述可知,它的缺点是时间长了会产生“碎片”,优点是简单、读性能好(只需要按顺序读取)
  • 解决“碎片”问题的一种方案:维护一个“空洞列表”,当创建一个新的文件时,即确定该文件的最终大小。

(不过这是比较底层的了,即使有,普通用户也应该感知不到它的存在。比如我从来没有遇到要创建一个文件,系统提示我无法找到适合空间、从而创建失败的情况)

  • 该方案的使用场景:对于 一次性写光学介质来说,这种方案是适用的。

链表分配

  • 优点:充分利用每一个磁盘块
  • 缺点:随机访问慢(要从头开始找);磁盘块存储数据的字节数不再是2的整数次幂,降低了系统的运行效率(要读出完整块的信息,要耗费获得和拼接信息的开销)

在内存中使用文件分配表(file allocation table)的链表分配

(数组和链表的集合)

  • 优点:整块都可以存放数据;数据访问也较纯链表容易
  • 缺点:整张表占据的内存大,不实用。

i节点

给每个文件赋予一张表,称为i节点。表的内容格式如下:

image.png

这样,i节点的大小仅与可能要同时打开的最大文件数有关,而与实际磁盘大小无关。

当文件包含的磁盘块的数目超出了i节点所容纳的数目时,将其放入指针块地址中的附加地址处。

参考书籍

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

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