start

[kernel/main.c]_PROTOTYPEマクロに唸る

MINIXのご本尊のmainだと思われる、kernel/main.cから読み進めて行こう。ファイルの冒頭にも「This file contains the main program of MINIX as well as its shutdown code.」と書いてある。

24行目から始まるプロトタイプ宣言。初っぱなからマクロの登場だ。

FORWARD _PROTOTYPE( void announce, (void));

FORWARDはinclude/minix/const.hで#define FORWARD staticと定義されている。これ以外の独自修飾子も、同様にconst.hで宣言されている。

include/minix/const.h:9-12
#define EXTERN        extern	/* used in *.h files */
#define PRIVATE       static	/* PRIVATE x limits the scope of x */
#define PUBLIC					/* PUBLIC is the opposite of PRIVATE */
#define FORWARD       static	/* some compilers require this to be 'static'*/

FORWARDは、関数のスコープをファイルスコープに押さえ込む役割のようだ。

続いて_PROTOTYPEマクロ。

名前からもわかるように、関数プロトタイプ宣言に関するマクロである。これの役割はK&R CとANSI Cのプロトタイプ宣言の違いを吸収するものっぽい。本体はinclude/ansi.hに記述されている。

#ifdef _ANSI
 
/* Keep everything for ANSI prototypes. */
#define _PROTOTYPE(function, params) function params
#define _ARGS(params) params
(略)
 
#else
 
/* Throw away the parameters for K&R prototypes. */
#define _PROTOTYPE(function, params) function()
#define _ARGS(params) ()
(略)
 
#endif /* _ANSI */

この定義と、先のプロトタイプ宣言を見比べると、K&RとANSIそれぞれの場合で以下のように展開されることがわかる。

ANSIの場合static void announce (void);
K&R の場合static void announce();

ANSIの場合は普通のプロトタイプ宣言だが、K&Rにはプロトタイプ宣言なるものは存在しないので、この文は関数の使用宣言をしているらしい(K&Rの資料がないので詳細は不明)。

では実際の関数定義部はどうなっているかというと……announce関数は引数を持たないので、その次のshutdown関数を見てみる。

