brand new note

技術録

スラブアロケータってなに

単語がかっこいいのでめも.

前提

まずallocateは割り当てる,何かを与える,という意味.ニュアンスの違いは以下です.へえ.

http://medieigo.com/articles/-/1112.html

いずれも「(ある目的のために)何かを与える」という意味を持っています。 両者の違いは,allocate は「ある目的のために」が主体で,「そのために何かを与える」のですが,assign は「何かを与えること」が主体で,「与える人のためになっているかどうか」は考慮されません。

よむ

qiita.com

mallocやfreeのようなものがカーネル内にも存在していて,そういうカーネルが用意してるメモリの提供機能がスラブアロケータ

mallocやfreeっていうのはシステムコールでしたっけ.これってユーザランドのものなんですかね.ちょっとそこ不透明です.sat本を読みます.

honto.jp

この通販サイト昔使ってました(余談)

mallocはCの標準ライブラリの関数としてい入っているとの記述.つまりユーザランドで動作しているということ...??

スラブアロケータが提供しなければならないAPI

  • 準備系

kmem_cache_init, kmem_cache_init_late, __kmem_cache_create

  • 確保系

_kmalloc, __kmalloc_node_track_caller, kmem_cache_alloc, kmem_cache_alloc_bulk

  • 解放系

kfree , kmem_cache_free , kmem_cache_free_bulk , kmem_rcu_free, kmem_cache_release, kmem_cache_shrink, _kmem_cache_shutdown

  • その他

ksize

ここに書いてあるのが全てAPIというやつだってことでしょうか.kはカーネルでしょうね.準備はキャッシュを初期化するとかですね.確保ってのはどのくらいメモリを確保するかってことですね.allocが割当て.解放っていうのは使われているメモリを開放するってことですかね.freeとreleaseの違いが感覚だとわかりませんが.このハイフンから始まるのも謎ですね.なんとなく見たことがある気がするのはどこでだったかな.

f:id:frazz:20200828210804p:plain

表があった.

ハイフンはよくわかりませんが_kmallocで確保したメモリをkmem_cache_freeで開放したりしているので,やっぱりセットで使われるんですかね.当たり前か.当たり前のこともわからないものなのね.

特定のデータ型を扱うか汎用的なデータ型を扱うかによって使う関数が変わるとの記載.データ型に色々あるといわれてもプログラムが書けないのでイメージできない..(今後の課題)

実装のはなし

わからなくても楽しいと思えた時に読む,これがだいじ

f:id:frazz:20200828212350p:plain

はやいのとめっちゃはやいのと軽いのがあるんですかね.なるほど.

つくりかたは, どんなのをつくりたいか考える→できるのか考える→つくる→デバッグ

なるほど.ここまで書いてくれないとわからない自分がいるっていうのもあれですね.なんか目の前で起きていることが何もわからないのにデバッグを延々とやっていた時代をふと思い出しました.いかん.ちょっとここから先は難しいので黙読します.

...ああ,カーネルパニックって聞いたことありますね.なんだっけ.

f:id:frazz:20200828212857p:plain

つらそう

同期がうめいてたのはこれだったのか...

そういえばgoogleのゼロクリック検索が発展してwikipediaのアクセス数が減っているらしいです.そのうち寄付でもしよう.

page構造体...page構造体ってなんですかね...なぜこれが気になるんでしょう.きりがないから好奇心の赴くままにつまんでいく.

Linuxでのpage構造体群の配置 - Qiita

こっこれはいまのぼくには難しくてよめない.こういうときは世界って広いんだなと思って飛ばせって言われた気がする.表とかグラフとか書けるのかっこいい.憧れます.

あああ,この記事も下の方は難しいです,次回にします....

これでもう2000字ですね.なんかこう...昔は自分の考えてることをばーっと書いてそれを他人に見せるの嫌だったんですけど,こうやって気持ちが向かったときに趣味みたいにして書くのいいですよね.インプットしながらアウトプットするみたいなの.懐かしいです.

まとめ

ユーザランドでなく,カーネル側でもメモリ領域を提供する機能があって,それをスラブアロケータという.カーネル開発に興味が出たらこのあたりからやってみるといいとのこと

所感

研究室でカーネルの勉強がしたいと教授になんとなく言って,研究所のはんこがついたカーネルの本をしばらく借りていたのをふと思い出して,リベンジしている次第です.あのころ生きるか死ぬかみたいな感覚で爆速で勉強してた時はひたすら書き物してたなあなんて思いつつ.人に読ませるものではないので参考にされる必要はないのですが,もしかするとこれからひたすらこんなめもを書くのかもしれない.

一次情報

www.ibm.com

www.kernel.org

そのた

Buddy memory allocation - Wikipedia

Windows10 で文字を入力する画面上に 「あ」 や 「A」 が表示される - パソコンじいちゃん