一、文件存取方法

1. 顺序存取(Sequential Access)
  • 原理:按记录写入顺序依次访问
  • 特点
    • 读操作:读取当前位置,指针自动前移
    • 写操作:追加到文件末尾
  • 适用场景:磁带设备、日志文件
文件头
记录1
记录2
记录3
当前指针
记录4
文件尾
2. 直接存取(Direct Access / Random Access)
  • 原理:直接定位到任意位置读写
  • 操作方式
    • seek(offset) 移动文件指针
    • read(size)/write(data) 在当前位置操作
  • 磁盘支持:通过计算物理地址实现
ProgramFileseek(offset=1024)read(128 bytes)返回第1024-1151字节ProgramFile
3. 索引存取(Indexed Access)
  • 原理:通过索引表查找记录位置
  • 工作流程
    1. 搜索索引找到记录键
    2. 获取记录物理地址
    3. 直接访问该地址
找到位置
查询记录 ID=100
搜索索引块
位置:0x1200
直接访问磁盘块0x1200

二、存储空间管理技术

1. 空闲空间管理方法
空闲空间管理
位示图 Bitmap
空闲链表
空闲区表
成组链接
2. 位示图法(Bitmap)

位示图法是一种用二进制位管理磁盘空间的技术,其基本原理如下:

  1. 数据结构:创建一个位数组(bit array),数组长度等于磁盘总块数
  2. 映射关系
    • 每个二进制位对应一个磁盘块
    • 0 表示空闲块
    • 1 表示已分配块
  3. 存储位置:位示图通常存储在磁盘固定位置(如超级块附近)
位示图
0=空闲
1=占用
0=空闲
...
状态
0
位0
1
位1
0
位2
...
...
?
位N
磁盘块0
磁盘块1
磁盘块2
...
磁盘块N
完整示例:16块磁盘的位示图管理

初始状态(全空闲):

磁盘块号: 0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
位示图值: 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

操作1:分配块2、块5、块7

更新后位示图
块1:0
块0:0
块2:1
块3:0
块4:0
块5:1
块6:0
块7:1
其他:0
分配请求
扫描位示图
找到空闲块2,5,7
更新位示图

更新后位示图:

0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
0  0  1  0  0  1  0  1  0  0  0  0  0  0  0  0

操作2:分配3个连续块

AppFSBitmap请求3个连续块扫描连续3个0找到块8-10设置位8-10=1确认更新返回块8,9,10AppFSBitmap

更新后位示图:

0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
0  0  1  0  0  1  0  1  1  1  1  0  0  0  0  0

操作3:释放块5和块10

释放块5
计算位置:i=5
设置bit5=0
释放块10
计算位置:i=10
设置bit10=0

更新后位示图:

0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
0  0  1  0  0  0  0  1  1  1  0  0  0  0  0  0
关键技术细节
1. 地址转换计算
  • 块号 → 位位置

    • 字节偏移 = 块号 / 8
    • 位偏移 = 块号 % 8
  • 示例:访问块13

    字节偏移 = 13 / 8 = 1 (第二个字节)
    位偏移 = 13 % 8 = 5
    检查第2字节的第5位(从0开始计数)
    
2. 空间占用计算

假设:

  • 磁盘容量:1TB
  • 块大小:4KB

计算过程:

总块数 = 1TB / 4KB = 2^30 / 2^12 = 2^18 = 262,144 块
位示图大小 = 262,144 bits / 8 = 32,768 bytes = 32KB
位示图法优缺点分析
优点缺点
✅ 空间效率高:仅需约 0.0039% 的额外空间(1/256)❌ 分配连续空间需线性扫描
✅ 状态切换快:位操作效率极高❌ 大磁盘中扫描效率低
✅ 实现简单:数据结构简洁❌ 外部碎片问题仍然存在
✅ 随机访问快:直接计算位置❌ 需要整个位图载入内存
3. 空闲链表法
  • 物理链表实现
空闲链头
块3
块7
块9
NULL

在这里插入图片描述

4. 空闲区表法(Extent-Based)
原理

空闲区表法(Free Space Management with Extent Lists)是一种通过记录连续空闲区域来管理磁盘空间的技术,特别适合处理连续分配的场景。其核心思想是:

  1. 数据结构:维护一张表格(或链表),每个表项记录:
    • 空闲区的起始块号
    • 空闲区的长度(连续块数)
  2. 分配策略:当需要空间时,在表中查找满足需求的空闲区
  3. 合并机制:释放空间时自动合并相邻空闲区
