オペレーティング システム (1) --- オペレーティング システム、同時実行、共有、仮想、非同期、システム コールの概念、およびオペレーティング システムの動作メカニズムとアーキテクチャ。

目次

1. オペレーティング システムとは何ですか?

次に、オペレーティング システムの開発段階:

手動オペレーティング システム:

シングルパスバッチプロセッサ:

 マルチパス バッチ プロセッサ:編集

 タイムシェアリング オペレーティング システム:

リアルタイム オペレーティング システム:

3、オペレーティング システムの 4 つの特徴:

同時実行性:

共有:

仮想性:

 非同期性:

4. オペレーティングシステムの動作メカニズムとアーキテクチャ:

 プログラムはどのように機能するのでしょうか?

CPUユーザーモードとカーネルモード:

オペレーティング システム カーネル:

アウターコアオペレーティングシステム:

5. 中断:

6. オペレーティング システムの起動:

 7、仮想マシン:

8. システムコール:

システムコールとは何ですか?

なぜシステムコールを使用するのでしょうか?

システムコールが必要になるのはどのような場合ですか?

システムコールのプロセス:


1. オペレーティング システムとは何ですか?

オペレーティング システム (オペレーティング システム、OS) は、コンピュータ システム全体のハードウェアおよびソフトウェアリソースの制御と管理を指し、コンピュータの作業とリソースの割り当てを合理的に編成およびスケジュールし、ユーザーやその他のソフトウェアに機能を提供します。便利なインターフェイスと環境、コンピュータ システムの最も基本的なシステム ソフトウェアです

 OSはハードウェアに最も近いソフトウェアであるリソースマネージャーであり、上位層に便利で使いやすいサービスを提供します。

ユーザーのグラフィカルインターフェースとコマンドインターフェースを提供

  •  オンライン コマンド インターフェイス: ユーザーがコマンドを入力すると、オペレーティング システムがコマンドを実行します。
  • オフライン コマンド インターフェイス: ユーザーが一連のコマンドを入力し、オペレーティング システムが一連のコマンドを実行します。

プログラマー向けにプログラム インターフェイスが提供されています。

プログラム インターフェイスは実際には、C 言語の printf() などのシステム コールを呼び出すためのインターフェイスです。プログラマがこの関数を呼び出すと、C 言語は対応するロジックを実行し、データを表示するためにディスプレイが必要であることをオペレーティング システムに通知します。プログラマによって出力されるため、オペレーティング システムはハードウェアと対話するシステム コールを呼び出します。


次に、オペレーティング システムの開発段階:


手動オペレーティング システム:

人は紙テープに指示を書きます -> コンピュータが紙袋を読み取ります -> プログラムを実行します -> 結果を紙テープに印刷します。

当然のことながら、コンピュータのパフォーマンスはまったく発揮されず、多くの時間が無駄になります。

シングルパスバッチプロセッサ:

バッチ入出力の導入により、ユーザーは複数の命令を同時に入力でき、これらの命令の実行は周辺マシンによって管理および制御されます。

主な利点:人間とマシンの速度の矛盾がある程度軽減され、リソースの利用率が向上します。 

主な欠点は、メモリ内で実行できるプログラムは 1 つだけであり、次のプログラムはプログラムの実行が終了した後でしか転送できないことです。CPU は、o が完了するまでアイドル状態で多くの時間を費やします。リソース使用率は低いままです。

 マルチパスバッチプロセッサ:

 従来は一度に1つの命令しかメモリに送信できませんでしたが、複数の命令を同時にメモリに送信して実行できるようになり、入力部分が空いている場合には次のプログラムの入力を実行できるようになり、操作がアイドル状態の場合、前のプログラムを実行できます。

 タイムシェアリング オペレーティング システム:

タイムシェアリング オペレーティング システム: コンピュータは、タイム スライス単位で各ユーザー/ジョブを順番に処理し

表面上は各ユーザーがコンピュータを独占しているが、実際にはオペレーティングシステムが非同期にサービスを提供しており、各ユーザーのプログラムが一部の時間で交互に実行される。しかし、これは誰にとっても公平であるため、誰が最初になるということはなく、優先度の高いユーザーが最初にサービスを受けることはできません。

 主な利点: ユーザーのリクエストに即座に応答できるため、人間とコンピューターの対話の問題が解決されます。1台のコンピュータを複数のユーザが同時に使用することができ、コンピュータ上でのユーザの操作は互いに独立しており、他のユーザの存在を感じることはできません。