PRIVATE void shutdown(tp)
timer_t *tp;
{
	...

こっちは完全にK&R準拠の書き方だ。後方互換の為に、ANSI Cでもこの書き方も許されている(無論、推奨はされていないが)ので、プロトタイプ宣言部分だけを切り替えてやれば、K&RなコンパイラでもANSIなコンパイラでもコンパイルできるって仕組みか。すげー!

0.MINIXのソースを読む

就活の面接で「OSのソースを読むと勉強になるYO!」と言われたのに触発され、読んでみる事にした。タスク管理とか前々から興味はあったしね。

Mac厨でありBSD厨でもある俺としては、FreeBSDとかDarwinのソースを読んでみたい所だけど、こいつらは流石に規模が大き過ぎるので、初学者には厳しいと判断。とりあえず、この手の話には最適なMINIXのソースを読む事にする。

MINIX 3公式サイトからMINIX 3.1.1の基本機能部分だけのソースtarballを落としてきて解凍。適当にXcodeでプロジェクトを作って、ソースファイルを丸ごと追加した。ソースコードを読むための、各種ツールなんかもあるみたいけど、とりあえずはXcodeだけで頑張って見る予定。

まずは、kernel/main.cあたりから読んで行けばいいのかな?OSに限った話じゃないが、初学者がある程度の規模のソフトのソースを読む際は、どっから読んでいいのか非常に困る所である。

ま、適当に読んで行くとしましょうか。

三重とX11

実務実習(所謂教育実習)で三重県は津市に来ております。

えー、江戸橋には何もありません。駅前にローソン+があります。しかし、それしかありません。でもまぁ、宿泊先のネット回線が光なのでヨシとします。ちなみに、三重までは今日営業を開始したばかりの新幹線、N700系に乗って参りました。1本前の新幹線は空席が目立ったのに対し、俺が乗ってきたのは指定席もほぼ満席でした。

さて、宿に着いて早々、取り立てのN700の写真をうpすべく、編集しようと思ったらGimpが入ってなかった。で、Gimpをダウンロードしてきて実行しようとしたら、X11が入ってなかった。あちゃー。入れたと思ったのになぁ。

Panther用のX11はAppleから落とせるんだが、Tiger用はというと「TigerのインストールDVDから入れてね」なーんて書いてある。ダメ元で先のX11を落としてみたが、やっぱりダメだった(インストーラのバージョンチェックではじかれる)。

これじゃデジカメ持ってきた意味がねぇ……と途方に暮れていた所「Install X11 on Tiger without the Tiger install DVD」なるページを発見。

曰く

The other day I was at school and I needed to install X11 on my intel mac in order to run an NX Client session into my linux box at home.
However, apple doesn’t seem to want to put the X11 User package for Tiger online anywhere… You can find the package for ⇐10.3 but what good is that!?
For anyone like me who doesn’t carry their Tiger install DVD at all times, I am going to put the X11 User and X11 SDK packages online.

だそうだ。うーん、素敵過ぎる。

というわけで、有り難くTiger用のX11をダウンロード&インストールし、無事Gimpを動かす事が出来ましたとさ。めでたしめでたし。

GPGPU関連リンク

卒研でGPGPUを扱うことになった。

学校で使ってるマシンはWindowsだが、Mac厨の俺としてはMacでも開発がしたい(願わくばコーディングは全てMacで行って、Windowsは動作確認程度に使いたい)。なので、ターゲットはOpenGL+GLSLとする。nVidiaのCgという手もあるが、Cgで書いたシェーダがRadeonでも動くかどうか不明なのと、やっぱりオープンな規格でしょ、ということでGLSL。資料が全然ないという、茨の選択のような気がしないでもない。ま、ま、Macでプログラミングしてるって時点で茨の道を素足で歩いてるようなものなので、今更、棘の1本や2本、増えたところで気にならないと思う………多分。

能書きはこれくらいにして、研究で役立ちそうなページへの個人的リンク集。

    • とっても分かりやすいGPGPUの解説。現在ここで勉強中。英文だが平易な単語&文章で、GPGPUの概念からGLSLを使った実装まで学ぶことが出来そう。
    • GLSLを基礎から解説してるページ。英文が若干読み難い感じだが、記事を全部読めばGLSLについては一通り理解できそう。

FBO(Frame Buffer Object)に関する資料

MacBook Pro買っちゃった

7月はまるまる1ヶ月間、教育実習で三重に行かなければならくて、パソコン環境はどうしようかなぁと考えていたところに、丁度よく新MacBook Proの発表&発売が重なったのでポチってしまった。

15インチの2.4GHzモデルを土台に、キーボードを英語配列に変更して注文。学割を使って30万円弱也。高ーっ!!でも、高いだけあって、その辺のデスクトップよりよっぽど高性能。当然、うちのマシン達の中では群を抜いた性能。

Intel Macを買ってまずすることと言えば、BootCampと仮想化ソフト。

というわけで、早速BootCamp入れて、XP入れて、Parallesのコヒーレンスモードで起動してみた。

これは何というカオスwwww

Mac OS Xネイティブのアプリと、X11のアプリと、Windowsのアプリ(というかWindowsそのもの)が同時に動くなんて…!! 実際に動いてる所を見ると、感動も一入だ。

実習に行くまでに環境を整えないとなぁ。まぁ、それも楽しみの1つではあるけど。

今までメインで使ってたPPC Mac miniは、iPodの母艦として、各種サーバ用途として運用していく予定。なので、こっちの環境も作り直さねば。

  • start.txt
  • 最終更新: 2022-07-27 15:26
  • by Decomo