FreeExtent
+start_block: int
+block_count: int
+next: FreeExtent*
完整示例:16块磁盘的空闲区表管理

初始状态(全空闲):

空闲表头
起始块:0 长度:16
NULL

操作1:分配3个连续块

AppFSFreeList请求3个连续块查找足够空闲区找到[0-15]长度16从头部分配3块更新为[3-15]长度13alt[首次适应]返回块0-2AppFSFreeList

更新后空闲表:

空闲区1: 起始块=3, 长度=13

操作2:再分配5个连续块

首次适应
请求5块
查找策略
扫描表项
找到3-15长度13>5
分配块3-7
更新为起始块=8,长度=8

更新后空闲表:

空闲区1: 起始块=8, 长度=8

操作3:释放块0-2(3块)

与块8不相邻
释放块0-2
创建新空闲区
起始块=0,长度=3
检查相邻性
插入表头
新表:0,3->8,8

更新后空闲表:

空闲区1: 起始块=0, 长度=3
空闲区2: 起始块=8, 长度=8

操作4:释放块3-7(5块)

左邻块2
右邻块8
释放块3-7
创建新区间3,5
检查相邻性
与0,3合并:0+3+5=8 -> 0,8
与8,8合并:0+8+8=16 -> 0,16

最终空闲表:

空闲表头
起始块:0 长度:16
NULL
分配策略对比
策略操作方式优点缺点
首次适应从表头扫描,选择首个足够大的区域分配速度快易产生外部碎片
最佳适应扫描整个表,选择最小的足够区域减少大空闲区割裂易产生微小碎片
最差适应扫描整个表,选择最大的空闲区减少微小碎片破坏大空闲区
空间占用计算

假设:

  • 磁盘容量:1TB
  • 块大小:4KB
  • 平均空闲区大小:16块

计算:

总块数 = 1TB / 4KB = 256M 块
平均空闲区数 = 256M / 16 = 16M
表项大小 = 8字节(4字节起始块 + 4字节长度)
总空间 = 16M × 8B = 128MB
优缺点分析
优点缺点
✅ 减少外部碎片❌ 分配时间随表增大而增加
✅ 高效管理大文件❌ 小碎片无法利用
✅ 支持快速连续访问❌ 需要定期合并操作
✅ 实现相对简单❌ 大磁盘中表可能很大
5. UNIX成组链接法

成组链接法是UNIX文件系统采用的高效空闲块管理方法,核心思想是:

  1. 分组管理:将空闲块分成若干组
  2. 链式连接:每组最后一个块存储下一组信息
  3. 超级块缓存:内存中缓存第一组空闲块信息
块102指向
块202指向
超级块
块100,101,102
块200,201,202
块300,301,302
完整示例:12块磁盘的成组链接管理

初始状态(3块/组):

块3存储
块6存储
块9存储
块12存储
超级块
块1,2,3
下一组指针:块4
块4,5,6
下一组指针:块7
块7,8,9
下一组指针:块10
块10,11,12
结束标记:0

内存超级块内容:

空闲块数空闲块列表
3[1, 2, 3]

操作1:分配3个块

AppSuperBlockDisk请求分配3块直接分配块1,2,3读取块3内容返回[下一组指针:块4]读取块4内容返回块4,5,6信息分配成功超级块更新为空闲数=3列表=[4,5,6]AppSuperBlockDisk

操作2:再分配1个块

空闲数=3
分配1块
超级块状态
分配块4
更新超级块
空闲数=2
列表=5,6

操作3:释放块10,11,12

AppSuperBlockDisk释放块10,11,12检查超级块状态添加块10,11,12到列表释放成功将当前组写入新释放块确认写入重置超级块指向新组alt[超级块未满][超级块已满]AppSuperBlockDisk
优缺点分析
优点缺点
✅ 分配效率高(O(1)平均)❌ 实现复杂度高
✅ 释放操作快速❌ 小规模磁盘不划算
✅ 减少磁盘I/O(超级块缓存)❌ 需维护链式结构
✅ 天然抵抗碎片化❌ 极端情况需递归加载

三、文件共享和保护

文件共享机制

软链接与硬链接

硬链接(Hard Link)

底层原理

在 Linux 文件系统中:

  • 每个文件对应一个唯一的 inode(索引节点)
  • inode 存储文件的元数据(权限、大小、时间戳等)
  • 硬链接是指向同一个 inode 的多个目录项
