CbC による OS の実装

Taiki Taira / Sep 18, 2012

研究目的

本研究では code segment ,datasegment に沿った OS を実装することを目的とする。
その実装には、本研究室で開発された Continution based C (CbC)を用いる。
CbC は C 言語よりも低くアセンブラより高い層で記述できる言語である。C の使用からループ制御や関数コールを取り除いている。これによりスタックの操作やループ、関数呼び出しなどのより低レベルでの最適化をソースコードレベルで行うことができる。
code segment, data segment を意識した設計にし、メモリ外へのアクセスを制限しセキュリティの向上とプログラマの負担を減らす。
故障が発生した際に、機能を完全に喪失するのではなく、 可能な範囲で機能が維持されるようにすることを Graceful Degradation という。
この Graceful Degradation を目指して実装をすすめる。

設計1/2

Cerium の Task Manager を載せ、OS に渡される処理を並列化する。

設計2/2

code segment のグループに分ける。

data segment と code segment の整合性をチェックする。

今週の作業 [ ~ 2012/10/02 ]

grub2 での 64bit 起動[1/2]

64bit の実行形式は、grub2 では直接起動できない。ELF64 だと GRUB2 が起動に必要なマジックナンバーを読んでくれないので、

  1. 二つ実行ファイルを作って elf32 から elf64 を起動
  2. elf64 に elf32 を 結合する

の二つの方法を試している。

grub2 での 64bit 起動[2/2]

下の図のように、32bit boot 部分と 64bit の kernel 開始前の繋ぎを、メモリの番地で指定しようとしている。

アセンブラの org とかで指定しようとしたが、できなかったので linker script で書く必要がある。リンクしていない他のコードへ、メモリ番地を指定してジャンプする方法を探す必要もある。「ljmpl *」ではメモリの即値指定はできなかったので他の方法を探してみる。要するに試行錯誤中。

今後やること