OS(オペレーティングシステム)とは?
OS(オペレーティングシステム)とは、コンピュータのハードウェアを管理し、ほかのすべてのプログラムを動かすソフトウェアです。プロセッサ、メモリ、ストレージをプログラム間で分け合い、ファイル、ネットワーク、入出力の機能を提供します。Windows、macOS、Linux、Android、iOSはOSです。
更新日: 2026年9月24日
テキストエディタを開いた状態でキーを押してみてください。キーボードは電気信号を送り、OSの中のドライバがそれを読み取ります。OSはどのウィンドウが前面にあるかを判断してそのプログラムにキーを届け、エディタが文字を描きます。エディタ自身はキーボードと一切やり取りしていません。ファイルの保存、音の再生、Webページの読み込みも同じしくみです。プログラムが頼み、OSがハードウェアを使って作業をします。
OSの役割
OSにはいくつかの仕事があり、コンピュータ上のすべてのプログラムがそのすべてに依存しています。
- プログラムの実行(プロセス管理)。 CPUコアが8つのノートPCでも、数百のプログラムやバックグラウンドサービスが動いていることがあります。OSのスケジューラはそれぞれに短い時間ずつコアを割り当て、1秒間に何度も切り替えるので、すべてが同時に動いているように見えます。
- メモリの管理。 各プログラムには専用のアドレス空間が与えられます。プログラムが自分のものではないメモリを読もうとすると、OSがそれを止めます。Cではこれが有名なセグメンテーション違反です。
- ファイルの保存。 ディスクは番号付きのバイトのブロックを保存するだけですが、OSはそれをフォルダと名前付きのファイルに変えます。抽象化の典型的な例です。この形式をファイルシステムと呼び、WindowsではNTFS、macOSではAPFS、多くのLinuxではext4が使われます。
- ハードウェアとのやり取り。 ドライバがOSと各デバイス(グラフィックカード、Wi-Fiチップ、プリンタ、Webカメラ)の間を仲介します。
- ネットワーク。 OSがTCP/IPを実装しているので、プログラムはネットワークカードについて何も知らなくてもサーバーに接続できます。
- セキュリティとユーザー。 アカウント、パスワード、ファイルのアクセス権によって、誰が何を読み書きできるかが決まります。
- ユーザーインターフェース。 デスクトップ、ウィンドウ、タスクバー、あるいはBashやPowerShellのようなテキストのシェルです。
カーネルとシステムコール
OSの中核はカーネルです。カーネルはハードウェアを完全に制御できる状態で動き、普通のプログラムは制限されたモードで動くので、デバイスに直接触れることはできません。何かが必要になると、プログラムはシステムコールを行います。「このファイルを開いて」「このバイト列を送って」「新しいプロセスを起動して」といった、カーネルへの依頼です。
多くの場合、使っている言語がシステムコールを包み込んでいるので、目には見えません。Pythonの open() や print() も、最後はカーネルの呼び出しになります。os モジュールを使うと、ほぼ直接システムコールを行えます。
プロセスIDとコア数はマシンによって変わりますが、最後の行は必ず File size: 23 bytes と表示されます。os.open はファイルディスクリプタを返します。これはカーネルが開いているファイルを管理するための小さな番号で、os.write はそこに23バイトを送ります。Cでも同じ依頼はほとんど同じ形になります。これらの関数はシステムコールを薄く包んだものだからです。
int fd = open("note.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
write(fd, "saved by a system call\n", 23);
close(fd);
Linuxでは、strace python3 script.py でプログラムが行うすべてのシステムコールを見ることができます。
OSの具体例と種類
| OS | 動く場所 | カーネル |
|---|---|---|
| Windows 11 | 大半のデスクトップPCとノートPC | Windows NT |
| macOS | AppleのMac | XNU (Darwin) |
| Linux(Ubuntu、Fedora、Debianなど) | 大半のサーバーとクラウドのマシン、一部のデスクトップ | Linux |
| Android | 世界の大半のスマートフォン | Linux |
| iOS | iPhone | XNU (Darwin) |
| ChromeOS | Chromebook | Linux |
こうした汎用のシステムのほかに、FreeRTOSやZephyrのようなリアルタイムOSがあります。家電、センサー、産業機械のマイコンで動き、決まった時間内の応答を保証します。多くの小さな機器では、1つの目的のために作られた組み込みシステムが動いています。
表からわかるように、1つのカーネルがまったく異なる製品を支えることがあります。AndroidとChromeOSはどちらもLinuxカーネルを使い、その上に独自のソフトウェアを載せています。iOSはmacOSとカーネルを共有しています。
プログラミングでOSが重要な理由
コンパイルされたプログラムは、1つのOS向けに作られます。Windowsの .exe は、同じコンピュータ上であってもLinuxではそのままでは動きません。ファイル形式もシステムコールも違うからです。ダウンロードページにOSごとのバージョンがあるのも、JVM、Node.js、CPythonのような実行環境が存在するのもこのためです。実行環境はOSごとに1回ずつビルドされるので、あなたのコードはOSごとに作り直す必要がありません。実行環境を参照してください。
それでも小さな違いは表に出てきます。次を実行して、別のOSを使っている友人の結果と比べてみてください。
LinuxとmacOSでは次のように表示されます。
Path separator: '/'
Line ending: '\n'
projects/notes/todo.txt
Windowsでは区切り文字が '\\'(バックスラッシュ1つ)、改行が '\r\n' になり、パスは projects\notes\todo.txt になります。/ を手で書かずに os.path.join(または pathlib)を使うことで、スクリプトは3つのOSすべてで動き続けます。
よくある誤解
- 「LinuxはOSだ」 厳密には、Linuxはカーネルです。UbuntuのようなLinuxディストリビューションが、シェル、システムツール、パッケージマネージャ、そして多くの場合デスクトップを加えて、完全なOSにしています。日常会話ではどちらもLinuxと呼ばれます。
- 「BIOSはOSの一部だ」 BIOSやUEFIのファームウェアはマザーボード上にあります。ハードウェアをチェックしてからディスクのOSを読み込み、それで主な仕事は終わりです。
- 「デスクトップがOSだ」 デスクトップはカーネルの上で動くプログラムの1つです。サーバーは普通デスクトップなしで動き、テキストのシェルだけで操作されます。
- 「アプリがハードウェアとやり取りしている」 普通のプログラムにはそれが許されていません。ファイルの読み込みも、ネットワークのパケットも、画面の1ピクセルも、すべてOSを通ります。アプリがクラッシュしても、普通はコンピュータ全体が道連れにならないのはこのためです。
次に読むもの
OSはいちばん下の層で、その上、あなたのコードとの間にあるのが実行環境です。メモリ保護がセグメンテーション違反を生み、バイトのページではOSがファイルとメモリに使う単位を説明しています。OSをテキストのシェルから操作するなら、ターミナルコースを試してみてください。
よくある質問
OSがなくてもコンピュータは動きますか?
代表的なOSを5つ挙げると何ですか?
OSにはどんな種類がありますか?
自分のパソコンのOSを確認するにはどうすればいいですか?
winver を実行します。Macではアップルメニューから「このMacについて」を選びます。Linuxではターミナルで cat /etc/os-release を実行し、uname -r でカーネルのバージョンがわかります。