file.txt
backup.txt
目录A
Inode 123
目录B
数据块
元数据:链接数=2

创建与操作(终端命令)

# 创建原始文件
$ echo "Original Content" > original.txt# 创建硬链接
$ ln original.txt hardlink.txt# 查看inode信息
$ ls -li
123456 -rw-r--r-- 2 user group 17 Jan 1 10:00 hardlink.txt
123456 -rw-r--r-- 2 user group 17 Jan 1 10:00 original.txt
# ↑ 相同的inode号(123456)和链接数(2)# 修改硬链接文件
$ echo "New content" >> hardlink.txt# 检查原始文件
$ cat original.txt
Original Content
New content# 删除原始文件
$ rm original.txt# 硬链接仍然有效
$ cat hardlink.txt
Original Content
New content

关键特性

特性说明
inode 相同所有硬链接共享同一 inode
文件大小与原文件相同(不占用额外空间)
跨文件系统❌ 不支持
链接目录❌ 不允许(避免循环引用)
删除影响减少链接计数,仅当计数为0时删除数据
权限同步所有硬链接权限始终相同(同一 inode)

使用场景

  • 文件多重备份(防止误删)
  • 同一文件需要在多个位置访问
  • 节省空间的"副本"创建
软链接(Symbolic Link / Symlink)

底层原理

  • 软链接是独立的文件,有自己的 inode
  • 内容存储目标文件的路径(字符串)
  • 类似Windows的快捷方式
file.txt
symlink.txt
内容为
目录A
Inode 123
数据块
目录B
Inode 456
/path/to/file.txt

创建与操作(终端命令)

# 创建原始文件
$ echo "Source Content" > source.txt# 创建软链接(绝对路径)
$ ln -s /home/user/source.txt abs_link.txt# 创建软链接(相对路径)
$ ln -s source.txt rel_link.txt# 查看链接信息
$ ls -l
lrwxrwxrwx 1 user group 11 Jan 1 10:00 abs_link.txt -> /home/user/source.txt
lrwxrwxrwx 1 user group 10 Jan 1 10:00 rel_link.txt -> source.txt
-rw-r--r-- 1 user group 15 Jan 1 10:00 source.txt# 访问软链接
$ cat rel_link.txt
Source Content# 删除原始文件
$ rm source.txt# 软链接失效(断链)
$ cat rel_link.txt
cat: rel_link.txt: No such file or directory# 检查断链状态
$ ls -l rel_link.txt
lrwxrwxrwx 1 user group 10 Jan 1 10:00 rel_link.txt -> source.txt  # 红色显示

关键特性

特性说明
inode独立于目标文件
文件大小等于路径字符串长度
跨文件系统✅ 支持
链接目录✅ 允许
删除影响目标文件删除后失效
权限总是 777(实际权限由目标决定)

核心区别对比

特性硬链接软链接
本质同一文件的多个目录项存储路径的特殊文件
inode与目标文件相同独立 inode
跨文件系统❌ 不支持✅ 支持
链接目录❌ 禁止✅ 允许
原始文件删除仍可访问(链接数减1)链接失效(断链)
文件大小与目标文件相同路径字符串长度
路径依赖相对路径依赖位置
更新影响所有链接同步更新链接指向不变,目标可更换
权限与目标相同总是 lrwxrwxrwx
查找命令find . -samefile 文件find -type l -ls
Linux 系统视角
Inode表
文件A inode
文件B inode
软链接 inode
数据块
数据块
路径字符串
目录
fileA → inodeX
hardlink → inodeX
目录
symlink → inodeY
文件保护机制
1. 访问控制矩阵
访问控制矩阵
域:用户/进程
对象:文件
权限:R/W/X
2. 访问控制列表(ACL)
  • 原理:为每个文件维护权限列表
  • 结构
文件X ACL
用户A:RWX
用户B:R--
组C:R-X
3. UNIX权限模型(9-bit)

权限位分解

“文件类型”: 1
“所有者权限” : 3
“组权限” : 3
“其他用户” : 3

权限示例

第一位表示文件的类型,-代表文件,d代表目录

 -rwxr-xr--↑↑↑↑ ↑↑│||| |└─ 其他:读│||| └── 组:执行│|│└── 组:读││└──── 所有者:执行|└───── 所有者:写└────── 所有者:读

[“hardlink → inodeX”]
Directory2[目录] --> EntryC[“symlink → inodeY”]


