アタマのひきだし

webプログラミング情報メモ

Linux、ディストリビューション、起動について

Linux道場のサイトに、Linuxについて、あれこれ書いてあったのでメモします。…といっても、ほとんど書いてある内容は同じです。このサイト内の下記の部分を参考にさせてもらいました。

第2回 ディストリビューションとは 

第5回 ブートローダー 

第10回 ファイルシステムの考え方 

Linuxとは?

本来OSのコアであるカーネルをさす言葉らしいです。ただ、カーネルだけではコマンド実行も起動もしない。そのため、一般的にいう Linuxとは、ディストリビューションでのLinuxを指している。ディストリビューションとは、LinuxカーネルとOSを構成するその他のソフトウェアを組み合わせたもので、「Ubuntu」「Debian」「CentOS」など種類は豊富。

ディストリビューションの分類

ベースによって、大きく3つの系統に分類。それぞれ、ベースとなるディストリビューションの名前をとってSlackware系、Redhatrpm)系、Debian系。サポートがよくなされるのは、Redhat系のLinuxRedhat Linuxrpmと呼ばれるパッケージ管理システムのが扱いやすく、幅広いユーザ層がある。多くのディストリビューションRedhat Linuxをベースとしているようです。

Slackware

SlackwarePlamoSLAX

Redhatrpm)系

FedoraCentOS、MIRACLE、RedFlag、PS2 Linux、Turbo、VineSUSE

Debian

Debian/GNU LinuxUbuntuKNOPPIX、Omoikane、Linspie等

コンピュータの起動

コンピュータがどういう順番で、起動するかは一概にいえないらしいですが、起動はだいたいこのようになるらしいです。ブートローダが重要らしい。

電源投入

BIOSによるデバイス初期化

ブートデバイスの決定

ブートストラップローダのロード

ブートローダの実行

OSの起動

PCの電源投入。マザーボードのフラッシュROMに書き込まれたBIOSBasic Input/Output System)というソフトウェアが起動。このBIOSの初期化プログラムが、PCに接続されている、各種デバイスを初期化。この過程を POST(Power On Self Test)。POSTの段階で最初に初期化が行われるのはビデオカード

このビデオカードの初期化が終わると、BIOSの初期化状況を表示する画面。 各種デバイスの初期化が終了すると、BIOSは次の段階に。起動するためのドライブを探す。起動ドライブとなるのは通常FDD、HDD、 CD-ROMなど。BIOSは起動ドライブを見つけると、そのデバイスをファーストブートドライブとして起動を試む。例えば、 BOIOSでUSBに起動するよう、変更していれば、USBから起動する。通常は、HDDで起動。

ブートドライブが決定すると、BIOSはそのブートドライブの先頭セクタのロードという段階に移る。HDDでは先頭セクタのことを MBR(Master Boot Record)といい、MBRは1台のHDDに1つしか存在しない。BIOSはこのMBRをメモリ上にロード、MBR領域にあるプログラムに制御を移す。このMBR領域にあるプログラムを、一般的にブートストラップローダと呼ぶ。

http://i.gyazo.com/bcb1aa5c68cddc06e675872b4cdc46ef.png

PBRに制御が移行すると、そのPBRのプログラムコードが動作。このPBRにあるプログラムコードが IPL(Initial Program Loader)と呼ばれるもので、OSを起動させるためのブートローダの残りの機能を呼び出す機能をもつ。

MBRやPBRは512バイトと非常に小さな領域しかもっていない。そのなかの一部であるIPLのデータサイズはさらに小さい。この小さなデータにOSを起動させるブートローダのプログラムを格納することは困難。そのためIPLはブートローダの一部のプログラムコードを持ち、ブートローダの残りに機能はPBRの後続セクタに置くかたちになっています。IPLから呼び出されたブートローダが後続のOSのファイルを読み込んでいき、最終的にOSが起動していくことになるようです。

Linuxのデフォルトのブートローダ

現状では、LILOLInux LOader)とGRUB(GRand Unified Bootloader)が採用。LILOGRUBなどのブートローダの役目はOSの本体である、カーネルをロードする。この 2つはブートローダという点においては同じ物ですが、それぞれカーネルのロードまでの工程が異る。

LILOLInux LOader)

LILOは古くからLinuxで利用されてきたブートローダ。特徴としてはカーネルの位置情報をLILO自身内部に情報として持ち、その情報からカーネルをロードするというもの。LILOファイルシステムを認識しないため、カーネルの位置をHDDの物理的な位置情報で判断。この物理的な位置情報をブロックリストという。 LILOはこのブロックリストを自身の内部に保持、ブロックリストを参照してカーネルをロードする。そのためLILOは「ブロックリスト参照型」のブートローダといわれる。

GRUB(GRand Unified Bootloader)

GRUBは高性能ブートローダLILOとはことなる仕組み。GRUBの特徴の1つに、ファイルシステムを認識できることがあげられる。これは、カーネルの位置をファイルパスで指定することができることを意味。このようなタイプを「ファイルシステム認識型」。

VFS(Virtual File System)について

LinuxなどのUNIX系OSではファイルに関する概念が基本的に同じで、細部の実装がことなるという構造。データというものを、人間に認識できるもの、わかりやすいものにするため、ファイルというものに抽象化、可視化し、データを永続的に管理しやすくするという役目を持つのが、ファイルシステムの基本的な考え方らしいです。

Linuxでは全てをファイルとして扱うようになっています。HDD、CD-ROM、マウスなど様々なデバイスもファイルとして扱う仕組み。この仕組みを提供するのがVFSという仮想的なファイルシステムVFSは下位の物理的な媒体を抽象化し、データ、デバイスを含む全てのコンピュータリソースに対して統一的なファイルアクセスという、入出力インターフェイスを提供。さらにVFSにはファイルシステムの抽象化という役割もあり、これによってことなる複数ファイルシステムに対して透過的にアクセスすることが可能。ファイルシステムの種類を意識せずに利用することができる。

http://i.gyazo.com/46eb94662d3955c9d60b4ae2fed5770d.png

マウント

/(ルート)を頂点とした、ディレクトリ構造をもとに、ファイルがマウントされます。通常LinuxではHDDを複数パーティションに分割して、それぞれにファイルシステムを作成。そして各ファイルシステムをディレクトリツリーの/(ルート)以下にマウントすることで利用できるように。このマウントという考え方は重要。ファイルシステムとして利用可能にするためには任意であれ、自動であれマウントすることが必要不可欠。

マウントできるデバイスターゲットはブロックデバイスといわれる、HDD、CD-ROMなどのストレージと呼ばれるディスクドライブ。またマウントしたデバイスの物理的接続解除を行うためには、アンマウントというS/W的接続解除の手続きを行って、物理的接続解除を行う必要があります。アンマウントを行わずに強引に物理的に接続解除をするとデータを破損する危険。

http://i.gyazo.com/4b7c8a975b130e4a6afc7615263406b3.png