C++ のお勉強 関数編

C

L4 の C による実装が見つからないので,解読のため C++ の勉強とか始めた。最近の OS は C++ で実装するもんなのかしら。 「C/C++とJava(第7章)」を読んで,関数まわりはなんとなく理解できたのでメモる。 スコープ 何処でも変数を宣言可能。し…

ヒントモードで target="_blank" の恐怖から開放された

イントロダクション ネットウォッチャーを悩ませる古典的問題として target="_blank" 問題がある。 target="_blank" とは,左クリックでリンクを開くときの動作を予測不可能にする恐怖の target 属性である。例えば,二つの蛇口を持つ水道があるとしよう。こ…

キーボードで割り込んでみる

前回は,ハードウェア割り込みについて学んだ。 今回は,キーボードを例に実際に割り込みを実現するためのプログラムを書いてみよう。具体的には,キーボードが使用されると,IRQ1 割り込み信号が PIC へ届きベクタに変換され CPU へ伝達される。そして,割…

クリックジャッキングというのが流行ってるらしい

404 Blog Not Found:javascript - クリックジャック殺しなbookmarklet クリックジャック - 素人がプログラミングを勉強するブログ などを見ると,透明なiframeを重ねて誤爆させる攻撃らしい。 僕は難しいことは解らないんでアレなんだけど,例えば,次のよう…

ハードウェア割り込みについて

今回は割り込みについて学ぼう。 割り込みとは CPU はメモリ上の命令を逐次実行していくが,プログラマがあらかじめ全ての処理を予測し順序良く記述しておくことは困難である。(例えば,ユーザーがキーボードを押すタイミングを,プログラマが予め予測する…

たぶん,debian lenny に Remedie をインストールする方法

git で clone して,`cpan -i .` するだけ! 以下,手取り足取り腰取りの親切な解説―― Remedieって何? Plaggerを生んだ、miyagawaさんプロデュースのネットウォッチャー御用達アグリゲーター。 このページの下の方にスクリーンショットを載せてあるので,見…

文字を表示する関数を作ってみよう

文字の表示には,VRAM と呼ばれるメモリ領域に ASCII コードを書き込むだけでよく,カーソルの移動には,表示した文字数をビデオコントローラーに教えるだけでよいことが前回までに分った。 これらを踏まえ文字列を表示する関数を作ってみることにしよう。 m…

C言語のインライン関数について

C GCC

GCCや多くのコンパイラーは,C言語の標準(C99)にインライン関数が取り込まれるずっと前からインライン関数をサポートしていた。そのためかインライン関数の定義は様々で,同じ書式でも各コンパイラで挙動が異なる場合がある。 今回は,インライン関数の定義…

I/Oポートを使ってカーソルを動かす

前回はVRAMを操作し文字の表示を行ったが,ビデオコントローラーには直接命令を送ることはしなかった。ビデオコントローラーへ直接命令を送ることで,表示モードの変更や,カーソルの表示・移動などを行うことが出来る。 今回は,ビデオコントローラーが提供…

C言語でカーネルを書き始める

前回はIPLを書いたので,いよいよカーネルを書き始めることが出来る。 今回からはC言語を使ってOSの開発を行う。普段私たちは,C言語でアプリケーションプログラムの開発を行うとき,main関数からプログラムを書き始める,これはmain関数からプログラムが実…

詳解 LINUXカーネル

詳解 Linuxカーネル 第3版 作者: Daniel P. Bovet, Marco Cesati, 高橋浩和, 杉田由美子, 清水正明, 高杉昌督, 平松雅巳, 安井隆宏 出版社/メーカー: オライリー・ジャパン 発売日: 2007/02/26 メディア: 大型本 目次 1章 概要 2章 メモリアドレッシング 3章…

coLinuxを導入して,Windows上でLinuxを快適に動かそう

coLinuxは,Windows上で動くLinux専用エミュレーターだ。読み方は「コーリナックス」らしい。ボクは以前からcoLinuxをアプリケーションの開発に使っている。みんなは,エミュレーターと聞くとネイティブで動かすのと比べて重いイメージがあると思っているん…

後で読むを支援するvimperatorのプラグインを作ってみた

私は,読み終わったサイトはdeliciousに,後で読もうかなーってサイトはfirefoxのブックマークに登録して,ブックマークを使い分けていたんだけど。 このfirefoxのブックマークの操作は,残念なことにvimperatorを使っていてもマウスを使わざるをえなく,腕…

vimperator入れたら入れてる拡張が減らせた

あ…ありのまま 今 起こった事を話すぜ! 「vimperatorを入れたと思ったら,いつの間にか拡張が減っていた」 何を言ってるのか解らないと思うが,おれも何をされたのかわからなかった vimライクなキーバインドだとかヒントモードだとか そんなチャチなもんじ…

.vimperatorrcを再読み込みするコマンドとかね

たぶん,一週間ぐらい前からvimperatorというものを使い始めた。これはやばい,Autopagerize以来の革命だと思う。それで,.vimperatorrcを弄っているんだけど,設定ファイルを再読み込みするのに毎回ブラウザを再起動するのがメンドクサイので,.vimperatorr…

やっつけIPL

512byteより大きなプログラムを実行してみよう。 前回は小さなプログラムを書いて,画面に文字を表示することが出来た。AT互換機はディスクの最初のセクタ,つまり512byteを読み込んで実行してくれる分けだから,ただディスクの先頭セクタにそのプログラム…

gasとcでHello,worldしてみる

gasを使ってプログラムを書いてみよう。まずは伝統的にhello,worldからはじめる。 アセンブラで記述しなければならないのはセグメントレジスタの設定のみで、後はCで記述できる。 GAS ここではセグメントレジスタを設定したあとhelloへジャンプしている: cr…

GNUアセンブラ(GAS)でインテル記法を使う

GCCではインラインアセンブリでGASを使うことが出来る。 インラインアセンブラでは,Cとアセンブラ間でのスタックのやり取りをまったく気にすることなく,シームレスにコードを記述できる。 それに拡張子を.SにしておけばGCCはgasをcppで前処理してくれるの…

メモ

久しぶりの更新ですね。 OSの開発は知らないことが多くてなかなか思うように進みません。 試行錯誤で開発しているので今まで書いた記事にもウソが結構あるようです。たいした数も書いてないんだけどね改善の必要がありそうなとこをメモしておきます。 IPLは…

AT互換機のブートの仕組み

私たちがPCの電源を入れるとしばらく待てばwindowsなどのOSが起動される。まあ当然のことなんだけどね。 OSを一から書き上げる場合、PCの電源を入れてからOSが起動するまでPCの内部でどの様な事が起こっているのかを少し知っていなきゃいけない。 ここではい…

x86なCPUについて

アセンブラはCPUに非常に近い言語であるので、アセンブラの解説を始める前にCPUを理解しておくのが賢明だろう。 x86なCPUとは8086互換のCPUのことである。例えばPentiumやAthlonなどはx86なCPUだ。 レジスタ CPUは主にデータの計算を行う回路だ(他にもする…

OSを作ろう

まず初めにOSを作る手順を紹介しよう。基本的にコードを書く→コンパイル→確認という手順になる。これはアプリケーションプログラムを作成する手順と同じである。なのでここではツールの使い方について簡単に説明する。 OS作成に必要なツールを揃えよう 私はd…

ブログを始めてみた

暇なのでブログを始めてみた。 実は今OSの自作を試みていて、そこら辺の事を書いていく予定だ。 三日坊主にならないように頑張ろう。