#### 文件保护机制##### 1. 访问控制矩阵```mermaid
graph LRA[访问控制矩阵] --> B[域:用户/进程]A --> C[对象:文件]B --> D[权限:R/W/X]
2. 访问控制列表(ACL)
  • 原理:为每个文件维护权限列表
  • 结构
文件X ACL
用户A:RWX
用户B:R--
组C:R-X
3. UNIX权限模型(9-bit)

权限位分解

“文件类型”: 1
“所有者权限” : 3
“组权限” : 3
“其他用户” : 3

权限示例

第一位表示文件的类型,-代表文件,d代表目录

 -rwxr-xr--↑↑↑↑ ↑↑│||| |└─ 其他:读│||| └── 组:执行│|│└── 组:读││└──── 所有者:执行|└───── 所有者:写└────── 所有者:读

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

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

相关文章

Thinkphp6中如何将macro方法集成到Request类中

在学习crmeb的时候发现他使用了一个macro的方法用在中间件中,于对macro进行了简单的研究,发现这个方法可以在中间件中进行定义一些方法,然后让后面的控制器进行使用。 如: 在授权的中间件中,定义了$request->macro…

Java List 使用详解:从入门到精通

一、List 基础概念1.1 什么是 List&#xff1f;List 就像是一个智能书架&#xff1a;可以按顺序存放书籍&#xff08;元素&#xff09;每本书都有固定位置&#xff08;索引&#xff09;可以随时添加、取出或重新排列书籍// 创建一个书架&#xff08;List&#xff09; List<S…

Java零基础笔记06(数组:一维数组、二维数组)

明确: 程序是用来处理数据的, 因此要掌握数据处理的数据结构数组是编程中常用的数据结构之一&#xff0c;用于存储一系列相同类型的元素。在Java中&#xff0c;数组是一种对象&#xff0c;可以存储固定大小的相同类型元素的集合。1.一维数组数组是一个数据容器,可用来存储一批同…

10倍处理效率提升!阿里云大数据AI平台发布智能驾驶数据预处理解决方案

阿里云大数据AI平台重磅发布智能驾驶数据预处理解决方案&#xff0c;可帮助汽车行业客户实现构建高效、稳定的数据预处理产线流程&#xff0c;数据包处理效率相比自建可提升10倍以上&#xff0c;数据处理推理任务优化提速1倍以上&#xff0c;相同资源产能提升1倍[1]&#xff0c…

SAP HANA内存数据库解析:特性、优势与应用场景 | 技术指南

SAP HANA 是一款列式内存关系数据库&#xff0c;集 OLAP 和 OLTP 操作于一体。相较于同类产品&#xff0c;SAP HANA 需要的磁盘空间更少&#xff0c;并且可扩展性高。SAP HANA 可以部署在本地、公有云或私有云以及混合场景中。该数据库适用于各种数据类型的高级分析和事务处理。…

Openharmony4.0 rk3566上面rknn的完美调用

一 背景&#xff1a; 我们都知道如果要在android上面使用rknn推理模型需要按照如下的步骤&#xff1a; 详细请参考笔者的文章&#xff1a;Android11-rk3566平台上采用NCNN&#xff0c;RKNN框架推理yolo11官方模型的具体步骤以及性能比较-CSDN博客 简而言之就是 模型转换&#…

Java多线程知识小结:Synchronized

在Java中&#xff0c;synchronized 关键字是实现线程同步的核心工具&#xff0c;用于保证同一时刻只有一个线程可以执行被修饰的代码块或方法。以下从基本原理、锁升级过程、应用场景及优化建议四个维度详细解析&#xff1a; 一、基本原理 1. 同步的对象 synchronized 锁的是对…

MTK项目wifi.cfg文件如何配置的Tput和功耗参数

下面的MTK参数主要与无线网络(Wi-Fi)配置相关,特别是与WMM(Wi-Fi Multimedia)和功率控制相关的设置 WMM相关参数: WmmParamCwMax/WmmParamCwMin:定义竞争窗口的最大/最小值,这里设置为10/4,用于控制信道访问的退避机制13 WmmParamAifsN:仲裁帧间间隔数,设置为3影响不同…

分水岭算法:图像分割的浸水原理

分水岭算法&#xff1a;基于拓扑地貌的边界提取核心原理 分水岭算法将图像视为拓扑地貌&#xff0c;灰度值代表海拔高度。通过模拟浸水过程&#xff1a;局部极小值&#xff1a;对应集水盆&#xff08;区域内部&#xff09;。分水岭线&#xff1a;集水盆之间的山脊&#xff08;区…

