初期化後になんかやっているよね？そこからBIOS起動しているよね？


プロセッサー初期化 -> BSP(?) -> 謎のソフト -> BIOS

っていう流れでBIOSに起動しているのかな？  
謎のソフトの所で、 in out命令でBIOSコードを読み込んでメモリーに取り込んでいるの？

それぞれのハードウェアを初期化し  
それぞれのハードウェアとはなんですか？ BIOS上でメモリーコントロラーやPCIやFPUやグラフィックのやつなんかを初期化しなくてもいいよね？  
でもPOSTを実行するながれは上記であげたハードウェアを初期化とエラーチェックみたいなんをしないとダメだよね？なんでやる必要があるの？




PC(と呼ばれるハード)を前提にします

CPUには DRAM, ROM などが繋がっていて 指定のアドレスから実行可能  
Power ON時に CPUは特定のアドレス(CPU種類によっては特定のベクター, など)から実行を開始する。その位置にはハード的に ROMが配置されている  
ただし電源入ったすぐは ROM, SRAMはともかく DRAMは使えないので初期化が必要です

(DRAMについて)  
Static RAM は CPUのレジスターやキャッシュなどにも使われていて, トランジスターの NOR ゲートを組み合わせた形。電流流れていれば使える  
Dynamic RAM はコンデンサーが使われており, 電流流れててもそのうち放電し尽くし消える。のでメモリーコントローラーで,
読み込んだ内容を再度書き直す「リフレッシュ」が必要。起動時にはそのタイミングなどの指定がないと記憶できない (DRAM Frequency)

参考:

  * SRAM <https://tinystones.net/mem/mem5.html>
  * DRAM <https://tinystones.net/mem/mem3.html>

* * *

「BIOS」にはいくつかの意味が含まれていて, 以下の意味以外にもあるかも

  1. BIOS: Basic Input/Output System のこと
  2. 起動時の ROM のこと。BIOSはファームウェアとして中に含まれている
  3. C-MOS のこと。ポタン電池でバックアップされた (CMOS SRAM 内の)情報

文字列出力, 文字列入力, ディスク I/O などの基本的な入出力は BIOS と呼ばれ, ROM
内にありサービスコールで呼び出すことが可能でした(過去形)  
最近の？ CPUは 32ビットモードあるいは 64ビットモードで動作しているので, 16ビットのコードはそのままでは動きません  
起動した OS 内の (必要とする) APIを呼び出すのが現在の形。OS側に, 必要な APIがすべて揃えてあるはず

画面が映るかキーボードが繋がっているかなどの POST (power-on self test: 電源投入時自己診断)も, 起動した OS
の初期化処理で行うはずで, 先に ROMでも行うなら 2度手間に。  
BIOS ROMに代わる次世代の起動方法では必要最小限の方向のはず (今でも, 数 GBの RAMのセルフチェックは時間かかるので省かれてるはず)  
UEFIでは, BIOS-POST は ⇨ Pre-EFI初期化モジュール

参考:

  * PDFドキュメント [新世代BIOS"UEFI"の構造と実装](https://ipsj.ixsq.nii.ac.jp/ej/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=62936&item_no=1&page_id=13&block_id=8)
  * PDF [自由な PC 向けファームウェアの開発 --yabits: Yet Another UEFI Implementation―](https://www.ipa.go.jp/files/000065624.pdf)
    * (ja.wikipedia.org) [coreboot](https://ja.wikipedia.org/wiki/Coreboot)

(2) の起動時 ROMについて  
起動時 ROM (firmware)は, マスク ROMではなくフラッシュメモリーが使われてることが多い  
これは (SSDなどでよく使われている)NAND型ではなく NOR型フラッシュメモリーで, 特徴としては ROM同様に普通にアドレス指定可能 (CPUの
Jump命令, Call命令の飛び先に指定可能)  
(なので, CPUから読み出して RAMに転送などの手順は必要ない)

