OS入門01
こんにちは!かっつーです。
最近大学でOSについての授業を取っているのですが、OSの授業を軽い気持ちで取ってしまいました。
「OSなんだか面白そうだなああ。学部関係ないけど受けてみよう!」という安易な気持ちで取ってしまった僕は途中で投げ出しかけています。
おそらくこれは情報学科の生徒でもOSについての理解が深い人は多くはないのではないでしょうか?
プラグラミングはできるけど、OSの理解は深くないという人は少なからずいらっしゃるかと思います。
しかしOSについて理解してより深くプログラミングができるようになりたい!コンピューターの真髄を理解したい!という気持ちがある人はたくさんいらっしゃると思います。
今回のシリーズでは僕がOSについて理解したことをひたすらアウトプットしていき、寝っ転がりながらでも読めばわかるように解説していきたいと思います。
ここで紹介することはすべてOSの基本的な土台でありコンセプトであることは先に述べておきます。
この記事のターゲットは下記の人になります。
- OSの概要について簡単に理解したい人
- ソフトウェア開発者
- パソコンの背後にある原理を理解したい方
などです。
そもそもコンピューターに対してこんな疑問持ちませんか?
- どうして入力した文字が画面に出力されるんだろ?
- どうしてアプリが同時に二つも立ち上げられるんだろ?
- ハードウェアは入力に対してどう対応しているだろ?
- 音楽聞きながらメールしたり、ウェブを閲覧できるのはどうしてなんだろ?
上記のように思ってみればコンピューターの内部で起こっていることを理解しなくても我々は多くのアプリケーションやサービスを享受できます。
オペレーティングシステムの行っていることはずばりこういうことです。
「ハードウェアの集合体であるコンピューターを抽象化し、人間にとって使いやすくするコンピューターに見せかけること」
そもそもコンピューターは細かい小さなチップやメモリ、電池などのハードデバイスの集合体です。そんな物理的で人間に馴染みのないものが、人間にとって使いやすい形で提供されていることに驚きませんか?
ハードウェアの集合体であるコンピューターを抽象化してあげて、人間にとって馴染みあり、理解ができ、使えるように見せかえるシステムこそオペレーティングシステムなんです。
オペレーティングシステムの役割は大きく分けて3つあります。
- ハードウェア内部で起こっていることを隠蔽すること
- ハードウェアの持つ物理的な制約を緩和すること
- ハードウェアの共有を可能にすること
1. ハードウェア内部で起こっていることを隠蔽すること
1は、もともとPCはコードで操作していたが、それを今は直感的に操作することができますよね。さらに、キーボードで入力したものを読み込んで、描画するためにも本来は複雑な操作と手順が必要ですが、それすら必要ないのは、OSがその操作を隠蔽しているからです。
2. ハードウェアの持つ物理的な制約を緩和すること
2は、ハードウェアにはそもそも物理的な制約があります。
AppleのMacbookなどを購入しようとすると、メモリやコアのことを調べると思いますが、それらの容量は必ず有限です。例えばメモリ16GBのMacbookがメモリ64GBになることは決してありません。(あたりまえ体操
しかし、こうした物理的な制約を緩和することができるのがOSの役割の一つです。OSが提供する仮想記憶という機能を使うと、メモリ容量よりも多く使うことができます。
そうパソコン側に見せかけることができます。
3. ハードウェアの共有を可能にすること
3は、上記で書いた疑問にあるようになぜ音楽を聞きながらニュースを見れたりするのかという疑問を解消する役割です。本来コンピューターは1命令ずつしかCPUによって解釈実行されません。それなのになぜ同時に複数アプリを立ち上げられるのかというと、ハードウェアの共有をOSによって可能にしているからなんです。一つしか無いCPUをうまく共有させています。どのプログラムも公平にCPUを使えるようにしているんです。
(仮にChromeがCPUリソースすべてを食い荒らしたら、ムカつきますよね。それ以外なんにもできないんですから。)
このように、ハードウェアの詳細を隠し、物理的な制約を緩和し、リソースを共有可能にしているのがOSの役割です。
ではこれらを実現している技術を大きく分けて4つ紹介します。すべて抽象化しています。
OSを支える4つの技術
- CPUの抽象化:物理的には一つのCPUを複数プログラム実行できるようにする技術
- メモリの抽象化:データやプログラムを記憶するメモリが抽象化され、実際に搭載されているメモリ容量よりも多く見せかける技術
- ディスクの抽象化:データやプログラムを保存しているディスクを抽象化し、ファイルやフォルダを実現している技術
- 入出力の抽象化:入出力装置を操作するために必要な詳細を隠蔽し、汎用的で人間にとって使いやすくする技術
上記とそれをさらに実現する要素技術についてそれぞれ解説していきます。
最後にコラムとしてアウトプットしますが、
オペレーティングシステムにも色んな種類があります。
電車の改札でカードをかざすと瞬時に通信して、改札の外に出ることが許可されるのもすごくないですか?
飛行機の航空制御をしているOSもすごくないですか?
そういったリアルタイム性の必要なOSのことを、リアルタイムオペレーティングシステムと呼びます。
普段普通のPCで使われるのは汎用オペレーティングシステムですが、そうではないOSもあるんですね。
ということで、今回はOSの概要と役割、それを実現する技術について簡単に紹介しました。
内容量が多すぎると読むのに時間がかかるので、今回はこれくらいにしたいと思います。