ウォンツテック

そでやまのーと

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

SICPの問題を解こう19

問題 1.37.a k-term finite continued fraction N_1 ----------------- N_2 D_1 + ----------- ... N_K + ----- D_K Suppose that `n' and `d' are procedures of one argument (the term index i) that return the n_i and D_i of the terms of the continu…

SICPの問題を解こう18

問題 1.35 *Exercise 1.35:* Show that the golden ratio [phi] (section *Note 1-2-2::) is a fixed point of the transformation x |-> 1 + 1/x, and use this fact to compute [phi] by means of the `fixed-point' procedure. 解 golden ratioの定義はを…

私がemacs、viなどを使う理由

「人生の時間の80%くらいを無駄にしている」人とは? | 日経 xTECH(クロステック) ちょっと開発環境について書いてみます。(プログラミング暦の浅い素人ですが) 私が今現在コードを書くときに使っている環境はemacs+screen+vi+lessです。emacsはコード…

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

Sodex rev.10middleブート(セカンドブート)とカーネルをext3fsフォーマットに合わせて設置するためのmkfsツールを作成(toolsディレクトリ以下)。それに伴い、makefileとbootacient.Sを修正。 bootacient.S(ファーストブート)とbootmiddle.S(セカンドブー…

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

FD上のマップをどうしようかと悩み中。 いろいろ調べてみるとLinuxのレスキューディスクのように1枚のFDにカーネルとファイルシステムを入れる場合、vmlinuz(kernel)とinitrd(FS)を別々のファイルとして用意し、GRUBやLILOのようなブートローダーがそのディ…

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

一通り読んだけど具体的な実装回りになると今一分からなくなっててきたのでとりあえずFD限定で考えてみる。 Ext3 レイアウト 一つのパーティションをブロックグループという単位で管理するが、FDの場合は容量が少ないので1つで十分 ブロックグループは複数の…

OS作成

MINIX本と詳解LINUXカーネルとLINUXカーネル読解室でファイルシステムの勉強中。予定としてはExt3を実装してみようかと思ってます。当然全部いきなりやろうとすると挫折するのでまずはREAD,WRITEシステムコールの実装を目的とした必要最低限の機能を書いてみ…

OS作成

TSSを使わないタスクスイッチを実装 Intel CPUが持っているタスクスイッチ機能を使わずにスイッチ部分を実装。TSSのスイッチ時に大分悩んだので結構すんなり出来たかな。 今回定義した各タスクの状態は // Light TSS typedef struct _LTSS { u_int32_t eip; …

OS作成

serialドライバー とりあえず出力だけ作成(といっても出力だけだと割り込みも発生してないのでデータレジスタ0x3F8に文字を出力させるだけ)。 一応vga.cと同じようなprint出力を用意Sodex rev.7qemuでserial出力を確認する場合はコマンドラインで qemu -fd…

OS作成

リファクタリングしようとソースをいじってたらFDCでrecalibrateの後に割り込みがこなくなった。。。最初のDORのFDCリセットに対する割り込みは来るんだけどその後にrecalibrateしようとするとこない。当然割り込みhandlerで0x20 I/OポートのOCW2レジスタに…

OS作成

タスクスイッチを進める前に箱物機器には欠かせないシリアル入出力のドライバを無性に書きたくなったので事前に必要な情報をメモ。 前提 ・現在コントローラはNS16550相当の物が使われている。※UARTと呼ばれている ・I/OポートはCOM1〜COM4でそれぞれ以下の…

OS作成

諸悪の根源を突き止めた。 タスクスイッチから帰ってくるljmp命令直後(セグメント間命令によりタスクスイッチし、再び自分にスイッチした時に戻ってくる)にpopをするとその値が壊れている。メモリダンプでその時のesp付近のメモリを丹念に調べてみると完全…

screen, zshメモ

GNU screenのコンフィグに「hardstatus alwayslastline ...」を書いていると一番下のラインにそのterminalのシェル(zshやbash)の文字列が表示されるが、どこのterminalで何の作業をしているか忘れてしまった場合全て「zsh」などと表示されていて見分けがつか…

OS作成

bochsで正常に動作しない原因は判明した。 GDTの設定時の(((type >> 8)&0xf) 演算子の優先順位を間違えていたためGDTの中身が微妙におかしくなっていた(今まではたまたま必須なビットが立っていたりしたためそれほどの誤動作はせずに動いていた模様)。これ…

コンパイルオプションで付けたbochsのdebug機能、素晴らしい。。gdbに近いことが出来る。 break pointの挿入はvirtual address, linear address, phisical addressどれでも出来るし。(関数名での挿入はさすがに出来ないかな?調べてないけど) というよりqe…

OS作成

qemuと実機だけの開発環境だと実験が主にqemuの実装に依存してしまうのでbochs(Linux版)も入れてみた。bochs用のBIOSやらは/usr/share/bochsにインストールされているので以下のようにbochs用コンフィグを書いた。(windows用のコンフィグをコピー) romim…

Web Script言語が気になる

SilverlightとJavaFXが気になる。 Silverlightは軽いらしくしかもFlushキラーとのことで今までなんかもっさりしてたWeb2.0的なサイトが軽くなるのかな? JavaFXはサーバ側Javaとの連携がどの程度取れるんだろ?ObjectのSerializationとか出来たら便利っぽい…

OS作成

kernelでprocess1()関数を呼び出して無限ループさせておいてからPICの割り込みによってタスクスイッチをさせる時、process2→process3→process1の移行の部分がhangする問題でTSSの中身を見てみた。 おそらく正しい値が入っているんだけど、実際に2回目のproce…

10年以上前のドラマ「放課後」を見てしまった。 この時代に見た時は観月ありさかわいいと思わなかったけど、今見るとかわいい。何気にありさの友達役で今は世界不思議発見に出てるミステリーハンターの諸岡なほ子もなかなか。意外なところでは篠原涼子がちょ…

OS作成

Sodex rev4 ソース Intel CPUのTSSを使用したSodexのマルチタスク化に成功。 無限ループするprocess2,process3関数を用意してそれをひとつのタスクとしてTSSにセットしそれらをPICのタイマー割り込みが入ったときに交互に呼び出す。本当は元のkernelをproces…

OS作成

CPUのTSS機能を利用したタスク切り替えの考察 Kernelがタスク切り替えをした時、再びそのタスクに戻れるように現在のタスク情報をメモリに保存してから切り替える必要があるが、その保存情報がTSSである。このTSSのフォーマットはCPUにより決められており以…

OS作成

次の目標はプロセス制御(タスク制御)回り。 いきなり全て書くのは無理なので次の小目標を経ていこうかと思案中。1. Intel CPUのTSSを使用したタスク切り替え 2. CPUが持つ機能を使用しないタスク切り替え ※大半のOSがこっち。理由はこっちの方が軽いから 3.…

sourceforge svnの利用

sodexをsvn上に置くためにsourceforgeのsvnリポジトリを作成 リビジョン3 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi/trunk/sodex/src/?rev=3&root=nchaos 手順メモ 1. 秘密鍵、公開鍵の作成 ssh-keygenにより ~/.ssh/に id_rsa 秘密鍵 id_rsa.pub 公開…

OS作成

今後デバッグがし易いようにvga.cでprintfモドキなAPIを実装。 可変長変数用マクロ定義のためstdarg.hも実装 stdarg.h #ifndef _STDARG_H #define _STDARG_H #include "types.h" typedef char* va_list; #define __va_size(x) (sizeof(x) > sizeof(int32_t) …

OS作成

読み込みに続いてqemu&実機でのFDC seekと書き込みに成功。 これはdmaの転送方向を変えるのとseekとwrite用コマンドを書くだけでいいのですぐ出来た。 とりあえず直近の目標の一つであるFDCの1セクタ読み書きが出来た。複数セクタ読み書きはこれを適当にwrap…

OS作成

FDCの実機での1セクタ読み込みに成功。 苦労した点としては どのくらいwaitすればFDCがbusyからready状態になるのか どのコマンド操作をした時にFDCからCPUに割り込みが入るのか FDCの割り込みマスク解除を忘れていた FDCの割り込みhandlerで次の割り込み待…

OS作成

Qemuでfloppyの1セクタのreadに成功。 しかし、石叩きはむずかしい、というか資料が少ない。必要な情報としては 初期化 読み込む手順 が欲しいんだけどデータシートとか「パソコンのレガシィI/O活用大全isbn:9784789834339」には石の中のレジスタの詳細しか…

SICPの問題を解こう17

問題 1.31 product(積)版を書いてを計算せよという問題 (define (product term a next b) (if (> a b) 1 (* (term a) (exact->inexact (product term (next a) next b))))) (define (getpi n) (define (pi-term x) (if (even? x) (/ (+ x 2) (+ x 1)) (/ (+ …

SICPの問題を解こう16

問題 1.29 Simpson's ruleを使ってintegralを求めよという問題 (define (integral f a b n) (define h 0) (define (i-term count x) (cond ((= count 0) (f a)) ((= count n) (f b)) ((even? count) (* 2 (f x))) (else (* 4 (f x))))) (define (i-next x) (…

emacs info

emacsに変えたのでこないだ設定したSICPをemacs(xemacs)で読めるようにする設定も変更。 1. /usr/share/infoにsicp.infoをコピー 2. /usr/share/info/dirファイルに以下の行を追加 SICP * SICP: (sicp). SICP BOOKS. 3. emacs上で M-x infoで上記のSICPを選ぶ