C言語

UNIXとC言語

 私自身にとって、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出版

坂井 弘亮

 

マニュアルのイメージ