OS(Operating System)とは?~コマンドとCで「見て」理解する~【GitHub対応】

OS・開発環境
OSくん
OSくん

📝 2026年10月3日に全面リライトしました
2023年8月に公開した記事を、「つくって学ぶ」の趣旨に合わせて書き直した。コマンドとCプログラムで、OSの役割を実際に体験できる内容になっている。

はじめに

OSは、コンピューターを操作するためのソフトウェアである。ハードウェアとソフトウェアの間に入り、橋渡しや調整役を担っている。

OSの機能(カーネル、プロセス管理、記憶管理など)は、基本情報技術者試験のシラバスにも載っている、基本的なテーマである。

ただ、文章で読むだけではイメージしにくいだろう。
そこで、今回は、GitHub Codespacesを利用し、簡単なC言語のプログラムを動かしながら、OSの役割を確認していこう。
なお、コードは、筆者のGitHubリポジトリ pc-labo-hands-on の os/ フォルダにまとめてある。

OSの主な役割

  • ファイル管理:データを保存する場所を管理する
  • メモリ管理:プログラム同士のメモリ領域が重ならないよう割り当てる
  • プロセス管理:動いているプログラムを効率よく実行させる

体験1:OSの種類とバージョンを確認する

cat /etc/os-release
uname -r

1行目でOSの名前とバージョン、2行目でカーネルのバージョンが表示される。OSにはWindows、Linuxなどがあり、今回使っているUbuntuは、Linuxカーネルを使ったLinuxディストリビューションである。

VERSION="24.04.5 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
(略)
6.8.0-1064-azure

体験2:プロセスを見る

プロセスとは、OSからメモリなどの資源を割り当てられて、実行中になっているプログラムのことである。

ps aux | head
echo $$

ps aux で、システム上のプロセスの一覧を確認できる。
$$ は、今のシェル自身のプロセスID(PID)である。

体験3:C言語で自分のプロセスIDを表示するプログラムをつくろう

下記のコードをpid.c として保存する。

#include <stdio.h>
#include <unistd.h>

int main(void) {
    printf("私のPIDは %d です\n", getpid());
    return 0;
}

gccでコンパイルして実行しよう。

gcc pid.c -o pid
./pid
./pid

同じプログラムでも、実行するたびにPIDが変わる。同じプログラムを複数回起動すると、別々のプロセスとして、OSが管理していることがわかる。

体験4:メモリの使われ方を見る

free -h

OSが管理しているメモリの合計、使用中、空きの量が確認できる。

OSを支える主な仕組み

OSを理解するうえで重要なものとして、カーネル、デバイスドライバ、ライブラリなどがある。

  • カーネル:OSの中心。OSの起動後、プログラムの実行やメモリ管理など、OSの基本的な処理を担う。
  • デバイスドライバ:プリンターやディスクなどの機器を操作するプログラム
  • ライブラリ:プログラムの部品。共通部分をまとめておくことで、本体を簡単にできる

ライブラリは、実際に見ることもできる。

ldd /bin/ls

ls コマンドが、どのライブラリを使って動いているかが、一覧で表示される。

まとめ

  • OSは、ハードウェアとソフトウェアの調整役である
  • cat /etc/os-release でOSの種類、ps でプロセス、free でメモリを確認できた
  • Cの getpid() で、実行のたびに別のプロセスとして管理されることを確認できた
  • OSは、カーネル、デバイスドライバ、ライブラリなどで構成されている

更新履歴

  • 2026年10月3日:全面リライト(試す内容に刷新)
  • 2023年8月31日:初版公開

コメント

タイトルとURLをコピーしました