...

2-2-応. Linux カーネルに関する知識

by user

on
Category: Documents
6

views

Report

Comments

Transcript

2-2-応. Linux カーネルに関する知識
OSS モデルカリキュラムの学習ガイダンス
2-2-応. Linux カーネルに関する知識
1. 科目の概要
Linux オペレーティングシステムの中核をなすカーネルの動作について、メモリ管理、プ
ロセス管理、といった基本動作の詳細と、カーネルによるファイルシステムやネットワー
クの取り扱いについて、具体的な動作原理を説明する。
2. 習得ポイント
本科目の学習により習得することが期待されるポイントは以下の通り。
習得ポイント

説 明
シラバスの対応コマ
Linux OS の基本的な構造を説明する。また中心的な役割を担うカーネルの
2-2-応-1. OS の基本構造とカーネルの役割 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー
ク、I/O などの概要を紹介する。
1
「プロセス」の概念と、プロセスを切り替えて時分割でタスクを遂行するマル
2-2-応-2. マルチタスクOS におけるプロセス
チタスクの概念について解説する。またOS が各プロセスを管理する手法に
の概念
ついても言及する。
5
コンテキストスイッチの概念に触れ、プロセスが切り替わるメカニズムの概要
2-2-応-3. プロセスの切り替えとスケジューリ
を説明する。スケジューリングアルゴリズムの実際を紹介し、さらにその基礎
ングアルゴリズム
となる理論でもある待ち行列議論とマルコス連鎖について解説する。
2,5
2-2-応-4. 割り込みと時分割処理
CPU とその他デバイスの関係について整理し、「割り込み」の概念を説明す
る。割り込みの種類や割り込みの管理など割り込みに関連するいくつかの話
題について触れ、さらに、カーネルにおける割り込み処理の概要を解説す
る。また時分割処理に関わる基本的な事項を説明する。
3
2-2-応-5. システムコール
一般のアプリケーションからOS の機能を利用する際に使用するシステム
コールを紹介する。システムコールの位置づけを説明し、システムコールが
呼ばれたときのOS 内部での振る舞いについて概説する。
3,4
2-2-応-6. プログラムとOS の動作モード
プログラムが動作するプロセス空間という概念を説明し、その目的や特徴、
それぞれの空間でできることとできないことを示す。さらにシステムコールに
よる動作モードの遷移について解説する。
4,5
2-2-応-7. 同期と排他制御
プロセスの同期や排他が必要になる状況(デッドロック等)やカーネルによる
管理について述べ、排他制御を実現するための実装技術やその背景となる
基礎論理について触れる。またカーネルの内部で排他制御が実装されてい
る具体的な例を示して説明する。
4,5
2-2-応-8. メモリ管理
Linuxカーネルが取り扱うアドレス空間として、物理的なメモリ領域に対するア
ドレス空間と仮想的なアドレス空間が存在し、それらは適宜マッピングされて
管理されること、「ページ」の概念等、基本的な原理を解説する。そしてペー
ジングやページテーブルといった、ページ管理に用いられる基本的な技術
を紹介し、ページ管理の効果を説明する。
6
2-2-応-9 プロセス空間
プロセス空間を管理する方法の具体的な技術について説明する。デマンド
ページング、ページキャッシュ、ページフォルト、スワップデーモンといった
個々の概念を解説する。
カーネル空間特有のメモリ確保の方法と、そのインタフェースについて解説
する。また、カーネル内でのメモリ確保特有の制限や、システムとして提供す
るメモリ確保のアルゴリズムについても述べる。
7,8
2-2-応-10. ファイルシステム
ファイルシステムの違いを意識することなくあらゆるファイルシステムへ一元
的にアクセスできるようにするための仮想ファイルシステムについて解説す
る。またパイプやprocファイルシステムのような疑似ファイルシステムなどの特
別なファイルを説明し、その意義とメリットについて触れる。
9,10,11
【学習ガイダンスの使い方】
1. 「習得ポイント」により、当該科目で習得することが期待される概念・知識の全体像を把握する。
2. 「シラバス」
、「IT 知識体系との対応関係」
、「OSS モデルカリキュラム固有知識」をもとに、必要に応じて、
従来の IT 教育プログラム等との相違を把握した上で、具体的な講義計画を考案する。
3. 習得ポイント毎の「学習の要点」と「解説」を参考にして、講義で使用する教材等を準備する。
独立行政法人
情報処理推進機構
OSS モデルカリキュラムの学習ガイダンス
3. IT 知識体系との対応関係
「2-2-応. Linux カーネルに関する知識」と IT 知識体系との対応関係は以下の通り。
科目名
1
2
2-2-応. Linuxのカーネルに関す
Linuxカーネル概論 スケジューリング
る知識
3
割り込みと遅延
4
5
システムコール
6
プロセス管理
7
8
9
10
11
メモリ管理(1):メモ
ファイル管理(1):
メモリ管理(2):実メ メモリ管理(3):プロ
ファイル管理(2):
リアドレスの変換機
仮想ファイルシステ
モリとページの管理 セス空間の管理
ファイルの操作
構
ム
ファイル管理(3):
特殊ファイル
<IT 知識体系上の関連部分>
分野
組
織
報
関
シ
連
ス
事
テ
項
ム
と
情
応
用
技
術
1
2
IT-SP 社会的な
観点とプロ
フェッショナル
としての課題
3
IT-IM 情報管理
4
IT-WS Webシステ
ムとその技術
5
ェ
ソ
フ
ト
ウ
ア
の
方
法
と
技
術
IT-WS1.Web技術 IT-WS2.情報アー IT-WS3.デジタル IT-WS4.Web開発 IT-WS5.脆弱性
キテクチャ
メディア
IT-WS6.ソーシャ
ルソフトウェア
IT-PF1.基本デー IT-PF2.プログラ IT-PF3.オブジェ IT-PF4.アルゴリ IT-PF5.イベント IT-PF6.再帰
ミングの基本的 クト指向プログ ズムと問題解決 駆動プログラミ
IT-PF プログラ タ構造
構成要素
ラミング
ング
ミング基礎
CE-SWE0.歴史と CE-SWE1.ソフト CE-SWE2.ソフト CE-SWE3.ソフト CE-SWE4.ソフト CE-SWE5.ソフト CE-SWE6.ソフト CE-SWE7.ソフト CE-SWE8.言語翻 CE-SWE9.ソフト CE-SWE10.ソフト CE-SWE11.ソフ
概要
ウェアプロセス ウェアの要求と ウェアの設計
ウェアのテスト ウェアの保守
ウェア開発・保 ウェアプロジェ 訳
ウェアのフォー ウェアの構成管 トェアの標準化
仕様
と検証
守ツールと環境 クト管理
ルトトレランス 理
IT-SIA システム IT-SIA1.要求仕
インテグレー
様
ションとアーキ
テクチャ
IT-NET1.ネット
ワークの基礎
IT-NET ネット
ワーク
IT-SIA2.調達/手 IT-SIA3.インテ IT-SIA4.プロ
配
グレーション
ジェクト管理
IT-NET2.ルー
ティングとス
イッチング
CE-NWK0.歴史と CE-NWK1. 通信
概要
ネットワークの
アーキテクチャ
CE-NWK テレコ
ミュニケーショ
CE-NWK13.クラス CE-NWK14.イン
ン
タシステム
ターネットアプ
リケーション
IT-SIA5.テスト IT-SIA6.組織の IT-SIA7.アーキ
と品質保証
特性
テクチャ
IT-NET3.物理層 IT-NET4.セキュ IT-NET5.アプリ IT-NET6.ネット
リティ
ケーション分野 ワーク管理
CE-NWK2.通信
CE-NWK3.LANと
ネットワークの WAN
プロトコル
CE-NWK4.クライ CE-NWK5.データ CE-NWK6.ワイヤ CE-NWK7.データ CE-NWK8.組込み CE-NWK9.通信技 CE-NWK10.性能評 CE-NWK11.ネット CE-NWK12.圧縮と
アントサーバコ のセキュリティ レスコンピュー 通信
機器向けネット 術とネットワー 価
ワーク管理
伸張
ンピューティン と整合性
ティングとモバ
ワーク
ク概要
グ
イルコンピュー
ティング
CE-NWK15.次世代 CE-NWK16.放送
インターネット
IT-PT1.オペレー IT-PT2.アーキテ IT-PT3.コン
IT-PT4.デプロイ IT-PT5.ファーム IT-PT6.ハード
ピュータインフ メントソフト
ウェア
ウェア
IT-PT プラット ティングシステ クチャと機構
ム
ラストラクチャ ウェア
フォーム技術
CE-OPS0.歴史と CE-OPS1.並行性 CE-OPS2.スケ
CE-OPS3.メモリ CE-OPS4.セキュ CE-OPS5.ファイ CE-OPS6.リアル CE-OPS7.OSの概 CE-OPS8.設計の CE-OPS9.デバイ CE-OPS10.システ
CE-OPS オペレー
概要
ジューリングと 管理
リティと保護
ル管理
タイムOS
要
原則
ス管理
ム性能評価
ティングシステ
ディスパッチ
ム
13
CE-CAO0.歴史と CE-CAO1.コン
CE-CAO コン
概要
ピュータアーキ
ピュータのアー
テクチャの基礎
キテクチャと構
成
14
IT-ITF IT基礎
15
CE-ESY5.ライフ CE-ESY6.要件分 CE-ESY7.仕様定 CE-ESY8.構造設 CE-ESY9.テスト CE-ESY10.プロ CE-ESY11.並行設 CE-ESY12.実装
サイクル
析
義
計
ジェクト管理
計(ハードウェ
ア、ソフトウェ
ア
CE-ESY 組込みシ
CE-ESY13.リアル
CE-ESY14.組込み
CE-ESY15.組込み
CE-ESY16.設計手
CE-ESY17.ツール
CE-ESY18.ネット CE-ESY19.インタ CE-ESY20.センサ CE-ESY21.デバイ CE-ESY22.メンテ CE-ESY23.専門シ CE-ESY24.信頼性
ステム
タイムシステム マイクロコント プログラム
法
によるサポート ワーク型組込み フェースシステ 技術
スドライバ
ナンス
ステム
とフォールトト
設計
ローラ
システム
ムと混合信号シ
レランス
ステム
ェ
ー
12
ア
ュー
ー
ャ
複
数
領
域
に
ま
た
が
る
も
の
13
IT-IM1.情報管理 IT-IM2.データ IT-IM3.データ IT-IM4.データモ IT-IM5.データと IT-IM6.データ
の概念と基礎
ベース問合わせ アーキテクチャ デリングとデー 情報の管理
ベースの応用分
言語
タベース設計
野
CE-SWE ソフト
ウェア工学
11
12
IT-SP5.知的財産 IT-SP6.コン
IT-SP7.組織の中 IT-SP8.プロ
IT-SP9.プライバ
権
ピュータの法的 のIT
フェッショナル シーと個人の自
問題
としての倫理的 由
な問題と責任
7
10
コ
ウタ
ン
ハ
キ
ピ
ア
テ
とド
ク
6
7
8
9
10
11
IT-IAS6.情報セ IT-IAS7.フォレ IT-IAS8.情報の IT-IAS9.情報セ IT-IAS10.脅威分 IT-IAS11.脆弱性
キュリティ分野 ンジック(情報証 状態
キュリティサー 析モデル
拠)
ビス
IT-IPT1.システ IT-IPT2.データ IT-IPT3.統合的 IT-IPT4.スクリ IT-IPT5.ソフト IT-IPT6.種々の IT-IPT7.プログ
IT-IPT 技術を統 ム間通信
割り当てと交換 コーディング
プティング手法 ウェアセキュリ 問題
ラミング言語の
合するためのプ
ティの実現
概要
ログラミング
9
チ
IT-SP1.プロ
IT-SP2.コン
IT-SP3.コン
IT-SP4.チーム
フェッショナル ピュータの歴史 ピュータを取り ワーク
としてのコミュ
巻く社会環境
ニケーション
5
IT-IAS5.攻撃
6
8
シ
ス
テ
ム
基
盤
科目名
1
2
3
4
IT-IAS1.基礎的 IT-IAS2.情報セ IT-IAS3.運用上 IT-IAS4.ポリ
IT-IAS 情報保証
な問題
キュリティの仕 の問題
シー
と情報セキュリ
組み(対策)
ティ
CE-CAO2.メモリ CE-CAO3.インタ CE-CAO4.デバイ CE-CAO5.CPUアー CE-CAO6.性能・ CE-CAO7.分散・ CE-CAO8.コン
CE-CAO9.性能向
システムの構成 フェースと通信 スサブシステム キテクチャ
コスト評価
並列処理
ピュータによる 上
とアーキテク
計算
チャ
IT-ITF1.ITの一 IT-ITF2.組織の IT-ITF3.ITの歴 IT-ITF4.IT分野 IT-ITF5.応用領
般的なテーマ
問題
史
(学科)とそれに 域
関連のある分野
(学科)
CE-ESY0.歴史と CE-ESY1.低電力 CE-ESY2.高信頼 CE-ESY3.組込み CE-ESY4.開発環
概要
コンピューティ 性システムの設 用アーキテク
境
ング
計
チャ
IT-ITF6.IT分野
における数学と
統計学の活用
独立行政法人
情報処理推進機構
OSS モデルカリキュラムの学習ガイダンス
4. OSS モデルカリキュラム固有の知識
OSS モデルカリキュラム固有の知識として、Linux カーネルの機能の具体的な実装とコ
マンドとが挙げられる。他の多くの項目は、一般的なオペレーティングシステムの機能に
ついて Linux を通して習得する。
科目名
第1回
第2回
第3回
(1)OS の歴史 (1)マルチタス (1)割り込み
とLinux
キング
第4回
(1)システム
コール
(2)OS の概念 (2)プロセス
(2)同期と排
他
(3)Linux OS
の基本構造
(3)コンテキス
トスイッチング
(プロセスディ
2-2-応 Linux (4)カーネルの スパッチ)
(4)プロセスス
ケジューラ
カーネルに関 基本機能
する知識
(5)カーネルの (5)マルチプロ
起動プロセス セッサへの対
応
(6)参考
(6)スケジュー
リングのアル
ゴリズム
(7)基礎理論
(2)タイマー
第5回
第6回
第7回
第8回
(1)プロセス管 (1)プロセス空 (1)実メモリの (1)スワップ
理
間とカーネル 管理
空間
(2)シグナル (2)仮想アドレ (2)動的メモリ (2)デマンド
ス空間
割り当て
ページング
(3)プロセス間 (3)ページ変
通信
換テーブル
(4)TLB
(Translation
Lookaside
Buffer)
(5)メモリ
キャッシュ
(3)ページ
キャッシュ
第9回
(1)VFS
(Virtual File
System)
(2)inode、
super block、
directory
(3)ファイル操
作
第10回
第11回
(1)ファイルの (1)特殊ファイ
操作
ル
(2)ファイルの (2)擬似ファイ
リード/ライト ルシステム
(3)そのほか
のファイル操
作
(3)ローカル
ファイルシステ
ム
(4)ページフォ (4)マウント
ルト
(5)ガーベジコ (5)アンマウン
レクション
ト
(網掛け部分は IT 知識体系で学習できる知識を示し、それ以外は OSS モデルカリキュラム固有の知識を示している)
独立行政法人
情報処理推進機構
スキル区分
OSS モデルカリキュラムの科目
システム分野
2-2
習得ポイント
2-2-応-1. OS の基本構造とカーネルの役割
対応する
レベル
Linux カーネルに関する知識
応用
第1回 Linux カーネル概論
コースウェア
2-2-応-1. OS の基本構造とカーネルの役割
Linux OS の基本的な構造を説明する。また中心的な役割を担うカーネルの基本的な機能として、
プロセス管理、メモリ管理、ファイル管理、ネットワーク、I/O などの概要を紹介する。
【学習の要点】
* LinuxOS の基本的な構造としては、中心にカーネルと呼ばれるプログラムが存在し、そのカーネ
ルを取り囲むようにしてシェル・カーネルモジュール・アプリケーションプログラムが存在する。
* カーネルは、LinuxOS の中核となるプログラムで、プログラムをメモリに読み込んだり、プログラム
実行に必要な領域を確保したりする。その他にも、ファイルや周辺機器の管理や、ネットワーク
と I/O の管理などを行う。
* シェルとは、ユーザから与えられた指示をカーネルが解釈できる形式に変換するプログラムであ
る。
* カーネルモジュールとは、動的に追加されるプログラム部品である。
シェル
・ユーザの指示を
カーネルに伝える
アプリケーションプログラム
・定められた目的を
果たすためのプログラム
アプリケーション
プログラム
カーネル
モジュール
カーネルの機能
・プロセス管理
プログラムの実行とインタフェースの
提供
・メモリ管理
安全なメモリアクセスの提供
・ファイル管理
データの管理
・デバイス管理
デバイスとドライバの検出
カーネル
モジュール
カーネル
モジュール
図 2-2-応-1.
OS の基本構造
2-2-応-1
カーネルモジュール
・動的に追加される
プログラム部品
【解説】
1) Linux オペレーティングシステムの基本的な構造
LinuxOS には、その中心にカーネルと呼ばれる核となるプログラムが存在している。そのカーネル
を中心に考え、カーネルを取り囲むようにシェルやカーネルモジュール、アプリケーションプログラ
ムなどによって構成されている。
* シェルとは
ユーザの操作を受け付けて、与えられた指示をカーネルが解釈できる形式に変換して伝えるソ
フトウェアのことである。
* カーネルモジュールとは
カーネルモジュールとは、Linux カーネルに対して動的に追加されるプログラム部品のことを示
す。デバイスドライバなどが、これに該当する。
* アプリケーションプログラムとは
コンピュータの OS の上で実行され、定められた目的を果たすための機能を提供するプログラム
のことを示す。ただし、ミドルウェアなどは含まれない。
2) カーネルの基本的な機能
カーネルとは、OS の中核となるプログラムである。基本的な機能は、以下の通りである。
* プロセス管理
プロセス管理とは、アプリケーションプログラムの実行を許可し、ハードウェアへのアクセスのた
めのインタフェースをプログラムに提供することである。プログラムを実行するため、カーネルは
プログラムのコードを含むファイルをメモリに読みこみ、プログラム実行に必要な専用領域(スタ
ックと呼ぶ)を準備し、そのプログラムの所定の位置へ制御を渡すことで実行を開始する。
* メモリ管理
カーネルはアプリケーションプログラムの要求に応じて、安全なメモリアクセスを提供している。こ
れは仮想アドレッシングと呼ばれる方式であり、この方式ではカーネルは物理アドレスを別のア
ドレス(仮想アドレス)に変換する。アプリケーションプログラムは仮想アドレスから始まるメモリ空
間を自分のための空間と捕らえ、個々のプログラムが互いに他のプログラムのメモリ空間を破壊
することを防止している。
* ファイル管理
ファイル管理(ファイルシステム)は、コンピュータの資源を管理するための、OS が持つ機能の1
つである。ファイルとは、ハードディスクなどの補助記憶装置に格納されたデータを示している。
* デバイス管理
コンピュータに接続された周辺機器にアクセスするためには、カーネルを介してデバイスドライ
バを使用し、アクセスを行う。起動時、カーネルは最初に様々なバス(PCI や USB)上をチェック
して実装された周辺機器(デバイス)を検出し、対応するドライバを探す。カーネルの設計によっ
てドライバの扱い方は異なるが、一般にカーネルはドライバが物理的にデバイスにアクセスする
ための入出力ポートやメモリ空間を用意する。
* I/O 管理
外部からのコンピュータへのデータ入力、コンピュータから外部へのデータ出力の管理も行って
いる。
2-2-応-2
スキル区分
OSS モデルカリキュラムの科目
システム分野
2-2
習得ポイント
2-2-応-2. マルチタスク OS におけるプロセスの概念
対応する
レベル
Linux カーネルに関する知識
応用
第5回 プロセス管理
コースウェア
2-2-応-2. マルチタスク OS におけるプロセスの概念
「プロセス」の概念と、プロセスを切り替えて時分割でタスクを遂行するマルチタスクの概念について
解説する。また OS が各プロセスを管理する手法についても言及する。
【学習の要点】
* プロセスとは、オペレーティングシステム上における処理の単位の1つであり、実行命令コード
やプロセス固有データ・リソース記述子などで構成されている。
* オペレーティングシステムが、複数のプロセスを切り替えながら実行することをマルチタスクとい
う。この場合、ユーザ側から見ると複数のプログラムが同時に実行されているように見える。
* プロセス管理は、カーネルの重要な機能の1つである。
プロセス
プロセス
|
>
|
マルチタスク
|
>
|
|
>
|
|
>
|
|
>
|
|
>
|
|
>
|
実行中
|
>
|
プロセス
実行中
実行中
|
>
|
|
>
|
|
>
|
|
>
|
実行中
時間軸
複数のプロセスを
切り替えながら
実行させている
プロセス
生成
|
>
|
走行可能
|
>
|
走行中
|
>
|
ブロック状態
図 2-2-応-2. マルチタスクの概念
2-2-応-3
|
>
|
終了
【解説】
1) プロセスとは
プロセスとは、オペレーティングシステム上における処理の単位の1つである。マルチタスク・オペレ
ーティングシステムでは、多くのプロセスを並列的に実行させることが可能である。また、「ジョブ」と
表現されることもあるが、「ジョブ」がユーザ側から見た処理の単位であり、「プロセス」はコンピュー
タ側から見た処理の単位を表している。プロセスは以下に示す資源で構成されている。
* 実行命令コード
* プロセス固有データ
* リソースの記述子
* セキュリティ属性
* プロセッサ状態
2) マルチタスクの概念
オペレーティングシステムが、複数のプロセスを切り替えながら実行することをマルチタスクという。
プロセスが切り替わりながら順次実行されるので、ユーザ側から見ると複数のプログラムが同時に
実行されているように見える。また、プロセスが入出力待ち状態となっても他のプロセスが実行され
るため、全体として処理速度が向上する。
* プリエンプティブ・マルチタスク
プリエンプティブ・マルチタスクとは、プロセスの切り替えにハードウェアタイマ割り込みを用いる
方法である。この場合、この割り込みによって一定時間内(タイムスライス)に OS に制御が戻る。
これは強制的に行われる。
* ノンプリエンプティブ・マルチタスク
各プロセス自身が、短い時間の間隔で OS に制御を戻すことによりマルチタスクが実現されてい
る方法である。
3) プロセスの管理方法
プロセス管理とは、主にカーネルの重要な機能の1つである。カーネルはプロセスの生成・実行・消
滅などに関して、以下に示す状態への遷移を持って管理を行っている。
* 生成
最初に作成されるとこの状態となり、実行可能状態となるのを待つ。状態遷移を行うのはスケジ
ューラである。
* 実行可能
メインメモリにロードされ CPU による実行を待っている状態。
* 実行中
これは現に CPU 上で実行されている状態。タイムスライスを使い切ると実行可能状態に戻り、プ
ログラムが終了すれば終了状態となり、資源が不足した場合はブロック状態となる。
* ブロック状態
資源不足が発生し、かつ新しい資源の確保ができない状態。
* 終了状態
プロセスの実行終了によって、終了状態となる。
2-2-応-4
スキル区分
OSS モデルカリキュラムの科目
システム分野
2-2
習得ポイント
2-2-応-3. プロセスの切り替えとスケジューリングアルゴリズム
対応する
コースウェア
Linux カーネルに関する知識
レベル
応用
第2回 スケジューリング
第5回 プロセス管理
2-2-応-3. プロセスの切り替えとスケジューリングアルゴリズム
コンテキストスイッチの概念に触れ、プロセスが切り替わるメカニズムの概要を説明する。スケジュー
リングアルゴリズムの実際を紹介し、さらにその基礎となる理論でもある待ち行列議論とマルコス連
鎖について解説する。
【学習の要点】
* マルチタスク・オペレーティングシステムにおいて、プロセスの切り替えを行う際には、コンテキス
トスイッチが発生する。これは、CPU の状態を保存したり復元したりする過程のことである。
* スケジューラは、プロセスの切り替え先を決定するプログラムで、各プロセスはタイムスライスと呼
ばれる短い時間ずつ実行されたあと、切り替えられる。
* スケジューラは、CPU の負荷を公平かつ平等に分散させるために、スケジューリングアルゴリズ
ムに基づいて、プロセスの制御を行う。
タイムスライス
切り替れという指示
マルチタスク
プロセスの
実行
スケジューラ
次に実行すべき
プロセスを決定する
次に実行すべきプロセス
2番目に実行すべきプロセス
3番目に実行すべきプロセス
図 2-2-応-3. プロセスの切り替え
2-2-応-5
【解説】
1) プロセスが切り替わるメカニズム
マルチタスク・オペレーティングシステムにおいては、実行中のプロセスであっても途中で CPU の
使用を止め、他のプロセスに切り替えてそのプロセスに CPU の使用が可能となるようにしている。こ
のプロセスの切り替えの際にコンテキストスイッチが発生する。
* コンテキストスイッチとは
複数のプロセスで CPU の共有が可能となるように、CPU の状態(コンテキスト)を保存したり、もし
くは復元したりする過程のことである。
* タイムスライスとは
プリエンプティブなマルチタスク OS では、スケジューラが各プロセスをある短い時間ずつ実行さ
せる。この時間のことをタイムスライスと呼ぶ。
* スケジューラ
実行プロセスの切り替え先を決定するプログラムがスケジューラである。スケジューラは、優先度
つきキューで優先度を割り当てられたプロセスの制御を行う。
* 割り込み
プロセスがタイムスライスの時間内に CPU の使用を止めなかった場合にはタイマ割り込みが発
生し、他のプロセスが実行される。
2) スケジューリングアルゴリズムとは
スケジューラの目標は、CPU の負荷を公平かつ平等に分散させることである。スケジューラは、スケ
ジューリングアルゴリズムに基づいてプロセスの制御を行う。一般的に知られているスケジューリン
グアルゴリズムには、以下のようなものがある。
* FIFO (First In, First Out)
最も単純なスケジューリング方式のこと。言葉の通り、最初に発生したリクエストから待ち行列に
並べ、順次処理を行う。
* LIFO (Last In, First Out)
公平性に問題があり、使われていない。
* ラウンドロビンスケジューリング
待ち行列に並んでいる処理待ち状態のプロセスに対して、優先度などは設定せず順番に同じ
タイムスライスを割り当てて、プロセススケジューリングを行う。
* 多段フィードバックキュー
短いプロセスや対話型のプロセスを優先し、プロセスの性質を迅速に把握しスケジューリングを
行う。UNIX の基本的なアルゴリズムである。
3) スケジューリングアルゴリズムの基礎となる理論
スケジューリングを行う際、各プロセスはキューと呼ばれる、コンピュータの基本的なデータ構造の
中に並べられる。キューは待ち行列とも呼ばれる。
2-2-応-6
スキル区分
OSS モデルカリキュラムの科目
システム分野
2-2
習得ポイント
2-2-応-4. 割り込みと時分割処理
対応する
Linux カーネルに関する知識
レベル
応用
第3回 割り込みと遅延
コースウェア
2-2-応-4. 割り込みと時分割処理
CPU とその他デバイスの関係について整理し、「割り込み」の概念を説明する。割り込みの種類や
割り込みの管理など割り込みに関連するいくつかの話題について触れ、さらに、カーネルにおける
割り込み処理の概要を解説する。また時分割処理に関わる基本的な事項を説明する。
【学習の要点】
* 割り込みが発生すると、CPU は現在実行中の処理を中断して、割り込みに対応する処理を実施
する。これは例えば、処理速度の遅い周辺機器が、処理の終了を割り込みによって通知するこ
とで、この割り込みの発生まで CPU に他の処理を実行させることを可能とする。
* 周辺機器に障害が発生した場合なども、割り込みを用いることで、その旨を速やかに伝えること
が可能となる。
* タイムシェアリングシステムにおいては、タイムスライスの時間内に CPU の使用が止まらなかった
場合に、タイマ割り込みが発生する。
通常処理
割り込み処理
割り込みの目的
・処理の終了
処理速度の遅い周辺機器
から、処理の終了を伝える
割り込み発生
・応答性の向上
キーボードやマウスからの
入力を伝える
・例外処理
障害発生を伝える
・正確なタイミングの取得
図 2-2-応-4. 割り込みの目的
2-2-応-7
【解説】
1) CPU が周辺機器からの要求を受け取る方法
コンピュータがその周辺機器などから受け取る要求のことを割り込みと呼ぶ。コンピュータは割り込
みが発生すると現在の実行中の処理を中断して、割り込みに対応するための処理を行う。割り込
みの目的を以下に記す。
* CPU 資源の有効利用
処理速度の遅い周辺機器から、処理の終了を割り込みによって通知させることで、周辺機器が
処理を行っている間でも、CPU が他の処理を効率よく行える。
* 応答性の向上
キーボード、マウスなどのユーザインターフェースは、割り込みを使ってユーザの入力を確実に
処理することで、入力の遅延や入力漏れがなどの問題を回避することが可能となる。
* 例外処理の効率化
例えば周辺機器に何らかの障害が発生した場合であっても、割り込みを用いていることでプロ
グラム側にその旨を速やかに伝えることが可能となる。
* 正確なタイミングの取得
正確なタイミングで処理を行う必要のある機器を制御する場合、その機器が持っている正確な
タイマによりタイマ割り込みを行い、CPU 側に処理のタイミングを指示することが可能となる。
2) 割り込みの種類
CPU の割り込みは、大きくわけて「ハードウェア割り込み」と「ソフトウェア割り込み」に分類できる。
* ハードウェア割り込み
CPU の外部から要求され、CPU の割り込み要求端子に対して電気的な信号に変化を与えるこ
とで発生する。
* ソフトウェア割り込み
ソフトウェア割り込みは、割り込みを発生させるための命令により発生する。例外としてゼロ除
算・オーバーフロー・ページフォルトなどによってもソフトウェア割り込みは発生する。
3) 割り込みの管理
ハードウェア割り込みにせよソフトウェア割り込みにせよ、CPU に割り込みが生じると、現在実行し
ているプロセスを中断させ割り込みハンドラもしくは割り込みサービスルーチンと呼ばれる処理が実
行される。また、これら割込処理の終了後には、元のプロセスが中断した箇所から再開されるように、
元のプロセスに関する情報(アドレスや作業状態)を、保存しておく。この過程をコンテキストスイッ
チという。
* タイマ割り込み
タイムシェアリングシステムにおいては、プロセスがタイムスライスの時間内に CPU の使用を止
めなかった場合には、タイマ割り込みが発生し他のプロセスの実行が開始される。この場合にも、
同様の割り込み管理が行われている。
2-2-応-8
スキル区分
OSS モデルカリキュラムの科目
システム分野
2-2
習得ポイント
2-2-応-5. システムコール
レベル
Linux カーネルに関する知識
対応する
第3回 割り込みと遅延
コースウェア
第4回 システムコール
応用
2-2-応-5. システムコール
一般のアプリケーションから OS の機能を利用する際に使用するシステムコールを紹介する。システ
ムコールの位置づけを説明し、システムコールが呼ばれたときの OS 内部での振る舞いについて概
説する。
【学習の要点】
* システムコールとは、アクセスできない保護領域にアクセスすることや、保護されたレジスタを操
作するなど、カーネルの持つ特殊な機能を利用する場合に使用する仕組みのことである。
* Linux では約300種類のシステムコールが用意されており、CPU の動作モードなどを変更するこ
とも可能である。
* システムコールは、そのほとんどがソフトウェア割り込みによって実行されているため、その処理
方法は一般の割り込み処理と同様である。
カーネル
システムコール
・カーネルの持つ特殊な機能を利用する
(特殊な
機能)
*アクセスできない保護領域へのアクセス
*保護されたレジスタの操作
*CPUの動作モードの変更
図 2-2-応-5.
システムコール
2-2-応-9
アプリケーション
【解説】
1) システムコールとは
システムコールとは、一般のアプリケーションがカーネルの持つ特殊な機能を利用する場合に使用
する仕組みのことである。
* システムコールにより、何が可能となるのか
一般のアプリケーションがシステムコールを利用することで何が可能となるのかを、以下に示
す。
-
通常のアプリケーションプログラムからはアクセスできない保護されたメモリ領域にアクセス
することが可能となる。
-
保護されたレジスタを操作することが可能となる。
-
自ら CPU の動作モードを変更することが可能となる。
* システムコールは、何種類程度用意されているのか。
Linux では、約 300 種類用意されている。FreeBSD も同様に約 330 種類のシステムコールが用
意されている。
* システムコールの例
異なる UNIX OS の実装のために共通の API を定め、移植性の高いアプリケーションプログラム
の開発を容易にするため、IEEE が策定した API 規格のことを POSIX という。この POSIX での主
要なシステムコールには、open,read,write,close,wait,fork,execve,kill 等が用意されてい
る。
2) システムコールの処理方法
システムコールは、ほとんどの場合において、ソフトウェア割り込みによって実行されている。そのた
め、ソフトウェア割り込みを処理することと同じ処理が、システムコールの実行においても実行され
ている。
* システムコールが呼び出されたとき
-
システムコールを呼び出したプロセスはそのタイミングで中断される。
-
システムコール終了後にプロセスの再開を可能とするためにコンテキストが保存される。
-
CPU の動作モードを高い動作モードに遷移させる。
-
システムコールの番号や引数を調べ、必要な処理が実行される。
-
ただし、呼び出したプロセスのアクセス権を考慮して、指定されたシステムコールを実行す
る権利があるかチェックを行う。
-
システムコールが実際に処理される。
-
呼び出したプロセスを再開させるため、保存したコンテキストを取り出す。
* ただし、呼び出したプロセスが即座に再開されない可能性がある。
システムコールでは時間を要する処理を実行することがある。システムコールを呼び出したこと
により、呼び出し元のプロセスは中断されるが、システムコールが完了するまでは「実行可能」キ
ューに並べられている。システムコールが完了すると、OS はそのプロセスを実行が可能なプロ
セスの候補の1つとして扱うためである。
2-2-応-10
スキル区分
OSS モデルカリキュラムの科目
システム分野
2-2
習得ポイント
2-2-応-6. プログラムと OS の動作モード
対応する
コースウェア
レベル
Linux カーネルに関する知識
応用
第4回 システムコール
第5回 プロセス管理
2-2-応-6. プログラムと OS の動作モード
プログラムが動作するプロセス空間という概念を説明し、その目的や特徴、それぞれの空間ででき
ることとできないことを示す。さらにシステムコールによる動作モードの遷移について解説する。
【学習の要点】
* マルチタスク機能であれば、複数のプロセスがタイムスライスとして定められた時間で切り替わり
ながら、処理を行っている。そのため、処理が完全に終了していないプロセスに関しては、何度
も再開されることになる。
* プロセス毎に割り当てられたアドレス空間のことを、プロセス空間とよぶ。他のプロセスからは一
切参照されることがないため、データの破壊などは発生しない。
* Linux カーネルはスーパーバイザモードで動作し、一般のアプリケーションはユーザモードで動
作している。アプリケーションプログラムによりシステムコールが呼び出された場合、CPU の動作
モードはスーパーバイザモードへ遷移する。
ユーザモード
アプリケーション
プログラム
システムコール
スーパバイザモード
CPUの動作に
制限が加えら
れている
全ての操作が
可能である
アプリケーションプログ
ラムが呼び出すシステ
ムコールにより、ソフト
ウェア割り込みが発生
し、CPUのモードがス
ーパバイザモードに
遷移する。
図 2-2-応-6.
OS の動作モードとシステムコールによる遷移
2-2-応-11
【解説】
1) プログラムの動作
Linux カーネルはマルチタスク機能を提供している。そのため、同時に複数のプロセスを実行する
ことが可能である。
* プログラムとプロセスの関係
プログラムが実行されている状態とは、プロセスが実行されている状態である。ただし、1プログ
ラムにつきプロセスは1つだけとは限らない。1つのプログラムを起動させることで、複数のプロ
セスが起動するものもある。
* 複数のプロセスを同時に起動させるということ
マルチタスク機能が提供されているため、同時に複数のプロセスの実行が可能ではあるが、実
際にある一時点で動作しているプロセスの数は、当該システムに搭載されている CPU 数以上に
は決してならない。実際はマルチタスク機能が、複数のプロセスを細かく切り替えながら動作さ
せ、いかにも同時動作しているような環境を作り出しているだけである。
* 複数のプロセスを切り替えながら動作させるということ
プリエンプティブ・マルチタスクであれば、タイムスライスとして定められた短い時間でプロセスの
切り替えが行われる。ほかにも割り込みの発生などでもプロセスの切り替えが発生する。
* 切り替えられたプロセスを再開するには
処理が完全に終了していないプロセスは、マルチタスクの機能により何度でも再開されることに
なる。このため、正常にプロセスを再開させるために個々のプロセスは固有のコンテキストを保
存している。コンテキストとは、そのプロセスが動作するためのプロセス空間、そのプロセスが動
作するときのレジスタ値などである。
* プロセス空間とは
プロセス毎に割り当てられる独立した論理アドレス空間のことをプロセス空間と呼ぶ。個々のプ
ロセスからアクセス可能なメモリ空間とは、このプロセス空間のことであり、他のプロセスからは一
切参照することはできない。プロセス間ではデータの授受は行えないが、他のプロセスからデー
タを破壊されることもない。
2) 動作モードの遷移
現代の CPU は一般的にいくつかの特権モードで命令を実行している。例えば2つのモードを持つ
CPU では、それぞれをスーパーバイザモードとユーザモードと呼んでいる。このようなモードは、セ
キュリティと安定性を維持するために必要とされている。Linux カーネルはスーパーバイザモードで
動作し、一般のアプリケーションプログラムはユーザモードで動作する。一般のアプリケーションプ
ログラムにより呼び出されるシステムコールは、ソフトウェア割り込みを用いて CPU の動作モードを
スーパーバイザモードへ遷移させる。
* スーパーバイザモード
CPU はその全ての操作が可能である(ハードウェア構成によっては不可能な操作もある)。任意
の命令を実行でき、入出力操作を開始でき、全メモリ空間にアクセスを行うことが可能である。
* ユーザモード
ハードウェアによって CPU の動作に制限が加えられる。例えば、一部の命令が実行できなかっ
たり、入出力操作ができなかったり、メモリ空間の一部にアクセスできなかったりなどである。
2-2-応-12
スキル区分
OSS モデルカリキュラムの科目
システム分野
2-2
習得ポイント
2-2-応-7. 同期と排他制御
対応する
コースウェア
レベル
Linux カーネルに関する知識
応用
第4回 システムコール
第5回 プロセス管理
2-2-応-7. 同期と排他制御
プロセスの同期や排他が必要になる状況(デッドロック等)やカーネルによる管理について述べ、排
他制御を実現するための実装技術やその背景となる基礎論理について触れる。またカーネルの内
部で排他制御が実装されている具体的な例を示して説明する。
【学習の要点】
* マルチタスクは、排他制御機能を利用して資源の保護を行っているが、排他制御には欠陥があ
り、デッドロックなどが発生してしまう可能性がある。
* システム構築の際には、オブジェクト指向プログラミングなどを利用して、デッドロックが発生しな
いように注意すべきである。
* 排他制御を実現するための実装技術には、様々なものがある。また、カーネル内部でも排他制
御は様々な箇所で使用されている。
カーネル
1つのプロセスにのみ資源を
独占的に使用させて、他の
プロセスには使用させない
プロセス
排他制御
機能
プロセス
プロセス
プロセス
図 2-2-応-7. 排他制御
2-2-応-13
資源
【解説】
1) デッドロックとは
デッドロックとは、2つ以上のプロセスなどがお互いに相手の処理終了を待ち、結果的にプロセスが
停止してしまうことを言う。
* デッドロックは、排他制御の欠陥である。
マルチタスク機能においては計算機上の同一の資源に対して、複数の処理が同時期に実行さ
れても資源が破壊されることのないように、複数のプロセスに対して排他制御を要求するため、
結果として該当する全てのプロセスが他のプロセスの処理終了を待ってしまうことがある。そして
デッドロックが発生する。
* プロセス間の同期。
マルチタスク機能は、特定のプロセスが何らかのイベントを起こすまで、その他のプロセスに処
理の続行を待たせることで、プロセス間の同期をとる場合がある。
* 排他制御とは。
複数のプロセスからの同時アクセスにより競合が発生する場合は、1つのプロセスにのみ資源を
独占的に利用させて、他のプロセスが利用できないようにする事で整合性を保つ必要がある。
この処理を排他制御と呼ぶ。
* デッドロックを回避するために。
これを回避するためには、以下に示すような方法が存在する。
-
オブジェクト指向プログラミングを用いてシステムを構築する。
-
Lock-free と Wait-free アルゴリズムを用いる。
2) 排他制御を実現するための実装技術
プロセスが特定の資源を占有しようとする場合は、以下に示す操作を実施する必要があるが、この
操作の途中で他のプロセスに制御が渡ってしまうと資源は書き換えられてしまう。
* 資源が他のプロセスによって占有されていないことを確認する。
* 資源を占有する。
排他制御を実現するための実装技術としては、以下に示すようなものがある。
* ミューテックス - 単純な相互排除
* セマフォ - k-相互排除
* 同期
* ロック
* スピンロック
* タスク切り替え禁止
* 割り込み禁止
3) カーネル内部での排他制御
カーネル内部でも排他制御は様々な箇所で使用されている。メモリ管理、デバイス管理、およびマ
ルチプロセッサ管理機構などである。
2-2-応-14
スキル区分
OSS モデルカリキュラムの科目
システム分野
2-2
習得ポイント
2-2-応-8. メモリ管理
対応する
第6回 メモリ管理(1)
レベル
Linux カーネルに関する知識
応用
コースウェア
2-2-応-8. メモリ管理
Linux カーネルが取り扱うアドレス空間として、物理的なメモリ領域に対するアドレス空間と仮想的な
アドレス空間が存在し、それらは適宜マッピングされて管理されること、「ページ」の概念等、基本的
な原理を解説する。そしてページングやページテーブルといった、ページ管理に用いられる基本的
な技術を紹介し、ページ管理の効果を説明する。
【学習の要点】
* Linux には仮想アドレス空間の概念があり、プロセス毎に独立して管理されている。プロセスは
仮想アドレスを用いて仮想アドレス空間にアクセスするが、この際仮想アドレスから物理アドレス
へのアドレス変換が行われている。
* アドレス空間は、ページと呼ばれる決まった単位に分割されて管理される。
* 仮想記憶の仕組みにより、プロセスは二次記憶などの主記憶以外のメモリシステムに存在する
ことができ、物理アドレス空間よりも広い空間を使用することができる。
* ページングの仕組みにより、主記憶と二次記憶の内容の交換が自動的に行われる。
* 仮想アドレス空間は、カーネル用に予約されたカーネル空間と、ユーザプロセスが利用可能な
ユーザ空間とに分けられる。
物理アドレス空間
物理ページ
仮想アドレス空間
プロセス構造体
物理ページ
を参照
仮想ページ
仮想ページ
を参照
二次記憶
を参照
二次記憶
図 2-2-応-8.
アドレス空間
2-2-応-15
【解説】
1) 物理アドレス空間と仮想アドレス空間
* 物理アドレス空間
-
CPU が直接アクセスすることのできる、「主記憶(メインメモリ)」のもつアドレス空間。
* 仮想アドレス空間
-
物理アドレス空間とは独立して仮想的に管理されるアドレス空間。その領域すべてが主記
憶上に存在している必要がなく、一部の領域が二次記憶上に存在することが可能。
* アドレス空間は、一定の大きさを持った「ページ」と呼ばれる単位で分割される。全てのページ
は「ページ番号」が付与され、「ページテーブル」という構造体で管理される。ページの大きさ
(「ページサイズ」)はアーキテクチャによって異なるが、必ず 2^n バイトである。
* プロセスの観点から見ると、システムに搭載されている主記憶のアドレス空間よりも広いアドレス
空間を扱うことができる。仮想アドレス空間はプロセスに対して透過的であり、プロセスから見る
と連続したメモリ領域である。
* システムの観点から見ると、変換先の物理アドレス空間は必ずしも連続である必要はなく、効率
的にメモリを利用することができる。また、利用頻度の低いページを二次記憶に退避させておく
ことで、より効率的にメモリを利用することができる。
* 仮想アドレス空間のメモリ領域を予め物理メモリに展開せず、アクセスされたときに物理メモリを
確保して割り当てる方式を「デマンドページング」という。
2) ページイン/ページアウト
仮想アドレス空間上のページ番号から、物理アドレス空間上のページ番号への対応付け(「アドレ
ス変換」)は、カーネルとメモリ管理ユニット(MMU)が連携して行う。
* TLB (Translation Lookaside Buffer)
MMU の中には、アドレス変換をより高速に行うために「TLB (Translation Lookaside Buffer)」を
持つものがある。TLB は、直近のアドレス変換を保持するキャッシュとして働く。
* ページ置換
主記憶に空きがない場合、システムは利用頻度の低いページを二次記憶に移動させ、主記憶
の空き容量を確保する。これを「ページアウト」という。どのページを退避させるかは、OS の「ペ
ージ置換アルゴリズム」により異なる。
* アドレス変換とページング
CPU が仮想アドレスを元に物理アドレスにアクセスする際には、TLB→ページテーブルという順
序で、ページの対応付けを参照する。対応する物理ページが見つからない場合は、カーネル
に「ページフォルト」割り込みが送られ、二次記憶から物理メモリ上にページを読み込む。これを
「ページイン」という。
3) カーネル空間とユーザ空間
* 通常のプロセスが置かれる仮想アドレス空間を「ユーザ空間」といい、カーネルプログラムが置
かれる領域を「カーネル空間」という。
* カーネル空間とユーザ空間は厳密に分離され、通常のプロセスがカーネル空間に直接アクセ
スすることはできない。
2-2-応-16
スキル区分
OSS モデルカリキュラムの科目
システム分野
2-2
習得ポイント
2-2-応-9. プロセス空間
レベル
Linux カーネルに関する知識
対応する
第7回 メモリ管理(2)
コースウェア
第8回 メモリ管理(3)
応用
2-2-応-9. プロセス空間
プロセス空間を管理する方法の具体的な技術について説明する。デマンドページング、ページキャ
ッシュ、ページフォルト、スワップデーモンといった個々の概念を解説する。
カーネル空間特有のメモリ確保の方法と、そのインタフェースについて解説する。また、カーネル内
でのメモリ確保特有の制限や、システムとして提供するメモリ確保のアルゴリズムについても述べる。
【学習の要点】
* プロセス空間とカーネル空間とで、メモリ確保の方式に違いがあることを学習する。
* デマンドページングの概念について学習する。付帯概念として、ページキャッシュ・スワップデ
ーモン等について併せて学習し、デマンドページングの利点を確認する。
* カーネル空間は通常ページング不可能である。
* カーネルが使用できるメモリ領域には制限がある。このため現実的には、カーネルがメモリ領域
を必要とする際には動的に確保する必要がある。
* カーネルがメモリを動的に割り当てるために、必要とされるサイズや高速性要件に適したいくつ
かの異なるアルゴリズムとそれに対応するインタフェースが用意されている。
カーネルメモリ
アロケータ
ページング
システム
ページレベルアロケータ
アドレス変換レイヤ
メモリ管理ハードウェア
カーネルメモリアロケータは、カーネルと
カーネルモジュール用にメモリを確保し、
ページングシステムはユーザプロセス用に
メモリを確保する。
上位レイヤにページインタフェースを提供。
メモリ管理ハードウェアの抽象化し、
上位レイヤにハードウェアに依存しない
インタフェースを提供。
仮想アドレスを物理アドレスに変換、
ページフォルトをOSに報告。
Rohit Dube, 1998, A Comparison of the Memory Management sub -systems in FreeBSD and Linux
図 2-2-応-9. 階層化されたメモリ管理システム
2-2-応-17
【解説】
1) メモリ確保の構成要素
カーネルがメモリを確保する方式と、ユーザプロセスがメモリを確保する方式は別である。これはそ
れぞれにおいて、求められる特性が違うからである。
* ページングシステム
ページングシステムは「デマンドページング」や「スワッピング」ポリシーを実装するものである。
主にユーザプロセスに対してメモリ確保の仕組みを提供する。
* カーネルメモリアロケータ
カーネル内で必要なメモリを確保するための仕組みである。カーネル内で利用されるメモリは以
下の特徴を満たす必要があり、Linux では「バディシステム」や「スラブアロケータ」の仕組みによ
り実現している。
-
使用するメモリのほとんどはページング不可能である。
-
通常、アドレス固定の連続した物理メモリ領域を必要とする。
-
高速性が最も重要となる。多くの場合、カーネルは即座に(処理をブロックすることなしに)
メモリ領域を確保する必要がある。
2) メモリの効率的な利用
* デマンドページング
プロセスが実行するためには物理メモリ領域が必要であるが、起動時点でプロセス全体が物理
メモリ上に存在する必要はない。必要に応じて物理メモリに読み込む仕組みを、「デマンド(要
求時)ページング」と呼ぶ。メモリ領域を節約でき起動も速いが、初めてアクセスされるページは、
ページフォルト処理や読み込みのコストがかかるため遅延が発生する。
* ページキャッシュ
一旦、二次記憶から物理メモリに読み込まれたページのうち、読み込み専用で共有可能なもの
は、ページアウトせずに再利用することができる。この仕組みを「ページキャッシュ」という。
* スワップデーモン
ページキャッシュによりシステム全体の速度を向上させることができるが、キャッシュが溜まるに
つれて物理メモリ領域を圧迫することになる。空きページの不足の検知、適切なページキャッシ
ュの縮小・ページアウトを行う仕組みが必要である。Linux では「kswapd」がこれを担当する。
3) カーネル内での動的メモリ領域確保の仕組み
* 動的メモリ領域確保用インタフェース
カーネル内では、以下のインタフェースでメモリの確保/解放を行う。
-
kmalloc(), kfree()
カーネルが連続した物理メモリ領域を確保するために使用。物理メモリ上に連続した領域を
確保することで、空間的局所性が得られ、TLB を最大限活用できるため高速である。
-
vmalloc(), vfree()
仮想メモリ領域から仮想的に連続したメモリ領域を確保するために使用。kmalloc(), kfree()と
異なり、物理メモリ領域上では連続しているとは限らない。このため、速度は劣るものの大き
な領域を確保することができる。
2-2-応-18
スキル区分
OSS モデルカリキュラムの科目
システム分野
2-2
習得ポイント
2-2-応-10. ファイルシステム
対応する
コースウェア
Linux カーネルに関する知識
レベル
応用
第9回 ファイル管理(1)
第 10 回 ファイル管理(2)
第 11 回 ファイル管理(3)
2-2-応-10. ファイルシステム
ファイルシステムの違いを意識することなくあらゆるファイルシステムへ一元的にアクセスできるよう
にするための仮想ファイルシステムについて解説する。仮想ファイルシステムの概念と特徴を説明
し、実際に操作がどのように行われるかについて示す。またパイプや proc ファイルシステムのような
疑似ファイルシステムなどの特別なファイルを説明し、その意義とメリットについて触れる。
【学習の要点】
* 仮想ファイルシステムは、ファイルシステムの上位層に存在し、異なるファイルシステムに対して
透過的な操作を実現する共通インタフェースである。
* ext3、NFS、CIFS、proc 等のファイルシステムが Linux においてどのように実現されているかを学
習し、仮想ファイルシステムインタフェースを持つファイルシステムを新しく定義することができる
ことを確認する。
* スペシャルファイルと通常のファイルの違いを確認し、スペシャルファイルへの入出力はカーネ
ル内部でデバイスドライバに転送されることを学習する。
* デバイスドライバは、キャラクタデバイスとブロックデバイスの 2 つのインタフェースを提供する。
* スペシャルファイルは必ずしもデバイスと関連づいている必要はない。FIFO は名前付きパイプ
を実現するために使用されるスペシャルファイルである。
ユーザプロセス
open/close
read/write
システムコールインタフェース
仮想ファイルシステムインタフェース
ext3
NFS
デバイスドライバ
疑似ファイル メモリファイル
システム (proc) システム (tmp)
ハードウェア
図 2-2-応-10. 仮想ファイルシステムインタフェース
2-2-応-19
【解説】
1) 仮想ファイルシステムインタフェース
* Linux では、異なるファイルシステム実装に対して画一的なシステムコールでアクセスできるよう、
仮想ファイルシステム (VFS) 層が設けられており、ローカルファイルシステムやネットワークファ
イルシステム (NFS) といった違いを意識せずに、共通のインタフェースを使ってファイルの読
み書きを行うことができる。
* VFS を利用し、通常のファイルへのアクセスと同様の手段を用いてカーネル内部の情報をユー
ザに提供することができる。このような仕組みは疑似ファイルシステムと呼ばれ、Linux の procfs
や sysfs はこの例のひとつである。
* sys ファイルシステムは、Linux カーネル 2.6 から導入された。従来 proc ファイスシステムを通し
て得られた情報のうち、プロセスに関わらない部分はこちらに移された。
* tmpfs は、仮想記憶常駐型のファイルシステムである。ファイルはカーネル内のキャッシュ (ペー
ジキャッシュとスワップ) に置かれ、揮発性である。tmpfs は通常/tmp にマウントされる。
* 仮想ファイルシステムは、ファイルシステムの実装に依存しない抽象的なインタフェースを提供
する。このインタフェースを実装することで、独自のファイルシステムを構築することができる。
2) デバイスドライバ
* カーネル内部ではハードウェアデバイスの特性はデバイスドライバで表される。デバイスドライバ
は、ハードウェアデバイスからの割り込み処理と、ユーザプロセスまたはカーネルからの入出力
要求を処理する。
* ハードウェアデバイスは、その入出力の種類によってブロックデバイスとキャラクタデバイスに分
けられる。
-
ブロックデバイス
ランダムアクセスの可能なデバイス。構造的な入出力を要求する。
-
キャラクタデバイス
シーケンシャルアクセスのみが可能なデバイス。入出力は、非構造的なバイト列で行われ
る。
* ハードウェアデバイスは、カーネルによってファイルシステム上のファイルとして表現される。この
ようなファイルをスペシャルファイルという。
* デバイスドライバは、ユーザプロセスの呼び出す read, write, poll といったシステムコールに対応
するエントリポイントを実装し、ユーザプロセスはスペシャルファイルに対するシステムコールに
よってハードウェアデバイスを操作することになる。
* デバイスドライバは、必ずしもハードウェアデバイスと通信する必要はない。/dev/null (出力を破
棄) や、/dev/random (乱数を発生) は、擬似デバイスと呼ばれる。
3) 他のスペシャルファイル
* デバイスドライバのほかに、名前付きパイプや UNIX ドメインソケット等のスペシャルファイルがあ
る。この二つは主にプロセス間通信の手段として用いられる。
2-2-応-20
Fly UP