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++ 言語のコンンパイル技術についても簡単にふれる。

作成するクラス・ライブラリは非常に簡単なものであるが、基本的な構造は商用のものと同じである。 内部構造を知ることによって、商用ライブラリの使い方も習得しやすくなることをねらっている。

前者は X Window の基本 API である Xlib のプログラミングについての総合的な解説書、後者は Xlib の各関数、構造体の解説書である。 ともに日本語訳がソフトバンクから発行されている。

クラス・ライブラリを作成する際のクラス階層の設計方法については、以下の文献が参考になる。

これは、オブジェクト指向プログラミングに頻繁にあらわれるクラス階層のパターンを、網羅的に述べたハンドブックである。

(1) イベント駆動型プログラム

(2) オブジェクト指向プログラミング

(3) クラス・ライブラリ

(4) 継承 vs コールバック

(5) レイアウト・マネージャ
 

なお、本セクションの内容に加筆したものは、拙著:

の中の1章として収録されている。


3. Web サーバ

簡単な Web サーバを作成し、ネットワークを使ったソフトウェアの内部設計の基本を学ぶ。とくに、OS が用意する基本的なサービスをどのように使って、ソフトウェアを作成しているかを知る。

これは TCP/IP を使ったネットワーク・プログラミングの基本を解説した教科書である。

(1) TCP/IP による通信

(2) HTTP 1.0

(3) マルチプロセス

(4) プロセスの実行
 


4. スレッド・ライブラリ

単一プロセスの上で、並行処理をおこなうための簡単なマルチ・スレッド機能をライブラリとして実装する。この実装を通して、コンテキスト・スイッチ、同期、割り込み、スケジューリングなど、OS の動作を理解する上で重要な概念や、OS カーネルの仕組みを学ぶ。

スレッドの機能や役割については、OS の教科書に詳しい。 上にあげた文献は、標準的な OS の教科書である。

(1) マルチスレッド

(2) Non-blocking I/O

(3) 割り込み処理

(4) 同期
 


付録




千葉 滋

改訂第 6 版
Copyright (C) 1999-2001 by Shigeru Chiba.  All rights reserved.