久しぶりの投稿になります
最近Linuxの仕組みという本を読んで、その要約をしようと思います
コンピュータシステムが動くとき、4つの手順を繰り返しています
①キーボードなどを介して、コンピュータにある処理を依頼する
↓
②メモリにある命令を読み込み、それをCPUで実行。その結果をデータを保持する領域に書き込む
↓
③ハードディスクやストレージデバイスをに書き込む
OR
別のコンピュータに転送する
OR
人間にモニターなどを使って、人間に見せる
↓
④ ①に戻る
この手順を繰り返して、ユーザーが使える一連の処理をプログラムといいます
プログラムには3種類あります
①アプリケーション
→ユーザーに直接役立つもの。LINEとかGoogleなどといったものです
②ミドルウェア
→アプリケーションの実行を助けるためのもの
webサーバーやDBなどがそれです
③OS
→ハードウェアを操作して、アプリケーションやミドルウェアの処理に必要な機能を提供するもの
いわば仲介役です
Linux windows MacOSがそれにあたります
この図に出ているOSは各種プログラムはプロセスという単位で実行され、複数のプロセスを同時に実行できるようになっています。
Linuxとハードウェアの関係
Linuxはアプリケーション、ミドルウェアとの関係もありますが、ここではハードウェアとの関係について話していこうと思います
Linuxの大事な役割の1つにデバイス操作があります。
Linuxには、デバイスドライバというものあって、そのおかげでPCからプリンターを使って印刷ができて、今話題のUSBにデータを送ることもできるわけです
もし、LinuxのようなOSがなかったら、プロセスごとにデバイス操作処理が必要になります。
具体的にいうと、エクセルで作った資料をUSBに保存したいときに、「エクセルで作った資料をUSBに保存する用のプログラム」を書かないといけないんです。Wordを保存したいときはまた別のプログラムを自分で書かなきゃいけなくなるんですね。
マジだるいですね
Linuxではデバイスドライバというのを使って、プロセスを管理し、それによって外部デバイスを操作していきます
でも、コンピュータというのはいつも思い通りに動かないのです。
デバイスドライバを経由せず、デバイスを操作しちゃおうとすることがあるんです
そこでLinux では、ユーザーモードとカーネルモードというのがあって、後者のカーネルモードで動いているときのみ、デバイスにアクセスできるようになるんです
デバイスドライバはカーネルモード、プロセスはユーザーモードで処理するという流れになっているんです。
【参考資料】