アプリ版:「スタンプのみでお礼する」機能のリリースについて

市販されているSSDの容量って、64GB、128GB、256GB、512GBなど、
2のX乗の値であることが多いですよね。
メモリモジュール1枚の容量でも512MB、1GB(1024MB)、2GB(2048MB)、4GB、8GB、16GBなど同様のことが言えると思います。

なんでこうなの?という質問に対して、以前に
コンピュータは2進数のバイナリデータを扱うから、必ず2のなんちゃら乗になるんだよ
という回答がなされているのを見たことがあります。

でも、実際にはintelのSSDなどは120GBや240GBなどの上記の内容にはあてはまらないものもありますし、HDDで言えばもっといろんなバリエーションがあったと思います。
(代替セクターに使われている分が差し引かれていると考えると当てはまるのかもしれませんが)

そもそも、ビットデータしか扱うことしかできないのであっても、記憶素子の集合が表せるパターンが2のX乗通りというだけであって、必ずしもその記憶素子の数が2のX乗でなければならないという理由にはならないと思います。

例えば、1バイトを記憶できる素子を900個並べたら容量900バイトのメモリーになり、
1024バイトの容量しか作れないというわけではありませんよね。

では、なぜメモリーデバイスの容量は2の累乗の値をとることが多いのでしょうか。
よろしくお願いいたします。

A 回答 (5件)

> 例えば、1バイトを記憶できる素子を900個並べたら容量900バイトのメモリーになり、


> 1024バイトの容量しか作れないというわけではありませんよね。
例えば10ビットのアドレス空間が存在した場合
アドレス空間の大きさは1024バイト分になりますが、
ここでメモリ容量が900バイトしかないとすると
10ビットのアドレス空間の中に利用できない部分ができてしまいます。

これはメモリコントローラーにとっては面倒な話で
本当にそんなメモリが存在しているなら
アクセスできない部分を避ける例外処理を実装する必要が出てきてしまいます。
これはコストが高くなるというデメリットに結びつくため、
結果として高コストなくせに容量が少ないという何のメリットもないメモリシステムになってしまいます。

またメモリチップ側を見ると、行アドレスと列アドレスでアクセスできるように
メモリセルのアレイを構成するわけですが、
行アドレスと列アドレスのどちらかで使わないアドレス(デコードしないアドレス)を
作れば容量を減らす(メモリセルアレイを小さくする)こと自体はできるでしょう。
しかし、中途半端に容量を減らしてもアドレス信号線の本数を減らすことはできないため、
メモリチップの端子の数は変わりません。
(わざわざ端子を設けて、ボード上に配線までして確保したアドレス空間を使わないというのは非常にもったいないことです。)
アドレスデコーダーなどの周辺回路だって大して小さくはならないでしょう。
結果としてメモリチップの製造コストはほとんど変わりません。
むしろ
・前述の例外制御のコスト
・中途半端な容量のメモリチップの設計、検証などの費用(意味の無いラインナップを増やすのはそれだけでコストになる)
もかかりますから、理屈上作れたとしてもこんな物作ろうとする人は誰もいないでしょう。

[参考] 第11回: メモリLSIの基本構成
http://ifdl.ec.t.kanazawa-u.ac.jp/~akita/class/o …


それから、アドレス空間を残すのがもったいないなら、
データバス幅(1アドレス当たりのビット数)を8bitとかじゃなく9bitにすることは
できないのかと思うかとしれませんが、
これも技術上できてもそんな中途半端な物に需要がありません。
メモリ規格もそんな中途半端なバス幅を定めた物はメジャーな規格ではたぶん無いと思います。
(あんまり種類を増やしすぎるのは、それだけでコスト高になります。)


というわけで
> では、なぜメモリーデバイスの容量は2の累乗の値をとることが多いのでしょうか。
この答えは、そんな中途半端なメモリチップを作っても
コスト高になるだけだからです。

ただ、これはメモリチップレベルの話なので、
例えば8Gbitのチップを3枚使って24Gbitとかいう構成ができないわけではないです。


> 市販されているSSDの容量って、64GB、128GB、256GB、512GBなど、
> 2のX乗の値であることが多いですよね。
SSDの容量については別に2のX乗にはなっていません。
256GBというのは、256,000,000byteですからね。
2のX乗である必要があるのであれば、例えば268,435,456byte(2の28乗)等になります。

この理由は、SSDの場合素子の不良に備えて予備領域を取っているためで、
予備領域の大きさ分SSDのシステムとしては領域が減ったように見えるので
2の累乗ではない256GBなどの容量になっています。

だったら、別に257GBとかでも良さそうな物ですが、そうなっていないのは
単に(人間にとって)きりの良い数字にあわせただけのことだと思います。

例えば、
 PCパーツ最前線:日本サムスンに聞く「最新SSD“840”のこだわり」/ ランダムアクセス高速化に注力、コストパフォーマンスにも自信
 http://akiba-pc.watch.impress.co.jp/hotline/2012 …
では
| ―120GBと、250GB、500GBを比べると、オーバープロビジョニングの領域比率が違いますが、
|  それには何か意味があるのですか?
| [岡田氏]  一般的に、SSD容量が増えるほど、あるブロックに対する
|  書き換え回数は減る傾向にあります。
|  250GBや500GBに比べると、120GBは、やはりその点が不利となる可能性があります。
|  ただ実際には、大きな意味はありません。
|  単純に、数字の語呂を合わせているだけのことです(笑)。
|  例えば、125GBにしてオーバープロビジョニングの領域を減らしたとしても、
|  全く問題のない品質となっています。
のような話が出ていて、語呂をあわせただけだという話が出てます。
    • good
    • 2
この回答へのお礼