汽车功能安全系统阶段开发【技术安全方案TSC以及安全分析】5

文章目录1 技术安全方案 (Technical Safety Concept - TSC)2 系统安全架构设计 (System Safety Architecture Design)3 如何进行安全分析 (Safety Analysis)4 技术安全需求 (TSR) 如何分配到系统架构1 技术安全方案 (Technical Safety Concept - TSC) 技术安全方案 (Technical…

学习软件测试的第十二天(接口测试)

一.如果一个接口请求不通&#xff0c;那么你会考虑那些方面的问题&#xff1f;如果一个接口请求不通&#xff0c;我会像“排查水管漏水”一样一步步定位问题发生在哪一段&#xff0c;主要从这几个方向去思考&#xff1a;当一个接口请求不通时&#xff0c;我会从以下几个方面进行…

Linux下的C/C++开发之操作Zookeeper

ZooKeeper C 客户端简介与安装ZooKeeper C API 简介ZooKeeper 官方提供了多语言客户端&#xff0c;C 语言客户端是最底层的实现之一&#xff0c;功能全面且稳定&#xff0c;适合嵌入式开发、系统级组件、C 项目集成等场景。zookeeper.h 是 ZooKeeper 提供的 C 语言客户端头文件…

【openp2p】学习3:【专利分析】一种基于混合网络的自适应切换方法、装 置、设备及介质

本专利与开源项目无关,但可能是实际商用的一种专利。专利地址从此专利,可见p2p的重要性。透传服务可能是实时转发服务,提供中继能力 透传服务可以是指一种通过公网服务器将数据从第一客户端传递到另一个设备 或客户端的服务。这种服务通常用于克服网络中的障碍,如防火墙、…

OpenCV中DPM(Deformable Part Model)目标检测类cv::dpm::DPMDetector

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 OpenCV 中用于基于可变形部件模型&#xff08;DPM&#xff09; 的目标检测器&#xff0c;主要用于行人、人脸等目标的检测。它是一种传统的基于特…

macOS 26快捷指令更新,融入AI打造智能操作体验

快捷指令作为Mac系统中提升用户操作效率的得力助手&#xff0c;在macOS 26中迎来了一次具有突破性的重大更新。此次更新融入了先进的AI技术&#xff0c;推出“智能操作”&#xff08;Intelligent Actions&#xff09;功能&#xff0c;让快捷指令从简单的自动化工具升级为真正的…

InstructBLIP:迈向具备指令微调能力的通用视觉语言模型

温馨提示&#xff1a; 本篇文章已同步至"AI专题精讲" InstructBLIP&#xff1a;迈向具备指令微调能力的通用视觉语言模型 摘要 大规模的预训练与instruction tuning在构建通用语言模型方面已取得显著成效。然而&#xff0c;构建通用的视觉-语言模型仍然具有挑战性&…

基于dropbear实现嵌入式系统ssh服务端与客户端完整交互

以下基于 Dropbear 实现 SSH 服务端与客户端交互的完整步骤&#xff0c;涵盖服务端部署、客户端连接、认证配置及消息传输&#xff0c;结合了多篇权威资料的核心实践&#xff1a;环境准备与安装 服务端安装 • Linux 系统&#xff08;以 Ubuntu/CentOS 为例&#xff09; Ubuntu…

深圳安锐科技发布国内首款4G 索力仪!让斜拉桥索力自动化监测更精准高效

近日&#xff0c;深圳安锐科技正式发布国内首款无线自供电、一体化的斜拉索实时监测设备 “4G索力监测仪”&#xff0c;成功攻克了传统桥梁索体监测领域长期存在的实时性差、布设困难和成本高昂的行业难题&#xff0c;为斜拉桥、系杆拱桥提供全无线、自动化、云端实时同步的索力…

Pipeline 引用外部数据源最佳实践

场景解析在企业网络安全日志处理场景中&#xff0c;防火墙、入侵检测系统&#xff08;IDS&#xff09;等设备会持续产生大量日志&#xff0c;记录网络流量、访问请求、异常事件等基础信息&#xff0c;但这些原始日志仅能呈现表面现象&#xff0c;难以全面剖析安全威胁&#xff…

UI + MCP Client + MCP Server(并且链接多个Server)

项目结构前端项目--------->MCP Client----------->MCP Serverserver就不过多赘述了&#xff0c;他只是相当于添加了多个的tools 链接前后端 http.createServer创建一个服务器// ---------------------------------------------------------------- // server.js import …