首页 > 其他分享 >十一章学习笔记

十一章学习笔记

时间:2023-10-14 09:34:03浏览次数:34  
标签:文件 EXT2 十一章 文件系统 笔记 学习 索引 挂载 节点

章节概述

  1. 本章内容为EXT2文件系统,作为Linux系统最传统的磁盘文件系统,EXT2文件系统是理解Linux下文件系统的关键。

  2. 本章介绍了EXT2在Linux系统中的历史地位,以及其后的EXT3、EXT4文件系统的当前应用状况;

  3. 展示了EXT2文件系统的数据结构以及对EXT2文件树系统的遍历;

  4. 介绍了如何实现EXT2文件系统;

  5. 展示了如何使用虚拟磁盘的mount_root命令来构建基本的文件系统;6. 介绍了文件系统的等级划分以及3个等级各自的权限功能;7. 介绍了各种级别文件的系统函数的使用以及实现过程。

1. EXT文件系统简介

​ EXT2文件系统是Linux系统中默认的文件系统,是实现Linux系统最基础的文件操作的基础系统。

​ EXT3是EXT2的拓展版,相较于EXT2,EXT3增加了一个日志文件,它将文件系统的变更记录在日志中,而日志则可以在文件崩溃后很快的使其恢复。

​ EXT4则是EXT3的拓展版本,EXT4的主要变化是磁盘块的分配。在EXT4中,块编号为48,分配的磁盘区域是连续的。

​ 本章主要介绍的是最基本的EXT2文件系统。

2.EXT2文件系统的数据结构
  1. mkfs命令Linux mkfs(make file system)命令,功能是在特定分区上建立Linux文件系统。命令的标准格式如下: mkfs [-V] [-t fstype] [fs-options] filesys [blocks]参数: device:预备检查的硬盘分区,例如:/dev/sda1 -V:详细显示模式 -t:给定档案系统的型式,Linux 的预设值为 ext2 -c:在制做档案系统前,检查该partition 是否有坏轨 -l bad_blocks_file:将有坏轨的block资料加到 bad_blocks_file 里面 block:给定 block 的大小

  2. 用mkfs建立EXT2文件系统mkfs.ext2命令与mke2fs命令功能相同。都是用来建立EXT2文件系统。使用如下命令,可以在一个名为vdisk的虚拟磁盘上创建一个EXT2文件系统,有1440个大小为1KB的块。 dd if=/dev/zero of=vdisk bs=1024 count=1440 mke2fs vdisk 1440

  3. 虚拟磁盘布局EXT2文件系统的虚拟磁盘布局如图:简而言之,EXT2将磁盘分为若干个块结构,每个块结构负责特定功能,它们是:引导块、超级块、块组描述符、块位图、索引点位图、索引节点、数据块和其它数据块。关于EXT2文件的磁盘布局,在第七章中有详细的说明,在此不再赘述。

3.邮差算法

​ 本章的邮差问题是指将一个二元(多元)对应表转换为一个一元的线性表的转换算法。邮差算法在文件访问上有重大意义,一个良好的算法可以大大加快文件访问速度。

​ 同时使用邮差算法和位屏蔽可以实现快速访问多维的数据个体,而不用转向复杂的结构体。具体的实现方式可以通过邮差算法将索引节点转为磁盘上的索引节点来完场。

4.编程实例
  1. 头文件安装为了实现有关EXT2文件系统操作的程序,需要安装ext2fs.h头文件,系统默认头文件并不包含它,需要我们自行安装,可由下列命令实现头文件的安装: sudo apt-get install ext2fs-dev
5.遍历EXT2文件系统树
  1. 已知一个文件的路径,如何依靠这个路径来找到这个文件,是遍历算法需要解决的问题。一个良好的遍历算法可以在短时间内就完成文件的定位读取,而这依靠的是上述的邮差算法。

  2. 遍历算法遍历算法的基本流程:最后重复(5)~(6)步n次,如果循环成功结束,就会得到指向路径名的索引节点,凭借它就可以将文件所有的磁盘块打印出来。

6.EXT2文件系统的实现
  1. EXT2文件系统的数据结构其中: (1):PROC是当前运行进程的结构体,包含了指向该进程当前工作目录CWD的内存索引点cwd,还有一个指向打开的文件实例的文件描述符数组fd[]; (2):指向内存中跟索引节点的根指针; (3):openTable条目,当一个进程打开文件时,进程数组fd就会有一个条目指向openTable,而openTable会指向打开文件的内存索引节点; (4):内存索引节点,当需要某个文件时,会把该文件的索引加载到minode槽中以供使用,由于索引节点是唯一的,所以无论何时,每个索引节点的内存中只会存在唯一的副本; (dev,ino)会指向索引节点的来源; refCount则会记录使用minode的进程数; dirty字段表示索引节点是否被篡改; 挂载标志表示索引节点是否被挂载,如果被挂载,mntabPtr就会指向挂载文件的挂载表条目; lock字段保证内存索引节点一次只会被一个进程访问; (5):已挂载的文件系统表; mntabPtr指向挂载条目表; mntPointer指向挂载点的内存索引节点。

  2. 文件系统的级别文件系统的实现分为三个级别,每个级别处理文件系统的不同部分。

  • 第1级别实现基本的文件系统树,实现指定的函数。包含以下文件:

