2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. ·...

23
OSS モデルカリキュラムの学習ガイダンス 独立行政法人 情報処理推進機構 2-2-. Linux カーネルに関する知識 1. 科目の概要 Linux オペレーティングシステムの中核をなすカーネルの動作について、メモリ管理、プ ロセス管理、といった基本動作の詳細と、カーネルによるファイルシステムやネットワー クの取り扱いについて、具体的な動作原理を説明する。 2. 習得ポイント 本科目の学習により習得することが期待されるポイントは以下の通り。 習得ポイント 説明 シラバスの対応コマ 2-2-応-1. OS の基本構造とカーネルの役割 Linux 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. 習得ポイント毎の「学習の要点」と「解説」を参考にして、講義で使用する教材等を準備する。

Transcript of 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. ·...

Page 1: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

OSS モデルカリキュラムの学習ガイダンス

独立行政法人 情報処理推進機構

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

1. 科目の概要

Linux オペレーティングシステムの中核をなすカーネルの動作について、メモリ管理、プ

ロセス管理、といった基本動作の詳細と、カーネルによるファイルシステムやネットワー

クの取り扱いについて、具体的な動作原理を説明する。

2. 習得ポイント

本科目の学習により習得することが期待されるポイントは以下の通り。

習得ポイント 説 明 シラバスの対応コマ

2-2-応-1. OS の基本構造とカーネルの役割Linux 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. 習得ポイント毎の「学習の要点」と「解説」を参考にして、講義で使用する教材等を準備する。

Page 2: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

OSS モデルカリキュラムの学習ガイダンス

独立行政法人 情報処理推進機構

3. IT 知識体系との対応関係

「2-2-応. Linux カーネルに関する知識」と IT 知識体系との対応関係は以下の通り。科目名 1 2 3 4 5 6 7 8 9 10 11

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

Linuxカーネル概論 スケジューリング 割り込みと遅延 システムコール プロセス管理メモリ管理(1):メモリアドレスの変換機構

メモリ管理(2):実メモリとページの管理

メモリ管理(3):プロセス空間の管理

ファイル管理(1):仮想ファイルシステム

ファイル管理(2):ファイルの操作

ファイル管理(3):特殊ファイル

科目名 1 2 3 4 5 6 7 8 9 10 11 12 13

1

IT-IAS1.基礎的な問題

IT-IAS2.情報セキュリティの仕組み(対策)

IT-IAS3.運用上の問題

IT-IAS4.ポリシー

IT-IAS5.攻撃 IT-IAS6.情報セキュリティ分野

IT-IAS7.フォレンジック(情報証拠)

IT-IAS8.情報の状態

IT-IAS9.情報セキュリティサービス

IT-IAS10.脅威分析モデル

IT-IAS11.脆弱性

2

IT-SP1.プロフェッショナルとしてのコミュニケーション

IT-SP2.コンピュータの歴史

IT-SP3.コンピュータを取り巻く社会環境

IT-SP4.チームワーク

IT-SP5.知的財産権

IT-SP6.コンピュータの法的問題

IT-SP7.組織の中のIT

IT-SP8.プロフェッショナルとしての倫理的な問題と責任

IT-SP9.プライバシーと個人の自由

3

IT-IM1.情報管理の概念と基礎

IT-IM2.データベース問合わせ言語

IT-IM3.データアーキテクチャ

IT-IM4.データモデリングとデータベース設計

IT-IM5.データと情報の管理

IT-IM6.データベースの応用分野

4

IT-WS1.Web技術 IT-WS2.情報アーキテクチャ

IT-WS3.デジタルメディア

IT-WS4.Web開発 IT-WS5.脆弱性 IT-WS6.ソーシャルソフトウェア

5

IT-PF1.基本データ構造

IT-PF2.プログラミングの基本的構成要素

IT-PF3.オブジェクト指向プログラミング

IT-PF4.アルゴリズムと問題解決

IT-PF5.イベント駆動プログラミング

IT-PF6.再帰

6

IT-IPT1.システム間通信

IT-IPT2.データ割り当てと交換

IT-IPT3.統合的コーディング

IT-IPT4.スクリプティング手法

IT-IPT5.ソフトウェアセキュリティの実現

IT-IPT6.種々の問題

IT-IPT7.プログラミング言語の概要

7

CE-SWE0.歴史と概要

CE-SWE1.ソフトウェアプロセス

CE-SWE2.ソフトウェアの要求と仕様

CE-SWE3.ソフトウェアの設計

CE-SWE4.ソフトウェアのテストと検証

CE-SWE5.ソフトウェアの保守

CE-SWE6.ソフトウェア開発・保守ツールと環境

CE-SWE7.ソフトウェアプロジェクト管理

CE-SWE8.言語翻訳

CE-SWE9.ソフトウェアのフォールトトレランス

CE-SWE10.ソフトウェアの構成管理

CE-SWE11.ソフトェアの標準化

8

IT-SIA1.要求仕様

IT-SIA2.調達/手配

IT-SIA3.インテグレーション

IT-SIA4.プロジェクト管理

IT-SIA5.テストと品質保証

IT-SIA6.組織の特性

IT-SIA7.アーキテクチャ

9

IT-NET1.ネットワークの基礎

IT-NET2.ルーティングとスイッチング

IT-NET3.物理層 IT-NET4.セキュリティ

IT-NET5.アプリケーション分野

IT-NET6.ネットワーク管理

CE-NWK0.歴史と概要

CE-NWK1. 通信ネットワークのアーキテクチャ

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-NWK13.クラスタシステム

CE-NWK14.インターネットアプリケーション

CE-NWK15.次世代インターネット

CE-NWK16.放送

11

IT-PT1.オペレーティングシステム

IT-PT2.アーキテクチャと機構

IT-PT3.コンピュータインフラストラクチャ

IT-PT4.デプロイメントソフトウェア

IT-PT5.ファームウェア

IT-PT6.ハードウェア