主な短所: 一部の緊急タスクに優先順位を付けることができません。オペレーティング システムは、個々のユーザー/ジョブに対して完全に公平であり、タスクの緊急性を区別することなく、各ユーザー/ジョブに周期的にタイム スライスを提供します。

リアルタイム オペレーティング システム:

上記のタイムシェアリングオペレーティングシステムの欠点を考慮して、優先度の高いユーザーを優先的にサービスすることができないため、この時点でリアルタイムオペレーティングシステムが導入されています。ユーザーの優先度が高く、指示が行われた場合、オペレーティング システムは、ユーザーに優先度の高いサービスを提供するために、現在実行中のプログラムを停止する必要があります。

リアルタイム オペレーティング システムの最も重要な機能は、適時性 信頼性です。


3、オペレーティング システムの 4 つの特徴:

4 つの主な機能同時実行、共有、仮想、非同期。最初の 2 つはオペレーティング システムの最も基本的な特性であり、この 2 つは相互の条件であり、仮想および非同期の実現の前提となります。

同時実行性:

並行性を区別する前に、並列性について話しましょう。並列処理とは、2 つのプログラムが同時に実行されることを意味します。同時実行性は、2 つのプログラムが一定期間内に交互に実行されることを意味するだけです

わかりやすい例を挙げると、歌を聴いて学ぶことです。並行とは、1 時間以内に、両方を遅らせることなく、同時に曲を聴きながら勉強することを意味します。並行性とは、1 時間以内に 5 分間曲を聴き、その後音楽を消して 5 分間勉強し、5 分間勉強した後、勉強をやめて 5 分間曲を聴くことを意味します。このようにして、一定時間内に 1 つのことだけを行い、交互に実行されます。

同時実行性:同じ時間間隔内に発生する 2 つ以上のイベントを指します。これらの現象は巨視的には同時に発生しますが、微視的には交互に発生します。

オペレーティング システムの同時実行性とは、コンピュータ システム内で複数のプログラムが「同時に」実行されることを指します。これらのプログラムは同時に実行されているように見えますが、実際には交互に実行されます。

同時実行性に従って、CPU コアの数とプログラムの関係を紹介しましょう。CPU に 1 つのコアがある場合、同時に実行できるアプリケーションは最大 1 つだけです。CPU に 8 つのコアがある場合、コンピュータは 8 つのプログラムを並行して実行できます。私たちが目にするシングルコア CPU が同時に多くのアプリケーションを実行している理由は、オペレーティング システムが実際にこれらのプログラムを同時に実行しているためです。

共有:

共有はリソース共有です。これは、システム内のリソースを、メモリ内で同時に実行される複数のプロセスによって共有できることを意味します。

同時共有とは、微視的に言えば、複数のプロセスが同じ時間間隔内で交互にリソースにアクセスすることを指します。ミューテックス共有では、一定時間内に1 つのプロセスのみがアクセスできます

  • 相互排他的共有: QQ と WeChat ビデオを使用します。カメラは同時にいずれかのプロセスにのみ割り当てることができます。
  • 同時共有: QQ を使用してファイル A を送信し、WeChat を使用してファイル B を同時に送信します。マクロの観点から見ると、両方の側が同時にファイルの読み取りと送信を行っており、両方のプロセスがハードディスク リソースにアクセスし、そこからデータを読み取っていることを示しています。ミクロな観点から見ると、2 つのプロセスは交互にハードディスクにアクセスします。

仮想性:

仮想とは、物理エンティティを複数の論理的な対応物に変えることを指します物理的実体 (前者) は実際に存在するものであり、論理的実体 (後者) はユーザーが感じるものです。

ゲームには 4GB のメモリが必要で、QQ には 300MB が必要で、QQ ミュージックには 300MB が必要だとします。ただし、コンピュータのメモリは 4GB しかありませんが、ゲーム、QQ、および QQ ミュージックを同時に実行するには 4.6GB のメモリが必要です。彼は、ユーザーにメモリが大きくなったように感じさせますが、実際には、オペレーティング システムがメモリを仮想化しています。

この背後で、オペレーティング システムは、最初に上記のプログラムのコードの一部をメモリにスケジュールします。コードを実行すると、他のコードを使用する必要があることがわかり、他のコードをメモリにスケジュールし、使用できるコードを呼び出します。使用されません。

 非同期性:

