Chapter 13

6日目::マザーボード6回目「CHSトランスレーション」

shiozumi
shiozumi
2021.07.30に更新

動画解説1(5日目の振り返りから)

https://youtu.be/PyHTwuzRA7A

今回の学習ポイント

まず最初に学習の要点から、お話ししますね。(o^―^o)ニコ といいますのも、今回のカリキュラムを作成しての感想ですが、私自身も不明な点が残っています。そもそも、ATA(アドバンスド・テクノロジー・アタッチメント)は、1994年にANSIで規格化された仕様ですから、既に30年近くも前、かなりの大昔なんですね。Σ(・□・; 実際にパソコンを使っての実機テストも不可能なんですね。((+_+))

今回は私も、それなりの時間を割いて調べて見ましたけど、結果、それに見合うだけの理解も得られず。メリットを感じられません。そもそも時代は、M.2 SSDですし・・・というこで、みなさん自身で調べることも、あまりお勧めできない内容なんですね。又、技術的にもかなりの過渡期でどんどん変化して行きますしね。あらあら・・・(o´・ω・`) コマッタモンダ

学習ポイントは、以下の6点です!

  1. ATA仕様の変化、HDDの歴史は、概要のみを把握して貰えれば、ひとまず十分です。
  2. LARGE、CHSトランスレーションのしくみ。
  3. LBA(ロジカル・ブロック・アドレッシング)についての概要。
  4. 関数電卓の使い方に慣れる。(HDDの容量計算を題材にして!)
  5. 2進数,10進数,16進数の計算、又、変換方法
  6. メガバイト、ギガバイトなどの単位変換、KBとKiB,MBとMiB,GBとGiBの変換。

動画解説2(今回の学習ポイント)

https://youtu.be/dUwZjQNS0ok

動画撮影後にテキストを編集したので、一部ことなりますがご了承ください。('◇')ゞ

HDD容量 528Mから8.4Gへ拡張(IDE→EIDE)

BIOS側のH:ヘッダで指定する値の有効ビット数が、4ビットから8ビットに増えて(H:2^4~H:2^8)528M × 16倍(4bit:2^4)= 8.4G まで指定できるようになりました。CHSトランスレーション機能、LARGEモード と呼ばれています。尚、拡張の手法は2つあり、もうひとつは、LBAモードです。まずは先に、LARGEモードから説明して行きま~す! (o^―^o)ニコ

BIOS設定(LARGE/LBA mode)INT13のCHS変換

BIOS設定 CHS変換方式 補足
LARGE CHSトランスレーション HとCの変換,Sは変わらず
LBA CHSジオメトリ値をLBA値に変換 0から始まる連番

割り込みINT 13における、LARGE/LBA modeの動作については、冒頭でもご説明したとおり、実機も既に入手不可能なので、残されたネット上の文献だけを頼りに解説しています。('◇')ゞ

動画解説3(電卓の練習から!)

https://youtu.be/vo26uCCXvR0

まずは、LARGEモードから!

項目 528M bytesの壁 8.4G bytesの壁 補足
CHS C:2^10 H:2^4 S:2^6-1 C:2^10 H:2^8 S:2^6-1 H:4bitが有効になる
有効ビット数 20bit(10+4+6) 24bit(10+8+6) +4bit
解説 BIOS側とATA規格の差異 CHSトランスレーション[1] -
規格 IDE(ATA) EIDE(Enhanced IDE)[2] ATA-2で規格
BIOS設定 - LARGEモード[3] -

BIOS側(24bit)、ATA仕様(28bit)の仕様だったにも関わらず、CHSの設定する値の差が異なることによって、結果有効ビット数が20bitに減ってしまい、528M bytesの壁が出来てしまいました。(前回の5回目で説明済) 又、その壁を突破するために、CHSトランスレーション を、BIOS側で処理するようにして、ひとまずは、8.4G bytesまでの容量の指定が可能となりました。(^^ゞ

索引:HDDの話さんのサイトからの作図を利用させて貰いますね。
https://www.hazymoon.jp/ (前回でも説明で紹介したサイトです)

動画解説4(LARGEモード/その1)

https://youtu.be/EbQC_UBJ1p8

録画後にテロップにて修正して置きましたけど、0~511の512を表現するのに必要なビット数を、最後まで7bitって言ってましたね。実際の解説画面では、9bitでちゃんと表示してあるのにも関わらず、、、(^^ゞ 大変失礼しました。

CHSトランスレーション変換式!

https://stuff.mit.edu/afs/athena/system/rhlinux/redhat-6.2-docs/HOWTOS/translations/ja/mini/html/Large-Disk-4.html

こちらのサイトから引用して、CHS変換式を抜粋しておきますね!

ジオメトリーである(C,H,S)を使用します。普通は、S = S', C' = C/N, H'= H*N という関係になっており、N は、C' <= 1024 を満たす最小の 2 のべき乗です( こうすると、 C' = C/N の切り捨てによる容量の無駄を最小にできます)。 この方法でも、最大で 7.875GB までの読み書きが可能になります。

引用させて頂いてなんですけど・・・Σ(・□・;)マチガッテイナイカ~イ
C'=C/N, H'=H*N だと、下位ビット が切り捨てられてしまいますよね~
7.875GB は、GiB(ギビバイト)ですね。GBへの変換も試して見ましょう!

動画解説5(LARGEモード/その2)

https://youtu.be/R66Z8aYjedw

CHSトランスレーション(解説Excel作図)

・・・ということで、変換の数式のみだと、やや理解も難しいので、実際にExcelで図を作ってみましたよ! 電卓の用意も忘れずにどうぞ! (o^―^o)ニコ

Chromeブラウザーで、以下のリンクをクリックすると、私が、OneDriveにアップした、Excelファイルが開かれると思います! やや、作図に無理がありますけど、('◇')ゞ データの配置イメージは、多少なりとも、つかめてくると思いま~す!

https://1drv.ms/x/s!AtEVANBpqtdwxiE_90wTCXnwd8tZ?e=0y3arb

動画解説6(CHSトランスレーション1/概要)

https://youtu.be/98FWxYhQkAw

動画解説7(CHSトランスレーション2/計算)

https://youtu.be/saDcBO7dNqI

動画解説8(CHSトランスレーション3/補足説明)

https://youtu.be/2tm60hZdcn4

切り捨てられた余りのビットを加算したのが下の式になります。
C'=C/N, H'=H*N+(C mod N)
Nは、C < 1024 となるような、2のべき乗
おそらくこれが正解だと思うのですが、この式は残念ながら検索しても見つかりませんでした。
少なくても、C/N の余りを切り捨てたままでは、正しくビット変換できませんね。(^^ゞ

LBAモード説明(次回へ持ち越し)

索引:LARGEモード同様、HDDの話さんのサイトからの作図を利用させて貰いますね。
https://www.hazymoon.jp/ (前回でも説明で紹介したサイトです)

こちらについては、7日目で解説していきたいと思います! 先ほどの、LARGEモードのCHSトランスレーションで、かなり頭を使っていると思いますから、、、もう一杯だよ~って方も中にはいると思います。ここらで一旦、小休止。 (^^ゞ

ATA規格、HDDの歴史を、かる~く!

https://ja.wikipedia.org/wiki/Advanced_Technology_Attachment

予習復習、自己学習の練習も兼ねて、以下のサイトをご覧ください。尚、深堀も各自でお試して頂いても構いませんが、学習のポイントでもお伝えしたとおり、情報が古いので必要以上には追わないように・・・(;^_^A

もうひとつは、こちらのサイトもご覧ください。

http://park12.wakwak.com/~eslab/pcmemo/hdisk/hdisk2.html

IDEとATAの解説も!(初心者向き)

IDEの解説は、こちらのサイト!

https://wa3.i-3-i.info/word17326.html

ATAの解説は、こちらのサイト!

https://wa3.i-3-i.info/word17327.html

SATAの解説は、こちらのサイト!

https://wa3.i-3-i.info/word12855.html

まずは、こちらのサイトで、かる~く頭の中に概要をインプット! のちに説明する、SATAについても、予習して置きましょう!

Wikiの容量の壁

https://ja.wikipedia.org/wiki/容量の壁

このページを読んでいると、さらに謎も深まるので、ご注意くださいね!(笑)

C/H/S方式の問題

https://xtech.nikkei.com/dm/article/FEATURE/20150120/399784/

外周と内周を同じセクタ数にすることに無理があるのは、小学生でも分かりそうですよね。
CHSから、LBAに変わっていく理由も、ここにあるんですよね~

ここまで、プチまとめ!

CHSジオメトリへの3次元でアクセスする手法は、HDDの進化に置いて、物理的な構造上のミスマッチが生まれました。ディスク容量が8.4Gぐらい迄は、CHSトランスレーション(値の変換)で対応可能でしたが、さらなる大容量化では、1トラックあたりのセクター数が、外周と内周で変わっていまい、もはや、CHS方式では対応できず、結果、論理的なアドレッシングのLBAとなります。

HDDの容量計算の練習!

是非、この機会に電卓にも慣れてくださいね。下記のCHSの値を使って、実際に容量計算してみましょう!

HDDディスク容量 1624.6MB(メガバイト)

HDDディスク容量 4311.9MB(メガバイト)

HDDディスク容量 500GB(ギガバイト)

最後は、LBAモードのみでセクター数×512で計算して下さい。ここにある、C/H/Sの値では、8.5G までしかアクセスできませんからね。LARGEモードだと、そうなるってことを、説明したかったのかな? (^^ゞ

単位変換(MBとMib)について

Googleで検索しながら文献を読んでいると、割と多く、Mib、Gibの単位が出てくるので、この辺りは、しっかり覚えて置きましょう!

https://academy.gmocloud.com/keywords/20170510/4314

Googleの単位変換でデバッグ!

https://www.google.com/search?q=単位変換&oq=単位変換&aqs=chrome..69i57j0l9.3338j0j15&sourceid=chrome&ie=UTF-8

動画の中でもご紹介させて頂きましたけど、もう一度、最後に復習して置きましょう!

脚注
  1. CHSトランスレーションは、BIOS内部でCHSの変換「ジオメトリ変換」を行う。たとえばHを2で割るかわりにCを2倍するなどして、CHSの範囲を有効活用する。※ Wikipediaからの引用 ↩︎

  2. EIDEは、ATA-2規格から組み込まれてました。 ↩︎

  3. LBAを指定すると、BIOS側でCHSの値を、LBAの値に変換。(今のBIOS画面では、LARGE/LBAは、ひとつの項目となっていて選択不可能ですが、IDEからEIDE(ATA~ATA-2)の過渡期の頃は、たしか個別選択が可能だったと思います。) ↩︎