使用第1级别FS命令的用户命令程序有:mkdir、creat、mknod、rmdir、link、unlink、symlink、rm、ls、cd和pwd等

  • 第2级别实现文件内容的读/写

  • 第3级别实现文件系统的挂载、卸载和文件保护

7.基本文件系统
  1. type.h文件包含了EXT2文件系统的数据结构类型,需要ex2fs_dev库的支持;

  2. global.c文件​ 包含了EXT2文件系统的全局变量,如minode和mtable等。这些全局变量就是上述EXT2文件系统数据结构中各个参数和指针。

  3. 其他实用的函数程序(1)get_block/put_block函数​ 按块读写虚拟磁盘文件;(2)iget(dev,ino)函数​ 返回指向包含INODE(dev,ino)的内存唯一minode;(3)THE iput(INODE *mip)函数​ 释放一个mip指向用完的minode;(4)get()函数​ 实现文件系统的树遍历算法;(5)getino()/iget()/iput()函数​ 由路径名向索引节点的转换的系列函数。

  4. mount_foot函数用于挂载根文件系统,便于快速访问。

8.文件系统函数
  1. 1级文件系统函数 mkdir:创建带路径名的新目录 creat:创建新的空文件 rmdir:删除为空的目录 link:链接两个文件 unlink:断连两个文件 symlink:实现任意两文件,包括文件夹的链接 readlink:读取符号文件的目录文件名并返回文件名长度

  2. 2级文件系统函数 open:打开文件 lseek:依据偏移量再读取文件内容 close:关闭文件 read:从读取文件读取数据 write:向文件写入数据 opendir/readdir:将目录视作文件,再打开/读

  3. 3级文系统函数 挂载命令: mount filesys mount_point 卸载算法 交叉挂载 文件保护 文件锁定

标签:文件,EXT2,十一章,文件系统,笔记,学习,索引,挂载,节点
From: https://www.cnblogs.com/sjd-sr/p/17763693.html

相关文章

  • 线段树高阶学习指南
    前置芝士线段树基本框架区间求和constintN=100010;lla[N],st[N*4],f[N*4];intn,q;//向上传voidpushup(llu){st[u]=st[lc]+st[rc];}//向下传voidpushdown(llu,lll,llr,llmid){if(f[u]){st[lc]+=f[u]*(mid-l+1);st[rc]+=f[u]*(r-m......
  • [刷题笔记] Luogu P5658 [CSP-S 2019] 括号树
    Description给定一棵树,树的每个节点都有一个左括号或者右括号,求从根节点到每个点简单路径上的括号序列上合法的子括号序列数。Analysis显然树形dp。考虑如何设计状态,定义\(f_i\)表示从root到\(i\)节点的字串合法数量。考虑转移,如果当前的括号为左括号,我们无法和前面的......
  • 2023-2024 20231313《计算机基础与程序设计》第三周学习总结
    2023-202420231313《计算机基础与程序设计》第三周学习总结作业速达作业课程<班级的链接>2023-2024计算机基础与程序设计作业要求《计算机基础与程序设计》第二周学习总结要求作业内容计算机科学概论第2章,第3章《C语言程序设计》第2章并完成云班课测试作业......
  • MySQL学习(5)记录存在那里——表空间
    前言存储引擎都是把数据存储在文件系统上,通过通过查询命令,可以查看数据目录所在的本机路径。mysql>SHOWVARIABLESLIKE'datadir';+---------------+-----------------+|Variable_name|Value|+---------------+-----------------+|datadir|/var/l......
  • 萌新学习c语言记录
    今天写的题要求使用while语句发现输出一直循环一直循环着最后一个数然后看别人的答案发现要这样做然后我搜索了一下发现while(scanf("%d",&a)!=EOF)可以检查输入是否成功如果不输入的话将不会进行下一步......
  • 学习C语言心得-自定义函数 输入两个数字求和
    输入两个数字求和#include<stdio.h>intsum(inta,intb){ returna+b;}intmain(){ inta=0; intb=0; printf("请输入ab的值:"); scanf("%d%d",&a,&b); intSum=sum(a,b); printf("Sum=%d",Sum); return0;}运行......
  • 学习C语言心得-传址调用
    运用传址调用来交换两个数#include<stdio.h>inttransform(int*a,int*b){ intx=0; x=*a; *a=*b; *b=x;}intmain(){ inta=10; intb=20; printf("交换前:%d%d\n",a,b); transform(&a,&b); printf("交换后:%d%d\n",......
  • 学习C语言心得-运用自定义函数求素数
    自定义函数求素数#include<stdio.h>intpanduan(inta){ inti=0; for(i=2;i<a;i++) { if(a%i==0) { returna; } } return0;}intmain(){ intnumber=0; printf("请输入一个数:"); scanf("%d",&number); int......
  • 大一上学期程序设计笔记_C++
    罕见的数据类型枚举类型   enum枚举类型名T{Sunday=1,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};            枚举类型名T  变量表枚举类型只能进行赋值和比较运算。不能把整数赋给枚举型变量。枚举内部的元素会从0开始连续编码。类......
  • 【技术积累】《MongoDB实战》笔记(1)
    《MongoDB实战》笔记第一章为现代Web而生的数据库特性mongodb适合做水平扩展的数据库。mongodb把文档组织成集合,无schema。索引mongodb的二级索引是B树实现。每个集合最多可以创建64个索引,副本集mongodb通过副本集(replicationset)的结构提供了复制功能。副本集有一个主......