パスワードを忘れた? アカウント作成
505874 journal

tarosukeの日記: [talos]heap/new/delete

日記 by tarosuke

寝不足なはずなのになーんか眠れないのでもにょってみる。基本方針はページサイズ以下の割り当てではページ境界を跨がない。これが出発点。カーネルの中にはページサイズ以下のDMAを使う必要があってページを跨ぐと困る物が結構あるので。例えばUSBなんかパケットは64bytesなのでリンクを含めてもそれなりの単位でしか使わないのにDMAが前提なのでページを跨ぐと、正確には実アドレスが連続してないと困る。しかし通常の実ページ割り当てはページが順不同な事が前提なので...。

...実ページの連続割り当てアルゴリズムはちょっと問題があるかも。単純に新規割り当てするだけで良いんじゃなかろうか。まーページ管理の部分はあんまり納得できてないからそのうち直す事になるだろう。

heapと言ってもpoolを共通化する事が狙いで完全なheapを目標にしているわけじゃない。なので一旦取得したら同一サイズクラスにしか返却できないわけだが...。でも手抜きってわけでもなくて、全操作がO(1)になるというメリットを取ったという話。O(logn)じゃpoolに見劣りするからな。

しかし...今採用しようとしているアルゴリズムは、ブロックの頭4bytesが使えないのでページの頭から必要な場合は別に取得するとか1ページ余計に取得して2番目から使うとかしなきゃならんのがのがイマイチなんだよなぁ...。しかも頭のページは必ず実ページが割り当てられるという...。仕方ネェかな。とりあえずはその辺の所を自動化しておいて、何かいい方法があったら書き換えればいいか。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall

読み込み中...