システムプログラミング

科目基礎情報

学校 熊本高等専門学校 開講年度 2017
授業科目 システムプログラミング
科目番号 HI511 科目区分 専門 / 選択
授業形態 授業 単位の種別と単位数 学修単位: 2
開設学科 人間情報システム工学科 対象学年 5
開設期 通年 週時間数 1
教科書/教材 教科書:渡辺知恵美「システムプログラミング入門~UNIXシステムコール,演習による理解~」、サイエンス社。参考書:Robert Love 「Linuxシステムプログラミング」、オライリージャパン。その他:WebClass上の配布プリント
担当教員 藤井 慶

到達目標

OSが持つシステムコールについて以下の処理を理解して実装できることを到達目標とする。
1. メモリ管理: プロセスのアドレス空間の構造を理解し、メモリの動的確保を行える。
2. ファイルシステムと入出力: 高水準・低水準I/Oの違い、テキスト・バイナリI/Oの違いを理解し、使い分けることが出来る。またディレクトリやファイル情報を取得できる。
3. 並列処理: プロセスやスレッドを生成でき、割り込み処理や排他制御を行える。
4. プロセス間通信: パイプライン、共有メモリを用いてプロセス間で通信(データ共有)できる。

ルーブリック

理想的な到達レベルの目安標準的な到達レベルの目安未到達レベルの目安
1. メモリ管理プロセスのアドレス空間の構造を深く理解し、その仕組みを利用したプログラムを実装できる。プロセスのアドレス空間の構造をおおよそ理解し、その仕組みを利用した基本的なプログラムを実装できる。プロセスのアドレス空間の構造を理解できず、その仕組みを利用した基本的なプログラムを実装できない。
2. ファイルシステムと入出力高水準・低水準I/Oの違い、テキスト・バイナリI/Oの違いを深く理解し、使い分けることが出来る。またディレクトリやファイル情報を取得できる。高水準・低水準I/Oの違い、テキスト・バイナリI/Oの違いをおおよそ理解し、両者を使ったプログラムを実装できる。またディレクトリやファイル情報を取得できる。高水準・低水準I/Oの違い、テキスト・バイナリI/Oの違いを理解できず、両者を使ったプログラムを実装できない。またディレクトリやファイル情報を取得できない。
3. 並列処理プロセスやスレッドについて深く理解し、その違いを説明できる。プロセスやスレッドを生成でき、割り込み処理や排他制御を行える。プロセスやスレッドについておおよそ理解し、生成でき、割り込み処理や排他制御を行える。プロセスやスレッドについて理解できず、生成や、割り込み処理、排他制御を行えない。

学科の到達目標項目との関係

教育方法等

概要:
UNIXオペレーティングシステムが提供する主にPOSIX準拠システムコールの役割や使い方について、プログラムを作りながら学ぶことで、OSやより本格的なプログラミングについて理解を深める。主開発環境はLinuxとC言語である。
授業の進め方・方法:
基本的に以下の手順で毎回の授業を行う。
1. 教科書やプリントに基づいて簡単な講義を行う。
2. プログラミング演習で理解を深める。質問は随時受け付ける。
3. 各課題の解答をレポートにまとめて提出する。
注意点:
システムプログラミングは一般のアプリケーション開発に比べると一見地味で細かい話が多い。しかしより本格的なプログラムを設計・開発する場合に必須の知識であるため、興味を持って取り組んで欲しい。
各課題の実装が授業時間内に終わらなかった場合、自学学習の時間で終わらせること。その際、各課題は次週までの宿題と捉え、未提出課題を溜め込まないように心がけること。
本科目は2単位であり規定授業時数は60時間である。自学自習は30時間であり実装課題を完成させ報告書にまとめることを行う。

授業計画

授業内容 週ごとの到達目標
前期
1stQ
1週 システムプログラミングに向けたC言語プログラミングの基礎(1) Makefileを利用して分割コンパイルを行える。
2週 システムプログラミングに向けたC言語プログラミングの基礎(2) manコマンドで各関数やコマンドの機能や引数を調べることができる。perror()を用いてエラー表示を行える。
3週 システムプログラミングに向けたC言語プログラミングの基礎(3) 代表的なコマンドのソースコードを入手し、コンパイルすることができる。
4週 高水準I/O、低水準I/O (1) 高水準・低水準I/Oの違いを説明でき、それらを用いたプログラムを実装できる。
5週 高水準I/O、低水準I/O (2) 高水準・低水準I/Oの違いを説明でき、それらを用いたプログラムを実装できる。
6週 高水準I/O、低水準I/O (3) バイナリファイルを読み書きするプログラムを実装できる。
7週 高水準I/O、低水準I/O (4) バイナリファイルを読み書きするプログラムを実装できる。
8週 プロセス管理 fork()を用いプロセスの生成、終了、親子プロセス間の同期を制御できる。
2ndQ
9週 割込み処理(1) シグナルによる割り込み処理を用いたプログラムを実装できる。
10週 割込み処理(2) シグナルによる割り込み処理を用いたプログラムを実装できる。
11週 パイプライン(1) パイプを用いて親子プロセス間で通信できる。
12週 パイプライン(2) パイプを用いて親子プロセス間で通信できる。
13週 共有メモリ(1) 共有メモリを用い、プロセス間でデータ共有できる。
14週 共有メモリ(2) 共有メモリを用い、プロセス間でデータ共有できる。
15週 学習のまとめ これまで学習した内容を理解し説明できる。
16週 学習のまとめ これまで学習した内容を理解し説明できる。
後期
3rdQ
1週 排他制御 セマフォを用いてプロセスの排他制御や同期制御を行える。
2週 マルチスレッド(1) マルチプロセスとマルチスレッドとの違いを説明できる。スレッドの生成、終了、排他制御を行える。
3週 マルチスレッド(2) マルチプロセスとマルチスレッドとの違いを説明できる。スレッドの生成、終了、排他制御を行える。
4週 マルチスレッド(3) マルチプロセスとマルチスレッドとの違いを説明できる。スレッドの生成、終了、排他制御を行える。
5週 ソケット通信(1) ソケットを用い、ホスト間通信するプログラムを実装できる。
6週 ソケット通信(2) ソケットを用い、ホスト間通信するプログラムを実装できる。
7週 ソケット通信(3) ソケットを用い、ホスト間通信するプログラムを実装できる。
8週 ファイルシステム(1) ディレクトリおよびファイルの情報を取得・変更できる。
4thQ
9週 ファイルシステム(2) ディレクトリおよびファイルの情報を取得・変更できる。
10週 ファイルシステム(3) ディレクトリおよびファイルの情報を取得・変更できる。
11週 メモリ空間(1) 仮想アドレス空間において関数や変数がどのように配置されるか説明できる。メモリリーク、バッファオーバフローについて説明できる。
12週 シェルスクリプト(1) シェルスクリプトを用いて基本的なスクリプトを実装できる。
13週 シェルスクリプト(2) シェルスクリプトを用いて基本的なスクリプトを実装できる。
14週 シェルスクリプト(3) シェルスクリプトを用いて基本的なスクリプトを実装できる。
15週 学習のまとめ これまで学習した内容を理解し説明できる。
16週 学習のまとめ これまで学習した内容を理解し説明できる。

モデルコアカリキュラムの学習内容と到達目標

分類分野学習内容学習内容の到達目標到達レベル授業週
専門的能力分野別の専門工学情報系分野システムプログラムプロセス管理やスケジューリングなどCPUの仮想化について説明できる。3

評価割合

報告書合計
総合評価割合100100
基礎的能力00
専門的能力100100
分野横断的能力00