ストレージデバイスを操作するには、ファイルシステムが必要です。スワップスペースはどうですか?
ファイルシステムがない場合、オペレーティングシステムはどのように動作しますか? (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スワップは0x82です
swap fileが関係する場合、それは少し異なる話です。カーネルは、ファイルシステムに独自のデータ構造化方法がある可能性があるという事実を尊重する必要があります。同じkernel.orgリンクから:
ファイルシステムにはファイルやディスクを保存する独自の方法があり、情報を直接ディスクに書き込むスワップパーティションほど単純ではないことに注意してください。バッキングストレージがパーティションの場合、必要なページサイズブロックはIOのみで、ファイルシステムが含まれていないため、bmap()は不要です。
結論として、技術的にはスワップスペースを独自のタイプのファイルシステムと呼ぶことができますが、NTFSやext4などのファイルシステムとはまったく比較できません
あなたも尋ねました
ファイルシステムなしでストレージスペースに書き込むことができる方法を知りたい
厳密に言えば、RAMを構造化する必要はありません。ただし、RAMの部分は、UnixライクなOSでは tmpfs として構造化できます。 ramfs とinitramfsもあります。これはブートプロセス中にロードされます。しかし、RAMデータは技術的には生の1と0であると想定されているため、とにかくそれらを構造化する必要はありません。
スワップスペースは、システムメモリ(RAM)のページがいっぱいになると、カーネルが一時的に保存するために使用されます。カーネルは独自の内部テーブルを使用して、スワップディスク内のどこにページを配置したかを正確に「記憶」します。その結果、スワップディスクには適切なファイルシステムが含まれておらず、通常はディスク上の単なる空のパーティションです。
興味があるのは、RAMディスクです。RAMディスクは、システムのメモリに格納されている小さなファイルシステムです。さらにメモリが必要な場合、カーネルはそのメモリ(およびその他のコンテンツ)をスワップスペースにプッシュします。設定の手順については here をご覧ください。
スワップスペースは、メモリページと同じサイズ(通常4kB)のブロックに分割され、これらのページのアプリケーションメモリへのマッピングの記録は、CPUおよびOSの仮想メモリサブシステムの拡張を形成します。
つまり、アプリケーションのメモリ空間と実際の物理メモリアドレスの間にマッピングシステムが既に存在します。アプリケーションには、できる限り多くまたは少ししか使用できない大きなメモリアドレス空間が与えられます。このメモリアドレス空間が実際に使用されるにつれて、物理メモリがそのアプリケーションにマップされ、ストレージメディアとして機能します。
メモリがディスクにスワップされると、関連するシステムは、アプリケーションのメモリ空間のディスク上のブロックへのマッピングを維持します。
マッピングテーブル自体はディスクに保存されず、ディスクに残っているデータは再起動後に役に立たなくなります。