Chapter 10

4日目::マザーボード4回目「BIOS動作編」

shiozumi
shiozumi
2021.07.16に更新

BIOSとBIOS拡張の深堀!(Wikiも参考に~)

前回に引き続き、BIOSの学習をおこなって行きます。今回は、BIOSの動作の流れについて解説して行きたいと思います。電源やリセットスイッチON! その直後、マザーボード上で最初に起動されるBIOSのプログラムは、実際にはどんな処理を行うのでしょうか? 繰り返しになる部分もあるかと思いますが、もう少し調べて行きましょう。

まずは、このサイトから見てみましょう!

http://it-information-engineering.com/boot

それぞれ説明に使用している図も違いますけどね。ちょっとだけ、私の琴線に触れたので、今日はこのサイトを使ってみたいと思いましたよ~ (o^―^o)ニコ CPUを中心にして説明してあるのが、分かりやすいポイントかな? 動画の中では、CPUを人間の心臓部分なんて例えていますが、まあ~、一般的には、脳ミソですね。

動画解説1(BIOSの大まかな流れ)

https://youtu.be/lhwKw5Hxgvs

まとめ(プチ)

  1. 電源スイッチON(リセットON)BIOSが起動。ピ![^1]・・・と短く鳴る。
  2. BIOSが、キーボード、マウス、ビデオ(モニタ)などの周辺機器の初期化、更に拡張BIOSを起動し、全てのハードウェアーの初期化を行う。POST処理(ポスト:Power On Self Test)
  3. ハードディスク(起動デバイス[^2])の記録領域の先頭(MBR)から、ブートローダーを読み込んで実行する。この時点で、BIOSプログラムは終了です。[^3]
  4. ブートローダーが、OSを読み込んで実行、OSを起動する。