12

CE-OPS0.歴史と概要

CE-OPS1.並行性 CE-OPS2.スケジューリングとディスパッチ

CE-OPS3.メモリ管理

CE-OPS4.セキュリティと保護

CE-OPS5.ファイル管理

CE-OPS6.リアルタイムOS

CE-OPS7.OSの概要

CE-OPS8.設計の原則

CE-OPS9.デバイス管理

CE-OPS10.システム性能評価

13

CE-CAO0.歴史と概要

CE-CAO1.コンピュータアーキテクチャの基礎

CE-CAO2.メモリシステムの構成とアーキテクチャ

CE-CAO3.インタフェースと通信

CE-CAO4.デバイスサブシステム

CE-CAO5.CPUアーキテクチャ

CE-CAO6.性能・コスト評価

CE-CAO7.分散・並列処理

CE-CAO8.コンピュータによる計算

CE-CAO9.性能向上

14

IT-ITF1.ITの一般的なテーマ

IT-ITF2.組織の問題

IT-ITF3.ITの歴史

IT-ITF4.IT分野(学科)とそれに関連のある分野(学科)

IT-ITF5.応用領域

IT-ITF6.IT分野における数学と統計学の活用

CE-ESY0.歴史と概要

CE-ESY1.低電力コンピューティング

CE-ESY2.高信頼性システムの設計

CE-ESY3.組込み用アーキテクチャ

CE-ESY4.開発環境

CE-ESY5.ライフサイクル

CE-ESY6.要件分析

CE-ESY7.仕様定義

CE-ESY8.構造設計

CE-ESY9.テスト CE-ESY10.プロジェクト管理

CE-ESY11.並行設計(ハードウェア、ソフトウェア

CE-ESY12.実装

CE-ESY13.リアルタイムシステム設計

CE-ESY14.組込みマイクロコントローラ

CE-ESY15.組込みプログラム

CE-ESY16.設計手法

CE-ESY17.ツールによるサポート

CE-ESY18.ネットワーク型組込みシステム

CE-ESY19.インタフェースシステムと混合信号システム

CE-ESY20.センサ技術

CE-ESY21.デバイスドライバ

CE-ESY22.メンテナンス

CE-ESY23.専門システム

CE-ESY24.信頼性とフォールトトレランス

分野

組織関連事項と情

報システム

ソフトウェ

アの方法と技術

システム基盤

IT-IAS 情報保証と情報セキュリティ

IT-SP 社会的な観点とプロフェッショナルとしての課題

応用技術

IT-IM 情報管理

IT-WS Webシステムとその技術

CE-ESY 組込みシステム

IT-IPT 技術を統合するためのプログラミング

15

10CE-NWK テレコミュニケーション

IT-PF プログラミング基礎

CE-SWE ソフトウェア工学

IT-SIA システムインテグレーションとアーキテクチャ

IT-NET ネットワーク

複数領域にまたがるもの

IT-PT プラットフォーム技術

CE-OPS オペレーティングシステム

CE-CAO コンピュータのアーキテクチャと構成

IT-ITF IT基礎

コンピュー

タハー

ウェ

アと

アー

キテク

チャ

<IT 知識体系上の関連部分>

Page 3: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

OSS モデルカリキュラムの学習ガイダンス

独立行政法人 情報処理推進機構

4. OSS モデルカリキュラム固有の知識

OSS モデルカリキュラム固有の知識として、Linux カーネルの機能の具体的な実装とコ

マンドとが挙げられる。他の多くの項目は、一般的なオペレーティングシステムの機能に

ついて Linux を通して習得する。

科目名 第1回 第2回 第3回 第4回 第5回 第6回 第7回 第8回 第9回 第10回 第11回(1)OS の歴史とLinux

(1)マルチタスキング

(1)割り込み (1)システムコール

(1)プロセス管理

(1)プロセス空間とカーネル空間

(1)実メモリの管理

(1)スワップ (1)VFS(Virtual FileSystem)

(1)ファイルの操作

(1)特殊ファイル

(2)OS の概念 (2)プロセス (2)タイマー (2)同期と排他

(2)シグナル (2)仮想アドレス空間

(2)動的メモリ割り当て

(2)デマンドページング

(2)inode、super block、directory

(2)ファイルのリード/ライト

(2)擬似ファイルシステム

(3)Linux OSの基本構造

(3)コンテキストスイッチング(プロセスディスパッチ)

(3)プロセス間通信

(3)ページ変換テーブル

(3)ページキャッシュ

(3)ファイル操作

(3)そのほかのファイル操作

(3)ローカルファイルシステム

(4)カーネルの基本機能

(4)プロセススケジューラ

(4)TLB(TranslationLookasideBuffer)

(4)ページフォルト

(4)マウント

(5)カーネルの起動プロセス

(5)マルチプロセッサへの対応

(5)メモリキャッシュ

(5)ガーベジコレクション

(5)アンマウント

(6)参考 (6)スケジューリングのアルゴリズム(7)基礎理論

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

(網掛け部分は IT 知識体系で学習できる知識を示し、それ以外は OSS モデルカリキュラム固有の知識を示している)

Page 4: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-1

スキル区分 OSS モデルカリキュラムの科目 レベル

システム分野 2-2 Linux カーネルに関する知識 応用

習得ポイント 2-2-応-1. OS の基本構造とカーネルの役割

対応する

コースウェア

第1回 Linux カーネル概論

2-2-応-1. OS の基本構造とカーネルの役割

Linux OS の基本的な構造を説明する。また中心的な役割を担うカーネルの基本的な機能として、

プロセス管理、メモリ管理、ファイル管理、ネットワーク、I/O などの概要を紹介する。

【学習の要点】

* LinuxOS の基本的な構造としては、中心にカーネルと呼ばれるプログラムが存在し、そのカーネ

ルを取り囲むようにしてシェル・カーネルモジュール・アプリケーションプログラムが存在する。

* カーネルは、LinuxOS の中核となるプログラムで、プログラムをメモリに読み込んだり、プログラム

実行に必要な領域を確保したりする。その他にも、ファイルや周辺機器の管理や、ネットワーク

と I/Oの管理などを行う。

* シェルとは、ユーザから与えられた指示をカーネルが解釈できる形式に変換するプログラムであ

る。

* カーネルモジュールとは、動的に追加されるプログラム部品である。

図 2-2-応-1. OS の基本構造

シェル・ユーザの指示をカーネルに伝える

アプリケーションプログラム・定められた目的を果たすためのプログラム

アプリケーションプログラム

カーネルの機能・プロセス管理

プログラムの実行とインタフェースの提供

・メモリ管理安全なメモリアクセスの提供

・ファイル管理データの管理

・デバイス管理デバイスとドライバの検出カーネル

モジュール

カーネルモジュール

カーネルモジュール

カーネルモジュール・動的に追加されるプログラム部品

Page 5: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-2

【解説】

1) Linux オペレーティングシステムの基本的な構造

