105 Views
March 24, 22
スライド概要
slideshare が Scribd によって有料化されたので移行しました。
▪ 佐合 秀昭(さごう ひであき) ▪ twitter:@hideaki_sago ▪ facebook, google+もやってます。 ▪ 将来の夢はPC用汎用OSを世に売り出すこと。 ▪ 打倒Microsoft!! ▪ OS屋のつもりですが、、仕事はAndroidアプリを 作ってます。
▪ マルライトと読む ▪ 学生の頃、作っていたOS ▪ x86上で動作する汎用OS ▪ ブートからアプリケーションまですべて自作(Clib除 く) ▪ Gnu assembler, C, C++で作成
▪ CDブート(El Torito FDDエミュレート) ▪ メモリ管理(セグメンテーション方式、仮想記憶無し) ▪ デバイス管理 ▪ タイマ、キーボード、マウス、ATAPI(CD)、etc… ▪ 割り込み管理 ▪ GUI(←実はここが一番大変だった;) ▪ ファイルシステム(ISO 9660) ▪ システムコール ▪ アプリケーションシステム ▪ マルチタスク
1. CDからデータ(ファイル)を読み取る 2. ヘッダ情報を読み取り、必要なメモリを確保 3. テキスト領域とデータ領域を読み取り、メモリに配 置 4. プログラム・カウンタやスタック・ポインタを設定 5. プロセスにCPUを割り当て、実行
▪ CD(ATAPI)ドライバを実装 ▪ ISO 9660(CDのファイルシステム)読み取りプログ ラムを実装
▪ アプリケーションファイルの先頭にある独自形式の ヘッダを読み取る ▪ ヘッダに記述されているサイズに従ってメモリを確保 アプリケーションファイルの構成 オフセット サイズ 内容 ヘッダ部分 +0x00 4Byte アプリケーション全体のサイズ +0x04 8Byte シグネチャ:"MLAppli\0" +0x0c 4Byte スタック領域サイズ +0x10 4Byte ヒープ領域サイズ +0x14 12Byte +0x20 予約 アプリケーション本体 現在製作中のOSはelfフォーマットにする予定・・
▪ CDからデータ(テキスト・データ領域)を読み取り、 メモリに展開 アプリケーションのメモリマップ オフセット サイズ +0x0000 104B +0x0104 280B +0x0180 内容 TSS リスト構造用ポインタ アプリケーション名 アプリケーションファイルパス 可変 LDT アプリケーション本体 etc... 可変 ヒープ領域 可変 スタック領域 4KiB 特権レベル0用スタック領域 ここに展開
▪ プログラム カウンタを0に設定 ▪ セグメンテーション方式により、プロセス毎にメモリ領域を設 定しているため、0でOK ▪ スタック ポインタをスタック領域の末尾に設定