動画では、2.5~2.6 として、BIOS設定画面を上げていましたけど、ここでは、3の直前になりますね。2.99・・・といったところでしょうか? (^^ゞ 尚、MBRデーター中身は、ブートローダープログラムと、パーテーション情報となります。

MBR・マスターブートレコード(Master Boot Record)についても、これから少しずつですが、詳しく解説して行きたいと思いま~す。ちなみに、Masterの意味は主です。Recordは記録となり、bootは、bootsの単数形ですが、履物のブーツは蹴る動作としてのイメージとなり、キック、スタートってことのようです。要約すると、主となるスタート情報が記録されている。それが、MBRですね。

https://talking-english.net/boot/

索引 boots については、ここで調べましたよ~ ( ´艸`)

動画解説2(BIOS動作::プチまとめ)

https://youtu.be/WmAIDv_3l9s

3番のブートローダーを詳しく調べて行きます!

本来なら、1,2,3と順番に説明する方が良いのですが、先に3番のMBRをかる~く説明していきますね。MBR・マスターブートレコード(Master Boot Record)前回も紹介した、こちらの初心者向きのサイトをどうぞ!

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

動画解説3(MBR解説)

https://youtu.be/CA--PKrNK5k

まとめ(MBR)

  1. BIOSは、起動デバイスの先頭に記録されてある、MBR(Master Boot Record)を読み込んで、ブートローダー(ブログラム)を起動する。
  2. ブートローダー(ブログラム)は、パーテーションテーブルの情報を元にして、さらに次のブートセクターを読み込む。
  3. ブートセクターには、MBRと同様、OSを起動するプログラム(こちらもブートローダー)があり、それを起動する。

処理そのものは、リレー競走のようにバトンを渡していくように進んで行きます。そして、そこには、実行するプログラムとデーターが1セットとなり、しかも先頭に記録されている。そういった仕様の共通化が、重要な事でもありますから、是非、この機会に覚えてくださいね。

MBR、さらに深堀用の参考サイト

そして、さらに理解を深めていくために、こちらのサイトも見て行きますね。もう~、お腹いっぱいという方は、飛ばしてもOKです! (o^―^o)ニコ

https://jisaku-pc.net/words/mbr.html

動画解説4(MBR深堀解説)

https://youtu.be/on6OW9AKE0w

まとめ(MBR深堀)

  1. パーテーション情報は、16bytesのデーターが、4つある。
  2. ブートフラグが、0x80なら、起動可能なパーテーションとなる。
  3. パーティションタイプ(NTFS、FAT32、etc)
  4. パーティションの開始位置、終了位置、総セクター数
  5. CHS方式、LBA方式の2種類がある。

パーテーションテーブルの内容を、しっかり覚えるというよりも、こんな風なデーター構造になっているんだなあ~って理解してもらえれば、今後の学習も比較的スムーズになると思っています。

当たり前のことですが、OSが起動する前の段階では、ファイルシステムは使えませんので、HDDからの読み取りは、セクター単位で指定することになります。

動画解説5(MBR深堀まとめ)

https://youtu.be/eTFGg0AcEdo

MBR::更に奥深く堀り下げて~(Wikiも参考!)

https://ja.wikipedia.org/wiki/マスターブートレコード

初心者の方は、無理して覚える必要はありませんが、ちらっと眺めると、もしかしたら良いかと思って、Wikiのリンクを貼っておきますね~

動画解説6(パーテーションテーブル詳細)

https://youtu.be/jV9Sb8nc2rU

動画の最後、間抜けな顔が、自分ながら面白い!(爆笑)
ま、停止しなければ分かりづらいですけどね~

MBRをハードディスクからファイルに出力してみます!

linux CentOS 5.6 のPCで試しています。

[root@s1 ~]# df

Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                     239242956  51159052 175735292  23% /
/dev/sda1               101086     36092     59775  38% /boot
tmpfs                  1536292         0   1536292   0% /dev/shm

[root@s1 ~]# dd if=/dev/sda of=/root/mbr.bin bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 4.3844e-05 seconds, 11.7 MB/s
[root@s1 ~]# hexdump -C mbr.bin
00000000  eb 48 90 d0 bc 00 7c 8e  c0 8e d8 be 00 7c bf 00  |.H....|......|..|
00000010  06 b9 00 02 fc f3 a4 50  68 1c 06 cb fb b9 04 00  |.......Ph.......|
00000020  bd be 07 80 7e 00 00 7c  0b 0f 85 10 01 83 c5 10  |....~..|........|
00000030  e2 f1 cd 18 88 56 00 55  c6 46 11 05 c6 46 03 02  |.....V.U.F...F..|
00000040  80 00 00 80 41 64 02 00  00 08 fa 90 90 f6 c2 80  |....Ad..........|
00000050  75 02 b2 80 ea 59 7c 00  00 31 c0 8e d8 8e d0 bc  |u....Y|..1......|
00000060  00 20 fb a0 40 7c 3c ff  74 02 88 c2 52 be 7f 7d  |. ..@|<.t...R..}|
00000070  e8 34 01 f6 c2 80 74 54  b4 41 bb aa 55 cd 13 5a  |.4....tT.A..U..Z|
00000080  52 72 49 81 fb 55 aa 75  43 a0 41 7c 84 c0 75 05  |RrI..U.uC.A|..u.|
00000090  83 e1 01 74 37 66 8b 4c  10 be 05 7c c6 44 ff 01  |...t7f.L...|.D..|
000000a0  66 8b 1e 44 7c c7 04 10  00 c7 44 02 01 00 66 89  |f..D|.....D...f.|
000000b0  5c 08 c7 44 06 00 70 66  31 c0 89 44 04 66 89 44  |\..D..pf1..D.f.D|
000000c0  0c b4 42 cd 13 72 05 bb  00 70 eb 7d b4 08 cd 13  |..B..r...p.}....|
000000d0  73 0a f6 c2 80 0f 84 ea  00 e9 8d 00 be 05 7c c6  |s.............|.|
000000e0  44 ff 00 66 31 c0 88 f0  40 66 89 44 04 31 d2 88  |D..f1...@f.D.1..|
000000f0  ca c1 e2 02 88 e8 88 f4  40 89 44 08 31 c0 88 d0  |........@.D.1...|
00000100  c0 e8 02 66 89 04 66 a1  44 7c 66 31 d2 66 f7 34  |...f..f.D|f1.f.4|
00000110  88 54 0a 66 31 d2 66 f7  74 04 88 54 0b 89 44 0c  |.T.f1.f.t..T..D.|
00000120  3b 44 08 7d 3c 8a 54 0d  c0 e2 06 8a 4c 0a fe c1  |;D.}<.T.....L...|
00000130  08 d1 8a 6c 0c 5a 8a 74  0b bb 00 70 8e c3 31 db  |...l.Z.t...p..1.|
00000140  b8 01 02 cd 13 72 2a 8c  c3 8e 06 48 7c 60 1e b9  |.....r*....H|`..|
00000150  00 01 8e db 31 f6 31 ff  fc f3 a5 1f 61 ff 26 42  |....1.1.....a.&B|
00000160  7c be 85 7d e8 40 00 eb  0e be 8a 7d e8 38 00 eb  ||..}.@.....}.8..|
00000170  06 be 94 7d e8 30 00 be  99 7d e8 2a 00 eb fe 47  |...}.0...}.*...G|
00000180  52 55 42 20 00 47 65 6f  6d 00 48 61 72 64 20 44  |RUB .Geom.Hard D|
00000190  69 73 6b 00 52 65 61 64  00 20 45 72 72 6f 72 00  |isk.Read. Error.|
000001a0  bb 01 00 b4 0e cd 10 ac  3c 00 75 f4 c3 00 00 00  |........<.u.....|
000001b0  00 00 00 00 00 00 00 00  80 00 00 00 00 00 80 01  |................|
000001c0  01 00 83 fe 3f 0c 3f 00  00 00 8e 2f 03 00 00 00  |....?.?..../....|
000001d0  01 0d 8e fe ff ff cd 2f  03 00 4d c9 cb 1d 00 00  |......./..M.....|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200

