[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

タグ

ブックマーク / wiki.bit-hive.com (5)

  • 先読み処理 - Linuxの備忘録とか・・・(目次へ)

    先読みとは、page単位の実際の読込みサイズを拡大して読込む事で、ブロックデバイス登録でblk_alloc_queue_node()がコールされる際、BIOリストが作成されるrequest_queueq->backing_dev_info.ra_pagesに先読みサイズ最大値が設定されます。先読みサイズ最大値ra_pagesは、実読込みサイズ+先読みサイズで、実サイズを読み込んで、先読みサイズ分を読み込むのでなく、読み込み際は、実サイズ/読み込みサイズ関係なく、両者を合わせたサイズ値で読み込みます。 最大サイズのデフォルトはVM_MAX_READAHEAD=128で、page数(VM_MAX_READAHEAD * 1024) / PAGE_CACHE_SIZE=32 pageとなります。ブロックデバイススペシャルファイルのioctl()のBLKRASETで設定できます。この先読みサイズ情

  • ソフト割り込み - Linuxカーネルメモ

    1.割り込みの種類Linuxではソフトウェアで行う割り込み処理に様々な種類がある。Kernel2.6ではソフト割り込みとタスクレットのみとなっている。すでに無くなっているものも含めて以下に示す。 1.1 BH (Bottom Half) Linux初期の頃からある割り込み処理形式。 登録数は32まで。 マルチプロセッサのシステムでも複数同時実行はされない(どれか1つのCPUでしか実行されない)。 Kernel 2.4の実装としては高優先度タスクレットとして登録され実行されている。 Kernel 2.6では削除された。

  • vmalloc - Linuxの備忘録とか・・・(目次へ)

    vmalloc関数は、複数ページのサイズのリニアアドレス空間を必要とする時にコールされます。獲得する複数ページは物理的に連続である必要はありません。ある意味この区間はストレートマップでないとも言えるわけです。実装の概略は、カーネルメモリー区間から必要サイズのリニアメモリー空間を割り当て、必要ページを1ページづつ確保した後、そのページをページグローバルテーブル/ページアッパーテーブル/ページミドルテーブル/ページエントリーテーブルとするページテーブルに設定していくだけです。 ここで問題となるのが、カーネル動作時のメモリー空間です。カーネルは独自のメモリー空間を有していません。カレントプロセスの0xC0000000以降のメモリー空間で動作します。このリニアメモリー空間/ページテーブルはすべてのプロセスで同じ内容となっているからです。 そうなると、vmalloc関数で設定したリニアメモリー空間/

    y_uuki
    y_uuki 2013/04/02
  • 送受信 - Linuxカーネルメモ

    1. 受信処理 1.1 従来の受信処理 ネットワークインタフェースで受信したパケットは、デバイスドライバのH/W割り込み処理処理で刈り取られる。デバイスドライバは受信したパケットをカーネルの受信キューに積み、ソフトウェア割り込みを発生させる。 受信ソフトウェア割り込みのハンドラは、受信キューに積まれているパケットを取りだし該当プロトコルの受信ハンドラを呼び出す。 デバイスドライバの受信処理が受信キューにパケットを積むだけで、受信処理のメインはソフトウェア割り込み処理で実装しているのは、H/W割り込みの処理を極力短くしてシステムのレスポンスを向上させるため。 受信処理の流れを図1に示す。 1. 従来の受信処理ではデバイスドライバがネットワーク層にパケットを渡す際、netif_rx()を使用する。 2. ソフトウェア割込みを発生させる際、poll_listには仮想的なnet_device(ba

  • sk_buff - Linuxカーネルメモ

    3. その他のデータ構造 3.1 frags配列 skb_shared_info内のfrags配列がある。この配列を使用することで、パケットデータを非連続な領域に分断して保持することができる。fragsを使用した状態のsk_buffを図3.1に示す。 ただし、このようにfragsパケットデータを分断して持つ形式はネットワークカード(とそのドライバ)がScatter/gather I/O(*1)に対応していないと使えない。Scatter/gather I/Oに対応しているとデバイスにNETIF_F_SGフラグが設定されているので、送信デバイスにこのフラグが立っている場合のみ、このような形式を使う。 frags配列の要素はskb_frag_structとなっており(ポインタではなくそのもの)、これは、分断されたデータがどこにあるかを管理する。 skb_frag_structはデータが置かれてい

    y_uuki
    y_uuki 2012/11/11
  • 1