オペレーティング システム( OS ) は、コンピュータのハードウェアとソフトウェアのリソースを管理し、コンピュータ プログラムに共通のサービスを提供するシステム ソフトウェアです。
タイムシェアリングオペレーティング システムは、システムを効率的に使用するためにタスクをスケジュールします。また、プロセッサ時間、大容量ストレージ、周辺機器、およびその他のリソースのコスト割り当てのための会計ソフトウェアも含まれる場合があります。
入出力やメモリ割り当てなどのハードウェア機能については、オペレーティングシステムはプログラムとコンピュータハードウェアの間の仲介役として機能しますが、[1] [2]アプリケーションコードは通常、ハードウェアによって直接実行され、OS機能へのシステムコールを実行したり、OS機能によって割り込まれたりすることが頻繁にあります。オペレーティングシステムは、携帯電話やビデオゲームコンソールからWebサーバーやスーパーコンピュータまで、コンピュータを搭載した多くのデバイスに搭載されています。
パーソナルコンピュータ市場では、2023年9月現在[アップデート]、Microsoft Windowsが約68%の市場シェアを占めています。Apple Inc.のmacOSが2位(20%)、ChromeOSを含むLinuxの各種が全体で3位(7%)となっています。 [3]モバイル分野(スマートフォンやタブレットを含む)では、2023年9月現在、Androidのシェアが68.92%、AppleのiOSとiPadOSが30.42%、その他のOSが0.66%となっています。[4] Linuxディストリビューションは、サーバーおよびスーパーコンピューティング分野で主流です。組み込みシステムやリアルタイムシステムなど、他の特殊なクラスのオペレーティングシステム(専用オペレーティングシステム)[5] [6]は、多くのアプリケーション用に存在します。セキュリティ重視のオペレーティングシステムも存在します。一部のオペレーティングシステムはシステム要件が低いです(例:軽量Linuxディストリビューション)。他のオペレーティングシステムは、システム要件が高い場合があります。 [アップデート]
一部のオペレーティング システムはインストールが必要であったり、購入したコンピュータにプリインストールされている場合 ( OEMインストール) がありますが、その他のオペレーティング システムはメディア (ライブ CDなど) またはフラッシュ メモリ ( USBスティックなど)から直接実行できます。
定義と目的
オペレーティングシステムは定義が難しいが[7]、「ユーザーとアプリケーションのためにコンピュータのリソースを管理するソフトウェア層」と呼ばれている。[8]オペレーティングシステムには、カーネルと呼ばれる常に実行されているソフトウェアが含まれるが、他のソフトウェアも含まれる場合がある。[7] [9]コンピュータで実行できる他の2種類のプログラムは、システムプログラム(オペレーティングシステムに関連付けられているが、カーネルの一部ではない場合がある)とアプリケーション(他のすべてのソフトウェア)である。[9]
オペレーティングシステムが果たす主な目的は3つあります。[10]
- オペレーティングシステムは、異なるアプリケーション間でリソースを割り当て、中央処理装置(CPU)時間またはメモリ内のスペースをいつ受け取るかを決定します。[10]現代のパーソナルコンピュータでは、ユーザーは複数のアプリケーションを同時に実行したいことがよくあります。 1つのプログラムがコンピュータの限られたハードウェアリソースを独占できないようにするために、オペレーティングシステムは各アプリケーションに時間(CPU)またはスペース(メモリ)のリソースを割り当てます。[11] [12]オペレーティングシステムはまた、アプリケーションを他のアプリケーションのコード内のエラーやセキュリティの脆弱性から保護するためにアプリケーションを互いに分離する必要がありますが、異なるアプリケーション間の通信を可能にする必要があります。[13]
- オペレーティングシステムは、ハードウェアの詳細(物理メモリなど)へのアクセスの詳細を抽象化するインターフェースを提供し、プログラマーの作業を容易にします。 [10] [14] 仮想化により、オペレーティングシステムは限られたハードウェアリソースを隠すこともできます。たとえば、仮想メモリは、コンピュータの実際のメモリを超えるほぼ無制限のメモリがあるという錯覚をプログラムに与えることができます。[15]
- オペレーティングシステムは、ネットワークやディスクデバイスにアクセスするためのインターフェースなどの共通サービスを提供します。これにより、アプリケーションを書き換えることなく、異なるハードウェア上で実行できます。[16]オペレーティングシステムに含めるサービスは大きく異なり、この機能はほとんどのオペレーティングシステムのコードの大部分を占めています。[17]
オペレーティングシステムの種類
マルチコンピュータ オペレーティング システム
マルチプロセッサでは、複数の CPU がメモリを共有します。マルチコンピュータまたはクラスター コンピュータには複数の CPU があり、それぞれに独自のメモリがあります。マルチコンピュータが開発されたのは、大規模なマルチプロセッサは設計が難しく、非常に高価だったためです。 [18]必要なマシンのサイズが小さいため、クラウド コンピューティングではマルチコンピュータが一般的です。 [19]異なる CPU は、互いにメッセージを送受信する必要があります。[20]良好なパフォーマンスを確保するには、これらのマシンのオペレーティング システムでこのパケットのコピーを最小限に抑える必要があります。[21]新しいシステムでは、多くの場合、マルチキュー (ユーザー グループを個別のキューに分離) が採用され、パケットのコピーの必要性を減らし、より多くの同時ユーザーをサポートします。[22]もう 1 つの手法は、各 CPU が他の CPU に属するメモリにアクセスできるようにするリモート ダイレクト メモリ アクセスです。 [20]マルチコンピュータ オペレーティング システムでは、多くの場合、CPU が別の CPU のプロシージャを呼び出すことができるリモート プロシージャ コールや、オペレーティング システムが仮想化を使用して実際には存在しない共有メモリを生成する分散共有メモリがサポートされます。 [24 ]
分散システム
分散システムは、ネットワークに接続された個別のコンピュータのグループであり、各コンピュータは独自のオペレーティングシステムとファイルシステムを持っている場合があります。マルチコンピュータとは異なり、分散システムは世界中のどこにでも分散している可能性があります。[25] ミドルウェアは、オペレーティングシステムとアプリケーションの間にある追加のソフトウェアレイヤーであり、一貫性を向上させるためによく使用されます。オペレーティングシステムと同様に機能しますが、真のオペレーティングシステムではありません。[26]
埋め込み
組み込みオペレーティングシステムは、IoTオブジェクトであろうとネットワークに接続されていなくても、組み込みコンピュータシステムで使用するために設計されています。組み込みシステムには多くの家電製品が含まれます。特徴的なのは、ユーザーがインストールしたソフトウェアをロードしないことです。したがって、異なるアプリケーション間の保護は必要なく、よりシンプルな設計が可能になります。非常に小さなオペレーティングシステムは10キロバイト未満で動作することがあり、[27]最も小さいものはスマートカード 用です。[28]例としては、 Embedded Linux、QNX、VxWorks、超小型システムのRIOTとTinyOS があります。[29]
リアルタイム
リアルタイムオペレーティングシステムは、特定の時点までにイベントやデータを処理することを保証するオペレーティングシステムです。ハードリアルタイムシステムは正確なタイミングを必要とし、製造、航空電子工学、軍事、その他の同様の用途で一般的です。[29]ソフトリアルタイムシステムでは、時折イベントが失われることは許容されます。このカテゴリには、オーディオまたはマルチメディアシステム、スマートフォンが含まれることがよくあります。[29]ハードリアルタイムシステムが十分に正確なタイミングを実現するために、多くの場合、 eCosなどのアプリケーション間の保護のないライブラリに過ぎません。[29]
ハイパーバイザー
ハイパーバイザーは、仮想マシンを実行するオペレーティングシステムです。仮想マシンは、アプリケーションであることを認識せず、独自のハードウェアを持っているかのように動作します。[15] [30]仮想マシンは一時停止、保存、再開できるため、オペレーティングシステムの研究、開発、[31]およびデバッグに役立ちます。[32]また、ベースオペレーティングシステムと互換性がない場合でも、アプリケーションをコンピューターで実行できるようにすることで、移植性を高めます。[15]
図書館
ライブラリオペレーティングシステム(libOS)は、ネットワークなどの一般的なオペレーティングシステムが提供するサービスがライブラリの形で提供され、単一のアプリケーションと構成コードで構成されてユニカーネルを構築するシステムです。 [33]クラウドまたは組み込み環境に展開できる、特殊な(絶対に必要なコード部分のみがライブラリから抽出され、結合されます [34])、単一のアドレス空間のマシンイメージです。
オペレーティングシステムコードとアプリケーションコードは、分離された保護ドメインでは実行されません(少なくとも概念的には、実行されるアプリケーションは1つだけなので、アプリケーション間の干渉を防ぐ必要はありません)。また、OSサービスは、組み込みOSやリアルタイムOSと同様に、コンテキストスイッチの通常のオーバーヘッドなしに、単純 なライブラリ呼び出し(コンパイラしきい値に基づいてインライン化される可能性があります)を介してアクセスされます。 [35]このオーバーヘッドは無視できないことに注意してください。モード切り替えの直接的なコストに、ユーザーモードとカーネルモードの両方のパフォーマンスに影響を与える重要なプロセッサ構造(CPUキャッシュ、命令パイプラインなど)の間接的な汚染を追加する必要があり、 [36]
歴史

