Index ソフト・ハード Linuxタスク Linux構成・方式 | カーネルの構成 |
システムコールIF プロセス管理 スレッド管理 スケジューラ 時計 割込処理 同期処理 シグナル プロセス間通信 メモリ管理 ファイルシステム デバイスドライバ ネットワーク モノリシックK ソースツリー |
システムコールインターフェイス ・時間の計算 ・APとカーネル ・カーネルのユーザコンテキスト ・2.6で、vsyscallのために glibc と gdb を変更 ・カーネルのプロセス空間へアクセス時の、処理データのチェック ・カーネルのプロセス空間へアクセス用関数 プロセス管理 ・プロセスの作成と破棄、および外界への接続(入力と出力)の処理 ・管理するためのデータ構造を用意 プロセス毎にそのプロセスを管理するためのデータ構造を用意 生成の際に、メモリ領域を割り当て、優先度を設定 プロセスID(pid)、プロセスループID、セッションID 実行優先度、プロセス空間情報、利用中のファイルに関する情報・プロセスの生成、実行を管理 プログラムを実行している状態、psで表示・プロセスは独立して動作 カーネル上で各プロセスは独立して動作 プロセス間通信を利用して、複数のプロセスが連携して動作可能・プロセスの状態は2つ 実行可能プロセス 実行中のプロセス~プロセススケジューラ~実行待ちプロセス 待機状態プロセス・プロセスとして実行されるプログラムのモード 特権モード(カーネルモード、スーパーバイザモード) 非特権モード(ユーザモード) カーネルのサービスが必要な場合、システムコールを発行スレッド(コンテキストと同意)管理 ・一種のプロセスとして実装 プロセススケジューラから見た場合、スレッドとプロセスは同じ存在・スレッド間でプロセス空間を共有する。 メモリ共有 スレッド同士で関係情報を保持する。・マルチスレッドアプリケーション スレッドをいくらでも発生できる。 カーネルスレッド(コンテキスト)は概ね1つ 他のスレッドが動いては困る場合は、排他制御を行う。・2.6の、POSIXスレッド NPTL(Native Posix Thread Library)へ変更(旧 Linux Threads は廃止) futex(fast userspace mutex)を使用・2.6の、futex 追加 プロセスに対して待ち合わせと起床の機能を提供 待ち合わせが無い時はシステムコールを発行しない。・2.6の、epoll 追加 ファイルディスクリプタのI/O待ち合わせ処理を効率化プロセススケジューラ ・プロセスがCPUを共有する方法を制御するスケジューラーもプロセス管理の一部 ・プロセスの実行時間を決める。 どのプロセスへどのくらいの実行時間を割くかを決める。・2.4までのランキュー(実行プロセスを管理するキュー)は1つ タイムスライス(平均割当時間)を使い切ったプロセスがある場合、 全てのプロセスの優先度を再計算 その間CPU毎の平行処理が行えない(プロセス切替時にCPUの競合発生) 再スケジュールにプロセス数に比例した時間がかかる、性能低下・オーダーワンスケジューラ 「O(1)」 CPU毎にランキューを準備し、CPUの競合をなくす。 ユーザとの対話的プロセスへの対応強化 プロセスの切替を起こりやすくする。 優先的にスケジューリングを行う。時計 ・時間の計算 割込処理自体を応答性が必要な部分と必要でない部分に分ける方式・ハードウェアのカレンダ 起動時にxtime変数へ反映 BIOSで設定・内部時計とHWカレンダの同期 # hwclock オプション・タイムスタンプカウンタ Intel x86 CPU、TSC(タイムスタンプカウンタレジスタ)・時刻の取得 ・タイマーリスト 「登録した一定時間後にコールバックされるパンドラ」を登録する仕組み タイマーリスト操作関数 プロセススケジューリングとタイマーリスト機能の組合わせ・インターバルタイマー 絶対時間指定タイマー タイマーリストを利用 システムが経過した絶対時間でシグナルを発生 実行時間指定タイマー・POSIXタイマー ・workqueue 割込処理 ・伝統的UNIXの方式(割込レベル)とは少し異なる方針で実装 割込処理自体を応答性が必要な部分と必要でない部分に分ける方式 マルチプロセッサ対応 HW割込みコンテキスト 遅延割込み処理(SW割込みパンドラ又は、tasklet) プロセッサ間割込み・NMI 割込み禁止が出来ない 特殊用途に使用同期処理 ・出力等のプロセス実行中に、他のスレッドが働いては困るときに使う排他制御 クリティカルセクション(排他制御を行う区間)・プロセスコンテキスト同士の排他処理 ・カーネルの割込みコンテキストでのクリテカルセクション保護 スピンロック仕様シグナル ・プロセスへ非同期事象を伝える。 ・シグナルの種類 ・リアルタイムシグナル ・シグナル処理 ・デフォルト動作 ・waitシステムコール プロセス間通信 ・プロセス管理で行う、信号、パイプ、又はIPCプリミティブを介した通信 (含む、外界への接続(入力と出力)) メモリ管理 ・物理メモリと仮想メモリを用いてデータを管理する。 ・各プロセスに対して、物理メモリに対応した仮想アドレスを割当てる。(大容量化が可能) ・各プロセスに対して固有の仮想アドレスを割り振る。(独立したメモリ空間) ・仮想記憶 アドレス変換を行う。 カーネル空間のレイアウトを行う。 実ページの管理を行う。 動的メモリ割当てを行う。 プロセスの仮想記憶の実現を行う。 ページの回収処理を行う。・2.6での追加機能 bioインターフェース、rmap(revers map)、 HugeTBL追加、NUMA (Non Uniform Memory Access)ファイルシステム ・記憶装置上のデータに対してファイルという形式を通して一貫したアクセス手順を提供 全てのファイルはルートからのツリー状へまとめ、管理・ファイル カーネル内のデータ構造をファイルとして扱える。 デバイスをファイルとして扱える。・ファイルのデータ型 ・データ構造 ・プロセスとiノード間の階層構造 ・ファイルへのアクセス ・キャッシュ機構 ・仮想ファイルシステム(VFS) ・ファイルのデータ型 ジャーナリング(ログ)ファイルシステム ・ext3 動作 ・2.6での追加機能 XATTR、quata (ユーザのファイル使用量の制限)v2サポート、 ブロックデバイス関連の変更 2T以上のHDD対応 LVM2 (Logical Volume Manager)を追加 request queue のロックをデバイス単位に行う。デバイスドライバ ・デバイス制御のために、カーネルに埋め込まれる。 ・ファイルシステムの要求に応じて、実際の入出力処理を行う。 ・ドライバモデル 2.6から、デバイスドライバに共通な処理を抽象化 2.6から、管理情報を、sysfs 経由で取得できる。・ACPI ドライバ 2.6で、多くの機能が使用可能となる。・サウンドドライバ 2.6から、ALSA を追加・USBドライバ 2.6から、USB 2.0 を追加・コンソールドライバ 2.6から、複数のキーボードとDISPを接続可・フレームバッファデバイス vesafbネットワーク ・OSI参照モデルとTCP/IPの階層モデル ・階層モデルでのAPI(アプリケーションインターフェース) 隣り合う階層間で、APIを提供 上位層は直下の層のみのAPIを使用 下位層は直上の層のみのAPIを使用・TCP/IPプロトコルスタックの階層 ・TCP/IPプロトコルスタックの特徴 ・ネットワーク実装の全体図 ・ネットワーク(Berkeley ソケットインターフェース)実装 ・ソケットへのプロトコル登録・削除 sock_register プロトコル登録関数 sock_unregister プロトコル削除関数 struct net_proto_family を登録・ソケット専用システムコール ・ソケットAPIを、glibc によるラッパーとして実装 ・ソケットが管理する送受信データ ・sockfs ・struct sk_buff ・NICとカーネルのインターフェース ・IPv4通信 ・IPv4ソケット作成 ・ルーティング仕組み ・ルーティング処理 ・受信処理 (関数の流れ) ・送信処理 (関数の流れ) ・IPヘッダチェックサム ・リアセンブル処理 ・ARP解決 ・ICMP ・UDP ・IPv6スタック 実装面から見た基本的な構造は、IPv4と同じ・パケットフイルタリング Netfilter (Iptables)・NAT Netfilter (Iptables)モノリシックカーネル(Linux:monolithic kernel) ・Linuxカーネルコード 機能毎に大まかに分類・様々なサービスを提供するルーチンを内部に用意する。 ・周辺機器の種類や、ファイルシステムの種類が増えると肥大化する。 ・複数の機能部品が依存しあい、変更に手間取る。 ・システムメモリ領域を共有化すると、一部の障害が全体障害につながる。 ・機能部品のモジュール(基本単位)化 モジュール同士の独立性を高める。 モジュール間の通信をサブルーチンの呼び出しで行う。 モジュール間の依存関係を整理、不要な場合、アンロード モジュールの性能、カーネルコア内のサブルーチンと比較で、差はほとんど無い。・ダイナミックローディング システム動作中に動的にモジュールをロード、アンロード アンロード、メモリ節約 ロード、テストが容易 ネットワーク ファイアウォール SCSI サウンドカーネルソースツリー ・基本機能 init/ 起動、初期化処理 ipc/ プロセス間通信、system V・ipc、共有メモリ、セマフォ、メッセージ kernel/ カーネル基本機能 mm/ メモリ管理・アーキテクチャ依存部 arch/各種CPUアーキテクチャ依存したコード・入出力(i/o) block/ ブロックi/o drivers/ デバイスドライバ fs/仮想fs/各種fs ファイルシステム net/ ネットワーク sound/ サウンド・セキュリティ crypto/ 暗号処理 security/ セキュリティ・ライブラリ、ツール Documentation/ include/ カーネルヘッダファイル lib/ カーネル内ライブラリルーチン scripts/ コンパイルツール usr/ カーネル内ツール |
All Rights Reserved. Copyright (C) ITCL |