この記事はWeChatの公開アカウント「Flying Veal」から転載したもので、著者はFeitian Vealです。記事を転載する場合は飛天牛肉公式アカウントまでご連絡ください。 まず最初に、長い間私を悩ませてきた次の質問、つまり仮想アドレスと論理アドレスの違いについて説明しましょう。 ほとんどのオペレーティング システムの本では、仮想アドレスまたは論理アドレスについて記述されており、混乱してしまいます。 ついに「Linuxカーネルの深い理解」という本で正確な答えを見つけました。ここでは書きません。概念の面では、確かに両者の間にはいくつかの違いがあります。ただし、オペレーティング システムを日常的に使用し理解する上で、仮想アドレスと論理アドレスを一時的に同じ意味として理解することができます。 表示される住所はすべて実際のものではありません次の C コードは、「オペレーティング システム入門 - [US] Remz H. Apache Dussel」から抜粋したもので、メイン関数のアドレス、malloc によって割り当てられたヒープ領域の値 (Java の new 操作に類似)、およびスタック上の整数のアドレスを出力します。 次の出力が得られます。 知っておく必要があるのは、これらの印刷されたアドレスはすべて仮想的なものであるということです。これらのアドレスは実際には物理メモリ内に存在しません。最終的には、オペレーティング システムと CPU ハードウェアによって実際の物理アドレスに変換され、実際の物理的な場所からアドレスの値を取得できるようになります。 さて、上記は物理アドレスと仮想アドレスを直感的に理解するための単なる紹介です。それでは本文を始めましょう。 物理アドレス物理アドレスの概念は理解しやすく、実際のアドレスと呼ぶことができます。 『コンピュータシステムの徹底理解 - 第 3 版』に記載されている物理アドレスの定義は次のとおりです。 コンピュータ システムのメイン メモリは、M 個の連続したバイト サイズのセルの配列として構成されます。各バイトには一意の物理アドレスがあります。 たとえば、最初のバイトの物理アドレスは 0、次のバイトのアドレスは 1、その次のバイトのアドレスは 2 というようになります。この単純な構造を考えると、CPU がメモリにアクセスする最も自然な方法は、このような物理アドレスを使用することです。この方法を物理アドレス指定と呼びます。 たとえば、プログラムがロード命令を実行する場合、命令の内容は物理アドレス 4 から 4 バイトのワードを読み取ってレジスタに転送することです。 物理アドレス指定のプロセスは次のとおりです。CPU がこの命令を実行すると、物理アドレス 4 が生成され、メモリ メイン ラインを介してメモリに渡されます。メモリは物理アドレス 4 から始まる 4 バイトのワードを取り出し、それを CPU に返します。CPU はそれを指定されたレジスタに格納します。下の写真をご覧ください: 実際、すべてのプログラムが物理メモリに直接アクセスする物理アドレス指定方法には、大きな欠陥があることに気づくのは難しくありません。 1) まず、ユーザー プログラムはメモリの任意のバイトをアドレス指定できるため、オペレーティング システムを簡単に破壊し、徐々に停止させる可能性があります。 2) また、このアドレス指定方法では、オペレーティング システムで 2 つ以上のプログラムを同時に実行することはほぼ不可能になります。 たとえば、3 つの同一のプログラム (計算機) を開き、すべてを特定のステップまで実行しました。たとえば、ユーザーはこれら 3 つのプログラムのインターフェイスにそれぞれ 10、100、1000 を入力し、対応する命令は、ユーザーが入力した数値をメモリ内の特定のアドレスに保存することです。この位置に 1 つの数字しか保存できない場合、どの数字を保存する必要がありますか?これは矛盾ではないでしょうか? 以下は、『Modern Operating Systems - 3rd Edition』からの別の例です。 プログラムが物理メモリ アドレス 1000 に値を割り当て、つまりそこに何らかのデータを保存し、別のプログラムもこのアドレスに値を割り当てると、2 番目のプログラムによって割り当てられた値によって最初のプログラムによって割り当てられた値が上書きされ、両方のプログラムが同時にクラッシュすることになります。 もちろん、ほぼ不可能ではあるが、完全に不可能ではないとも言いました。物理アドレス指定方式では、複数のプログラムの同時実行を実現する方法がまだいくつかあります。 最も簡単な方法は、まず、アイドル プロセスをディスクに保存して、実行されていないときにメモリを占有しないようにすることです。次に、プログラム (またはプロセス) がすべてのメモリを占有し、短時間実行されるようにします。コンテキストスイッチが発生すると、プロセスを停止してそのステータス情報をすべてディスクに保存し、他のプロセスのステータス情報を読み込んでから、しばらく実行します...メモリ内に一度に 1 つのプログラムしか存在しない限り、上記のアドレス競合は発生しません。これにより、比較的粗い並行性が実現されます。 なぜ荒れているのでしょうか?この方法には、すべてのメモリ情報をディスクに保存すると速度が遅くなるという問題があります。特にメモリが増えると。 そこで、プロセスに対応するメモリを常に物理メモリ内に保持しておき、コンテキストスイッチが発生したときに特定の領域に切り替えることを考えます。 下の図に示すように、3 つのプロセス (A、B、C) があり、それぞれに 512 KB の物理メモリから切り出された小さなメモリ部分があります。これら 3 つのプロセスは物理メモリを共有していることがわかります。 明らかに、この方法には一定のセキュリティ上のリスクが伴います。結局のところ、プロセスがコンテンツを自由に読み書きできるとしたら、混乱が生じます。 では、各プロセスで使用されるアドレスをどのように保護すればよいのでしょうか?物理メモリ モデルを引き続き使用することは絶対に不可能であるため、オペレーティング システムは新しいメモリ抽象化を作成し、新しいメモリ モデル、つまり仮想アドレス空間を導入しました。多くの書籍では、これを直接「アドレス空間」と呼んでいます。 仮想アドレス指定まず、仮想アドレス空間と仮想アドレスの概念を簡単に説明しましょう。本の定義を直接読むのは少し難しいかもしれません。 つまり、各プロセスのスタック、ヒープ、コード セグメントなどの実際の物理メモリ アドレスはプロセスからは見えず、誰もこの物理アドレスに直接アクセスすることはできません。 では、このプロセスにはどのようにアクセスすればよいのでしょうか? オペレーティング システムは、各プロセスに仮想アドレス空間 (仮想アドレス) を割り当てます。各プロセスに含まれるスタック、ヒープ、およびコード セグメントには、このアドレス空間からアドレスが割り当てられます。このアドレスは仮想アドレスと呼ばれます。基礎となる命令によって書き込まれるアドレスも仮想アドレスです。 各プロセスには独自のアドレス空間があり、他のプロセスのアドレス空間からは独立しています。つまり、あるプロセス内の仮想アドレス 28 に対応する物理アドレスは、別のプロセス内の仮想アドレス 28 に対応する物理アドレスと異なるため、競合は発生しません。 物理的な住所は倉庫、仮想的な住所は番地であると理解できます。たとえば、合計で 30 個の番地がある場合、すべてのプロセスはこれら 30 個の番地を見ることができますが、表示される同じ番地が同じ倉庫を指しているわけではありません。 さて、「Modern Operating Systems - 3rd Edition」という本にあるアドレス空間の説明を見てみましょう。これは簡単に理解できるはずです。 アドレス空間は、プロセスがメモリをアドレス指定するために使用できるアドレスのセットです。各プロセスには独自のアドレス空間があり、このアドレス空間は他のプロセスのアドレス空間から独立しています (プロセスがアドレス空間を共有する必要がある特別な場合を除く)。 アドレス空間の概念は非常に一般的であり、多くのコンテキストで登場します。たとえば、米国や他の多くの国では、市内の電話番号は通常 7 桁の番号です。したがって、電話番号のアドレス空間は 0 000 000 から 9 999 999 までになります。 アドレス空間は数値以外でも構いません。 「.com」で終わるネットワークドメイン名のセットもアドレス空間です。このアドレス空間は、2 ~ 63 文字の文字列とそれに続く「.com」で構成されます。これらの文字列を構成する文字は、文字、数字、ハイフンです。 ここまでで、アドレス空間の概念は理解できたと思います。それは非常に単純です。 仮想アドレス空間を使用すると、CPU は仮想アドレスを生成してメインメモリにアクセスできます。この仮想アドレスは、メモリに送信される前に適切な物理アドレスに変換されます。仮想アドレスを物理アドレスに変換するプロセスをアドレス変換と呼びます。 アドレス変換には、CPU ハードウェアとオペレーティング システムの緊密な連携が必要です。CPU 上のメモリ管理ユニット (MMU) は、仮想アドレスを物理アドレスに変換するために使用されますが、MMU はメモリに格納されているルックアップ テーブルを使用する必要があり、このテーブルの内容はオペレーティング システムによって管理されます。 そして、上記CPUが仮想アドレスを生成し、アドレス変換を行う処理が仮想アドレス指定です。たとえば、次の図をご覧ください。 参考文献 「オペレーティングシステム入門 - [米国] Ramz H. Apache Dussel」 現代のオペレーティングシステム - 第 3 版 「コンピュータシステムの徹底理解 - 第 3 版」 |
>>: [調査] クラウドネイティブ企業はセキュリティ維持に苦戦
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますSEO担当...
1. Facebookと小売業者が「欲しい」ボタンをテスト北京時間10月9日朝のニュースによると、F...
競合相手は常に芸術です。Web サイトの構築開始時に競合相手がはっきりと見えない場合、どのようにして...
【51CTO.comオリジナル記事】あらゆるもののデジタル化がデータに基づく運用・保守の時代を切り開...
コンテンツタグ: デジタル人民元シナリオアプリケーション、サードパーティ決済分析:中央銀行は7年間研...
現在、国内の検索エンジン業界は「混乱期」にある。各社は、自社の検索エンジン市場シェアを拡大するた...
2021年4月22日、「蘇州・ファーウェイクラウドシティサミット2021」において、ファーウェイクラ...
2月12日、陸松松氏は以前自身のブログで宣伝していたブログコメント宣伝手法を公に否定し、「この宣伝手...
上海の記者タオ・リー本紙は昨年7月、「リベートサイトは不当な条件を使っていると非難されることが多く、...
国内主流の Android アプリケーション市場の最新のリリース、活動、交流、販売連絡先。これは主に...
クラウド移行、つまりデータとアプリケーションをオンサイトの IT インフラストラクチャからクラウド ...
昨年8月16日、Qihoo 360は360 Search(so.com)を正式にリリースした。 1 ...
トレーニングの目的: 今日のインターネットの急速な発展により、大量の高品質のトラフィックをウェブサイ...
製品が特定の問題点を解決するために作成された場合、製品の最適化と反復は、より優れたユーザー エクスペ...
Cloudsilk は、アウトバウンド ジャーニー用の BGP、バックホール用の香港 CMI ネット...