2017-12-17 31 views
2

Linuxカーネルのバディシステムアロケータには疑問があります。Linuxカーネルのバディシステムアロケータ

この例を考えてみます。

enter image description here

は、バディシステムは割り当てられた128キロバイトのRAMがあると仮定する。 kmallocを使用して32KBを割り当てた場合、私の理解は

です。ステップ1で128KBを2つの64KBに分割し、最初の64KBを2つの32KBに分割します。 最初の32KBが私に割り当てられます。

明らかに、連続した96KBのメモリが利用可能です。

ここで90KBを割り当てると、どうなりますか? kmallocが失敗するか、またはバディ(またはスラブ)アロケータがこれを処理し、要求されたメモリを割り当てますか?

答えて

0

最初の32KBの後に、64KBを超えるものを割り当てることはできませんでした。この場合、kmalloc()nullptrを返します。

これはバディアロケータに当てはまります。スラブアロケータは異なる方法で動作しますが、オフトピックがあります。