seegongsik
単語帳
オペレーティングシステム

カーネル:すべてを取りしきるOSの核

前回、プログラムは公式の窓口(システムコール)にお願いし、窓口を越えた瞬間しばらくカーネルモードに変わる、と言いました。でも、その窓口の奥で強い権限で実際に仕事を処理してくれるのは、いったいだれなのでしょう。そして、その名がなぜカーネルモードだったのでしょう。今日は、OSのいちばん深い中心、いつもその場を守る核と、正面から出会います。

01

窓口の奥にはだれがいるのか

前回を思い出してみましょう。プログラムは柵の中に閉じこめられてハードウェアを直接さわれず、仕事が必要になると、システムコールという公式の窓口にお願いしました。そして窓口を越えた瞬間、CPUがしばらくカーネルモードに変わり、その仕事を処理して戻ってきました。あのとき、私たちはわざと一つだけ見ませんでした。窓口の奥で、その強い権限で実際に仕事をしてくれる存在のことです。窓口はあくまでお願いを受け取る入り口にすぎず、その内側には、本当にディスクを読み、画面に点を打つ働き手が別にいます。その働き手の名前こそ、カーネルです。

プログラム
システムコールの窓口
?

窓口を押して、その奥をのぞいてみましょう。システムコールの窓口の奥に隠れていた核、カーネルが現れます。お願いを実際に処理していたのは、このカーネルでした。

カーネルが現れましたね。強力なカーネルモードという名前も、これで腑に落ちます。あの強い権限こそ、このカーネルが働くときに使う力なので、その名がついたのです。でも、このカーネルは、お願いが来たときだけしばらく現れて消えるのでしょうか。そうではありません。次は、カーネルがいつからいつまでその場にいるのかを見ます。

02

カーネルはいつも起きている

私たちが使うプログラムは、つけたり消したりします。音楽アプリを開いては閉じ、ブラウザーを立ち上げては切ります。アプリは必要なときにメモリに上がり、閉じればメモリから下りていきます。でも、カーネルは違います。コンピューターをつけた瞬間、いちばん先にメモリに場所を取り、電源を切るまで一度もその場を離れません。アプリがどれほど出入りしても、カーネルはいつもその下で起きています。考えてみれば当然です。アプリをメモリに上げ下げすること、だれにCPUを渡すかを決めること、そのすべてをやるのがカーネルだからです。カーネルが眠ったら、その仕事をしてくれる者がだれもいません。

カーネル(常駐)いつもオン
アプリはついたり消えたりしても、カーネルの枠はいつもついたままです。

アプリを押して、つけたり消したりしてみましょう。アプリの枠はついたり消えたりしますが、いちばん下のカーネルの枠は、いつもついたまま変わりません。カーネルは起動から終了までメモリに常駐します。

アプリはちらついても、カーネルの枠はずっとついたままでしたね。カーネルは、舞台裏で幕を上げ下げする人のようです。役者は出たり入ったりしますが、その人は公演のあいだずっと持ち場を守ります。では、カーネルはいつもその場で、正確には何をしているのでしょう。じつは、私たちがこの領域で学んだほとんどすべての仕事が、カーネルの手で回っていました。次で、一か所に集めてみましょう。

03

すべての資源の管制塔

この領域を通ってきて、私たちは色々なことを学びました。だれにCPUを先に渡すかを決めるスケジューリング、本当のメモリより大きいふりをする仮想メモリ、新しい装置を見分けるドライバー、ファイルを整理する仕組み、だれが何をできるかを見る権限の確認まで。あのときは別々に学びましたが、じつはこのすべてを実際にやりとげる手は一つです。カーネルです。カーネルは、まるで空港の管制塔のようです。塔が、どの飛行機がいつ離着陸し、どの滑走路を使うかを一か所で決めるように、カーネルは、CPU、メモリ、装置、ファイルという資源を、だれにどれだけ渡すかを一手に取りしきります。

カーネル
資源を押してみましょう。何を押しても、カーネルがその仕事を受け持ちます。

資源を一つずつ押してみましょう。CPUスケジューリング、メモリ、ドライバー、ファイル、権限、どれを押しても、それを取りしきるのは中央のカーネルだとハイライトされます。すべての資源がカーネルの一手で回ります。

