サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
tiki.is.os-omicron.org
Unix 系 OS におけるシステムコール番号を調べてみる. とりあえず,UNIX v7 を基準に 100 番まで比較してみた.空欄は UNIX v7 と同じ. UNIX v7 MINIX 1.0(?) Linux 2.4.18 FreeBSD 4.5 1 exit fork read write open close wait waitpid wait4 creat old creat(non) link 10 unlink exec (non) execve obsolete execv(non) chdir time fchdir mknod chmod chown lchown break brk break(non) stat oldstat getfsstat seek lseek old lseek(non) 20 getpid mount umount setuid get
EtherNet から分家. IEEE 802.3x (IEEE 802.3 Annex 31B) IEEE 802.3x(pause フレーム)とかバックプレッシャとか. IEEE 802.3x 自体は full-duplex 通信の標準を定めたもの.最近の EtherNet は full-duplex のものが多いので,CSMA/CD は使われなくなりつつある. バックプレッシャは受信バッファがあふれそうになったら,コリジョンを送出することでパケットの流量を制御する.half-duplex で使われている方式. たとえば FastEtherNet? と NIC/GbE のように速度が異なる機器を接続するときはこの手の機構があった方がいい. 一方,IEEE 802.3x のフロー制御では PAUSE フレームと呼ばれる特別なフレームを送出する.PAUSE を受け取ったネットワーク機器は,
ストリーミング Linux の最近の動向とか Readahead and Fragmentation (KernelTrap 2002-10-10) O_STREAMING - optimal streaming I/O (KernelTrap 2002-10-12) RobertLove 氏による O_STREAMING パッチ.open 時に O_STREAMING フラグを指定することで,ページキャッシュを使わないようにする. Fair Queuing ディスクスケジューラ. Fair Queuing Disk Schedulers (KernelTrap 2003-02-12) AndreaArcangeli 氏による SFQ(Stochastic Fair Queuing)ディスクスケジューラ,JensAxboe 氏による CFQ(Complete Fair Queuing)
組込みコマンド(builtin)は,通常の(外部)コマンドと違って,プロセスを fork & exec せずに,シェルのプロセス内部で実行される.なので,速いという利点もあるが,もし cd や export (csh なら setenv),ulimit などが外部コマンドとして実装されていたら,プロセスが終了した時点で,変更の影響が消えてしまう(例えば,cd でカレントディレクトリを移動しても,cd が終了して,シェルに戻ったら元の木阿弥).つまり,これらのコマンドは組込みコマンドとして実装する必要がある.本質的にはこちらの方が重要である. 移植性の高いシェルスクリプトを書くには,bash の builtin の振舞いについても頭に入れておいた方がいいだろう. コマンドが builtin であるかを調べるには,bash は type,tcsh は which を使う.この場合の type,
Advanced Risc Machines MST2000 併設の研究会で,ARM のデザイナでもある Prof. Steve Fuber 氏の講演を聞いた. ARM って Acorn? RISC Machine の略だったらしく,元々は Acorn? という PC 用に設計された プロセッサ らしい. ARMプロセッサ入門 (CQ出版社TECH IシリーズVol.18)に、そのあたりのいきさつが詳しく書いてありました。 ARM社の以前の名前がAdvanced Risc Machinesで、その会社を作ったのがかつてAcorn社でARM(Acorn RISC Machine)プロセッサを設計した技術者だったわけです。 Thumb 命令ってのが特長の一つ. ARM は基本的に32bit固定長命令だが,16bitにパックしたのがThumb命令.全命令の80%がThumb命令として実行できる
OmicronBBS:887 から. OSを勉強するとき参考になる(なった),また,これくらいは知っておくといいのではという本を推薦してみましょう. 別館 OSの本を推薦してみよう(オンラインリソース編) OSの教科書 システムソフトウェア OSについての話をしよう OS 一般 A.S. Tanenbaum: Structured Computer Organization (Amazon:0130959901) どっちかというとアーキテクチャよりではあるんだけど,こういう論理からAPまでという縦方向に書いてある本ってあんまりないので,いいと思うんだけどな.新しい技術をキャッチアップするタイプの本ではないけど,教科書として勉強するにはすごくいいと思いますね.練習問題も質が高いし.悪い点は(日本的な観点からすると)厚すぎることかな. 翻訳は「構造化コンピュータ構成」.翻訳の方は買ってな
Jun Sun の Linux MIPS 移植指南 あなたからの情報提供,誤り,スペルミス,デッドリンクの指摘,コメント,そして賞賛:-)などのフィードバックを待っています. オリジナル文章はここにあります. [フレーム版] 前書き この文書には,私がいくつかのMIPSマシンへの移植や他のLinux関連の作業において学んだことが反映されています.初心者が何から始め,どのように経験を積んでいくかという手助けになれば幸いです. この文書はMIPSマシンへのLinux移植における主要な工程をすべて含んでいます.中でも「MIPSマシン抽象化層」(すなわちマシン固有コードとほとんどのMIPS共通コード間のインタフェース)と呼ばれる部分に注目することになるでしょう.他にも「Linuxハードウェア抽象化層」(すなわちLinux共通コードとアーキテクチャ固有コード間のインタフェース)について注目した有
TCPの一番肝になる輻輳制御(congestion control)について. 歴史 TCP は BSD の実装を由来に Tahoe,Reno などと呼ばれる.一般に現在使われている TCP は Reno ベースになっている.Lite はどうしたという気もするが,Reno より性能が悪くなったと評価している論文もあるように,あまり聞かない. Net/3 ってやつが Lite だと思う. さらに最近では Vegas,WestWood といった輻輳制御を改良した TCP が提案されている. Tahoe V. Jacobson 氏らの "Congestion avoidance and control" はたぶん Tahoe のこと. スロースタート,輻輳回避アルゴリズム 高速再送アルゴリズム Reno 高速リカバリアルゴリズム NewReno 高速リカバリアルゴリズムの修整 Janey Ho
MVSとUnixのファイルから分家 物理メモリ+スワップ以上の領域を仮想記憶にマッピングできること. 昔の Linux (2.0.x の頃?) は over commit と言って空き物理メモリがなくても malloc できるようになっていました. kernel 2.4.4 マシンの /proc/sys/vm/overcommit_memory を見てみたら 0 になってました.これを 1 にすると over commit するようになるのかな? memory overcommit 必要なバッキングストアが存在するか確認しないのが covercommit らしい.つまり実メモリ+スワップ領域以上のメモリが(見かけ上)確保できると.当然,実行時にメモリが足りない(SIGKILL発行)という事態になり得る. over commitment (アクマくんにお願い 1999-07-16) メモ/
「Linux/GDBを使ってコードを追っかける」のカーネルモジュール編 gdb vmlinux /proc/kcore では、カーネルモジュールのシンボルが読み込まれないので、gdbが起動した後にadd-symbol-fileコマンドを使ってシンボルを読み込む必要がある。ただし、単純に (gdb) add-symbol-file net/ipv4/tcp_cubic.o としても、相対アドレスなので、使えない。そこで、.text、.dataセクションなどの先頭番地をgdbに教える必要がある。これらのアドレスは、/sys/module/モジュール名/sections/以下のファイルを見ればわかる。 # ls /sys/module/tcp_cubic/sections/ . .data .gnu.linkonce.this_module .strtab __param .. .data.re
MPEG Overview of the MPEG-4 Standard 第23回:MPEG-4とは (ケータイ用語の基礎知識 2000-12-06) 3G の動画機能で使われている 3GPP(3rd Generation Partnership Project),3GPP2 も MPEG4 ベース. H.264 (ITU-T) Error Concealment MPEG は前後フレームの差分を利用して圧縮するので,パケットロスを起こした場合,次の基準フレームまでその影響を残してしまう. MPEG4 ではそのような影響を修復するために欠落したデータを補間する.具体的にどうするの? フォーマットの話 MPEG1/2 のピクチャに相当するのが VOP(Video Object Plane).で,GOPではなく,GOV(Group of VOPs). I-VOP (フレーム内符号化VOP)
Linux/メモリ管理 Linux スラブ・アロケーターの徹底調査 (IBM dW 2007-05-15) kmalloc/kfree,スラブアロケータについて. 書式 #include <linux/slab.h> void *kmalloc(size_t, int); void kfree(const void *); kmem_cache_t *kmem_cache_create(const char *, size_t, size_t, unsigned long, void (*)(void *, kmem_cache_t *, unsigned long), void (*)(void *, kmem_cache_t *, unsigned long)); void *kmem_cache_alloc(kmem_cache_t *, int); int kmem_cache_s
Linux/デバイスドライバ/NIC Intelのページ SourceForge Linux 用ドライバ. Linux,FreeBSD,Solaris 共に Intel がドライバを開発している. ちなみに FreeBSD のドライバは em(4) か gx(4) になる.PRO/100 は fxp(4). 割込みに関して e1000 は,ITR (Interrupt Throttle Rate) レジスタの設定で割込み回数を制限できる.では,ドライバは割込み発生に対して,どんな処理を行うのか. ナイーブに考えると,送信処理はリングデスクリプタの設定をしてからパケット送信要求を NIC に出し,送信完了割込みが発生したら,デスクリプタを解放する.一方,受信処理は,受信割込みを待ち,受信用ソフトウェア割込みを起動すればよい. ぼっ〜とドライバを読んでみると,送信処理は割込み使わず,ポーリン
Linux/ネットワークエミュレーションモジュール.FreeBSDの DummyNet みたいなもの. 本家 PHPnetemGUI 2.6.11 と 2.6.12 で実装が結構変わっているなぁ. PSCHED_CLOCK_SOURCE の違い ネットワークエミュレータネットワーク機器やアプリケーションを,実ネットワーク環境で実験評価したいが,そのような環境が利用できない場合,ネットワークエミュレータが便利である. Free UNIXで利用できるネットワークエミュレータとしては,DummyNet,NISTnet,netemなどが有名である.これらをIPルータ上で動かすことで(例えば,下図のnetemと書かれた部分),ネットワークの遅延やパケットロス率を模擬できる. DummynetはFreeBSDで動作し,実績も高い.NISTnetはLinuxで動作するが,開発が停止している.netemは
Garbage Collection メモリ管理の神話 JSSST のチュートリアルで前田先生がなぜ GC がメジャにならないのかということで,次のようなメモリ管理の神話?という話をされました. GC は malloc/free より(常に)遅い 場合によるが大抵は互格以上.malloc/free にはメモリリーク,ダングリングポインタという問題がある. 参照カウントは GC ではない(から遅くない) 参照カウントは GC の一種である.しかも欠点が多い. 参照カウントはごみになったことがすぐわかるので,即座に回収できる.という点がメモリ管理を自分で仕切りたいプログラマに受けている? ref/unref を追加すればいいので,既存のプログラムからの移行が容易に感じられる.実際はメモリ管理がプログラム全体に散らばるのでデバッグや最適化が大変になるし,マルチスレッド環境では排他制御のオーバ
Subversion 簡単なお勉強メモ. インストールDebian系であれば, $ sudo apt-get install subersion リポジトリの作成$ svnadmin create /opt/svn $ ls /opt/svn README.txt dav/ format locks/ conf/ db/ hooks/ (今回使った)1.3では,デフォルトのリポジトリ形式はfsfsだった.昔はBerkeley DBがデフォルトだった.明示的にfsfsにする場合は,--fs-type fsfsと指定する. インポートリポジトリの指定にはURLを使う.Subversionの慣習にしたがって,<プロジェクト名/trunk>にする(詳細は後述).-mオプションでコメントを指定できる.省略された場合は,環境変数EDITORで指定されたエディタが起動する(Debianの場合,デフォル
Linux ではどうやって CPU 負荷を測っているのか? 負荷平均(load average)とは,「実行待ちの状態にあるプロセス(TASK_RUNNING か TASK_UNINTERRUPTIBLE 状態)の,最近 1,5,15 分間の平均数」である. top や vmstat は procps パッケージに含まれている. パッケージ名からわかるように,これらのコマンドは /proc を読んでいる. top(1) load average は /proc/loadavg,Cpu(s) は /proc/stat を参照している. top - 19:11:34 up 22 days, 53 min, 2 users, load average: 0.23, 0.08, 0.03 Tasks: 60 total, 1 running, 59 sleeping, 0 stopped, 0 z
Linux Linux-MM Project Linux Memory Management (Linux KHG) Lectures By Rik Outline of the Linux Memory Management System Linux VM Mel Gorman 氏のページ.すばらしい. 基本 キャッシュ (記憶階層) 仮想記憶 ページング MMU ページテーブル 仮想アドレスと物理アドレスの対応表.対応はページ単位で行ない各ページに対する属性もページテーブルに格納されている. TLB Linux 依存 HIGHMEM (BIGMEM) 課題 物理メモリ,仮想メモリ,それぞれのメモリマップを調べる. 物理メモリ管理,すなわちページアロケータについて調べる. 関連構造体の意味とそれらの関連性 デマンドページング, CopyOnWrite はどうやって実装されているのか.
rawI/O とブロックデバイス 通常,ディスクアクセスなどのブロックデバイスに対する read/write にはデバイスからカーネル空間(のバッファ),カーネル空間からユーザ空間へと2度のコピーが入る. このようなバッファリングは通常のアプリケーションではキャッシュとして有効に働くが,DBMS のように大規模なデータをバルク転送したり,アクセスパターンが異なるものは,アプリケーションが独自にバッファ管理した方が効率的な場合が考えられる.そこで,Unix が提供している機構が rawI/O である. また,比較的最近の Unix では,mmap が提供されている.mmap では,インタフェースやセマンティクスが従来の read/write モデルとは異なるが,rawI/O の場合は,通常のファイルではなくデバイスファイルを通じてアクセスすることになるが,バッファリングしないだけで,そのイン
Linux のネットワーキングコードは汚いと思われているのか,あまり文書化されたものを見ない.その重要性と反比例して,O'reilly のカーネル本でもネットワークの章がない(2nd Edition ではちょっと追加されているが).まぁ,BSD でもまとまったものは 4.4BSD の TCP/IP Illustrated だし.また,具体的な数字はぱっと出ないが,最近の 2.4 カーネルではネットワークの性能がかなり向上したようである. タイムアウトとか例外とか,思ったようにきれいに書けないというのが根本的な原因としてあるのかもしれない.ひょっとしたらファイルシステム至上主義の Unix の性なのかもしれない. Unix で最初に TCP/IP が実装されたのは BSD であり,これにより多くの開発者に TCP/IP の実装法が知れ渡ることになった.VintonCerf 氏によって TCP
Linux/インラインアセンブラ Linux get_current 関数を例にインラインアセンブラを説明する. Linux カーネルで使われているアセンブラは GAS (GNU Assembler) であり,インラインアセンブラの表記もこれに従う.GAS は Intel 表記ではなく,AT&T 表記を利用するアセンブラであり,Intel のマニュアルを読みながら GAS でコーディングする場合は注意が必要である. get_current (include/asm/current.h)の定義は次のようになっている. static inline struct task_struct * get_current(void) { struct task_struct *current; __asm__("andl %%esp,%0; ":"=r" (current) : "0" (~8191UL
Pythonで書かれた分散SCM 本家 JapaneseTutorial Mercurial の利用 Mercurial 開発者に BitKeeper が圧力 (SlashdotJapan 2005-10-02) 分散SCM: 履歴管理システムとパッチ管理システム (YamaKenZ の日記 2007-02-29) 履歴管理システムとパッチ管理システムをわけて考える. Mercurialではパッチ管理は,Mercurial Queuesとして分離されている. Mercurialいいですね〜 arinoはSubversionより大分好きです。 Linuxカーネルはgit,それ以外はSubversion.ただしレガシーなプロジェクトはCVSって使い分けてますが,Subversionに対するMercurialの利点って,やはり分散リポジトリなのでしょうか? - Mercurialは使ったことが
C コンパイラ標準の機能ではなく,gcc 独自の拡張機能(文法)について. Extensions to the C Language Family (gcc 4.1.1) 翻訳 Extensions to the C++ Language (gcc 4.1.1) 翻訳 gccの拡張文法 GNU拡張を使う (スピード狂のための道標) アプリケーション屋さんはそれほど深刻じゃないかもしれないけど(性能もよい商用コンパイラがあるし),カーネル屋にとっては(ほぼ)必須なコンパイラ.Linux カーネルだけでなく,ITRON でも gcc に依存しちゃっているカーネルが多いみたいだね. ポータブルにするには #ifdef __GNUC__ で使いわければよい. Linux カーネルで使われている gcc の拡張機能 Linux カーネルには gcc の拡張機能が結構使われている. 以下に,その例を示
Message Passing Interface MPI Forum 並列プログラミング入門 MPI版 (青山幸也) 「虎の巻」.理研で定期的に講習会が開かれているが,そのテキスト. Parallel Programming with MPI (Peter Pacheco) MPIの解説書だが,並列プログラミングの教科書としてもよい.翻訳されている. 並列プログラミング用のメッセージ通信ライブラリの標準規格. 1990 年初頭,各ベンダは独自の並列通信ライブラリを提供していたため,ユーザプログラムのポータビリティ問題が深刻化していた.そこで,アメリカの国立研究所,並列計算機ベンダが中心となり,仕様が策定された.現在,基本仕様である MPI-1 とその拡張仕様である MPI-2 が定められている. MPI-1 (1994) MPI-1.1 (1995) MPI-2.0/MPI-1.2
L3の後継プロジェクトとしてJochen Liedtke 教授らによって研究されているカーネル.いろいろなカーネルの実装や周辺プロジェクトがあるみたい. L3のさらに前はEumelというOSで,1979年にプロジェクトが開始され,最初のターゲットプロセッサはZ80だったそうな. Jochen Liedtke 教授は今年(2001年)の6月に亡くなっていたらしい. Machを第1世代のマイクロカーネルとするとL4やExokernelは第2世代のマイクロカーネル,エクステンシブルカーネルなどと呼ばれ,必要最小限のハードウェアの仮想化,高速なIPCが特徴である. 本家 (TU Dresden) L4HQ L4を最初に知ったとき,システムコールが7つしかないことに衝撃を受けた. ipc,fpage_unmap,task_new,id_nearest, lthread_ex_regs,thread_
Linux ネタ募集中 はじめにDocumentation/HOWTO に目を通す.日本語訳(ja_JP/HOWTO)もある. コーディング リストマクロを使いこなす二つのリストを連結する.次の場合,list1 -> list2 の並びになる. list_head head; list_add_tail(&head, &list2); list_splice(&head, &list1); リストマクロの詳細は,../ユーティリティ関数へ. Linux カーネルで学ぶアルゴリズム:-) 木探索(→ ツリー構造). Red Black Tree (lib/rbtree.c, include/linux/rbtree.h) Radix Tree (lib/radix-tree.c, include/linux/radex-tree.h) Interface 2004/02 号に曽田さんが「C
TCP 小さなサイズのパケット送受信が継続的に行なわれている状態. 何をもって「小さい」と定義するかの指標は Maxiam Segment Size(MSS). 基本的な対策としては, 送信側は,MSS あるいは最大広告ウィンドウの 1/2 より小さなパケットを送信しない. 受信側は,MSS あるいは受信バッファの 1/2 よりも小さなウィンドウ広告を行わない. RFC:1122.Linux の実装では __tcp_select_window (net/ipv4/tcp_output.c) をチェック. さらに送信側の遅延処理として Nagle アルゴリズム,受信側の遅延処理として../遅延ACK(ピギーバック)が存在する. The Nagle Algorithm Nagle アルゴリズム 送信バッファには MSS に満たない小さなデータしかない場合,前に送信したデータに対する ACK
Linux あんまりGDBを使っている人がいないみたい.OS/omicronV4 みたいに数人でコンパイラから作って貧弱な環境で(体力をトレードオフに(^^;)ひぃひぃ言っているわけじゃないんだから使えるものは活用しないと. はじめに 構造体のメンバをたどるときなどにデバッグ情報が必要になるので,前もって -g オプション付きでカーネルをコンパイルしておくこと./usr/src/linux/Makefile の CFLAGS_KERNEL を次のように編集すれば OK. CFLAGS_KERNEL = -g また,次のようにコマンドラインから実行しても OK. # EXTRA_CFLAGS=-g make gdb の起動は次のようになる./proc/kcore にアクセスするため,su しておく必要がある./proc/kcore とはPCに搭載された物理メモリを覗くためのインタフェースであ
次のページ
このページを最初にブックマークしてみませんか?
『OS-OMicron.org』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く