课上测试1
1.Linux文件系统的三层抽象是什么?
(1)块设备层(Block Device Layer)
这是文件系统的最底层,它处理物理存储设备(如硬盘、固态硬盘等)。块设备层将物理设备抽象为一系列固定大小的块(通常为4KB或8KB),并提供了读取和写入块的接口。
(2)虚拟文件系统层(Virtual File System Layer)
这是文件系统的中间层,它提供了一个统一的文件系统接口,使得不同类型的文件系统可以在上层应用程序中使用相同的方式进行访问。虚拟文件系统层定义了文件和目录的概念,以及对它们进行操作的方法(如打开、关闭、读取、写入等)。它还管理文件系统的缓存和缓冲区,以提高文件系统的性能。
(3)文件系统实现层(Filesystem Implementation Layer)
这是文件系统的最上层,它实现了特定类型的文件系统,如ext4、NTFS、FAT等。文件系统实现层负责将文件和目录的抽象表示映射到底层的物理存储设备上,并提供了具体的文件系统操作,如文件的分配、索引管理、权限控制等。
2.写出cp userlist userlistbak的过程,要详述目录文件,i-node.数据块,要画图示意
当执行命令cp userlist userlistbak
时,会进行以下步骤:
-
首先,检查当前目录下是否存在名为
userlist
的文件。如果文件不存在,将会出现错误提示。 -
如果
userlist
文件存在,会创建一个名为userlistbak
的新文件。 -
接下来,需要复制
userlist
文件的内容到userlistbak
文件中。这个过程涉及到目录文件、i-node和数据块的操作。-
目录文件:目录文件是一个特殊的文件,它包含了文件名和对应的i-node号码。在这个过程中,需要读取当前目录文件(例如,
.
目录)以获取userlist
文件的i-node号码。 -
i-node:i-node是文件系统中的一个数据结构,它存储了文件的元数据,包括文件的大小、权限、时间戳等信息,以及指向数据块的指针。
-
数据块:数据块是文件实际存储数据的地方。一个文件可以由多个数据块组成,每个数据块的大小通常为4KB或8KB。
-
-
通过读取
userlist
文件的i-node号码,可以找到该文件的元数据信息。 -
根据
userlist
文件的元数据信息,可以确定文件的大小和数据块的数量。 -
逐个读取
userlist
文件的数据块,并将其写入userlistbak
文件的对应数据块中。这个过程可能涉及到磁盘I/O操作,即从磁盘读取数据块或将数据块写入磁盘。 -
当所有数据块都复制完成后,
userlistbak
文件就包含了与userlist
文件相同的内容。
下面是一个示意图,展示了目录文件、i-node和数据块之间的关系:
+-----------------+
| 目录文件(.) |
|-----------------|
| 文件名 | i-node |
|--------|--------|
| ... | ... |
| userlist | 1234 |
| ... | ... |
+-----------------+
|
| 读取
|
V
+-----------------+
| i-node 1234 |
|-----------------|
| 文件大小 | 数据块 |
|---------|--------|
| 1000 | 0x5678 |
| | 0x789A |
| | ... |
+-----------------+
|
| 读取
|
V
+-------------------+
| 数据块 0x5678 |
|-------------------|
| 文件数据 |
| ... |
+-------------------+
|
| 读取
|
V
+-------------------+
| 数据块 0x789A |
|-------------------|
| 文件数据 |
| ... |
+-------------------+
|
| 写入
|
V
+-----------------+
| 目录文件(.) |
|-----------------|
| 文件名 | i-node |
|--------|--------|
| ... | ... |
| userlistbak | 5678 |
| ... | ... |
+-----------------+
|
| 写入
|
V
+-----------------+
| i-node 5678 |
|-----------------|
| 文件大小 | 数据块 |
|---------|--------|
| 1000 | 0x5678 |
| | 0x789A |
| | ... |
+-----------------+
|
| 写入
|
V
+-------------------+
| 数据块 0x5678 |
|-------------------|
| 文件数据 |
| ... |
+-------------------+
|
| 写入
|
V
+-------------------+
| 数据块 0x789A |
|-------------------|
| 文件数据 |
| ... |
+-------------------+
3.假设块大小为4k, userlist的大小不小于10k,自己假设大小
假设块大小为4KB(4096字节)且userlist
的大小不小于10KB,我们可以进行如下的假设:
-
userlist
文件的大小为12KB(12288字节)。 -
每个数据块的大小为4KB,因此一个数据块可以存储4KB的数据。
-
userlist
文件需要占用3个数据块,即12KB / 4KB = 3个数据块。
根据上述假设,以下示意图,展示了目录文件、i-node和数据块之间的关系:
+-----------------+
| 目录文件(.) |
|-----------------|
| 文件名 | i-node |
|--------|--------|
| ... | ... |
| userlist | 1234 |
| ... | ... |
+-----------------+
|
| 读取
|
V
+-----------------+
| i-node 1234 |
|-----------------|
| 文件大小 | 数据块 |
|---------|--------|
| 12288 | 0x5678 |
| | 0x789A |
| | 0xABCD |
+-----------------+
|
| 读取
|
V
+-------------------+
| 数据块 0x5678 |
|-------------------|
| 文件数据(4KB) |
| ... |
+-------------------+
|
| 读取
|
V
+-------------------+
| 数据块 0x789A |
|-------------------|
| 文件数据(4KB) |
| ... |
+-------------------+
|
| 读取
|
V
+-------------------+
| 数据块 0xABCD |
|-------------------|
| 文件数据(4KB) |
| ... |
+-------------------+
|
| 写入
|
V
+-----------------+
| 目录文件(.) |
|-----------------|
| 文件名 | i-node |
|--------|--------|
| ... | ... |
| userlistbak | 5678 |
| ... | ... |
+-----------------+
|
| 写入
|
V
+-----------------+
| i-node 5678 |
|-----------------|
| 文件大小 | 数据块 |
|---------|--------|
| 12288 | 0x5678 |
| | 0x789A |
| | 0xABCD |
+-----------------+
|
| 写入
|
V
+-------------------+
| 数据块 0x5678 |
|-------------------|
| 文件数据(4KB) |
| ... |
+-------------------+
|
| 写入
|
V
+-------------------+
| 数据块 0x789A |
|-------------------|
| 文件数据(4KB) |
| ... |
+-------------------+
|
| 写入
|
V
+-------------------+
| 数据块 0xABCD |
|-------------------|
| 文件数据(4KB) |
| ... |
+-------------------+