交换空间是否有文件系统?

对于使用存储设备,我们需要一个文件系统,那么交换空间呢?

如果它没有文件系统,操作系统如何使用它? 如何将数据(来自RAM)写入磁盘,以及如何再次访问?

交换技术上没有特定的文件系统。 文件系统的整个目的是以某种方式构造数据。 特别是交换分区没有结构,但它确实有一个特定的头,它是由mkswap程序创建的。 特别是,这(摘自kernel.org ):

  25 union swap_header { 26 struct 27 { 28 char reserved[PAGE_SIZE - 10]; 29 char magic[10]; 30 } magic; 31 struct 32 { 33 char bootbits[1024]; 34 unsigned int version; 35 unsigned int last_page; 36 unsigned int nr_badpages; 37 unsigned int padding[125]; 38 unsigned int badpages[1]; 39 } info; 40 }; 

每个分区都有与之关联的特定代码,并且根据TLDP :

ext2的代码是0x83,linux swap是0x82

当涉及交换文件时 ,这是一个略有不同的故事。 内核必须尊重文件系统可能有自己的结构化数据的方式。 从相同的kernel.org链接:

请记住,文件系统可能有自己的存储文件和磁盘的方法,并不像交换分区那样简单,其中信息可以直接写入磁盘。 如果后备存储是一个分区,那么只有一个页面大小的块需要IO,并且由于不涉及文件系统,因此不需要bmap()。

总而言之,从技术上讲,您可以将交换空间称为自己类型的文件系统,但它与NTFS或ext4等文件系统不太可比。

你也问过

我想知道如何在没有文件系统的情况下写入存储空间

严格来说,不需要构建RAM。 但是,部分RAM可以在类Unix操作系统下构造为tmpfs 。 还有ramfs和initramfs,这是在引导过程中加载的内容。 但是技术上RAM数据应该只是原始的1和0,所以无论如何都不需要构造它们。

内核使用交换空间临时存储系统内存(RAM)的页面,因为它已满。 内核使用它自己的内部表来“记住”它放置页面的交换磁盘的确切位置。 因此,交换磁盘不包​​含正确的文件系统,通常只是磁盘上的空白分区。

您可能感兴趣的是RAM磁盘,它是存储在系统内存中的小型文件系统。 如果需要更多内存,内核会将其(和其他内容)推送到交换空间。 有关设置一个的说明,请参见此处 。

交换空间被划分为与内存页面大小相同的块(通常为4kB),并且这些页面到应用程序内存的映射记录构成了CPU和OS中虚拟内存子系统的扩展。

也就是说,应用程序存储空间和实际物理存储器地址之间已经存在映射系统。 应用程序被赋予了一个大的内存地址空间,它们可以尽可能多地使用它们。 由于实际使用了更多的内存地址空间,物理内存将映射到该应用程序以用作存储介质。

当内存交换到磁盘时,相关系统会维护应用程序的内存空间到磁盘上的块的映射。

映射表本身不存储在磁盘上,重新启动后磁盘上剩余的数据无用。