OS自作に向けて♪
初出:08.10.22
OS自作。いきなり真正面から向かっても今の僕は間違いなくやられるでしょう。
- 相手(OS)を俯瞰して見て
- 作る部分を機能と工程で分けピックアップし
- 作り始める前に調べる必要がある部分を勉強し
- 作りながらTry & Error
で行こうと思います。
ここにきて「本当にできるのか?!」と不安がよぎりましたが。。いいや。そういうのもう考えない。笑
本日は作る機能と工程を把握、全体を俯瞰するための情報集め。追記アリ予定。
■当面考えるブロック
- Boot Code
- http://nobumasa-web.hp.infoseek.co.jp/boot/boot.html
- ブート・コードとは、ライブラリーがパワーオンされたときに. ライブラリーの初期化を開始するファームウェア
- OS Loader
- ローダ:実行ファイルをメモリに読み込んで実行を開始させるプログラム
- この部分がロードされ実行されることで、OS 本体の読み込みがはじまる
- Kernel
- 階層型に設計されたオペレーティングシステム (OS) の中核となる部分
- システムのリソースを管理し、ハードウェアとソフトウェアコンポーネントのやりとりを管理する。
- また、ユーザープログラムのための機能として、プロセスの抽象化、プロセス間通信、システムコールなどを提供する。
- モノリシックカーネル:全てを一つの仮想アドレス空間に格納されたコードで実行して性能を向上させようとする。
- マイクロカーネル:サービスの大部分をユーザー空間で実行し、コードの保守性とモジュール性を向上させようとする。
- Processor
- データの転送・加工、プログラムの制御、システム状態の管理などをおこなう装置。処理装置。
- Memory
- コンピュータ内でデータやプログラムを記憶する装置。
- Messenger
- RTC/Timer
- VGA
- GSH
- GFS
- 分散ファイル・システム
- ネットワークファイルシステムの一種であり、単一のファイルシステムが複数の物理コンピュータノードに分散して存在する形態のものを指す。
- 一般に、透過的レプリケーションとフォールトトレラント性に関する機能がある。
- レプリケーション:リソース間で一貫性を保ちながら情報を共有する処理
- フォールトトレラント性:システムの一部に問題が生じても全体が機能停止するということなく(たとえ機能を縮小しても)動作し続けるようなシステムを設計するものである
- 分散ファイル・システム
- Scheduler
- スケジューリング:優先度つきキューで優先度を割り当てられたプロセス(またはタスク)を制御する手法。
- ディスパッチ:実行プロセスの切り替えを行う操作
- スケジューラ:優先度割り当てを行うソフトウェアをスケジューラと呼ぶ。
- スケジューラはディスパッチ先のプロセスを決定するソフトウェアと言うことができる。
- V86
- Device Drivers
- PE
- Task
- Thread
- Sys Call
- Kernel32.dll
■アセンブリが必要な部分
- ブートローダ
- タイミングがシビアなIOドライバ(必須ではない)
-
- アセンブラは理解難しいので自分で動かして改造が理解の早道。
■必要資料
- Intelマニュアル
- はじめて読む486
- オペレーティングシステム第2版
- http://www.osdev.org/cgi-bin/projects.cgi
- http://www.geocities.com/sunriseos/.
■メモ
- 現代的なOS特徴
- メモリ管理・プロセス管理それらを安全確実なものにするためのハードウェア的なメモリ管理機構の活用が当たり前である
- 環境構築
- 1番重要:リンカ 自分のOSに合ったバイナリイメージを作るため
- 作成にあたり
- アプリ→OS→ドライバ→ハードウェア ←この形式だと機能追加=OSの再構築になってしまうことが
- ドライバ
- CPUのモード←80286以降のCPUには、
- 16ビットCPUである8086の互換モード(リアルモードまたは実アドレスモード)
- それぞれのCPUの機能を生かせる独自モード(プロテクトモードなど)がある
- ブート後のプロテクトモードに入るときのBIOS叩きに注意
- ブート時には16bitで動作 起動後に32bit(プロテクトモード・・メモリの保護機能などに優れる)に移行
- ブートローダ←メモリの特定アドレスにkarnel image をロードする機能
- セグメント ←メモリ管理の方式の一つ。プログラムやデータをセグメントという「可変な」大きさのまとまりで管理する
- 物理アドレス=segment * 16 + offset
- 同じアドレスを示すsegとoffの組み合わせが何通りもある。
- 利点は、64k以下のプログラムならどこにでもロードできる。(リアルモードにおいて)
- MMUによるアドレス変換と仮想記憶(Memory Management Unit)
- コンピュータのハードウェア部品のひとつであり、CPUの要求するメモリアクセスを処理する。
- 仮想アドレスを物理アドレスに変換する機能(仮想記憶管理)
- メモリ保護機能
- キャッシュ制御機能
- バス調停機能
- 単純な8ビットシステムなどに見られるバンク切り替え機能
- SunriseOSのソースはアセンブラもNASM用に書かれていて参考になる
http://www.geocities.com/sunriseos/.
- ソースの概要・実行順序
- 外部割込み禁止
- スタックのセットアップ
- 外部割込み可能
- ブートドライブ情報保存
- ディスクをリセット
- ディスクを読んでメモリにセット
- 読み込んだプログラムにジャンプ
- 英語でコメントつける
(ユーモアある命名だなぁw)
今日はこのくらい^^
ねまする♪