【Linux系统编程】Ext2文件系统
上图中的外设每个设备都可以有自己的read、write但一定是对应着不同的操作方法但通过struct file 下 file_operation 中的各种函数回调让我们开发者只用file便可调取 Linux 系统中绝⼤部分的资源这便是“linux下一切皆文件”的核心理解。二缓冲区1什么是缓冲区缓冲区是内存空间的⼀部分。也就是说在内存空间中预留了⼀定的存储空间这些存储空间用来缓冲输入或输出的数据这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备分为输入缓冲区和输出缓冲区。2为什么要引入缓冲区机制读写文件时如果不开辟对文件操作的缓冲区直接通过系统第哦啊用对磁盘进行操作(读、写等)那么每次对文件进行一次读写操作时都需要使用读写系统调用来处理此操作即需要执行一次系统调用执行一次系统调用将涉及到CPU状态的切换即从用户空间切换到内核空间实现进程上下文的切换这将损耗一定的CPU时间频繁的磁盘访问对程序的执行效率造成很大的影响。为了减少使用系统调用的次数提高效率我们就可以采用缓冲机制。比如我们从磁盘里读取信息可以在磁盘文件进行操作时可以一次从文件中读出大量的数据到缓冲区中以后对这部分的访问就不需要再使用系统调用了等缓冲区的数据读取完后再去磁盘中读取这样就可以减少磁盘的读写次数再加上计算机对缓冲区的操作大大快于对磁盘的操作故应用缓冲区可大大提⾼计算机运行速度。可以看出缓冲区就是一块内存区它用在输入输出设备和CPU之间用来缓存数据。它使得低速的输入输出设备和告诉的CPU能够协调工作避免低速的输⼊输出设备占用CPU解放出CPU使其能够高效率工作。缓冲类型标准I/O提供了3种类型的缓冲区。全缓冲区这种缓冲方式要求填满整个缓冲区后才进行I/O系统调用操作。对于磁盘文件的操作通常使用全缓冲的方式访问。行缓冲区在行缓冲情况下当在输入和输出中遇到换行符时标准I/O库函数将会执行系统调用操作。当所操作的流涉及一个终端时例如标准输⼊和标准输出使用行缓冲方式。因为标准I/O库每行的缓冲区长度是固定的所以只要填满了缓冲区即使还没有遇到换行符也会执行I/O系统调用操作默认行缓冲区的大小为1024。无缓冲区无缓冲区是指标准I/O库不对字符进行缓存直接调用系统调用。标准出错流stderr通常是不带缓冲区的这使得出错信息能够尽快地显示出来。除了上述列举的默认刷新方式下列特殊情况也会引发缓冲区的刷新缓冲区满时执行flush语句进程结束三理解磁盘1磁盘物理结构核心机械组件 盘片用于记录二进制数据。磁头每个盘片的正反两面各对应一个磁头磁头通过微型悬臂固定在音圈电机VCM驱动的磁头臂上可沿盘片半径方向精准移动。的物理结构磁道Track与扇区Sector盘片表面被划分为同心圆磁道最外圈为 0 磁道。每个磁道进一步分割为扇区早期为 512 字节现代采用 4KB 高级格式化Advanced Format以提升纠错能力。柱面Cylinder所有盘片上同一半径的磁道组成柱面。例如第 100 号柱面包含所有盘片的第 100 号磁道。磁头切换柱面时需移动整个磁头臂而切换同柱面内的不同磁道仅需选择对应磁头因此数据存储时优先集中在同一柱面以减少寻道时间。2磁盘的存储结构如何定位一个扇区先确定要访问哪一个柱面cylinder接着定位磁头header最后定位到一个扇区sector扇区是从磁盘读出和写入信息的最小单位通常大小是512字节。磁头header数每个盘片一般有上下两面分别对应一个磁头一共有两个磁头。磁道数磁道是从盘片外圈往内圈编号0磁道1磁道...靠近主轴的同心圆用于停靠磁头不存储数据。柱面cylinder数磁道构成柱面数量上等同于磁道个数。扇区sector数每个磁道都被切分成很多扇形区域每道的扇区数量相同。圆盘platter数就是盘片的数量。磁盘容量磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2614531.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!