Bootstrap

树莓派5B -零基础应用开发系列(第三期)

树莓派5B - 零基础应用开发(第三期)

基础知识点(适用于零基础想学习Linux操作系统的的小白新手)

1.“块”(block)

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是 4KB,即连续八个 sector 组成一个 block。

2.inode 结构体

磁盘在进行分区、格式化的时候会将其分为两个区域,一个是数据区,用于存储文件中的数据;另一个是 inode 区,用于存放 inode table(inode 表)。inode table 中存放的是一个一个的 inode(也成为 inode 节点),不同的 inode 就可以表示不同的文件,每一个文件都必须对应一个 inode,inode 实质上是一个结构体,这个结构体中有很多的元素,不同的元素记录了文件了不同信息,譬如文件字节大小、文件所有者、文件对应的读/写/执行权限、文件时间戳(创建时间、更新时间等)、文件类型、文件数据存储的 block(块) 位置等等信息。(这里需要注意的是,文件名并不是记录在 inode 中)

3.打开一个文件的步骤

打开一个文件,系统内部会将这个过程分为三步:

  • 系统找到这个文件名所对应的 inode 编号;
  • 通过 inode 编号从 inode table 中找到对应的 inode 结构体;
  • 根据 inode 结构体中记录的信息,确定文件数据所在的 block,并读出数据。

4.open流程

文件打开的一个状态,当我们调用 open 函数去打开文件的时候,内核会申请一段内存(一段缓冲区),并且将静态文件的数据内容从磁盘这些存储设备中读取到内存中进行管理、缓存(也把内存中的这份文件数据叫做动态文件、内核缓冲区)。当我们对动态文件进行读写操作后,此时内存中的动态文件和磁盘设备中的静态文件就不同步了,数据的同步工作由内核完成,内核会在之后将内存这份动态文件更新(同步)到磁盘设备中。
磁盘、硬盘、U 盘等存储设备基本都是 Flash 块设备,因为块设备硬件本身有读写限制等特征,块设备是以一块一块为单位进行读写的(一个块包含多个扇区,而一个扇区包含多个字节),一个字节的改动也需要将该字节所在的 block 全部读取出来进行修改,修改完成之后再写入块设备中,所以导致对块设备的读写操作非常不灵活;而内存可以按字节为单位来操作,而且可以随机操作任意地址数据,非常地很灵活,所以对于操作系统来说,会先将磁盘中的静态文件读取到内存中进行缓存,读写操作都是针对这份动态文件。

5.进程控制块(Process control block,缩写PCB)。

内核会为每个进程,设置一个专门的数据结构用于管理该进程,譬如用于记录进程的状态信息、运行特征等,我们把这个称为进程控制块(Process control block,缩写PCB)。

6.空洞文件(hole file)

此函数不但可以改变位置偏移量,并且还允许文件偏移量超出文件长度。
文件空洞部分实际上并不会占用任何物理空间。

7.O_TRUNC 标志

调用 open 函数打开文件的时候会将文件原本的内容全部丢弃,文件大小变为 0;

8.O_APPEND标志

open 函数携带了 O_APPEND 标志,调用 open 函数打开文件,
当每次使用 write()函数对文件进行写操作时,都会自动把文件当前位置偏移量移动到文件末尾,从文件末尾开始写入数据,也就是意味着每次写入数据都是从文件末尾开始。O_APPEND 标志并不会影响读文件,当读取文件时,O_APPEND 标志并不会影响读位置偏移量,即使使用了O_APPEND标志,读文件位置偏移量默认情况下依然是文件头。

9.进程内多次 open 打开同一个文件

.一个进程内多次 open 打开同一个文件,不同文件描述符所对应的读写位置偏移量是相互独立的。
多个不同的进程中调用 open()打开磁盘中的同一个文件,同样在内存中也只是维护了一份动态文件,多个进程间共享,它们有各自独立的文件读写位置偏移量。
动态文件何时被关闭呢?当文件的引用计数为 0 时,系统会自动将其关闭,同一个文件被打开多次,文件表中会记录该文件的引用计数。

10.复制文件描述符

复制文件描述符,复制成功之后可以得到一个新的文件描述符,使用新的文件描述符和旧的文件描述符都可以对文件进行 IO 操作,复制得到的文件描述符和旧的文件描述符拥有相同的权限。

11.原子操作

是有多步操作组成的一个操作,原子操作要么一步也不执行,一旦执行,必须要执行完所有步骤,不可能只执行所有步骤中的一个子集。

如果大家有什么其他好想法,欢迎在讨论区讨论!!!
此系列会持续更新,大家一起加油呀,一起进步呀!!!
谢谢大家的支持!!!点个小赞赞吧!!!

;