OS/Programming
東京工業大学
千葉 滋
シラバス
本コースは、プログラミングの基本について、ひととおりの技術を学び終えた受講者を対象とする。コースの目的は、実際のソフトウェアを開発する際に、具体的にどのようにプログラムを設計し、またどのように OS の機能を利用していけばよいか、感覚をつかんでもらうことである。このため、本コースは講義中心ではなく、いくつかのソフトウェアの作成演習をとおして、そのソフトウェアのプログラムはなぜそのように設計されているのか等を考えてもらう。
1. 簡単な C コンパイラ
言語仕様を簡略化したCコンパイラを作成し、言語処理系の基本構成を学ぶ。また関数呼び出しや配列参照など、C言語の各基本機能が実際にどのような機械語に変換されていくのかを学ぶ。
実際に作成する処理系は2つで、まずはじめに字句解析の練習として、ごく簡単なLispインタプリタを作る。
その後、構文解析、コード生成の演習のため、C言語風の手続き型言語のコンパイラを作る。
参考文献
佐々政孝、プログラミング言語処理系、岩波講座ソフトウェア科学、岩波書店
中田育男、コンパイラの構成と最適化、朝倉書店
前者は、一般的な言語処理系の知識について網羅的に解説してある。
ハンドブックとして持っていると役に立つだろう。
後者は、コンパイラの最適化技法についてやはり網羅的に解説してあるハンドブックである。
1日目:
(1) 字句解析1
(2) 字句解析2
(3) インタプリタ
(4) 構文解析1
2日目:
(5) 構文解析2
(6) コード生成1
(7) コード生成2
(8) コード生成3
2. GUI toolkit の設計と製作
X Window用の簡単な GUI クラス・ライブラリを C++ 言語で作成し、その基本構成を知る。またウィンドウ・プログラム特有の基本技術を学び、C++ 言語のコンンパイル技術についても簡単にふれる。
作成するクラス・ライブラリは非常に簡単なものであるが、基本的な構造は商用のものと同じである。
内部構造を知ることによって、商用ライブラリの使い方も習得しやすくなることをねらっている。
参考文献
Adrian Nye, Xlib Programming Manual, O'Reilly & Associates, Inc.
Adrian Nye Ed., Xlib Reference Manual, O'Reilly & Associates, Inc.
前者は X Window の基本 API である Xlib のプログラミングについての総合的な解説書、後者は Xlib の各関数、構造体の解説書である。
ともに日本語訳がソフトバンクから発行されている。
クラス・ライブラリを作成する際のクラス階層の設計方法については、以下の文献が参考になる。
Erich Gamma et al, Design Patterns, Addison Wesley, 1995.
これは、オブジェクト指向プログラミングに頻繁にあらわれるクラス階層のパターンを、網羅的に述べたハンドブックである。
(1) イベント駆動型プログラム
(2) オブジェクト指向プログラミング
(3) クラス・ライブラリ
(4) 継承 vs コールバック
(5) レイアウト・マネージャ
なお、本セクションの内容に加筆したものは、拙著:
千葉 滋、GUI ライブラリの仕組み —ソフトウェア設計のケーススタディ—、野崎昭弘・黒川利明・疋田輝男・竹内郁雄・岩野和生 編 情報科学こんせぷつ10、ISBN4-254-12710-3 C3341、朝倉書店、近刊、予価2800円.
の中の1章として収録されている。
3. Web サーバ
簡単な Web サーバを作成し、ネットワークを使ったソフトウェアの内部設計の基本を学ぶ。とくに、OS が用意する基本的なサービスをどのように使って、ソフトウェアを作成しているかを知る。
参考文献
W. R. Stevens, "Unix Network Programming", 2nd Ed., Prentice Hall, 1998.
これは TCP/IP を使ったネットワーク・プログラミングの基本を解説した教科書である。
(1) TCP/IP による通信
(2) HTTP 1.0
(3) マルチプロセス
(4) プロセスの実行
4. スレッド・ライブラリ
単一プロセスの上で、並行処理をおこなうための簡単なマルチ・スレッド機能をライブラリとして実装する。この実装を通して、コンテキスト・スイッチ、同期、割り込み、スケジューリングなど、OS
の動作を理解する上で重要な概念や、OS カーネルの仕組みを学ぶ。
参考文献
Abraham Silverschatz and Peter Galvin, Operating System Concepts, 5th Ed.,
John Wiley & Sons, 1999
スレッドの機能や役割については、OS の教科書に詳しい。
上にあげた文献は、標準的な OS の教科書である。
(1) マルチスレッド
(2) Non-blocking I/O
(3) 割り込み処理
(4) 同期
付録
千葉 滋
改訂第 6 版
Copyright (C) 1999-2001 by Shigeru Chiba. All rights reserved.