本科目では,Linuxシステムプログラミングの第一歩を踏む出すことを目的とする.15時間でLinuxのシステムプログラミングを習得することは,学修単位であってもかなり困難だと思います.しかし,踏み出さないことには始まりません.そこで,この授業では,テーマをプロセスとソケット通信にフォーカスして学習を進めます.あえて,12章あるうちの2章にテーマを絞って話を進めることで,この2つの章の内容に関しては,受講者全員が完全にその2章をマスターしている状態を目指します.
概要:
この授業では,Linux(ここではUbuntuに限定する)のシステムプログラミングの習得を目指す.上記の目的・到達目標にも書いたように,全体で12章ある教科書の2章のみにフォーカスして授業を行う.2つの章にフォーカスするが,結局は,streamなどLinuxにおける常識を身に着けている必要がるため,そうでない場合は,前半の他の章の部分を拾い読みしながら学習を進めることになる.ただし,授業の最初の3回はC言語を復習する.
実務経験のある教員による授業科目:加藤は企業(IBM)でソフトウェアの開発を担当していた.その経験を活かし,オブジェクト指向におけるソフトウェア・インターフェースについて授業を行う.
授業の進め方・方法:
教科書の内容に関する限り,学生のグループによる発表で内容の理解を進める.教科書の例や問題は各自が毎回プログラミングして動作を確認して,各自ちょっとした改変を行い,そのプログラムを課題の成果とする.教員は,Michael Kerriskの本(LINUXプログラミングインターフェース,O'REILLY)のプログラムコードの内容を用いて別の角度から,プロセスとソケットプログラミングに関する説明を行う.PCは各自のPCを持参すること.PCは何らかの形でUbuntuが動作すればよい.ただし,最初の約1か月間はC言語の復習をして,ポインターの扱いを思い出すようにする.
注意点:
授業では,
評価方法詳細:
発表 70%,課題等その他 30% を目安として評価する. 60点以上を合格とする.再試は行わない.
発表者以外も次回の授業範囲を予習し、教科書の該当範囲を事前に読んでおくこと。
|
|
週 |
授業内容 |
週ごとの到達目標 |
前期 |
1stQ |
1週 |
オリエンテーションとWSLおよびVirtualbox上のUbuntuの動作確認 |
独力で色々なプログラミング環境を構築できる.
|
2週 |
「ふつうのLinuxプログラミング 第2版,青木峰朗, SB Creative」を用いて,Linuxの全体像を把握する.
|
ファイルシステム,プロセス,ストリームが大雑把に理解できる.
|
3週 |
グループ発表1(発表の中で質問してもよい) C言語の復習(1):細かいことではなく,後のページを読むために,どこに何が書かれているかを説明する.
|
教科書の内容の理解ではなく,どこに何が書かれているかを理解する.
|
4週 |
グループ発表2(発表の中で質問してもよい) C言語の復習(2) |
ポインターの扱い方を思い出す.
|
5週 |
C言語の復習が完了しない場合の予備 |
C言語を完全に思い出す.
|
6週 |
グループ発表3 「プロセスとプログラムの関係,環境変数(5.1-5.2)」について発表する. |
環境変数とは何かをはっきり理解できる.
|
7週 |
グループ発表4 「プロセスの終了と複製(5.3-5.6)」について発表する. |
プロセスを複製するプログラムが書ける.
|
8週 |
グループ発表5 「プログラムを実行する(5.7-5.10)」について発表する. |
execに関するプログラムを自由に使える
|
2ndQ |
9週 |
グループ発表5続き 「プロセス関連その他(5.8-5.13)」について発表する. |
リダイレクトなとその他のプロセス関連のことが理解できる.
|
10週 |
予備(可能なら先輩の講演を聞く) |
予備
|
11週 |
グループ発表6 「クライアント・サーバープログラムを書く(8.1-8.6)」 |
C言語でクライアント・サーバープログラムが書ける
|
12週 |
グループ発表7 「並行サーバー,selectによる多重化I/Oのプログラムを書く(8.7-8.8)」 |
並行サーバーのための,子プロセスによる処理とSelectによる処理によるプログラムが書ける.
|
13週 |
グループ発表8 「クライアント・サーバープログラム,その他(8.9-8.12)」 |
gethostbyname関連のAPIを理解している.
|
14週 |
予備 |
予備
|
15週 |
予備 |
予備
|
16週 |
|
|
分類 | 分野 | 学習内容 | 学習内容の到達目標 | 到達レベル | 授業週 |
専門的能力 | 分野別の専門工学 | 電気・電子系分野 | 情報 | 基本的なアルゴリズムを理解し、図式表現できる。 | 3 | |
プログラミング言語を用いて基本的なプログラミングができる。 | 3 | |
情報系分野 | プログラミング | 変数とデータ型の概念を説明できる。 | 3 | |
制御構造の概念を理解し、条件分岐や反復処理を記述できる。 | 3 | |
代入や演算子の概念を理解し、式を記述できる。 | 3 | 前1,前2,前3,前4,前5,前6,前7,前8,前9,前10,前11,前12,前13 |
プロシージャ(または、関数、サブルーチンなど)の概念を理解し、これらを含むプログラムを記述できる。 | 3 | 前1,前2,前3,前4,前5,前6,前7,前8,前9,前10,前11,前12,前13 |
与えられた問題に対して、それを解決するためのソースプログラムを記述できる。 | 3 | 前1,前2,前3,前4,前5,前6,前7,前8,前9,前10,前11,前12,前13 |
ソフトウェア生成に必要なツールを使い、ソースプログラムをロードモジュールに変換して実行できる。 | 3 | 前1,前2,前3,前4,前5,前6,前7,前8,前9,前10,前11,前12,前13 |
要求仕様に従って、標準的な手法により実行効率を考慮したプログラムを設計できる。 | 3 | 前2,前3,前4,前5,前6,前7,前8,前9,前10,前11,前12,前13 |
ソフトウェア | 時間計算量や領域計算量などによってアルゴリズムを比較・評価できることを理解している。 | 3 | |