IT社員3人組によるリレーブログ

某IT企業に勤める同期3人が、日常で思ったことを記録していきます (twitter: @go_mount_blog)

今更聞けない!OSっなに何?? CPU/メモリ/ディスクってなに??

平成最後のGWいかがお過ごしでしょうか。

ITコンサルタントのShoheiです。ご無沙汰しております。

最近OSについて少し深く勉強をしたので、今日はOSについて、初心者向けのざっくりした説明を行なっていきましょう。

OSって何?

OSについて聞かれると皆さんはなんと答えますか?

以下のように、なんとなくOSという言葉が何を指すかはイメージ湧くのではないでしょうか。

f:id:go-mount:20190429161207p:plain

でも、OSが何かを説明してくださいと言われると、正確に説明できるか怪しいのではないでしょうか。

今日はそれについて簡単に説明をしていきたいと思います。

OSはソフトウェアだよ

まず最初にざっくりとした説明をするなら、OSはソフトウェアです。

よくMacbook Airなどを持ってる人を見て「Mac持ってるんだねぇ」と言ったりしますが、正確言うならあなたが見ているそのPCそのものはMacintoshと呼ばれるものです。そしてその中で動いているソフトウェアがMac OSです。(Macintoshを略してMacと言ってるのかもですが)

同様に、WindowsはPCの種類ではなくOS名です。これも同様にPCの中で動いているソフトウェア名を指します。

よく「Windows PC」という言葉を使う人がいますが、正確には「Windowsというソフトウェアが(たまたま)中で動いているPC」であり、PC自体を指してはいけません。現に同じPCでも中でWindowsが動いているとも限らず、Linuxなどが動いている可能性もあります。

まずはコンピュータとプログラム(アプリケーション)について理解しよう

OSは何のためのソフトなの?一言で言うと、OSとは、コンピュータの動きを統合的に管理するための管理ソフトです。

視点を変えると、個々のアプリケーションがわざわざ個々のハードウェアのことを考えなくてよくするための、アプリケーション補助プログラムです。

少しずつ噛み砕いてみてみましょう。まずはコンピュータとは何かみてみます。

コンピュータを構成する主要キャラクターたち

コンピュータが何かを理解するために、コンピュータの基本構成要素である、CPU/Memory/Diskについて簡単に説明しましょう。

ここで理解できなくても、この後右端のイメージ欄を使って個々の役割を説明していくのでご安心ください。

f:id:go-mount:20190429170314p:plain

イメージを沸かせよう

CPU/Memory/Diskのイメージをもう少し具体的に沸かせるために、右端のイメージ欄を使ってそれぞれについて説明してみましょう。

例えば以下のような状況になった時、あなたならどうしますか?

f:id:go-mount:20190430121939p:plain


正解は個々によるかもしれないですが、あえてCPU/Memory/Diskを意識しつつ回答すると、以下の通りです。立って計算すると著しくパフォーマンスが悪いので、一度机の上に問題を展開して、計算するのがベターでしょう。

f:id:go-mount:20190429172621p:plain

実際のマシンに置き換えてみよう

Diskへのアクセスは一般的に低速です。物によりますが、Memoryアクセスと比べて1/10-1/100になります。

「じゃぁ全てMemoryに保存すればいいじゃん」と思うかもしれませんが、残念ながらMemory上に保存できるデータは容量が小さく(容量あたりの値段も高い)、かつDiskと違って再起動などのタイミングでデータが消えてしまうというリスクもあるため、一般的にデータやプログラムはDiskに保存をします。

この状況を鑑みると、Diskに保存されているデータやプログラムは、以下のような流れで演算がなされます。

  1. CPUがDiskにアクセスし
  2. CPUがそのデータをMemoryに展開をし
  3. CPUがMemory上で計算をし
  4. Diskに計算結果を書き込む

プログラムとハードウェア

上記の例ではプログラム/アプリケーションという言葉を出しませんでしたが、上に記載のような演算を行わせるには、それらが必要となります。

ちょっと細かい話ですが、それらの言葉について一旦明確にしておきましょう。

プログラム

コンピュータのCPUに対して、ある決まった動作を行わせるための一連の命令およびデータの複合体のことを指していて、コンピュータは、いかなる場合もプログラムによって動きます。

「オペレーティング・システム」も、こうしたプログラムの一種です(略)

重要なのは、「コンピュータは、いかなる場合もプログラムによって動きます」の記載です。コンピュータの実態は、CPU/Memory/Diskなどのハードウェアをさしますから、これらを動かすには必ずプログラムというものが必要となります。

また、プログラムはどこに保存されているかというと、基本的にはDiskの中に保存されています。

f:id:go-mount:20190429175316p:plain

プログラムを起動するのは誰?

