OSがしてくれることについて

この記事は天野司様が書いた「Windowsはなぜ動くのか」という書籍をかなり参考にしています(表現方法は自分なりに変えてますが)。めちゃ名著なので、ぜひ購入してください!

OSとは?

「コンピューター全体を制御してユーザーが使いやすくするためのシステム」(Copilotより)
「パソコンのすべての動きを総合的に管理する、制御ソフト」「アプリケーション・ソフトの動作を補助するプログラム」(Windowsはなぜ動くのか 「オペレーティング・システムとはいったいなんですか?」より)
要はハードウェアやソフトウェアの様々な制御を行っている、コンピューターを使用するのに欠かせないソフトウェア(プログラム)ということですね。

OSはどう制御している?(アプリケーションとの関連編)

アプリケーション・ソフトウェア又はOSの内部から呼び出し可能になっている機能をシステムコールといい、それを呼び出すことでOSの機能を利用できるようになってます。

例えば・・・
powershellで「exit」と打つとpowershellが終了しますが、これは「exit」と打たれた時にpowershellシステムコールの機能を呼び出してOSに終了させるようお願いしている。

システムコールの機能を使うことでプログラミングが容易になりますね。
システムコールは他にも入出力などのハードウェアの制御や、ソフトウェアの起動など様々な機能を提供します。

ライブラリについて

C言語の「printf」などを標準ライブラリといいますが、(powershellでいうと.NET Frameworkがある)これはシステムコールとは少し違い、プログラムで頻繫に使われる機能を、プログラミングやデバッグを容易にするためにそのまま呼び出せるようにした関数。
プログラムのリンク時に初期設定や終了処理と一緒に結合される。(初期設定や終了処理もライブラリの一種ですが)

OSはどう制御している?(ハードウェアとの関連編)

PCを使用するにあたって、異なる種類のハードウェアでも同一のプログラムが問題なく動作しますが、これを「ハードウェアの違いが吸収される」と表現する。
→これをどう実現するか?

(前提知識)ハードウェアが動く仕組み

プログラムはコンパイルされてCPUが理解できる機械語で実行されるが、CPUがハードウェアを操作する時には特定の命令を実行したり、特定のハードウェア専用に割り当てられたメモリのアドレスにデータを書き込むことで実現される。
この時に、ハードウェアが違えばメモリ番地や書き込むべきデータが異なるという問題がある。
→この際にシステムコールを使う!
例えば、「音を鳴らす」というシステムコールの機能を呼び出せば、違うハードウェアでも同一のプログラムで動く。

ハードウェアの違いが吸収できない場合

先程の説明でシステムコールを利用すればハードウェアの違いを吸収できると記載しましたが、これを利用せずにハードウェアに直接アクセスするプログラムを書いてしまうと、ハードウェアの違いを吸収できない。これを「行儀の悪いプログラム」と呼ぶこともある。
OSはこのようなプログラムが作られることがないよう、多くのハードウェアに対してアクセスできるシステムコールを用意する必要がある。

また、システムコールがないと異なるプログラム間でハードウェアの管理方法を統一しなければならないため複雑化するが、システムコールを使用してOSで一元管理することで簡易さが増し、データの互換性が高められる。

OS上でのプログラムの動作

OSはプログラムの実行制御の機能も備えており、「どのようなプログラムを」「いつ」「どのような時に使うのか」決めることが出来る。
アプリケーションのプログラムは実行していない間HDDなどの不揮発性の記憶装置に置かれているが、実行するにはメモリに呼び出す必要がある。
こうした「記憶装置からの読み出し」「メモリへの読み込み」「実行」「終了後の処理」などはOSが行っている。

また、OSによっては複数のプログラムを一度に管理し、それらを切り替えながら動作できる。この機能を持つOSのことを「マルチタスクOS」と呼ぶ。

参考文献

Windowsはなぜ動くのか