学习笔记五

学习笔记五

一. 作业要求

自学教材第11章,提交学习笔记(10分),评分标准如下

  1. 知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容 (4分)

    “我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”

    核心是要求GPT:“请你以苏格拉底的方式对我进行提问”

    然后GPT就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”

    如果你觉得差不多了,可以先问问GPT:“针对我XXX知识点,我理解了吗?”

    GPT会给出它的判断,如果你也觉得自己想清楚了,可以最后问GPT:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。

  2. 问题与解决思路,遇到问题最先使用chatgpt等AI工具解决,并提供过程截图(3分)

  3. 实践过程截图,代码链接(2分)

  4. 其他(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(1分)

二. 教材知识点总结

1.EXT2文件系统

(1)EXT2——Linux默认文件系统

(2)EXT3——在EXT2基础上主要增加了日志文件

(3)EXT4——EXT3的最新拓展,不再分配不连续的磁盘块,而是分配连续的磁盘块,称为区段

2.EXT2文件系统数据结构

(1)通过mkfs创建虚拟磁盘

在Linux下,命令mke2fs [-b biksize -N ninodes] device nblocks完成创建一个带有nblocks个块(每个块大小为blksize字节)和ninodes个索引节点的EXT2文件系统。设备可以是真实设备,也可以是虚拟磁盘文件。如果未指定blksize,则默认块大小为1KB。如果未指定ninoides,mke2f将根据nblocks计算一个默认的ninodes数。得到的EXT2文件系统可在Linux中使用。

(2)虚拟磁盘布局

(3)磁盘块

Block#0:引导快。B0是引导块,文件系统不会使用它。它用来容纳一个引导程序,从磁盘引导操作系统。

Block#1:超级块。在硬盘分区中字节偏移量为1024,B1是超级块,用于容纳整个文件系统的信息。(重要字段见教材P251)

Block#2:块组描述符块。硬盘上的s_first_data_block+1,EXT2将磁盘块分成几个组。每个组有8192个块(硬盘上的大小为32K)。每组用一个块组描述符结构体来描述。注意:由于一个虚拟软盘(FD)只有1440个块,B2就只包含一个块组描述符。其余的都是0。在有大量块组的硬盘上,块组描述符可以跨越多个块。块组描述符中最重要的字段是bg_block_bitap、bg_inode_bitmap和bg_inode_table,它们分别指向块组的块位图、索引节点位图和索引节点起始块。对于Linux格式的EXT2文件系统,保留了块3到块7。所以,bap=8,imap=9,inode_table=10。

Block#8:块位图。位图是用来表示某种项的位序列,例如磁盘块或索引节点。位图用于分配和回收项。在位图中,0位表示对应项处于FREE状态,1位表示对应项处于IN_USE状态。一个软盘有1440个块,但是Block#0未被文件系统使用。所以,位图只有1439个有效位。无效位被视作INUSE,设置为1。

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

Block#10:索引(开始)节点。每个文件都用一个128字节(EXT4中是256字节)的唯一索引节点结构体表示。(主要索引节点字段见教材P252)。

3. 目录条目

目录包含dir_entry结构,即

struct ext2_dir_entry_2{
  U32 inode;                       //inode number; count from 1; NOT 0
  U16 rec_len;                     //this entry's length in bytes
  U8 name_len;                     //name length in bytes
  u8 file_type;                    //not used
  char name[EXT2_NAME_LEN];        //name:1-255 chars, no ending NULL

dir_entry是一种可扩充结构。名称字段包含1到255个字符,不含终止NULL。所以 dir_entry的rec_len也各不相同。

三. 代码练习

1. dd命令的默认用法

如下图,当我们不加if和of参数时,dd命令会调用默认输入和默认输出,即从命令行输入(/dev/stdin),从命令行输出(/dev/stdout):

 同样,当我们输入加上(/dev/stdin和/dev/stdout)时,具有和上面同样的效果

这时我们可能注意到,如果我们输入的字符串长度大于10个字符,会发生什么呢?

我们重复上述命令,但是这时我们输入11个字符,如:20211307lwj,结果如下图:

这时我们发现dd命令仅能读取到第10个字符c,而对于第11个字符j,并未能正常读取并打印,而是被输进了下一个命令行之中,所以我们在使用dd命令时,要注意输入的长度小于count所规定的值。

这时,如果我们恰好输入10个字符,即输入长度等于count的值,会发生什么呢?

此时我们发现,换行符的读入出了小问题,被自动打在命令行中了,导致命令行空过了一行。

当我们在命令行中输入9个字符时,又会发生什么呢?

此时我们发现,我们只键入了9个数字,但系统却显示复制了10字节,这是因为dd命令在复制时把换行符也算在内了。

通过这个现象我们可以发现,输入的换行符也会算在读入字符中,所以我们在使用时也要考虑换行符,这时我们规定dd命令中的count参数可以适当增加1位。

2. 使用 mkfs 命令格式化磁盘

3. 查看硬盘分区表信息

4. 利用chatgpt提问

 

 

posted @ 2023-10-13 22:41  20211307李文婧  阅读(33)  评论(0)    收藏  举报