首页 > 其他分享 >第七章读书笔记

第七章读书笔记

时间:2022-09-22 13:24:22浏览次数:48  
标签:文件 调用 读书笔记 文件系统 fbuf fd 内核 第七章

第七章读书笔记

7.1文件操作级别

硬件级别

  • fdisk:将硬盘、U盘或SDC盘分区
  • mkfs:格式化磁盘分区,为系统做好准备
  • fsck∶检查和维修系统
  • 碎片整理∶压缩文件系统中的文件

操作系统内核中的文件系统函数

  • 每个操作系统内核均可为基本文件操作提供支持

系统调用

  • 用户模式程序使用系统调用来访问内核函数

I/O库函数

  • 系统调用可让用户读/写多个数据块

用户命令

  • 用户用Unix/Linux命令来执行文件操作,而不是编写程序

sh脚本

  • 比系统调用方便,但是必须手动输入命令

7.2文件I/O操作

用户模式下的程序执行操作

  • 使用以下命令可以打开一个读/写文件流
    FILE *fp = fopen(“file”, “r”);or FILE *fp = fopen(“file”,”w”);
  • fopen()
    fopen()在用户(heap)空间中创建一个FILE结构体,包含一个文件描述符fd、一个fbuf[BLKSIZE]和一些控制变量。它会向内核中的kopen()发出一个fd = open("file",flags=READ or WRITE)系统调用,构建一个OpenTable来表示打开文件示例。OpenTable的mptr指向内存中的文件INODE。对于非特殊文件,INODE 的i_block数组指向存储设备上的数据块。成功后,fp会指向FILE结构体,其中fd是open()系统调用返回的文件描述符。
  • fread()
    fread(ubuf, size,nitem, fp):将nitem个size字节读取到ubuf上,通过:
    将数据从FILE结构体的fbuf上复制到ubuf上,若数据足够、则返回。
    如果fbuf没有更多数据,则执行(1)。
    (1).发出read(fd, fbuf, BLKSIZE)系统调用,将文件数据块从内核读取到fbuf上,然后将数据复制到ubuf上,直到数据足够或者文件无更多数据可复制。
    (2).fwrite(ubuf, size, nitem, fp):将数据从ubuf复制到 fbuf。
    若(fbuf有空间):将数据复制到fbuf上,并返回。
    若(fbuf已满):发出 write(fd, fbuf, BLKSIZE)系统调用,将数据块写入内核,然后再次写入fbuf。
    这样,fread()/fwrite()会向内核发出read(/write)系统调用,但仅在必要时发出,而且它们会以块集大小来传输数据,提高效率。同样,其他库I/O函数,如 fgetc/fputc、fgets/fputs、fscanf/fprintf等也可以在用户空间内的FILE结构体中对fbuf进行操作。

内核模式下的程序执行操作

  • 假设非特殊文件的read(fd, fbuf[], BLKSIZE)系统调用。
  • 在read()系统调用中,fd是一个打开的文件描述符,它是运行进程的fd数组中的一个索引,指向一个表示打开文件的 OpenTable。
  • OpenTable包含文件的打开模式、一个指向内存中文件 INODE的指针和读/写文件的当前字节偏移量。从OpenTable的偏移量,
    计算逻辑块编号lbk。
    通过 INODE.i_block[]数组将逻辑块编号转换为物理块编号blk 。
  • Minode包含文件的内存INODE。EMODE.i_block[]数组包含指向物理磁盘块的指针。文件系统可使用物理块编号从磁盘块直接读取数据或将数据直接写入磁盘块,但将会导致过多的物理磁盘I/O。
  • 为提高磁盘VO效率,操作系统内核通常会使用一组I/O缓冲区作为高速缓存,以减少物理I/O的数量。
  • 设备I/O:I/O缓冲区上的物理I/O最终会仔细地检查设备驱动程序。

7.3低级文件操作

