前回の記事では、LPICとは何なのかというお話とLPIC101の構成についてのお話をさせていただきました。
いよいよ今回から、実際の内容について学んでいきたいと思います。
今回は、「第1章 システムアーキテクチャ」の第1回目です。
それでははじめて行きましょう!
Contents
この章の構成
この章では、コンピュータやLinuxの構造、システム内部の動作についてなどをまなびます。
最初はイメージしづらいことも多いかもしれませんが、重要な項目なのでしっかりと理解していきましょう!
目次としては、以下です。
1-1 ハードウェアとLinuxの基本構造
1-2 システム起動時の動作
1-3 ランレベルの変更、システムのシャットダウンや再起動について
1-4 システムのサービスについて
1-1 ハードウェア設定の決定と構成
この項目では、Linuxでのハードウェアの設定確認方法について学びます。
設定確認の前に、今回あらかじめ知っておくべきハードウェアの知識を学んでいきましょう。
コンピュータで使用されるハードウェア
コンピュータは以下のようなハードウェアを組み合わせて動作しています。
CPU
CPUとは、Central Processing Unitの略で中央処理装置とも呼ばれます。
CPUはPCの中では、いわゆる脳のような役割を果たしています。
このCPUがPCの中で発生する計算処理などをほとんど担っています。
メモリ
メモリとは、コンピュータ内で処理されるデータを保存しておくための装置です。
主記憶装置とも呼ばれます。
容量でいえば、8GBや16GBくらいが現在主流ですね。
PCの電源を切るとデータが消えるという特徴を持っています。
また、HDDと比べると容量は少ないですが処理は超高速という特徴を持っています。
PCの中では、CPUの作業場というイメージですね。
ハードディスクドライブ(HDD) / ソリッドステートドライブ(SSD)
HDDまたはSSDとは、大容量の記憶装置のことを言います。
容量でいうと、500GB~2TBほどが主流です。
補助記憶装置とも呼ばれます。
PCの電源を消してもデータが消えることはありません。
また、メモリと比べると、処理は低速ですが、容量はとても大きいという特徴を持っています。(SSDはフラッシュメモリなので、HDDに比べると高速です。)
PCの中では、データを保存しておくための倉庫のようなイメージですね。
コラム:CPUとメモリとHDDの処理の流れ
試験に直接関係あるというわけではないですが、これら3つのハードウェアの流れがイメージできていると後々役立つことが多いのでできるだけイメージできるようにしておきしょう。
まずはじめに、データは全てHDDの中に入っています。
このままHDDからCPUにデータを引き渡して処理を行いたいところですが、CPUとHDDの間に途轍もない速度の差があります。
どれくらい差があるのかというと、CPUの処理速度の単位はHzで表されます。
2.4GHzだとかよく言われていますね。
これは、1秒間に2.4G回 = 2400000000回処理をしているという意味になります。
それに対してHDDは回転数で表されます。
大体5400rpm程度といったところでしょうか。
これは1秒間に5400回読み書きを行うことができるという意味になります。
だいぶ乱暴な説明なので、実際の数字とは異なりますが大体このレベルの差はあります。
大体45000倍の差です。
こんなに処理速度に差があると、HDDがボトルネックとなりCPUは全く処理を行うことができません。
なので、まずは処理する予定のデータをメモリーに移動させます。
メモリは、HDDに比べると超高速な処理が可能です。
速度でいうと大体1333MHz~1600MHzといったところです。
それでもCPUに比べれば20倍程度の差がありますがHDDに比べれば雲泥の差です。
なので、効率的な作業を行うことができるように処理する予定のデータをあらかじめすべてメモリーの中に移動させておくというわけです。
そして、メモリとCPUの間で高速な処理を行うわけです。
もう少しかみ砕くと・・・
とはいっても、いきなり周波数や回転数の話をされてもいまいちイメージできない方もいると思います。
なので今回はもう少し身近なことで例えてみようと思います。
シチュエーションとしては「キッチンでカレーを作ろうとしている」としましょう。
このようなイメージですね。
まずは、食材がないと料理はできないので、冷蔵庫から食材を取り出してキッチンに持っていきます。
このように、すべての材料を1種類ずつ、キッチンに持ってきました。
あとは、コックさんはわざわざ冷蔵庫に食材を取りに行かなくてもカレーを作り上げることができるというわけですね。
しかし、このキッチンが狭かった、もしくはなかったらどうなるでしょうか?
キッチンが狭いと、当然冷蔵庫から持ってこれる食材にも限りがあります。
今回は、玉ねぎとジャガイモしか持ってこれなかったので、この2つを処理した後に肉とニンジンをまた冷蔵庫まで取りに行かなければなりません。
キッチンがない場合はもっとひどいです。
作業場がないから、食材を置く場所がないうえに手元で作業しなくてはならないのでとても非効率です。
この3つの関係をそれぞれ冷蔵庫をHDD、キッチンをメモリ、コックさんをCPUに置き換えましょう。
コックさんというCPUが、冷蔵庫というHDDから、食材というデータを処理するためにキッチンというメモリに持ってきて作業をする。というわけです。
このような仕組みになっていますので、頑張ってイメージしてください。
入力装置・出力装置
次は、入力装置と出力装置についてです。
これは名前の通りで、コンピュータに対して入力を行う装置。
例えば、キーボードやマウスなどが入力装置にあたります。
出力装置は、モニターやプリンターといった、コンピュータのデータを出力してくれる装置のことを言います。
USBデバイス
USBといえば、一番身近なのはスマートフォンの充電器などがこんな形をしていますよね。
USB(Universal Serial Bus)というのは、コンピュータにおけるデータ転送規格の一つです。
※規格とは、その方式をとるための決まった形のことを言います。
USB機器をPCに接続することで、色々な機能を持ったハードウェアをPCで使用することができるようになります。
USBについてはまた後程も話が出てくるので詳しい話は後程。
拡張カード
少し、PCに詳しい方ならこのようなカードを見たことがありませんか?
このカードは拡張カードといい、PCのマザーボードのPCIスロットに差し込むことによって、PCの機能を拡張することができます。
例えば、通常PCでテレビを見ることはできませんよね?
ですが、テレビを見るための拡張カードというのが存在しており、そのカードを差し込むことによって、PCでテレビを見ることができるようになります。
あと、グラフィックボードというものを知っていますか?
これは、PCにとても高画質な処理を行うことができるようにするための拡張カードです。
最近では、PCで超高画質なゲームをすることができますが、そのためにはこのグラフィックボードが必須レベルです。
マザーボード
ここまで、様々なハードウェアを紹介してきましたが、このハードウェアはどのようにして接続されているのでしょうか?
PCには、マザーボードと呼ばれる基盤が存在します。
このように、マザーボードには先ほど紹介したハードウェアを接続するための場所がすべて用意されています。
ちなみに、
SATA・・・HDDを接続する規格
PCI・・・拡張カードを接続する規格
I/Oポート・・・USBに限らず外部ハードウェアを接続するためのポート
です。
まずはこのマザーボードがないと話は始まりません。
これらのハードウェアの構成などは、理解しておくと後々はかどることが結構多いので、できるだけ理解しておくことをお勧めします。
理解するために手っ取り早い方法として、実際にPCを組み立てるというのがいいです。
情報も自作PCで調べれば大量に出てきますし、コストも遊ぶためであれば2万円もかからないので、一度は試してほしい方法ですね。
BIOSとUEFI
コンピュータでは、電源を入れた瞬間に動き出すシステムがあります。
BIOS(Basic Input/Output System)というシステムで、このBIOSは名前の通り、もっとも基本的な入出力装置です。
PCが起動すると、BIOSがまず起動してコンピュータに接続されているハードウェアの認識を行って、PCを起動する準備を行ってくれます。
BIOSはマザーボードに組み込まれているため、PCを起動すると必ず一番最初に起動されます。
HDD内にインストールされているわけではないので注意しましょう。
BIOSでは、2TBまでのHDDのみにしか対応できないなど、色々と制約があります。
BIOSの設定画面
PC起動時に指定されたキーを入力すると、BIOSのセットアップ画面を開くことができます。
システムクロックやHDDの起動順序など、ハードウェアに関する基本的な設定を行うことができます。
UEFIとは?
近年では、先ほどのBIOSに代わって、UEFI(Unified Extensible Firmware Interface)が利用されていることが多いです。
UEFIでは、BIOSで対応できなかったハードウェアの制御に対応したうえで、さらに設定画面を自由に作成できるという特徴があります。
例えば、2TBを越えるHDDの利用も可能です。
BIOSでは、キーボードのみでの操作のみ可能でしたが、UEFIではGUIを用いたマウスでの操作も可能になっています。
ここ数年のPCであれば、たいていの場合UEFIが利用されています。
皆さんも、気になったらBIOS画面を起動してみてください。
とりあえず、ここまでで物理的なハードウェアの話はおしまいです。
ここからは、いよいよLinuxでのハードウェア管理についての説明をしていきます。
Linuxが認識しているハードウェア情報の確認
Linuxでは、コンピュータのハードウェア情報をファイルとして、ある場所に格納しています。
ひとまず、表でまとめているのでこちらを確認してみましょう。
ファイル名 | 説明 |
/proc/cpuinfo | CPUの情報 |
/proc/meminfo | メモリの情報 |
/proc/ioports | I/Oポートの情報 |
/proc/interrupts | IRQの情報 |
/proc/bus/pci/devices | PCIデバイスの情報 |
/proc/scsi/scsi | SCSIデバイスの情報 |
/proc/bus/usb/devices | USBデバイスの情報 |
※IRQとは?・・・Interrupts ReQuestの略で、システム割込みを意味します。
少し難しいかもしれませんが、CPUの割り込み処理が発生したときの記録です。
まず、Linuxがデバイスを認識するとこの/procディレクトリの中にデバイスの情報をまとめたファイルを保存します。
どのような情報が格納されているのか、試しにcatコマンドで確認してみましょう。
cpuinfoファイルを確認しています。
この出力内容から、このPCでは、Intel Core i7 のCPUを使用しているということがわかります。
また、/procディレクトリ内のファイルを確認する方法のほかにも、デバイスの情報を確認する専用のコマンドも存在します。
lsusbコマンド
list-usbの略です。
認識しているUSBデバイスの情報を確認することができます。
また、-vオプションで詳細情報を確認することもできます。
※-v = –verbose
lspciコマンド
list-pciの略です。
認識しているPCIデバイスの情報を確認できます。
試験対策ポイント!
デバイスの認識情報は/procディレクトリに格納される!
また、IRQの情報を/proc/interruptsファイルで確認できる。
USBとPCIデバイスには、情報確認用のコマンドlsusb,lspciが用意されている。
バスとは?
先ほどのデバイス情報でbusというディレクトリがありましたが、このバスとは何でしょうか?
バスとは、コンピュータの内部でやり取りされるデータや信号を伝達するための回路や通路のことを言います。
CPUや主記憶装置であるメモリ、入出力装置などのそれぞれの装置が共通の伝送路であるバスで接続されています。
また、バスにはシリアルバスとパラレルバスの2種類の方式が存在します。
解釈としては、ただ単純にコンピュータの中で信号をやり取りしているんだな程度で構いません。
デバイスファイル
本来、OSからデバイスの操作を直接行うことというのはできません。
つまり、LinuxがHDDに直接データを書き込むことはできないということですね。
しかし、それではLinuxはデータの処理を行うことができません。
なので、LinuxはデバイスがPCに接続されているのを認識すると、デバイスファイルというものを自動的に作成します。
このデバイスファイルというのは、HDDなどのデバイスをファイルとして扱うことで、Linux上で利用することができるようにしたものです。
このデバイスファイルは、/devディレクトリ内に格納されます。
lsコマンドで確認してみましょう。
/devディレクトリに入ってるのは、基本的にデバイスファイルです。
例えば。この中のsdaというファイルは、HDDのデバイスファイルです。
このファイルにアクセスすることで、HDDにLinuxはアクセスすることができるというわけです。
知っておくべきデバイスファイルを次の表にまとめてみました。
デバイスファイル名 | 説明 |
/dev/hda | ハードディスク(IDE接続) |
/dev/sda | ハードディスク(SCSI/SATA接続) |
/dev/cdrom | CD-ROM |
※試験対策ポイント!
デバイスをコンピュータに接続した際に自動的にデバイスファイルが追加される仕組みをudev(Userspace DEVice management)といいます。
また、udevの挙動は、/etc/udev/rules.d/ディレクトリ配下の.rulesで終わるファイル内に記述されています。
デバイスファイルは/devディレクトリに格納されている。
豆知識:ハードディスクの規格
先ほどからIDEだとかSCSIだとか聞きなれない単語が当然のように出てきていますが、この単語は何なのでしょうか?
これらは、すべてHDDの接続規格として利用される規格のことです。
それぞれ簡単に説明します。
IDE
IDEはHDDの通信規格の中でも一番古くから利用されている規格です。
最近のPCには、あまり見られませんが、少し昔のPCの中を覗くとこのような幅の広いコードがあります。
これがIDEケーブルです。
現在はほとんど利用されていません。
SCSI
SCSI(スカジー)はなかなか解釈の難しい接続方式の筆頭ですね。
SCSIはPCと様々なハードウェアを接続するための規格です。
USBと一緒じゃんと思った方もいると思います。
その通りで、SCSIはUSBが普及するより前に利用されていたインターフェースで現在はほとんど使われていることはありません。
SATA
SATA(シリアルATA)は、近年主に利用されているHDDの接続規格です。
最近のPCの中を覗くと入っているのはたいていこのSATAです。
IDEやSCSIなどの接続規格に比べて高速な伝送処理が可能となっています。
HDDの接続規格について、細かい内容が聞かれることはありませんが、覚えておいて損はないと思います。
デバイスドライバ
先ほど、Linuxでデバイスにアクセスするためには、デバイスファイルが必要だという話をしました。
しかし、これだけではまだデバイスの操作を行うことはできません。
デバイスの操作を行うためには、デバイスドライバというものが必要になります。
Linuxにおいて、デバイスドライバはモジュールとしてカーネルに組み込まれています。
※モジュールとは、カーネルの部品のようなイメージです。
Linuxでは、デバイスが接続されて認識されるとデバイスドライバを自動的にロードするため、あまり意識することはないと思います。
とりあえずは、裏ではこんなことが起きているんだなあと把握しておきましょう。
ロードされているデバイスドライバの確認
ロードされているデバイスドライバを確認するためには、lsmodコマンドを実行します。
list-moduleの略です。
手動でデバイスドライバを追加する
Linuxでは、基本的に自動でデバイスドライバは用意されますが、手動で任意のデバイスドライバを追加したい場合や、自動的に用意できない場合もあります。
そんな時に、modprobeコマンドを実行すれば、指定したデバイスドライバを追加することができます。
汎用のクラスドライバ
Linuxでは、最初から最低限必要なデバイスドライバがインストールされています。
このデバイスドライバのことをクラスドライバと呼び、わざわざインストールを行わなくても利用することが可能です。
クラスドライバの種類は試験でも聞かれるポイントなので覚えておきましょう。
デバイスクラス | 対応する機器 |
HID (Human Interface Device) | キーボード、マウス、ジョイスティック |
マスストレージデバイス (Mass Storage Class) | USBメモリ、HDDなど |
オーディオ (Audio Class) | マイク、スピーカーなど |
コミュニケーション (ACM Communication Device Class) | モデム、Ethernetアダプタなど |
ワイヤレスコントローラー | Wi-Fiアダプタ、Bluetoothアダプタなど |
※試験対策ポイント!
デバイスドライバを手動でインストールするには、modprobeコマンドを実行する。
クラスドライバの種類は覚えておこう!
USBデバイスの規格
皆さん知っての通り、USBデバイスはキーボードやマウスをはじめ広く利用されています。
このUSBデバイスには規格が3つ存在するのはご存じでしょうか?
USB1.1 ,USB2.0 , USB3.0の3つです。
バージョンが上がるごとに速度が格段に上がっていっています。
また、Linuxにおいては、USBを操作するためにUSBコントローラと呼ばれるものを利用するのですが、このUSBコントローラの規格もバージョンによって異なります。
そしてさらに、Linuxカーネルのバージョンによって利用できるUSBの規格も異なるため、注意してください。
それらをまとめた表を用意しておくので頑張って覚えましょう。
※HCI(Host Controller Interface)
コントローラ | 規格 | カーネル2.4 | カーネル2.6 | 速度 |
UHCI | USB1.1 | usb-uhci | uhci-hcd | 1.5Mbps |
OHCI | USB1.1 | usb-ohci | ohci-hcd | 12Mbps |
EHCI | USB2.0 | 未対応 | ehci-hcd | 480Mbps |
xHCI | USB.3.0 | 未対応 | xhci_hcd | 5G,10Gbps |
※試験対策ポイント!
カーネルのバージョンとUSBの規格とUSBコントローラの対応表はしっかりと覚えておこう!
以上で、ハードウェアの設定の決定と構成のセクションは終了です。
初めてLinuxを触る人にとってはなかなか難しい内容も多かったと思います。
ですが、投げ出さずに地道に勉強していけばある日すんなりと理解できるようになる日がやってくるので、その時を楽しみに勉強していきましょう!
出来るだけ詳しく説明したつもりですが、わかりづらい部分などあれば遠慮なくコメントなど頂ければと思います。
それでは、今回の記事はここまでにしたいと思います。
次回は「第1章システムアーキテクチャ② システム起動時の動作」です。