カテゴリー別アーカイブ: プログラミング

30日でできる!OS自作入門

OS自作入門買ってきました。
最初の印象は、デカいでした。OSの解説となるとこれぐらいの分量になるんですかね。
QEMUが使われているんですね。やっぱりOS作るには便利なのか。
これ読んだら、64ビットOSとか作れるようになるんだろうか。ただ、64ビットのプログラムを作ってみたいだけなんですけど。「はじめて読むAMD64/EM64T」みたいな本書いてくれないかな。なければ作るとか。
QEMU専用のOSだったら、作るのもありかなとも思います。VT/Pacificaも使えるようにして。いろいろやろうとすると、Xenと同じになる気がしますけど。
わかった気になるためには、プログラムを打ち込んでみることが大切のような気がします。
とりあえず、少しずつ読んでみることにします。

液晶の明るさ

Intelは、ViivというブランドでPCに映像を取り込みたいそうですね。でも、自分がパソコンでテレビを見れない大きな理由が、液晶の明るさです。
最近は、300cd/m2みたいに液晶の輝度を上げた製品ばかり見かけますが、僕にとっては眩し過ぎます。店頭で、きれいに見えるからと購入したのですが、とても使えなくて売ってしまったことがあります。液晶パネルの輝度設定で最低にしても明るすぎ、コントラストをいじってもだめ。Windowsのデバイスドライバで輝度を抑えるとやっと見ていられる明るさになったのですが、プログラムをいじったりはできても、とてもテレビを見られる明るさではなくなってしまいました。それ以来、テレビとパソコンは別物だと強く思っています。
考えてみると、パソコンで液晶ディスプレイを見る距離は50cmくらいでしょうか。テレビは、3mくらい離れているでしょうから、単純計算でも1/5くらい明るさが変わらないと同じようには見えないはずなんですよね。1/5は極端かもしれないですけど。雑誌やWebで、明るくて見やすいなんてよく書かれているのをみると、それで長時間本当に作業したことがあるのかって突っ込みたくなります。僕としては、どれくらい暗く調節できるかと、そのときの見やすさがとても気になります。
ワンタッチで、テレビモードとパソコンモードを変えられるといううたい文句のパソコンもありますが、店頭で見た感じでは、パソコンモードが明るすぎてました。
昼と夜で液晶の明るさを変えられるのもいいですよね。夜はとても明るく感じます。
ディスプレイの近くに人がいるかどうかで自動的に液晶の明るさを変えてくれるようなインテリジェンスを持った液晶があったらいいなとも思います。
暗くて見やすい目に優しいディスプレイをどこか作ってくれないかな。

patchの編集

.patchという拡張子のファイルをEmacs/Meadowで開くと編集できないです。なぜかなとずっと思っていたのですが、M-x toggle-read-onlyで編集できるようになったのでした。
これでpatchのごみを掃除できます。
Kqemu使っても-win2k-hackがいる場合があるんですね。やっぱりIDEの問題なのか?

UDPの双方向通信

UDPで、データを待ち受けるときは、recvfromを使います。このとき、データがくるとパラメータに指定した送信先に、データを送ったアドレスが格納されています。そこに、sendtoを使ってデータを送り返すことで、はじめにデータを送ってきたプログラムと通信することができます。
あまり、UDPでの双方向通信についていいサンプルがないですし、参考にしたサイトがなくなってしまったのでこちらで説明すると、
rc = recvfrom(sd, bufptr, buflen, 0, (struct sockaddr *)&clientaddr, &clientaddrlen);
のclientaddrに送ってきたアドレスが入っているので、それを使ってsendtoすると応答を返せます。
rc = sendto(sd, bufptr, buflen, 0, (struct sockaddr *)&clientaddr, clientaddrlen);
http://publib.boulder.ibm.com/html/as400/v4r5/ic2962/info/RZAB6UDPSXMP.HTM
片方向通信の例はたくさんあるんですけどね。

コードのシンプルさ

コードをシンプルに保つということは、余計な操作を削ぎ落とすことと同時に、1つの文章により多くの意味を持たせる、やらせるってことだと思う。要するにコピペはするなってことだけど。
また、大局的に見て必要な操作をまとめたり、戦略的な見方もある気がする。
それと、プログラマの力量によってもコードの見方が違ってくると思う。普通の文章と同じ側面がある。
細かなことまで書かないと、やってくれないとか、面倒なことでも文句も言わずやってくれるとか、コンピュータならではの側面もあるけれど。
人間にとってのわかりやすさってことかな。

KMDF

カーネルモードドライバーフレームワーク早速ゲットしてきました。
これって、64bitのドライバー開発できるんですかね。できるんだったら、たとえばQvm86を64bitに移植して、Windows x64で動かしたら爆速とかになるんでしょうか。無理か。

Mersenne Twister

メルセンヌ・ツイスタ
擬似乱数生成アルゴリズムだって。線形合同法よりも良質な乱数を生成する。
乱数生成といってもいろいろあるのね。
ちなみに、tongue twisterというと早口言葉のこと。tongue(タン)は、舌のことです。牛肉のタンと一緒だったりする。
牛肉のハツは、hearts(ハーツ)からきているそうですね。なんか話が違っているような…。

OOB

OOB - Out of band
帯域外データ
telnetプロトコルでCtrl-Cのような割り込みで使っている。
send/recvにMSG_OOBを渡すことで送受信できる。
setsockoptにSO_OOBINLINEを設定することで、OOBデータを得ることもできる。<---設定しなければ、送ることができないの?不明。設定したときとしないときで、selectが反応するかどうかを調べればいいのだろうけど。 とりあえず使っていないからいいか。telnetも使えるようだし。

selectについて調べてみた

selectについてのメモ。
走り書きなので自分しかわからないかも。
サーバーではacceptで待つ。接続がくると新しいソケットが作られる。そのソケットに書き込んだり読んだりすることでデータがやりとりされる。
selectを使う順番は、
socket
bind
listen
select < --ここ accept recv/send ということらしい。 続きを読む selectについて調べてみた