OSを基礎から丁寧に (1)OSの役割
初めに
今週から、OSについて体系的に整理していきたいと思っています。
特に割り込み処理や、プロセスとスレッドの定義、多重プロセス多重スレッド、メモリ管理、等々。
普段の開発や勉強で、ふわっと理解をしながら設計、実装していた部分の「Why」の部分を強化したいなってものあります。こう言うのって時間が余ってる学生の特権っぽい気がしますし!
シリーズの構成
大学のOSの講義で推奨されていた本を参考に章立てしていきます。
すでに理解が深い部分の章を除いて、大きく以下のように進んでいこうと思っています(順次リンクを貼り付けます!)
- OSの役割 ←本記事!
- OSのプログラミングインターフェース
- OSの構成
- ファイルの管理
- プロセスとその管理
- 多重プロセス
- メモリの管理
- 仮想メモリと仮想化
- ネットワークの制御
- セキュリティと信頼性
- OSと性能
OSについて整理する前に
まずは自分のOSに対する、今までの経験と知識を列挙してみます。
- OSはコンピュータを使うための最も根幹のソフトウェア
- 種類によって使い勝手が異なる(macOS, Windows, Unix, Linux...)
これくらいでした、、意外と言葉で説明するのって難しい。
そして、GPT4の理解はこんな感じ。
そうだねって感じでした。笑
OSが生まれた背景
コンピュータの基盤になっているのはわかるんだけど、そもそもなぜOSが必要になったのかは背景を理解するとより腑に落ちそうでした。
1. コンピュータを使いやすくする
ハードウェアは人間にとって、そのままでは複雑で使いずらい。これを使いやすくするために、コンパイラやインタプリタが開発されたが、これだけではハードウェアは思い通りに動かない(まだ制約が多い。)それを解決するために、ハードウェアと応用プログラムの橋渡しをするためにOSが開発されたのが背景。
2. コンピュータリソースを効率的に使う
プログラムの実行の制御は、プログラムを実行するソフトウェアであるOSが担うことで、効率よく処理を行うことができた。
3. 利用者に優しく
低レベルのコンピュータハードウェアを利用者が使いやすいようにレベルの高い論理的なマシンとして提供することが、結局利用者にとって本質的なOSの役割であると言える。
OSが提供する機能
OSは、先ほどの背景からもわかる通り、利用者がコンピュータを使いやすくするために存在していると言っても良さそう。具体的には、 - ユーザインターフェース - プログラミングインターフェース(または、API)
さらに、コンピュータはネットワーク経由で他のコンピュータと通信し合うわけだが、その基本的な制御もOSが行う。 これを通信インターフェースとするならば、担う役割は3つである。
ユーザインターフェース
OSはコンピュータを直接操作する利用者に対してユーザインターフェースを提供している。
利用者はこのインターフェースを使って、コンピュータシステムを操作し、プログラムの実行を制御している。このうち、画面ベースでマウスを用いて行えるようにしたものをGUIと呼ぶ。当然GUI以前は、文字ベースで各種コマンドを打ち込んでいた。
プログラミングインターフェース(API)
OSの次に高級な応用プログラムは、例えば入出力機器に対して入出力を行いたいときに、OSの特定機能を呼び出すことによりそれを依頼する。依頼されたOSが、応用プログラムに変わって複雑な制御をしてくれるため、OSは応用プログラムの作成を楽にしてくれる。
pythonでいうprint()なんかは最たる例ですね。 出力するために入出力のプログラムがどうなっているかを意識しないで使えるのは、プログラミングインターフェースがあるおかげ。
通信インターフェース
利用者や、応用プログラムは、OSの通信インターフェースを介することで、近くのコンピュータやインターネット上のコンピュータと通信をすることができる。この通信インターフェースの中身は、通信のための標準接続方であるプロトコルである。
プロトコルに従って、他のコンピュータと会話をしている。
これはネットワークの部分でより詳しく説明するのが良さそう。
OSが管理する資源
また、OSはコンピュータリソース(資源)も管理している。
具体的にどんな資源かというと、
ハードウェアのコンポーネント - プロセッサ - メモリ - ハードディスク - その他の入出力機器 - etc...
である。OSは、いわゆるハードウェアの資源を、応用プログラムで制御できるように仲介をしているイメージ。 プロセスを一定時間使わせたり(時間貸し)、メモリの一部を使わせたり(空間貸し)できる。
OSはこのようにハードウェアの資源を管理するだけでなく、ソフトウェアの資源も管理する。
例えばプログラマが書いたコードや、データなど。OSを通してファイルを利用し保存することができる。
最後に
一応、参考書には、Unixコマンドや、Power Shellのコマンドも紹介されていたが、OSを理解する!という目的から若干外れそう(なのと、普通にまとめるのが面倒)だったので割愛しました。
こうやってみたらわかるけど言葉にできないことって、みなさんどうやって説明できるようになるんだろう。
口でもしゃべってみようかな。