
📝 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日:初版公開




コメント