• ベストアンサー

メモリ管理機能

OSのメモリ管理機能についておしえてください。 OSの機能にメモリ管理というのがありますが、これは 論理アドレスと物理アドレスのマッピングなど仮想記憶管理を行ったりしています、そのほか、アプリケーションの名前やデータサイズなども管理してるのでしょうか?(たとえば、Word.exeというプログラム名は論理アドレス何番から何番までに配置、xyz.mp3という名前のデータ名は論理アドレス何番から何番に配置といった感じで)

質問者が選んだベストアンサー

  • ベストアンサー
  • nta
  • ベストアンサー率78% (1525/1942)
回答No.1

 アプリケーションをメモリー上にマップしてプロセスとして実行状態にするのはOSの重要な仕事ですから当然知っています。linuxであればtopコマンドを使えば各プロセス(Linuxではプロセスのことをタスクと呼ぶことが多い)の実行状態を見ることができます。一方で、論理アドレスから物理アドレスへのマッピングやセグメンテーションやスワップなどの仮想記憶処理についてはそれぞれのCPUの仕様に依存するため、カーネルのバージョンや対応するCPUによって異なってきます。たとえばlinux2.6からはrmap(リバースマップ)を持っているので物理アドレスから論理アドレスをたどることができるようになりました。  各アプリケーションが使用するデータについては、プロセス間の受け渡しに関連するところ以外では、各アプリケーションに任されていますから一般にはOSの知るところではありません。しかし、メモリー管理機構は各アプリケーションからのメモリー割り当て要求をこなしているので、要求された範囲内に収まっているはずとは考えられます。

参考URL:
http://d.hatena.ne.jp/naoya/20071008/1191824562
deepest
質問者

お礼

回答ありがとうございます。

その他の回答 (2)

回答No.3

回答の追加です インテルのx86を使ったLinuxシステムでは 0xFFFFFFFFから0xC0000000 にOS 0xBFFFFFFFから0x08000000 がプロセスのスタック(ヒープ領域もここか?) 0x08000000 ELF形式の場合イメージベース ちなみに、OSの仮想アドレスを物理アドレスに変換するのは 簡単で、 仮想アドレスを 0xC001A800 とすると 物理アドレスは 0x0001A800 です (仮想アドレスの頭4ビットをOFFにすると物理アドレスになる) プロセスで使用している仮想アドレスの変換は 単純ではありません。x86の仕様書を見られたし

deepest
質問者

お礼

回答ありがとうございます。

回答No.2

 現在では、どのオペレーティングシステムも、1970年代後半にIBMで 考案された、多重仮想記憶方式(MVS)が使用されています。 これは、プロセス毎に、一つのまとまった仮想メモリを割り当てていくという 方式です。 まとまった仮想メモリとは、X86では32ビットでメモリをアクセスしますが ひとつのプロセスからみると メモリの0x00000000番地から0xFFFFFFFF番地までが 存在するように見えるわけです。 この場合、たいてい高位アドレス(0xFFFFFFFF番地に近い方)はOSが存在し 低位アドレス(0x00000000に近い方)にはプロセスが存在します。 低位アドレスのどこにプロセスをロードするかはリンカーが決定していて OSによっても、コンパイラー(特にLinuxではELFとかaoutとか コードファイルの形式によっても異なります) リンカーについては 「Linkers&Loaders」JohnR.Levin著 オーム社 を読んで見ましょう(ちょっち難しいですが) ちなみに、プロセスとは、動いているWord.Exeとか、 Excel.Exeなどのアプリケーションのことだと思って よいでしょう。 さらに、ちなみに、Windowsでは、 どのアプリケーションも 仮想メモリの0x00400000番地に ロードされます この番地のことを、イメージベースと呼ぶことがあります。 さらに、さらに、インテルのx86を使っていれば、仮想メモリと物理メモリの 変換のほとんどは、OSではなくCPUがやっております PS. プロセスという言葉を理解しましょう ちなみにこれに対してタスクという言葉もあります 両者ともOSを理解する上では重要なキーワードです

関連するQ&A