私自身にとって、C言語はUNIX-Cになります。UNIXで何かのアプリケーションを作成するのは、システムコールをそのまま使って実装するのでOSの延長で機能追加している感じでした。そのため、UNIXシステムプログラミングに意識が向いていきました。
また、UNIXを仕事で使っている頃にLinuxのディストリビューションが出てきました。書籍に添付されているもの、CD-ROM単体がソフトとして扱われていたものが、パッケージとして販売されるようになりました。
その内に、Linuxのオープンソースの書籍が書店で見かけるようになりたくさんの本を購入しました。今、考えるとなぜあのように夢中になったのか不思議に思います。
UNIX-Cの開発経験では、単にプログラムをコンパイルする作業でなく、C言語の開発を行いコンパイルした後のLibrary(オブジェクトファイル)がどういうものかなど、システムプログラミングとして理解できたことが良かったと思います。
この頃になると、CPUはPentiumⅢ(同等のスペックCeleron)、メモリは512MBが標準で増設して1GBにするユーザーもいました。(ノートPCは256MBだったと思う)
そのハードウェアで、Linuxをインストールして自宅で普通にUNIX環境が構築できると感慨深くもありました。個人の環境としては充分ですが、開発環境という意味では商用WSでないとUNIXの仕事はできなかった。
開発環境は、UNIXもIDE(統合開発環境)はあることはありましたが、画面の動きが遅くメモリの値をトレースをするぐらいしか使えなかった。(内容を表示するのも遅かったと思う。)そのためコマンド操作でのデバッグ作業だった。
例えば、親プロセスのある箇所で停止させて、子プロセス(このときは20個ぐらいだった)内のソースコードをデバッグする必要があった。プロセスが生成されて実行するのは速く、走りきる前に調査対象の子プロセスのブレークポイント箇所で停止させないといけなかった。where frame を手打ちするキー入力を素早くしないと調査箇所が通り過ぎるので、デバッガで止まるまで何回も繰り返した。現在のIDE(統合開発環境)であれば、さくさくと動くので苦労せずともアタッチするプロセスの一覧から個別にプロセスをハンドリングできる。
Linuxは最初からオープンソースのコミュニティで公開されていたのでソースコードがあることはわかっていました。しかしそれでも、ソースコードがあることは考えさせられました。OSはメーカーが外部に公開しない技術と思っていたので、OSのソースコードがどのように実装されているかを知ることはできないという固定観念があり、それが覆りました。UNIXに興味をもち勉強しているとき、Linuxのソースコードの本が出版された時機が同じだったのでソースコードに夢中になったのかもしれません。
・開発時の記憶
プロセスのデバッグ
共有ライブラリ(動的リンカー)のデバッグをするとき、かなり苦労したので記憶にあります。
共有ライブラリの検索パスを指定しなければならなかったが、環境pathぐらいでは認識できない。別のセグメント領域にあることは解ったけどどうすればいいのか。その方法は、Sunのマニュアルにちゃんと記述されていた。
・pathmap コマンドで正しいライブラリの配置場所を指定する。
・loadobject -load コマンドでデバッガに取り込む。
外部インターネットに繋っていない作業場所ではマニュアルだけが頼りだ。(自分でも解決できてよかったといまでも思う。)
そのほか、コア・ダンプのデバッグなどありますがインターネットなどで有用な技術情報があるので特に書く必要もないと思います。
UNIX-Cで理解したのは、OS・システムコール・ライブラリの配置と読み込み、そしてユーザーが作成するC言語のアプリケーションがあることです。
また、プログラムがメモリにどのように配置されるのかを理解して、最適なコーディングをするための意識を持つ経験になりました。
UNIXの書籍一覧
UNIXプログラミング入門講座 | ASCII | 重松 保弘 |
プログラミングリファレンス UNIXシステムプログラミング |
オーム社 | 羽山 博 |
UNIXカーネルの設計 | 共立出版 |
Maurice J.Bach 坂本 文/多田 吉克/村井 純 |
UNIXカーネルの魔法 System Ⅴリリース4のアーキテクチャ |
プレンティスホール |
バーニー・グッドハート ジェームス・コックス 櫻川 貴司監訳 |
386BSDカーネルソースコードの秘密 | ASCII |
William Frederick Jolitz Lynne Greer Jolitz 吉川 邦夫訳 |
Lion's Commentary on UNIX | ASCII |
John Lions 岩本 信一 |
Linux Core Kernel |
発行 セレンディップ 発売 小学館 |
Scott Maxwell 小嶋隆一 |
Linux 2.0 カーネルブック | オーム社 | R.Card/E.Dumas/F.Mevel |
Linux カーネルインターナル |
アジソンウェスレイ
アスキー |
Michael Beck/Harald Bohme/Mirko Dziadzka Urich Kunitz/Robert Magnus/Drik Vermorne (株)クリック |
Pthreadsプログラミング | オライリージャパン |
Bard Nichols/Dick Buttlar Jacqeline Proulx Farrell 榊 正憲 |
Linkers & Loaders |
John R.Levine 榊原 一矢 監修 ポジティブ・エッジ 訳 |
|
リンカ・ローダ実践開発テクニック 実行ファイルを作成するために必須の技術 |
CQ出版 |
坂井 弘亮
|
マニュアルのイメージ