LinuxOS には、その中心にカーネルと呼ばれる核となるプログラムが存在している。そのカーネル

を中心に考え、カーネルを取り囲むようにシェルやカーネルモジュール、アプリケーションプログラ

ムなどによって構成されている。

* シェルとは

ユーザの操作を受け付けて、与えられた指示をカーネルが解釈できる形式に変換して伝えるソ

フトウェアのことである。

* カーネルモジュールとは

カーネルモジュールとは、Linux カーネルに対して動的に追加されるプログラム部品のことを示

す。デバイスドライバなどが、これに該当する。

* アプリケーションプログラムとは

コンピュータのOSの上で実行され、定められた目的を果たすための機能を提供するプログラム

のことを示す。ただし、ミドルウェアなどは含まれない。

2) カーネルの基本的な機能

カーネルとは、OSの中核となるプログラムである。基本的な機能は、以下の通りである。

* プロセス管理

プロセス管理とは、アプリケーションプログラムの実行を許可し、ハードウェアへのアクセスのた

めのインタフェースをプログラムに提供することである。プログラムを実行するため、カーネルは

プログラムのコードを含むファイルをメモリに読みこみ、プログラム実行に必要な専用領域(スタ

ックと呼ぶ)を準備し、そのプログラムの所定の位置へ制御を渡すことで実行を開始する。

* メモリ管理

カーネルはアプリケーションプログラムの要求に応じて、安全なメモリアクセスを提供している。こ

れは仮想アドレッシングと呼ばれる方式であり、この方式ではカーネルは物理アドレスを別のア

ドレス(仮想アドレス)に変換する。アプリケーションプログラムは仮想アドレスから始まるメモリ空

間を自分のための空間と捕らえ、個々のプログラムが互いに他のプログラムのメモリ空間を破壊

することを防止している。

* ファイル管理

ファイル管理(ファイルシステム)は、コンピュータの資源を管理するための、OS が持つ機能の1

つである。ファイルとは、ハードディスクなどの補助記憶装置に格納されたデータを示している。

* デバイス管理

コンピュータに接続された周辺機器にアクセスするためには、カーネルを介してデバイスドライ

バを使用し、アクセスを行う。起動時、カーネルは最初に様々なバス(PCI や USB)上をチェック

して実装された周辺機器(デバイス)を検出し、対応するドライバを探す。カーネルの設計によっ

てドライバの扱い方は異なるが、一般にカーネルはドライバが物理的にデバイスにアクセスする

ための入出力ポートやメモリ空間を用意する。

* I/O 管理

外部からのコンピュータへのデータ入力、コンピュータから外部へのデータ出力の管理も行って

いる。

Page 6: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-3

スキル区分 OSS モデルカリキュラムの科目 レベル

システム分野 2-2 Linux カーネルに関する知識 応用

習得ポイント 2-2-応-2. マルチタスク OS におけるプロセスの概念

対応する

コースウェア

第5回 プロセス管理

2-2-応-2. マルチタスク OS におけるプロセスの概念

「プロセス」の概念と、プロセスを切り替えて時分割でタスクを遂行するマルチタスクの概念について

解説する。また OSが各プロセスを管理する手法についても言及する。

【学習の要点】

* プロセスとは、オペレーティングシステム上における処理の単位の1つであり、実行命令コード

やプロセス固有データ・リソース記述子などで構成されている。

* オペレーティングシステムが、複数のプロセスを切り替えながら実行することをマルチタスクとい

う。この場合、ユーザ側から見ると複数のプログラムが同時に実行されているように見える。

* プロセス管理は、カーネルの重要な機能の1つである。

図 2-2-応-2. マルチタスクの概念

プロセス

|>|

|>|

|>|

|>|

プロセス

マルチタスク 実行中 実行中 実行中 実行中

|>|

|>|

|>|

|>|

|>|

|>|

|>|

|>|

プロセス

プロセス|>|

|>|

|>|

|>|

生成 走行可能 走行中 ブロック状態 終了

複数のプロセスを切り替えながら実行させている

時間軸

Page 7: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-4

【解説】

1) プロセスとは

プロセスとは、オペレーティングシステム上における処理の単位の1つである。マルチタスク・オペレ

ーティングシステムでは、多くのプロセスを並列的に実行させることが可能である。また、「ジョブ」と

表現されることもあるが、「ジョブ」がユーザ側から見た処理の単位であり、「プロセス」はコンピュー

タ側から見た処理の単位を表している。プロセスは以下に示す資源で構成されている。

* 実行命令コード

* プロセス固有データ

* リソースの記述子

* セキュリティ属性

* プロセッサ状態

2) マルチタスクの概念

オペレーティングシステムが、複数のプロセスを切り替えながら実行することをマルチタスクという。

プロセスが切り替わりながら順次実行されるので、ユーザ側から見ると複数のプログラムが同時に

