ウォンツテック

そでやまのーと

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

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

昨日commitした部分、まったくページング出来ていませんでした(汁。。 cr3レジスタにはpage directoryの物理アドレスを入れなければいけないのに、仮想アドレスを入れていました。 試しにpage faultが起こるかpage directoryに設定していない0x1000000にア…

Mac

こういったのを見てると別に使うわけでも無いのに欲しくなってくる。。Macは一度も使ったことはないんだけど見た目のよさがあるからオブジェとしてもあり?かもw。見た目的にはLisaかMacintosh Classicかな。PPC系CPUの勉強としてPower系のを弄るってのも楽…

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

カーネル用仮想メモリマップのためのページング部分を実装。以下の2段階の処理によりマッピングしています。 1. セカンドブート後のstartup.S中で仮ページングテーブルを設定し、ページングサイズ4KBのPage Tableを1024x2 8MB分用意し、仮想アドレス0x0と0xC…

プログラミングと数学

プログラミング能力と数学能力(素養)にはどの程度の相関関係があるのか時々考える。私は「数学ってそんなに必要じゃないっしょ」と考えている。若くしてトッププログラマとなる人たちというのはおおよそ子供の頃から寝ても醒めてもプログラミングをしてい…

grep-findで特定のディレクトリを検索対象から外す方法

emacsでソースコードを読んでいる際によくgrep-find等を使うと思いますが、その際にGNU globalなどで生成されたHTMLディレクトリ以下を検索対象から外したいという時があります。その場合は以下のデフォルトのgrep-find find . -type f -print0 | xargs -0 -…

電脳コイル

電脳コイルって、あの世界観が近い将来に実現する可能性が妙に高く見えるから、一部の間では人気があるんじゃないかと推測してみたり。 子供の頃DBのスカウターが欲しいと妄想していた自分としてはあんなメガネ付きネトゲが出たら買っちゃうかも。。とりあえ…

Linuxの初期ロード時のメモリ配置

sodex開発のため、Linuxの初期メモリ配置、ページングを勉強。 Linuxの初期メモリ配置をカーネルのコードとリンカスクリプトから見てみる。 まずはLinuxのブート時のファイル構成から(ブートローダを使わない場合の構成。※Linux2.6からはbootsect.SのFD読み…

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

sodexのページング時のメモリマップを考えました。 最初はMonaで採用しているカーネル領域を物理メモリの先頭に固定して割り当てようかと思ったけどそれだとプロセスのリニアアドレスが先頭から割り当てられなくなりプロセス用実行ファイルのコンパイル時に…

OS作成 - ファイルシステム編

ファイルシステムの実機テストをしていたら書き込み専用のUSB FDがお亡くなりに。。シクシク なぜか9セクタ連続で読み込む事が出来ないバグの原因を探っている最中でした。。 もうレガシーFDは捨ててUSBメモリをメインに開発したくなってきた。。でもBIOSのUSB命…

OS作成 - ファイルシステム編

ext3_write, ext3_mkdir 実装完了 openしたファイルの書き込みと新規ディレクトリ作成APIを実装。また、48KB以上のファイルが生成出来ない部分も修正し現在では4MB+48KBまでのファイルが生成可能。これで基本的なファイルシステムの実装は一段落。残りのrena…

OS作成 - ファイルシステム編

よくわからないバグに遭遇。 関数定義だけはしているが他から一切呼ばれていない関数がコンパイル後に悪さをしている。。 具体的に言うと以下が問題の部分。 PUBLIC void __change_parentdir(ext3_dentry* parent, ext3_dentry* child) { char* p = parent->…

OS作成 バグ解明

謎は全て解けた カーネルサイズに依存して挙動がおかしくなるバグの正体それは、、、ありえないミスだった。。 0x9036bから0x90374の10バイトが0で埋まる現象を突き止めてから、逆アセンブル、hexdump、そして正常時、異常時のオブジェクトのhexdumpのdiff、…

M-x eshell

M-x shellは表示が崩れるから使って無かったのですが、eshellはいい感じ。外部shellを呼ばずLISPで書かれたshellを呼んでいるようです。デフォルトで入ってました。 コマンド履歴は C-p C-nではなく M-p M-nで呼びます

SICPの問題を解く 23

問題 2.1 consとcar, cdrが出てきた。なるほどリストか。ふむふむ、これはシンプルで強力そうだ。2章終わったらC++で書いた正規表現パーサをschemeで書き直してみようかな。どんな風になるやら。 (define (make-rat n d) (let ((g (gcd n d))) (let ((n-itr …

逆アセンブル

sodexの開発ではアセンブラにgasを使ってるんですが、以前作ってたnchaosではnasmを使ってたので逆アセンブルはndisasmを使ってました。objdumpはloaderでフォーマットされたものしか逆アセンブル出来ないのかなーと思ってたら先ほど以下のように逆アセンブ…

OS作成

ファイルシステムも大体出来てきたので次(か次の次)の目標であるloaderの解説書をぽちっと購入。わくわく。 loaderはelf形式かな〜と漠然と考え中(まだ何もわかってない)Linkers & LoadersJohn R. Levine 榊原 一矢 ポジティブエッジ オーム社 2001-09売…

Ruby

WEB+DBの雑誌でRubyの記事を読んだらちょっとほれたかも。さっそくamazonで以下の本をぽちっとしてみました。たのしいRuby 第2版 Rubyではじめる気軽なプログラミング高橋 征義 後藤 裕蔵 ソフトバンククリエイティブ 2006-08-05売り上げランキング : 20752A…

OS作成 - ファイルシステム編

新規ファイル作成機能、 書き込み機能実装 また、カーネル内ファイルシステムAPI実装のため各所を大幅に書き換え。 1. メモリ管理回り 今まではMemHole構造体のポインタをメモリallocする側に渡していたが、それを止めvoid*ポインタを返すように変更した。メ…

複数ファイルの文字列置換

sodexのprint系の関数名が気に入らないので複数ファイル中に存在するsysPrintXの関数名を一括置換をしようと調べ回っていると、どうやら「moccur-grep-find」をした後に検索出来た物を「M-%」で問い合わせ置換するのが良さそうだという事でいれてみました。…

各種ファイルシステム考察

sodexのファイルシステムを書いていて他の各種ファイルシステムの性能について気になったので速度面について簡単にまとめてみます。(誤りのある可能性が非常に高いので使用する場合は下調べをお願いします) ※sodexのファイル検索はファイル名(ハッシュでは…

OS作成 - ファイルシステム編

openとreadを実装。インタフェースはPOSIX準拠だけど中身は独自で書きました。openの引数でファイルorディレクトリへのフルパスを指定して、存在すれば(今のところファイルフラグは無視)そのファイルのdentry(inodeをメンバに持つ)をディスクから読み取っ…

OS作成 - ファイルシステム編

kmkfs.cppツールでext3フォーマット化したsodexカーネルをカーネル内部で解析してdirectoryのファイル名一覧を表示させる事が出来ました。とりあえずinode番号が「2」であるroot directoryのファイル名等をext3_direntry構造体に入れてそれをリストで繋げた…

JavaScriptのデバッグ

Ajaxなサイトを作ろうと結構JavaScriptのコードを書いているのですが、そのデバッグ方法についてはかなり悩まされます。今のところemacsで書いてからFireFoxで起動し、Firebugでバグを取ってからIEでも起動してみて挙動がおかしければalertでデバッグしてま…

OS作成 - ファイルシステム編

FDCでファイルシステム上のinode block(4096x4バイト分)を読み込んでいる途中にqemuが止まってしまうので何でかなとregisterを見てみるとespが0x5になってたりする。スタック使い過ぎの関数はどこだ。。

OS作成 - ファイルシステム編

自作FileSystem作成ツールkmkfs.cppで作ったFSをLinux上でマウントし、ファイルを読み込むことに成功。まだパラメータで調整する必要がある箇所が残っているため書き込みは出来ず。 今回の作業はいつにもまして泥臭い。。以下の作業の繰り返しを延々とやるだ…

OSを作ろう - ファイルシステム編

Linuxカーネルとmke2fsのソース(http://e2fsprogs.sourceforge.net/)を読みながらsodexのファイルシステム作成toolを修正中。inodeの0番目と1番目にはデータを入れるとまずそうなのでbootm.oとkernel.binはinode 3,4辺りに移行予定。 super blockとgroup de…

LinuxのFDを使用するときのメモ

sodexのファイルシステムデバッグのためLinuxでもきっちりFDを使えた方が楽なのでメモ。 USB FDを差したら/proc/scsi/scsiファイルを参照する。(USB機器はscsi機器として認識される) /proc/scsi% less scsi Attached devices: Host: scsi0 Channel: 00 Id:…

OSを作ろう - ファイルシステム編

ファイルシステムの勉強のためLinux本のVFS回りを読んでいるんですが、ext3ファイルシステムのフォーマットをFD上に作っていた時に疑問だった「どうやってカーネルはルートディレクトリを識別するのだろう」という疑問が晴れません。でもよくよく本を読むと…

SICPの問題を解こう 22

問題 1.45 n乗根を求めるのに y -> x/y^(n-1)のfixed-pointを計算していき差が少なくなった値を近似値とする方法において、y -> x/y^(n-1)にaverage dampingを何回行えばそれが収束するかという問題。 解析的に気になったのでSICP問題を解いているブログ界隈…

SICPの問題を解こう21

問題 1.43 fをn回作用させる手続きを書く問題 (define (repeated f count) (if (= count 1) (lambda (x) (f x)) (lambda (x) (f ((repeated f (- count 1)) x))))) (define (square x) (* x x)) (print ((repeated square 2) 5)) (print ((repeated square 3…