1940年代後半から1950年代にかけての最初のコンピュータは、プログラミング言語やオペレーティングシステムを使用せずに、プラグボードまたはパンチカードなどのメディアに入力されたマシンコードのいずれかを使用して直接プログラムされていました。 [37] 1950年代半ばにトランジスタが導入された後、メインフレームが構築され始めました。これらには、プログラムの実行をスケジュールするなど、現代のオペレーティングシステムが行うことを手動で行うプロのオペレーターが必要でしたが[ 37 ] [38]、メインフレームにはFortran Monitor System(FMS)やIBSYSなどの基本的なオペレーティングシステムがまだありました。[39] 1960年代に、IBMは最初の一連の相互互換性のあるコンピュータ(System/360)を発表しました。それらはすべて、何千ものバグを含む数百万行のアセンブリ言語で構成された同じオペレーティングシステムであるOS/360を実行しました。 OS/360は、マルチプログラミングをサポートした最初の人気オペレーティングシステムでもあり、CPUを1つのジョブに使用しながら、別のジョブが入出力(I/O)を待機することができました。複数のジョブをメモリに保持するには、メモリのパーティション分割と、あるジョブが別のジョブに割り当てられたメモリにアクセスしないようにする保護が必要でした。[40]
同じ頃、テレタイププリンターが端末として使用され始め、複数のユーザーが同時にコンピューターにアクセスできるようになりました。オペレーティングシステムMULTICSは、数百人のユーザーが大型コンピューターにアクセスできるようにすることを目的としていました。採用は限られていましたが、クラウドコンピューティングの先駆けと考えることができます。UNIXオペレーティングシステムは、シングルユーザー向けにMULTICSを開発したことから始まりました。[41] UNIXのソースコードが利用可能であったため、互換性のない他のオペレーティングシステムの基礎となり、その中で最も成功したのはAT&TのSystem Vとカリフォルニア大学のBerkeley Software Distribution (BSD)でした。[42]互換性を高めるために、IEEEはオペレーティングシステムのアプリケーションプログラミングインターフェイス(API )のPOSIX標準をリリースし、ほとんどのUNIXシステムでサポートされています。MINIXはUNIXの簡素化されたバージョンで、1987年に教育目的で開発され、市販のフリーソフトウェアLinuxに影響を与えました。[43]
マイクロコンピュータ


大規模集積回路の発明により、1980年頃からパーソナルコンピュータ(当初はマイクロコンピュータと呼ばれていた)の生産が可能になった。 [44]約5年間、CP/M(マイクロコンピュータ用制御プログラム)がマイクロコンピュータ用の最も人気のあるオペレーティングシステムだった。[45]その後、IBMはマイクロソフトからDOS (ディスクオペレーティングシステム)を買収した。IBMの要請による修正の後、結果として得られたシステムはMS-DOS (Microsoft Disk Operating System)と呼ばれ、IBMマイクロコンピュータで広く使用された。後のバージョンでは、UNIXから機能を借用するなどして、より高度になった。[45]
AppleのMacintoshは、グラフィカルユーザーインターフェイス(GUI)を採用した最初の人気コンピュータでした。GUIは、以前のオペレーティングシステムが使用していたテキストのみのコマンドラインインターフェイスよりもはるかにユーザーフレンドリーであることが証明されました。Macintoshの成功に続いて、MS-DOSはWindowsと呼ばれるGUIオーバーレイで更新されました。Windowsは後にスタンドアロンオペレーティングシステムとして書き直され、他のオペレーティングシステム(VAX VMS)から多くの機能を借用したため、多額の法的和解金が支払われました。[46] 21世紀になっても、Windowsはパーソナルコンピュータでは人気が続いていますが、サーバーの市場シェアは低下しています。UNIXオペレーティングシステム、特にLinuxは、エンタープライズシステムとサーバーで最も人気がありますが、モバイルデバイスや他の多くのコンピュータシステムでも使用されています。[47]
モバイルデバイスでは、当初はSymbian OSが主流でしたが、BlackBerry OS(2002年導入)とiPhone用のiOS(2007年以降)に取って代わられました。その後、LinuxカーネルとBSDコードに部分的に基づくCライブラリ(Bionic )を搭載したオープンソースのAndroidオペレーティングシステム(2008年導入)が最も人気を博しました。[48]
コンポーネント
オペレーティング システムのコンポーネントは、コンピューターのさまざまな部分が連携して機能するように設計されています。すべてのユーザーソフトウェアは、ハードウェアにアクセスするためにオペレーティング システムと対話する必要があります。
カーネル