実行されているように見える。また、プロセスが入出力待ち状態となっても他のプロセスが実行され

るため、全体として処理速度が向上する。

* プリエンプティブ・マルチタスク

プリエンプティブ・マルチタスクとは、プロセスの切り替えにハードウェアタイマ割り込みを用いる

方法である。この場合、この割り込みによって一定時間内(タイムスライス)に OSに制御が戻る。

これは強制的に行われる。

* ノンプリエンプティブ・マルチタスク

各プロセス自身が、短い時間の間隔で OS に制御を戻すことによりマルチタスクが実現されてい

る方法である。

3) プロセスの管理方法

プロセス管理とは、主にカーネルの重要な機能の1つである。カーネルはプロセスの生成・実行・消

滅などに関して、以下に示す状態への遷移を持って管理を行っている。

* 生成

最初に作成されるとこの状態となり、実行可能状態となるのを待つ。状態遷移を行うのはスケジ

ューラである。

* 実行可能

メインメモリにロードされ CPUによる実行を待っている状態。

* 実行中

これは現にCPU上で実行されている状態。タイムスライスを使い切ると実行可能状態に戻り、プ

ログラムが終了すれば終了状態となり、資源が不足した場合はブロック状態となる。

* ブロック状態

資源不足が発生し、かつ新しい資源の確保ができない状態。

* 終了状態

プロセスの実行終了によって、終了状態となる。

Page 8: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-5

スキル区分 OSS モデルカリキュラムの科目 レベル

システム分野 2-2 Linux カーネルに関する知識 応用

習得ポイント 2-2-応-3. プロセスの切り替えとスケジューリングアルゴリズム

対応する

コースウェア

第2回 スケジューリング

第5回 プロセス管理

2-2-応-3. プロセスの切り替えとスケジューリングアルゴリズム

コンテキストスイッチの概念に触れ、プロセスが切り替わるメカニズムの概要を説明する。スケジュー

リングアルゴリズムの実際を紹介し、さらにその基礎となる理論でもある待ち行列議論とマルコス連

鎖について解説する。

【学習の要点】

* マルチタスク・オペレーティングシステムにおいて、プロセスの切り替えを行う際には、コンテキス

トスイッチが発生する。これは、CPUの状態を保存したり復元したりする過程のことである。

* スケジューラは、プロセスの切り替え先を決定するプログラムで、各プロセスはタイムスライスと呼

ばれる短い時間ずつ実行されたあと、切り替えられる。

* スケジューラは、CPU の負荷を公平かつ平等に分散させるために、スケジューリングアルゴリズ

ムに基づいて、プロセスの制御を行う。

図 2-2-応-3. プロセスの切り替え

タイムスライス

マルチタスクプロセスの

実行

スケジューラ

次に実行すべきプロセスを決定する

次に実行すべきプロセス

2番目に実行すべきプロセス

3番目に実行すべきプロセス

切り替れという指示

Page 9: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-6

【解説】

1) プロセスが切り替わるメカニズム

マルチタスク・オペレーティングシステムにおいては、実行中のプロセスであっても途中で CPU の

使用を止め、他のプロセスに切り替えてそのプロセスにCPUの使用が可能となるようにしている。こ

のプロセスの切り替えの際にコンテキストスイッチが発生する。

* コンテキストスイッチとは

複数のプロセスで CPUの共有が可能となるように、CPU の状態(コンテキスト)を保存したり、もし

くは復元したりする過程のことである。

* タイムスライスとは

プリエンプティブなマルチタスク OS では、スケジューラが各プロセスをある短い時間ずつ実行さ

せる。この時間のことをタイムスライスと呼ぶ。

* スケジューラ

実行プロセスの切り替え先を決定するプログラムがスケジューラである。スケジューラは、優先度

つきキューで優先度を割り当てられたプロセスの制御を行う。

* 割り込み

プロセスがタイムスライスの時間内に CPU の使用を止めなかった場合にはタイマ割り込みが発

生し、他のプロセスが実行される。

2) スケジューリングアルゴリズムとは

スケジューラの目標は、CPU の負荷を公平かつ平等に分散させることである。スケジューラは、スケ

ジューリングアルゴリズムに基づいてプロセスの制御を行う。一般的に知られているスケジューリン

グアルゴリズムには、以下のようなものがある。

* FIFO (First In, First Out)

最も単純なスケジューリング方式のこと。言葉の通り、最初に発生したリクエストから待ち行列に

並べ、順次処理を行う。

* LIFO (Last In, First Out)

公平性に問題があり、使われていない。

* ラウンドロビンスケジューリング

待ち行列に並んでいる処理待ち状態のプロセスに対して、優先度などは設定せず順番に同じ

タイムスライスを割り当てて、プロセススケジューリングを行う。

* 多段フィードバックキュー

短いプロセスや対話型のプロセスを優先し、プロセスの性質を迅速に把握しスケジューリングを

行う。UNIX の基本的なアルゴリズムである。

3) スケジューリングアルゴリズムの基礎となる理論

スケジューリングを行う際、各プロセスはキューと呼ばれる、コンピュータの基本的なデータ構造の

中に並べられる。キューは待ち行列とも呼ばれる。

Page 10: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-7

スキル区分 OSS モデルカリキュラムの科目 レベル

システム分野 2-2 Linux カーネルに関する知識 応用

習得ポイント 2-2-応-4. 割り込みと時分割処理

対応する

コースウェア

第3回 割り込みと遅延

2-2-応-4. 割り込みと時分割処理

CPU とその他デバイスの関係について整理し、「割り込み」の概念を説明する。割り込みの種類や

割り込みの管理など割り込みに関連するいくつかの話題について触れ、さらに、カーネルにおける

割り込み処理の概要を解説する。また時分割処理に関わる基本的な事項を説明する。

【学習の要点】

* 割り込みが発生すると、CPUは現在実行中の処理を中断して、割り込みに対応する処理を実施

