タグ

algorithmとlinuxに関するsyo-yuのブックマーク (3)

  • バディ・システムによるメモリ割り当てのコンセプト・コード - Tociyuki::Diary

    Linux カーネルの物理メモリ割り当てに使われているバディ・システムに触れてみるために、D. Knuth The Art of Computer Programming, Vol. 1: Fundamental Algorithms p. 443 記載の Algorithm R (Buddy system reservation) と Algorithm S (Buddy system liberation) を ruby で記述してみました。 バディ・システムはフリー・リストによるメモリ管理方法のバリエーションの一つです。メモリ・アドレスに2進数を用いる計算機に向いたアルゴリズムで、2 ** m サイズの割り当てに用いる領域を2分割し、さらにそれを2分割し、と再帰的に分割していった 2 ** k (k = 0 .. m) のエクステントにして、それらのエクステントを割り当てに使うのが特

    バディ・システムによるメモリ割り当てのコンセプト・コード - Tociyuki::Diary
  • epollのなかみ - moriyoshiの日記

    よく C10K 問題とかいって epoll(7) の話が出てきて select(2) 遅いね poll(2) 遅いねってなるんだけど、正直なところ、これらのシステムコールを実際に使ってコードを書いてみたひとはどのくらいいるのだろう。ましてや eventpoll が何やってるか知っている人はそんなに多くないんじゃないだろうか。もう O(n) だの O(1) だのって煙に巻かれるのもうんざりだ。 というわけで、2.6.26 の fs/eventpoll.c のコードを読んでみた。正直 Linux カーネルにすごく詳しいわけでもないので、誤りがあったら適宜突っ込んでもらえると幸いです。 前提知識として VFS モジュールがどうなってるかとかは LinuxのFSモジュールを書いてみる LinuxのFSモジュールを書いてみる (その2) のソース中のコメントを追ってもらえればと。 登場する構造体 e

    epollのなかみ - moriyoshiの日記
  • select のなかみ - moriyoshiの日記

    一応 select(2) も読んであったので説明しとく。 メインループは非常に短いので抜粋。ここにはビットマップの転送処理は含まれていないので注意。max_select_fd() の前後が rcu_read_lock() と rcu_read_unlock() で囲まれているのは、ドキュメント (Documentation/filesystems/files.txt) によると 2.6.12 から RCU をファイルディスクリプタテーブルで利用するようになったため。以前は単なるロックだった。 int do_select(int n, fd_set_bits *fds, s64 *timeout) { struct poll_wqueues table; poll_table *wait; int retval, i; rcu_read_lock(); retval = max_select

    select のなかみ - moriyoshiの日記
  • 1