• ベストアンサー

SE初心者の質問(メモリ編)

jactaの回答

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答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を破壊したり、並行に稼動している他のアプリケーションを破壊しないようにするためです。 その意味では、仮想アドレス空間を主に使用する環境で、かつ一般的なアプリケーションしか開発しないのであれば(デバイスドライバなどを作らなければ)、アドレス空間 = メモリ領域と考えても、実質的には問題ありません。 ご理解いただくためにかなり詳しく解説しました。分からない用語はなるべく検索した上で再質問してください。

phoenix062
質問者

お礼

ありがとうございます。 かなり理解できました。特権モードなどは、あまり意識しないでも 問題なさそうなので今回はこれ以上掘り下げないです。 IT用語は同一のような言葉で、どちらも普通に使われる言葉が 多くて悩むことがあります。また今回のように、若干ながらも 見方によって違うものもあるので余計に混乱します。 実は、初心者質問「メモリ編2」の質問も予定しているので、 そちらをもし見かけたら、また回答願います。 ありがとうございました。

関連するQ&A

  • メモリ3枚や4枚でのデュアルチャンネルについて

     デュアルチャンネルは同じメーカーと仕様のメモリを2枚1組で使用し、データ転送帯域をおよそ2倍に高速化する技術ですが、3枚や4枚の場合だとどうなるんですか?  3枚の時は3倍、4枚の時は4倍といった風に、なるのでしょうか? あと、速度や容量を揃えないと不安定になると書いてあったのですが、それだと例えば、メモリスロット4つの32bitのOSのPCでは1GB×4じゃないと安定しないってことになります。 しかし、32bit OSでは、仮想メモリ空間が4GBであるため、カーネル空間の1GBを除くとユーザーが利用できるメモリ空間は3GBまでとなります。 となると1GB無駄になってしまいますよね? かといって3GBにすると1GBのメモリ×2と512MBのメモリ×2で容量が違うので不安定になります。  さらに、1GBのメモリ×3だと3倍にまでしかデータ転送領域が高速化しないことになります。(あくまでも3枚で3倍とかが正しかった場合ですが・・・)  では実質4倍でメモリ3GBっていうのは不可能ってことなのでしょうか? 凄く間違ったことを言っているのかもしれませんが、どなたか分かる方いらっしゃいましたら教えてください。 よろしくお願いします。

  • メモリについて

    メモリアドレスの説明の時に、1byteは8bitと、1つの番地を示す時に 00000000~FFFFFFFFなどの表が使われてますが、 1bitって0,1の2つまでなのに、それぞれの桁にF(0~15)までの値が入れられるのがわかりません。 各桁(1bit)の中も4つに区切られているのですか? 頓珍漢な質問かもしれませんが、よろしくお願いします。

  • 32bitOSで4GBメモリを使用できない理由

    こんにちは。いつもお世話になっています。 Windows XPやVistaの32bit版はメモリスロットに計4GBのメモリを挿しても3GBと少ししか認識しませんよね。 その原因が「アドレス空間」が関係しているというのを見たことがあるのですが、そもそもアドレス空間とは何のことですか?この空間がメモリの認識にどう影響を与えているのか知りたいです。また、何故同じ32bitOSでもそれぞれのPC環境によって認識できる容量に差が出てくるのでしょうか?64bit版ではどこがどう変わって128GB(Vista Business以上)ものメモリを認識できるのでしょうか? たくさん質問してしまって申し訳ありません。 検索してみたのですが少し難しく、私には理解できませんでした。 お時間のあるときでかまいませんので、ご回答よろしくお願いします。

  • ThinkPad X201のメモリ

    TinkPadX201ですが、メモリが2GB×2式搭載されています。 メモリを増設したいのですが、諸元では、8GBまで搭載できるようになっています。  増設するために、メモリスロットにあるメモリは捨てる覚悟です。 メモリスロットが2つあるので、4GB×2、つまり、1つのスロットには4GBまでしか搭載できないのか?とも思っていますが、 当時、4GBのメモリしかなかったが、今は8GBのメモリもあり、1スロットに8GBのメモリ(2つで16GB)を搭載できないのでしょうか? BIOSの制限でしょうか? 64Bitのアドレスバス幅/データバス幅はあるのでしょうから、アドレス空間を8GBに制限する理由はないように思いますが、・・・。

  • 32ビットCPUのメモリについて

    32ビットCPUの場合、アドレス空間の制限で1プロセスにつき4GBまでしか使用できないことになっていると思いますが、このうち2GBはシステム用、その他2GBがアプリケーション用と聞いたことがあります。1プロセスで使用する度にOSに2GBほどのメモリを使用することがあるのでしょうか?(プロセスが多くなる度にOSで使用されるメモリ量も増大すると考えてよろしいでしょうか?)

  • 仮想メモリ

    16ビットの仮想アドレス空間を持つ場合のページング処理について考える。 ページテーブルサイズを8とする。 主記憶の実ページ(物理ページ)の大きさを求めよ。 という問題がわかりません。 仮想メモリについて理解できてきないのだと考え色々調べましたがよくわからなかったです。 仮想アドレス空間と主記憶上の実ページの関係が上手くイメージできないです。 どなたか答えと解説をお願いします。

  • メモリをアドレスを直接指定して値を取得するには

    マイコンのプログラムを書いております。 やりたい事はC言語でフラッシュメモリの物理アドレスを直接指定してそのアドレスの値を1バイト読むことです。例えば0xF000番地のアドレスから1バイト読む場合、以下のソースコードで問題ありますでしょうか?なおアドレスは2バイトで表現されます。 unsigned char *p_value; unsigned char value; p_value=&value; p_value=0xF000; この時点で変数valueには0xF000番地の値が正確に代入されてますでしょうか? よろしくお願いします。

  • メインメモリについて質問をさせていただきます。

    こんばんは、早速ですが質問します。 尚、高校生のため専門的な解説や用語など砕いていただけたらと思います。 【http://h50146.www5.hp.com/info/newsroom/pr/fy2007/pdfs/fy07-062_v7000.pdf】 品型RN620AV-ABJ v7080jp メモリ512*2本 CPU core2 @1.8GHz グラボ GeForce7600GS 504MB 自分は、512*2本 メモリの確認はわからないのでしてませんが; とりあえず容量だけいえば、この2本を差し込んでいます。 上記のURLのデータを見る限り ============================== メモリ容量(最大容量)512MB(512MB×1)/1GB(512MB×2)/1GB(1GB×1)/2GB(1GB×2)/4GB(1GB×4) PC2-5300(667MHz)(最大4GB) メモリスロット※3 4DIMMソケット(1ソケット、 2ソケットまたは4ソケット占有済み)/DDR2 SDRAM(240ピンDIMM) ※3 増設は1枚単位で可能ですが、デュアルチャネル構成でパフォーマンスを最適化するためには メモリスロットの各チャネルの合計容量が同一になるように増設することをお薦めします。 ============================== を読んだ限り、これがいいのかな? と思っています。 【http://kakaku.com/item/05209011957/】 予定としては、2GBを買い512MBの2本を継続しようと思ってます。 しかし2CPUなら、メモリの容量の差は小さいほうが 安定しやすいとかなんとかデータに書いてあり悩んでいます。 一応自分の選択するメモリは間違ってはいませんか? 何分素人なので、もし違ってたら悲しいですし。 できればお店は値がはるのでネットがいいのです。 回答、アドバイスよろしくお願いします。

  • LCDに表示するためのフォントデータ

    マイコンでLCDに文字を表示するようなプログラムを作成しています。 現在使用している基板のアドレス0x400000番地から0x480000番地のフラッシュROMの空間に文字コード順に並んだフォントのドットデータが入っているそうで、文字コードを指定して、そのメモリからデータを引き出して、LCDに表示できるようになっています。 このフォントデータは1文字ごとに24バイトのデータとなっていることがわかりました。 なので、21,845文字程度のデータが入っていて表示することが可能のようです。 このようなフォントデータというのはネット上でフリーでダウンロードできるものとかありますでしょうか? またこのような文字のどっとデータをバイナリとしてダウンロードすることが可能なサイトなどご存じでしたら、是非教えて頂きますようお願い致します。 どうぞ、よろしくお願い致します。

  • メインメモリについての酷く拙い愚問です。

    メインメモリから各アプリケーションへ割り当てられ得るアドレス空間の場所は、何らかの基準で先に予約されているのでしょうか? 私は入門者に留まっていますから、質問の内容に誤りが含まれているのかも知れませんが、諒察を宜しく御願い申し上げます。