する。これは例えば、処理速度の遅い周辺機器が、処理の終了を割り込みによって通知するこ

とで、この割り込みの発生までCPUに他の処理を実行させることを可能とする。

* 周辺機器に障害が発生した場合なども、割り込みを用いることで、その旨を速やかに伝えること

が可能となる。

* タイムシェアリングシステムにおいては、タイムスライスの時間内にCPUの使用が止まらなかった

場合に、タイマ割り込みが発生する。

図 2-2-応-4. 割り込みの目的

割り込みの目的

・処理の終了処理速度の遅い周辺機器から、処理の終了を伝える

・応答性の向上キーボードやマウスからの入力を伝える

・例外処理障害発生を伝える

・正確なタイミングの取得

通常処理 割り込み処理

割り込み発生

Page 11: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-8

【解説】

1) CPU が周辺機器からの要求を受け取る方法

コンピュータがその周辺機器などから受け取る要求のことを割り込みと呼ぶ。コンピュータは割り込

みが発生すると現在の実行中の処理を中断して、割り込みに対応するための処理を行う。割り込

みの目的を以下に記す。

* CPU資源の有効利用

処理速度の遅い周辺機器から、処理の終了を割り込みによって通知させることで、周辺機器が

処理を行っている間でも、CPU が他の処理を効率よく行える。

* 応答性の向上

キーボード、マウスなどのユーザインターフェースは、割り込みを使ってユーザの入力を確実に

処理することで、入力の遅延や入力漏れがなどの問題を回避することが可能となる。

* 例外処理の効率化

例えば周辺機器に何らかの障害が発生した場合であっても、割り込みを用いていることでプロ

グラム側にその旨を速やかに伝えることが可能となる。

* 正確なタイミングの取得

正確なタイミングで処理を行う必要のある機器を制御する場合、その機器が持っている正確な

タイマによりタイマ割り込みを行い、CPU側に処理のタイミングを指示することが可能となる。

2) 割り込みの種類

CPUの割り込みは、大きくわけて「ハードウェア割り込み」と「ソフトウェア割り込み」に分類できる。

* ハードウェア割り込み

CPU の外部から要求され、CPU の割り込み要求端子に対して電気的な信号に変化を与えるこ

とで発生する。

* ソフトウェア割り込み

ソフトウェア割り込みは、割り込みを発生させるための命令により発生する。例外としてゼロ除

算・オーバーフロー・ページフォルトなどによってもソフトウェア割り込みは発生する。

3) 割り込みの管理

ハードウェア割り込みにせよソフトウェア割り込みにせよ、CPU に割り込みが生じると、現在実行し

ているプロセスを中断させ割り込みハンドラもしくは割り込みサービスルーチンと呼ばれる処理が実

行される。また、これら割込処理の終了後には、元のプロセスが中断した箇所から再開されるように、

元のプロセスに関する情報(アドレスや作業状態)を、保存しておく。この過程をコンテキストスイッ

チという。

* タイマ割り込み

タイムシェアリングシステムにおいては、プロセスがタイムスライスの時間内に CPU の使用を止

めなかった場合には、タイマ割り込みが発生し他のプロセスの実行が開始される。この場合にも、

同様の割り込み管理が行われている。

Page 12: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-9

スキル区分 OSS モデルカリキュラムの科目 レベル

システム分野 2-2 Linux カーネルに関する知識 応用

習得ポイント 2-2-応-5. システムコール

対応する

コースウェア

第3回 割り込みと遅延

第4回 システムコール

2-2-応-5. システムコール

一般のアプリケーションから OS の機能を利用する際に使用するシステムコールを紹介する。システ

ムコールの位置づけを説明し、システムコールが呼ばれたときの OS 内部での振る舞いについて概

説する。

【学習の要点】

* システムコールとは、アクセスできない保護領域にアクセスすることや、保護されたレジスタを操

作するなど、カーネルの持つ特殊な機能を利用する場合に使用する仕組みのことである。

* Linuxでは約300種類のシステムコールが用意されており、CPUの動作モードなどを変更するこ

とも可能である。

* システムコールは、そのほとんどがソフトウェア割り込みによって実行されているため、その処理

方法は一般の割り込み処理と同様である。

図 2-2-応-5. システムコール

システムコール

・カーネルの持つ特殊な機能を利用する

*アクセスできない保護領域へのアクセス

*保護されたレジスタの操作

*CPUの動作モードの変更

アプリケーション

カーネル

(特殊な機能)

Page 13: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-10

【解説】

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つとして扱うためである。

Page 14: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-11

スキル区分 OSS モデルカリキュラムの科目 レベル

システム分野 2-2 Linux カーネルに関する知識 応用

習得ポイント 2-2-応-6. プログラムと OS の動作モード

対応する

コースウェア

第4回 システムコール

第5回 プロセス管理

2-2-応-6. プログラムと OSの動作モード

プログラムが動作するプロセス空間という概念を説明し、その目的や特徴、それぞれの空間ででき

ることとできないことを示す。さらにシステムコールによる動作モードの遷移について解説する。

【学習の要点】

* マルチタスク機能であれば、複数のプロセスがタイムスライスとして定められた時間で切り替わり

ながら、処理を行っている。そのため、処理が完全に終了していないプロセスに関しては、何度

も再開されることになる。

* プロセス毎に割り当てられたアドレス空間のことを、プロセス空間とよぶ。他のプロセスからは一

切参照されることがないため、データの破壊などは発生しない。

* Linux カーネルはスーパーバイザモードで動作し、一般のアプリケーションはユーザモードで動

作している。アプリケーションプログラムによりシステムコールが呼び出された場合、CPU の動作

モードはスーパーバイザモードへ遷移する。

図 2-2-応-6. OS の動作モードとシステムコールによる遷移

アプリケーションプログラム システムコール

アプリケーションプログラムが呼び出すシステムコールにより、ソフトウェア割り込みが発生し、CPUのモードがスーパバイザモードに遷移する。