さて、ここで疑問が湧きませんか? プログラムはDiskに入っていると言いました。でも、コンピュータはプログラムがないと動かないと言いました。これってとりたまご問題的なもので、この原則だと誰もコンピュータを使えませんよね。

f:id:go-mount:20190430123043p:plain


そこで登場するのが、OS君です。

最初にOSプログラムが例外的に立ち上がり、その後OSというプログラムを介して各プログラムを立ち上げていくようになります。

まぁ言われてみれば日常で実感のある話で、例えばエクセルを起動したいとき、まずはPCの電源を入れてOSを立ち上げますよね。その上でエクセルなどをクリックして開いていくはず。

当たり前の話ですが、上記のような原則を踏まえて理解しておくことは非常に重要です。

f:id:go-mount:20190430124340p:plain

なお、OSがどうやって立ち上げるかはここで詳しく触れませんが、興味があればBIOS,ブートローダあたりを調べてみましょう。以前紹介したLPICの資格でもこのあたりの知識は問われます。

OSの役割はもちろんこれだけではないので、もう少しだけ続けていきます。

その前に、よくプログラムと混同しがちなアプリケーションという言葉について明確にだけしておきましょう。

アプリケーション

アプリケーションとは、一つの目的を果たすための一連プログラム全体を指す言葉であり、必ずしもそれは、一つのプログラムとして独立しているとは限りません

アプリケーションはユーザ目線の言葉なので、エクセルとか、Wordとか、そういうイメージで捉えておきましょう。

ユーザからは一つのアプリケーションでも、中で複数プログラムが動いている可能性もある、ということです。


ハードウェアの直接操作は非効率かつ危険

先ほどの絵ではプログラムが直接CPU/Memory/Diskへアクセスして制御させていました。ただしこれは、実態とは異なります。これだと非常に非効率かつ危険の状態を招いてしまいます。

理由の一つとして、各プログラムがハードウェアごとの差分を意識する必要性が出てくることが挙げられます。

CPUへの命令は機械語と呼ばれるCPUが理解できる言語で出すのですが、CPUのメーカーやバージョンや型番が変わると、この言葉や指示形式が変わってしまいます。プログラムやアプリケーションを作る開発者にとってみると、世の中に無限にハードウェアが存在する中で、全てのハードウェアを想定したプログラムを作成するのは、不可能に近いです。

f:id:go-mount:20190430124916p:plain

また、別の理由として、プログラム同士が競合してしまうことも挙げられます。

以下のように、複数のプログラムが同時に動作している場合(マルチタスク)、もちろん個別で開発されたプログラムAとBはお互いを意識するように作られていないですから、個々が好き勝手ハードウェアに指示を出すと、以下のような競合を招いてしまうことがあります。

f:id:go-mount:20190430125242p:plain

これでは、お互いのプログラムが正常に動作しないでしょう。また、OSが使っている領域を書き換えてしまうことがあると、他のプログラムの起動等の制御もできなくなってしまいます。

 

頼りはやっぱりOS

さて、もう想像つくかもしれませんが、これらを解決するのはやっぱりOSです。

各アプリケーションは、直接的にコンピュータにアクセスするのではなく、そのアクセスをOSに依頼します。これをシステムコールと呼びます。

システムコールを受けたOSは、各アプリケーションに適切なメモリ領域を割り当て、競合等不都合が起きないようにしっかり管理を行います。

また、上述のハードウェアの差分についても、OSが全て受け止めます。OSが代表して各ハードウェアを意識してくれるので、各プログラムの開発者は、ただ「ハードウェアにアクセスしてほしい」という旨のシステムコールを、OSに合わせた形で打ち込むだけでよくなります。

f:id:go-mount:20190430125835p:plain


OSの定義をもう一度

さてさて、まとめに入っていきましょう。

冒頭で述べたOSの説明を再掲載すると、以下の通りです。

最初に記載した時よりも、イメージが湧くようになったのではないでしょうか。

OSは何のためのソフトなの?一言で言うと、OSとは、コンピュータの動きを統合的に管理するための管理ソフトです。

視点を変えると、個々のアプリケーションがわざわざ個々のハードウェアのことを考えなくてよくするための、アプリケーション補助プログラムです。

ただもちろんOSの役割はこれだけではありません。途中でマルチタスクという言葉をさらっと出しましたが、これの実現にもOSは相当頑張ってます。

もっと詳しく、深く知りたい人は、以下の本がオススメなので、是非読んでみてください。Windowsに関して書いてありますが、OSの基本はどれも変わらないので、Linuxエンジニアであれなんであれ、OSに関する深い基礎知識を身につけるにはオススメです。

Windowsはなぜ動くのか

Windowsはなぜ動くのか

 

 

 まとめ

OSについて説明しました。また合わせてハードウェアの動きについても解説しました。