OS を作って動かして学ぶ ①

OS を実際を理解したい


Posted on Sun, Feb 21, 2021
Tags os

OS を理解したい

インフラエンジニアとして、トラブルシュートを行っていると、OS レイヤーで何をしているのかが気になることがある。 いくら OS が様々な仕事を隠蔽化していても、実際にアプリケーションの不具合があったときに、「これは OS の問題か、アプリケーションの問題か」わからなくなることがある。 そんなとき、OS について理解が深まっていると問題対応がしやすい。

OS の仕組みを作りながら理解できるように、記事としてまとめていこうと思う。

OS の仕組みがよく分からない

情報系の学部の講義では、ファイルシステムや加算器、メモリなどについて個別に習ったりしたが、実際の OS はそれらの理論を利用し、組み合わせて動作している。

これまで様々な OS に関する書籍を読んでみたが、そのほとんどが「OSの要素技術を知る」か「OSの使い方を知る」ということに注目していて、「OS の一連の動作や仕組み」について知ることができる書籍があまり存在しない(知っている方はコメントで教えてほしい)

OS の仕組みを理解するために OS を試しに作ってみる

日本語の書籍でも OS を自作する書籍がある。

これらを読み進めながら、実際に OS を作り、その仕組みの基礎を学んでいきたいと思う。

(どちらも OS の動作を1から説明する良著だが、特に『作って理解するOS』は 1500 ページの大作であり、リファレンスとしても非常に有用な書籍だ)

1. OS の起動

PC のスイッチを押したら、まず何が起こるのだろうか?

graph TD power[電源on] --> bios[CPUがマザーボードのROM内のBIOS読み込み] bios --> bootos[OSブートローダーを起動] bootos --> os[OSのカーネルを起動]

スイッチを押したら、電源から電気が供給されて、CPU がマザーボードに備わっている ROM (read only memory) からシステム BIOS を起動する。

ROM は不揮発性のため、電源が落ちたからといって情報が消えるわけではない。 ここが、ハードウェアからソフトウェアに移行する瞬間といえそうだ。ただし、BIOS をソフトウェアと言い切るかは微妙なところで、実際はマザーボード上の部品について操作できる設定が焼かれているため、ファームウェアというのが正しい。

BIOS の役割としては、

  1. ハードウェアの初期化
  2. 設定された記憶装置 (不揮発) から OS のブートローダーを起動する

がある。2. については、BIOS の画面で「どのドライブから OS を起動するか」を指定する設定を行ったことがある方はイメージがつくかもしれない。 OS のブートローダーが正しく RAM (揮発性) に読み込まれることによって、OS の起動が始まる。

OS の起動までに煩雑なステップがあるが、これは OS が特定のハードウェアに制限されることを防ぐためだ。 特定のハードウェアに制限されてしまうと、ハードウェアの変更を OS のソースコードも追従する必要がある(実際に過去の OS では特定のハードウェアの情報を持っていることがあった)。

参考:

BIOS から OS のブートローダーの起動を行ってみる

TBD (go-zen-chu/hello-os のコードができ次第、更新します)