到達目標
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 | |
評価割合
| 報告書 | 合計 |
総合評価割合 | 100 | 100 |
基礎的能力 | 0 | 0 |
専門的能力 | 100 | 100 |
分野横断的能力 | 0 | 0 |