Linuxのしくみ Day2:導入

f:id:dombri:20191117194128j:plain

こんにちは。

急に寒くなりましたね。寒がりの冷え性にはつらい季節がやってきました。暑がりの汗っかきでもあるんですけど。
今からセーター×ヒートテックでぬくぬくしていて、この冬を乗り越えられるか心配になっています。

先日の宣言から日を開けてしまいましたが、今週は平日昼休み中に「Linuxのしくみ」とiPadでちまちま勉強していました。そんな「ちま勉」を復習がてら記しておこうと思います。

第1章「コンピュータシステムの概要」を読む

f:id:dombri:20191123163723j:plain

本日の内容は以下です。

  • OSは各プログラムをプロセス単位で実行する

  • バイスの操作はデバイスドライバが請け負う

  • プロセスにはユーザモードカーネルモードがある

    • OSの核となる処理群をまとめたプログラムをカーネルと呼ぶ
  • カーネルを使う処理がしたければシステムコールを使う

見慣れてはいるけど、ぼんやりとした理解の単語が並んでいます。ちゃんと「輪郭」を知りたいと思います。

OSの役割を「デバイス」の観点で考える

例えば、外部デバイスの操作をプログラムから行いたいとき、以下のような課題が発生する。

  • 個々のデバイスの特性を知り、機械的に操作する方法を学ぶ必要がある
  • 様々なプログラムから一度に一つのデバイスを操作しようものなら大混乱

上記の問題を解決するためにLinuxではデバイスドライバを介してプロセスからデバイスにアクセスするように制御している。

デバイスドライバの特徴

しかし、デバイスドライバを介さずにデバイスにアクセスするようなルール違反が起こると、複数のプロセスが同時にデバイス操作してしまう。

これを回避するために、プロセスからデバイスに直接アクセスできない仕組みがある。それがCPUの「モード」である。

CPUの「モード」

CPUには2つのモードが存在し、それぞれ扱う動作が異なる。

  • カーネルモード
    • デバイスドライバ
    • プロセスの管理システム
    • プロセススケジューラ
    • メモリの管理システム 
  • ユーザモード
    • プロセス

つまりCPUがカーネルモードの時だけデバイスにアクセスすることができるように制御することで、上記のような違反を防いでいる。

システムコール

じゃあ何でもかんでもカーネルモードが自由に呼び出せちゃったら意味ないじゃん!ことで用意されているしくみ、それがシステムコールである。

プロセスがカーネルが提供する機能を使いたいときは、必ずシステムコールを介してカーネルに依頼する。

カーネルの役割

  • CPUの管理
  • メモリの管理

それぞれの領域を、プロセスに分け与える・廃棄するのが主な仕事である。

CPUはプロセススケジューラが、メモリはメモリ管理システムが割り当て管理する。

今回のまとめ

この後読み進めていくと出てくるであろう、基本的な要素の導入編でした。
改めて単語の意味を知ると、日常の業務で起こる事象が言葉で表現できるようになるので物凄く大切だなと感じています。

「なんだかよくわからないけど動く・動かない」をなくしていきたい。

Linuxのしくみがこうだから、こういう動きになりそう・なった」と大体の事象に対して説明できるようになれたらいいなぁと思いながら読み進めていこうと思います。

本日はここまで。