ユーザモード

CPUの動作に制限が加えられている

全ての操作が可能である

スーパバイザモード

Page 15: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-12

【解説】

1) プログラムの動作

Linux カーネルはマルチタスク機能を提供している。そのため、同時に複数のプロセスを実行する

ことが可能である。

* プログラムとプロセスの関係

プログラムが実行されている状態とは、プロセスが実行されている状態である。ただし、1プログ

ラムにつきプロセスは1つだけとは限らない。1つのプログラムを起動させることで、複数のプロ

セスが起動するものもある。

* 複数のプロセスを同時に起動させるということ

マルチタスク機能が提供されているため、同時に複数のプロセスの実行が可能ではあるが、実

際にある一時点で動作しているプロセスの数は、当該システムに搭載されているCPU数以上に

は決してならない。実際はマルチタスク機能が、複数のプロセスを細かく切り替えながら動作さ

せ、いかにも同時動作しているような環境を作り出しているだけである。

* 複数のプロセスを切り替えながら動作させるということ

プリエンプティブ・マルチタスクであれば、タイムスライスとして定められた短い時間でプロセスの

切り替えが行われる。ほかにも割り込みの発生などでもプロセスの切り替えが発生する。

* 切り替えられたプロセスを再開するには

処理が完全に終了していないプロセスは、マルチタスクの機能により何度でも再開されることに

なる。このため、正常にプロセスを再開させるために個々のプロセスは固有のコンテキストを保

存している。コンテキストとは、そのプロセスが動作するためのプロセス空間、そのプロセスが動

作するときのレジスタ値などである。

* プロセス空間とは

プロセス毎に割り当てられる独立した論理アドレス空間のことをプロセス空間と呼ぶ。個々のプ

ロセスからアクセス可能なメモリ空間とは、このプロセス空間のことであり、他のプロセスからは一

切参照することはできない。プロセス間ではデータの授受は行えないが、他のプロセスからデー

タを破壊されることもない。

2) 動作モードの遷移

現代の CPU は一般的にいくつかの特権モードで命令を実行している。例えば2つのモードを持つ

CPU では、それぞれをスーパーバイザモードとユーザモードと呼んでいる。このようなモードは、セ

キュリティと安定性を維持するために必要とされている。Linux カーネルはスーパーバイザモードで

動作し、一般のアプリケーションプログラムはユーザモードで動作する。一般のアプリケーションプ

ログラムにより呼び出されるシステムコールは、ソフトウェア割り込みを用いて CPU の動作モードを

スーパーバイザモードへ遷移させる。

* スーパーバイザモード

CPU はその全ての操作が可能である(ハードウェア構成によっては不可能な操作もある)。任意

の命令を実行でき、入出力操作を開始でき、全メモリ空間にアクセスを行うことが可能である。

* ユーザモード

ハードウェアによって CPU の動作に制限が加えられる。例えば、一部の命令が実行できなかっ

たり、入出力操作ができなかったり、メモリ空間の一部にアクセスできなかったりなどである。

Page 16: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-13

スキル区分 OSS モデルカリキュラムの科目 レベル

システム分野 2-2 Linux カーネルに関する知識 応用

習得ポイント 2-2-応-7. 同期と排他制御

対応する

コースウェア

第4回 システムコール

第5回 プロセス管理

2-2-応-7. 同期と排他制御

プロセスの同期や排他が必要になる状況(デッドロック等)やカーネルによる管理について述べ、排

他制御を実現するための実装技術やその背景となる基礎論理について触れる。またカーネルの内

部で排他制御が実装されている具体的な例を示して説明する。

【学習の要点】

* マルチタスクは、排他制御機能を利用して資源の保護を行っているが、排他制御には欠陥があ

り、デッドロックなどが発生してしまう可能性がある。

* システム構築の際には、オブジェクト指向プログラミングなどを利用して、デッドロックが発生しな

いように注意すべきである。

* 排他制御を実現するための実装技術には、様々なものがある。また、カーネル内部でも排他制

御は様々な箇所で使用されている。

図 2-2-応-7. 排他制御

カーネル

プロセス

プロセス

プロセスプロセス

プロセス

排他制御機能

1つのプロセスにのみ資源を独占的に使用させて、他のプロセスには使用させない

資源

Page 17: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-14

【解説】

1) デッドロックとは

デッドロックとは、2つ以上のプロセスなどがお互いに相手の処理終了を待ち、結果的にプロセスが

停止してしまうことを言う。

* デッドロックは、排他制御の欠陥である。

マルチタスク機能においては計算機上の同一の資源に対して、複数の処理が同時期に実行さ

れても資源が破壊されることのないように、複数のプロセスに対して排他制御を要求するため、

結果として該当する全てのプロセスが他のプロセスの処理終了を待ってしまうことがある。そして

デッドロックが発生する。

* プロセス間の同期。

マルチタスク機能は、特定のプロセスが何らかのイベントを起こすまで、その他のプロセスに処

理の続行を待たせることで、プロセス間の同期をとる場合がある。

* 排他制御とは。

複数のプロセスからの同時アクセスにより競合が発生する場合は、1つのプロセスにのみ資源を

独占的に利用させて、他のプロセスが利用できないようにする事で整合性を保つ必要がある。

この処理を排他制御と呼ぶ。

* デッドロックを回避するために。

これを回避するためには、以下に示すような方法が存在する。

- オブジェクト指向プログラミングを用いてシステムを構築する。

- Lock-free と Wait-free アルゴリズムを用いる。

2) 排他制御を実現するための実装技術

プロセスが特定の資源を占有しようとする場合は、以下に示す操作を実施する必要があるが、この

操作の途中で他のプロセスに制御が渡ってしまうと資源は書き換えられてしまう。

* 資源が他のプロセスによって占有されていないことを確認する。

* 資源を占有する。

排他制御を実現するための実装技術としては、以下に示すようなものがある。

* ミューテックス - 単純な相互排除

