読み込み中...
読み込み中...
読み込み中...
読み込み中...
読み込み中...
オペレーティングシステム(OS) は、コンピュータのハードウェアとアプリケーションソフトウェアの間に位置する「仲介役」のソフトウェアです。普段スマートフォンやパソコンを使うとき、画面をタッチしたりマウスをクリックしたりするだけで操作できるのは、OS がハードウェアの複雑な制御を引き受けてくれているからです。
OS の主な役割は次の通りです。
| 役割 | 説明 | 身近な例え |
|---|---|---|
| ハードウェアの抽象化 | CPU・メモリ・ディスクなどのハードウェアの違いを隠し、統一的な操作方法を提供する | テレビのリモコン(内部回路を知らなくても操作できる) |
| 資源管理 | CPU 時間・メモリ・ファイルなどの資源を複数のプログラムに適切に配分する | 教室の時間割(1つの教室を複数の授業で共有) |
| ユーザーインターフェースの提供 | GUI(グラフィカル)や CUI(コマンドライン)で人間がコンピュータを操作できるようにする | 窓口係(利用者の要望を受け付ける) |
OS はさらに カーネル と呼ばれる中核部分と、その周辺のユーティリティプログラムに分かれます。カーネルは CPU やメモリの管理、割込み処理、デバイスドライバの制御といった最も基本的な機能を担います。
OS は複数のプログラムを同時に動かしているように見せる仕組みを持っています。たとえば、音楽を再生しながらブラウザで Web を閲覧し、バックグラウンドでファイルをダウンロードすることができます。これは OS が CPU の使用時間を細かく切り替え、各プログラムに順番に割り当てているからです。
実行中のプログラムの単位を タスク (または プロセス )と呼びます。タスクは以下の3つの状態を遷移します。
| 状態 | 説明 |
|---|---|
| 実行状態(Running) | CPU を使って命令を実行中 |
| 実行可能状態(Ready) | CPU が空けばすぐに実行できる状態。CPU の割当待ち |
| 待ち状態(Waiting / Blocked) | 入出力の完了など、外部イベントの発生を待っている状態 |
ディスパッチ とは、実行可能状態のタスクに CPU を割り当てて実行状態にすることです。逆に、タイマ割込みなどにより実行中のタスクから CPU を取り上げて実行可能状態に戻すことを プリエンプション(横取り) と呼びます。
実行可能状態のタスクが複数あるとき、どのタスクに CPU を割り当てるかを決めるのが タスクスケジューリング です。
| 方式 | 説明 | 特徴 |
|---|---|---|
| ラウンドロビン方式 | 各タスクに均等な CPU 時間(タイムクォンタム)を順番に割り当てる | 公平。対話型処理に適する |
| 優先度方式 | タスクに優先度を設定し、優先度が高いタスクを先に実行する | 重要な処理を優先できるが、低優先度タスクが永遠に実行されない スタベーション が発生しうる |
| 多段フィードバックキュー | 複数の優先度キューを用意し、CPU を長く使うタスクは低い優先度キューに移す | ラウンドロビンと優先度の長所を組み合わせた方式 |
| 到着順(FCFS) | 実行可能状態になった順に実行する | 最も単純だが、長い処理が先に来ると後続が長時間待たされる |
| 処理時間順(SJF) | 実行時間が短いタスクを先に実行する | 平均待ち時間が最小になるが、実行時間の予測が必要 |
タイムクォンタム(タイムスライス) はラウンドロビン方式で各タスクに割り当てる CPU 時間の単位です。短すぎるとタスク切り替えのオーバーヘッドが増え、長すぎると応答性が悪くなります。
スレッド はタスク(プロセス)の中の、さらに小さな実行単位です。1つのプロセス内に複数のスレッドを作ることで、プロセス内の処理を並行して実行できます。スレッド同士はプロセスのメモリ空間を共有するため、プロセス間通信よりも高速にデータを受け渡せます。
複数のタスクが同じ資源(メモリ領域・ファイル・プリンタなど)に同時にアクセスすると、データの不整合が起きる可能性があります。たとえば、銀行口座の残高が 10,000 円のとき、2つのタスクが同時に 5,000 円を引き出そうとすると、正しく制御しなければ残高が -5,000 円やおかしな値になってしまいます。
このような問題を防ぐため、ある資源を使用中の間は他のタスクにアクセスさせない仕組みを 排他制御(ミューテックス) と呼びます。排他制御される区間を クリティカルセクション(臨界区域) と呼びます。
排他制御の代表的な仕組みに セマフォ があります。セマフォは整数値のカウンタで、資源を獲得するときにカウンタを減らし(P 操作)、解放するときに増やします(V 操作)。カウンタが 0 のとき、新たに資源を獲得しようとするタスクは待たされます。
複数のタスクが互いに相手の持つ資源の解放を待ち、どちらも先に進めなくなる状態を デッドロック と呼びます。
上の図のように、タスク A が資源 X を保持しながら資源 Y を要求し、タスク B が資源 Y を保持しながら資源 X を要求すると、お互いに永遠に待ち続けるデッドロックが発生します。
デッドロックの4条件 (全て揃うとデッドロックが発生):
対策としては、資源の獲得順序を統一する(循環待ちの防止)方法や、必要な資源を一括で獲得する(保持と待ちの防止)方法があります。
OS は主記憶(メインメモリ)を効率的にプログラムに割り当てる必要があります。主な割当方式を見ていきましょう。
主記憶をあらかじめ決められたサイズの区画に分割し、各プログラムを区画に割り当てます。
プログラムのサイズに合わせて区画を動的に割り当てます。
外部フラグメンテーションへの対策として、使用中の領域を移動して空き領域をまとめる メモリコンパクション(ガベージコレクション) があります。ただし、コンパクション中は処理が停止するためオーバーヘッドが発生します。
| アルゴリズム | 方法 | 特徴 |
|---|---|---|
| ファーストフィット | 先頭から探して最初に見つかった十分な空き領域に割り当てる | 検索が速い |
| ベストフィット | 全空き領域を調べて、サイズが最も近い(最小の十分な)領域に割り当てる | 無駄が少ないが、小さな断片が残りやすい |
| ワーストフィット | 最も大きい空き領域に割り当てる | 残った空き領域が大きくなり、再利用しやすい |
主記憶に 100KB, 50KB, 200KB, 80KB の空き領域があり、120KB のプログラムを割り当てる場合:
処理を 決められた時間内に確実に完了 させることを保証する OS です。一般的な OS は「なるべく速く」処理しますが、RTOS は「この時刻までに必ず」という デッドライン を守ることを最優先にします。
| 種類 | 説明 | 例 |
|---|---|---|
| バッチ処理 OS | 処理をまとめて一括実行する。対話的な操作は行わない | 給与計算、科学技術計算 |
| タイムシェアリング(TSS) | CPU 時間を短く分割し複数ユーザーが同時に利用する。対話型処理が可能 | 汎用コンピュータのマルチユーザー環境 |
| リアルタイム OS | 時間制約のある処理を確実に実行する | 組込みシステム、制御システム |
| OS | 特徴 |
|---|---|
| UNIX | マルチユーザー・マルチタスク。C 言語で記述され移植性が高い。サーバ用途で広く使われる |
| Linux | UNIX 互換のオープンソース OS。サーバ・組込み機器・スマートフォン(Android の基盤)で使用 |
| Windows | GUI 中心のデスクトップ OS。ビジネス・個人利用で最もシェアが高い |
| macOS | UNIX ベースのデスクトップ OS。Apple 製品に搭載 |
| iOS / Android | モバイル向け OS。iOS は macOS と共通のカーネル、Android は Linux カーネルを使用 |
ポイント
OS はハードウェアの抽象化・資源管理・ユーザーインターフェースの提供を担う。タスク(プロセス)は 実行状態 ・ 実行可能状態 ・ 待ち状態 の3状態を遷移する。CPU をタスクに割り当てることを ディスパッチ 、取り上げることを プリエンプション と呼ぶ。スケジューリングは ラウンドロビン (均等配分)・ 優先度方式 ・ SJF (最短ジョブ優先)等がある。排他制御は セマフォ で実現し、タスクが互いの資源を待つ デッドロック に注意する。メモリ管理では固定区画方式で 内部フラグメンテーション 、可変区画方式で 外部フラグメンテーション が発生し、 メモリコンパクション で対策する。 リアルタイム OS はデッドラインの遵守を最優先にする。
用語
パソコンやスマートフォンには、写真・文書・音楽・アプリケーションなど膨大な数のファイルが保存されています。これらを整理し、必要なときに素早く見つけ出せるのは、OS が ファイルシステム という仕組みでデータを管理しているからです。
ファイルシステムは、補助記憶装置(HDD や SSD)上のデータを ファイル という単位で管理し、 ディレクトリ(フォルダ) と呼ばれる入れ物で階層的に整理する仕組みです。ちょうど、書類をファイルに綴じ、ファイルをキャビネットの引き出しに分類して収納するイメージです。
ファイルを整理するために、ディレクトリ(フォルダ)を階層的に配置した構造を ディレクトリツリー(木構造) と呼びます。
| 用語 | 説明 |
|---|---|
| ルートディレクトリ | ディレクトリ階層の最上位。全てのファイル・ディレクトリの起点 |
| カレントディレクトリ | 現在作業中のディレクトリ。「.」で表す |
| 親ディレクトリ | 1つ上の階層のディレクトリ。「..」で表す |
| サブディレクトリ | あるディレクトリの中にあるディレクトリ |
| ホームディレクトリ | ユーザーごとに割り当てられた作業用ディレクトリ |
ファイルの場所を指定する方法には2種類あります。
| 方式 | 説明 | 例 |
|---|---|---|
| 絶対パス | ルートディレクトリからの完全な経路 | /home/userA/documents/report.txt |
| 相対パス | カレントディレクトリからの相対的な経路 | ../userB/music/song.mp3 |
計算問題のパターン:
カレントディレクトリが /home/userA/documents のとき、/home/userB/music/song.mp3 を相対パスで表すと:
| 種類 | 説明 | 例 |
|---|---|---|
| テキストファイル | 文字コードで構成されたファイル。人間が読める | .txt, .csv, .html |
| バイナリファイル | 文字コード以外のデータを含むファイル。直接読めない | .jpg, .mp3, .exe |
ファイル名の末尾に付く「.txt」「.jpg」などの文字列で、ファイルの種類を示します。OS はこの拡張子をもとに、ファイルを開くアプリケーションを判断します。
| 拡張子 | ファイルの種類 |
|---|---|
| .txt | テキストファイル |
| .csv | カンマ区切りデータ |
| .html | Web ページ |
| .jpg, .png | 画像ファイル |
| .mp3, .wav | 音声ファイル |
| 文書ファイル | |
| .zip | 圧縮ファイル |
| 方式 | 説明 | 用途 |
|---|---|---|
| 順次アクセス(シーケンシャルアクセス) | ファイルの先頭から順番にデータを読み書きする | ログファイル、テープ装置 |
| 直接アクセス(ランダムアクセス) | ファイル内の任意の位置に直接アクセスする | データベース、SSD |
| ファイルシステム | 特徴 | 主な用途 |
|---|---|---|
| FAT32 | 古くから広く対応。1ファイル最大 4GB の制限あり | USB メモリ、SD カード |
| NTFS | Windows 標準。アクセス権管理やジャーナリング機能あり | Windows の HDD/SSD |
| ext4 | Linux 標準。ジャーナリング対応で信頼性が高い | Linux サーバ |
| APFS | Apple 標準。暗号化やスナップショットに対応 | macOS, iOS |
ファイルの書き込み操作を ジャーナル(操作ログ) に記録してから実行する仕組みです。書き込み途中でシステムが停止しても、ジャーナルを参照することで短時間でファイルシステムを復旧できます。ジャーナリングがないと、停止後の復旧に全ファイルのチェックが必要となり、大きなディスクでは非常に時間がかかります。
ファイルの作成・削除を繰り返すと、1つのファイルがディスク上の離れた場所に分散して記録される現象です。HDD の場合、ヘッドの移動距離が増えて読み書きが遅くなります。これを解消する操作を デフラグメンテーション(デフラグ) と呼びます。
データの損失に備えて複製を保存することを バックアップ と呼びます。
| 種類 | 対象 | バックアップ時間 | 復旧時間 |
|---|---|---|---|
| フルバックアップ | 全てのデータ | 長い | 短い(最新のフルだけで復旧) |
| 差分バックアップ | 前回のフルバックアップ以降の変更分 | 中程度 | 中程度(フル + 最新の差分で復旧) |
| 増分バックアップ | 前回のバックアップ以降の変更分(種類を問わない) | 短い | 長い(フル + 全増分を順に適用) |
計算例: フルバックアップが 100GB、1日あたりの変更量が 10GB の場合(月曜フル、火〜金日次)
| 方式 | 火 | 水 | 木 | 金 | 火〜金合計 |
|---|---|---|---|---|---|
| 毎日フル | 100 | 100 | 100 | 100 | 400GB |
| 差分 | 10 | 20 | 30 | 40 | 100GB |
| 増分 | 10 | 10 | 10 | 10 | 40GB |
増分バックアップはバックアップ容量が最小ですが、木曜時点のデータを復旧するには「月曜のフル + 火の増分 + 水の増分 + 木の増分」の全てが必要です。差分バックアップなら「月曜のフル + 木の差分」だけで復旧できます。
OS はファイルやディレクトリに アクセス権(パーミッション) を設定し、誰がどの操作をできるかを制御します。UNIX/Linux では、ユーザーを3つのカテゴリに分け、それぞれに 読み取り(r) ・ 書き込み(w) ・ 実行(x) の権限を設定します。
| カテゴリ | 説明 |
|---|---|
| 所有者(Owner) | ファイルを作成したユーザー |
| グループ(Group) | ファイルの所有グループに属するユーザー |
| その他(Others) | 上記以外の全ユーザー |
パーミッションの数値表現:
例: パーミッション 644 の意味
ポイント
ファイルシステムはデータを ファイル 単位で管理し、 ディレクトリ で階層的に整理する。ファイルの場所は 絶対パス (ルートからの完全経路)と 相対パス (カレントディレクトリからの経路)で指定する。アクセス方式は 順次アクセス と 直接アクセス がある。 ジャーナリング は操作ログでファイルシステムの復旧を高速化する仕組み。バックアップは フル ・ 差分 ・ 増分 の3種類で、バックアップ時間と復旧時間にトレードオフがある。UNIX/Linux のアクセス権は rwx の3種類を所有者・グループ・その他に設定し、数値(例: 755)で表す。
用語
ソフトウェアは、その配布方法やソースコードの公開状況によっていくつかのカテゴリに分かれます。まずは全体像を把握しましょう。
| カテゴリ | ソースコード | 利用料 | 例 |
|---|---|---|---|
| オープンソースソフトウェア(OSS) | 公開 | 無料(一般的) | Linux, Firefox, LibreOffice |
| プロプライエタリソフトウェア | 非公開 | 有料(一般的) | Windows, Microsoft Office |
| フリーウェア | 公開の場合も非公開の場合もある | 無料 | — |
| シェアウェア | 非公開 | 試用は無料、継続利用は有料 | — |
オープンソースソフトウェア(OSS) とは、ソースコードが公開され、誰でも自由に利用・改変・再配布できるソフトウェアのことです。「無料」であることだけが OSS の条件ではなく、 ソースコードが公開されていること が最も重要なポイントです。
OSS の定義 は、非営利団体 OSI(Open Source Initiative) が定めた10の基準(Open Source Definition)に基づきます。主な要件:
OSS は「好き勝手に使ってよい」というわけではなく、 ライセンス というルールに従う必要があります。ライセンスの種類によって、改変したソフトウェアを再配布するときの条件が異なります。
改変して再配布する場合、 派生物も同じライセンスで公開しなければならない という条件があるライセンスです。「自由を守るための制約」とも言えます。
| ライセンス | 特徴 |
|---|---|
| GPL(GNU General Public License) | 最も代表的なコピーレフト型。派生物は必ず GPL で公開する必要がある。企業が商用ソフトに組み込む場合は要注意 |
| LGPL(GNU Lesser GPL) | GPL より制約が緩い。ライブラリとしてリンク(利用)するだけなら、利用側のソースコード公開は不要 |
| MPL(Mozilla Public License) | ファイル単位のコピーレフト。MPL のファイルを改変したら公開が必要だが、別ファイルの独自コードは非公開でよい |
ソースコードの公開義務がなく、改変した派生物を 商用・非公開のソフトウェアに組み込むことも自由 にできるライセンスです。
| ライセンス | 特徴 |
|---|---|
| MIT License | 最もシンプルで制約が少ない。著作権表示とライセンス文の記載だけで自由に利用可能 |
| BSD License | MIT とほぼ同じ。歴史的に UNIX 関連で広く使われてきた |
| Apache License 2.0 | MIT/BSD に加えて特許権の許諾条項がある。特許に関するトラブルを防止できる |
この2つの違いは FE 試験で問われるポイントです。身近な例えで理解しましょう。
コピーレフト型(GPL など) は「この料理レシピを自由に使っていいけど、アレンジしたレシピも必ず公開してね」というルールです。改良が常にコミュニティに還元される仕組みです。
パーミッシブ型(MIT など) は「この料理レシピを自由に使っていいよ。アレンジしたレシピは公開してもしなくてもどちらでもいいよ」というルールです。企業が商用ソフトに組み込みやすい利点があります。
| 比較項目 | コピーレフト型(GPL) | パーミッシブ型(MIT/BSD) |
|---|---|---|
| ソースコード公開義務 | あり(派生物も同じライセンスで公開) | なし(著作権表示のみ) |
| 商用利用 | 可能(ただしソース公開が必要) | 可能(ソース非公開でもよい) |
| 企業での採用しやすさ | 注意が必要 | 採用しやすい |
| コミュニティへの貢献 | 改良が必ず還元される | 還元は任意 |
ソフトウェアではなく、文章・画像・音楽などの コンテンツ に使われるライセンスです。FE 試験では OSS ライセンスとの違いを問われることがあります。
| 表示 | 意味 |
|---|---|
| BY | クレジット(著作者名)の表示が必要 |
| SA | 同じライセンスで配布する(Share Alike) |
| NC | 非営利目的のみ(Non Commercial) |
| ND | 改変禁止(No Derivatives) |
FE 試験では「どのカテゴリに該当するか」を問われます。代表的な OSS を分野別に整理しましょう。
| 分野 | OSS の名称 | 説明 |
|---|---|---|
| OS | Linux | UNIX 互換の OS。サーバ・組込み機器・Android の基盤 |
| Web サーバ | Apache HTTP Server | 世界で最も広く使われた Web サーバ |
| Nginx | 高性能・軽量な Web サーバ。リバースプロキシとしても利用 | |
| データベース | MySQL | 世界で最も普及した OSS の RDBMS |
| PostgreSQL | 高機能な OSS の RDBMS。標準 SQL への準拠度が高い | |
| MariaDB | MySQL から派生した RDBMS | |
| プログラミング言語 | Python, Ruby, PHP, Perl | いずれも OSS として開発・公開されている |
| オフィスソフト | LibreOffice | Microsoft Office 互換の OSS オフィススイート |
| ブラウザ | Firefox, Chromium | Firefox は Mozilla 財団、Chromium は Google Chrome の基盤 |
| メール | Thunderbird | OSS のメールクライアント |
| 仮想化・コンテナ | Docker, KVM | Docker はコンテナ型仮想化、KVM は Linux のハイパーバイザ |
| 構成管理 | Git | 分散型バージョン管理システム |
OSS 自体は無料でも、ビジネスとして成り立つモデルがあります。
| モデル | 説明 | 例 |
|---|---|---|
| デュアルライセンス | OSS 版(GPL)と商用版(独自ライセンス)を提供。商用版は追加機能やサポート付き | MySQL |
| サポート・サブスクリプション | ソフトは無料、技術サポートや保守を有料で提供 | Red Hat Enterprise Linux |
| SaaS 型 | OSS を基盤にしたクラウドサービスを有料で提供 | WordPress.com, GitLab |
ポイント
OSS は ソースコードが公開 され、自由に利用・改変・再配布できるソフトウェア。ライセンスは大きく コピーレフト型 (GPL: 派生物も同じライセンスで公開義務あり)と パーミッシブ型 (MIT/BSD: 著作権表示のみで公開義務なし)に分かれる。LGPL はライブラリ利用なら利用側のソース公開不要。代表的な OSS は Linux(OS)、Apache/Nginx(Web サーバ)、MySQL/PostgreSQL(DB)、Docker(コンテナ)、Git(バージョン管理)など。OSS のビジネスモデルとして デュアルライセンス や サポート・サブスクリプション がある。クリエイティブ・コモンズ(CC)はコンテンツ向けライセンスで OSS ライセンスとは別物。
用語