「システムプログラミング」は、定義が曖昧で学習しようにもどのあたりを学習するべきか悩むことがあると思います。
今回は、システムプログミングとは?というところから深堀し、領域を整理してみようと思います。
モグモグさん
僕の独自の解釈であるため正解ではありません。
参考程度としてください!
- システムプログラミングとは何かがわかる
- システムプログラミングをしたい時に何を学習したらいいかがわかる(参考程度)
システムプログラミングとは?
システムソフトウェアのプログラミングのこと
コンピューターを動かすためのソフトウェアのこと。
例) OSやファームウェア、コンパイラ(含むかは微妙ですが)
対義は、アプリケーションソフトウェアです。
例) スマホにインストールするアプリやブラウザで閲覧するWEBサイトなど無限にあります。
つまりシステムプログラミングは…
幅広く定義すると、アプリケーションのレイヤーより下の、コンピューターを制御するためのソフトウェア全般のプログラミングです。
狭く定義すると、システムソフトウェアのメインはOSなので、OSのプログラミングです。
広義のシステムプログラミングの領域
- ファームウェア
- OS
- 言語プロセッサ
- ミドルウェア
- デバイスドライバ
モグモグさん
それぞれもう少し深堀していきます。
システムプログラミングの領域
上で説明したように下記が広義の領域です。
- ファームウェア
- OS
- 言語プロセッサ
- ミドルウェア
- デバイスドライバ
ファームウェア
ハードウェアに内臓されているソフトウェアのこと。
一般的によく使われるファームウェアは、BIOS(バイオス)です。
「Basic Input/Output System」の略で、起動時のOS読み込みや基本的な入出力の制御を行います。
モグモグさん
組み込み系のエンジニアだとこの辺りを実装することもあります。
OS
コンピューターの基盤となるソフトウェアのこと
Operating System(オペレーションシステム)の略で、「基本ソフトウェア」とも呼ばれています。
主な役割としては、下記のようなものがあります。
- API (アプリケーションからシステムコールというOSの機能を呼び出す仕組みを提供)
- プロセス管理
- ジョブ管理
- メモリ管理
- ファイル管理
- ネットワーク
- ハードウェア制御
モグモグさん
システムプログラミングのメインとなる箇所なので、学習する場合はOSを中心に行うといいと思います!
言語プロセッサ
ソースコードを機械語に変換するソフトウェアのこと
C言語などのプログラミング言語は、人間が解釈しやすいように作られており、
コンピュータ(CPU)がプログラムを実行するためには、それを機械語といったものに変換する必要があります。
モグモグさん
学習する際のキーワードをまとめるので参考にしてください。
- コンパイラ
- インタプリタ
- ジェネレータ
- コンパイラの構造や処理手順(字句解析/構文解析/意味解析/中間コード生成/最適化など)
ミドルウェア
OSとアプリケーションの橋渡しを行うソフトウェアのこと
様々なハードウェアやOSがある中でその違いを吸収し基本的な機能を使えるようにする役割があります。
種類をいくつか羅列します。
- WEBサーバー
- アプリケーションサーバー
- データベースサーバー
モグモグさん
ミドルウェアは、システムプログラミングの領域に入るか微妙なところですが追加しました。
デバイスドライバ
コンピューターに接続されるデバイスを制御・操作するソフトウェアのこと
デバイスとは、モニターやプリンターなどのハードウェアを指します。
いろいろなハードウェアにOSがそれぞれ対応するのは不可能なので、OSとデバイスの間でデバイスドライバが制御しています。
モグモグさん
学習の際は、デバイスドライバを自作してみるというのも非常に勉強になりますし
仕組みを理解するのに役立ちます。
システムプログラミングのまとめ
システムプログラミングとはを説明し、広義と狭義の面で領域を整理してみました。
要点をまとめます。
- システムプログラミングとは、システムソフトウェアのプログラミングのこと。
- 広義では、ファームウェア/OS/言語プロセッサ/ミドルウェア/デバイスドライバがシステムプログラミングの領域となる。
- 狭義では、OSがシステムプログラミングの領域となる。
モグモグさん
学習の際の参考にしてみてください!
分かりやすかったです!
参考にさせていただきます!