2009-05-01から1ヶ月間の記事一覧
『オペレーティングシステム 第3版 設計と実装』って本。タイトルが少し違うから別物だと思ってたが。まぁ、第2版も中古で1500円だったから買ったわけで、第3版もそのままの値段だと厳しいな。ただ、買うのは第2版読んでからにしよう。そうしないと、読まな…
『オペレーティングシステム―設計と理論およびMINIXによる実装』をAmazonで買うことにした。新品を買うと9240円もするけど、中古で1500円で売ってたのでそれを買うことにした。ただCDはついてこないらしい。まぁ、本に書いてあることを理解できれば、CDがな…
前回の特定のホストまでのルータを表示してみるではICMPソケットの読み込みでブロッキングしてしまい返事が返ってこなかったときの処理ができなかったけど、今回はIO::selectを使うことで解決した。というか、forループで回してるところは、selectを使わない…
RubyでGoogle急上昇ワードを取得するに書いてあるスクリプトをいじってみた。REXMLに詳しいかはわからないけど、XPath大好きなので、XPathを使って書き直した。 require 'rexml/document' require 'net/http' url = 'www.google.co.jp' ret = Net::HTTP.star…
今回は、tracerouteと同じような機能を持つscanrouteというプログラムを作ってみた。引数で渡されたホストまでのルータを表示する。Googleなんか指定すると結果が返ってくるのに、Yahooを指定すると途中で止まってしまう。何でだろう?原因不明。『基礎から…
WicketにはBase64のAPIがあるので、これをつかってBasic認証が必要などこかのサーバーに接続するプログラムを書いてみた。Basic認証はユーザー名とパスワードをコロンでつないで、それをBase64にしたものをHTTPヘッダに付加する。HTTPヘッダでは Authorizati…
今作っているOSの参考になったMona OSは、MITライセンスなので、著作権表示が必要だ。どう書けばよかったわからなかったので、ひげぽんさんに問い合わせたところ ・主要なソースの1つのコメントヘッダに mona/core/kernel/kernel.cpp の一番先頭にある /* */…
今までオンボードだったので、自作PCで初めてグラフィックカードを挿してみることにした。Windowsは問題なく動いてくれて、ドライバもインストールできた。しかし、LinuxではX Windowが立ち上がらないという問題が起きた。なので、一旦グラフィックカードを…
ICMPの種類のいくつかに対応。対応してないICMPパケットが来ても落ちないようにした。ICMPのクラスを増やした割には、使ってるのは共通する部分だけだったり
ICMP ECHOとICMP ECHOREPLYに対応。ICMPでそれ以外が来たら落ちる。次で対応するICMPのタイプを増やす
遠くから光化学スモッグ注意報のお知らせが聞こえてくる
class A{public static void main(String[] a){assert a==null:"Hello world";}} 何かいろいろ表示されてしまうけどHello World!を表示できる。でもただ表示させるだけだったらjava 'Hello World!'とかでもいいかもしれない。何がしたいんだ俺
今回のLOCK prefix unallowedの正体はJavaでいうNullPointerExceptionだった。NULLが代入された変数からメンバ関数を呼び出そうとしてた。なんてこった
またLOCK prefix unallowedというエラーがでた。qemuは相変わらず落ちてしまう。今度は何が原因だ?
どうやら、virtualを付けた関数に = 0を付けてないところがあったのが問題だったようだ。以下のようにしたら動いた。 virtual void hoge() = 0;
_ZTV3Nicというラベル自体が見つからなかった。そりゃエラーでるな。どうしてラベルがないのかはわからないけど
昨日のエラーがでてたと思われる部分をg++で出力したgasから抽出した。movl $_ZTV3Nic+8, (%eax)ってところが怪しいのかな。+8って何を指してるのだろう? _ZN3NicC2Ev: pushl %ebp movl %esp, %ebp movl 8(%ebp), %eax movl $_ZTV3Nic+8, (%eax) popl %ebp …
コンパイルしてたらエラーが…、メッセージは↓の通り NE2000.o: In function `Nic::Nic()': NE2000.cpp:(.text._ZN3NicC2Ev[_ZN3NicC2Ev]+0x8): undefined reference to `vtable for Nic'Googleで検索してみると、virtual宣言した関数に処理を定義していない…
memcpyをMOVSBを使って作り直した。MOVSBは[DS:ESI]にあるバイトを[DS:EDI]にコピーする命令。DF(ディレクションフラグ)の状態に応じてESIとEDIをインクリメントか、デクリメントする。今回はCLD命令でDFをクリアして、インクリメントさせている。そしてMOVS…
下のコード、3つめの引数に関わらず1byteコピーしちゃうね。1回はコピーが行われてしまうので先に条件分岐をしないといけないな
どうやら、いろいろ甘かったようだ。h.d.kさんに教えてもらったことだけど、下のアセンブラはまずいらしい。DECはキャリーフラグを更新しないらしい(独習アセンブラにも書いてあった)。そしてJAはキャリーフラグをチェックしているらしい(これも独習アセンブ…
CMPいらないんじゃないか?演算結果が0になればいいことだし memcpy: MOV EDI, [ESP + 4] MOV ESI, [ESP + 8] MOV ECX, [ESP + 12] memcpy_loop: MOV DL, [ESI] MOV [EDI], DL INC EDI INC ESI DEC ECX JA memcpy_loop RET
はてなハイクで☆をつけるスクリプトをつけるスクリプトを作った。例としておはようキーワードの新着20件に対して☆を付けるスクリプトを書いた。パスワードは通常使ってるものではなくhttp://h.hatena.ne.jp/apiに書かれてるものを使うことに注意 #! /usr/bin…
memcpyをアセンブラで書くことにした memcpy: MOV EDI, [ESP + 4] MOV ESI, [ESP + 8] MOV ECX, [ESP + 12] memcpy_loop: MOV DL, [ESI] MOV [EDI], DL INC EDI INC ESI DEC ECX CMP ECX, 0 JA memcpy_loop RET これでいいんだろうか?アセンブラはよくわか…
memcpyを実装しようとしているのだがinvalid conversion from ‘void*’ to ‘char*’とコンパイラに怒られてしまう。char*に変換できなければバイト単位のアクセスができないんじゃないか?どうすればいいんだろう?
githubのsocket.rbをrecvfromを使ったものに置き換えた。パディングによるずれの問題も起こらないようなので良かった
readだと指定したバイトまで読み込んでいたけど、recvfromなら1フレーム毎に読み込んでくれたのでrecvfromを使うことにした。これなら、毎回フレームのサイズを気にしたり、パディングの問題を気にする必要もないので、楽ができる。最初からrecvformを使っ…
なんでだろう?とくに早く寝てるわけでもないし、意識してるわけでもないのに
やる気が出ない。困ったな
githubに自作OSのソースを載せてみた。結構パクリが多いけど