操作系统复习(十)

发布时间:2026/7/6 13:11:34
操作系统复习(十) 操作系统复习十文件的逻辑结构和物理结构文件的逻辑结构和物理结构是操作系统中两个核心概念简单来说逻辑结构是“用户看到的样子”物理结构是“硬盘上存储的样子”。1. 逻辑结构这是从应用程序和用户角度出发看到的文件组织方式。它只关心数据如何被读取、写入和查找不关心数据实际存放在磁盘的哪个角落。分类按组织方式流式结构无结构最常见的现代文件形式如.txt,.exe。文件是一串连续的字节流系统只记录文件的起始位置和总长度。内部有没有“记录”全靠应用程序自己去解析比如Word文档内部有复杂格式但对操作系统而言就是一堆字节。记录式结构有结构常用于数据库或批处理文件。文件由多个固定长度或可变长度的“记录”组成比如一张员工信息表每条记录包含工号、姓名。用户可以直接按“第几条记录”来存取。特点方便用户编程和访问具有高可移植性只要应用兼容换个存储介质逻辑不变。2. 物理结构这是文件在磁盘、SSD等存储介质上的实际存放方式。它由操作系统文件系统如NTFS、EXT4管理直接决定了磁盘的读写速度和存储空间的利用率。三大经典类型连续结构文件数据存放在磁盘上一块连续的物理扇区中。就像在图书馆把书一本挨一本放在同一个书架上。优点是读写速度快只需一次寻道缺点是容易产生“磁盘碎片”且文件大小很难动态扩展。链接结构链式文件数据存放在不连续的块中每个数据块里存有一个指针指向下一个块的地址。像“寻宝游戏”一样顺着线索找。优点是没有碎片文件可随意增删缺点是只能顺序读取想读最后一块得从头遍历且指针占用额外存储空间。索引结构为每个文件建立一个“索引表”如Unix的inode表中记录了文件所有数据块的物理地址。优点是即能顺序存取也能随机存取直接查表跳到第N块且没有外部碎片缺点是索引表本身需要额外占用空间。3. 两者的核心区别与联系重点维度逻辑结构物理结构视角用户/应用程序操作系统/存储硬件关注点数据的语义、记录长度、访问方式存储空间的利用率、寻道时间、I/O效率稳定性相对固定由文件格式定义随磁盘碎片整理、文件修改而随时变化控制权用户及上层软件可控由底层文件系统驱动自动管理用户无感两者的桥梁映射操作系统通过文件控制块FCB即目录项将逻辑结构与物理结构联系起来。当你双击一个文件时系统读取目录项找到物理结构的入口如索引节点号然后将磁盘上散落的物理块拼装起来还原成一个连续的字节流逻辑结构呈现给你。逻辑结构是目录和页码你希望按“第一章、第二章”阅读或者直接翻到第100页。这是你的使用习惯。物理结构是印刷版面和纸张打印机可能把第100页印在纸张的正面第101页印在另一张纸的背面甚至因为排版第1章的最后一段被挪到了第3章的末尾页上物理不连续。但装订成册时目录索引会指引你精准找到它们。文件的存取方式文件的存取方式访问方式是指操作系统如何根据用户命令定位并读写文件中的数据。它主要由文件的物理结构如何存和用户需求如何用共同决定。在操作系统中文件存取方式主要有以下三种1. 顺序存取Sequential Access这是最简单、最原始的存取方式。规则对文件中的信息按从前到后的线性顺序进行读写。就像播放录音带或看一盒胶卷必须从头开始想读取第100条记录必须跳过前99条。适用结构通常配合链接结构串联文件或连续结构使用。典型应用批处理文件、磁带备份、日志文件的追加写入。优缺点存取速度慢不能跳跃但对存储设备要求低适合一次性全读/全写。2. 直接存取随机存取 / Direct Access这是现代磁盘文件最常用的方式。规则用户可以直接指定文件的逻辑块号如“读取第N条记录”或“读取第1024字节起的1024字节”系统根据该编号直接跳转到对应位置读写无需经过前面的数据。适用结构必须配合连续结构通过首地址偏移量或索引结构查表跳转绝不能配合纯链表式的串联结构因为链表必须遍历。典型应用操作系统内核文件、数据库文件、编译器的目标代码编译器经常需要回跳修改之前的地址。优缺点读写速度快支持随意跳转但要求存储介质支持寻道如磁盘、SSD。3. 索引存取Indexed Access / 按键存取这是对直接存取的一种高级扩展建立在索引结构之上。规则用户不提供物理块号而是提供一条记录的关键字Key如学号“2024001”、姓名“张三”。系统先搜索该文件的索引表找到关键字对应的逻辑块号再通过直接存取去读取数据。适用结构专用于索引结构的文件。典型应用数据库系统、文件系统中的目录检索根据文件名找inode。优缺点非常灵活支持复杂查询但维护索引表需要额外开销。关联存取方式对应最佳的物理结构是否支持“文件大小不固定”顺序存取串联结构链接、连续结构串联支持连续不支持直接存取连续结构、索引结构连续不支持索引支持索引存取索引结构必须有索引表支持动态追加索引项即可考试万能口诀看到“磁带/顺序/从头开始”选顺序存取。看到“磁盘/跳跃/按块号”选直接存取。看到“关键字/查询/数据库”选索引存取。成组链接法好的既然支持 Mermaid 流程图我们直接用它来画这样结构更清晰、专业也符合 Markdown 的渲染习惯。我把**“静态存储结构”和“动态分配/回收流程”**分开画方便你理解和在考试中手绘简图。1. 成组链接法静态结构图超级块 磁盘分组下图展示的是内存超级块与磁盘各分组之间的映射关系假设每组容量为 3 个块实际系统通常为 100。磁盘外存存储空间内存主存组 1组 0记录组0块号记录组0块号记录组0块号组间链接指针组间链接指针组 2最后一组块 300空闲数据块块 301空闲数据块块 302结束标志s_nfree 0超级块 Superblocks_nfree 3s_free[0] 100s_free[1] 101s_free[2] 102块 100空闲数据块块 101空闲数据块块 102链指针块存放200,201,202块 200空闲数据块块 201空闲数据块块 202链指针块存放300,301,302图解说明超级块内存只记录当前正在使用的一组组0的块号。组0的最后一块块102不存用户数据而是存放下一组组1的块号列表。组1的最后一块块202又指向组2以此类推形成一条“链”。最后一组的最后一块块302存结束标志s_nfree 0表示链尾。2. 分配一个空闲块的流程申请块是否当前组只剩链指针块开始分配一个空闲块检查超级块s_nfree 0 ?从 s_free 数组尾部取一个块号分配给用户s_nfree 减 1分配结束将链指针块中存放的下一组块号列表读入超级块覆盖原 s_free 数组将该链指针块分配给用户作为数据块关键点绝大多数分配只需在内存超级块中操作仅当当前组用完时才发生一次磁盘 I/O读入下一组信息。3. 回收一个空闲块的流程释放块否是开始回收空闲块 X组是否已满?将 X 加入 s_free 尾部s_nfree 加 1结束将超级块内容写入 X重置超级块 - 只存 X关键点回收时绝大多数只需修改内存超级块仅当当前组已满时才发生一次磁盘 I/O将旧组信息“备份”到新回收的块中作为新的链指针块。