当前位置: 首页 > news >正文

【Linux系统编程】Ext2文件系统

上图中的外设,每个设备都可以有自己的read、write,但一定是对应着不同的操作方法!!但通过struct file 下 file_operation 中的各种函数回调,让我们开发者只用file便可调取 Linux 系统中绝⼤部分的资源!!这便是“linux下一切皆文件”的核心理解。

二,缓冲区

1,什么是缓冲区

缓冲区是内存空间的⼀部分。也就是说,在内存空间中预留了⼀定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

2,为什么要引入缓冲区机制
  1. 读写文件时,如果不开辟对文件操作的缓冲区,直接通过系统第哦啊用对磁盘进行操作(读、写等),那么每次对文件进行一次读写操作时,都需要使用读写系统调用来处理此操作,即需要执行一次系统调用,执行一次系统调用将涉及到CPU状态的切换,即从用户空间切换到内核空间,实现进程上下文的切换,这将损耗一定的CPU时间,频繁的磁盘访问对程序的执行效率造成很大的影响。
  2. 为了减少使用系统调用的次数,提高效率,我们就可以采用缓冲机制。比如我们从磁盘里读取信息,可以在磁盘文件进行操作时,可以一次从文件中读出大量的数据到缓冲区中,以后对这部分的访问就不需要再使用系统调用了,等缓冲区的数据读取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提⾼计算机运行速度。
  3. 可以看出,缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输入输出设备和告诉的CPU能够协调工作,避免低速的输⼊输出设备占用CPU,解放出CPU,使其能够高效率工作。
缓冲类型

标准I/O提供了3种类型的缓冲区。

  • 全缓冲区:这种缓冲方式要求填满整个缓冲区后才进行I/O系统调用操作。对于磁盘文件的操作通常使用全缓冲的方式访问。
  • 行缓冲区:在行缓冲情况下,当在输入和输出中遇到换行符时,标准I/O库函数将会执行系统调用操作。当所操作的流涉及一个终端时(例如标准输⼊和标准输出),使用行缓冲方式。因为标准I/O库每行的缓冲区长度是固定的,所以只要填满了缓冲区,即使还没有遇到换行符,也会执行I/O系统调用操作,默认行缓冲区的大小为1024。
  • 无缓冲区:无缓冲区是指标准I/O库不对字符进行缓存,直接调用系统调用。标准出错流stderr通常是不带缓冲区的,这使得出错信息能够尽快地显示出来。

除了上述列举的默认刷新方式,下列特殊情况也会引发缓冲区的刷新:

  1. 缓冲区满时;
  2. 执行flush语句;
  3. 进程结束;

三,理解磁盘

1,磁盘物理结构

核心机械组件 :

  1. 盘片:用于记录二进制数据。
  2. 磁头:每个盘片的正反两面各对应一个磁头,磁头通过微型悬臂固定在音圈电机(VCM)驱动的磁头臂上,可沿盘片半径方向精准移动。

的物理结构:

  1. 磁道(Track)与扇区(Sector):盘片表面被划分为同心圆磁道,最外圈为 0 磁道。每个磁道进一步分割为扇区,早期为 512 字节,现代采用 4KB 高级格式化(Advanced Format)以提升纠错能力。
  2. 柱面(Cylinder):所有盘片上同一半径的磁道组成柱面。例如,第 100 号柱面包含所有盘片的第 100 号磁道。磁头切换柱面时需移动整个磁头臂,而切换同柱面内的不同磁道仅需选择对应磁头,因此数据存储时优先集中在同一柱面以减少寻道时间。

2,磁盘的存储结构

如何定位一个扇区:

  1. 先确定要访问哪一个柱面(cylinder)
  2. 接着定位磁头(header)
  3. 最后定位到一个扇区(sector)
  • 扇区是从磁盘读出和写入信息的最小单位,通常大小是512字节。
  • 磁头(header)数:每个盘片一般有上下两面,分别对应一个磁头,一共有两个磁头。
  • 磁道数:磁道是从盘片外圈往内圈编号0磁道,1磁道...,靠近主轴的同心圆用于停靠磁头,不存储数据。
  • 柱面(cylinder)数:磁道构成柱面,数量上等同于磁道个数。
  • 扇区(sector)数:每个磁道都被切分成很多扇形区域,每道的扇区数量相同。
  • 圆盘(platter)数:就是盘片的数量。
  • 磁盘容量=磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数。
http://www.jsqmd.com/news/820327/

相关文章:

  • 基于RP2040与精灵图技术打造复古像素动画LED矩阵显示系统
  • 如何让Windows任务栏变得透明:TranslucentTB完全使用指南
  • 2026年好用的公考软件有哪些:基于AI大模型检索的权威评测与技术分析
  • LT8302无光耦隔离反激转换器设计与优化
  • 边缘计算中ViT模型的优化技术与医疗应用
  • 城市复杂环境下低成本单目视觉惯性轮式里程计融合方案
  • 《广东光伏哪家好:排名前五专业深度测评解析》 - 服务品牌热点
  • 基于PyPortal与光传感器的物联网闭环控制:从单向指令到可靠状态反馈
  • AI代理环境交互SDK:TypeScript实现标准化观察与动作接口
  • 脉动阵列架构与DNN加速:FORTALESA容错设计解析
  • 如何用MarkDownload一键将网页转为Markdown?完整浏览器插件使用指南
  • 基于RK3568的工业智能网关设计:从硬件选型到AI部署全解析
  • 深入理解 C++ 智能指针:原理、实现与最佳实践
  • 【独家拆解】Sora 2正式版底层架构升级:从DiT-XL到时空联合注意力v3.2,性能提升217%的关键证据
  • 悬而未决:Nacos 与 Apollo 能否终结“改配置就要重启”的诅咒?
  • 如何用MZmine免费开源工具轻松搞定质谱数据分析?新手入门完全指南
  • 电商内容自动化秘籍:构建商品知识库,小白也能轻松掌握大模型自动化(收藏版)
  • 轻量级系统模拟器semu:RISC-V内核开发与调试实战指南
  • QMCDecode终极指南:3分钟解锁QQ音乐加密文件,实现跨平台音乐自由
  • 单片机开发者如何通过Taotoken快速接入大模型API提升代码效率
  • Arduino GSM通信实战:Adafruit FONA模块硬件解析与AT命令编程指南
  • 2026年乌鲁木齐靠谱精装公司top5实践经验案例分享!
  • 网盘下载提速新方案:8大平台直链获取工具全解析
  • MCP服务器开源集市:AI智能体开发者的插件生态与实战指南
  • 汽车电子功能安全:锁步核与ECC技术解析
  • STM32+ESP8266物联网设备一键配网方案详解与腾讯云实践
  • Midjourney API定价突变预警:2024Q3即将关停的免费层+新Tier强制迁移倒计时72小时
  • ElevenLabs古吉拉特文语音合成失效排查手册(97.3%开发者忽略的ISO 639-2语言码陷阱)
  • JavaScript 的基石:彻底搞懂 8 种数据类型
  • 开源容器镜像安全扫描器Quaid:基于Trivy的轻量级CI/CD集成方案