2023年度 システムプログラミング
講義情報
科目名 | システムプログラミング 1, 2 (System Programming 1, 2) |
区分 | 学科専門科目 |
講義番号 | 093213 (システムプログラミング1),093214 (システムプログラミング2) |
担当 | 乃村能成,後藤佑介 |
主な対象 | 情報工学コース 2年次生 |
学期 | Q3, Q4 |
時限 | 月曜5-7限 (Q3, Q4 共に) |
講義室 | 4号館5F演習室 |
種別 | 必修 |
単位数 | それぞれ 1単位 |
教科書 | パターソン&ヘネシー「コンピュータの構成と設計 MIPS Edition 第6版 (上)(下) |
- 概略
- 本講義ではC言語によるプログラミング修得者を対象に, プログラミングに関する理解をより深めるために不可欠なアセンブラと C言語の境界部分についての講義を行う.ポインタや構造体とアセンブラ言語との関係, C言語におけるヒープ,スタックとコンピュータアーキテクチャとの関係, main関数以前の動作などについて,実例を通して理解を深める.
- このページは
- http://www.swlab.cs.okayama-u.ac.jp/~nom/lect/p3/
- 岡山大学moodle のURL
講義内容
本演習ではC言語によるプログラミング修得者を対象として, プログラミングに関する理解をより深めるために アセンブリ言語とC言語の境界部分についての演習を行う.
- MIPSアーキテクチャとアセンブリ言語,アセンブラ特有の記法
- メモリの扱い(スタック,データセグメントとテキストセグメント)
- 入出力の扱い,文字と文字列(直接制御とシステムコール)
- レジスタ,スタックを用いた手続き呼出しの仕組み
- Cコンパイラとアセンブラの連携
- 関数内のレジスタ使用規則
- 手続き呼出し規約(可変引数)
- スタックフレーム,auto変数と static 変数の違い
- 配列,ポインタのアセンブリ言語での表現
具体的には,SPIMというMIPS CPUシミュレータのハードウェア上にC言語とアセンブリ言語を使用して文字の表示と入力のためのシステムコールライブラリを作成する. さらに,そのライブラリを使用して printf 及び gets 相当を C言語で作成する. 最後に,それらを利用した応用プログラムを動作させる.
また,以下の関連項目は,本演習では扱っていない.
- 浮動小数点とその演算
- 構造体とメモリの関係
- トラップ命令,syscall以外の例外命令
- 割り込み
教科書
教科書は,「コンピュータの構成と設計 MIPS Edition 第6版 (上)(下)」を使用
2章(上巻)及び付録A(下巻)を主に参照する.特に下記の節は,本講義に関連が深い.必ず一読しておくこと.
- 第2章 命令:コンピュータの言葉 (上巻)
- 2.1 はじめに
- 2.2 コンピュータ・ハードウエアの演算
- 2.3 コンピュータ・ハードウエアのオペランド
- 2.6 論理演算
- 2.7 条件判定用の命令
- 2.8 コンピュータ・ハードウエア内での手続きのサポート
- 2.9 人との情報交換
- 2.14 配列とポインタの対比
- 付録A アセンブラ,リンカ,SPIM シミュレータ (下巻)
- A.1 はじめに
- A.2 アセンブラ
- A.5 主記憶領域の使用法
- A.6 手続き呼出し規約
- A.8 入力と出力
- A.9 SPIM
- A.10 MIPS R2000のアセンブリ言語
教科書旧版(5版)での対応も以下の通り.(参考: 教科書の正誤表)
- 第2章 命令:コンピュータの言葉 (上巻)
- 2.1 はじめに
- 2.2 コンピュータ・ハードウエアの演算
- 2.3 コンピュータ・ハードウエアのオペランド
- 2.6 論理演算
- 2.7 条件判定用の命令
- 2.8 コンピュータ・ハードウエア内での手続きのサポート
- 2.9 人との情報交換
- 2.14 配列とポインタの対比
- 付録A アセンブラ,リンカ,SPIM シミュレータ (下巻)
- A.1 はじめに
- A.2 アセンブラ
- A.5 主記憶領域の使用法
- A.6 手続き呼出し規約
- A.8 入力と出力
- A.9 SPIM
- A.10 MIPS R2000のアセンブリ言語
参考資料他
- 工学基礎実験実習の教科書 (緑色の冊子) 持参を勧めます
- 教育用計算機のページ
- コンピュータの構成と設計(教科書) 付録 の英文原文
- SPIM本家サイト (Linux版に加えて Mac,Windows版 SPIMを入手可能)
- https://sourceforge.net/projects/spimsimulator/files/ から Windows/Linux/Mac 用の SPIM をダウンロードしてインストールできます.
- 例えば,Windows の場合, QtSpim_9.1.21_Windows.msi をダウンロードして,ダブルクリックでインストールできます.
- 自宅のPCなどで GUI の QtSpim を動かしている場合は,
-mapped_io
に相当するオプション設定が GUI の Settings 項目に Enable Mapped IO としてあります. - なお Enable Mapped IO は,Practice3 以降では,不要なので off にしておいたほうがいいようです.on にしておくと QtSPIM の動作に不具合があるようです.
- https://sourceforge.net/projects/spimsimulator/files/ から Windows/Linux/Mac 用の SPIM をダウンロードしてインストールできます.
- システムプログラミング2 のみで使う spim-gcc というソフトウェアについて
- システムプログラミング2 では,spim-gcc (MIPS 用の GCC) を使いますが,これは,Linux でしか動作しません.
- Windows 10/11 で自習したい人は, 以下を参考にして,WSL2 を有効化し,Ubuntu 22.04LTS をインストールしておくといでしょう.
https://learn.microsoft.com/ja-jp/windows/wsl/install
wsl --install
- spim-gcc のインストールについては,別途教員に相談してください.
- SPIM のドキュメント(英文)
- 演習で使用する主なMIPS命令の簡易一覧表
演習室で使用する xspim コマンドは,
% xspim -mapped_io&
と入力して起動すること.
- FAQ
- 寄せられた質問への回答(一部)
単位と試験について
- レポート(システムプログラミング1,2 各1回)と,試問(同 各1回) の成績,毎回の提出物,及び定期試験で総合的に判断する.
- レポートの締め切り,提出方法は,各回の出題時に指示する.
- レポート作成に関する一般的な注意については, LaTeXによるレポート作成の基本 — 教育用計算機システム リファレンスマニュアル を参照のこと.
- レポート提出後の講義中に口頭試問を行う.
新型コロナウイルス感染症 (COVID-19) の影響で予定が変更になる場合もあります.
例えば,口頭試問を簡略化し期末に定期試験を行う可能性もあります.
試問実施について
試問は, 5-8限 (13:25-17:20) で実施します. 半数づつ 5,6限で試問を受ける学生と 7,8限で試問を受ける学生に分けます. (前半後半の別は,別途指示します)
- 試問前に Moodle にレポート(PDF)をアップロード済か確認して下さい
- 待ち時間で Moodle から授業評価アンケートに回答してください
- 試問を受けて,教員に合否の確認をしてください
- 印刷したレポートとシャトルシートに試問合格済のサインを貰ってください
- サインを貰ったレポートは,後日確認のために必要になる場合があるので,単位が出るまで保管して下さい
- レポート不備がある場合,修正して再アップロードして下さい
- TAによる体裁不備チェックの結果を通知 (Moodle のメッセージ) します
- TAによるレポートの体裁チェック内容
- 教員から口頭で指摘された部分も修正して下さい
- シャトルシートに試問合格済のサインと授業評価アンケートに回答済みの旨を書いて TAに提出してください.
口頭試問への持ち込みについて:
- 口頭試問には,印刷した紙の期末レポートのみ持ち込むことが可能である.
- 左上をホチキス止めしておくこと.
- 持ち込むレポートは,本人のものであり,かつ,Moodleに提出した版であること.
- 手書きで書き込みをしても良い.
教員は,レポートを見ながら試問をするので,考えたことや分かった事は,できるだけレポートに書いてください.別の資料を持ち込んで,それを見ながら回答するようなことはしないで下さい.
口頭試問の目的は,その人の理解度を計ることです.質問に正当できるかを見る訳ではありません.例えば,メモ書きに答えを書いてきて,それを正しく読み上げたとしても,その人が理解しているかどうかは分かりません.したがって,教員は理解度を計れないので,更に深い質問をすることになると思います.
練習問題,レポート問題
Report1: MIPSアセンブラプログラミング
Report2: アセンブラとC言語の連携
システムプログラミング1/2 講義日程(予定)
- 時間帯は,いずれも 13:25-16:20
回 | 日付 | 内容 | 担当 | 備考 |
---|---|---|---|---|
1 | 2023/10/02 Mon | 環境設定,CPUの動作,SPIMの操作,(文字列出力) | 乃村,後藤 | |
-- | 2023/10/09 Mon | スポーツの日 | ||
2 | 2023/10/16 Mon | 文字列出力,syscallによる入出力 | 乃村 | |
3 | 2023/10/23 Mon | syscallによる入出力 (続き) | 乃村 | |
4 | 2023/10/30 Mon | MIPS手続き呼出し規約 | 乃村 | |
5 | 2023/11/06 Mon | アセンブラによる配列の表現 | 乃村 | |
6 | 2023/11/13 Mon | アセンブラによる配列の表現,進捗の調整 | 乃村 | |
7 | 2023/11/20 Mon | システムプログラミング1 試問 | 乃村,後藤 他 | 5,6限,7,8限で2グループに分けて実施 |
8 | 2023/11/27 Mon | 試問つづき (+ 再試問日) | 乃村 | |
9 | 2023/12/04 Mon | 休講 | -- | |
10 | 2023/12/11 Mon | C言語によるsyscallの利用 | 後藤 | |
11 | 2023/12/18 Mon | 配列とポインタ,autoとstaticの違い | 後藤 | |
-- | 2023/12/25 Mon | 冬休み | -- | |
-- | 2024/01/01 Mon | 冬休み | -- | |
12 | 2024/01/05 Fri | printf の実現+応用課題(1) | 後藤 | 月曜日の授業日 |
-- | 2024/01/08 Mon | 成人の日 | -- | |
13 | 2024/01/15 Mon | printf の実現+応用課題(2) | 後藤 | |
14 | 2024/01/22 Mon | printf の実現+応用課題(3) | 後藤 | |
15 | 2024/01/29 Mon | システムプログラミング2試問 | 後藤,乃村 他 | 5,6限,7,8限で2グループに分けて実施 |
16 | 2024/02/05 Mon | 試問つづき (+ 再試問日) | 後藤 | 定期試験期間 |
連絡先
名前 | 部屋 |
---|---|
乃村能成 准教授 | 206号室 |
後藤佑介 准教授 | 707号室 |
メールアドレス: p3-2023@swlab.cs.okayama-u.ac.jp