■ブートストラップのしくみ

これまでに、オペレーティングシステム (OS) は 利用者からの入力を受け付けたり、プログラムを実行したり、 様々なハードウェアを管理したり、といった重要な機能を実現していることを学んだ。

しかし、コンピュータの電源を入れたばかりの時、主記憶装置にはまだOSは読み込まれていない。 それでは、コンピュータはどのようにして起動し、OSをスタートさせるのだろうか? 以下では、標準的なコンピュータの起動の手順について見ていこう。

なお、コンピュータの起動のことをブートストラップと呼ぶ。これは自力で這い上がることを意味する「靴紐を引っ張り上げる」というイディオムに由来している。短縮してブートと呼ぶことも多い。


図4 ブートストラップの概念図(フロッピーディスクの場合)

図5 ブートストラップの概念図(ハードディスクの場合)

ブートストラップの概要

  1. BIOS の実行
    電源を入れると、BIOS ROM 内のプログラムが実行される。(*1)(*2)
  2. 起動ドライブの検索
    BIOS が、ハードウェアを検査・初期化し、OS を起動するドライブを検索する。
  3. MBR の実行 (HDDの場合のみ)
    BIOS が、マスターブートレコード(MBR)を RAM に読み込み、その中のプログラムに制御を移す。(*3)
  4. IPL の実行
    BIOS (もしくは MBRのプログラム)が、IPL を RAM に読み込み、制御を移す。(*4)
  5. OS の起動
    IPL がOSの起動に必要な最初のファイルを読み込み、以下順次実行する。

    (*1) BIOS: Basic Input/Output System
       コンピュータの起動に必要な低機能・小容量のハードウェア制御用プログラム。
    (*2) ROM: Read Only Memory
       不揮発性の読み出し専用メモリ。⇔ RAM
    (*3) MBR: Master Boot Record
       HDD の先頭に書かれている情報。IPL を読み込むプログラムや、
       OS がどこにあるかという情報などが含まれる。
       HDD が複数の領域に分割されているときに活躍する。
    (*4) IPL: Initial Program Loader
       OSのある領域の先頭に書かれた、OSを読み込むためのプログラム。
       DOS や Windows 95, 98 なら IO.SYS、Windows NT なら NTLDR、
       Windows Vista なら Bootmgr.exe。

ポイント

参考

ブートの仕組み

■サイバーメディアセンター端末のブート

サイバーメディアセンターの情報教育用端末は、上で説明した手順と若干異なり、ネットワークブートをする。ネットワークブートとは、 自分のHDDではなくネットワーク上にあるOSのデータを読み込んでブートする仕組みのことである。ネットワークブートは、大学のように多数のコンピュータを運用する場合によく用いられ、次のような利点と欠点がある。

ネットワークブートの利点

ネットワークブートの欠点

それでは、ネットワークブートの主な起動手順を見てみよう。


図6 ネットワークブートの概念図

ネットワークブートの概要

  1. 「ブートストラップの概要」の 2. で起動ドライブとして「ネットワーク」が選ばれるように設定しておく。
  2. DHCPサーバを探し出し、IPアドレスをもらう。(*5)
  3. TFTPサーバを探し出し、ブート用プログラムをもらう。(*6)
  4. ブート用プログラムを通じて、OSのファイルの管理サーバからディスク割り当て情報を取得する。
  5. ブート用プログラムを通じて、I/O サーバ上のOSのファイルにアクセスする。
  6. あとは「ブートストラップの概要」の 3. 以降とほぼ同様。

    (*5) DHCP: Dynamic Host Configuration Protocol
       ネットワーク接続に必要な情報を自動的に割り当てる仕組み
    (*6) TFTP: Trivial File Transfer Protocol
       コンピュータ間でファイルを転送するための簡易な仕組み

ポイント


■コンピュータの仮想化

一つのコンピュータで、複数のOSを利用したい場合がある。例えば、次のようなときが考えられる。

複数のパーティションに異なるOSをインストールしておき、毎回再起動して切り替えることもできるが、それでは複数のOSを「同時に」は使えず不便だ。一台のコンピュータで複数のOSを同時に使う方法はないだろうか。

OSは様々なプログラムを監視し、どのプログラムがどのハードウェアを利用してよいかを決定している。つまり、プログラム間でCPUやHDD、主記憶装置などの資源(リソース)の取り合いが発生しないように優先順位をつけている。OSが下した決定は絶対だ。しかし、お互いに他のOSがいることを想定していないOSが複数存在するととたんに問題が発生する。つまり、OS間でハードウェアリソースの取り合いが発生する。その結果、分かりやすくいえば、画面が乱れたりファイルが壊れたりすることになる。


図7 仮想化ソフトの概念図

コンピュータを仮想化するソフトウェアを用いれば、このような問題を解決し、複数OSの同時利用を実現できる。「仮想化」とは、実体は異なるが実効的には同様の働きをする別の仕組みに置き換えることを指す。すなわち、仮想化ソフトはコンピュータ本体(ハードウェア)を置き換え、OSから見たときにあたかもそれ単体で1つのコンピュータであるかのように振舞うソフトウェアだ。

つまり、仮想化ソフトにOSのデータを適切に与えて「起動」することで、そのOSが仮想化ソフトの中だけで利用できるようになる。一般に、本来起動しているOSをホストOS、仮想化ソフトの中で起動しているOSをゲストOSと呼ぶ。仮想化ソフトは、ゲストOSにはあたかもハードウェアを占有しているように思わせておきながら、実際にはホストOSや他のゲストOSとのリソースの競合を監視し、未然に防いでいる

★サイバーメディアセンターにある仮想化ソフト VMWare を用いて、Linux を使ってみよう


図8 VMWare の実行例