非同期とは、マルチプログラミング環境で複数のプログラムを同時に実行できることを意味しますただし、リソースが限られているため、プロセスの実行は最後まで一貫せず、停止したり開始したり、予測できない速度で前進したりする、これがプロセスの非同期の性質です。

非同期を理解する前に、同期について話しましょう。同期とは、現在のプログラムが実行された後にのみ別のプログラムを実行できることを意味します。非同期とは、実行するものを渡すだけで、いつ実行されるかは気にしないことを意味します。

たとえば、プリンタで印刷する場合、3 人のユーザーが印刷したいと考えていますが、現時点ではプリンタが 1 台しかありません。

  • 同期: 最初のユーザーがプリンタを占有し、2 人目のユーザーが印刷をクリックすると、オペレーティング システムから印刷できないことが通知されます。最初のユーザーが実行を終了した後にのみ通知できます。
  • 非同期: 3 人が同時にリクエストを送信します。最初にプリンターを使用した人が送信順にオペレーティング システムによって割り当てられ、ユーザーは最初の人が印刷するのを待ってから 2 番目の印刷を送信する必要はありません。

4. オペレーティングシステムの動作メカニズムとアーキテクチャ:

 プログラムはどのように機能するのでしょうか?

プログラマーが C 言語コードを記述すると、それはバイナリ命令にコンパイルされ、オペレーティング システムによって CPU に送信され、CPU がこれらの命令を順番に実行します。

命令: 01 で構成される 2 進数を指します。これは、CPU が認識して実行できる唯一の基本コマンドです。

CPUユーザーモードとカーネルモード:

CPU は、ユーザー命令カーネル命令の 2 種類の命令を実行できます。ユーザー命令はプログラマによって作成され、カーネル命令はオペレーティング システムのカーネル プログラム内の命令です。したがって、CPU には、カーネル状態とユーザー状態という 2 つの状態があります。

  • カーネル状態 の場合、カーネル プログラムが現在実行中であり、この時点で特権命令を実行できることを意味します。
  • ユーザー モードの場合、アプリケーション プログラムが実行中であることを意味し、現時点では非特権命令のみを実行できます。

CPU は、PSW フラグ ビットを通じてカーネル モードとユーザー モードを切り替えます

  • カーネル モード → ユーザー モード:特権命令を実行します。PSW のフラグ ビットを「ユーザー モード」に変更します。このアクションは、オペレーティング システムが CPU を使用する権利を積極的に放棄することを意味します。
  • ユーザー モード→カーネル モード:「割り込み」によってトリガーされ、ハードウェアは自動的に変態プロセスを完了します。割り込み信号のトリガーは、オペレーティング システムが CPU の使用権を強制的に取り戻し、現在実行中のプログラムを停止することを意味します。

オペレーティング システム カーネル:

 プリミティブ:オペレーティング システムはプリミティブを使用して、ハードウェアにどの機能を実行するかを通知します。

クロック管理:たとえば、タイムシェアリング オペレーティング システムでは、一定の時間間隔内でプログラムを切り替える必要があります。クロック管理を使用すると、時間間隔が経過した後にクロックがオペレーティング システムに他のプログラムを処理するように通知します。

 大きなコア:会社設立当初は規模が小さく、経営陣の人間がほとんどのことを担当していました。長所は効率が高いことですが、短所は、組織構造が混沌としていて維持が難しく、一部のエラーがカーネル全体の障害を引き起こす可能性があることです。

マイクロカーネル:企業の規模がますます大きくなるにつれて、経営陣はコアタスクの一部のみを担当するようになります。メリットは組織構造が明確で維持しやすいことですが、デメリットは効率が低いことです。

 CPU 状態切り替えの数が少ないため、大きなコアでは実行速度が低下します。

アウターコアオペレーティングシステム:

カーネルオペレーティングシステムがユーザーに提供するメモリが仮想化、つまり不連続であるかどうか ユーザーは直感的には連続したメモリ空間を独占しているように感じますが、実際には不連続なメモリ空間の一部を占有しているだけです。アウターコアは異なり、アウターコアのオペレーティングシステムは実際に連続した空間をユーザーに割り当て、ユーザーが直感的に感じた空間が自分の所有する空間となります。