アドレス空間やアドレスバスの幅など、新しいことを学べました。

ありがとうございました。

お礼日時:2014/09/07 12:58

夏休みの工作や趣味で、メモリのアドレスデコード回路を自作したことがあれば分かると思いますが、アドレッシングをn本のパラレル配線で行う場合、アドレス空間は必然的に2のn乗となります。


10本のアドレスバスで1024とおりの番地を指定できるのに、900バイトしか読み書きできないのであれば、残りの124バイト分は無効であるという信号を送るための別配線または信号伝達が必要となります。そうなると余計な配線またはロジック回路を組まなければなりません。

なお、ハード的に設計余裕がある場合は中途半端な容量でもOKです。最近はそうなのでしょうね。
でも、私の世代では、そんな余裕はありませんでした。
    • good
    • 0

パソコンに使われるメモリは、PCが32bitバスシステムなら32の倍数(2のx乗でもあります)、


64bitバスシステムなら64の倍数(2のx乗でもあります)になります。
↑ 結果は、共に同じ容量になりますが。

もし、上記の範囲外の容量にすると、アドレスを中途半端な値までの制御にしなければなりません。
メモリは、高速アクセスが求められるために、変な制御(回路)を入れたくないので、
上記のような倍数のメモリになります。

システムLSIに内蔵されるメモリの場合は、必要な容量のみにして中途半端な容量になる事が
あります。
この場合は、ソフトのプログラミングでメモリの無いアドレスにはアクセスしないようにします。

HDDの場合は、容量がアナログ的要素で決まり、2のx乗で増やす事が困難なので、
製造可能な最大容量を確保するために、2のx乗ではない容量になります。
CDやDVD、BDも同じです。

SSDの場合は、特に理由は無いはずで、単にメーカーの戦略のような気がします。
    • good
    • 1

SSDの60GBは4GB、120GBは8GB、180GBは12GB、240GBは16GB、480GBは32GBという答えが分かれば、わかり易いでしょうけど。


X25-M Mainstream は80GBで16GBですけどね。

これは、Intel SSDのルールです。60GBのSSDは4GBを代替セクターや何らかの緩衝セクターとして利用する仕様です。32GB辺りで、2GBが使われており、128GBなら、8GBになり、256GBなら16GBになります。この辺りは、SSDを見れば多くの人は感づくはずです。容量は若干犠牲にしますが、その代わり信頼性を高めるための措置のために利用されています。

もともとNANDフラッシュは書き換え回数の上限があるため、それによるトラブルが多いですから、こうやって意図的に一部を隠蔽し代替に使うことで、信頼性を高めるのがIntelの戦略と考えられます。


Q/なぜメモリーデバイスの容量は2の累乗の値をとることが多いのでしょうか。

A/一般に2のべき乗になるのは、2進処理を前提とする媒体では当たり前のことです。その理由は、情報の単位が4bit、8bit、16bit・・・と2のべき乗で処理されていることと、それを転送する回路もそれを前提に、バス回路を形成しており、最も効率的に情報伝達ができるが故の仕様です。(もちろん、例外はあります)
ハードディスクなどの磁気ディスク媒体や光学ディスク媒体がそういう仕様ではないのは、これらはベースが半導体ではないためです。要は、データの保存デバイスとして専用に特化しており、わざわざ2のべき乗で統一する必要はないのです。

もっとわかりやすく回答すると、メモリデバイスは、ロジック回路の発展として考えられています。
たとえば、CPUが4bitならば、それと相性の良い回路で設計する方が、どの製品でも互換性をもって供給でき、安価に大量生産できるという強みから、2のべき乗の処理に適合した製品とするのです。その後、たとえば一部の機能をソフトウェアまたは、ハードウェアの回路停止によって隠蔽し、停止しているように見せたり、IntelSSDのように別の役割に一部を提供し、実容量から外すということは、比較的よく行われますが、専用品のASIC+オンチップLSI製品でなければ、通常は、2のべき乗を前提とします。これは、汎用性を前提として価格を抑えるための手段です。

たとえば、5bitのバス回路を作った場合、それを余すことなく使えるのは、周波数を相応倍にした10、15、20の回路になります。これを、4bitや8bitでそのまま使えるかというと、一定のアップサンプリングやアップコンバートを必要とするため、その回路をつけるだけでコスト増になります。

しかし、32bit幅と64bit幅だけなら、単純に倍速クロックと等速クロックだけの違いで、処理は終わります。要は、サンプリングを倍速かするか、幅を広めるかの話だけです。そのため、下手にビットを刻んで製品を作るより、半導体の場合は2のべき乗で構成した方が、汎用性(他の機器で使える可能性)が高くなり、歩留まりが上がり生産コストが劇的に下がるという特徴があるのです。

それだけです。

そして、何より重要なのは、容量が必ずしも2のべき乗にならない製品は、2のべき乗で計算したときに、どれだけの容量差が出るかを、他の製品と比べれば理由が分かるはずです。ちなみに、180GBが192GBである理由は、64GBが3枚か、32GBが6枚だからです。緩衝または欠陥管理装置として4/64または2/32として容量を提供すれば、つじつまが合うのですよ。
尚、これが66GBの容量で132GB、264GBとなると、LCD+BISのような特殊なエラー訂正があるか、実際にそういう端数のある規格を作ったかのどちらかとなります。
    • good
    • 1

>1バイトを記憶できる素子を900個並べたら容量900バイトのメモリー



なら、任意の場所のデータを読み書きする時、アドレスを表すのに用いる
バス(線のかたまり)は何本いるでしょうか?

9本なら512個、10本なら1024個までアクセスできるのに900個しか使わないというのは
もったいなくないですか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています