ウォンツテック

そでやまのーと

2007-07-01から1ヶ月間の記事一覧

OS作成

ユーザ用プロセスのためにファイルシステム生成回り(kmkfs.cpp)を改良。 sodexファイルシステム上の/usr/bin以下に設置したファイルを全て読み込んでおくことにしました。その他ファイルシステム構築時の細かいところも修正。 また、簡単なcrt0.Sとシステム…

OS作成

プロセス用のスタック領域がカーネルのメモリ領域(0xC0000000-)になっていたのをプロセス用スタック領域として0xbfffe000-0xc0000000を用意しプロセススイッチ時のespを切り替えるように変更。 プロセスがカーネルモード時(システムコールやスケジューリン…

OS作成 - elfローダ編

elfヘッダ(elf header, elf section header, elf program header)を読み込んでヘッダの中身を解析し、メモリ上にロードする単純なelfローダを実装いしました。ユーザプロセスの仮想メモリ位置はLinuxと同じ0x8048000に配置。というのも開発環境がLinuxなので…

本買った

池袋のジュンク堂に寄って座り読みをしていたら欲しくなってついついコンパイラのドラゴンブックを買ってしまいました。。 コンパイラ本は中田郁男さんの薄い方(新コンピュータサイエンス講座)を読み込んでいて、正規表現パーサ書くときにはお世話になった…

Collect Chat

以前作ったCollect Chatなるものを公開します。 コレクトチャット 画面上でキーを打つと文字が勝手に集まってくれます。 以前どっかのサイトでアルファベットをマウスで動かして文字列にしてコミュニケーションをとるサイトがあったのですが、これはさらにキ…

OS作成 - elfローダ編

Linkers & Loadersを斜め読みしました。例によって理解度は3%くらいなのですが、自分には知らない事が盛りだくさん(ライブラリのメジャー、マイナーバージョン規則やダイナミックリンクの手法等)あったので収穫は大きいです。ただ特定のフォーマット(elf…

vimperator

http://d.hatena.ne.jp/sodex/20070714 この前入れたFirefoxのextensionですが、「f」を押す事により「Hit-a-Hint」と同じ事が出来る事が判明しました。「f」を押した後に表示されるアルファベットのキーを入力すればそのリンク先へ飛べます。やっぱ止めると…

OS作成 - ページング&プロセス編

ユーザプロセスのPrivilege Levelを3にする事に成功。 やり方はLinuxに近いけど以下のようにespから0x80離れたかなり深いスタックにあるiret時のeip,cs,eflags,ss,espを強制的に上書きしました。 ※asm_process_switch, i20h_process_switch, switch_toと3つ…

Linuxのpriviledge levelを切り替える辺りのコードを見てみる。

Linux 2.6.18 fs/binfmt_elf.c 1017行目あたり start_thread(regs, elf_entry, bprm->p); if (unlikely(current->ptrace & PT_PTRACED)) { if (current->ptrace & PT_TRACE_EXEC) ptrace_notify ((PTRACE_EVENT_EXEC << 8) | SIGTRAP); else send_sig(SIGTRA…

読書

スーパーコンピューターを20万円で創る伊藤 智義 集英社 2007-06売り上げランキング : 9724Amazonで詳しく見る by G-Tools銀河の重力場や分子間の電磁気力のN体問題を計算する専用スーパーコンピュータのプロトタイプは大学院に入って間もないコンピュータの…

vimperator入れてみた

firefoxのextension「vimperator」を入れてみた。 Vimperator // Vimperator 最初はemacs風なextensionを探してたけどまだ無さそうでした。まぁviの方がキー操作は楽だろうということでいれてみたけど、結構便利そうな予感。 ※最初に「:set guioptions=mT」…

OS作成 - ページング&プロセス編

sodex rev.22 プロセスの生成に成功。execveシステムコールを作成し、ファイルシステム上のファイルをext3_readでプロセス用物理メモリにロードし、ページングでそれをリニアアドレス0x0〜部分と関連付けました。まだopenしたファイルのデータとプロセスの関…

OS作成 - ページング&プロセス

プロセスのテスト中に、1度PICタイマーのハードウェア割り込みが発生した後に一切のハードウェア割り込みが発生しないという問題が起きて悩んでました。このPICタイマーを利用してプロセスのスケジューリングを行わせようとしているのですが、どうやらその処…

OS作成 ページング&プロセス編

最初のユーザプロセス生成に際し、前に考えたメモリマップを少し変更。カーネル部分のページングによるアドレス変換はリニアアドレス0xC0000000〜0xC2000000(32MB)に対して物理メモリ0x0〜0x2000000を割り当て。プロセスの.text部分のページングによるアドレ…

OS作成 - ページング&プロセス編

簡易システムコールとテスト用プロセスの実行ファイルを作成。 とりあえず実行ファイルをファイルシステム作成ツール(kmkfs.cpp)で直接ファイルシステムに埋め込んでおいてkernel.cで.data部分の文字列をext3_readで読み込み、システムコールで表示するとこ…

OS作成 - ページング&プロセス編

非TSSタスクスイッチ時のPriviledge Levelの推移を中心に考察(というかマインドストーミング) 1. カーネルをユーザプロセス(init)に移行させるにはどうするか。 CPL0で稼働しているカーネルをCPL3に移行する必要がある。 現在書いているコードのスイッチ部…

FizzBuzz二つ

1.upto(100){|n| puts (("!"*n).sub(/^(!{15})+$/, "FizzBuzz").sub(/^(!{3})+$/, "Fizz").sub(/^(!{5})+$/, "Buzz").sub(/!+/, "#{n}")) } fizz=["Fizz","",""]*34 buzz=["Buzz","","","",""]*21 1.upto(100){|n| puts ((fizz[n]+buzz[n]).sub(/^$/, "#{n}"…

ここ1週間ほどRubyに嵌まってます。楽しいですねRuby。シンタックスシュガーが多いし、書きやすい上に読みやすく中括弧が無いのが新鮮です。今後メインのスクリプト言語として使っていこうかなという感じです。1週間ほど使っててびっくりしたのがインクリメ…