交换空间有文件系统吗?

Sin*_*osh 28 filesystem partitioning swap

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

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

Ser*_*nyy 32

从技术上讲,交换没有特定的文件系统。文件系统的全部目的是以某种方式构造数据。特别是交换分区没有结构,但它有一个特定的头,它是由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 };
Run Code Online (Sandbox Code Playgroud)

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

ext2 的代码是 0x83,而 linux 交换是 0x82

当涉及交换文件时,情况略有不同。内核必须尊重这样一个事实,即文件系统可能有自己的数据结构方式。来自同一个 kernel.org 链接:

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

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

你也问过

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

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


Jak*_*ake 15

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

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


tho*_*ter 14

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

也就是说,应用内存空间和实际物理内存地址之间已经存在映射系统。为应用程序提供了一个大内存地址空间,他们可以尽可能多地或尽可能少地使用该空间。随着更多内存地址空间的实际使用,物理内存被映射到该应用程序以作为存储介质。

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

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