Linuxの2次記憶装置

現在のコンピュータはノイマン型と呼ばれ、プログラムと情報は記憶装置の上で平等に扱われる。
そのため、プログラムの実行速度は記憶装置へのアクセス速度に依存する。
少しでも早くプログラムを実行するため、プログラムは通常通電されたコンデンサの集まりであるメモリという領域に配置される。

しかし、この領域は電気が通わなくなると情報が失われるため、永続的に保存を行うことができない。
また、保存する情報量当たりの単価も高いため、大量にコンピュータへ取り付けるのは困難なことである。

そこで、コンピュータは、大容量かつ通電していない間も情報を保存しておける領域として、2次記憶装置を持たせる。


一昔前のIAにおける主流の2次記憶装置は、ハードディスクドライブであった。磁気テープ(DAT)やフロッピー、光ディスク等も利用されたが、読み込み書き込み双方が可能でランダムアクセスがそこそこ早く、また普及も進んでいたため非常に安価であったのが最も大きな要因である。近年ではSSDと呼ばれる媒体にも注目が集まっており、今後広く普及することが予想される。

Linuxでは、IDEのハードディスクドライブとそうでない媒体とを区別し、それぞれ「hd?」、「sd?」と呼んだ。「?」には、ドライブの順番を表すアルファベットが「a」「b」「c」「d」の順番で入る。しかしLinuxカーネル2.6.21からlibataと呼ばれるモジュールが導入され、これらは区別されず統一して「sd?」と表記するようになった。

ハードディスクへのアクセス

ここでは、ハードディスクの概要について述べる。

ハードディスクは、円形のプラッタ上のシリンダと呼ばれる領域に磁気ヘッドを沿わせてデータを読み取る。
シリンダはセクタという領域に分割されており、一定量の情報が記録される。Linuxのブロックは、このセクタを単位としてデータを記録する。

linux_06.gif

ハードディスクは、その仕組み上、正常な読み取りの行えない不良セクタと呼ばれる領域がほぼ確実に存在する。これはディスクの品質に限らず、温度や電源などの環境に強く依存し、避けることはできない。このため、ディスクはリード・ソロモン符号などを用いてエラー訂正を行っている。一昔前までは、不良セクタリストを通じてユーザ領域の確認が行えたが、近年はこれはユーザ側に隠蔽されるようになった。ユーザは、仕様を詳細まで理解することなく利用することが可能となっている。

オペレーティングシステムがハードディスクドライブへアクセスするには、大きく分けて以下の2のモードがある。

  • PIO(Programmed I/O)モード
  • DMA(Direct Memory Access)モード

古くから利用されるのは前者のPIDモードであり、CPUが専用のプログラムを実行してディスク上の情報へアクセスする。しかしこの方法では、低速なディスクへのアクセスが完了するまでの間、CPUは待機する必要がある。そのため、現在はこの課題を解決するDMAモードを利用するのが一般的である。このモードでは、CPUを介さず専用のコントローラを通じてメモリと直接通信を行う。

また、readaheadと呼ばれ、OSの起動時間を短縮するため特定の情報を先読みする機能も存在する。Linux上でこれらの様々な情報を確認するには、コマンド「hdparm」を用いる。
このコマンドは、Linuxのディスクのディバイスドライバでサポートされる様々な制御(ioctl)へのインタフェースを提供するものである。

# hdparm -i /dev/sda

/dev/sda:

 Model=ASUS-JM, FwRev=02.10102, SerialNo=00OS1Q8B0005
 Config={ Fixed }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=63
 BuffType=unknown, BuffSize=unknown, MaxMultSect=1, MultSect=off
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=31522816
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4
 DMA modes:  mdma0 mdma1 mdma2
 UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
 AdvancedPM=no WriteCache=disabled
 Drive conforms to: unknown:  ATA/ATAPI-1,2,3,4,5,6,7

 * signifies the current active mode

オプションは随時追加されているため、非常に多い。また、殆どのオペレーティングシステム上でディスクは抽象化されているため違和感無く動作するように見えるが、このコマンドで指定されるオプションはディスクの仕様と深く結びついている。このため、利用には注意が必要となる。(SCSIのみ有効、IDEのみ有効等、インタフェースによって仕様を分けているようにも思える。)

  • 最終更新:2009-12-16 00:41:17

このWIKIを編集するにはパスワード入力が必要です

認証パスワード