OS開発はじめたよ OS開発勉強 #1
またまた新しい事を始めたので、つらつらと書いていこうと思う。
OS
OSとは
上はWikipediaのOSのページから引用した一文。身近な例としては、WIndows・Android・iOS・MacOSなどなどがある。じゃあ、こいつらは何をしているのか。それがこの一文。だが、どうにもわかりずらい。そこで独断と偏見によって、OSの仕事は大まかに三つに分類し捉えてみる。
OSの機能 1. ハードウェアの抽象化
OSの肝となる機能の一つにハードウェアの抽象化があげられる。抽象化とはつまり、ざっくりととらえることである。PCを構成するパーツをざっくりと把握することをOSは担っている。どの程度ざっくり(抽象的)なのか。
プリンターが接続されてるよ!
ディスプレイが接続されているよ!!
この程度になる。我々人間の利用者側から見ると、とても当たり前の事項に見える。
「そんなものは見ればわかる。コードが刺さっているではないか。」
と言った調子に。
では何故、重要なのだろうか?それは取りも直さず、機器の多様性に起因される。
例として画面について考えてみよう。この世には多種多様な画面が存在している。材質・仕組みによる差異(液晶・ブラウン管・LED etc…)、機能による差異(ゲーミング機能・ブルーライトカット機能・自動調光機能 etc…)、メーカーの差異(LG・DELL・HP etc…)などなど、バラエティには枚挙にいとまがない。
OSのハードウェア抽象化がなければ、PCはこれらの数多の画面に対して愚直に対応しないといけない。この画面は○○社の××と言う製品で、機能は△△があり、大きさはいくらで…..といった風に。面倒くさい….面倒くさすぎる。
ここでOSの寛容さがカギになる。OSが抽象化を行うと、
画面がくっつきました!
このプログラム(ドライバー)を使えば、画面が動かせるよ!!
とこうなる。そうすると各アプリケーションは
『OSさん、画面をコレコレこうしてください。』
といった感じでお願いするだけで事が足りる。考えることが大幅に減少する。デキる上司のようなOSさん。いつもありがとう。
OSの機能 2. タスク管理
ハードウェアの抽象化という、デキる上司のような仕事をしていたOS。
一方、秘書やマネージャーのようなスケジュール&タスク管理もOSは行う。
いくら技術が進歩しようとも、どうしたって資源は限られる。それ故にOSは、いつ何を実行するかを決定していく。またマルチタスクを管理することも重要な役割になっている。
地味極まりないといえばそうかもしれないが、私たちも秘書やマネージャーもしくは自らが適切にタスクを裁けなければ、最大限のパフォーマンスが発揮できるだろうか?この質問に、タスク管理の重要性が帰結される。
OSさん。陰ながら支えてくれてありがとう。
OSの機能 3. ファイル管理
デキる上司で、良きマネージャーなOS。さらには、場所取り係や荷物番も請け負う。PC上のデータの管理、つまりファイルの管理もしてくれる。
PCでは様々なことができる。文章を書いたり、データ解析をしたり、動画編集したり、ゲームをしたり等々。人間は日々PC上で様々なデータを築き上げるが、一度保存をすればPCは私たちの代わりに記憶しておいてくれる。これは大変ありがたい機能だ。
しかしただ保存するだけではない。自動で整理してくれる。考えてみてほしい。適当に放り込んで置くだけで、きれいに整理される。なんて素敵な機能なんだ….. 私の机にも欲しい。
OSを自作する意義とは?
とここまで軽くOSについて解説(?)をしてきた。じゃあ何故、自作する必要があるのか。出来合いの物を使えばいいじゃないか。
確かに使用面だけで考えたらそれで申し分ないだが、理解の上ではそうもいかない。どのようにメモリを確保し、どのようにタスクを管理するのか。ネット上に様々情報はあるものの、実際に体験してみなければわからないことも多くあると思う。ということで、体験と理解の二つを得るためにOSの開発をしていく。
テキスト
OSに関しても例にもれず、先人の知恵の結晶である書籍の力を借りていく。こちらの本に則り開発をする。
ちなみ開発環境にはWSLgを使用して、WInodws上でUbuntuを介する予定。
以上長文ありがとうございました。
この記事が気に入ったらサポートをしてみませんか?