2022年の振り返り

はやいもので2022年も終わりの間際まできている。

今日は今年の振り返りと来年に向けての目標でも掲げたい

思い出せる範囲で学んだことやその時悩んでいたことをつらつらと垂れ流していきたいと思う。

 

2022 1月

 学校の教科書だった「コンピュータ解体新書」という古い本を読み進める。簡単なコンピュータの設計を示している章があり、ここからしばらくはプロセッサ設計やハードウェアにはまる。

 

3月

 図書館で論理回路本とコンピュータアーキテクチャの本を借りて、マイクラでコンピュータづくりをしていた。

 

4月

 コンピュータの理論と実装を買うもHDLに慣れずに挫折。まだ再読していない。

論理回路の授業でいまいち理解していなかった2の補数表現を完全に理解した。

 

5月

 cコンパイラのオンラインブック(以下にリンク)でcコンパイラを作り始める。

c言語のポインタはここでやっと理解できた(つもり?)。

 

6月

 ただし、動的メモリ獲得がわかっていなくて適当にmallocしてはぬるぽ参照&セグフォの嵐。

 

7月

 cコンパイラと期末テスト。

 

8月

 夏休み。バイトしつつcコンパイラをだらだら続ける。

低レイヤばっかりやっていたのでjsのうっすい本を買ってホームページ作成にチャレンジする。

 

9月

 12ステップで作る組み込みos自作入門と秋月のボードを買って組み込みosづくりを始める。

 登大遊さんを知る。ネットワークの勉強のやる気が起きてマスタリングTCP/IPを購入。

 

10月

 文化祭に途中のcコンパイラを展示する。だれも来なかった。

組み込みos自作本にはまる。初めて見るc言語の書き方(ポインタ変数にメモリアドレスの即値を入れるなど)に興奮する。コンピュータ設計、cコンパイラづくりと段階を踏んでいたので、ハードを制御する部分(第1部)はスムーズに読むことができた。

 

11月

 中間テスト。

 

12月

 再びマイクラでコンピュータづくりにはまる。プロセッサを支える技術を買う。

詳説Ⅽポインタがかなり良書でヒープについて理解できた。ポインタは今度こそ理解できた気がするのでバグりまくって辞めてしまったcコンパイラをもう一度挑戦したい。

「ネットワークはなぜ動くのか」も買った。

 

この一年でコンピュータ設計、cコンパイラc言語、組み込みos等、たくさんの低レイヤの事について学ぶことができた。

2021年の夏までは特に興味を惹かれることもなくだらだらと過ごしていた。

思えば1月の時点で「コンピュータ解体新書」に興味を持っていなければここまでやってこれなかったと思う。これからは興味の向くままに汎用osやネットワークプログラミングなんかをやっていきたいと思う。

ハードとソフトをつなぐ

12ステップで作る組み込みos自作入門という本を半分まで読み終えた。

マイコン周りの知識、c言語マイコンを制御する方法などがなんとなく理解出来た。

 

書籍の中で

ポインタ変数にマイコンのメモリアドレスの即値を入れるというコードを初めて目撃して感動した。

ハードウェアをどうやってソフトウェアのc言語で制御するのか疑問だったが、ポインタ変数にメモリのアドレスを直接指させるのは想像できなかった。知ってしまえば当たり前のことのようにも思えた...

 

コンパイラ最適化

cコンパイラを作成していたが、途中でコンパイラ最適化の処理を組み込むことにした。とりあえず、中間木(ノード?)に対して最適化を行うということだったので、定数畳み込みを実装してみた。意外とうまくいってうれしい。

c言語セグフォ

c言語でプログラミングをしているときにバグのほとんどがセグフォ。構造体のアクセスエラーなどが原因のようで、callocでメモリ領域を確保しまくっている。これでたいていはおとなしくなるが、メモリリークとかになるのだろうか。

ネットワークの構成要素

マスタリングTCP/IPの備忘録。

ネットワークを実際に構成する機器やケーブルには様々なものがあるので以下にまとめて整理したいと思う。

リピーター

 ケーブル上を流れてくる電気や光などの信号の整形を行う装置。同軸ケーブルから光ケーブルなどのように通信媒体を変換できるものもある。次から出てくるブリッジやルーターなどのような機能がないただ信号の延長を行う装置。ネットワークでハブといえばリピーターハブのことを指し、複数の線を収容することができる。

 

ブリッジ/レイヤ2スイッチ

 ブリッジは壊れたフレームを次に転送しない機能を備えている。FCSと呼ばれるフィールドを確認することで正しいデータかを判断する。またコンピュータのキャッシュメモリのように、一度そのブリッジを通過したフレームのMACアドレスを一定時間保存して、どのセグメントにその機器(MACアドレス)が位置しているのかを把握する。(ラーニングブリッジ)。

 

スイッチングハブ

 ブリッジの機能を備えたハブ

 

ルーター/レイヤ3スイッチ

 IPアドレスで処理を行う。IPアドレスの話が出てきたら具体的な実装はルーターで行っているということなのだろうか?ルーターは異なるデータリンクを相互に接続することが可能。

 

アプリケーション層などから降りてきたデータは、ネットワーク層(OS内部)でIPアドレスを含むIPヘッダをつけられ、PCから信号として出力され、ネットワークインターフェース(ブリッジ、ルーター?)のデバイスドライバ(ソフトウェア)によってMACアドレスを含むイーサネットヘッダを付けられる。