RAMにいくらかのスペースが割り当てられているプロセスがある場合。プロセスがスレッドを作成する場合 (実際にはスレッドも作成されます)、スレッドはその実行のためにいくらかのスペースも必要とします。そうじゃない?それで、そのプロセスに割り当てられたスペースのサイズを増やしますか、それともスレッド用のスペースが別の場所に作成されますか? IF はい、RAM のどこで、プロセスによって所有されているスペースと連続している必要がありますか?
2 に答える
スレッドに関する情報を維持する必要があるため、スケジューラ (カーネル内) のどこかにオーバーヘッドが発生します。
スレッドごとにスタックが必要であり、ユーザーコードが必要なときにカーネル固有のスペースに物を入れたくないため、プロセス固有の領域にもオーバーヘッドが発生します。
最近のすべてのオペレーティング システムは、かなり前から、プロセスに必要なメモリと RAM に物理的に割り当てられたメモリを分離しています。
OS は、プロセスごとに大きな仮想アドレス空間を作成しました。そのアドレス空間は、各プロセス内で作成されるスレッドの数とは無関係です。
たとえば Windows では、最適化の理由から、そのアドレス空間の一部が OS およびカーネル ライブラリ用に予約されており、効率のためにすべてのプロセス間で共有されます。
もう 1 つの部分は、アプリケーションのユーザー コードとライブラリ専用です。
プロセス ロジスティクスとリソースが作成されると、プロセスを開始する準備が整いました。これは、プロセスのメイン エントリ ポイントの実行を開始するプロセスの最初のスレッドを開始することによって行われます。
スレッドが実行を開始するには、他の要件の中でも特にスタックが必要です。Windows では、そのスタックのデフォルト サイズは約 1 MB です。これは、変更しない場合、各スレッドが独自のハウスキーピングのために約 1 MB のメモリを必要とすることを意味します。(スタック、TLS など....)
プロセスがメモリを割り当てる必要がある場合、OS はこのメモリを RAM 上で物理的に割り当てる方法を決定します。プロセス/アプリケーションは、物理 RAM アドレスを認識しません。各プロセスに割り当てられた仮想空間からの仮想アドレスのみを認識します。
OS は、ディスク上にあるページ ファイルを使用して、RAM に加えてメモリ要求を支援します。RAM が少ないということは、ページ ファイルへの負担が大きくなることを意味します。OS が RAM にないメモリの一部を見つけようとすると、ページ ファイルで見つけようとします。この場合、ページ ミスと呼ばれます。
このトピックは非常に広範ですが、できる限り概要を説明しようとしました。