カーネルは、異なるアプリケーションとユーザー間の保護を提供するオペレーティングシステムの一部です。この保護は、エラーを1つのプログラムに隔離することで信頼性を向上させるだけでなく、悪意のあるソフトウェアの力を制限してプライベートデータを保護し、1つのプログラムがコンピューターのリソースを独占できないようにすることでセキュリティを向上させるために重要です。[49]ほとんどのオペレーティングシステムには2つの動作モードがあります。 [50]ユーザーモード では、ハードウェアはソフトウェアが正当な命令のみを実行していることを確認しますが、カーネルは無制限の権限を持ち、これらのチェックの対象ではありません。[51]カーネルは他のプロセスのメモリを管理し、入出力デバイスへのアクセスを制御します。[52]
プログラム実行
オペレーティング システムは、アプリケーション プログラムとコンピュータ ハードウェア間のインターフェイスを提供します。これにより、アプリケーション プログラムは、オペレーティング システムにプログラムされた規則と手順に従うだけでハードウェアと対話できます。オペレーティング システムは、アプリケーション プログラムの開発と実行を簡素化する一連のサービスでもあります。アプリケーション プログラムを実行するには、通常、オペレーティング システムカーネルによるプロセスの作成が伴います。カーネルは、メモリ領域やその他のリソースを割り当て、マルチタスク システムでプロセスの優先順位を設定し、プログラムのバイナリ コードをメモリにロードし、アプリケーション プログラムの実行を開始します。その後、アプリケーション プログラムがユーザーやハードウェア デバイスと対話します。ただし、一部のシステムでは、アプリケーションは、サブルーチンまたは別のスレッドとして、同じプロセス内で別のアプリケーションを実行するようにオペレーティング システムに要求できます (例: OS/360 および後継のLINKおよびATTACH機能) 。
割り込み
割り込み(アボート、例外、フォールト、シグナル、[53]またはトラップとも呼ばれる)[54]は、ほとんどのオペレーティングシステムが環境に反応するための効率的な方法を提供します。割り込みにより、中央処理装置(CPU)の制御フローが、現在実行中のプログラムから割り込みハンドラ(割り込みサービスルーチン(ISR)とも呼ばれる)に変更されます。[55] [56]割り込みサービスルーチンにより、中央処理装置(CPU)のコンテキストスイッチが発生する場合があります。[57] [a]コンピュータが割り込みを処理する方法の詳細はアーキテクチャごとに異なり、割り込みサービスルーチンの動作の詳細はオペレーティングシステムごとに異なります。[58]ただし、いくつかの割り込み機能は共通です。[58]アーキテクチャとオペレーティングシステムは次の要件を満たす必要があります。[58]
- 割り込みサービス ルーチンに制御を転送します。
- 現在実行中のプロセスの状態を保存します。
- 割り込みが処理された後の状態を復元します。
ソフトウェア割り込み
ソフトウェア割り込みは、イベントが発生したことをプロセスに伝えるメッセージです。 [53]これは、イベントが発生したことを中央処理装置(CPU)に伝えるハードウェア割り込みとは対照的です。 [59]ソフトウェア割り込みはハードウェア割り込みに似ており、現在実行中のプロセスから変更が行われます。[60]同様に、ハードウェア割り込みとソフトウェア割り込みはどちらも割り込みサービスルーチンを実行します。
ソフトウェア割り込みは、通常発生するイベントである可能性があります。タイムスライスが発生することが予想されるため、カーネルはコンテキストスイッチを実行する必要があります。[61]コンピュータプログラムは、データが多すぎてアルゴリズムに時間がかかりすぎる場合に備えて、数秒後にタイマーが切れるように設定する場合があります。[62]
ソフトウェア割り込みは、不正な機械命令などのエラー状態である可能性があります。[62]しかし、最も一般的なエラー状態は、ゼロ除算と無効なメモリアドレスへのアクセスです。[62]
ユーザーはカーネルにメッセージを送信して、現在実行中のプロセスの動作を変更することができます。[62]たとえば、コマンドライン環境では、割り込み文字(通常はControl-C)を押すと、現在実行中のプロセスが終了することがあります。[62]
x86 CPUのソフトウェア割り込みを生成するには、アセンブリ言語命令INTが利用できる。[63]構文は であり、 は割り込みベクターテーブルへのオフセット番号(16進形式)である。
INT XX
信号
Unix系オペレーティングシステムでソフトウェア割り込みを生成するには、システムコールが別のプロセスにシグナルを送信します。 [64]は受信プロセスのプロセス識別子です。 [b]は送信されるシグナル番号(ニーモニック形式)です。(初期の実装ではプロセスを終了するだけだったので、という不快な名前が付けられました。)[65]kill(pid,signum) pidsignumkill
Unix のようなオペレーティングシステムでは、シグナルがプロセスに非同期イベントの発生を通知します。[64]非同期通信を行うには、割り込みが必要です。[66]プロセスが他のプロセスと非同期通信する必要がある理由の 1 つは、古典的なリーダー/ライター問題のバリエーションを解決することです。[67]ライターは、出力をリーダーの入力ストリームに送信するためのパイプをシェルから受け取ります。 [68]コマンドライン構文は次のとおりですalpha | bravo。はalpha、計算の準備ができるとパイプに書き込み、待機キューでスリープします。[69]次に、 準備完了キューbravoに移動され、すぐに入力ストリームから読み取ります。[70]カーネルは、パイプを調整するためにソフトウェア割り込みを生成します。 [70]
信号は7つのカテゴリーに分類される。[64]カテゴリーは以下のとおりである。
- プロセスが正常に終了したとき。
- プロセスにエラー例外が発生した場合。
- プロセスがシステム リソースを使い果たしたとき。
- プロセスが不正な命令を実行したとき。
- プロセスがアラーム イベントを設定したとき。
- キーボードからプロセスが中止されたとき。
- プロセスにデバッグ用のトレースアラートがある場合。
ハードウェア割り込み
入出力(I/O)デバイスはCPUよりも遅い。そのため、CPUが各I/Oの完了を待たなければならないと、コンピュータの速度が低下する。代わりに、コンピュータはI/Oの完了を割り込みで処理することで、ポーリングやビジー待機の必要性を回避することができる。[71]
一部のコンピュータでは、文字や単語ごとに割り込みが必要となり、CPUにかなりの時間がかかります。ダイレクトメモリアクセス(DMA)は、デバイスがCPUをバイパスしてメインメモリに直接アクセスできるようにするアーキテクチャ機能です。[72](アーキテクチャとは別に、デバイスはメインメモリとの間で直接またはバス経由で直接メモリアクセス[c]を実行する場合があります。) [73] [d]
入力/出力
割り込み駆動型I/O
コンピュータのユーザーがキーボードのキーを入力すると、通常、文字がすぐに画面に表示されます。同様に、ユーザーがマウスを動かすと、カーソルがすぐに画面上を移動します。各キー入力とマウスの動きにより、割り込み駆動型I/Oと呼ばれる割り込みが発生します。割り込み駆動型I/Oは、プロセスが送信される文字[73]または単語[74]ごとに割り込みを発生させるときに発生します。
直接メモリアクセス
ハードディスクドライブ、ソリッドステートドライブ、磁気テープドライブなどのデバイスは、非常に高速にデータを転送できるため、バイトまたはワードが転送されるたびにCPUに割り込みをかけ、デバイスとメモリ間でバイトまたはワードを転送させると、CPU時間が長くなりすぎます。代わりに、データはチャネルやダイレクトメモリアクセスコントローラなどのハードウェアによってCPUとは独立してデバイスとメモリ間で転送され、すべてのデータが転送されたときにのみ割り込みが送信されます。[75]
コンピュータ プログラムがシステム コールを実行してブロック I/O書き込み操作を実行する場合、システム コールは次の命令を実行する可能性があります。
- CPUのレジスタの内容(プログラムカウンタを含む)をプロセス制御ブロックに設定する。[76]
- デバイスステータステーブルにエントリを作成します。[77]オペレーティングシステムは、どのプロセスがどのデバイスを待機しているかを追跡するためにこのテーブルを維持します。テーブルの1つのフィールドは、プロセス制御ブロックのメモリアドレスです。
- デバイスに送信するすべての文字をメモリバッファに配置します。[66]
- メモリバッファのメモリアドレスを所定のデバイスレジスタに設定する。[78]
- バッファサイズ(整数)を別の所定のレジスタに設定する。[78]
- マシン命令を実行して書き込みを開始します。
- 準備キュー内の次のプロセスへのコンテキストスイッチを実行します。
書き込みが行われている間、オペレーティングシステムは通常通り他のプロセスにコンテキストスイッチします。デバイスが書き込みを終了すると、デバイスは割り込み要求をアサートして現在実行中のプロセスを中断します。デバイスはまた、データバスに整数を配置します。[79]割り込み要求を受け入れると、オペレーティングシステムは次のことを行います。
- プログラムカウンタ(レジスタ)の内容とステータスレジスタの内容をコールスタックにプッシュします。[58]
- 他のレジスタの内容をコールスタックにプッシュします。(あるいは、レジスタの内容をシステムテーブルに配置することもできます。)[79]
- データ バスから整数を読み取ります。整数は割り込みベクター テーブルへのオフセットです。ベクター テーブルの命令は次のようになります。
- デバイス ステータス テーブルにアクセスします。
- プロセス制御ブロックを抽出します。
- コンテキストスイッチを実行して書き込みプロセスに戻ります。
書き込みプロセスのタイムスライスが期限切れになると、オペレーティングシステムは次の処理を実行します。[80]
- ステータス レジスタとプログラム カウンター以外のレジスタをコール スタックからポップします。
- ステータス レジスタをコール スタックからポップします。
- コールスタックから次の命令のアドレスをポップし、プログラム カウンターに戻します。
プログラムカウンタがリセットされると、中断されたプロセスはタイムスライスを再開します。[58]
メモリ管理
とりわけ、マルチプログラミング オペレーティング システムカーネルは、プログラムによって現在使用されているすべてのシステム メモリを管理する責任を負います。これにより、プログラムが別のプログラムによってすでに使用されているメモリに干渉することがなくなります。プログラムはタイム シェアリングを行うため、各プログラムはメモリに独立してアクセスする必要があります。
多くの初期のオペレーティング システムで使用されていた協調メモリ管理では、すべてのプログラムがカーネルのメモリ マネージャを自発的に使用し、割り当てられたメモリを超えないことが前提となっています。プログラムには割り当てられたメモリを超えるバグが含まれることが多いため、このメモリ管理システムは今ではほとんど見かけなくなりました。プログラムに障害が発生すると、他の 1 つ以上のプログラムが使用するメモリが影響を受けたり、上書きされたりすることがあります。悪意のあるプログラムやウイルスは、他のプログラムのメモリを意図的に変更したり、オペレーティング システム自体の動作に影響を与えたりすることがあります。協調メモリ管理では、1 つのプログラムが不正に動作するだけでシステムがクラッシュします。
メモリ保護により、カーネルはプロセスによるコンピュータのメモリへのアクセスを制限できます。メモリ保護には、メモリのセグメント化やページングなど、さまざまな方法があります。すべての方法では、一定レベルのハードウェア サポート ( 80286 MMU など) が必要ですが、これはすべてのコンピュータに備わっているわけではありません。
セグメンテーションとページングの両方において、特定の保護モードレジスタは、実行中のプログラムがアクセスできるようにするメモリ アドレスを CPU に指定します。他のアドレスにアクセスしようとすると割り込みが発生し、CPU は再びスーパーバイザ モードに入り、カーネルが制御権を持ちます。これはセグメンテーション違反または略して Seg-V と呼ばれ、このような操作に意味のある結果を割り当てることは困難であり、また通常はプログラムの不正動作の兆候であるため、カーネルは一般に違反しているプログラムを終了し、エラーを報告します。
Windows バージョン 3.1 から ME には、ある程度のメモリ保護がありましたが、プログラムはそれを使用する必要性を簡単に回避できました。セグメンテーション違反が発生したことを示す一般保護違反が生成されましたが、それでもシステムがクラッシュすることがよくありました。
仮想メモリ

