アドレス空間とメモリとは同義なのでしょうか?
アドレス空間の説明として、住所(番地)を
よく引き合いにだされると思います。
データの場所をアドレスが指定していると
いったイメージはわかるのですが、
そもそもデータとは、どこにあるのですか?
データがアドレス空間に展開されていて
そのアドレスをさしているのですか?
それとも、データがメモリ上に展開されていて
そのアドレスをさしているのですか?
アドレス空間=メモリなのでしょうか?
アドレス空間が2GBとは、メモリが2GBといっている?
「1234」といった4byteのデータが、メモリに展開されて
そのアドレス(場所)が、アドレス空間に展開される。
(つまり、アドレス空間は目次?)なのでしょうか?
すみません素人質問で。お願いします。
No.9ベストアンサー
- 回答日時:
質問者さんが扱っている汎用機に限れば、そしてOSの開発を行ってるのでなければ、アドレス空間 = 仮想アドレス空間と考えても差し支えないでしょう。
> I/Oとかまで考慮に入れるとイメージが難しいのですが
> なにかわかりやすくイメージする方法はないでしょうか?
> (ICのピンの話?)
CPUの本来のアドレス空間は「物理アドレス空間」です。これはどんなにチープなCPUにも存在します。ICの内部にメモリやI/Oを持っている場合もありますが、基本的にはアドレスバスがそのまま物理アドレス空間の番地を表していると考えて構いません。
アドレスバスというのは、例えば典型的な32ビットのCPUであればA0~A31のアドレスピンの束だと考えてください。このピンで32ビットの番地を表現するのです。
CPUによってはMMU(Memory Management Unit)を備えています。あるいは外付けされています。MMUは、物理アドレス空間を再配置したり、特権モード以外では特定の領域へのアクセスを制限したりします。これが「仮想アドレス空間」です。
再配置するのは、例えば実メモリが512Mバイトしかないのに2Gバイトのメモリを使いたい場合に使用します。
実際にアクセスしている部分に実メモリを再配置し、実メモリが再配置されていないところをアクセスしようとすると、それまで実メモリに格納されていた内容をハードディスク等に退避し、アクセスしようとした場所に空いた実メモリを再配置するわけです。このとき、以前にその領域のデータを退避していたのであれば、その内容を実メモリに戻します。
なお、これはOSがそのような使い方をしているだけであって、CPUの機能そのものではありません。
特権モード以外でのアクセスを制限するのは、例えば一般的なアプリケーションからハードウェアを直接制御したり、OSを破壊したり、並行に稼動している他のアプリケーションを破壊しないようにするためです。
その意味では、仮想アドレス空間を主に使用する環境で、かつ一般的なアプリケーションしか開発しないのであれば(デバイスドライバなどを作らなければ)、アドレス空間 = メモリ領域と考えても、実質的には問題ありません。
ご理解いただくためにかなり詳しく解説しました。分からない用語はなるべく検索した上で再質問してください。
ありがとうございます。
かなり理解できました。特権モードなどは、あまり意識しないでも
問題なさそうなので今回はこれ以上掘り下げないです。
IT用語は同一のような言葉で、どちらも普通に使われる言葉が
多くて悩むことがあります。また今回のように、若干ながらも
見方によって違うものもあるので余計に混乱します。
実は、初心者質問「メモリ編2」の質問も予定しているので、
そちらをもし見かけたら、また回答願います。
ありがとうございました。
No.8
- 回答日時:
またまたNo.1です。
どうやら私が話をはしょり過ぎて、ややこしくしてしまったようですね。
まず、前言撤回します。
>>アドレス空間が2GBとは、メモリが2GBといっている?
>アドレス空間2GBのシステムで、実メモリが2GBあれば、ほぼ全てが実メモリ上にありますよね。だからほぼ正解。
これが間違いです。
メモリとアドレス空間は別の物です。
ただ、イメージ上はアドレス空間は全てメモリ上にある物と思ってください。
実際に、あるアドレスが実メモリにあるか、ハードディスク上にあるかはわかりません。それはOSあるいはハードウェアが変換します。
で、アセンブラが分かるなら話は早い。
アセンブルリスト上にある”アドレス”はアドレス空間上のものです。
>つまりソースコードも変数もメモリに展開して
アドレスどうし(変数Aのアドレス-変数Bのアドレス=
汎用レジスタ3 みたいな感じ)で実際のデータを
増減させているのだろうと思っています。
この メモリに展開して => アドレス空間に展開して が正解です。
後の部分はまあそんな感じ。
なので、
>多分、主記憶や仮想記憶は、あまり意識してないで
というのが正解です。ユーザレベルで意識する必要は無いのです。
あと、
>実際のデータ(ファイルに格納されているデータのこと)も、
アドレス空間に展開されるのでしょうか?
ファイルを読む際に、内容を変数領域に読み込みますよね?
このときにアドレス空間上に展開される事になります。
というわけで、No.6さんのご指摘の通り
>> アドレス空間=仮想アドレス空間で構いません。
>これはちょっと言い過ぎでは?
確かに言いすぎですね。
ありがとうございます。
今回の内容は、だいぶ理解できました。
このあたりの話って昔からある機能だと思うのですが
どうも社内でも詳しく知っている人(新人にわかりやすく
教えられる人)が少ないのです。
どこの会社でもそうなのか、うちの会社のレベルが低いのか
わからないですけど。。
No.7
- 回答日時:
話を難しくしているのは、質問者さんが想定している環境を明確にしていないことにあります。
マイコンなのか、PCなのか、スーパーコンピュータなのかも分からない状況ですから漠然とした話になってしまうのです。汎用機の話でしょうか? それに特化した質問であれば、環境の特徴を補足してください。そうではなく、コンピュータ一般についての基礎的な知識を求めているのであれば、8~16ビットCPUのような簡単なところから入った方が結局は近道です。
いつも早い回答をありがとうございます。
回答者さまの内容から環境によって違うということが
わかりました。自分の中のイメージ的には汎用機(IBM社:MVS系)を
考えながら話をしていましたが、WindowsもLinuxも概念は
似たようなものだろうと思っていました。
入門書もいくつか見てみましたが、環境による違いなどが
書いてあるものは見受けられませんでしたので…
マイコンなどは、実際に見たこともなければ
そのような本も見たことないです。
言葉だけ知っているレベルです。
汎用機の環境の特徴ですが、何が明確だと回答しやすいのでしょうか?
リンクのイメージでわかりますか?
OSの担当ではないので、あまり理解してないのですが…
http://www.sa.il24.net/~teitoku/yellow_ibm1.htm
No.6
- 回答日時:
> アドレス空間=仮想アドレス空間で構いません。
これはちょっと言い過ぎでは?
MMUのない環境では仮想アドレス空間というのは存在しませんし、数だけでいえば、MMUがない、またはMMUがあっても使用しない環境の方が多数なのですから。
いろいろと回答を頂いているのですが
全然イメージが頭に入ってこないのです。
自分で調べようにも、先輩でも回答者様のレベルまで
達していないようで、正確に説明してもらえないです。
絵を書いてみようにも、絵のあるわかりやすい資料を
見つけようにも見つけらることすらできないのです。
つまり、勉強の仕様がないのです。
どうしたらいいでしょうか?
予想以上に、とてつもなく広がりを見せているので
締め切ってポイントをつけることすら出来ない状況です。
(明確にスッキリしてないし)
No.5
- 回答日時:
No.1です。
>3件の回答は、いずれも若干違うものに思えます。
そうですね。でもよく見ると、どれかの回答を否定している物でもないですよね。
回答で言うと、1>2>3>4 と順番に高度な説明になってます。
逆に言うと、1の答えが一番不正確です。(詳細を全部はしょってます、だから「細かいところにはつっこまないように」)
用語で言うと、アドレス空間=仮想アドレス空間で構いません。
あと、アドレス空間を語る上でレジスタの考え方は必須ですが、これは最初は無視してください。
まずアドレス空間が何であるかを分かった上で、アドレス空間でアプリがどうやって動くか、の段階になったときにレジスタの役割を考えればよいです。i/oも同様ですね。
勉強していくに従って、2,3,4の回答の意味が分かってくると思います。
もう専門的すぎて混乱の境地です。
実は、少しだけアセンブル(汎用機用)を書けます。
アセンブラリストをみると、ソースコードの横に
アドレスが書いてあります。
変数領域にもアドレスが書いてあります。
つまりソースコードも変数もメモリに展開して
アドレスどうし(変数Aのアドレス-変数Bのアドレス=
汎用レジスタ3 みたいな感じ)で実際のデータを
増減させているのだろうと思っています。
で、上に書いたメモリをアドレス空間と呼ぶ先輩がいますが
これは同義なのでしょうか?
多分、主記憶や仮想記憶は、あまり意識してないで
単にアドレス空間と言っていると思うのですが…
それとも、やはり、その2つは同義ではないですよと
言うべきなのでしょうか?
I/Oとかまで考慮に入れるとイメージが難しいのですが
なにかわかりやすくイメージする方法はないでしょうか?
(ICのピンの話?)
ところで、さらに初心者質問ですが変数でなく
実際のデータ(ファイルに格納されているデータのこと)も、
アドレス空間に展開されるのでしょうか?
アセンブラリストではデータの領域まで書かれないので
イメージしづらいのです。
No.4
- 回答日時:
> CPUのアドレス空間?レジスタのことでしょうか?
汎用レジスタのことをいわれているのであれば違います。
ただし、汎用レジスタにアドレスが割り付けられているアーキテクチャも実在します。
制御レジスタのことであれば、アドレス空間上に割り付けられていることもあれば、通常のアドレス空間とは別のI/Oアドレス空間に割り付けられていることもあります。
仮想メモリ云々は、MMUを搭載している環境に特化した話であり、一般的ではありません。昨今のPCではそれが普通ですが、質問者さんは特に環境を指定されていませんから。(私は4ビットや8ビットのCPUやマイナーなアーキテクチャも視野に入れて回答しています)
通常、(C言語のような比較的低水準のものも含めて)高級言語ではアドレスを指定してアクセスするのはメモリがほとんどですが、メモリをいくら読み書きしても、それだけでは画面に表示することも、キーボードを読み込むことも、ネットワークにつなげることもできません。LEDひとつ点灯させることもできません。必ずハードウェアを制御するためのI/Oが必要であり、アドレス空間にはそうしたI/Oも配置されているのが普通です。(前述したI/Oアドレス空間の場合もあります)
No.3
- 回答日時:
> アドレス空間とメモリとは同義なのでしょうか?
ちょっと違います。
CPUのアドレス空間のことだと思いますが、その場合、CPUが番地を指定可能な全領域のことをアドレス空間といいます。例えば、バイトアドレスを16ビットで表現する場合なら64Kバイト、24ビットで表現するなら16Mバイト、32ビットで表現するなら4Gバイトのアドレス空間があるわけです。
ところが、アドレス空間のうち、メモリが実装されているのは一部だけです。別の場所にはI/Oが実装されていたり、何も実装されていないところもあります。
I/Oのある番地に対して読み書きを行うことで、ハードウェアを制御することができます。例えば、キーボードを読み込んだり、LEDを点灯させたり、タイマの周波数を設定したりできるわけです。
仮想アドレス空間の話はもっとややこしいので、まずは基本から理解することをお勧めします。
CPUのアドレス空間?レジスタのことでしょうか?
3人の方の回答がそれぞれ違うので
かなり悩んでいます。
多分、1番最初の方の回答が一番正解のような
気がしています(もともとの私の認識に近い)が、
違うのでしょうか?
No.2
- 回答日時:
Googleイメージ検索(
http://images.google.com/ )にて,キーワード「仮想記憶」を検索して,一番目にヒットしたページがこちら。http://jiten.search.biglobe.ne.jp/j/1d/51/e7/53f …
このページの図に対応させると,質問者のいうアドレス空間は「仮想アドレス空間(多重仮想空間)」,メモリは「物理メモリ空間」になります。「スワップ領域」は Windowsの場合,隠しファイルの C:\pagefile.sys です。
例えば,実行するために1GBのアドレス空間を確保するソフトウェアがあるとする。ところが,PCに搭載されている実メモリが512MBであってもそのソフトは動作したりするわけです(遅くなりますが)。
(1)プログラムとデータは仮想アドレス空間に展開され,仮想アドレスが割り振られる。
(2)そのうち,実行するある時点において必要なプログラム部分とデータ部分が,実メモリに読み込まれ(物理メモリ空間に展開され),物理アドレスが割り振られる。
(3)実行するある時点において不要となったプログラム部分とデータ部分は,スワップ領域に置かれる。
(3)→(2)の動きをページイン,(2)→(3)の動きをページアウトと呼びます。PCにメモリを多く搭載すると,このやりとりが少なくなるので,サクサクと快適に動作するということになります。
仮想アドレス空間+主記憶(物理メモリ)=アドレス空間
という定義ではないでしょうか?
また、仮想アドレス?というものはなんでしょうか?
仮想アドレス空間であっても、アドレスはアドレスであるような
気がします。
今回、3者の回答が微妙に違うように思えます。
ネットで調べてもやはりこのように書いてあることが、
若干ずつ違うのでわからなくなるのです。
※本で調べたくても、その辺を分かりやすく記述している
資料をみたことがない。
どなたの回答が最も正しいのでしょうか?
どれも正しいと言われると、余計にわからなくなってしまいます。
No.1
- 回答日時:
元SEでやんす。
>アドレス空間=メモリなのでしょうか?
論理的にはそう考えて構いません。
でないと訳が分からなくなります。
実際には、アドレス空間と実メモリの変換はOSが行います。
>アドレス空間が2GBとは、メモリが2GBといっている?
アドレス空間2GBのシステムで、実メモリが2GBあれば、ほぼ全てが実メモリ上にありますよね。だからほぼ正解。
アドレス空間が2GBの時に実メモリが1GBだとすれば、のこり1GBはハードディスク上のどこかにとられます。
とられ方はOSにより違います。スワップファイルになったり、ファイル名を付けてとられたり。
>1234」といった4byteのデータが、メモリに展開されて
そのアドレス(場所)が、アドレス空間に展開される。
後半は間違い。アドレスは単なる目次。
アドレスがどこかはOSあるいはアプリが知っている。
すごく話を単純化してますので、細かい所には突っ込まないように。
非常にわかりやすい回答ありがとうございました。
と、書かせて頂こうと思っていましたが
3件の回答は、いずれも若干違うものに思えます。
ネットなどで調べてもわからなくなるのは、このためです。
※本で調べたくても、その辺を分かりやすく記述している
資料をみたことがない。
どなたの回答が最も正しいのでしょうか?
どれも正しいと言われると、余計にわからなくなってしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- IT・エンジニアリング アドレス空間(メモリマップ)について教えてください。 マイコンには必ずメモリマップが記載されています 3 2022/06/17 09:42
- Excel(エクセル) Excel 数行を1組とする300組ほどあるデータの項目を揃えたいです。 3 2023/01/26 19:38
- ネットワーク コマンドプロンプトで、コマンドの飛ばし方を教えてください。 ネットワークにデータを飛ばす(copy) 4 2022/10/19 11:21
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- YouTube youtube動画再生について… 1 2022/04/08 04:24
- Outlook(アウトルック) 【 Windows 10 】アドレス帳に正しくインポートを完了させたい。 3 2023/04/23 13:41
- その他(インターネット接続・インフラ) ホームページのログイン認証の際、PCから相手方サーバーに対し送信されるMACアドレスについて 1 2022/10/17 14:14
- Yahoo!メール メール・アドレスを探したい 1 2022/08/21 09:32
- Visual Basic(VBA) VBA で エクスプロー操作 1 2023/05/31 16:13
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PCとは、メモリ無しでBIOS,PO...
-
先日、PCを替えました。
-
PC133U-333-542
-
ExcelVBAと外付けメディアについて
-
WinXPで8GBのメモリをフルに使...
-
メモリの性能はなぜ倍数なの?
-
EXCELファイルについて
-
i7 rtx4070 メモリ32gb ssd 1tb...
-
パナソニックのレッツノートの...
-
Core 2 duoはi386ですかAMD64です
-
メモリじゃなくてメモリーと言...
-
microSDの製造原価について
-
メモリーの種類
-
ビジネスPCに16GBメモリ
-
メモリ 両面実装と片面実装の違...
-
PCのメモリの確認方法
-
メモリを増やせばCPUの負荷...
-
【PC初心者】 現在APEXをやって...
-
メモリ診断ツールによるハード...
-
メモリ容量UPで、逆にCPU負荷が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PCとは、メモリ無しでBIOS,PO...
-
パソコンメモリ(DIMM)を紹介...
-
メモリーの種類
-
先日、PCを替えました。
-
Windows11のノートパソコンを中...
-
i7 rtx4070 メモリ32gb ssd 1tb...
-
メモリの性能はなぜ倍数なの?
-
メモリの対応しているノートパ...
-
メモリの挿す順序
-
メモリ容量UPで、逆にCPU負荷が...
-
メモリのハードウェア予約済み...
-
EXCELのVBAで作業ファイルを閉...
-
メモリーのPC2-6400とPC2-6400U...
-
ブラウザーを立ち上げているだ...
-
スマホのメモリについて
-
メモリ 両面実装と片面実装の違...
-
NEC QXシリーズのmibについて
-
3DCGに興味があり、新しくPCを...
-
富士通 Lifebook A572/F のメモ...
-
USBメモリの使用履歴について
おすすめ情報