MBRをファイルに出力して、全てをダンプしてみました~

ddコマンドのWindows版は、以下のサイトを参考に!

https://marujx.hatenablog.com/entry/20070912/1189594164
https://diary.palm84.com/entry/20071116/1195139861

尚、dd.exeのダウンロードは、こちらから!

http://www.chrysocome.net/dd

中級者の方で余力のある方は、是非、お試しください! ・・・と言いつつも、MBRが壊れるとPCが起動しなくなりますから、あくまでも自己責任でどうぞ!

動画解説7(MBRファイル出力)

https://youtu.be/j1IEK1p5VE8

パーテーションテーブル詳細は、このサイトも分かりやすい!

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

解説動画からの切り抜き!

パーテーションテーブルは、0x01BE~、16bytesブロック×4つ

動画解説7でも、こちらのサイトを使って、説明しています!

解説動画の1ショットを切り抜いて貼り付けましたので、もう一度、復習して置きましょう。2バイト目の上位2ビットが、シリンダの上位2ビットとなり、下位6ビットがセクタとなるところが、ひとつ目のポイントです。そして、3バイト目の8ビットと、先ほどのシリンダ上位2ビットが合体し
て合計10ビットで、シリンダの位置を表しています。従って、0~1023 となるんですね。

0x01BE: 80,01,01,00,83 実際のパーテーションテーブル!

Cylinder Head Sector(CHS シリンダ・ヘッド・セクタ)

0x01BE: 80 = ブートフラグ
0x01BF: 01 = ヘッド
0x01C0: 01 = シリンダの上位2ビットと、セクタの下位6ビット
0x01C1: 00 = シリンダの下位8ビット
0x01C2: 83 = パーティションタイプ(ext2などのLinuxファイルシステム)

結果:ヘッド = 1,シリンダ = 0,セクタ = 1 ですね。

でも、実際の物理的な位置は、HDDディスクのどのあたりかな?

CHSの最小値~最大値(補足)

ヘッド:0 ~ 254 (0x00~0xFE)・・・8bit
セクタ:1 ~ 63 (0x01~0x3F) ・・・6bit
シリンダ:0 ~ 1023 (0x00~0x3FF)・・・10bit

この最大値は、IDEの仕様との関係性もありますので、あくまでも、論理値です。

動画解説8(MBRのまとめ)

https://youtu.be/8irlPLGo12E

解説動画からの切り抜き!

こちらでも、解説動画の1ショットを切り抜いて貼り付けました。繰り返しとなりますが、復習して置きましょう。これだけ繰り返して学習すれば、もう忘れられないかも?!( ´艸`)


本日のまとめ

今回は、ここまでにしておきますが、いやあ~、全然まとまらない。('◇')ゞ
タイトルは、BIOS拡張の深堀りの予定となっていましたが、急遽変更してMBRの深堀となり、しかもパーテーションテーブルのデーターを解説しようとして、CHS(シリンダ・ヘッド・セクタ)を取り上げたら、その先に対応する物理イメージ(HDD)の説明まで辿り着けず・・・ということで次回は、CHSの値と、実際のハードディスクの関連付けを、学習して行きたいと思います。

次回の予告(CHSと物理イメージ)

ハードディスクドライブ(hard disk drive, HDD)

https://ja.wikipedia.org/wiki/ハードディスクドライブ

いきなり、追加で3サイト!

http://kccn.konan-u.ac.jp/information/cs/cyber07/cy7_hdd.htm
http://hdd-data.jp/hdd-recovery/hdd-organization.html
https://upatissa.hatenablog.com/entry/2020/11/29/121003

ヘッド=1,シリンダ=0,セクタ=1 ここを参考!

https://xtech.nikkei.com/it/pc/article/NPC/20070802/278982/

INT 13H (ソフトウェア割り込み)

https://www.hazymoon.jp/OpenBSD/misc/hdd.html

プログラマー的には、このサイトのようなリファレンスマニュアルに惹かれますね。(^▽^;)