仮想メモリ アドレス指定 (ページングやセグメンテーションなど) を使用すると、カーネルは各プログラムが使用できるメモリをいつでも選択できるため、オペレーティング システムは複数のタスクに同じメモリ位置を使用できます。
プログラムがアクセスできないメモリ(メモリ)にアクセスしようとしたが、そのメモリには割り当てられていた場合、カーネルは中断されますページ フォールトです。
カーネルがページ フォールトを検出すると、通常はページ フォールトの原因となったプログラムの仮想メモリ範囲を調整し、要求されたメモリへのアクセスを許可します。これにより、カーネルは特定のアプリケーションのメモリがどこに保存されるか、または実際にメモリが割り当てられているかどうかさえも自由に決定できるようになります。
現代のオペレーティング システムでは、あまり頻繁にアクセスされないメモリを一時的にディスクやその他のメディアに保存して、そのスペースを他のプログラムで使用できるようにすることができます。これは、メモリ領域を複数のプログラムで使用でき、そのメモリ領域に含まれる内容を必要に応じてスワップまたは交換できるため、スワッピングと呼ばれます。
仮想メモリは、プログラマーやユーザーに、コンピュータ内に実際よりもはるかに多くのRAMがあるという認識を与えます。[81]
同時実行性
同時実行性とは、オペレーティングシステムが複数のタスクを同時に実行する能力を指します。[82]事実上すべての最新のオペレーティングシステムは同時実行性をサポートしています。[83]
スレッドは、プロセスの作業を複数の部分に分割し、同時に実行できるようにします。[84]スレッドの数は、使用可能なプロセッサの数によって制限されません。プロセッサよりもスレッドの数が多い場合、オペレーティングシステムのカーネルは、各スレッドがいつ実行されるか、および各スレッドが受け取る CPU 時間の量を制御しながら、スレッドをスケジュール、一時停止、および再開します。[85]コンテキストスイッチ 中、実行中のスレッドは一時停止され、その状態はスレッド制御ブロックとスタックに保存され、新しいスレッドの状態がロードされます。[86]歴史的に、多くのシステムでは、スレッドは制御を放棄するまで実行できました (協調的マルチタスク)。このモデルでは、1 つのスレッドがプロセッサを独占できるため、ほとんどのオペレーティングシステムは現在、スレッドに割り込むことができます (プリエンプティブマルチタスク)。[87]
スレッドは独自のスレッドID、プログラムカウンタ(PC)、レジスタセット、スタックを持ちますが、コード、ヒープデータ、その他のリソースを同じプロセスの他のスレッドと共有します。[88] [89]したがって、スレッドを作成する場合のオーバーヘッドは、新しいプロセスを作成する場合よりも少なくなります。[90]シングルCPUシステムでは、並行性はプロセス間の切り替えです。多くのコンピュータには複数のCPUがあります。[91]異なるCPUで実行される複数のスレッドによる 並列処理は、同時に実行できる量に応じて、プログラムを高速化できます。[92]
ファイルシステム

