Concurrency
Overview
オペレーティングシステム(OS)における並行処理をまとめたセクション。
並行処理(Concurrency)とは
オペレーティングシステム(OS)における並行処理とは、複数のタスクやプロセスを同時に処理できる能力を指し、これによって効率性や応答性が向上させる。
この並行処理は、マルチスレッドやマルチプロセスを用いて、複数のプロセスやスレッドを同時に、あるいは交互に実行することで実現される。
これにより、複数のプログラムがCPUやメモリなどの共有リソース上で同時に動作できるようになり、以下のような効果がある。
- システムのパフォーマンス最適化
- アイドル時間の削減
- アプリケーションの応答速度向上
オペレーティングシステムにおける並行処理は、リソースの有効活用と応答速度の 向上のために不可欠。
プロセスやスレッドを効率よく管理することで、システム全体のパフォーマンスを向上させ、ユーザーエクスペリエンスを改善する。
並行処理の適切な実装には、競合回避やデッドロック防止など、さまざまな課題に対処することが求められる。
並行処理が重要な理由
OSでは、以下のような状況に対応するため、優れた並行処理能力が必要。
- デッドロック(複数のプロセスが互いに資源を待ち続けて停止する状況)
- 競合状態(複数のプロセスが同時に同じリソースにアクセスし、予期せぬ動作が起こる状態)
- 途切れないタスク実行(特定のタスクが中断されないように制御する)
これらの課題に対処するためには、プロセスの実行管理、メモリ割り当て、**スケジューリング(実行順序の調整)**などの技術が不可欠になる。
並行処理の役割
オペレーティングシステムにおける並行処理の目的は、以下の通り。
- 物理リソースの共有 マルチユーザー環境では、ハードウェアリソース(CPU、メモリ、ストレージなど)は限られているため、並行処理により効率 的に共有します。
- 論理リソースの共有 例えば、複数のプロセスが同じファイルを共有し、同じ情報にアクセスする必要がある場合です。
- 計算速度の向上 並列実行により、タスク全体の処理速度を向上させます。
- モジュール化 システム機能を分割し、個別のプロセスとして処理することで、管理しやすくします。
マルチユーザー環境とは
マルチユーザー環境とは、オペレーティングシステム(OS)が複数のユーザーからの操作を同時に処理できるように設計されたシステムのこと。
この環境は、OSのプロセススケジューリングやメモリ管理などの仕組みによって成り立っている。
各ユーザーはログインすることで、自身のリソース(ファイル、プロセス、セッションなど)を独立して利用できるようになっており、他のユーザーと安全かつ効率的にシステムを共有できる仕組みが整っている。
- LinuxやUNIX系OS
- SSHなどで複数のユーザーが同時にログインし、それぞれ異なるターミナルセッションで作業可能とする。
- サーバーシステム
- 1つのWebサーバーが複数のユーザーリクエストを処理し、同時に複数のクライアントに応答する。
- リモートデスクトップ
- Windowsのリモートデスクトップサービスなど、同時に複数のユーザーがリモート接続 してシステムにアクセスできる。
マルチユーザー環境とは、単に「/home/user」のようなディレクトリ構造を指すものではなく、複数のユーザーが同時に1つのシステムを利用できる環境を意味する。
一方、/home/user
は、OSがユーザーごとに用意する個別のファイル保存領域であり、ユーザーごとに独立した作業スペースを提供するためのディレクトリ。
これはマルチユーザー環境の一部として機能し、各ユーザーが自身のデータを安全かつ効率的に管理できるよう設計されている。
プロセス間の関係性
OS内で動作するプロセスの種類は、以下の2種類に分けられる。
- 独立プロセス(Independent Process)
他のプロセスと直接的なデータ共有をしないプロセス。
独立して動作し、他のプロセスの状態に影響を受けない。 - 協調プロセス(Cooperating Process)
他のプロセスと情報をやり取りし、協力して処理を進めるプロセス。
これにより、複数のプロセスが同じ目標を 達成するために連携します。
並行処理が活用される主な場面 • マルチタスク環境:複数のアプリケーションを同時に実行するためのバックグラウンド処理。 • リアルタイム処理:ユーザーの入力に即座に反応する必要がある場面(ゲーム、IoT、金融システムなど)。 • 高性能コンピューティング:複数のプロセッサを用いて計算を高速化するための並列処理。
スレッドセーフ
シングルプロセスとシングルスレッド
サーバーを構築するNode.js シングルスレッド&シングルプロセス