* セマフォ - k-相互排除

* 同期

* ロック

* スピンロック

* タスク切り替え禁止

* 割り込み禁止

3) カーネル内部での排他制御

カーネル内部でも排他制御は様々な箇所で使用されている。メモリ管理、デバイス管理、およびマ

ルチプロセッサ管理機構などである。

Page 18: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-15

スキル区分 OSS モデルカリキュラムの科目 レベル

システム分野 2-2 Linux カーネルに関する知識 応用

習得ポイント 2-2-応-8. メモリ管理

対応する

コースウェア

第6回 メモリ管理(1)

2-2-応-8. メモリ管理

Linux カーネルが取り扱うアドレス空間として、物理的なメモリ領域に対するアドレス空間と仮想的な

アドレス空間が存在し、それらは適宜マッピングされて管理されること、「ページ」の概念等、基本的

な原理を解説する。そしてページングやページテーブルといった、ページ管理に用いられる基本的

な技術を紹介し、ページ管理の効果を説明する。

【学習の要点】

* Linux には仮想アドレス空間の概念があり、プロセス毎に独立して管理されている。プロセスは

仮想アドレスを用いて仮想アドレス空間にアクセスするが、この際仮想アドレスから物理アドレス

へのアドレス変換が行われている。

* アドレス空間は、ページと呼ばれる決まった単位に分割されて管理される。

* 仮想記憶の仕組みにより、プロセスは二次記憶などの主記憶以外のメモリシステムに存在する

ことができ、物理アドレス空間よりも広い空間を使用することができる。

* ページングの仕組みにより、主記憶と二次記憶の内容の交換が自動的に行われる。

* 仮想アドレス空間は、カーネル用に予約されたカーネル空間と、ユーザプロセスが利用可能な

ユーザ空間とに分けられる。

図 2-2-応-8. アドレス空間

仮想ページ仮想ページ

物理アドレス空間

仮想アドレス空間

プロセス構造体

二次記憶

物理ページ

物理ページを参照

二次記憶を参照

仮想ページを参照

Page 19: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-16

【解説】

1) 物理アドレス空間と仮想アドレス空間

* 物理アドレス空間

- CPU が直接アクセスすることのできる、「主記憶(メインメモリ)」のもつアドレス空間。

* 仮想アドレス空間

- 物理アドレス空間とは独立して仮想的に管理されるアドレス空間。その領域すべてが主記

憶上に存在している必要がなく、一部の領域が二次記憶上に存在することが可能。

* アドレス空間は、一定の大きさを持った「ページ」と呼ばれる単位で分割される。全てのページ

は「ページ番号」が付与され、「ページテーブル」という構造体で管理される。ページの大きさ

(「ページサイズ」)はアーキテクチャによって異なるが、必ず 2^n バイトである。

* プロセスの観点から見ると、システムに搭載されている主記憶のアドレス空間よりも広いアドレス

空間を扱うことができる。仮想アドレス空間はプロセスに対して透過的であり、プロセスから見る

と連続したメモリ領域である。

* システムの観点から見ると、変換先の物理アドレス空間は必ずしも連続である必要はなく、効率

的にメモリを利用することができる。また、利用頻度の低いページを二次記憶に退避させておく

ことで、より効率的にメモリを利用することができる。

* 仮想アドレス空間のメモリ領域を予め物理メモリに展開せず、アクセスされたときに物理メモリを

確保して割り当てる方式を「デマンドページング」という。

2) ページイン/ページアウト

仮想アドレス空間上のページ番号から、物理アドレス空間上のページ番号への対応付け(「アドレ

ス変換」)は、カーネルとメモリ管理ユニット(MMU)が連携して行う。

* TLB (Translation Lookaside Buffer)

MMU の中には、アドレス変換をより高速に行うために「TLB (Translation Lookaside Buffer)」を

持つものがある。TLB は、直近のアドレス変換を保持するキャッシュとして働く。

* ページ置換

主記憶に空きがない場合、システムは利用頻度の低いページを二次記憶に移動させ、主記憶

の空き容量を確保する。これを「ページアウト」という。どのページを退避させるかは、OS の「ペ

ージ置換アルゴリズム」により異なる。

* アドレス変換とページング

CPU が仮想アドレスを元に物理アドレスにアクセスする際には、TLB→ページテーブルという順

序で、ページの対応付けを参照する。対応する物理ページが見つからない場合は、カーネル

に「ページフォルト」割り込みが送られ、二次記憶から物理メモリ上にページを読み込む。これを

「ページイン」という。

3) カーネル空間とユーザ空間

* 通常のプロセスが置かれる仮想アドレス空間を「ユーザ空間」といい、カーネルプログラムが置

かれる領域を「カーネル空間」という。

* カーネル空間とユーザ空間は厳密に分離され、通常のプロセスがカーネル空間に直接アクセ

スすることはできない。

Page 20: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-17

スキル区分 OSS モデルカリキュラムの科目 レベル

システム分野 2-2 Linux カーネルに関する知識 応用

習得ポイント 2-2-応-9. プロセス空間

対応する

コースウェア

第7回 メモリ管理(2)

第8回 メモリ管理(3)

2-2-応-9. プロセス空間

プロセス空間を管理する方法の具体的な技術について説明する。デマンドページング、ページキャ

ッシュ、ページフォルト、スワップデーモンといった個々の概念を解説する。

カーネル空間特有のメモリ確保の方法と、そのインタフェースについて解説する。また、カーネル内

でのメモリ確保特有の制限や、システムとして提供するメモリ確保のアルゴリズムについても述べる。

【学習の要点】

* プロセス空間とカーネル空間とで、メモリ確保の方式に違いがあることを学習する。

* デマンドページングの概念について学習する。付帯概念として、ページキャッシュ・スワップデ

ーモン等について併せて学習し、デマンドページングの利点を確認する。

* カーネル空間は通常ページング不可能である。