21世紀のコンピュータで使用されている永続的な記憶装置は、揮発性の ダイナミックランダムアクセスメモリ(DRAM)とは異なり、クラッシュや停電後もアクセス可能です。永続的な(不揮発性)記憶装置はバイト当たりのコストがはるかに安価ですが、アクセス、読み取り、書き込みに数桁長い時間がかかります。[93] [ 94] 2つの主要な技術は、磁気ディスクで構成されるハードドライブとフラッシュメモリ(電気回路にデータを保存するソリッドステートドライブ)です。後者はより高価ですが、より高速で耐久性があります。[95] [96]
ファイルシステムは、オペレーティングシステムが永続的なストレージへのアクセスを簡素化するために使用する抽象化です。人間が読めるファイル名やその他のメタデータを提供し、アクセスの償却によってパフォーマンスを向上させ、複数のスレッドが同じメモリセクションにアクセスするのを防ぎ、破損を識別するためのチェックサムを含みます。[97]ファイルシステムは、ファイル(任意のサイズのデータのコレクションに名前を付けたもの)と、人間が読めるファイル名やその他のディレクトリをリストするディレクトリ(フォルダーとも呼ばれる)で構成されています。 [98]絶対ファイルパスはルートディレクトリから始まり、句読点で区切られたサブディレクトリをリストしますが、相対パスはディレクトリからのファイルの場所を定義します。[99] [100]
システムコール(ライブラリによってラップされることもある)により、アプリケーションはファイルの作成、削除、オープン、クローズ、およびリンク、読み取り、書き込みを行うことができる。これらの操作はすべて、アプリケーションに代わってオペレーティングシステムによって実行される。[101]オペレーティングシステムがレイテンシを短縮するための取り組みには、最近要求されたメモリブロックをキャッシュに格納することや、アプリケーションが要求していないが次に必要になる可能性のあるデータをプリフェッチすることなどがある。 [102] デバイスドライバは、各入出力(I/O)デバイスに固有のソフトウェアであり、オペレーティングシステムが異なるハードウェア上で変更を加えることなく動作できるようにする。[103] [104]
ファイルシステムのもう1つの構成要素は、ファイル名とメタデータを、その内容が格納されているデータブロックにマッピングする辞書である。 [105]ほとんどのファイルシステムは、ディレクトリを使用してファイル名をファイル番号に変換する。ブロック番号を見つけるために、オペレーティングシステムはインデックス(多くの場合、ツリーとして実装される)を使用する。[106]これとは別に、空きブロックを追跡するための空き領域マップがあり、これは通常、ビットマップとして実装される。[106]空きブロックはどれでも新しいファイルを格納できるが、多くのオペレーティングシステムは、パフォーマンスを最大化するために同じディレクトリにファイルをグループ化したり、断片化を減らすために定期的にファイルを再編成したりしようとする。[107]
コンピュータのクラッシュやハードウェア障害が発生した場合にデータの信頼性を維持することもまた懸念事項である。[108]ファイル書き込みプロトコルは、書き込み中にクラッシュが発生した場合でも、永続的なストレージが部分的に書き込まれた不整合な状態にならないように、アトミック操作で設計されている。[109]データ破損は、冗長ストレージ(たとえば、RAID(安価なディスクの冗長アレイ))[110] [111]と、データが破損したときに検出するチェックサムによって対処される。複数層のチェックサムとファイルのバックアップにより、システムは複数のハードウェア障害から回復できる。データ破損を検出して回復するために、バックグラウンドプロセスがよく使用される。[111]
安全
セキュリティとは、同じコンピュータを使用する他のユーザーからユーザーを保護するだけでなく、ネットワーク経由でリモート アクセスしようとするユーザーからもユーザーを保護することを意味します。[112]オペレーティング システムのセキュリティは、 CIA トライアドの 実現にかかっています。CIA トライアドとは、機密性 (権限のないユーザーはデータにアクセスできない)、整合性 (権限のないユーザーはデータを変更できない)、可用性 (サービス拒否攻撃が発生した場合でも、権限のあるユーザーがシステムを引き続き利用できるようにすること) です。[113]他のコンピュータ システムと同様に、セキュリティ ドメイン(オペレーティング システムの場合はカーネル、プロセス、仮想マシン) を分離することがセキュリティを実現する鍵となります。[114]セキュリティを強化するその他の方法としては、攻撃対象領域を最小限に抑えるためのシンプルさ、リソースへのアクセスをデフォルトでロックすること、すべての承認要求をチェックすること、最小権限の原則(タスクの実行に必要な最小限の権限を付与すること)、権限の分離、共有データの削減などがあります。[115]
オペレーティングシステムの設計には、他のものよりも安全なものがあります。カーネルとアプリケーションが分離されていないものは最も安全性が低く、ほとんどの汎用オペレーティングシステムのようにモノリシックカーネルを持つものは、カーネルの一部が侵害されると依然として脆弱です。より安全な設計では、カーネルの権限を多くの個別のセキュリティドメインに分離し、単一のカーネル侵害の影響を軽減するマイクロカーネルが採用されています。 [116] ユニカーネルは、カーネルを最小化し、他のオペレーティングシステムの機能をアプリケーションごとに分離することでセキュリティを向上させるもう1つのアプローチです。[116]
ほとんどのオペレーティングシステムはCまたはC++で書かれており、それが悪用される潜在的な脆弱性を生み出しています。脆弱性から保護しようとする試みにもかかわらず、境界チェックの欠如によって可能になるバッファオーバーフロー攻撃によって脆弱性が発生します。[117] ハードウェアの脆弱性(一部はCPUの最適化によって引き起こされます)も、オペレーティングシステムを侵害するために使用できます。 [118] オペレーティングシステムのプログラマがバックドアなどの脆弱性を故意に埋め込んだ例が知られています。[119 ]
オペレーティングシステムのセキュリティは、複雑さが増し、その結果バグが避けられなくなることで妨げられています。[120]オペレーティングシステムの形式的検証は実行できない可能性があるため、開発者は脆弱性を減らすためにオペレーティングシステムの強化を使用します。 [121]たとえば、アドレス空間レイアウトのランダム化、制御フローの整合性、[122] アクセス制限、[123]およびその他の手法です。[124]オープンソースオペレーティングシステムにコードを投稿できる人には制限がありません。このようなオペレーティングシステムには、透明性のある変更履歴と分散ガバナンス構造があります。[125]オープンソース開発者は、コードレビューと型チェックを使用して悪意のあるコードを排除し、セキュリティの脆弱性を見つけて排除するために協力して作業するよう努めています。[126] [127] Andrew S. Tanenbaum は、すべてのオペレーティングシステムのソースコードを公開することを推奨しています。これにより、開発者が秘密を信頼し、信頼できないセキュリティの実践である不明瞭さに頼ることを防ぐことができると主張しています。[128]
ユーザーインターフェース
ユーザーインターフェース(UI)は、人間とコンピュータのやり取りをサポートするために不可欠です。コンピュータの最も一般的な2つのユーザーインターフェースの種類は次のとおりです。
- コマンドラインインターフェースでは、コンピュータのコマンドを1行ずつ入力し、
- 視覚的な環境を使用するグラフィカル ユーザー インターフェイス(GUI)。最も一般的には、ウィンドウ、アイコン、メニュー、およびポインター要素の組み合わせで、WIMPとも呼ばれます。
スマートフォンやタブレット端末などのパーソナルコンピュータやワークステーションでは、ユーザ入力は通常、キーボード、マウス、トラックパッドまたはタッチスクリーンの組み合わせから行われ、これらはすべて専用のソフトウェアによってオペレーティングシステムに接続されています。[129]ソフトウェア開発者やプログラマーではないパーソナルコンピュータのユーザは、入力と出力の両方にGUIを好むことが多く、GUIはほとんどのパーソナルコンピュータでサポートされています。[130] GUIをサポートするソフトウェアは、入力とプレーンテキスト出力のコマンドラインよりも複雑です。プレーンテキスト出力はプログラマーに好まれることが多く、サポートも簡単です。[131]
趣味としてのオペレーティングシステム開発
趣味のオペレーティングシステムは、既存のオペレーティングシステムから直接派生したコードではなく、ユーザーやアクティブな開発者が少ないものに分類されます。[132]
場合によっては、趣味での開発は、6502 マイクロプロセッサを搭載したシンプルなシングルボード コンピュータなどの「自作」コンピューティング デバイスをサポートするものです。または、すでに広く使用されているアーキテクチャ向けの開発である場合もあります。オペレーティング システムの開発は、まったく新しい概念から生まれる場合もあれば、既存のオペレーティング システムをモデル化することから始まる場合もあります。いずれの場合も、趣味で開発を行う人は自分自身で開発を行うか、または、同じような興味を持つ小規模で構造化されていないグループと交流する場合もあります。
趣味用のオペレーティング システムの例としては、SyllableやTempleOS などがあります。
オペレーティングシステムの多様性と移植性
アプリケーションが特定のオペレーティングシステムで使用するために作成され、別の OS に移植される場合、そのアプリケーションに必要な機能は、その OS によって異なる方法で実装される可能性があり (関数の名前、引数の意味など)、アプリケーションの適応、変更、またはその他の保守が必要になります。
オペレーティング システムの多様性をサポートするためのこのコストは、 JavaやQtなどのソフトウェア プラットフォームに対してアプリケーションを作成することで回避できます。これらの抽象化は、特定のオペレーティング システムとそのシステム ライブラリへの適応のコストをすでに負担しています。
もう 1 つのアプローチは、オペレーティング システム ベンダーが標準を採用することです。たとえば、POSIXとOS 抽象化レイヤーは、移植コストを削減する共通性を提供します。
人気のオペレーティングシステム
パソコン市場では、2023年9月現在[アップデート]、Microsoft Windowsが約68%と最も高いシェアを占めている。Apple社のmacOSが2位(20%)、 ChromeOSを含むLinuxの各種が合計で3位(7%)となっている。[3]モバイル分野(スマートフォンやタブレットを含む)では、2023年9月現在、Androidのシェアが68.92%、Apple社のiOSとiPadOSが30.42%、その他のOSが0.66%となっている。[133][アップデート]
リナックス

