『Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識』第1章を読む
第1章 コンピュータシステムの概要
はじめに
武内 覚 著『Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識』をテキストとして学習した記録です。
本書を読んで筆者が解釈した内容について記述しています。
なので本書の内容の間違った解釈やあるいは単純に間違った記述がある可能性があります。
コンピュータとは
- 狭義のコンピュータとはcpuとメモリのこと
- cpuとメモリをコンピュータと呼ぶことにする
プログラムとは
- 入力デバイスあるいはネットワークアダプタから処理の依頼を受け取る
- メモリ上に定義されている命令を読み込んでaluで演算を実行し、結果をメモリに書き込む
- メモリ上のデータを出力する(デバイスやネットワーク経由で別のコンピュータへ)
これらの手順を定義し、コンピュータが期待通りの動作をするために命令をまとめたドキュメントをプログラムと呼ぶ。 プログラムは大きく三つに分けることができる。
- アプリケーション
- ミドルウェア
- OS
LinuxはOSの一種である。 OSはハードウェアを直接操作する。
OSの役割と意義
アプリケーションやミドルウェアはOSに依頼して(OSを経由して)ハードウェアを操作する。 OSはそのためのプロトコルを用意している。
アプリケーションやミドルウェアのプログラムを実行させるのはOSの役割である。 実行時のメモリにはプログラムがロードされているがそのどの部分を実行するのかを決めてCPUを制御しているのはOSである。
CPUがプログラムを実行する単位をプロセスやスレッドと呼ぶ。
OSはプログラムをプロセスという単位で実行している。
前述のようにOSはハードウェアを操作する。
OSがなくてもハードウェアの操作をすることは可能。 ただしハードウェアの違いによってそれぞれ独自の方法でそれを操作するための実装が必要。
OSがあれば、アプリケーションのプログラムはハードウェアの違いを意識することなく命令を実行することができる。
OSの役割の一つはハードウェアによる違いを吸収することにもある。
またプロセスを管理しているのもOSである。 プロセスは同時に実行され得るため管理するOSがない場合デバイスに矛盾する命令が発行されたりと誤動作の原因になる。
OSがデバイスを操作するための処理はデバイスドライバと呼ばれるプログラムにまとめられている。
カーネル
CPUにはユーザーモードとカーネルモードがあり、カーネルモードでしか許されていない処理とそうでない処理がある。デバイスドライバの処理はカーネルモードでしか許されない。このような制約によってアプリケーションプログラムからデバイスへの問題のある命令を阻止することができる。
このようにカーネルとはシステム全体が安全性を保つための核となるような処理がまとめられたものである。カーネルの持つプログラムを実行したい場合はシステムコールを通してカーネルに処理の依頼を発行する。
カーネルはメモリやCPUなどのリソースの管理も行なっている。