分区

  • MBR
    一个区块存储设备,如硬盘、U盘、SD卡等,可以分为几个逻辑单元,成为分区。分区表位于第一个扇区的字节偏移446(ox1BE)处,改扇区称为设备的主引导记录。表有4个条目,每个条目由一个16字节的分区结构体定义
  • 格式化分区
    disk只是将一个存储设备划分为多个分区。每个分区都有特定的文件系统类型,但是分区还不能使用。为了存储文件,必须先为特定的文件系统准备好分区。该操作习惯上称为格式化磁盘或磁盘分区。 在Linux中,它被称为mkfs,表示MAKE文件系统。在Linux中,命令 :
    mkfs -t TYPE [-b bsize] device nblocks
    在一个nblocks设备上创建一个TYPE文件系统,每个块都是bsize字节。如果bsize未指定,则默认大小为1KB.。
  • 挂载分区

EXT2文件系统

  • EXT2文件系统数据结构
    引导块,文件系统不会使用它。它用于容纳从磁盘引导操作系统的引导程序。

  • 超级块
    在硬盘分区中字节偏移量为1024,用于容纳关于整个文件系统的信息。

  • 块组描述符
    块组描述符(硬盘上的s_first_data_blocks-1)EXT2将磁盘块分成几个组,每个组有8192个块(硬盘上的大小为32K)。结构体如下:

  • 位图
    块位图,用来表示某种项的位序列
    索引节点位图,一个索引节点就是用来代表一个文件的数据结构。EXT2文件系统是使用有限数量的索引节点创建的。各索引节点的状态用B9 中 Imap中的一个位表示。在EXT2 FS 中,前10个索引节点是预留的。所以,空EXT2FS的Imap 以10个1开头,然后是0。无效位再次设置为1。

  • 索引节点
    索引节点块,每个文件都用一个128字节(EXT4中的是256字节)的独特索引节点结构体表示。结构体如下:

  • 目录条目

标签:文件,调用,读书笔记,文件系统,fbuf,fd,内核,第七章
From: https://www.cnblogs.com/wdys12138/p/16718880.html

相关文章

  • 第七章:PyTorch可视化
    1、可视化网络结构————以ResNet18的结构进行展示随着深度神经网络做的的发展,网络的结构越来越复杂,我们也很难确定每一层的输入结构,输出结构以及参数等信息,这样导致我......
  • 程序员的修炼之道:从小工到专家 读书笔记一
    序中讲述了:如何成为更好的程序员,通过阅读本书,将会对你有帮助,编程是一个技艺,是艰难的工作。讲述了这本书的目标:使得读者变成更为有效、更多产的程序员。简单讲述了注重实效......
  • 《人工智能》李开复版读书笔记
    前言:本读书笔记大多为摘录,是我认为非常有价值的部分。欲知详情,还请阅读原书。 如今,人工智能已经无处不在。手机上的常见应用,大多使用了人工智能技术,例如图像处理与机器......
  • CSAPP(读书笔记)
    一 计算机系统漫游1.1信息就是位+上下文C语言源程序是以字节序列的方式存储在文件中的,每个字节对应一个ASCⅡ编码,例如第一个字节整数值位35,对应字符'#'一个......
  • 《软件测试的艺术》读书笔记(三)
    3.3用于代码检查的错误列表常见错误对照表,容易出现的问题:过于注重代风格码而不是代码错误、过于模糊不够具体。           3.3.1数据引用错误......
  • 第七章 Redis数据持久化之RDB
    一、总体介绍1.Redis数据安全问题官网介绍:http://www.redis.io前面我们提到,Redis是一个缓存中间件,它的最大特点是使用内存从而使其性能强悍。但是使用内存的方式有一个......
  • 《js 设计模式与开发实践》读书笔记 13
     职责链模式的定义是:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 ......
  • 《js 设计模式与开发实践》读书笔记 14(完)
    在传统面向对象语言中,给对象添加功能常常使用继承的方式,但是继承的方式并不灵活,还会带来许多问题:一方面会导致超类和子类之间存在强耦合性,当超类改变时,子类也会随之改变;另......
  • 计算机网络-自顶向下方法(读书笔记)
    Chapter1计算机网络与因特网: 现在的intenet,计算机网络,现在已经是各种计算机与非传统设备联系的网络,这些设备应该称为主机(host)和端系统(endsystem);端系统(en......
  • 第十章读书笔记
    SH编程1.sh脚本2.c和sh的区别3.命令行参数4.Sh变量$A相当于C语言中的指针。5.sh中的引号即需要转义(将原本具有特殊意义的字符普通化)6.sh语句(简......