LinuxはGNU General Public License (GPL)に基づいて配布されるフリーソフトウェアであり、その派生物はすべてソースコードを公開することが法的に義務付けられています。[134] Linuxはプログラマーが自分自身で使用するために設計されたため、シンプルさと一貫性が重視され、少数の基本要素をほぼ無制限に組み合わせることができ、冗長性が回避されています。[135]
その設計は、マイクロカーネルを使用していない他のUNIXシステムと似ています。[136] C言語で書かれており[137]、UNIX System V構文を使用していますが、BSD構文もサポートしています。Linuxは、標準のUNIXネットワーク機能とUNIXツールのフルスイートをサポートし、複数のユーザーをサポートし、プリエンプティブマルチタスクを採用しています。当初は最小限の設計であったLinuxは、 16MB未満のRAMで動作できる柔軟なシステムですが、大規模なマルチプロセッサシステムでも使用されています。[136]他のUNIXシステムと同様に、Linuxディストリビューションはカーネル、システムライブラリ、およびシステムユーティリティで構成されています。[138] Linuxには、デスクトップ、フォルダーおよびファイルアイコンを備えたグラフィカルユーザーインターフェイス(GUI)があり、コマンドライン経由でオペレーティングシステムにアクセスするオプションもあります。[139]
AndroidはLinuxをベースにした部分的にオープンソースのオペレーティングシステムであり、スマートフォンで人気があり、また、それほどではないが「スマートウォッチ、自動車のダッシュボード、飛行機のシートバック、医療機器、家電製品」などのGUIを必要とする組み込みシステムでも人気があるため、ユーザーに最も広く使用されているオペレーティングシステムとなっています。[140] Linuxとは異なり、Androidの多くはJavaで書かれており、オブジェクト指向設計を採用しています。[141]
マイクロソフトウィンドウズ

