非常に小さなメモリ(ほぼ内蔵)を備えたシステムを想像してください。これは、1つの例外を除いて、ほぼすべての操作に十分です。大量のRAMを必要とするタスクXがありますが、これはシステムにはありません。
スワッピングも不可能だと想像してみてください(メモリ不足のVMであり、ホスティングプロバイダがスワッピングを禁止する)。
私の考えでは、私たちができると思います。
- 大容量ファイルの作成
- mmap()-ing
malloc()
この-ed領域は、mmap()
物理RAMの代わりに使用するためにglibcで「要求」(再構成)されます。
私たちが実際に持っているのは、単一プロセスに対してのみユーザースペースレベルのスワップ機能です。
私が知る限り、glibcのmalloc()実装は設定可能な実装ではありませんが、
malloc()
他の実装があります- glibc mallocもゴミではありませんが、ディーププレイが一般的ではないという点だけが異なります。
可能ですか?どのようなまたは同様の解決策がありますか?
ベストアンサー1
このようなことをすることは絶対に可能です。これを簡単に達成するには、プロセスごとに1つのファイルが必要です。明らかに、仮想マシンのディスク容量によって制限されます。カーネルが定期的にメモリをディスクにフラッシュするので、パフォーマンスも良くありません。これは、いくつかのsysctlチューナブルを使用して軽減することができます(Linuxで定期的な書き込み保存を取得する)。
malloc
その後、別のデバイスに接続する必要があります。 glibcには、代わりに使用できる__morecore()
フック(glibcを参照)があります。malloc.h
sbrk()
みんなglibcの割り当て 。場合によっては、glibcがmmap()
代わりに直接呼び出すので、__morecore()
これは 。mallopt()
LD_PRELOADライブラリを使用してmmap()
呼び出しをキャプチャすることもできます。しかし、それは完全に些細なことではありません。