交换空间有文件系统吗?

交换空间有文件系统吗?

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

如果没有文件系统,操作系统该如何处理它?数据(来自 RAM)如何写入磁盘,又如何再次访问?

答案1

从技术上讲,交换分区没有特定的文件系统。文件系统的全部目的是以某种方式构造数据。交换分区没有结构,但它有一个特定的头文件,由mkswap程序创建。特别是,这个(取自内核网站):

 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 };

每个分区都有与之关联的特定代码,并且根据局部差分协议

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

什么时候交换文件涉及到,那是一个稍微不同的故事。内核必须尊重文件系统可能有自己的数据结构方式这一事实。来自同一个 kernel.org 链接:

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

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

你还问过

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

严格来说,RAM 不需要结构化。但是,RAM 的一部分可以结构化为临时文件在类 Unix 操作系统下。还有内存文件系统以及在启动过程中加载的 initramfs。但从技术上讲,RAM 数据应该只是原始的 1 和 0,因此无需以任何方式构造它们。

答案2

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

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

答案3

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

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

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

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

相关内容