Linux 2.6 には sched_setaffinity(2) というシステムコールがあり、これを利用して任意のスレッドを(マルチCPU環境下で)特定の CPU で実行させることができます。http://www-06.ibm.com/jp/developerworks/linux/051028/j_l-affinity.shtml によるとリアルタイムプロセスでマネージャとなるスレッドをこのシステムコールで特定の CPU に固定する...といった応用が考えられるそうです。 へえ、と思ったのでちょっと遊んでみました。LD_PRELOAD を使って任意のプログラムを任意の CPU に固定して動かしてみます。GCC の __attribute__)((constructor))( で sched_setaffinitiy(2) を呼びます。(参考: http://0xcc.net/blog/
また Linux カーネルの話です。 Linux では fork によるマルチプロセスと、pthread によるマルチスレッドでの並行処理を比較した場合、後者の方がコストが低く高速と言われます。「スレッドはメモリ空間を共有するので、マルチプロセスとは異なりコンテキストスイッチ時にメモリ空間の切り替えを省略できる。切り替えに伴うオーバーヘッドが少ない。」というのが FAQ の答えかと思います。 が「オーバーヘッドが少ない」と一言にいわれても具体的にどういうことなのかがイメージできません。そこで Linux のスレッド周りの実装を見て見ようじゃないか、というのが今回のテーマです。 3分でわかる(?) マルチプロセスとマルチスレッド まずはうんちく。マルチプロセスとマルチスレッドの違いの図。以前に社内で勉強会をしたときに作った資料にちょうど良いのがあったので掲載します。Pthreadsプログラミ
Cでプログラムを書いていて大量のメモリを確保したくなったとき、大抵は mallocを使うと思いますが、その際には戻り値がNULLかどうかを判断してエラー処理に飛ばすと思います。しかし、Linux のメモリ管理サブシステムには「メモリ・オーバーコミット」という機構があり、実装されているメモリ以上の領域を確保できてしまいます。 #include <stdio.h> #include <stdlib.h> int main() { int i; char *p; for(i=0;i<65536;i++){ p = (char *)malloc(65536); if(0 == (long)p){ break; } } printf("SIZE=%dMB\n",i*65536/1024/1024); return(0); } swapoff したメモリ 1G のマシンでこれを実行するとこんな感じにな
Linuxカーネルはリーナス・トーバルズが1991年に個人的に書き始めたもの。以来、多くの開発者を巻き込みLinuxカーネルは成長し、今も新機能を取り込み続けている。もともと趣味の延長やアカデミックな好奇心から開発に関わった人が多かったことから、かつては「Linuxカーネルの開発はボランティアによって支えられている」と言われたが、それは、現状のLinuxカーネルの開発には、まったく当てはまらない。そう話すのは、7月10日に東京で開催された第5回The Linux Foundation Japan Symposiumで講演した米LWN.netのジョナサン・コーベット(Jonathan Corbet)氏だ。 「最新のカーネルに対して機能を加えたり、変更したりするパッチを送った開発者は2006年6月のバージョン2.6.17以降、全部で2100人。このうち、少なくとも3分の2以上の人々がレッドハッ
「ext3は……古くて遅い。次バージョンのext4も基本的にext3と同じ問題を抱え込んでいる。ext4で解決されるext3の欠点は一部に過ぎない」。7月9日にLinux Foundation Japanの主催で行われたシンポジウムで講演した米グーグルのアンドリュー・モートン氏は、こう話し、現在Linuxはファイルシステムに課題を抱えていると指摘する。 Linuxで使われているファイルシステムにはいろいろあるが、現在最も広く使われているのはext2の後継として開発されたext3と呼ばれるファイルシステムだ。耐障害性のあるジャーナリング・ファイルシステムとして、ext3以外にもJFS、ReiserFS、XFSなどがLinuxでサポートされているが、これらはデ・ファクト・スタンダードとして利用されているext3に比べるとマイナーな存在だ。「XFSはパフォーマンスは良いが、サポートが十分ではなく
昨年10月にリリースされたLinuxカーネル2.6.23では、従来のO(1)スケジューラ(Order One Scheduler)を置き換え、新しいスケジューラ「CFS (Completely Fair Scheduler) 」が組み込まれた。9日に行われた「第8回 The Linux Foundation Japan Symposium」ではカーネル開発者の一人であるThomas Gleixner氏が来日し、CFSの基本概念や最新動向の説明を行った。 Thomas Gleixner氏 従来のLinuxカーネルではIngo Molna氏が開発したO(1)と呼ばれるスケジューラが使われてきた。O(1)スケジューラでは、実行可能なプロセスが優先度別に用意されたアクティブ・キューに登録され、優先度の高いキューのプロセスから順番に実行されていく。そのため実行するべきプロセスが必ず1つに決まるという
David A Rusling david.rusling@arm.comv0.8-3 January 25, 1999 JF Projectv0.8-3 December 2000 *フレーム表示* 本書は、Linux カーネルの仕組みを知りたい Linux 愛好家のためのものです。これは 内部構造のマニュアルではありません。むしろ Linux で使用されている原理や メカニズムを解説したものであり、Linux の動作原理とはどういうもので、なぜそれ が採用されているのかを説明するものです。 Linux という対象は常に変化しています。本書がベースにしているのは現在の安定 版である 2.0.33 のカーネルソースですが、これは個人や法人の大部分で使用されて いるのがこのバージョンだからです。 また、本書は自由に配布してもらってかまわないので、一定の条件のもとにではあり ますが、複製や再配
Futexes Are Tricky Ulrich Drepper Red Hat, Inc. drepper@redhat.com November 5, 2011 Abstract Starting with early version of the 2.5 series, the Linux kernel contains a light-weight method for process synchronization. It is used in the modern thread library implementation but is also useful when used directly. This article introduces the concept and user level code to use them. 1 Preface The base r
Linux カーネル コーディング規約 [プレインテキスト版] 原著作者: Linus Torvalds <torvalds at osdl dot org> 翻訳者: Ken Iwamoto <iwamoto dot kn at ncos dot nec dot co dot jp> Toshikazu Nakayama <nakayama dot ts at ncos dot nec dot co dot jp> Nobuo Yoshida <yoshida dot nb at ncos dot nec dot co dot jp> バージョン: 2.6.24 翻訳日時: 2008/03/26 ================================== これは、 linux-2.6.24/Documentation/CodingStyle の和訳 です。 翻訳団体: JF
Linux Kernel(2.6)の実装に関するメモ書き 書き殴っているので書き方/内容にムラあり。 3.6系に関する記述は【3.6】と記載。 カーネル プロセス プロセスのBlockとWakeup プロセスの優先度 コンテキストスイッチ プリエンプション スケジューラ RunQueue WaitQueue WorkQueue 例外処理 割り込み処理 ページフォルト ページフォルト - 個々のハンドラ ソフト割り込み システムコール 排他制御関連 モジュール 64bit環境での32bitプロセスの動作 メモリ管理 アドレス空間 アドレス空間の管理 カーネル空間のメモリマップ 64bitでのアドレス空間 HighMemory kmalloc,vmalloc 物理ページ管理 スラブアロケータ Rmap proc/meminfo 空きページの確保 kswapd Swap Swap - Swap領
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く