5. 中断:

 割り込み処理:実行中のプログラムを強制終了し、OSに他のプログラムを実行させます。これは、オペレーティング システム カーネルが CPU を取り戻す唯一の方法です。

  • 内部割り込み: CPU 内で現在実行中の命令に関連します。
  • 外部割り込み: CPU の内部とは関係がなく、プリンターやクロック コンポーネントから CPU に送信される割り込み信号など、CPU の外部から発生します。

6. オペレーティング システムの起動:

端的に言えば、オペレーティング システムのブートはオペレーティング システムを起動するプロセスです。

コンピュータの電源がオンになると、CPU はまずメモリ内の ROM プログラムにアクセスしてマスター ブート レコードをメモリに読み込み、このとき CPU はメモリ内のマスター ブート プログラム (MBR) を実行し、マスターブート プログラムは C ドライブを見つけます。次に、CPU はブート レコード プログラム内でブート レコード プログラムを実行し、ブート レコード プログラムはプログラムにオペレーティング システムの初期化プログラムを見つけてメモリに読み込み、ドライブの初期化を指示します。この時点でオペレーティングシステムは完成しています。

 7、仮想マシン:

仮想マシンには大きく分けて 2 種類あります。

1 つ目は自分のコンピュータに直接インストールされ、コンピュータのパーティション分割 (1 台のコンピュータに 2 つのシステムをインストールするのと同等)、コンピュータの電源を入れたときに入るオペレーティング システムの選択などの操作を実行します。

2 つ目は、現在のシステムに仮想マシン ソフトウェアをインストールすることに相当し、仮想マシン ソフトウェアが仮想システムのリソースを管理および割り当てます。

前者は別のシステムであり、後者は 1 つのシステム上に別のシステムをインストールします。私たちと比較すると、ハードウェア リソースを呼び出す必要があります。前者はシステム コールに直接入力してハードウェア リソースの呼び出しを完了しますが、後者は仮想システムが必要です。リクエストを実行すると、仮想マシン プログラムが親オペレーティング システムにリクエストを送信し、システム コールの完了後に親オペレーティング システムがフィードバック結果を仮想マシン ソフトウェアに送信し、仮想マシンがソフトウェアは、関数が完了したことを仮想オペレーティング システムに通知します。これはレイヤーごとの呼び出しプロセスであるため、効率は明らかに非常に低くなります。


8. システムコール:

システムコールとは何ですか?

プリンタを使用する場合、プリンタはハードウェア リソースであり、プログラマがコンピュータのハードウェア リソースを直接呼び出す方法はありません。コンピュータのハードウェア リソースを呼び出せるのはオペレーティング システムだけであるため、システム コールは最初は関数インターフェイスとして想像され、これを通じてインターフェイスはオペレーティング システムにハードウェア呼び出しを完了するように通知します。

なぜシステムコールを使用するのでしょうか?

上記の例でも、2 人が同時にプリンターにアクセスします。制御がない場合、1 台のプリンターが同時に 2 つのリクエストを受け取り、最終結果として 2 つのファイルを 1 枚の用紙に印刷することになり、データが混乱します。共有リソース アクセスは、システム コールによってオペレーティング システム カーネルにリクエストを送信し、カーネルによってリソースを管理する、大きなハウスキーパー オペレーティング システムによって行われる必要があります。

システムコールが必要になるのはどのような場合ですか?

アプリケーションは、システム コールを通じてオペレーティング システムにサービスを要求します。システム内のさまざまな共有リソースは、オペレーティング システム カーネルの統合制御下にあるため、共有リソースに関連するすべての操作 (ストレージ割り当て、I/O 操作、ファイル管理など) サービス リクエストが行われ、オペレーティング システムのシステム カーネルが代わりにそれを完了します。これにより、システムの安定性とセキュリティが確保され、ユーザーによる不正な操作が防止されます。

システムコールのプロセス: 

 アプリケーションは読み取りライブラリ関数を呼び出します --> 現在のプロセスの一意の ID をレジスタに書き込みます --> オペレーティング システム カーネルに落ちます --> オペレーティング システム カーネルには多くのシステム コールがあり、カーネルは命令が何であるかを判断します送信されたデータに基づいて実行します。 呼び出し --> オペレーティング システムは、対応するプログラムの実行を開始するためにハードウェアを呼び出すことを決定します --> 実行が完了すると、実行されたばかりのアプリケーション プログラムがプリミティブで起動されます。プロセスが完了したことを通知します。 

おすすめ

転載: blog.csdn.net/weixin_60414376/article/details/126921743