🐈

組込みシステムのアーキテクチャ

2024/03/03に公開

新卒一社目の会社では組込みシステムの研究開発をしていたけど、
そこでの「アーキテクチャ」はWebと違い、ボードやSoCチップ内部でのIPのレイアウトを指していた。

たとえばCPUとメモリを離して配置してしまうとバス帯域を無用に消費してしまったり、途中経路でIP間のデータ転送が増え時にレイテンシが伸びたりする。
もしくは、CPUを介さずにデータ転送する処理がいくつあるからDMACを何個用意しないといけないとか、拡張性を高めるためにどんな種類の外部ポートを何個用意しておくかとか。

そういった種々の判断の結果として、その組込みシステム上で作られるアプリケーションに強い制約が掛かってくる。つまり、できないことはできなくなる。
そのせいか、組込み分野でのアーキテクチャ設計というのは「物理的な制約をいかにうまく調整して実用上問題にならないようにするか」という発想が中心になる。

それに比べて、Web系を含むソフトウェアを中心としたシステムのアーキテクチャでは、制約は "あるもの" ではなく "課すもの" という発想。

ソフトウェアはどんな規模でも格納できるし、実行時間も線形ならお金で解決できる。ネットワーク越しになんでもやりとりできるし、あとから変更することもできる。
となると、何もルールがなければその場凌ぎの増築改築だらけで破綻してしまう。だから「高すぎる設計自由度をいかに不便なく押さえ込むか」という視点が大事。

同じ "アーキテクチャによる制約" であっても、組込みシステムとソフトウェア中心システムでは発想が大きく異なる。
こういったところが、ハードウェアをもともと得意としている企業がソフトウェアのシステムをうまく作れない原因ではないか。(と転職から15年ほど経って思った。)

Discussion