OS自作に向けて♪

初出:08.10.22

OS自作。いきなり真正面から向かっても今の僕は間違いなくやられるでしょう。

  • 相手(OS)を俯瞰して見て
  • 作る部分を機能と工程で分けピックアップし
  • 作り始める前に調べる必要がある部分を勉強し
  • 作りながらTry & Error

で行こうと思います。

ここにきて「本当にできるのか?!」と不安がよぎりましたが。。いいや。そういうのもう考えない。笑


本日は作る機能と工程を把握、全体を俯瞰するための情報集め。追記アリ予定。


当面考えるブロック

  • Boot Code
  • OS Loader
    • ローダ:実行ファイルをメモリに読み込んで実行を開始させるプログラム
    • この部分がロードされ実行されることで、OS 本体の読み込みがはじまる
  • Kernel
  • Processor
    • データの転送・加工、プログラムの制御、システム状態の管理などをおこなう装置。処理装置。
  • Memory
    • コンピュータ内でデータやプログラムを記憶する装置。
  • Messenger
  • RTC/Timer
  • VGA
  • GSH
  • GFS
  • Scheduler
    • スケジューリング:優先度つきキューで優先度を割り当てられたプロセス(またはタスク)を制御する手法。
    • ディスパッチ:実行プロセスの切り替えを行う操作
    • スケジューラ:優先度割り当てを行うソフトウェアをスケジューラと呼ぶ。
      • スケジューラはディスパッチ先のプロセスを決定するソフトウェアと言うことができる。
  • V86
    • 仮想86モード
      • i386以降のCPUの命令セットアーキテクチャ (IA-32)の動作モードの一つである
      • 特徴はプロテクトモードのタスク保護の管理下で8086のコードを実行することによってその仮想機械の実装をハードウエア的に支援すること
  • Device Drivers
  • PE
  • Task
  • Thread
  • Sys Call
  • Kernel32.dll


アセンブリが必要な部分

    • アセンブラは理解難しいので自分で動かして改造が理解の早道。


必要資料

メモ

  • Windowsは何で作られてる?
    • 上層部については、基本C/C++MFC(外部に出してないMFCが存在するそうだ)
  • 現代的なOS特徴
    • メモリ管理・プロセス管理それらを安全確実なものにするためのハードウェア的なメモリ管理機構の活用が当たり前である
  • 環境構築
    • 1番重要:リンカ 自分のOSに合ったバイナリイメージを作るため

  • 作成にあたり
    • アプリ→OS→ドライバ→ハードウェア ←この形式だと機能追加=OSの再構築になってしまうことが

  • ドライバ
    • カーネルモード ←モードのあるCPUは最低でも2種類以上の動作モードを持ち、完全に無制限のCPU動作を許す方
    • ユーザモード ←カーネルモードではない方
      • ユーザモードドライバ:OSやIOサービスを経由してハードをいじるカーネルモードドライバだけが直接ハードウェアを触れるようにするべき


  • CPUのモード←80286以降のCPUには、
    • 16ビットCPUである8086の互換モード(リアルモードまたは実アドレスモード)
    • それぞれのCPUの機能を生かせる独自モード(プロテクトモードなど)がある
    • ブート後のプロテクトモードに入るときのBIOS叩きに注意
    • ブート時には16bitで動作 起動後に32bit(プロテクトモード・・メモリの保護機能などに優れる)に移行

  • ブートローダ←メモリの特定アドレスにkarnel image をロードする機能
    • フロッピーディスクやハードディスクからOSの起動に必要な最初のブートイメージを読み、OSの起動へとつなげるプログラム)
    • ブートローダとOSは別として考える
      • grub,lilo,syslinux,netboot,redboot,milo,ROMモニタなど と
      • そこから動くOS を分ける。
      • (汎用のローダもあるが、スキル面を考えアセンブラで自作予定)

  • セグメント ←メモリ管理の方式の一つ。プログラムやデータをセグメントという「可変な」大きさのまとまりで管理する
    • 物理アドレス=segment * 16 + offset
    • 同じアドレスを示すsegとoffの組み合わせが何通りもある。
    • 利点は、64k以下のプログラムならどこにでもロードできる。(リアルモードにおいて)

  • MMUによるアドレス変換と仮想記憶(Memory Management Unit)
    • コンピュータのハードウェア部品のひとつであり、CPUの要求するメモリアクセスを処理する。
    • 仮想アドレスを物理アドレスに変換する機能(仮想記憶管理)
    • メモリ保護機能
    • キャッシュ制御機能
    • バス調停機能
    • 単純な8ビットシステムなどに見られるバンク切り替え機能
  • SunriseOSのソースはアセンブラもNASM用に書かれていて参考になる

http://www.geocities.com/sunriseos/.

  • ソースの概要・実行順序
    • 外部割込み禁止
    • スタックのセットアップ
    • 外部割込み可能
    • ブートドライブ情報保存
    • ディスクをリセット
    • ディスクを読んでメモリにセット
    • 読み込んだプログラムにジャンプ

  • 英語でコメントつける

(ユーモアある命名だなぁw)


今日はこのくらい^^
ねまする♪