コンピュータの電源を入れると、自分が制御できていると思うのは良いことです。画面上のどこにでも移動できる信頼できるマウスがあり、ほんの少しの気まぐれで音楽ライブラリやインターネット ブラウザを呼び出すことができます。デスクトップやラップトップの前ではディレクターのような気分になりがちですが、内部ではさまざまなことが起こっており、カーテンの後ろで必要なタスクを処理している実際の人物はオペレーティング システムです。
Microsoft Windows は、私たちが仕事や個人で使用するほとんどのコンピューターに搭載されています。 Macintosh コンピュータには、macOS がプリロードされています。 Linux および UNIX オペレーティング システムはデジタル コンテンツ サーバーとして人気がありますが、多くのディストリビューションやディストリビューションが日常的に使用されるようになってきています。どちらを選択しても、オペレーティング システムがなければ何もできません。
他のデバイスには独自のオペレーティング システムがあります。 2020 年代現在、スマートフォンの OS としては Google の Android と Apple の iOS が最も一般的ですが、一部のメーカーは主に Android オペレーティング システムに基づいて独自の OS を開発しています。 Apple は iPadOS を搭載した iPad を出荷し、Apple Watch は watchOS を搭載し、Apple TV は tvOS を使用します。そして、独自のオペレーティング システムを備えた他のあらゆる種類のデバイスが存在します。モノのインターネット デバイス、スマート TV、および を実行するシステムを考えてください。それには自動運転車も含まれていません。
オペレーティング システムの目的は、オペレーティング システムが搭載されているデバイスが柔軟かつ予測可能な方法で動作するように、ハードウェアとソフトウェアを編成および制御することです。この記事では、ソフトウェアがオペレーティング システムと呼ばれるために何をしなければならないかを説明し、デスクトップ コンピューターのオペレーティング システムがどのように機能するかを示し、周囲の他のオペレーティング システムを制御する方法の例をいくつか示します。あなた。
オペレーティング システムとは何ですか?
すべてのコンピュータにオペレーティング システムが搭載されているわけではありません。たとえば、キッチンの電子レンジを制御するコンピューターにはオペレーティング システムは必要ありません。実行するタスクは 1 セット、非常に簡単な入力 (数字キーパッドといくつかのプリセット ボタン)、および制御するシンプルで変更のないハードウェアがあります。このようなマシンの場合、精巧なオペレーティング システムは不必要なお荷物となり、開発コストと製造コストが大幅に上昇し、必要のない部分でも複雑さが増します。代わりに、電子レンジ内のコンピューターは、 と呼ばれる単一の配線されたプログラムを常に実行しているだけです。
他のデバイスの場合、オペレーティング システムは次の機能を作成します。
- さまざまな用途に対応
- より複雑な方法でユーザーと対話する
- 時代とともに変化するニーズに対応し続ける
すべてのデスクトップ コンピューターにはオペレーティング システムが搭載されています。最も一般的なのは、 Microsoftが開発した Windows ファミリのオペレーティング システム、Apple が開発した Macintosh オペレーティング システム、および歴史を通じて個人、企業、および協力者によって開発された UNIX ファミリのオペレーティング システムです。メインフレーム、ロボット工学、製造、リアルタイム制御システムなどの特殊用途を含む、特殊用途に使用できるオペレーティング システムは他にも何百もあります。
オペレーティング システムを搭載したデバイスには、通常、デバイスの動作方法を変更する方法があります。これは決して幸せな偶然とは言えません。オペレーティング システムが永続的な物理回路ではなくポータブル コードを使用する理由の 1 つは、デバイス全体を廃棄することなく変更または修正できるようにするためです。
デスクトップ コンピュータ ユーザーにとって、これは、コンピュータをジャンクにして、変更が必要なときに新しいコンピュータでやり直すのではなく、新しいセキュリティ アップデート、システム パッチ、新しいアプリケーション、さらにはまったく新しいオペレーティング システムを追加できることを意味します。オペレーティング システムがどのように機能し、その方法を理解していれば、多くの場合、オペレーティング システムの動作の一部を変更できます。
オペレーティング システムが実行するデバイスが何であっても、正確には何ができるのでしょうか?
オペレーティング システムの機能
最も単純なレベルでは、オペレーティング システムは次の 2 つのことを行います。
最初のタスクであるハードウェアおよびソフトウェア リソースの管理は、さまざまなプログラムや入力メソッドが (CPU) の注意を奪い合い、それぞれの目的のためにメモリ、ストレージ、および入出力 (I/O) 帯域幅を要求するため、非常に重要です。この点で、オペレーティング システムは優れた親の役割を果たし、各アプリケーションが他のすべてのアプリケーションとうまく連携しながら必要なリソースを確実に取得できるようにするだけでなく、限られたシステムの能力をすべてのアプリケーションの最大の利益のために活用します。ユーザーとアプリケーション。
2 番目のタスクである一貫した を提供することは、オペレーティング システムを使用する特定の種類のコンピュータが複数ある場合、またはコンピュータを構成するハードウェアが常に変更される可能性がある場合に特に重要です。一貫した (API) を使用すると、ソフトウェア開発者は 1 台のコンピュータ上でアプリケーションを作成し、たとえメモリの量やストレージの量が異なる場合でも、同じタイプの別のコンピュータ上で実行できるという高い信頼性を得ることができます。 2台のマシン。
特定の障害が発生した場合でも、オペレーティング システムは、ハードウェアのアップグレードや更新が行われたときにアプリケーションが実行し続けることを保証します。これは、アプリケーションではなくオペレーティング システムがハードウェアとそのリソースの配布の管理を担当しているためです。開発者が直面している課題の 1 つは、コンピューター機器を製造する何千ものベンダーのハードウェアを実行できる十分な柔軟性をオペレーティング システムに維持することです。今日のシステムは、何千もの異なるプリンタ、ディスク ドライブ、特殊な周辺機器を可能な限り組み合わせて搭載できます。
オペレーティング システムの種類
オペレーティング システムの広範なファミリーには、制御するコンピュータの種類とサポートするアプリケーションの種類に基づいて分類されたいくつかの種類があります。カテゴリは次のとおりです。
- リアルタイム オペレーティング システム(RTOS) – 機械、科学機器、産業システムの制御に使用されます。通常、RTOS にはユーザー インターフェイス機能がほとんどなく、システムが使用のために納品されるときは「密閉された箱」であるため、エンドユーザー ユーティリティもありません。 RTOS では、特定の操作が発生するたびに正確に同じ時間で実行されることが重要です。複雑なマシンでは、システム リソースが利用可能であるという理由だけで部品がより速く動作することは、システムがビジーであるために部品がまったく動かないことと同じくらい致命的である可能性があります。
- シングル ユーザー、シングル タスク– 名前が示すように、このオペレーティング システムは、1 人のユーザーが効果的に作業できるようにコンピュータを管理するように設計されています。 MS-DOS は、シングルユーザー、シングルタスクのオペレーティング システムの良い例です。
- シングルユーザー、マルチタスク– これは、現在ほとんどの人がデスクトップ コンピューターやラップトップ コンピューターで使用しているタイプのオペレーティング システムです。 Microsoft の Windows プラットフォームと Apple の macOS プラットフォームはどちらも、1 人のユーザーが複数のアプリケーションを同時に実行できるオペレーティング システムの例です。たとえば、Windows ユーザーがインターネットからファイルをダウンロードしたり、電子メール メッセージのテキストを印刷したりしながら、ワード プロセッサでメモを書いている可能性は十分にあります。
- マルチユーザー– マルチユーザー オペレーティング システムを使用すると、多くの異なるユーザーがコンピュータのリソースを同時に利用できるようになります。オペレーティング システムは、さまざまなユーザーの要件のバランスが取れていること、およびユーザーが使用している各プログラムに十分な個別のリソースがあることを確認して、1 人のユーザーの問題がユーザーのコミュニティ全体に影響を及ぼさないようにする必要があります。 Unix、VMS、およびMVSなどは、マルチユーザー オペレーティング システムの例です。
- 分散– これらのオペレーティング システムを同時に使用します。大きな問題に対処するために 1 台の強力なコンピューターを使用するのではなく、OS を多数の小型コンピューターに分散させました。これらのシステムは巨大なサーバー ファームで見つかるかもしれませんが、教育者も安価なマシンや再利用したゲーム コンソールを使用して独自の分散システムを作成することもあります。
をサポートするマルチユーザー オペレーティング システムとシングルユーザー オペレーティング システムを区別することが重要です。システム管理者が職場のコンピュータにどのソフトウェアを使用できるか、または使用できないかを制御するオフィスで働いている場合は、ネットワークの一部であるシングルユーザー システムを使用していることになります。他の従業員と共有しているプリンタでドキュメントを印刷したり、部門のドキュメントを保存するプリンタを使用したりできます。
さまざまな種類のオペレーティング システムを念頭に置いて、オペレーティング システムが提供する基本的な機能を見てみましょう。
コンピュータのオペレーティング システム
コンピューターの電源を入れると、通常、最初に実行されるプログラムは、コンピューターのファームウェアに保存されている と呼ばれる一連の命令です。一般的な PC の場合は (BIOS)、新しいマシンでは (UEFI) になります。このコードはシステム ハードウェアを調べて、すべてが適切に機能していること、UEFI の場合は安全であることを確認します。テストが正常に完了すると、ファームウェアが .
ブートストラップ ローダー (または ) は、単一の機能を持つ小さなプログラムです。オペレーティング システムをメモリにロードし、動作を開始できるようにします。最も基本的な形式では、ブートストラップ ローダーは、コンピューターのさまざまなハードウェア サブシステムとインターフェイスして制御する小さなドライバー プログラムをセットアップします。オペレーティング システム、ユーザー情報、アプリケーションを保持するメモリの分割を設定します。これは、コンピュータのサブシステムおよびアプリケーション内およびそれらの間で通信するために使用される無数の信号、フラグ、およびセマフォを保持するデータ構造を確立します。その後、コンピュータの制御がオペレーティング システムに渡されます。
最も一般的な意味では、 はいくつかのカテゴリに分類されます。
- プロセッサ管理
- メモリ管理
- デバイス管理
- ストレージ管理
- アプリケーションインターフェース
- ユーザーインターフェース
- システムセキュリティ管理
これらのタスクは、ほぼすべてのオペレーティング システムの中核を定義します。次に、オペレーティング システムがこれらの各機能を実行するために使用するツールを見てみましょう。
プロセッサ管理
プロセッサ管理の核心は、次の 2 つの関連する問題に帰着します。
- 各プロセスとアプリケーションが適切に機能するために十分なプロセッサ時間を確保できるようにする
- 実際の作業にはできるだけ多くのプロセッサ サイクルを使用する
オペレーティング システムがプロセッサによって実行される作業をスケジュールする際に処理するソフトウェアの基本単位。アプリケーションには少なくとも 1 つのプロセスが含まれており、各プロセス内には少なくとも 1 つのスレッドがあります。スレッドとオペレーティング システムは、スレッドと同じくらい小さな単位であっても、適切に機能するために必要なリソースを割り当てて管理します。
プロセスをアプリケーションとして考えてしまいがちですが、それではプロセスがオペレーティング システムやハードウェアにどのように関係するのかが不完全になってしまいます。表示されているアプリケーション (ワード プロセッサ、スプレッドシート、またはゲーム) ですが、そのアプリケーションは、他のデバイスや他のコンピュータとの通信などのタスクのために、他のいくつかのプロセスを開始する可能性があります。また、プロセスが存在するという直接的な証拠を示さずに実行されるプロセスも多数あります。たとえば、オペレーティング システムでは、ネットワーク、メモリ管理、ディスク管理、ウイルスチェックなどを処理するために、数十のバックグラウンド プロセスが実行されていることがあります。
つまり、プロセスとは、何らかのアクションを実行し、ユーザー、他のアプリケーション、またはオペレーティング システムによって制御できるソフトウェアです。
オペレーティング システムが制御し、CPU による実行をスケジュールするのは、アプリケーションではなくプロセスです。シングルタスク システムでは、スケジュールは簡単です。オペレーティング システムは、アプリケーションの実行を開始し、割り込みやユーザー入力に対処するのに十分な時間だけ実行を一時停止します。
ハードウェアまたはソフトウェアによって CPU に送信されます。まるで、活発な会議中にコンピューターの一部が突然手を挙げて CPU の注意を求めたかのようです。オペレーティング システムは、割り込みがマスクされるようにプロセスの優先順位をスケジュールすることがあります。つまり、オペレーティング システムは、特定のジョブをできるだけ早く終了できるように、一部のソースからの割り込みを無視します。一部の割り込み (エラー状態やメモリの問題など) は無視できないほど重要です。たとえば、ラップトップのバッテリー切れを指摘するメッセージの配信などです。これらのノンマスカブル割り込み(NMI) は、実行中の他のタスクに関係なく行われます。
シングルタスク システムでは割り込みによりプロセスの実行が若干複雑になりますが、マルチタスク システムではオペレーティング システムのジョブがさらに複雑になります。ここで、オペレーティング システムは、複数のことが同時に起こっていると思われるようにアプリケーションの実行を調整する必要があります。各 CPU は一度に 1 つのことしか実行できないため、これは複雑です。今日のマルチコア プロセッサとマルチプロセッサ マシンは、より多くの作業を処理できますが、各プロセッサ コアは依然として一度に 1 つのタスクを管理できます。
多くのことが同時に起こっているように見せるために、オペレーティング システムは異なるプロセス間を 1 秒間に何千回も切り替える必要があります。その様子は次のとおりです。
- プロセスは一定量の RAM を占有します。また、CPU およびオペレーティング システムのメモリ空間内のレジスタ、スタック、キュー (コンピュータ ストレージの形式) も利用します。
- 2 つのプロセスがマルチタスクである場合、オペレーティング システムは 1 つのプログラムに一定数の CPU 実行サイクルを割り当てます。
- そのサイクル数が経過すると、オペレーティング システムはプロセスが使用するすべてのレジスタ、スタック、キューのコピーを作成し、プロセスが実行中に一時停止したポイントを記録します。
- 次に、2 番目のプロセスで使用されるすべてのレジスタ、スタック、キューをロードし、一定数の CPU サイクルを許可します。
- これらが完了すると、2 番目のプログラムで使用されるすべてのレジスタ、スタック、キューのコピーが作成され、最初のプログラムがロードされます。
プロセス制御ブロック
切り替え時にプロセスを追跡するために必要な情報はすべて、プロセス制御ブロックと呼ばれるデータ パッケージに保存されます。プロセス制御ブロックには通常、次のものが含まれます。
- プロセスを識別するID番号
- 最後に処理が行われたプログラムおよびそのデータ内の場所へのポインター
- 登録内容
- 各種フラグやスイッチの状態
- プロセスに必要なメモリの上限と下限へのポインタ
- プロセスによって開かれたファイルのリスト
- プロセスの優先順位
- プロセスに必要なすべての I/O デバイスのステータス
各プロセスにはステータスが関連付けられています。多くのプロセスは、何らかの入力を取得するまで CPU 時間を消費しません。たとえば、プロセスはユーザーからのキーストロークを待っている可能性があります。キーストロークを待機している間、CPU 時間は使用されません。キーストロークが到着すると、OS のステータスが変わります。プロセスのステータスが保留からアクティブに変化したとき、または一時停止から実行中に変化したときは、プロセス制御ブロック内の情報を他のプログラムのデータと同様に使用して、オペレーティング システムのタスク切り替え部分の実行を指示する必要があります。 。
このプロセスの交換はユーザーの直接的な介入なしに行われ、各プロセスは適切な時間内にタスクを完了するのに十分な CPU サイクルを取得します。ユーザーが同時に機能させるプロセスが多すぎると、問題が発生する可能性があります。オペレーティング システム自体は、アプリケーション プロセスのすべてのレジスタ、キュー、スタックの保存とスワップを実行するために、ある程度の CPU サイクルを必要とします。
各プロセスには独自のメモリ割り当てが必要ですが、オペレーティング システムは負荷のバランスをとる必要があります。開くアプリケーションの数が増えるほど、各アプリが動作するために必要なメモリが少なくなります。十分な数のプロセスが開始され、オペレーティング システムが慎重に設計されていない場合、システムは、プロセスを実行するのではなく、プロセス間のスワップに利用可能な CPU サイクルをより多く使用し始めます。これが発生すると、通常、プロセスを停止してシステムに秩序を戻すために、何らかの直接的なユーザー介入が必要になります。それはすぐにあなたによく似ています。限界に達すると、圧倒されてしまうでしょう。それがコンピュータにとってのスラッシングです。
開発者はスラッシングを回避するようにシステムを設計しますが、コンピュータに RAM を追加し、使用していないアプリケーションを閉じることで回避できます。これにより、OS がリソースをより効果的に管理し、スムーズな動作を維持できるようになります。
これまで説明してきたスケジューリングはすべて、単一の CPU に関するものでした。 2 つ以上の CPU を備えたシステムでは、オペレーティング システムはワークロードを CPU 間で分割し、必要なプロセスの要求と、さまざまなプロセッサで利用可能なサイクルのバランスをとろうとします。独自のニーズに合わせて 1 つのプロセッサを使用し、アプリケーション プロセスを残りの CPU に分割します。対称オペレーティング システムは、オペレーティング システム自体が実行されているだけの場合でも、さまざまなプロセッサ間で作業を分割し、需要と可用性のバランスをとります。これらは使用可能なメモリを共有します。実際、対称処理は同じチップ上での使用にも適用されます。
あなたの状況によっては、今まさにそうなっているかもしれません。
実行が必要なソフトウェアがオペレーティング システムだけである場合、スケジュールする必要があるリソースはプロセッサだけではありません。メモリ管理は、すべてのプロセスがスムーズに実行されるようにするための次の重要なステップです。
メモリのストレージと管理
オペレーティング システムがコンピュータのメモリを管理する場合、達成すべきタスクは大きく分けて 2 つあります。
- 各プロセスには実行に十分なメモリが必要であり、別のプロセスによって実行されることも、実行されることもできません。
- 各プロセスが最も効率的に実行できるように、システム内のさまざまなタイプのメモリを適切に使用する必要があります。
最初のタスクでは、オペレーティング システムがソフトウェアの種類および個々のアプリケーションに対してメモリ境界を設定する必要があります。
例として、1 メガバイト (1,000 キロバイト) のRAMを備えた架空の小規模システムを見てみましょう。ブート プロセス中に、架空のコンピューターのオペレーティング システムは、オペレーティング システム自体のニーズを満たすのに十分なメモリを割り当てます。オペレーティング システムを実行するには 300 キロバイトが必要だとします。ここで、オペレーティング システムは RAM プールの一番下に移動し、コンピューターのハードウェア サブシステムを制御するために必要なさまざまなドライバー ソフトウェアの構築を開始します。私たちの想像上のコンピューターでは、ドライバーは 200 キロバイトを占有します。したがって、オペレーティング システムが完全にロードされると、アプリケーション プロセス用に 500 キロバイトが残ります。
アプリケーションがメモリにロードされ始めると、オペレーティング システムはアプリケーションにメモリ量を割り当てます。次のアプリケーションが起動すると、オペレーティング システムは、最新のアプリケーションを実行するのに十分なメモリを確保するために、開いている他のアプリケーションからメモリを割り当てます。それが保証されたとしても、より大きな問題は、500 キロバイトのアプリケーション スペースがいっぱいになった場合にどうするかということです。
ほとんどのコンピューターでは、元の容量を超えてメモリを追加できます。たとえば、コンピュータの RAM を 8 ギガバイトから 16 ギガバイトに拡張するとします。しかし、アプリケーションがメモリに保存する情報のほとんどは、どの瞬間にも使用されていません。プロセッサは一度に 1 つのメモリ位置にのみアクセスできるため、RAM の大部分はいつでも未使用になります。使用されている部品に常に対応するオペレーティング システム。これにより、各プロセスに独自のスペースが与えられ、プロセスが相互に破損するのを防ぎます。この技術は、仮想メモリ管理と呼ばれます。
ディスク ストレージは、オペレーティング システムで管理する必要があるメモリ タイプの 1 つにすぎず、最も遅いメモリ タイプでもあります。コンピュータ システムのメモリの種類を速度の順にランク付けすると、次のようになります。
- 高速キャッシュ:これは、最速の接続を通じて CPU が利用できる、高速で比較的少量のメモリです。キャッシュ コントローラーは、CPU が次にどのデータを必要とするかを予測し、それをメイン メモリから高速キャッシュに引き出して、システム パフォーマンスを高速化します。
- メイン メモリ:これは、コンピュータを購入するときにギガバイト単位で測定される RAM です。
- 二次メモリ:これは多くの場合、コンピュータ内のハード ドライブ (HDD) またはソリッド ステート ドライブ (SSD) であり、オペレーティング システムの制御下で仮想 RAMとして機能します。
オペレーティング システムは、さまざまなプロセスのニーズとさまざまな種類のメモリの可用性のバランスをとり、プロセスのスケジュールに従って使用可能なメモリ間でデータを移動する必要があります。
デバイス管理
オペレーティング システムと、コンピューターのマザーボード上にない実質的にすべてのハードウェアの間のパスは、ドライバーと呼ばれるものを経由します。ドライバーの機能の多くは、ハードウェア サブシステムの電気信号と、オペレーティング システムおよびアプリケーション プログラムの高レベル プログラミング言語の間の変換器として機能します。ドライバーは、オペレーティング システムがファイルとして定義したデータを取得し、ストレージ デバイス上の特定の場所に配置されるビットのストリーム、またはプリンターの一連のレーザー パルスに変換します。
ハードウェアには大きな違いがあるため、ドライバー プログラムの機能にも違いがあります。ほとんどはデバイスが必要なときに実行され、他のプロセスとほぼ同じように機能します。オペレーティング システムは、ハードウェア リソースをできるだけ早く解放してさらに使用できるようにするために、優先度の高いブロックをドライバーに頻繁に割り当てます。
ドライバーがオペレーティング システムから分離されている理由の 1 つは、オペレーティング システム自体の変更、再コンパイル、再配布を必要とせずに、新しい機能をドライバー (つまりハードウェア サブシステム) に追加できるためです。多くのドライバーは、オペレーティング システムの発行元ではなく、サブシステムの製造元によって作成または支払われます。これにより、システム全体の入出力機能を更新および強化する機会が得られます。
オペレーティング システムの発行元は、コンピューターを更新するためのデバイス ドライバーも作成します。 Windows と macOS 用の最新ドライバーは、それらをリリースしている収益性の高い大企業から提供されることを期待するのが簡単ですが、Linux マシンやその他のオープンソース OS は、多くの場合、時間とコーディング スキルをボランティアで提供してくれるコミュニティ内の開発者に依存しています。システムおよび周辺機器のドライバーを提供します。
入出力の管理は主に、デバイス (おそらくキーボードやシリアル ポート) からビットのストリームを取得する特別なストレージ機能の管理の問題であり、それらのビットを保持し、プロセッサが対応できる速度でプロセッサに解放します。 。この機能は、多くのプロセスが実行されてプロセッサ時間を占有している場合に特に重要です。バッファは、デバイスからの入力の取得を継続しますが、入力を使用するプロセスが一時停止されている間、プロセッサへのデータの送信を停止します。その後、入力を必要とするプロセスが再びアクティブになると、オペレーティング システムはバッファにデータを送信するように命令します。このプロセスにより、プロセッサが外部ユーザーやコンピュータからの入力を使用できない場合でも、キーボードやモデムが外部ユーザーやコンピュータを高速に処理できるようになります。
コンピュータ システムのすべてのリソースを管理することは、オペレーティング システムの機能のほとんどを占め、リアルタイム オペレーティング システムの場合は、実質的に必要なすべての機能を管理できる可能性があります。ただし、他のオペレーティング システムの場合は、アプリケーションと人間がハードウェアの能力を使用するための比較的シンプルで一貫した方法を提供することが、オペレーティング システムの存在理由の重要な部分です。
アプリケーション プログラム インターフェイス
ドライバーが、ハードウェアの動作の詳細を知らなくてもアプリケーションがハードウェア サブシステムを利用できる方法を提供するのと同様に、(API) を使用すると、アプリケーション プログラマーは、アプリケーションの詳細をすべて直接追跡することなく、コンピューターとオペレーティング システムの機能を使用できます。 CPUの動作。データを保持するためのハードディスク ファイルを作成する例を見て、これがなぜ重要であるかを見てみましょう。
科学機器からのデータを記録するアプリケーションを作成するプログラマーは、科学者が作成するファイルの名前を指定できるようにしたい場合があります。オペレーティング システムには、ファイルを作成するためのMakeFileという名前の API 関数が提供されている場合があります。プログラムを作成するとき、プログラマは次のような行を挿入します。
この例では、この命令は、データへのランダム アクセスを許可するファイルを作成するようにオペレーティング システムに指示します (1 で示されます。シリアル ファイルの場合は、他のオプションは 0 になる可能性があります)。ファイルにはユーザーが入力した名前が付けられます ( %Name) で、ファイルに保存されているデータの量に応じてサイズが変わります (2 で示されます。他のオプションは、固定サイズの場合は 0、データが追加されると増加しないファイルの場合は 1 になります)データが削除されると縮小します)。ここで、命令を実行するためにオペレーティング システムが何を行うかを見てみましょう。
オペレーティング システムは、ディスク ドライブにクエリを送信して、最初に利用可能な空きストレージの場所を取得します。
この情報を使用して、オペレーティング システムは、ファイルの開始位置と終了位置、ファイル名、ファイルの種類、ファイルがアーカイブされているかどうか、どのユーザーが参照または変更する権限を持っているかを示すエントリをファイル システムに作成します。ファイル、およびファイルの作成日時。
プログラマは、ディスク ストレージ用の API を使用するプログラムを作成しているため、プログラマは、考えられるすべてのハード ディスクおよびテープ ドライブの命令コード、データ タイプ、および応答コードを把握しています。オペレーティング システムは、さまざまなハードウェア サブシステムのドライバーに接続されており、ハードウェアの変化する詳細を処理します。プログラマは API のコードを記述するだけで、残りの作業はオペレーティング システムに任せることができます。残念ながら、API を介してソフトウェアにアクセスすると、アプリケーションを有効に使用したり、場合によってはコンピュータへの他のアクセスを取得したりすることになります。これは API が悪いという意味ではありませんが、開発者は脆弱性の作成を避け、脆弱性が見つかった場合はパッチを適用する必要があります。
それでも、API は近年のコンピューター業界で最も重要なものの 1 つとなっています。企業は、自社の API を使用するプログラマーが最終的には業界の特定の部分からこれを翻訳することになることを認識しています。開発者は、リーダーやビューアなどのアプリケーションを無料で一般に提供すると、消費者のソフトウェアの使用が促進されることを知っていますが、消費者が要求する機能を自社のソフトウェアで提供できるようにするために、他の開発者がロイヤルティを支払うことを期待する場合もあります。他にも多くの人がそれらを公開しています。
ユーザーインターフェース
API がアプリケーションがコンピュータシステムのリソースを使用するための一貫した方法を提供するのと同じように、ユーザー インターフェイス(UI) はユーザーとコンピュータ間の対話に構造をもたらします。過去 10 年間、ユーザー インターフェイスの開発はほぼすべてグラフィカル ユーザー インターフェイス(GUI) で行われ、Apple の macOS と Microsoft の Windows が最も注目を集め、市場シェアの大部分を占めました。
Linux のほとんどの () ディストリビューションには GUI が含まれています。 GUI ベースの Linux ディストリビューションの場合、ディストリビューションをリリースする組織がオペレーティング システム用の を選択します。ただし、Linux ユーザーは必要に応じて決定することができます。 Cinnamon、GNOME、KDE、Xfce は、Linux でよく使用されるデスクトップ環境です。
UNIX は、GUI よりも柔軟で強力な 、つまりシェルと関連付けられることがよくあります。シェル インターフェイスはテキストのみであり、 typed を使用する必要があるため、ポイントしてクリックすることに慣れているユーザーにとっては威圧的になる可能性があります。および は重要なユーティリティを追加するテキストベースのインターフェイスですが、その主な目的はユーザーがオペレーティング システムの機能を簡単に操作できるようにすることです。ただし、UNIX ユーザーも GUI を使用できます。開発者にとっての利点の 1 つは、一度にウィンドウを開いて複数の作業を同時に行えることです。
Windows、macOS、Linux はすべて、コマンド ラインにアクセスしたい、またはアクセスする必要があるユーザー向けに、シェル アプリケーションまたはターミナルアプリケーションを提供します。
これらすべての例において、ユーザー インターフェイスは、オペレーティング システム自体の上の層として位置するプログラムまたはプログラムのセットであることを覚えておくことが重要です。オペレーティング システムの中核機能、つまりコンピュータ システムの管理は、 にあります。オペレーティング システムのカーネルとユーザー インターフェイス、ユーティリティ、その他のソフトウェアとの関係は、今日のオペレーティング システムの違いの多くを定義しており、将来的にはさらにその違いを定義することになります。
オペレーティングシステムの開発
デスクトップ システムにとって、ネットワークへのアクセスは非常に期待されている機能となっているため、他のコンピューターやサーバーへの接続を参照せずにオペレーティング システムを語ることは、多くの点で困難です。オペレーティング システムの開発者は、重要なオペレーティング システムのアップデートやバグ修正を提供するための標準的な方法としてインターネットを採用しました。これらのアップデートをDVDまたはフラッシュ ドライブ経由で受信することも可能ですが、それはまれになってきています。
オペレーティング システムの将来に関する 1 つの疑問は、企業と消費者が一緒に使用できるオペレーティング システムを作成するソフトウェア配布の特定の哲学の能力に関するものです。
Linux は、 に従って作成および配布されたオペレーティング システムであり、オペレーティング システム全般に大きな影響を与えています。ほとんどのシステム、ドライバー、ユーティリティ プログラムは、ソフトウェアの実行可能バージョン(通常は調査や変更ができないバージョン、別名クローズド ソース) を配布する営利組織によって作成されています。オープンソースでは、研究、改変、構築が可能なオリジナルのソース資料を配布する必要があり、結果は再び自由に配布されます。デスクトップ コンピュータの分野では、これにより、画像操作プログラム、人気のオフィス スイート、人気の Web サーバーなど、無数の便利なアプリケーションが開発および配布されてきました。
携帯電話などの多くの消費者向けデバイスは、オペレーティング システムへのアクセスを意図的にユーザーから隠していますが、これは主に、不注意で破損したり削除されたりしないようにするためです。多くの場合、「開発者モード」または「プログラマ モード」は、見つけられれば変更できるように開いたままになっています。多くの場合、これらのシステムは、限られた範囲の変更しかできないようにプログラムされていることがあります。