2022年度理学部情報科学科3Sセメスターの備忘録

adventar.org

ISer Advent Calendar 2022の4日目の記事です。

今回は2022年度理学部情報科学科3Sセメスターの備忘録を書いていこうと思います。

想定読者は主にISer(特に23er以降)の方々です。

全般

3Sは基本的に座学とそれに対応する実験・演習という構成になっており、座学と実験の一部は3Aにあるプロセッサ・コンパイラ実験(通称CPU実験)に用いる知識の導入にもなっていました。

3Sは実験・演習を始めとした課題の量が多く、負担の少なかった2Aと比較するとかなり大変でした。

以下では3Sの大半の時間を費やした実験・演習を中心に3Sの授業の内容を振り返りたいと思います。

実験・演習

月3, 4 システムプログラミング実験

OSの機能を理解するための実験という位置づけで、前半はOSの機能を利用するというのがテーマでした。

シェルの使い方の基本を学んだのち、UNIX系のシステムコールを扱う練習をして、最終的にはシェル作成を行いました。

後半はOSの機能を実装するというのがテーマで、ベアメタルプログラミングを行いました。

最後は作成したベアメタルプログラム上で自作シェルを動かすという課題が出ていましたが、途中で諦めてしまいました。

回を追うごとに難易度が上がっていったという印象で、後半のベアメタルプログラミングは非常に苦労した覚えがあります。

火3, 4 関数・論理型プログラミング実験

前半はML(OCaml)について学んで、最終的にはOCamlOCamlインタプリタ(OCaml on OCaml)を実装しました。

後半はPrologについて学びました。 最終的にはPrologライクな論理型言語を実装するという課題がありましたが、期末試験も近かったので自分は実装を見送りました。

最後は関数・論理型プログラミング言語を用いてオセロAIの思考ルーチンを実装するという課題が出ました。

実装については、Rustの使用が許可されていたので、良い勉強の機会だと思いRustでプログラムを書きました。

22erではRustが流行っており、およそ1/3(以上?)がRustで実装していた覚えがあります。

これに関しては注意すべき点があって、今回の課題となっているオセロAIは全体としてプロトコル部分と思考ルーチンの部分に分かれており、OCamlで実装する場合はプロトコル部分は用意されているので自分で実装する必要はなく、思考ルーチンの部分のみを実装すれば良いのですが、Rustではそれが用意されていないので自分で一から書く必要があります。

しかし、学科同期プロトコル部分をすべて書いてくれたので、担当の先生に許可を取ったうえでこれを利用してプログラムを書く人が多かったです。

木3, 4 ハードウエア実験

前半はブレッドボードで遊びました。

後半はVivado/Verilogで遊びました。

Vivado/Verilogの扱いにかなり苦労したので、3AのCPU実験ではハードウェア係(コア・FPUメモリ係)を回避して、コンパイラ(・シミュレータ)係を志望しました(結果コンパイラ係になりました)。

金3, 4 情報科学演習1

後述する情報論理/離散数学に対応する演習を交互に行いました。

基本的には毎回演習問題を解いてきて、解いてきた問題に関して自分で発表を行ったり、他の受講生の発表を聴いたりすることを通して理解を深めていくといった形式でした。

オンライン授業だったのですが、離散数学の演習ではカメラをONにして発表することが推奨されていました。

しかし、カメラをONにして発表したのは初回で2番目に発表した自分だけだったので、謎にやる気がある人みたいになってしまって草

座学

月2 オペレーティングシステム

OSの機能について学びました。

前述のシステムプログラミング実験に一部対応していました。

火2 離散数学

離散数学について学びました。

水2 情報論理

計算可能性の理論と記号論理学について学びました。

木2 言語処理系論

プログラミング言語処理系(インタプリタコンパイラ)について学びました。

前述の関数・論理型プログラミング実験に一部対応していました。

3AのCPU実験ではコンパイラ係を担当しており、それがこの科目の理解にかなり繋がっている気がします。

金2 計算機構成論

コンピュータアーキテクチャについて学びました。

前述のハードウエア実験に一部対応していました。

この科目についても、3AのCPU実験を通して理解が深まっている気がします。

感想

3Sはかなり大変でしたが、学科同期に助けてもらって何とか乗り切ることができました(本当にありがとうございます)。

3AのメインはCPU実験で、自分は前述の通りコンパイラ係を担当しており、シミュレータ上で完動したこともあって最適化を進めている最中です。

これからやるべき最適化のことを考えると3Sよりも3Aの方が大変になりそうだという予感がしますが、体調に気を付けて頑張っていこうと思います。