どの資源を押しても、道はカーネルに集まりましたね。ばらばらに見えていた仕事が、じつは一つの中心で回っていたのです。でも、カーネルがこんなに強力な仕事を全部やるなら、危なくないのでしょうか。どんなプログラムでもこの力を使えたら、大ごとです。だからコンピューターは、力の世界を二つに分けてあります。次で、その境を見てみましょう。

04

二つのモードの境

前回ちらっと見た二つのモードを、もう一度思い出しましょう。一つはユーザーモード。私たちのアプリが住む、力の制限された世界です。もう一つはカーネルモード。ハードウェアでも何でも直接さわれる、カーネルが働く強い世界です。二つのあいだには、はっきりした境があります。ユーザーモードにいるアプリは、ハードウェアに直接手を伸ばせません。カーネルモードにいるカーネルだけが、ハードウェアを直接さわれます。だからアプリが何かを自分でやろうとすると止められ、カーネルにお願いしてカーネルモードを経てはじめて、その仕事がかないます。この境のおかげで、強い力は信頼できるカーネル一か所だけに集まっています。

ユーザーモード

モードを押して切り替えてみましょう。ユーザーモードのときは、ハードウェアに直接手を伸ばすとはばまれます(赤)。カーネルモードのときだけ、ハードウェアへのアクセスが許されます(緑)。強い力は、カーネルモードの中にだけあります。

ユーザーモードでは止められ、カーネルモードでだけ通りましたね。強い力がカーネル一か所に集まっているのは、心強いことです。危険な行動が一か所だけを通るので、その一か所さえよく守ればよいからです。でも同時に、少しひやりとする考えもよぎります。すべてがカーネル一つにかかっているなら、もしそのカーネル自体に問題が起きたら、どうなるのでしょう。最後に、その問いで今日学んだことをまとめましょう。

05

カーネルが止まると

今日見たことを、一本の線に集めましょう。カーネルは、システムコールの窓口の奥で実際の仕事を処理する核となるプログラムであり、起動から終了までいつもメモリに常駐し、CPU、メモリ、装置、ファイル、権限というすべての資源を一手に取りしきります。強いカーネルモードは、カーネルが働くときに使う力です。だから、こうなります。アプリ一つが壊れて止まったり死んだりしても、その上でカーネルが生きているので、そのアプリだけを片づけ、残りはちゃんと回りつづけます。固まったアプリ一つだけを強制的に閉じて使いつづけられるのは、そのおかげです。でも、カーネル自体が止まると、話はまったく変わります。アプリを片づけ、資源を配り、お願いを処理する、その一つの手が消えるので、その上のすべてのアプリとシステム全体が、いっぺんに止まってしまいます。コンピューターが突然まっ青になったり、うんともすんとも言わなくなって、つけ直すしかなくなる、あのまれな瞬間こそ、カーネルがもう持ちこたえられなくなったときなのです。

カーネル
アプリを押して止めてみましょう。そのあとカーネルを止めてみましょう。

アプリを一つ押して止めてみましょう。カーネルが生きているので、そのアプリだけが片づき、残りは無事です。最後にカーネルを押して止めると、その上のすべてが、いっぺんに停止(赤)します。すべてがカーネル一つにかかっています。

これで、OSのまんなかがはっきり見えてきました。これまで別々に学んだスケジューリング、メモリ、ドライバー、ファイル、権限、システムコールが、みなこのカーネル一つの手で回っていたのです。でも、資源を一つの手から配っていくと、新しい厄介ごとが生まれます。二つのプログラムが、それぞれ自分の持ち物を放さず、相手のものだけを待つと、どちらも永遠に止まってしまうのです。次回は、そうしてたがいに譲らないときに起きる、デッドロック(行きづまり)と出会いましょう。

一言でいうとカーネルは、OSの核となるプログラムです。システムコールという窓口の奥で、実際に仕事を処理するのが、このカーネルです。カーネルは、コンピューターをつけた瞬間から切るまで、いつもメモリにとどまっています。私たちが使うアプリは立ち上がっては消えますが、カーネルはそのあいだ一度も持ち場を離れません。そして、これまで学んだほとんどすべて、CPUをだれに渡すかを決めるスケジューリング、仮想メモリ、デバイスドライバー、ファイルの整理、権限の検査が、みなこのカーネルの仕事です。強力なカーネルモードは、まさにこのカーネルが働くときに使う権限です。だからアプリが一つ死んでもカーネルが受け止めてくれますが、カーネル自身が止まると、受け止めるものがなく、システム全体が止まってしまいます。
オペレーティングシステム
このページがお役に立ったなら支援する