* カーネルが使用できるメモリ領域には制限がある。このため現実的には、カーネルがメモリ領域

を必要とする際には動的に確保する必要がある。

* カーネルがメモリを動的に割り当てるために、必要とされるサイズや高速性要件に適したいくつ

かの異なるアルゴリズムとそれに対応するインタフェースが用意されている。

図 2-2-応-9. 階層化されたメモリ管理システム

メモリ管理ハードウェア

アドレス変換レイヤ

ページレベルアロケータ

カーネルメモリアロケータ

ページングシステム

Rohit Dube, 1998, A Comparison of the Memory Management sub -systems in FreeBSD and Linux

メモリ管理ハードウェアの抽象化し、上位レイヤにハードウェアに依存しないインタフェースを提供。

仮想アドレスを物理アドレスに変換、ページフォルトをOSに報告。

上位レイヤにページインタフェースを提供。

カーネルメモリアロケータは、カーネルとカーネルモジュール用にメモリを確保し、ページングシステムはユーザプロセス用にメモリを確保する。

Page 21: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-18

【解説】

1) メモリ確保の構成要素

カーネルがメモリを確保する方式と、ユーザプロセスがメモリを確保する方式は別である。これはそ

れぞれにおいて、求められる特性が違うからである。

* ページングシステム

ページングシステムは「デマンドページング」や「スワッピング」ポリシーを実装するものである。

主にユーザプロセスに対してメモリ確保の仕組みを提供する。

* カーネルメモリアロケータ

カーネル内で必要なメモリを確保するための仕組みである。カーネル内で利用されるメモリは以

下の特徴を満たす必要があり、Linux では「バディシステム」や「スラブアロケータ」の仕組みによ

り実現している。

- 使用するメモリのほとんどはページング不可能である。

- 通常、アドレス固定の連続した物理メモリ領域を必要とする。

- 高速性が最も重要となる。多くの場合、カーネルは即座に(処理をブロックすることなしに)

メモリ領域を確保する必要がある。

2) メモリの効率的な利用

* デマンドページング

プロセスが実行するためには物理メモリ領域が必要であるが、起動時点でプロセス全体が物理

メモリ上に存在する必要はない。必要に応じて物理メモリに読み込む仕組みを、「デマンド(要

求時)ページング」と呼ぶ。メモリ領域を節約でき起動も速いが、初めてアクセスされるページは、

ページフォルト処理や読み込みのコストがかかるため遅延が発生する。

* ページキャッシュ

一旦、二次記憶から物理メモリに読み込まれたページのうち、読み込み専用で共有可能なもの

は、ページアウトせずに再利用することができる。この仕組みを「ページキャッシュ」という。

* スワップデーモン

ページキャッシュによりシステム全体の速度を向上させることができるが、キャッシュが溜まるに

つれて物理メモリ領域を圧迫することになる。空きページの不足の検知、適切なページキャッシ

ュの縮小・ページアウトを行う仕組みが必要である。Linux では「kswapd」がこれを担当する。

3) カーネル内での動的メモリ領域確保の仕組み

* 動的メモリ領域確保用インタフェース

カーネル内では、以下のインタフェースでメモリの確保/解放を行う。

- kmalloc(), kfree()

カーネルが連続した物理メモリ領域を確保するために使用。物理メモリ上に連続した領域を

確保することで、空間的局所性が得られ、TLB を最大限活用できるため高速である。

- vmalloc(), vfree()

仮想メモリ領域から仮想的に連続したメモリ領域を確保するために使用。kmalloc(), kfree()と

異なり、物理メモリ領域上では連続しているとは限らない。このため、速度は劣るものの大き

な領域を確保することができる。

Page 22: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-19

スキル区分 OSS モデルカリキュラムの科目 レベル

システム分野 2-2 Linux カーネルに関する知識 応用

習得ポイント 2-2-応-10. ファイルシステム

対応する

コースウェア

第9回 ファイル管理(1)

第 10 回 ファイル管理(2)

第 11 回 ファイル管理(3)

2-2-応-10. ファイルシステム

ファイルシステムの違いを意識することなくあらゆるファイルシステムへ一元的にアクセスできるよう

にするための仮想ファイルシステムについて解説する。仮想ファイルシステムの概念と特徴を説明

し、実際に操作がどのように行われるかについて示す。またパイプや proc ファイルシステムのような

疑似ファイルシステムなどの特別なファイルを説明し、その意義とメリットについて触れる。

【学習の要点】

* 仮想ファイルシステムは、ファイルシステムの上位層に存在し、異なるファイルシステムに対して

透過的な操作を実現する共通インタフェースである。

* ext3、NFS、CIFS、proc等のファイルシステムがLinuxにおいてどのように実現されているかを学

習し、仮想ファイルシステムインタフェースを持つファイルシステムを新しく定義することができる

ことを確認する。

* スペシャルファイルと通常のファイルの違いを確認し、スペシャルファイルへの入出力はカーネ

ル内部でデバイスドライバに転送されることを学習する。

* デバイスドライバは、キャラクタデバイスとブロックデバイスの 2 つのインタフェースを提供する。

* スペシャルファイルは必ずしもデバイスと関連づいている必要はない。FIFO は名前付きパイプ

を実現するために使用されるスペシャルファイルである。

図 2-2-応-10. 仮想ファイルシステムインタフェース

システムコールインタフェース

仮想ファイルシステムインタフェース

ext3 NFS疑似ファイルシステム (proc)

メモリファイルシステム (tmp)

デバイスドライバ

ハードウェア

ユーザプロセス

open/close read/write

Page 23: 2-2-応. Linux カーネルに関する知識 - IPA · 2020. 1. 10. · 基本的な機能として、プロセス管理、メモリ管理、ファイル管理、ネットワー ク、i/oなどの概要を紹介する。

2-2-応-20

【解説】

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 ドメインソケット等のスペシャルファイルがあ

る。この二つは主にプロセス間通信の手段として用いられる。