Windowsは、デスクトップコンピュータ、ラップトップ、タブレット、電話、ワークステーション、エンタープライズサーバー、Xboxコンソールで広く使用されている独自のオペレーティングシステムです。 [143]このオペレーティングシステムは、「セキュリティ、信頼性、互換性、高性能、拡張性、移植性、国際サポート」を目的として設計されましたが、後にエネルギー効率と動的デバイスのサポートも優先事項になりました。[144]
Windows Executive は、プロセス、スレッド、セクション (ファイルなどのメモリ オブジェクト) などの重要なデータ構造に対してカーネル モード オブジェクトを介して機能します。 [145]オペレーティング システムは、多くのアプリケーションの I/O を高速化する仮想メモリのデマンド ページングをサポートしています。I/Oデバイス ドライバーはWindows ドライバー モデルを使用します。[145] NTFSファイル システムにはマスター テーブルがあり、各ファイルはメタデータを含むレコードとして表されます。[146]スケジューリングにはプリエンプティブ マルチタスクが含まれます。[147] Windows には多くのセキュリティ機能があります。[148]特に重要なのは、アクセス制御リストと整合性レベルの使用です。すべてのプロセスには認証トークンがあり、各オブジェクトにはセキュリティ記述子が与えられます。後のリリースでは、さらに多くのセキュリティ機能が追加されました。[146]
参照
注記
- ^ 最近の CPU は、割り込みなしで選択したカーネル サービスを呼び出すための命令 (SYSENTER など) を提供します。詳細については、https://wiki.osdev.org/SYSENTER を参照してください。
- ^ 例としては、SIGINT、SIGSEGV、SIGBUSなどがあります。
- ^ 小規模システムではDMAチップ、大規模システムではI/Oチャネルの形で提供されることが多い
- ^ 最近のマザーボードにはDMA コントローラーが搭載されています。また、デバイスにも DMA コントローラーが搭載されている場合があります。SCSI RDMA プロトコルを参照してください。
- ^ メモリにアクセスできない理由はいくつかあります
- アドレスが範囲外である可能性があります
- アドレスは、バックアップストアに移動されたページまたはセグメントを参照している可能性があります。
- アドレスは、たとえば、キー、リングなどによりアクセスが制限されているメモリを参照している可能性があります。
参考文献
- ^ Stallings (2005).オペレーティングシステム、内部構造、設計原則。ピアソン: Prentice Hall。p. 6。
- ^ Dhotre, IA (2009).オペレーティングシステム. 技術出版物. p. 1.
- ^ ab 「Desktop Operating System Market Share Worldwide」。StatCounter Global Stats。2023年10月2日時点のオリジナルよりアーカイブ。 2023年10月3日閲覧。
- ^ 「モバイルおよびタブレットオペレーティングシステムの世界市場シェア」。StatCounter Global Stats 。 2023年10月2日閲覧。
- ^ “VII. 特殊目的システム - オペレーティングシステムの概念、第7版 [書籍]”. www.oreilly.com . 2021年6月13日時点のオリジナルよりアーカイブ。2021年2月8日閲覧。
- ^ 「特殊用途オペレーティングシステム - RWTH AACHEN UNIVERSITY Institute for Automation of Complex Power Systems - 英語」。www.acs.eonerc.rwth-aachen.de。2021年6月14日時点のオリジナルよりアーカイブ。2021年2月8日閲覧。
- ^ Tanenbaum & Bos 2023、p.4より。
- ^ アンダーソンとダーリン、2014、p. 6.
- ^ ab Silberschatz et al. 2018、p. 6.
- ^ abc アンダーソン&ダーリン2014、p.7。
- ^ アンダーソンとダーリン、2014 年、9–10 ページ。
- ^ Tanenbaum & Bos 2023、6-7頁。
- ^ アンダーソンとダーリン、2014、p. 10.
- ^ Tanenbaum & Bos 2023、5ページ。
- ^ abc アンダーソン&ダーリン2014、p.11。
- ^ アンダーソンとダーリン、2014、7、9、13 ページ。
- ^ アンダーソンとダーリン、2014、12–13 ページ。
- ^ Tanenbaum & Bos 2023、557頁。
- ^ Tanenbaum & Bos 2023、558頁。
- ^ Tanenbaum & Bos 2023、565ページより。
- ^ Tanenbaum & Bos 2023、562頁。
- ^ Tanenbaum & Bos 2023、563ページ。
- ^ Tanenbaum & Bos 2023、569頁。
- ^ Tanenbaum & Bos 2023、571頁。
- ^ Tanenbaum & Bos 2023、579頁。
- ^ Tanenbaum & Bos 2023、581頁。
- ^ Tanenbaum & Bos 2023、37-38ページ。
- ^ Tanenbaum & Bos 2023、39ページ。
- ^ abcd Tanenbaum & Bos 2023、38ページ。
- ^ シルバーシャッツら。 2018、701ページ。
- ^ シルバーシャッツら。 2018、705ページ。
- ^ アンダーソンとダーリン、2014、p. 12.
- ^ Madhavapeddy, Anil; Scott, David J (2013 年 11 月)。「Unikernels: 仮想ライブラリ オペレーティング システムの台頭: 仮想アプライアンスのすべてのソフトウェア レイヤーが同じ安全な高水準言語フレームワーク内でコンパイルされていたらどうなるか?」。Queue。第 11 巻、第 11 号。米国ニューヨーク州ニューヨーク: ACM。pp. 30–44。doi : 10.1145 /2557963.2566628。ISSN 1542-7730 。2024年8 月 7 日に閲覧。
- ^ “Build Process - Unikraft”. 2024年4月22日時点のオリジナルよりアーカイブ。 2024年8月8日閲覧。
- ^ 「OSを自宅に置いておこう: ライブラリオペレーティングシステムの台頭」ACM SIGARCH 2017年9月14日。2024年3月1日時点のオリジナルよりアーカイブ。2024年8月7日閲覧。
- ^ Soares, Livio Baldini; Stumm, Michael (2010 年 10 月 4 日). FlexSC: 例外のないシステム コールによる柔軟なシステム コール スケジューリング。OSDI '10、第 9 回 USENIX オペレーティング システムの設計と実装に関するシンポジウム。USENIX。2024年8月 9 日に取得。p. 2:システム コールの同期実装は、モード切り替えの
直接的な
コストと、より興味深いことに、ユーザー モードとカーネル モードの両方
のパフォーマンスに影響を与える重要なプロセッサ構造の
間接的な
汚染の両方の点で、システム集約型のワークロードのパフォーマンスに悪影響を及ぼします。システム コール汚染がアプリケーションのパフォーマンスに与える影響を定量化した例を図 1 に示します。これは、システム コールの直前と直後の SPEC CPU 2006 ベンチマークの 1 つ (Xalan) のサイクルあたりのユーザー モード命令数 (カーネル サイクルと命令は無視) を示しています
。システム コールにより、サイクルあたりの命令数 (IPC) が大幅に低下し、このアプリケーションの IPC が以前のレベルに戻るまでに最大 14,000 サイクルの実行が必要になります。後ほど説明するように、このパフォーマンスの低下は主に、主要なプロセッサ構造に対するカーネルによる干渉が原因です。
pwrite - ^ Tanenbaum & Bos 2023、p.8より。
- ^ Arpaci-Dusseau, Remzi; Arpaci-Dusseau, Andrea (2015). オペレーティングシステム: 3つの簡単なピース。2016年7月25日時点のオリジナルよりアーカイブ。 2016年7月25日閲覧。
- ^ Tanenbaum & Bos 2023、10ページ。
- ^ Tanenbaum & Bos 2023、pp.11-12。
- ^ Tanenbaum & Bos 2023、13-14頁。
- ^ Tanenbaum & Bos 2023、14-15ページ。
- ^ Tanenbaum & Bos 2023、15ページ。
- ^ Tanenbaum & Bos 2023、15-16ページ。
- ^ Tanenbaum & Bos 2023、p. 16より。
- ^ Tanenbaum & Bos 2023、17ページ。
- ^ Tanenbaum & Bos 2023、18ページ。
- ^ Tanenbaum & Bos 2023、19-20頁。
- ^ アンダーソンとダーリン、2014 年、39–40 ページ。
- ^ Tanenbaum & Bos 2023、2ページ。
- ^ アンダーソンとダーリン、2014 年、41、45 ページ。
- ^ アンダーソンとダーリン、2014、52–53 ページ。
- ^ ab Kerrisk, Michael (2010). Linuxプログラミングインターフェース. No Starch Press. p. 388. ISBN 978-1-59327-220-3シグナルは、
イベントが発生したことをプロセスに通知するものです。シグナルはソフトウェア割り込みと呼ばれることもあります。
- ^ Hyde, Randall (1996). 「第17章: 割り込み、トラップ、例外 (パート1)」. The Art Of Assembly Language Programming . No Starch Press. 2021年12月22日時点のオリジナルよりアーカイブ。 2021年12月22日閲覧。
割り込みの概念は、長年にわたってその範囲が拡大してきました。80x86ファミリは、int (ソフトウェア割り込み)命令を導入したことで、割り込みを取り巻く混乱をさらに増やしただけです。実際、さまざまなメーカーが、この章で説明する現象を説明するために、例外、障害、アボート、トラップ、割り込みなどの用語を使用しています。残念ながら、これらの用語の正確な意味については明確なコンセンサスがありません。さまざまな著者が独自の使用方法でさまざまな用語を採用しています。
- ^ Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. p. 308. ISBN 978-0-13-854662-5トラップと同様に、
割り込みは実行中のプログラムを停止し、割り込みハンドラに制御を移します。割り込みハンドラは適切なアクションを実行します。終了すると、割り込みハンドラは割り込みを受けたプログラムに制御を返します。
- ^ Silberschatz, Abraham (1994).オペレーティングシステムの概念、第 4 版。Addison-Wesley。p. 32。ISBN 978-0-201-50480-4割り込み (またはトラップ) が発生すると、
ハードウェアは制御をオペレーティング システムに渡します。まず、オペレーティング システムはレジスタとプログラム カウンタを保存して CPU の状態を保存します。次に、どのタイプの割り込みが発生したかを判断します。各タイプの割り込みに対して、オペレーティング システム内の個別のコード セグメントが、実行すべきアクションを決定します。
- ^ Silberschatz, Abraham (1994).オペレーティングシステムの概念、第 4 版。Addison-Wesley。p. 105。ISBN 978-0-201-50480-4CPU を別のプロセスに切り替えるには、
古いプロセスの状態を保存し、新しいプロセス用に保存された状態を読み込む必要があります。このタスクはコンテキスト スイッチと呼ばれます。
- ^ abcde Silberschatz, Abraham (1994).オペレーティングシステムの概念、第 4 版。Addison-Wesley。p. 31。ISBN 978-0-201-50480-4。
- ^ Silberschatz, Abraham (1994).オペレーティングシステムの概念、第 4 版。Addison-Wesley。p. 30。ISBN 978-0-201-50480-4
ハードウェアは、通常はシステム バス経由で CPU に信号を送信することにより、いつでも割り込みをトリガーできます
。 - ^ Kerrisk, Michael (2010). Linuxプログラミングインターフェース. No Starch Press. p. 388. ISBN 978-1-59327-220-3シグナルは、
プログラムの通常の実行フローを中断するという点でハードウェア割り込みに似ていますが、ほとんどの場合、シグナルがいつ到着するかを正確に予測することはできません。
- ^ Kerrisk, Michael (2010). Linuxプログラミングインターフェース. No Starch Press. p. 388. ISBN 978-1-59327-220-3カーネルがプロセスに対してシグナルを生成する原因となるイベントの種類には、
次のものがあります: ソフトウェア イベントが発生しました。 たとえば、プロセスの CPU 時間制限を超えました[.]
- ^ abcde Kerrisk, Michael (2010). Linuxプログラミングインターフェース. No Starch Press. p. 388. ISBN 978-1-59327-220-3。
- ^ 「Intel® 64 および IA-32 アーキテクチャー ソフトウェア開発者マニュアル」(PDF)。Intel Corporation。2016 年 9 月。p. 610。2022年 3 月 23 日時点のオリジナルよりアーカイブ(PDF) 。2022 年5 月 5 日閲覧。
- ^ abc Bach, Maurice J. (1986). UNIX オペレーティングシステムの設計. Prentice-Hall. p. 200. ISBN 0-13-201799-7。
- ^ Kerrisk, Michael (2010). Linux プログラミング インターフェイス。No Starch Press。p. 400。ISBN 978-1-59327-220-3。
- ^ ab Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. p. 308. ISBN 978-0-13-854662-5。
- ^ Silberschatz, Abraham (1994).オペレーティングシステムの概念、第 4 版。Addison-Wesley。p. 182。ISBN 978-0-201-50480-4。
- ^ Haviland, Keith; Salama, Ben (1987). UNIX システムプログラミング. Addison-Wesley Publishing Company. p. 153. ISBN 0-201-12919-1。
- ^ Haviland, Keith; Salama, Ben (1987). UNIX システムプログラミング. Addison-Wesley Publishing Company. p. 148. ISBN 0-201-12919-1。
- ^ ab Haviland, Keith; Salama, Ben (1987). UNIX システムプログラミング. Addison-Wesley Publishing Company. p. 149. ISBN 0-201-12919-1。
- ^ Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. p. 292. ISBN 978-0-13-854662-5。
- ^ IBM (1968年9月)、「主記憶装置」(PDF)、IBM System/360 動作原理(PDF)、第8版、p. 7、2022年3月19日時点のオリジナルよりアーカイブ(PDF) 、 2022年4月13日取得
- ^ ab Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. p. 294. ISBN 978-0-13-854662-5。
- ^ 「プログラム割り込みコントローラ (PIC)」(PDF)。ユーザーズハンドブック - PDP-7 (PDF) 。Digital Equipment Corporation。1965年。pp. 48。F-75。2022年5月10日時点のオリジナルよりアーカイブ(PDF) 。 2022年4月20日閲覧。
- ^ PDP-1 入出力システムマニュアル(PDF) . Digital Equipment Corporation . pp. 19–20. 2019年1月25日時点のオリジナルよりアーカイブ(PDF) . 2022年8月16日閲覧。
- ^ Silberschatz, Abraham (1994).オペレーティングシステムの概念、第 4 版。Addison-Wesley。p. 32。ISBN 978-0-201-50480-4。
- ^ Silberschatz, Abraham (1994).オペレーティングシステムの概念、第 4 版。Addison-Wesley。p. 34。ISBN 978-0-201-50480-4。
- ^ ab Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. p. 295. ISBN 978-0-13-854662-5。
- ^ ab Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. p. 309. ISBN 978-0-13-854662-5。
- ^ Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. p. 310. ISBN 978-0-13-854662-5。
- ^ Stallings, William (2008). Computer Organization & Architecture . ニューデリー: Prentice-Hall of India Private Limited. p. 267. ISBN 978-81-203-2962-1。
- ^ アンダーソンとダーリン、2014、p. 129.
- ^ シルバーシャッツら。 2018、p. 159.
- ^ アンダーソンとダーリン、2014、p. 130.
- ^ アンダーソンとダーリン、2014、p. 131.
- ^ アンダーソンとダーリン、2014、157、159 ページ。
- ^ アンダーソンとダーリン、2014、p. 139.
- ^ シルバーシャッツら。 2018、p. 160.
- ^ アンダーソンとダーリン、2014、p. 183.
- ^ シルバーシャッツら。 2018、p. 162.
- ^ シルバーシャッツら。 2018、162–163ページ。
- ^ シルバーシャッツら。 2018、p. 164.
- ^ アンダーソンとダーリン、2014、492、517 ページ。
- ^ Tanenbaum & Bos 2023、259–260ページ。
- ^ アンダーソン&ダーリン、2014年、517、530ページ。
- ^ Tanenbaum & Bos 2023、260頁。
- ^ アンダーソンとダーリン、2014、492–493 ページ。
- ^ アンダーソンとダーリン、2014、p. 496.
- ^ アンダーソンとダーリン、2014 年、496–497 ページ。
- ^ Tanenbaum & Bos 2023、274-275頁。
- ^ アンダーソンとダーリン、2014、502–504 ページ。
- ^ アンダーソンとダーリン、2014、p. 507.
- ^ アンダーソンとダーリン、2014、p. 508.
- ^ Tanenbaum & Bos 2023、359ページ。
- ^ アンダーソンとダーリン、2014、p. 545。
- ^ ab アンダーソン & ダーリン 2014、p. 546.
- ^ アンダーソンとダーリン、2014、p. 547.
- ^ アンダーソン&ダーリン、2014年、589、591ページ。
- ^ アンダーソンとダーリン、2014、591–592 ページ。
- ^ Tanenbaum & Bos 2023、385-386頁。
- ^ ab アンダーソン & ダーリン 2014、p. 592.
- ^ Tanenbaum & Bos 2023、605-606頁。
- ^ Tanenbaum & Bos 2023、608頁。
- ^ Tanenbaum & Bos 2023、609ページ。
- ^ Tanenbaum & Bos 2023、609–610頁。
- ^ Tanenbaum & Bos 2023、612ページより。
- ^ Tanenbaum & Bos 2023、648、657頁。
- ^ Tanenbaum & Bos 2023、668-669、674頁。
- ^ Tanenbaum & Bos 2023、679-680頁。
- ^ Tanenbaum & Bos 2023、605、617-618頁。
- ^ Tanenbaum & Bos 2023、681-682頁。
- ^ Tanenbaum & Bos 2023、683ページ。
- ^ Tanenbaum & Bos 2023、685頁。
- ^ Tanenbaum & Bos 2023、689頁。
- ^ リシェ&ブアイナヤ 2023、p. 92.
- ^ リシェとブアイナヤ 2023、92–93 ページ。
- ^ Berntsso、Strandén & Warg 2017、130–131 ページ。
- ^ Tanenbaum & Bos 2023、611頁。
- ^ Tanenbaum & Bos 2023、396、402ページ。
- ^ Tanenbaum & Bos 2023、395、408頁。
- ^ Tanenbaum & Bos 2023、402ページ。
- ^ Holwerda, Thom (2009年12月20日). 「私のOSはあなたのOSよりも趣味が少ない」. OSニュース. 2024年6月4日閲覧。
- ^ 「モバイルおよびタブレットオペレーティングシステムの世界市場シェア」。StatCounter Global Stats 。 2023年10月2日閲覧。
- ^ シルバーシャッツら。 2018、779–780ページ。
- ^ Tanenbaum & Bos 2023、713-714頁。
- ^ ab Silberschatz et al. 2018、p. 780。
- ^ Vaughan-Nichols, Steven (2022). 「Linus Torvalds が Linux カーネルを最新の C に移行する準備を進める」ZDNET . 2024 年2 月 7 日閲覧。
- ^ シルバーシャッツら。 2018、p. 781。
- ^ Tanenbaum & Bos 2023、715-716頁。
- ^ Tanenbaum & Bos 2023、793-794頁。
- ^ Tanenbaum & Bos 2023、793ページ。
- ^ Tanenbaum & Bos 2023、pp.1021-1022。
- ^ Tanenbaum & Bos 2023、871頁。
- ^ シルバーシャッツら。 2018、p. 826。
- ^ Tanenbaum & Bos 2023、p. 1035より引用。
- ^ Tanenbaum & Bos 2023、p. 1036より引用。
- ^ シルバーシャッツら。 2018、p. 821。
- ^ シルバーシャッツら。 2018、p. 827。
さらに読む
- アンダーソン、トーマス、ダーリン、マイケル (2014)。オペレーティングシステム: 原理と実践。Recursive Books。ISBN 978-0-9856735-2-9。
- Auslander, MA; Larkin, DC; Scherr , AL (1981 年 9 月)。「MVS オペレーティング システムの進化」。IBM Journal of Research and Development。25 ( 5): 471–482。doi :10.1147/rd.255.0471。ISSN 0018-8646 。
- Berntsson, Petter Sainio; Strandén, Lars; Warg, Fredrik (2017)。安全性重視のアプリケーション向けオープンソースオペレーティングシステムの評価。Springer International Publishing。pp. 117–132。ISBN 978-3-319-65948-0。
- Deitel, Harvey M.; Deitel, Paul; Choffnes, David (2015 年 12 月 25 日)。『オペレーティング システム』。Pearson /Prentice Hall。ISBN 978-0-13-092641-8。
- Bic, Lubomur F.; Shaw, Alan C. (2003).オペレーティングシステム. ピアソン: Prentice Hall .
- Silberschatz, Avi; Galvin, Peter; Gagne, Greg (2008).オペレーティングシステムの概念. John Wiley & Sons . ISBN 978-0-470-12872-5。
- O'Brien, JA、Marakas, GM(2011)。経営情報システム。第10版。McGraw-Hill Irwin。
- レバ、アルベルト。マッジョ、マルティナ。パパドプロス、アレッサンドロ・ヴィットリオ。フェデリコ・テラネオ(2013)。制御ベースのオペレーティング システムの設計。IET。ISBN 978-1-84919-609-3。
- Richet, Jean-Loup; Bouaynaya, Wafa (2023). 「複雑なソフトウェアの脆弱性の理解と管理: オープンソースオペレーティングシステムの実証分析」. Systèmes d'information & management . 28 (1): 87–114. doi :10.54695/sim.28.1.0087 (2024年6月13日現在非アクティブ).
{{cite journal}}: CS1 メンテナンス: DOI は 2024 年 6 月現在非アクティブです (リンク) - シルバーシャッツ、アブラハム; ガルビン、ピーター B.; ガニエ、グレッグ (2018)。オペレーティングシステムの概念 (第 10 版) 。Wiley。ISBN 978-1-119-32091-3。
- Tanenbaum, Andrew S.; Bos, Herbert (2023)。Modern Operating Systems, Global Edition。Pearson Higher Ed. ISBN 978-1-292-72789-9。
外部リンク
- Curlieのオペレーティング システム
- Multicsの歴史とオペレーティングシステムの歴史
